При настройке ЭДО в модуле Диадок от Контур выяснилось, что данный модуль не поддерживает отправку документов, использующихся при работе по схеме интеркампани (Передача товаров между организациями). К счастью, разработчики предусмотрели механизм доработки модуля с помощью подключаемого модуля. Более того, в обработке Контур.Диадок есть генерация шаблона подключаемого модуля с возможностью выбора нужных событий. Также недавно появилась возможность использовать плагины, и один из поставляемых плагинов, генератор подключаемого модуля, позволяет сгенерировать код под определенный сценарий. Таким образом, если шаблон подключаемого модуля создает только заготовку под доработку, то плагин генерирует уже готовый пример, который можно использовать с минимальными доработками.
Основная проблема добавления Передачи товаров в список документов для отправки кроется в том, что в документе в реквизите покупателя находится организация с типом значения справочник Организации. Подключаемый модуль умеет переопределять тип значения для контрагентов, однако не поддерживает составной тип, чтобы в него можно было добавить справочник Организация.
Для того чтобы обойти это ограничение, можно сделать следующее:
- создать контрагента, с реквизитами организации-покупателя;
- добавить для документа Передача товаров между организациями дополнительный реквизит с типом справочник Контрагенты;
- заполнять значение этого реквизита созданным контрагентом.
Чтобы документ появился в списке к отправке нам нужно доработать текст запроса построения списка пакетов на отправку. Для этого используем событие "ПолучитьТекстЗапросаДляСпискаПакетовНаОтправкуПоМассивуВидовПакетов". В шаблоне подключаемого модуля я выбрал это событие с флагом Обработать типовой результат, а уже сам код формирования текста запроса подсмотрел в плагине Генератор подключаемого модуля для сценария 1_Отправка документов- 1_Корректировка пакетов- 1_Изменение текста запроса- Текст запроса построения списка пакетов на отправку (УТ 11).
Получился такой код:
Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
Если ИмяСобытия = "ПодготовитьЭлектронныйДокумент" Тогда
Возврат ПодготовитьЭлектронныйДокумент(Параметры);
КонецЕсли;
КонецФункции
Функция ПолучитьТекстЗапросаДляСпискаПакетовНаОтправкуПоМассивуВидовПакетов(Параметры)
Если ТипЗнч(Параметры) = Тип("Структура") И Параметры.Свойство("Результат_ИМ") Тогда
Если Параметры.МассивВидовПакетов.Найти("ID_УПД") <> Неопределено Тогда
Результат = ДобавитьОбъединениеВТекстЗапроса() + ТекстЗапроса_ПередачаТоваров();
ТекстДляЗамены = "
|" + Результат + "
|
|УПОРЯДОЧИТЬ ПО
|";
Параметры.Результат_ИМ = СтрЗаменить(Параметры.Результат_ИМ, "УПОРЯДОЧИТЬ ПО" , ТекстДляЗамены);
Возврат Параметры.Результат_ИМ;
КонецЕсли;
КонецЕсли;
КонецФункции
Функция ТекстЗапроса_ПередачаТоваров()
Результат =
"ВЫБРАТЬ
| ДокСчетФактура.Ссылка КАК Документ,
| ДокСчетФактура.Номер КАК НомерДокумента,
| ДокСчетФактура.Дата КАК ДатаДокумента,
| ДокСчетФактура.ДокументОснование.Грузополучатель КАК Контрагент,
| ДокСчетФактура.Организация КАК Организация,
| СУММА(ЕСТЬNULL(ЖурналУчетаСчетовФактур.СуммаПоСчетуФактуре, 0)) КАК СуммаДокумента,
| ""ID_УПД"" КАК ВидПакетаID
|ИЗ
| Документ.СчетФактураВыданный КАК ДокСчетФактура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КэшКонтрагентовПоВидамПакетов КАК ВТ_КэшКонтрагентовПоВидамПакетов
| ПО ДокСчетФактура.Организация = ВТ_КэшКонтрагентовПоВидамПакетов.Организация1С
| И ДокСчетФактура.ДокументОснование.Грузополучатель = ВТ_КэшКонтрагентовПоВидамПакетов.Контрагент1С
| И (ВТ_КэшКонтрагентовПоВидамПакетов.ВидПакетаID = ""ID_УПД"")
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтправленныеДокументы КАК ОтправленныеДокументы
| ПО ДокСчетФактура.Ссылка = ОтправленныеДокументы.Документ
| И (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЖурналУчетаСчетовФактур КАК ЖурналУчетаСчетовФактур
| ПО ДокСчетФактура.Ссылка = ЖурналУчетаСчетовФактур.СчетФактура
| И (ЖурналУчетаСчетовФактур.ЧастьЖурнала = ЗНАЧЕНИЕ(Перечисление.ЧастиЖурналаУчетаСчетовФактур.ВыставленныеСчетаФактуры))
|ГДЕ
| ОтправленныеДокументы.Документ ЕСТЬ NULL
| И НЕ ВТ_КэшКонтрагентовПоВидамПакетов.ОтправлятьНепроведенные
| И ДокСчетФактура.Проведен
| И ДокСчетФактура.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И НЕ ДокСчетФактура.Корректировочный
| И НЕ ДокСчетФактура.Исправление
| И ДокСчетФактура.ДокументОснование ССЫЛКА Документ.ПередачаТоваровМеждуОрганизациями
|
|СГРУППИРОВАТЬ ПО
| ДокСчетФактура.Ссылка,
| ДокСчетФактура.Номер,
| ДокСчетФактура.Дата,
| ДокСчетФактура.Организация,
| ДокСчетФактура.ДокументОснование.Грузополучатель";
Возврат Результат;
КонецФункции
Добавлять доп. реквизит в документ я не стал, а использовал реквизит Грузополучатель, т.к. он имеет нужный тип значения, и в нашем случае грузополучатель всегда тот же что и покупатель.
Чтобы документы Передачи товаров между организациями появился в списке на отправку, осталось только заполнить соответствие контрагента в Диадоке.
Теперь нужные документы появились в списке, но их еще нельзя отправить, так как мы не описали механизм заполнения пакета на отправку данными из документа 1с. Для этого мы используем другое событие, «ПодготовитьЭлектронныйДокумент». Здесь также код взял из плагина, из сценария 1_Отправка документов - 2_Подготовка УПД к отправке - 4_Ручной сбор УПД - Ручной сбор УПД (УТ11). В плагине, в описании этого сценария описано как правильно его применять, есть даже ссылка на видео инструкцию. После незначительной доработки сформированного кода, документ Передача товаров заполняется, отправляется и подписывается в модуле Диадок.
Чтобы подключить эту обработку нужно указать её в качестве подключаемого модуля в настройках обработки Контур.Диадок. Тестировалась на платформе 8.3.19 с конфигурацией Управление торговлей 11.4.14.181, версия Контур.Диадок 4.29.2.