Помощь - Поиск - Пользователи - Календарь
Полная версия: Обмен РИБ
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Обмен данными
pal_vas
В управлении торговли 10,3 создал новый план обмена, создал узлы, иерархия узлов 3- х уровневая, обмен данными осуществляется с сортировкой по организации, если изменить обьект на самом верхнем уровне то изменения попадают на второй уровень, но не попадают на самый нижний, 3-й, если правда не перезаписать измененный объект на 2- м уровне, вот код который изпользуется в событии объектов перед записью:

Код
Процедура Обмен(Документ) экспорт 
Если документ.ОбменДанными.Получатели.АвтоЗаполнение и не документ.ОбменДанными.Загрузка
Тогда
ГлавныйУзел = ПланыОбмена.ГлавныйУзел();
Если ГлавныйУзел=Неопределено Тогда //это центральная база

ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Калининград");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000004");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Владивосток");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000002");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("НижнийНовгород");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000006");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("С Петербург");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000009");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Самара");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000008");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Краснодар");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000005");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Екатеринбург");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000003");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Новосибирск");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000007");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
иначе
Если ГлавныйУзел=планыобмена.ОбменФилиалы.НайтиПоНаименованию("Центр") Тогда
ПланОбмена = ПланыОбмена.ОбменФилиалы.НайтиПоНаименованию("Хабаровск");
Если Не ПланОбмена=ПланыОбмена.ОбменФилиалы.ПустаяСсылка() тогда
//В сам себя не отправляем

Если Не ПланОбмена = ПланыОбмена.ОбменФилиалы.ЭтотУзел() тогда
ОрганизацияФил=Справочники.Организации.НайтиПоКоду("000000002");
Если ОрганизацияФил<>Справочники.Организации.ПустаяСсылка() тогда
Если Документ.Организация=ОрганизацияФил тогда
Документ.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
иначе
Документ.ОбменДанными.Получатели.Добавить(ГлавныйУзел);
конецесли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры



подскажите как сделать чтобы все изменения на 1м уровне попадали на 3-й...
pal_vas
(0) 1-й уровень Центр
2-й Владивосток
3-й Хабаровск
pal_vas
Ну неужели никто не сталкивался?!(
pal_vas
Вот код обработки чтения файла:

Код
Процедура Прочитать(Кнопка)
// Вставить содержимое обработчика.

ГлУз=ПланыОбмена.ГлавныйУзел();
Если ГлУз=Неопределено тогда
Файл=ПутьКФайлу+"\Message_МСК_Центр.xml";
Иначе
Файл=ПутьКФайлу+"\Message_Центр_МСК.xml";
КонецЕсли;

Мас=НайтиФайлы(Файл);
Если Мас.Количество()=0 тогда
Предупреждение("На нашли файл");
Иначе
ЗаписьXML=Новый ЧтениеXML;
ЗаписьXML.ОткрытьФайл(Файл);
ЗаписьСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
ЗаписьСообщения.НачатьЧтение(ЗаписьXML);
ПланыОбмена.ПрочитатьИзменения(ЗаписьСообщения);
ЗаписьСообщения.ЗакончитьЧтение();
ЗаписьXML.Закрыть();
КонецЕСли;
сообщить("Чтение завешено");
КонецПроцедуры


Как при чтении сразу регистрировать изменения?
pal_vas
Так правильно?
Код
Процедура Прочитать(Кнопка)
// Вставить содержимое обработчика.
ГлУз=ПланыОбмена.ГлавныйУзел();
Если ГлУз=Неопределено тогда
Файл=ПутьКФайлу+"\Message_ВЛД_Центр.xml";
Иначе
Файл=ПутьКФайлу+"\Message_Центр_ВЛД.xml";
КонецЕсли;

Мас=НайтиФайлы(Файл);
Если Мас.Количество()=0 тогда
Предупреждение("На нашли файл");
Иначе
ЗаписьXML=Новый ЧтениеXML;
ЗаписьXML.ОткрытьФайл(Файл);
ЗаписьСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
ЗаписьСообщения.НачатьЧтение(ЗаписьXML);
Данные = ПрочитатьXML(ЗаписьXML);
Данные.ОбменДанными.Отправитель = ЗаписьСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать();


//ПланыОбмена.ПрочитатьИзменения(ЗаписьСообщения);

ЗаписьСообщения.ЗакончитьЧтение();
ЗаписьXML.Закрыть();
КонецЕСли;
сообщить("Чтение завершено");
КонецПроцедуры

BabySG
Честно говоря, лень код разбирать. Посмотри, как в УПП сделано по организации отбор.

Похожее писал сам (ибо в УПП некоторые моменты не до конца доделаны) - делов там на день.

И не очень понятно, что за сортировка по организации.
pal_vas
Цитата(BabySG @ 23.12.2008, 9:31) *

Честно говоря, лень код разбирать. Посмотри, как в УПП сделано по организации отбор.

Похожее писал сам (ибо в УПП некоторые моменты не до конца доделаны) - делов там на день.

И не очень понятно, что за сортировка по организации.

Сортировка такая что если в любом доке значение реквизита "Организация" = "Москва", тады изменения регистрируются для подчиненного узла "Москва", ну и т.д. для каждого узла....., вчера вроде сделал чтобы изменения попадали на 3-й уровень узлов обмена, регистрирую изменения при чтении файла из главного узла верхнего уровня, но при записи файла обмена из 2-го уровня в 3-й почемуто файл получается оч. большой,.... кто шарит позырьте код что не так то у меня?

Код
Процедура Прочитать(Кнопка)
// Вставить содержимое обработчика.

ГлУз=ПланыОбмена.ГлавныйУзел();
Если ГлУз=Неопределено тогда
Файл=ПутьКФайлу+"Message_ВЛД_Центр.xml";
Иначе
Файл=ПутьКФайлу+"Message_Центр_ВЛД.xml";
КонецЕсли;
Мас=НайтиФайлы(Файл);
Если Мас.Количество()=0 тогда
Предупреждение("На нашли файл");
Иначе
ЗаписьXML=Новый ЧтениеXML;
ЗаписьXML.ОткрытьФайл(Файл);
ЗаписьСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
ЗаписьСообщения.НачатьЧтение(ЗаписьXML);
ПланыОбмена.ПрочитатьИзменения(ЗаписьСообщения);
узел = планыобмена.ОбменФилиалы.НайтиПоНаименованию("Хабаровск");
планыобмена.ЗарегистрироватьИзменения(узел,);
ЗаписьСообщения.ЗакончитьЧтение();
ЗаписьXML.Закрыть();
КонецЕСли;

сообщить("Чтение завершено");
КонецПроцедуры

BabySG
Т.е., как понял, выгрузка по узлам идет в зависимости от организации? Тогда тебе смотреть УПП - там это есть.

Я делал похожее (но не так, как в УПП) - работы действительно на день с отладкой.

И не ищи по наименованию - сделай уел и храни в нем ссылку на организацию.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.