Обмен через Универсальный формат Enterprise Data. Добавление в обмен нового документа

    Обмен через Универсальный формат Enterprise Data. Добавление в обмен нового документа

    Задача актуальна на 27.06.2021, так как 1С еще не доработала формат под ряд документов, связанных с ответственным хранением.

    В редакции 2.4 1С добавила в ERP (КА2, УТ11) документы для учета ответственного хранения (https://its.1c.ru/db/erp24doc#bookmark:shippingtosafekeeping:ShippingToSafekeeping3). Однако, формат не доработан и некоторые документы не включены в формат. В частности, документ «Выкуп товаров хранителем».
    Нам поставлена задача передавать документ «Выкуп товаров хранителем» из ERP в 1С: Бухгалтерия предприятия ред. 3 как документ Реализация с основного склада.

    Разобьем задачу на 2 части.

    1. Необходимо регистрировать документы вида «Выкуп товаров хранителем» в плане обмена. Изначально, данного вида документа в составе регистрируемых данных не было
    2. Необходимо доработать формат и передавать документы вида «Выкуп товаров хранителем» как документ «Реализация товаров и услуг».

    Регистрация документов вида «Выкуп товаров хранителем» в плане обмена

    1. К сожалению, тут придется изменять конфигурацию. Если конфигурация была на полной поддержке — снимать.
    2. Необходимо изменить План обмена «СинхронизацияДанныхЧерезУниверсальныйФормат» — Состав. Добавить наш документ в режиме запрета авторегистрации

    3. Отредактировать Подписку на событие СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента — Источник. Поставить галочку на нашем документе.

    4. После сохранения конфигурации нам необходимо отредактировать правила регистрации объектов. Это проще всего с помощью конфигурации Конвертация данных 2. Для этого сначала выгружаем файл с правилами

    5. Теперь загружаем файл в Конвертацию данных 2 и настраиваем правила для нашего документа. Если с этим сложности — погуглите — полно материалов.

    6. Сохраняем настроенные правила в КД2 и загружаем в ERP (тем же способом, что и сохраняли)

    6. Теперь первая часть задачи — готова. Документ «Выкуп товаров хранителем» регистрируется в плане обмена «Обмен через универсальный формат»

    Доработка формата для передачи «Выкуп товаров хранителем»

    Поскольку нам нужно Выкуп товаров хранителем передавать как документ Реализации — задача сильно упрощается, т.к. нам не нужно создавать дополнительные XDTO объекты. Нам нужно лишь прописать дополнительные правила обработки данных, правила конвертации объектов и правила конвертации свойств в коде. Все эти изменения можно прописать в общем модуле МенеджерОбменаЧерезУниверсальныйФормат, но я бы рекомендовал использовать для этих целей расширение. Суть от этого не меняется, переходим к изменению кода.

    1. Изменяем процедуру ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных). Данная процедура заполняет таблицу правил обработки данных и нам необходимо добавить туда свое правило обработки данных
        ДобавитьПОД_Документ_ВыкупТоваровХранителем_Отправка(ПравилаОбработкиДанных);   //Пчелинцев

    2. Добавляем процедуры обработки данных для нашего объекта. В соответствии со стандартами кода — прописываем правила конвертации объектов для нашего объекта — ПравилоОбработки.ИспользуемыеПКО.Добавить(«Документ_ВыкупТоваровХранителем_Отправка»);
    КонецПроцедуры

    Процедура ДобавитьПОД_Документ_ВыкупТоваровХранителем_Отправка(ПравилаОбработкиДанных)
    	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
    	ПравилоОбработки.Имя                     = "Документ_ВыкупТоваровХранителем";
    	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.ВыкупТоваровХранителем;
    	ПравилоОбработки.ПриОбработке            = "ПОД_Документ_ВыкупТоваровХранителем_ПриОбработке";
    	ПравилоОбработки.ОчисткаДанных           = Ложь;
    	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ВыкупТоваровХранителем_Отправка");
    КонецПроцедуры
    
    Процедура ПОД_Документ_ВыкупТоваровХранителем_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
    	
    	ПроверкаЗаполненияРеквизитовОбъектаИБ(ДанныеИБ, КомпонентыОбмена, ИспользованиеПКО);
    	ПередОбработкойДанныхДокумента(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена); //ED
    КонецПроцедуры
    

    3. Редактируем процедуру ИмяПКОДляОбъектаДанных(КомпонентыОбмена, Объект, Организация), которая определяет правило конвертации объекта по имени объекта. В самый конец процедуры вставляем обработку нашего объекта

    ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ВыкупТоваровХранителем") Тогда
        ИмяПКО = "Документ_ВыкупТоваровХранителем_Отправка";
    
    //-Пчелинцев    
    КонецЕсли;

    4. Добавляем правила конвертации объекта для нашего объекта. Я их копировал из документа Реализация товаров и услуг и затем отредактировал глядя на структуру документа. Обратите внимание — объект формата (получатель) — Документ.РеализацияТоваровУслуг

    Процедура ДобавитьПКО_Документ_ВыкупТоваровХранителем_Отправка(ПравилаКонвертации)
    
    	ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    	ПравилоКонвертации.ИмяПКО            = "Документ_ВыкупТоваровХранителем_Отправка";
    	ПравилоКонвертации.ОбъектДанных      = Метаданные.Документы.ВыкупТоваровХранителем;
    	ПравилоКонвертации.ОбъектФормата     = "Документ.РеализацияТоваровУслуг";
    	ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ВыкупТоваровХранителем_Отправка_ПриОтправкеДанных";
    	
    	СвойстваШапки = ПравилоКонвертации.Свойства;
    	ДобавитьПКС(СвойстваШапки, "Автор",                          "Ответственный", , "Справочник_Пользователи");
    	ДобавитьПКС(СвойстваШапки, "БанковскийСчетОрганизации",      "БанковскийСчетОрганизации", , "Справочник_БанковскиеСчетаОрганизаций_Отправка");
    	ДобавитьПКС(СвойстваШапки, "Валюта",                         "Валюта", , "Справочник_Валюты");
    	ДобавитьПКС(СвойстваШапки, "ВалютаВзаиморасчетов",           "ВалютаВзаиморасчетов", , "Справочник_Валюты");
    	ДобавитьПКС(СвойстваШапки, "", "ВидЭД", , 					 "ВидыЭД_Реализация_Отправка");      //Пчелинцев
    	ДобавитьПКС(СвойстваШапки, "Грузоотправитель",               "Грузоотправитель", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Грузополучатель",                "Грузополучатель", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Дата",                           "Дата");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьВыдана",             "ДоверенностьКемВыдана");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьДата",               "ДоверенностьДата");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьЛицо",               "ДоверенностьКомуВыдана");
    	ДобавитьПКС(СвойстваШапки, "ДоверенностьНомер",              "ДоверенностьНомер");
    	ДобавитьПКС(СвойстваШапки, "Комментарий",                    "Комментарий");
    	ДобавитьПКС(СвойстваШапки, "Контрагент",                     "Контрагент", , "Справочник_Контрагенты");
    	ДобавитьПКС(СвойстваШапки, "Менеджер",                       "Продавец", , "Справочник_Пользователи");
    	ДобавитьПКС(СвойстваШапки, "Номер",                          "Номер");
    	ДобавитьПКС(СвойстваШапки, "Организация",                    "Организация", , "Справочник_Организации_Отправка");
    	ДобавитьПКС(СвойстваШапки, "Отпустил",                       "ОтпускПроизвел", , "Справочник_ФизическиеЛица_Отправка");
    "ВидыОперацийРеализацияТоваров_Отправка");
    	ДобавитьПКС(СвойстваШапки, "ЦенаВключаетНДС",                "СуммаВключаетНДС");
    1, "Справочник_ФизическиеЛица_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Договор", 1, "Справочник_ДоговорыКонтрагентов");
    "Документ_ЗаказКлиента_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "КратностьВзаиморасчетов", 1);
    	ДобавитьПКС(СвойстваШапки, "",                               "КурсВзаиморасчетов", 1);
    	ДобавитьПКС(СвойстваШапки, "Подразделение",                  "Подразделение", , "Справочник_Подразделения_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Руководитель", 1, "Справочник_ФизическиеЛица_Отправка");
    	ДобавитьПКС(СвойстваШапки, "",                               "Склад", 1, "Справочник_Склады_Отправка");
    	
    	СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ДополнительныеРеквизиты");
    	ДобавитьПКС(СвойстваТЧ, "", "ЗначениеСвойства", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Свойство", 1,"Справочник_ДополнительныеРеквизиты");
    	
    	СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Товары");
    	ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1,"Справочник_ЕдиницыИзмерения");
    	ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "КоличествоУпаковок", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
    	ДобавитьПКС(СвойстваТЧ, "", "НомерГТД", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "СтавкаНДС", 1,"Перечисление_СтавкиНДС");
    	ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "СуммаНДС", 1);
    	ДобавитьПКС(СвойстваТЧ, "", "Упаковка", 1,"Справочник_Упаковки");
    	ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1,"Справочник_ХарактеристикиНоменклатуры");
    	ДобавитьПКС(СвойстваТЧ, "", "Цена", 1);
    	
    
    КонецПроцедуры
    
    Процедура ПКО_Документ_ВыкупТоваровХранителем_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    	ДанныеXDTO.Вставить("ВидОперации", "РеализацияКлиенту");
    	
    	ТабТовары = ДанныеИБ.Товары.Выгрузить(,"Номенклатура, Характеристика, Количество, КоличествоУпаковок,
    		|Упаковка, Цена, Сумма, СтавкаНДС, СуммаНДС");
    	ТабТовары.Колонки.Добавить("ЕдиницаИзмерения");
    	ЗаполнитьХарактеристикуУпаковкуВТЧ(КомпонентыОбмена, ТабТовары);
    	Для каждого Строка Из ТабТовары Цикл
    	
    		Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;	
    	
    	КонецЦикла; 
    	ДанныеXDTO.Вставить("Склад", Справочники.Склады.НайтиПоНаименованию("Склад ОМ"));
    	ДанныеXDTO.Вставить("Товары", ТабТовары);
    КонецПроцедуры
    

    5. Собственно запускаем обмен — и наслаждаемся победой! Смотрим документ в бухгалтерии -задача решена!

    Выводы

    Доработать формат обмена не слишком сложно, если смотреть уже после сделанной работы. И есть некоторый порог вхождения в данную технологию. Без мучений и как по маслу — у меня пока не получилось.

    И еще — без Отладчика вообще ничего сделать не получиться.

    Сброшу пару ссылок по теме, возможно будут полезны

    ИТС. https://its.1c.ru/db/metod8dev#browse:13:-1:1989:2552:2561

    Инфостарт https://infostart.ru/1c/articles/695523/ и еще https://infostart.ru/1c/articles/847531/

     

    Информация с сайта https://sstud.ru/enterprise-data/?ysclid=lnjh07qjvp786564027

    Tags: , ,