При работе с электронным документооборотом (ЭДО) через систему «Диадок» часто возникает ситуация, когда главный бухгалтер замечает расхождение: в печатной форме PDF, которую генерирует 1С или сам сервер Диадока, товар называется одним образом, а в XML-файле, который уходит контрагенту, — другим. Рассмотрим детально, почему так происходит, где искать причину в коде и как синхронизировать эти данные с помощью подключаемого модуля.
Прежде всего, проанализируем ситуацию с технической точки зрения. В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» данные для стандартной печатной формы обычно берутся из реквизита НаименованиеДляПечати (Полное наименование) справочника номенклатуры. Однако модуль «Диадок» при формировании структуры XML может обращаться к краткому Наименованию или использовать механизмы переопределения данных, заложенные в интеграционную логику.
Существует три основных сценария, где может возникнуть разрыв данных:
Чтобы понять, что именно попадает в файл выгрузки, нам необходимо заглянуть «под капот» обработки Диадока. Разберем, как включить отладку, так как модуль Диадока представляет собой внешнюю обработку, которая часто загружает другие вложенные обработки.
Для отладки «Подключаемого модуля» выполним следующие действия:
Проанализируем основное место, где происходит модификация данных перед отправкой. В подключаемом модуле Диадока за это отвечает процедура УПД_ИзменитьОсновныеДанныеТовара. Рассмотрим пример кода, который позволяет перехватить данные из табличной части документа и принудительно записать их в структуру отправки:
Процедура УПД_ИзменитьОсновныеДанныеТовара(ДанныеТовара, СтрокаДокумента, ДокументОбъект) Экспорт
// Выясним причину расхождения, проверив, откуда берется наименование
// По умолчанию может использоваться ДанныеТовара.Наименование
Если ЗначениеЗаполнено(СтрокаДокумента.Номенклатура) Тогда
// Принудительно устанавливаем полное наименование для соответствия печатной форме
ДанныеТовара.Наименование = СтрокаДокумента.Номенклатура.НаименованиеПолное;
КонецЕсли;
// Если нужно добавить специфическую информацию (например, характеристики или артикул)
Если ТипЗнч(СтрокаДокумента) = Тип("Число") Тогда
// Иногда в СтрокаДокумента передается индекс, тогда данные берем из ДокументОбъект
ТекущаяСтрокаТЧ = ДокументОбъект.Товары[СтрокаДокумента];
ДанныеТовара.Наименование = ТекущаяСтрокаТЧ.Номенклатура.НаименованиеПолное;
КонецЕсли;
КонецПроцедуры
Важно помнить: изменения в этой процедуре напрямую влияют на то, что будет записано в XML-тег НаимТов. Если ваша цель — полное соответствие с PDF, нужно убедиться, что здесь формируется точно такая же строка, как в макете печатной формы 1С.
Рассмотрим ситуацию, когда в XML данные верные, а в PDF — нет. В модуле Диадока существует два способа формирования PDF. Первый — это генерация на основе XML средствами самого Диадока. Второй — передача своего PDF-файла (печатной формы 1С) вместе с XML.
Если главный бухгалтер требует идеального соответствия, мы можем использовать метод УПД_ПодготовитьДанныеДляПередачи. Выясним, как правильно собрать коллекцию строк:
Процедура УПД_ПодготовитьДанныеДляПередачи(ДанныеДокумента, ДокументОбъект) Экспорт
// Проанализируем структуру ДанныеДокумента.ТабличнаяЧасть
Для Каждого СтрокаТЧ Из ДанныеДокумента.ТабличнаяЧасть Цикл
// Здесь мы можем изменить представление, которое пойдет в визуализацию
// Реквизит ТекстНаименования часто используется для отображения в модуле
СтрокаТЧ.ТекстНаименования = СтрокаТЧ.Наименование;
КонецЦикла;
КонецПроцедуры
Часто программисты сталкиваются с тем, что код изменен, но в Диадоке по-прежнему отображаются старые данные. Это происходит из-за кэширования данных в списке «К отправке». Выясним, как это победить:
Подведем итог: для устранения расхождений необходимо четко определить источник данных в подключаемом модуле. Используйте процедуру УПД_ИзменитьОсновныеДанныеТовара для корректировки XML и процедуру УПД_ПриФормированииТекстаНаименования (если она доступна в вашей версии модуля) для управления визуальной частью. Всегда проверяйте содержимое НаименованиеПолное в справочнике номенклатуры, так как именно оно чаще всего является «камнем преткновения» в спорах между бухгалтерией и программным кодом.