Как заполнить поле ИнфПолФХЖ2 в модуле Диадока для вывода ГТД в УКД?

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

При работе с электронным документооборотом (ЭДО) через модуль Диадока программисты часто сталкиваются с необходимостью кастомизации стандартных печатных форм — для упрощения этой задачи есть модуль полноценного электронного документооборота ЭДО для 1С. Одной из самых распространенных задач является вывод номеров ГТД и страны происхождения в Универсальном корректировочном документе (УКД). Сложность заключается в том, что формат ФНС для УКД, в отличие от основного УПД, не содержит жестко заданных полей для этих данных. Рассмотрим, как решить эту задачу с помощью заполнения информационного поля ИнфПолФХЖ2.

Почему ГТД не выводится стандартными средствами?

Проанализируем структуру XML-файла УКД. Согласно требованиям ФНС, корректировочный документ предназначен для фиксации изменения стоимости или количества товаров. Формат файла обмена не предусматривает специальных тегов для номеров таможенных деклараций в табличной части. Однако на практике покупателям часто требуется видеть эти данные в печатной форме (PDF-визуализации) для корректного ведения учета — для автоматизации импорта этих данных есть обработка загрузки документов ЭДО в 1С с заполнением ГТД.

Модуль Диадока использует механизм XSLT-преобразований для формирования печатной формы из XML-данных. Если данных нет в XML, они не появятся на печати. Для передачи произвольных данных в формате предусмотрен блок дополнительных сведений — ИнфПолФХЖ2 (Информационное поле факта хозяйственной жизни). Именно сюда мы и будем записывать данные о ГТД.

Шаг 1. Подготовка и использование подключаемого модуля (ПМ)

Разберем ситуацию: если вы используете "Универсальный" или "Про" модуль Диадока, все изменения необходимо вносить в Подключаемый модуль (ПМ). Это внешняя обработка (обычно с расширением .epf), которая позволяет переопределять стандартную логику формирования документов без изменения основного кода Диадока.

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

Шаг 2. Заполнение ИнформационногоПоля2 в табличной части

Рассмотрим по шагам процесс добавления данных о ГТД в коллекцию дополнительных сведений для каждой строки товара. В подключаемом модуле нам нужно найти место, где формируется структура РасширениеДляСведенияОТоваре. Посмотрим на пример кода, который реализует это заполнение:


// В процедуре заполнения данных о товаре (обычно внутри цикла по строкам документа)
НоваяСтрокаТовара = ДанныеДляПечати.Строки.Добавить();
// ... заполнение основных полей (Наименование, Цена, Количество) ...

// Теперь заполняем дополнительные сведения для этой строки
Если ЗначениеЗаполнено(СтрокаИсточник.НомерГТД) Тогда
    // Создаем структуру для поля ИнфПолФХЖ2
    ЗаписьИнфПол = Новая Структура("Имя, Значение");
    ЗаписьИнфПол.Имя = "НомерГТД";
    ЗаписьИнфПол.Значение = Строка(СтрокаИсточник.НомерГТД);
    
    // Добавляем в коллекцию ИнформационноеПоле2 (именно так оно называется в объектах модуля)
    НоваяСтрокаТовара.ИнформационноеПоле2.Добавить(ЗаписьИнфПол);
КонецЕсли;

Если ЗначениеЗаполнено(СтрокаИсточник.СтранаПроисхождения) Тогда
    ЗаписьСтрана = Новая Структура("Имя, Значение");
    ЗаписьСтрана.Имя = "СтранаПроисхождения";
    ЗаписьСтрана.Значение = Строка(СтрокаИсточник.СтранаПроисхождения);
    
    НоваяСтрокаТовара.ИнформационноеПоле2.Добавить(ЗаписьСтрана);
КонецЕсли;

Важно помнить, что имена полей (Имя) должны соответствовать тем ключам, которые ожидает XSLT-шаблон печатной формы. Обычно для ГТД используются ключи НомерГТД или ТекстИнформационноеПоле1. Если после заполнения данные все равно не появляются, возможно, ваш шаблон требует специфического имени ключа — в этом случае стоит обратиться в техподдержку Диадока для уточнения настроек вашего шаблона.

Шаг 3. Работа с печатными формами через отладку

Как упоминалось в сообщениях на форуме, иногда приходится "расковыривать" внутренние обработки Диадока, такие как ПечатныеФормы. Рассмотрим, как это сделать правильно:

  1. Включите режим отладки в настройках модуля Диадока.
  2. При формировании печатной формы модуль может выгружать временные файлы в директорию %TEMP%. Проанализируйте содержимое этих файлов.
  3. Если вы видите, что модуль выгружает двоичные данные (макеты), вы можете сохранить их как внешние обработки (.epf). Для этого используйте метод ДвоичныеДанные.Записать(ПутьКФайлу).
  4. Откройте полученный файл в Конфигураторе. Там вы найдете макеты XSLT или код формирования визуализации.

Проанализируем ситуацию, когда данные в XML попадают, но не отображаются. Это означает, что стандартная печатная форма Диадока для УКД не "знает", что ей нужно выводить ИнфПолФХЖ2. По умолчанию многие операторы ЭДО выводят дополнительные поля только в заголовке документа, а не в строках. Чтобы ГТД отобразилась в каждой строке УКД, вам может потребоваться заказать разработку индивидуальной печатной формы у специалистов Диадока.

Шаг 4. Альтернативный метод — изменение события после формирования структуры

Если вы не хотите глубоко внедряться в логику заполнения строк, можно использовать событие ПослеФормированияСтруктурыЭлектронногоДокумента. В этот момент у вас уже есть готовый объект документа со всеми строками, и вы можете пробежать по ним циклом, добавляя нужные узлы.


Процедура ПослеФормированияСтруктурыЭлектронногоДокумента(ОбъектЭД, ИсточникДанных) Экспорт
    // Проверяем, что это УКД
    Если ТипЗнч(ОбъектЭД) = Тип("Структура") И ОбъектЭД.ТипДокумента = "УКД" Тогда
        Для Каждого СтрокаТовара Из ОбъектЭД.ТабличнаяЧасть Цикл
            // Ищем данные в исходном документе 1С (ИсточникДанных)
            // И добавляем в коллекцию ИнформационноеПоле2
            НовыйЭлемент = СтрокаТовара.ИнформационноеПоле2.Добавить();
            НовыйЭлемент.Имя = "НомерГТД";
            НовыйЭлемент.Значение = "10005030/121223/0001234"; 
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Этот метод хорош тем, что он отделяет логику формирования основного XML от логики добавления "визуальных" полей, что упрощает дальнейшее обновление модуля Диадока.

Резюме

Подведем итог: для вывода ГТД в УКД через Диадок не нужно пытаться найти стандартные поля ГТД в структуре корректировки — их там нет по формату ФНС, но решить проблему поможет обработка формирования XML УПД и УКД для Диадока с ГТД. Правильный путь — использование коллекции ИнформационноеПоле2 (которая в XML превращается в ИнфПолФХЖ2) внутри табличной части документа. Реализуется это через Подключаемый модуль, что позволяет сохранить обновляемость основной конфигурации и самого модуля ЭДО. Помните, что визуальное отображение этих данных в PDF напрямую зависит от настроек XSLT-шаблона на стороне сервера Диадока.

← На главную