Как отредактировать подключаемый модуль Диадок для изменения данных в УПД?

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

При работе с электронным документооборотом через Диадок часто возникает необходимость изменить данные, которые попадают в электронный документ (УПД). Например, нужно программно заполнить должность или ФИО ответственного лица в «подвале» документа, который в терминах формата УПД (приказ №820) относится к сведениям о передаче. Разберем подробно, как найти нужные блоки кода и правильно внести изменения в подключаемый модуль (ПМ), учитывая различия между версиями модуля и методики отладки.

Понимание структуры: Протоконтент против Контента

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

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

Рассмотрим подробнее, как вносить изменения в зависимости от вашей версии модуля.

Вариант 1: Редактирование в версии «Про»

В версии «Про» основная точка входа для кастомизации — функция ПодготовитьЭлектронныйДокумент. Если вам необходимо изменить данные о сотруднике (лице, передавшем товар/услугу), мы можем обратиться к объекту Content сразу после его получения из типовых алгоритмов. Рассмотрим пример кода:


// В функции ПодготовитьЭлектронныйДокумент
Content = ОсновнойМодуль.ТиповойМодуль_ПолучитьКонтент(ТиповойМодульДиадока, РежимУправляемыхФорм, Документ1С, ТипКонтента_XDTO, ДополнительныеПараметры);

// Обращаемся к структуре сведений о передаче
Employee = Content.TransferInfo.Employee;

// Заполняем данные из нашей информационной базы (предположим, у нас есть структура ДанныеСотрудника)
Employee.EmployeePosition = ДанныеСотрудника.Должность; // Должность (до 128 символов)
Employee.Surname = ДанныеСотрудника.Фамилия;           // Фамилия
Employee.FirstName = ДанныеСотрудника.Имя;               // Имя
Employee.Patronymic = ДанныеСотрудника.Отчество;       // Отчество

Важно помнить, что в формате УПД сведения о лице могут находиться в разных блоках. Также возможно добавление кнопки "Отправить по ЭДО" для других документов. Если вы меняете данные продавца-передатчика, ищите путь через TransferInfo.

Вариант 2: Редактирование в версии «Стандарт»

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

Пример изменения данных через Протоконтент (когда выполняется формирование файла типа xml):


// Внутри процедуры обработки события после заполнения контента
Employee = Протоконтент.TransferInfo.Employee;

// Наполняем структуру данными
Employee.EmployeePosition = "Главный бухгалтер";
Employee.Surname = "Иванова";
Employee.FirstName = "Мария";
Employee.Patronymic = "Сергеевна";

Обратите внимание, что если в Протоконтенте нет нужных полей, их нужно инициализировать в соответствии со структурой, ожидаемой модулем интеграции.

Как найти «спрятанный» код в типовых конфигурациях (УТ 11, БП 3.0)

Иногда поиск нужной процедуры превращается в настоящий квест. Выясним, где Диадок прячет логику заполнения УПД для конкретных конфигураций. Модуль интеграции часто представляет собой «матрешку» из вложенных обработок. Проанализируем типичный путь поиска:

  1. Откройте основную обработку Диадок в конфигураторе.
  2. Найдите макет с названием ТиповойМодульДиадокУФ_epf (или похожим). Сохраните его на диск как внешнюю обработку.
  3. В этой сохраненной обработке снова перейдите в макеты. Там может быть макет Модуль_ИнтеграцияУТ11 или Модуль_ИнтеграцияБП3.
  4. Этот макет содержит текстовый модуль или еще одну вложенную обработку. Именно там находится процедура ЗаполнитьКонтентXmlUTD, которая отвечает за маппинг полей 1С в поля электронного документа.

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

Эффективная отладка подключаемого модуля

Многие сталкиваются с проблемой: точка останова во внешней обработке (ПМ) не срабатывает. Разберем по шагам, как заставить отладчик работать:

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

Важные замечания по заполнению ФИО и Должности

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

1. В самой обработке Диадок перейдите в Настройки -> Сотрудники.

2. Найдите нужного пользователя и проверьте, какие права и должности указаны у него там. Если в настройках сотрудника жестко прописана должность, она может перекрывать то, что вы передаете из кода ПМ.

3. Помните, что ФИО подписанта всегда берется из Сертификата электронной подписи. Программно изменить ФИО в блоке подписанта, если оно отличается от данных в сертификате, невозможно по правилам криптографии и регламентам ЭДО.

Таким образом, мы рассмотрели основные механизмы модификации модуля. Рекомендуем всегда начинать с создания ПМ на базе шаблона, предоставляемого поддержкой Диадока, и использовать механизм событий ПослеЗаполненияПротоконтента для максимально безопасного внесения изменений.

← На главную