Обмен через Универсальный формат 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/

Вам также может понравиться

About the Author: Павел Пчелинцев