Почему отличаются наименования товаров в печатной форме и файле выгрузки Диадок в 1С:БП 3.0 и как это исправить

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

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

Разбираемся в причинах расхождений

Прежде всего, проанализируем ситуацию с технической точки зрения. В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» данные для стандартной печатной формы обычно берутся из реквизита НаименованиеДляПечати (Полное наименование) справочника номенклатуры. Однако модуль «Диадок» при формировании структуры XML может обращаться к краткому Наименованию или использовать механизмы переопределения данных, заложенные в интеграционную логику.

Существует три основных сценария, где может возникнуть разрыв данных:

  1. Разные источники данных: Код модуля берет данные из табличной части (ТЧ) документа, но делает это по своим алгоритмам, игнорируя настройки печати в самой 1С.
  2. Визуализация на стороне сервера: XML-файл (формат ФНС) содержит корректные данные, но PDF-представление формируется сервером «Диадок» по своим внутренним шаблонам, которые могут обрезать длинные строки или использовать другие поля.
  3. Кастомизация в «Подключаемом модуле»: Если в компании внедрена доработка через подключаемый модуль (ПМ), данные могут подменяться только в одном месте (например, для XML), оставляя печатную форму без изменений.

Шаг 1. Настройка отладки подключаемого модуля

Чтобы понять, что именно попадает в файл выгрузки, нам необходимо заглянуть «под капот» обработки Диадока. Разберем, как включить отладку, так как модуль Диадока представляет собой внешнюю обработку, которая часто загружает другие вложенные обработки.

Для отладки «Подключаемого модуля» выполним следующие действия:

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

Шаг 2. Анализ работы процедуры УПД_ИзменитьОсновныеДанныеТовара

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


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

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

Важно помнить: изменения в этой процедуре напрямую влияют на то, что будет записано в XML-тег НаимТов. Если ваша цель — полное соответствие с PDF, нужно убедиться, что здесь формируется точно такая же строка, как в макете печатной формы 1С.

Шаг 3. Синхронизация визуализации и данных XML

Рассмотрим ситуацию, когда в XML данные верные, а в PDF — нет. В модуле Диадока существует два способа формирования PDF. Первый — это генерация на основе XML средствами самого Диадока. Второй — передача своего PDF-файла (печатной формы 1С) вместе с XML.

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


Процедура УПД_ПодготовитьДанныеДляПередачи(ДанныеДокумента, ДокументОбъект) Экспорт
    
    // Проанализируем структуру ДанныеДокумента.ТабличнаяЧасть
    Для Каждого СтрокаТЧ Из ДанныеДокумента.ТабличнаяЧасть Цикл
        
        // Здесь мы можем изменить представление, которое пойдет в визуализацию
        // Реквизит ТекстНаименования часто используется для отображения в модуле
        СтрокаТЧ.ТекстНаименования = СтрокаТЧ.Наименование;
        
    КонецЦикла;
    
КонецПроцедуры

Шаг 4. Особенности работы с кэшированием

Часто программисты сталкиваются с тем, что код изменен, но в Диадоке по-прежнему отображаются старые данные. Это происходит из-за кэширования данных в списке «К отправке». Выясним, как это победить:

Итоговые рекомендации

Подведем итог: для устранения расхождений необходимо четко определить источник данных в подключаемом модуле. Используйте процедуру УПД_ИзменитьОсновныеДанныеТовара для корректировки XML и процедуру УПД_ПриФормированииТекстаНаименования (если она доступна в вашей версии модуля) для управления визуальной частью. Всегда проверяйте содержимое НаименованиеПолное в справочнике номенклатуры, так как именно оно чаще всего является «камнем преткновения» в спорах между бухгалтерией и программным кодом.

← На главную