Как убрать характеристику номенклатуры при отправке документов через Диадок и отладить модуль интеграции?

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

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

В этой статье мы подробно разберем, как найти и изменить код, отвечающий за формирование табличной части документа, и какие методы использовать для отладки, когда точки останова не работают.

Анализ архитектуры модуля Диадок: почему отладка не работает?

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

Для отладчика 1С этот код является «чужим» и временно созданным. Как справедливо заметили на форуме, Диадок как бы "заново" создает модули при каждом открытии. Из-за этого точки останова, которые вы могли бы попытаться установить в коде, выгруженном из макета, просто не срабатывают. Система не связывает открытый вами для редактирования файл с тем кодом, который исполняется в памяти в данный момент. Это ключевая причина, по которой приходится искать обходные пути для отладки.

Способ 1: Прямое редактирование запроса в макете (быстрое решение)

Этот метод является самым быстрым способом решить поставленную задачу, хотя и требует ручного вмешательства при каждом обновлении модуля Диадок. Суть заключается в том, чтобы найти и изменить SQL-запрос, который собирает данные для табличной части документа.

Рассмотрим пошаговый процесс:

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

Внутри этой процедуры находится текст запроса. Ваша задача — найти строку, где выбирается поле Характеристика, и заменить ее на выбор пустой строки.

Посмотрим на пример кода. Вот как выглядел исходный запрос:


Процедура СформироватьЗапрос_ДанныеТЧ_ПоРеализацияТоваровУслуг(Запрос, КолонкаКодаТовара, СсылкаНаДокумент)
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Подзапрос.НомерСтроки КАК НомерСтроки,
    |    Подзапрос.Номенклатура КАК Номенклатура,
    |    Подзапрос.НоменклатураПредставление КАК НоменклатураПредставление,
    |    Подзапрос.Характеристика КАК Характеристика,
    |    Подзапрос.Серия КАК Серия,
    |    Подзапрос.КодНоменклатуры КАК КодНоменклатуры,
    |    Подзапрос.Количество КАК Количество,
    |    Подзапрос.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
    |    Подзапрос.Цена КАК Цена,
    |    ...";
КонецПроцедуры

А вот как он выглядит после модификации. Мы комментируем строку с характеристикой и добавляем новую, которая всегда возвращает пустую строку под тем же псевдонимом:


Процедура СформироватьЗапрос_ДанныеТЧ_ПоРеализацияТоваровУслуг(Запрос, КолонкаКодаТовара, СсылкаНаДокумент)
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Подзапрос.НомерСтроки КАК НомерСтроки,
    |    Подзапрос.Номенклатура КАК Номенклатура,
    |    Подзапрос.НоменклатураПредставление КАК НоменклатураПредставление,
    //    |    Подзапрос.Характеристика КАК Характеристика, // Старую строку комментируем
    |    """" КАК Характеристика, // Добавляем новую, возвращающую пустую строку
    |    Подзапрос.Серия КАК Серия,
    |    Подзапрос.КодНоменклатуры КАК КодНоменклатуры,
    |    Подзапрос.Количество КАК Количество,
    |    Подзапрос.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
    |    Подзапрос.Цена КАК Цена,
    |    ...";
КонецПроцедуры
  1. Загрузка изменений обратно. После внесения изменений сохраните файл. Теперь выполните действия в обратном порядке: загрузите измененный модуль Модуль_ИнтеграцияУТ11 обратно во вложенный макет, а затем сохраните и загрузите основной макет ТиповойМодульДиадокУФ обратно в обработку в конфигурации.

Важный момент: Иногда изменения не применяются сразу из-за кэширования. Может потребоваться перезапуск 1С или очистка кэша. В некоторых случаях, как было отмечено на форуме, изменения подхватываются после нажатия кнопки "Выгрузить обработки" на основной форме Диадока.

Способ 2: Использование «Подключаемого модуля» (рекомендованный)

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

Рассмотрим шаги для его настройки:

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

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

Отладка: как жить без точек останова?

Мы выяснили, что стандартная отладка не работает. Как же тогда проверять код и значения переменных? Основной метод, подтвержденный опытом многих разработчиков, — это логирование с помощью диагностических сообщений.

Метод Сообщить():

Самый простой способ — вставлять в ключевые точки кода оператор Сообщить(). Это позволит вам видеть, выполняется ли определенный участок кода, и какие значения принимают переменные в этот момент.

Например, чтобы проверить, какая номенклатура обрабатывается в цикле, можно написать так:


Для Каждого СтрокаТЧ из ТабличнаяЧасть Цикл
    Сообщить("Обрабатывается номенклатура: " + СтрокаТЧ.Номенклатура + ", Характеристика: " + СтрокаТЧ.Характеристика);
    // ... остальной код ...
КонецЦикла

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

Включение режима отладки Диадок:

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

В заключение, задача по изменению логики модуля Диадок вполне решаема. Главное — понимать особенности его архитектуры и использовать подходящие инструменты. Для быстрых правок подойдет прямое редактирование макета, а для долгосрочных доработок лучше освоить механизм «Подключаемого модуля». А для отладки вашим лучшим другом станет старый добрый оператор Сообщить().

← На главную