Подскажите с Xdto

  • Автор темы Автор темы Allexei
  • Дата начала Дата начала
A

Allexei

Здравствуйте! Прошу помочь знатоков с XDTO. Вопрос номер один- как выгрузить в XML и загрузить из него несколько документов. Код по выгрузке и загрузке ниже:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код выгрузки"</div></div><div class="sp-body"><div class="sp-content">Функция ВыгрузитьДокумент()

Если ПустаяСтрока(ИмяФайлаXML) ИЛИ ПустаяСтрока(ИмяФайлаXSD) Тогда Сообщить("Не заполнены пути файлов!"); Возврат 0; КонецЕсли;
Если пвВыборТипаВыгрузки= "ВыгрузитьОдинДокумент" И ПоступлениеТоваров.Пустая() Тогда Сообщить("Не выбран документ для выгрузки"); Возврат 0; КонецЕсли;

//1. Для формирования данных выгрузки нам необходима схема конфигурации-приемника.
// Выгрузим ее в файл: в конфигурации-примнике в дереве конфигурации правой кнопочкой по узлу
// "Пакеты XDTO"/Экспорт XML-схемы данных конфигурации. Сохраним схему как ИмяФайлаXSD

//2. Для формирования данных выгрузки создаем фабрику на основе схемы (ИмяФайлаXSD), указав путь
// к файлу схемы конфигурации-приемника:
ЗаписьXML= Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайлаXML);

Пути= Новый Массив;
Пути.Добавить(ИмяФайлаXSD);
Фабрика= СоздатьФабрикуXDTO(Пути);

//3. Создадим тип ТипОбъектаXDTO для помещения в него данных из конфигурации-источника
// А именно тип для документа Приходная накладная и ее табличной части
ТипПриходнаяНакладная= Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "DocumentObject.ПриходнаяНакладная");
ТипСтокаПриходнойНакл= Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "DocumentTabularSectionRow.ПриходнаяНакладная.Товары");

//4. Создадим ОбъектXDTO по типу, и объект 1С конфигурации-источника:
ОбъектПриходнаяНакладная= Фабрика.Создать(ТипПриходнаяНакладная);
ОбъектНоваяСтрокаПН = Фабрика.Создать(ТипСтокаПриходнойНакл);
ПосуплениеТовараОбъект = ПоступлениеТоваров.ПолучитьОбъект();

//5. Заполним ОбъектXDTO выполнив необходимые преобразования данных
//5.1 Заполним реквизиты объекта
ОбъектПриходнаяНакладная.Ref = ПосуплениеТовараОбъект.Ссылка.УникальныйИдентификатор();
ОбъектПриходнаяНакладная.DeletionMark = ПосуплениеТовараОбъект.ПометкаУдаления;
ОбъектПриходнаяНакладная.Date = ПосуплениеТовараОбъект.Дата;
ОбъектПриходнаяНакладная.Number = ПосуплениеТовараОбъект.Номер;
ОбъектПриходнаяНакладная.Posted = ПосуплениеТовараОбъект.Проведен;
ОбъектПриходнаяНакладная.Коментарий = ПосуплениеТовараОбъект.Коментарий;
ОбъектПриходнаяНакладная.Ответственный = ПосуплениеТовараОбъект.Ответственный.УникальныйИдентификатор();

//5.2 Заполним табличную часть
Для Каждого ТекСтрока ИЗ ПоступлениеТоваров.Товары Цикл
ОбъектНоваяСтрокаПН.Номенклатура= ТекСтрока.Номенклатура.УникальныйИдентификатор();
ОбъектНоваяСтрокаПН.Количество = ТекСтрока.Количество;
ОбъектНоваяСтрокаПН.Стоимость = ТекСтрока.Стоимость;
ОбъектНоваяСтрокаПН.Сумма = ТекСтрока.Сумма;
ОбъектПриходнаяНакладная.Товары.Добавить(ОбъектНоваяСтрокаПН);
КонецЦикла;

Фабрика.ЗаписатьXML(ЗаписьXML, ОбъектПриходнаяНакладная);
ЗаписьXML.Закрыть();
КонецФункции


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код загрузки"</div></div><div class="sp-body"><div class="sp-content">Функция ЗагрузитьДокумент()
//Если объект 1С с таким идентификатором будет существовать в базе к моменту прочтения его из файла,
//то возвращаемый методом ПрочитатьXML объект будет не новым (ЭтоНовый()=Ложь), но будет содержать данные полученные из файла;
//если объекта с таким идентификатором нет, то объект будет новым (ЭтоНовый()=Истина), он будет содержать данные из файла и ему
//будет уже назначена ссылка нового.

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайлаXML);
ПриходнаяНакладнаяОбъект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ПриходнаяНакладнаяОбъект.ОбменДанными.Загрузка = Истина;
ПриходнаяНакладнаяОбъект.Записать(РежимЗаписиДокумента.Запись);
ЧтениеXML.Закрыть();
КонецФункции
И вопрос номер два. В приведенном выше коде номенклатура в базу приемник попадает по иникальному идентификаторы, а как быть если в базе приемнике не совпадают ИУД-ы, но совпадает наименование и код?
 
С несколькими документами разобрался, может есть кто подскажет как перегрузить номенклатуру по коду?
 
Делаю для себя. Через конвертацию не хочу. Хочется именно через XDTO.Пока остановился только на том что загрузка будет как для простого XML...
 
Вам говорят где посмотреть можно реализацию механизмов загрузки/выгрузки в том числе и через xml. Хочется свой велосипед? удачи :)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab