К статье
Практический материал

Разработка и Конфигурация · 13 мин

Как отладить подключаемый модуль Диадок в 1С

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

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

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

Ниже разобран рабочий порядок действий: как подготовить конфигуратор и модуль Диадок к отладке, как заставить отладчик останавливаться внутри внешней обработки, какие функции проверять в первую очередь и как отличить ошибку в своём коде от ошибки в данных или в самом модуле ЭДО.

Как устроен подключаемый модуль и почему его сложно отлаживать

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

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

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

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

Сначала убедитесь, что отладка разрешена на уровне сеанса. В конфигураторе откройте «Отладка → Подключение» и проверьте, что доступен нужный тип подключения — обычно требуются и толстый/тонкий клиент, и сервер 1С. Для серверной отладки в клиент-серверном варианте служба агента сервера должна быть запущена с ключом отладки; в файловом варианте достаточно запуска из конфигуратора.

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

Проверьте права: у пользователя, под которым запускается отладка, должны быть права на запуск внешних обработок и на те объекты, к которым обращается модуль (документы, справочники, регистры). Иначе вместо отладки логики вы получите ошибки доступа, не связанные с исходной проблемой.

Запуск отладки внешней обработки по шагам

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

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

Если остановки не происходит, проверьте три вещи: точка останова стоит в том файле, который реально загружен; функция действительно вызывается при данном действии (некоторые события срабатывают только для определённых типов документов или статусов); отладка включена для того контекста (клиент/сервер), где исполняется код.

Порядок действий
  1. 1
    В конфигураторе включите отладку и проверьте подключение нужных типов сеансов
  2. 2
    Запустите 1С в режиме отладки или подключитесь к сеансу
  3. 3
    Откройте файл подключаемого модуля через «Файл → Открыть»
  4. 4
    Поставьте точки останова в целевых экспортных функциях
  5. 5
    В сеансе выполните действие, вызывающее модуль (заполнение, отправка, событие)
  6. 6
    В момент останова проверьте входные параметры через «Вычислить выражение»
  7. 7
    Пройдите код по шагам и зафиксируйте место расхождения с ожиданием

Что проверять в первую очередь внутри модуля

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

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

Отдельно проверьте обращения к данным ИБ: запросы, получение ссылок по идентификаторам, поиск контрагентов и номенклатуры. Типичный сценарий — сопоставление не находит элемент, функция возвращает пустую ссылку, а дальше при заполнении документа возникает ошибка вроде «Поле объекта не обнаружено» или документ уходит с пустыми реквизитами.

Точка останова не срабатываетКод не выполняется или выполняется в другом контексте

Контекст клиент/сервер, актуальность загруженного файла, условия вызова события

Ошибка «Метод не обнаружен»Имя функции не совпадает с ожидаемым основным модулем

Точное имя и регистр экспортной функции, наличие слова «Экспорт»

Функция вызывается, но результат неверныйПроблема в логике или во входных данных

Состав входных параметров и возвращаемой структуры

Изменения в файле не подхватываютсяМодуль закэширован в сеансе

Перезапуск сеанса или перевыбор модуля в настройках Диадок

Типовые ошибки при отладке подключаемого модуля

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

Вторая группа ошибок связана с директивами компиляции. Если функция в модуле обработки помечена директивой «&НаКлиенте», а вызывается в серверном контексте (или наоборот), вызов завершится ошибкой. В подключаемом модуле внешней обработки контекст определяется тем, откуда его вызвал основной модуль, поэтому директивы нужно расставлять осознанно, а сомнительные функции — проверять в обоих режимах.

Третья группа — работа с исключениями. Если в модуле ошибки перехватываются через «Попытка...Исключение» без логирования, реальная причина сбоя скрывается, а наружу выходит обобщённое сообщение. На время отладки имеет смысл временно добавить запись подробного текста ошибки в журнал регистрации или вывод в сообщения, чтобы видеть первоисточник.

Типичные ошибки
01
Правка одной копии файла при загруженной другой — изменения не влияют на поведение
02
Отладка без перезапуска сеанса — Диадок использует закэшированный модуль
03
Точки останова только на клиенте при серверном исполнении — отладчик проходит мимо
04
Глухое перехватывание исключений — теряется реальная причина ошибки
05
Отладка на боевом обмене — риск прервать отправку и оставить документ в некорректном статусе

Альтернативы точкам останова и проверка результата

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

Ещё один рабочий приём — изолированная проверка функции. Если функция не зависит от контекста вызова Диадоком, её можно вызвать напрямую из консоли кода или из тестовой обработки, передав подготовленные параметры. Так проще отладить чистую логику — заполнение структуры, преобразование данных — без запуска всей цепочки ЭДО.

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

Контрольные точки

Как проверить результат

Вызов функции из основного модуля
Норма

Функция отрабатывает без исключений и возвращает ожидаемую структуру

Тревожный признак

Ошибка «метод не обнаружен» или возврат неполных данных

Заполнение документа
Норма

Все реквизиты соответствуют данным в 1С

Тревожный признак

Пустые поля, неверные суммы или контрагенты

Повторный вызов
Норма

Результат идентичен, дублей нет

Тревожный признак

Дубли строк, повторные отправки, изменение статуса

Журнал регистрации
Норма

Нет новых ошибок от модуля Диадок

Тревожный признак

Записи об ошибках в момент вызова модуля

Ограничения и когда привлекать поддержку

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

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

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

Маршрут решения

Как выбрать действие

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

Что важно запомнить

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

Частые вопросы

Почему отладчик не останавливается на точке останова в подключаемом модуле?

Чаще всего причина в одном из трёх: открыт не тот файл, который реально загружает Диадок; код выполняется на сервере, а серверная отладка не включена; функция не вызывается при данном действии из-за условий в основном модуле. Проверьте путь к модулю в настройках, состав подключённых предметов отладки и условия срабатывания события.

Я исправил модуль, но Диадок ведёт себя по-старому. Что делать?

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

Можно ли отладить модуль без конфигуратора?

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

Ошибка «Метод объекта не обнаружен» при вызове модуля — откуда она?

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

Безопасно ли отлаживать модуль на рабочей базе?

Рискованно. Остановка выполнения в момент отправки или получения документов может прервать операцию и оставить документ в промежуточном статусе. Безопасный вариант — копия базы или тестовый ящик Диадок с отдельной тестовой организацией, где последствия прерывания не критичны.

После обновления модуля Диадок подключаемый модуль перестал работать. В чём причина?

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