Как ограничить список номенклатуры при отправке документов через Контур.Диадок

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с электронным документооборотом (ЭДО) через модуль Контур.Диадок часто возникает ситуация, когда в электронный УПД попадают служебные позиции, которые не должны видеть клиенты. Типичный пример — многооборотная тара (кеги, паллеты, лотки), которая учитывается в 1С для внутреннего контроля, но вызывает ошибки сопоставления на стороне контрагента. Рассмотрим подробно, как решить эту задачу в среде 1С:Управление торговлей 11.5, используя как настройки системы, так и программные методы.

Анализ причины: почему номенклатура попадает в ЭДО

Прежде чем приступать к правке кода, проанализируем, как 1С и модуль Диадока взаимодействуют друг с другом. В программе 1С:Управление торговлей 11.5 номенклатура может разделяться по типам. Если позиция заведена с типом Товар, она безусловно попадает в табличную часть «Товары». Если же используется тип Тара, то поведение документа зависит от настроек залога.

Разберем ситуацию, описанную в практике: в документах реализации кеги иногда отображаются в ЭДО, а иногда — нет. Выясним причину этого поведения. В УТ 11.5 в разделе Дополнительно документа реализации есть флаг Вернуть многооборотную тару. Если при этом не установлена галочка Требуется залог за тару, такая номенклатура фиксируется в отдельной табличной части документа. Модуль Диадока при формировании XML-файла обращается к данным документа 1С. Если в настройках маппинга модуля указано «собирать данные из всех табличных частей», тара будет включена в состав отправляемого файла.

Способ 1. Настройка механизма учета тары в 1С

Проанализируем настройки самой программы 1С. Это самый «чистый» способ, не требующий вмешательства в программный код. Если ваша цель — исключить тару, которая передается без перехода права собственности и без залога, выполним следующие шаги:

  1. Проверим Вид номенклатуры. Убедимся, что для кег или паллет установлен тип Тара.
  2. Посмотрим настройки договора с контрагентом. В ряде случаев параметры передачи тары определяются именно там.
  3. Обратим внимание на заполнение документа Реализация товаров и услуг. Если позиции тары добавлены как «строки сверх заказа» или через механизм автоматического дополнения, проверьте статус залога. Как показывает практика, документы без установленного залога могут игнорироваться модулями ЭДО, если это корректно настроено в правилах заполнения.

Способ 2. Использование файла внешних событий Диадока

Если настройки учета не помогают и номенклатура все равно «пролезает» в ЭДО, перейдем к техническому решению. Рассмотрим архитектуру современных модулей Диадока (версии 4.x и выше). Они состоят из «Ядра» и интерфейсной части. Править само ядро не рекомендуется, так как это заблокирует возможность легкого обновления модуля.

Правильный путь — использование механизма внешних событий. Разберем по шагам, как это реализовать:

Найдем в настройках модуля Диадок поле для подключения внешней обработки событий. Обычно это файл с расширением .epf, в котором прописывается кастомная логика. Нам необходимо перехватить процедуру заполнения контента документа. Чаще всего это метод OnPrepareMessage или OnFillContent.

Рассмотрим пример логики, которую нужно внедрить в процедуру обработки содержимого перед отправкой. Нам нужно обойти коллекцию строк товаров и удалить те, которые соответствуют нашему фильтру (например, по вхождению в группу или по типу номенклатуры).


// Пример логики во внешней обработке событий Диадока
Процедура ПередОтправкойФайла(ДанныеДокумента, Отказ) Экспорт
    
    // Проанализируем табличную часть товаров, подготовленную для XML
    МассивСтрокДляУдаления = Новый Массив;
    
    Для Каждого СтрокаТовара Из ДанныеДокумента.Товары Цикл
        // Проверяем номенклатуру по ссылке или артикулу
        Если Найти(СтрокаТовара.НоменклатураНаименование, "кега") > 0 Тогда
            МассивСтрокДляУдаления.Добавить(СтрокаТовара);
        КонецЕсли;
    КонецЦикла;
    
    // Удаляем лишние позиции, чтобы они не попали в XML
    Для Каждого СтрокаДляУдаления Из МассивСтрокДляУдаления Цикл
        ДанныеДокумента.Товары.Удалить(СтрокаДляУдаления);
    КонецЦикла;

КонецПроцедуры

Этот код позволяет сохранить документ в базе 1С в полном виде (для складского учета тары), но при этом сформировать «чистый» электронный документ для клиента.

Способ 3. Модификация формы списка (фильтрация документов)

Иногда задача стоит иначе: не удалять строку из документа, а вообще не показывать документ в списке к отправке, если в нем присутствует определенная номенклатура. Рассмотрим, как это сделать через процедуру ОбновитьСписок, упомянутую в обсуждении.

В модуле Диадока за вывод списка документов отвечает механизм компоновки данных или динамический список. Чтобы внедрить свой фильтр, найдем процедуру, отвечающую за обновление отображаемых данных на форме (например, ОбновитьСписокДокументов). Нам нужно добавить условие отбора.

Рассмотрим пример изменения запроса динамического списка:


// Добавление отбора в динамический список на форме Диадока
ЭлементОтбора = СписокДокументов.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
// Здесь должен быть запрос, подбирающий документы с запрещенной номенклатурой
ЭлементОтбора.ПравоеЗначение = ПолучитьСписокДокументовСТарой(); 
ЭлементОтбора.Использование = Истина;

Важный нюанс: такой подход «скроет» весь документ целиком. Если в реализации есть и товар, и тара, документ просто пропадет из очереди отправки Диадока, что может привести к пропускам в документообороте. Поэтому Способ 2 (удаление строк из контента) является более предпочтительным.

Рекомендации по фискальной безопасности

Проанализируем ситуацию с точки зрения законодательства. Помните, что согласно требованиям ФНС (Приказ 820@), электронный документ должен быть эквивалентен бумажному. Если вы печатаете ТОРГ-12 с кегами, а в ЭДО отправляете УПД без них — это создает налоговые риски при проверках.

Однако, если тара является возвратной и передается без перехода права собственности, ее можно передавать в электронном УПД в качестве информационных строк. Это специальные поля в XML-структуре Диадока, которые не учитываются в итоговых суммах и НДС, но позволяют контрагенту видеть информацию о переданных емкостях. Выясним у разработчиков или в документации Диадока, как сопоставить поля 1С с информационными полями ИнфПолФХЖ1 в формате УПД.

Подведем итог: наиболее эффективным решением является использование обработки внешних событий. Это позволит программно очищать структуру данных перед генерацией XML, не затрагивая типовые механизмы 1С и обеспечивая стабильность работы модуля при обновлениях.

← На главную