Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда Если ЭлементДанных.Склад <> Склад Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять; КонецЕсли; КонецПроцедуры Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда Если ПланыОбмена.ИзменениеЗарегистрировано(Ссылка, ЭлементДанных) Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; КонецЕсли; КонецЕсли; КонецПроцедуры
Процедура Выгрузка(Элемент) Путь = "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.Прочитать(); Возврат(Документ); КонецФункции Функция РазрешениеКоллизий(Данные) Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда Если Не Данные.ЭтоНовый() Тогда СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт"); Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда Возврат(Ложь); КонецЕсли; КонецЕсли; КонецЕсли; Возврат(Истина); КонецФункции