Как найти и доработать логику формирования УПД формата 970 в модуле Диадок для 1С

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

Переход на новый формат электронного УПД (Приказ ФНС № ЕД-7-26/970@), который становится обязательным с апреля 2025 года, заставил многих разработчиков столкнуться с обновленной архитектурой интеграционных модулей Диадок. В современных версиях обработки (начиная с 4.50 и выше) привычная структура была значительно переработана, превратившись в сложную многоуровневую систему («матрешку»). Разберем подробно, как ориентироваться в этой структуре, где искать код формирования XML и как правильно вносить изменения, чтобы они не «слетели» при следующем обновлении.

Архитектура современных модулей Диадок: принцип «матрешки»

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

  1. Ядро (КонтурДиадокЯдро): Основной управляющий модуль. Он отвечает за авторизацию, связь с серверами Диадока и общую логику интерфейса.
  2. Интеграционные модули: Для каждой конкретной конфигурации 1С предусмотрен свой макет. Например, для связки ERP 2.5, КА 2.5 и УТ 11 используется макет КонтурДиадокИнтеграцияУТ11. Именно в этих модулях прописаны правила сопоставления полей документов 1С и реквизитов электронного документа.
  3. Модули генерации: Модули КонтурДиадокГенерацияXML и КонтурДиадокПечатныеФормы отвечают за финальное преобразование собранных данных в формат XML или PDF.

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

Как включить режим отладки и выгрузить модули

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

  1. Откроем обработку Диадок в режиме 1С:Предприятие.
  2. Перейдем в раздел Настройки -> Расширенные настройки.
  3. Найдем пункт Системные -> Тестирование и отладка.
  4. Установим флаг Режим отладки.

После включения этого режима обработка предложит выгрузить содержимое макетов во внешние файлы (.epf). Сохраним их в отдельную папку. Теперь мы можем открыть их через конфигуратор и выполнить глобальный поиск по строке 970.

Поиск места формирования УПД 970

Разберем, где именно происходит сбор данных для нового формата. Если мы работаем с современными версиями обработки, нам необходимо найти макет интеграции, соответствующий нашей конфигурации. Например, в модуле КонтурДиадокИнтеграцияУТ11 (или аналогичном для вашей системы) следует искать специализированную область кода.

Проанализируем структуру процедур:


#Область УПД970
#Область УПД970_СборКонтентаПоДокументамУчета

Процедура ЗаполнитьКонтентInvoice(...) 
    // Здесь происходит основное заполнение данных для Счета-фактуры и УПД
КонецПроцедуры

Если ваша задача — изменить данные, которые уходят в файл (например, адрес грузополучателя, как обсуждалось в сообщении 17), вам нужно вмешаться в процесс до того, как данные будут переданы в модуль КонтурДиадокГенерацияXML. В этот момент данные обычно представлены в виде сложных структур 1С (Структура или Соответствие).

Решение проблемы с кэшированием модулей

Часто разработчики сталкиваются с ситуацией: код в макете изменен, обработка перезагружена, но система продолжает работать по-старому. Это происходит из-за того, что Диадок извлекает макеты во временные файлы операционной системы (папка %TEMP%) и держит их там в течение всего сеанса работы пользователя.

Рассмотрим, как гарантированно применить изменения:

  1. После внесения правов в макет основной обработки и ее сохранения необходимо полностью перезапустить сеанс 1С:Предприятие.
  2. Для надежности можно вручную очистить временную папку пользователя от файлов, начинающихся на Diadoc_ или Kontur_, однако закрытие 1С обычно решает эту проблему автоматически, так как временные объекты освобождаются.

Использование подключаемых модулей (ПМ) — правильный путь доработки

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

Посмотрим на пример логики, которую можно реализовать в подключаемом модуле для изменения адреса грузополучателя:


Функция ПослеЗаполненияДанныхУПД(ДанныеУПД, ДокументОбъект) Экспорт
    
    // Проверяем, что это нужный нам формат
    Если ДанныеУПД.Формат = "970" Тогда
        // Подменяем адрес доставки из фактического адреса контрагента
        ДанныеУПД.Грузополучатель.Адрес = ПолучитьФактАдрес(ДокументОбъект.Контрагент);
    КонецЕсли;
    
    Возврат ДанныеУПД;
КонецФункции

Преимущества использования ПМ:

Подводя итог, отметим: если вы работаете с УПП 1.3 или другими старыми конфигурациями, не ищите логику 970 формата в модулях с суффиксом ОФ. Современный Диадок использует универсальные интеграционные модули, доступ к которым открывается через режим отладки или использование подключаемых модулей. Рекомендуем освоить механизм ПМ, так как это сэкономит десятки часов при регулярных обновлениях форматов ФНС.

← На главную