8.х ОБМЕН Обмен РИБ

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем pal_vas, 22 дек 2008.

  1. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    В управлении торговли 10,3 создал новый план обмена, создал узлы, иерархия узлов 3- х уровневая, обмен данными осуществляется с сортировкой по организации, если изменить обьект на самом верхнем уровне то изменения попадают на второй уровень, но не попадают на самый нижний, 3-й, если правда не перезаписать измененный объект на 2- м уровне, вот код который изпользуется в событии объектов перед записью:

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

    подскажите как сделать чтобы все изменения на 1м уровне попадали на 3-й...
  2. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    (0) 1-й уровень Центр
    2-й Владивосток
    3-й Хабаровск
  3. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Ну неужели никто не сталкивался?!(
  4. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Вот код обработки чтения файла:

    Код:
    Процедура Прочитать(Кнопка)
    // Вставить содержимое обработчика.
    
    ГлУз=ПланыОбмена.ГлавныйУзел();
    Если ГлУз=Неопределено тогда
    Файл=ПутьКФайлу+"\Message_МСК_Центр.xml";
    Иначе
    Файл=ПутьКФайлу+"\Message_Центр_МСК.xml";
    КонецЕсли;
    
    Мас=НайтиФайлы(Файл);
    Если Мас.Количество()=0 тогда
    Предупреждение("На нашли файл");
    Иначе
    ЗаписьXML=Новый ЧтениеXML;
    ЗаписьXML.ОткрытьФайл(Файл);
    ЗаписьСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
    ЗаписьСообщения.НачатьЧтение(ЗаписьXML);
    ПланыОбмена.ПрочитатьИзменения(ЗаписьСообщения);
    ЗаписьСообщения.ЗакончитьЧтение();
    ЗаписьXML.Закрыть();
    КонецЕСли;    
    сообщить("Чтение завешено");
    КонецПроцедуры
    
    Как при чтении сразу регистрировать изменения?
  5. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Так правильно?
    Код:
    Процедура Прочитать(Кнопка)
    // Вставить содержимое обработчика.
    ГлУз=ПланыОбмена.ГлавныйУзел();
    Если ГлУз=Неопределено тогда
    Файл=ПутьКФайлу+"\Message_ВЛД_Центр.xml";
    Иначе
    Файл=ПутьКФайлу+"\Message_Центр_ВЛД.xml";
    КонецЕсли;
    
    Мас=НайтиФайлы(Файл);
    Если Мас.Количество()=0 тогда
    Предупреждение("На нашли файл");
    Иначе
    ЗаписьXML=Новый ЧтениеXML;
    ЗаписьXML.ОткрытьФайл(Файл);
    ЗаписьСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
    ЗаписьСообщения.НачатьЧтение(ЗаписьXML);
    Данные = ПрочитатьXML(ЗаписьXML);
    Данные.ОбменДанными.Отправитель = ЗаписьСообщения.Отправитель;
    Данные.ОбменДанными.Загрузка = Истина;
    Данные.Записать();
    
    
    //ПланыОбмена.ПрочитатьИзменения(ЗаписьСообщения);
    
    ЗаписьСообщения.ЗакончитьЧтение();
    ЗаписьXML.Закрыть();
    КонецЕСли;	
    сообщить("Чтение завершено");
    КонецПроцедуры
    
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Честно говоря, лень код разбирать. Посмотри, как в УПП сделано по организации отбор.

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

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

    pal_vas Опытный в 1С

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

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

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Т.е., как понял, выгрузка по узлам идет в зависимости от организации? Тогда тебе смотреть УПП - там это есть.

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

    И не ищи по наименованию - сделай уел и храни в нем ссылку на организацию.

Поделиться этой страницей