Задача актуальна на 27.06.2021, так как 1С еще не доработала формат под ряд документов, связанных с ответственным хранением.
В редакции 2.4 1С добавила в ERP (КА2, УТ11) документы для учета ответственного хранения (https://its.1c.ru/db/erp24doc#bookmark:shippingtosafekeeping:ShippingToSafekeeping3). Однако, формат не доработан и некоторые документы не включены в формат. В частности, документ «Выкуп товаров хранителем».
Нам поставлена задача передавать документ «Выкуп товаров хранителем» из ERP в 1С: Бухгалтерия предприятия ред. 3 как документ Реализация с основного склада.
Разобьем задачу на 2 части.
- Необходимо регистрировать документы вида «Выкуп товаров хранителем» в плане обмена. Изначально, данного вида документа в составе регистрируемых данных не было
- Необходимо доработать формат и передавать документы вида «Выкуп товаров хранителем» как документ «Реализация товаров и услуг».
Регистрация документов вида «Выкуп товаров хранителем» в плане обмена
- К сожалению, тут придется изменять конфигурацию. Если конфигурация была на полной поддержке — снимать.
- Необходимо изменить План обмена «СинхронизацияДанныхЧерезУниверсальныйФормат» — Состав. Добавить наш документ в режиме запрета авторегистрации
3. Отредактировать Подписку на событие СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента — Источник. Поставить галочку на нашем документе.
4. После сохранения конфигурации нам необходимо отредактировать правила регистрации объектов. Это проще всего с помощью конфигурации Конвертация данных 2. Для этого сначала выгружаем файл с правилами
5. Теперь загружаем файл в Конвертацию данных 2 и настраиваем правила для нашего документа. Если с этим сложности — погуглите — полно материалов.
6. Сохраняем настроенные правила в КД2 и загружаем в ERP (тем же способом, что и сохраняли)
6. Теперь первая часть задачи — готова. Документ «Выкуп товаров хранителем» регистрируется в плане обмена «Обмен через универсальный формат»
Доработка формата для передачи «Выкуп товаров хранителем»
Поскольку нам нужно Выкуп товаров хранителем передавать как документ Реализации — задача сильно упрощается, т.к. нам не нужно создавать дополнительные XDTO объекты. Нам нужно лишь прописать дополнительные правила обработки данных, правила конвертации объектов и правила конвертации свойств в коде. Все эти изменения можно прописать в общем модуле МенеджерОбменаЧерезУниверсальныйФормат, но я бы рекомендовал использовать для этих целей расширение. Суть от этого не меняется, переходим к изменению кода.
- Изменяем процедуру ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных). Данная процедура заполняет таблицу правил обработки данных и нам необходимо добавить туда свое правило обработки данных
ДобавитьПОД_Документ_ВыкупТоваровХранителем_Отправка(ПравилаОбработкиДанных); //Пчелинцев
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/