| 
 
  Авторизация
                    
                    
                    
                        
                      
                    На сайте: 
 |  | Содержание 
 Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0?
 
 
 
 Процедура Выгрузка(Элемент) Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
 ЗаписьXML = Новый ЗаписьXML();
 ЗаписьXML.ОткрытьФайл(Путь + "выгрузка.xml");
 Узел = ПланыОбмена.Поставка.НайтиПоКоду("Маг1");
 ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
 ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел);
 Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения);
 Пока Выборка.Следующий() Цикл
 Данные = Выборка.Получить();
 Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
 ВыгрузкаРеализации(ЗаписьXML, Данные);
 Иначе // все остальные объекты
 ЗаписатьXML(ЗаписьXML, Данные);
 КонецЕсли;
 КонецЦикла;
 ЗапСообщения.ЗакончитьЗапись();
 ЗаписьXML.Закрыть();
 КонецПроцедуры
 Процедура ВыгрузкаРеализации(ЗаписьXML, Документ)
 ЗаписьXML.ЗаписатьНачалоЭлемента("DocumentObject.ПередачаТовара");
 ЗаписатьXML(ЗаписьXML, Документ.Ссылка.УникальныйИдентификатор(), "Ref", НазначениеТипаXML.Явное);
 ЗаписатьXML(ЗаписьXML, Документ.ПометкаУдаления, "DeletionMark", НазначениеТипаXML.Явное);
 ЗаписатьXML(ЗаписьXML, Документ.ВалютаДокумента, "ВалютаДокумента", НазначениеТипаXML.Явное);
 // Остальные свойства документа.
 // Табличная часть.
 ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
 Для Каждого ТекСтрока Из Документ.Товары Цикл
 ЗаписьXML.ЗаписатьНачалоЭлемента("Row");
 ЗаписатьXML(ЗаписьXML, ТекСтрока.Номенклатура, "Номенклатура", НазначениеТипаXML.Явное);
 ЗаписатьXML(ЗаписьXML, ТекСтрока.Количество, "Количество", НазначениеТипаXML.Явное);
 // Остальные реквизиты табличной части.
 ЗаписьXML.ЗаписатьКонецЭлемента();
 КонецЦикла;
 ЗаписьXML.ЗаписатьКонецЭлемента();
 ЗаписьXML.ЗаписатьКонецЭлемента();
 КонецПроцедуры
 Процедура Загрузка(Элемент)
 Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
 ЧтениеXML = Новый ЧтениеXML();
 ЧтениеXML.ОткрытьФайл(Путь + "выгрузка.xml");
 ЧтСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
 ЧтСообщения.НачатьЧтение(ЧтениеXML);
 ПланыОбмена.УдалитьРегистрациюИзменений(ЧтСообщения.Отправитель, ЧтСообщения.НомерСообщения);
 Пока ВозможностьЧтенияДанных(ЧтениеXML) Цикл
 Данные = ПрочитатьДанные(ЧтениеXML);
 Если РазрешениеКоллизий(Данные) Тогда
 Данные.ОбменДанными.Отправитель = ЧтСообщения.Отправитель;
 Данные.ОбменДанными.Загрузка = Истина;
 Данные.Записать();
 КонецЕсли;
 КонецЦикла;
 ЧтСообщения.ЗакончитьЧтение();
 ЧтениеXML.Закрыть();
 КонецПроцедуры
 Функция ВозможностьЧтенияДанных(ЧтениеXML)
 ТипXML = ПолучитьXMLТип(ЧтениеXML);
 Если ТипXML = Неопределено Тогда
 Возврат Ложь;
 КонецЕсли;
 Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда
 Возврат Истина;
 КонецЕсли;
 Возврат ВозможностьЧтенияXML(ЧтениеXML);
 КонецФункции
 Функция ПрочитатьДанные(ЧтениеXML)
 ТипXML = ПолучитьXMLТип(ЧтениеXML);
 Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда
 Возврат ЧтениеРеализации(ЧтениеXML);
 КонецЕсли;
 Возврат ПрочитатьXML(ЧтениеXML);
 КонецФункции
 Функция ЧтениеРеализации(ЧтениеXML)
 ЧтениеXML.Прочитать();
 // Работа со ссылкой документа.
 ПолученнаяСсылка = ПрочитатьXML(ЧтениеXML);
 Док = Документы.ПоступлениеТоваров.ПолучитьСсылку(Новый УникальныйИдентификатор(ПолученнаяСсылка));
 Документ = Док.ПолучитьОбъект();
 Если Документ = Неопределено Тогда
 Документ = Документы.ПоступлениеТоваров.СоздатьДокумент();
 Документ.УстановитьСсылкуНового(Док);
 Документ.Дата = ТекущаяДата;
 Документ.УстановитьНовыйНомер();
 КонецЕсли;
 Документ.ПометкаУдаления = ПрочитатьXML(ЧтениеXML);
 Документ.ВалютаДокумента = ПрочитатьXML(ЧтениеXML);
 // Табличная часть "Товары.
 // Построчное чтение.
 ЧтениеXML.Прочитать();
 Документ.Товары.Очистить();
 Пока ЧтениеXML.Имя = "Row" Цикл
 // Позиционируемся на узле с номенклатурой.
 ЧтениеXML.Прочитать();
 НоваяСтрока = Документ.Товары.Добавить();
 НоваяСтрока.Номенклатура = ПрочитатьXML(ЧтениеXML);
 НоваяСтрока.Количество = ПрочитатьXML(ЧтениеXML);
 // Читаем конец узла Row.
 ЧтениеXML.Прочитать();
 КонецЦикла;
 // Читаем конец табличной части.
 ЧтениеXML.Прочитать();
 // Читаем конец документа.
 ЧтениеXML.Прочитать();
 Возврат(Документ);
 КонецФункции
 Функция РазрешениеКоллизий(Данные)
 Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда
 Если Не Данные.ЭтоНовый() Тогда
 СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт");
 Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда
 Возврат(Ложь);
 КонецЕсли;
 КонецЕсли;
 КонецЕсли;
 Возврат(Истина);
 КонецФункции
 
 |