Разработка и Конфигурация · 13 мин
Как отладить подключаемый модуль Диадок в 1С
Как отладить подключаемый модуль Диадок в 1С: включение отладки внешних обработок, точки останова, типовые ошибки, проверка результата и ограничения.
Подключаемый модуль Диадок — это внешняя обработка 1С, через которую основной модуль ЭДО вызывает прикладную логику конкретной конфигурации: заполнение документов, сопоставление контрагентов, обработку событий. Когда документ заполняется неправильно или событие не срабатывает, причина почти всегда находится в коде этого модуля, и без отладки найти её сложно — модуль выполняется в контексте вызова из основной обработки, а не сам по себе.
Сложность отладки подключаемого модуля в том, что он загружается динамически: основной модуль Диадок создаёт его объект программно и вызывает экспортные функции по имени. Поэтому точку останова, поставленную «вслепую», легко пропустить, а ошибки в динамических вызовах выглядят как «метод не обнаружен» без указания реального места сбоя.
Ниже разобран рабочий порядок действий: как подготовить конфигуратор и модуль Диадок к отладке, как заставить отладчик останавливаться внутри внешней обработки, какие функции проверять в первую очередь и как отличить ошибку в своём коде от ошибки в данных или в самом модуле ЭДО.
Как устроен подключаемый модуль и почему его сложно отлаживать
Основной модуль Диадок (обработка интеграции с ЭДО) при инициализации загружает подключаемый модуль из указанного файла или из хранилища настроек и получает его объект. Дальше все обращения идут через конструкции вида «Выполнить» или через вызов экспортных методов объекта обработки. Из-за этого стек вызовов в момент ошибки показывает основной модуль, а реальный проблемный код находится в подключаемом.
Вторая особенность — контекст исполнения. В зависимости от настроек и версии модуля Диадок часть функций выполняется на клиенте, часть — на сервере. Если точка останова стоит в серверной функции, а отладка сервера не включена, отладчик просто пройдёт мимо, и создаётся впечатление, что функция вообще не вызывается.
Третья особенность — кэширование. Диадок может кэшировать загруженный модуль в рамках сеанса: после исправления файла изменения не подхватываются, пока не перезапущен сеанс или не перевыбран модуль в настройках. Это частая причина ситуации «я всё исправил, а ошибка осталась».
Подготовка: включение отладки и проверка окружения
Сначала убедитесь, что отладка разрешена на уровне сеанса. В конфигураторе откройте «Отладка → Подключение» и проверьте, что доступен нужный тип подключения — обычно требуются и толстый/тонкий клиент, и сервер 1С. Для серверной отладки в клиент-серверном варианте служба агента сервера должна быть запущена с ключом отладки; в файловом варианте достаточно запуска из конфигуратора.
Далее определите, какой именно файл модуля реально используется. В настройках модуля Диадок посмотрите путь к подключаемому модулю: это может быть файл на диске, обработка в дополнительных отчетах и обработках или модуль, встроенный в поставку. Отлаживать нужно именно тот экземпляр, который загружается, — правки в «другой копии» файла ничего не дадут.
Проверьте права: у пользователя, под которым запускается отладка, должны быть права на запуск внешних обработок и на те объекты, к которым обращается модуль (документы, справочники, регистры). Иначе вместо отладки логики вы получите ошибки доступа, не связанные с исходной проблемой.
Запуск отладки внешней обработки по шагам
Базовый сценарий выглядит так. Запустите сеанс 1С в режиме отладки из конфигуратора («Отладка → Начать отладку») или подключитесь к уже запущенному сеансу через «Отладка → Подключение». Затем в конфигураторе откройте файл подключаемого модуля через «Файл → Открыть», перейдите в модуль объекта обработки и поставьте точки останова в нужных функциях.
После этого в пользовательском сеансе выполните действие, которое приводит к вызову модуля: откройте документ в Диадоке, нажмите «Заполнить», «Подписать и отправить» или вызовите нужное событие. Когда основной модуль дойдёт до вызова вашей функции, отладчик остановится на точке останова — дальше доступны пошаговое выполнение, просмотр переменных через «Вычислить выражение» и табло.
Если остановки не происходит, проверьте три вещи: точка останова стоит в том файле, который реально загружен; функция действительно вызывается при данном действии (некоторые события срабатывают только для определённых типов документов или статусов); отладка включена для того контекста (клиент/сервер), где исполняется код.
- 1В конфигураторе включите отладку и проверьте подключение нужных типов сеансов
- 2Запустите 1С в режиме отладки или подключитесь к сеансу
- 3Откройте файл подключаемого модуля через «Файл → Открыть»
- 4Поставьте точки останова в целевых экспортных функциях
- 5В сеансе выполните действие, вызывающее модуль (заполнение, отправка, событие)
- 6В момент останова проверьте входные параметры через «Вычислить выражение»
- 7Пройдите код по шагам и зафиксируйте место расхождения с ожиданием
Что проверять в первую очередь внутри модуля
Начинайте с входных параметров. Большинство функций подключаемого модуля получают параметры от основного модуля — структуры с данными документа, идентификаторы, ссылки. Через «Вычислить выражение» проверьте состав и значения: часто проблема не в логике функции, а в том, что ей передали незаполненное поле или значение неожиданного типа.
Затем проверьте возвращаемое значение. Основной модуль интерпретирует результат строго: если функция должна вернуть структуру с определёнными ключами, отсутствие ключа или значение другого типа приведёт к ошибке уже в вызывающем коде. Полезно поставить точку останова на строке «Возврат» и посмотреть итоговый объект целиком.
Отдельно проверьте обращения к данным ИБ: запросы, получение ссылок по идентификаторам, поиск контрагентов и номенклатуры. Типичный сценарий — сопоставление не находит элемент, функция возвращает пустую ссылку, а дальше при заполнении документа возникает ошибка вроде «Поле объекта не обнаружено» или документ уходит с пустыми реквизитами.
Контекст клиент/сервер, актуальность загруженного файла, условия вызова события
Точное имя и регистр экспортной функции, наличие слова «Экспорт»
Состав входных параметров и возвращаемой структуры
Перезапуск сеанса или перевыбор модуля в настройках Диадок
Типовые ошибки при отладке подключаемого модуля
Самая частая ошибка — отладка неактуальной версии файла. Разработчик правит один файл, а Диадок загружает другой (например, из каталога на сервере или из дополнительных обработок). Признак: точки останова не срабатывают или срабатывают, но поведение не меняется после правок. Лечение — сверить путь в настройках и перезапустить сеанс после каждого изменения.
Вторая группа ошибок связана с директивами компиляции. Если функция в модуле обработки помечена директивой «&НаКлиенте», а вызывается в серверном контексте (или наоборот), вызов завершится ошибкой. В подключаемом модуле внешней обработки контекст определяется тем, откуда его вызвал основной модуль, поэтому директивы нужно расставлять осознанно, а сомнительные функции — проверять в обоих режимах.
Третья группа — работа с исключениями. Если в модуле ошибки перехватываются через «Попытка...Исключение» без логирования, реальная причина сбоя скрывается, а наружу выходит обобщённое сообщение. На время отладки имеет смысл временно добавить запись подробного текста ошибки в журнал регистрации или вывод в сообщения, чтобы видеть первоисточник.
Альтернативы точкам останова и проверка результата
Не всегда есть возможность подключиться отладчиком — например, проблема воспроизводится только у пользователя или только на сервере без доступа к конфигуратору. В таких случаях используйте логирование: добавьте в ключевых точках модуля запись в журнал регистрации с параметрами вызова и результатом. После воспроизведения проблемы журнал покажет, до какого места дошло выполнение и с какими данными.
Ещё один рабочий приём — изолированная проверка функции. Если функция не зависит от контекста вызова Диадоком, её можно вызвать напрямую из консоли кода или из тестовой обработки, передав подготовленные параметры. Так проще отладить чистую логику — заполнение структуры, преобразование данных — без запуска всей цепочки ЭДО.
После исправления проверьте результат комплексно: документ заполняется ожидаемыми данными, основной модуль не выдаёт ошибок при вызове, статус документа в Диадоке меняется корректно, повторный вызов не приводит к дублям или рассинхронизации. Проверять стоит минимум на двух-трёх разных документах, включая граничные случаи — пустые поля, нестандартные контрагенты, отменённые документы.
Как проверить результат
Функция отрабатывает без исключений и возвращает ожидаемую структуру
Ошибка «метод не обнаружен» или возврат неполных данных
Все реквизиты соответствуют данным в 1С
Пустые поля, неверные суммы или контрагенты
Результат идентичен, дублей нет
Дубли строк, повторные отправки, изменение статуса
Нет новых ошибок от модуля Диадок
Записи об ошибках в момент вызова модуля
Ограничения и когда привлекать поддержку
Самостоятельная отладка оправдана, пока проблема находится в вашем коде подключаемого модуля: имена функций, логика заполнения, обращения к данным. Если же ошибка возникает уже внутри основного модуля Диадок после корректного возврата из вашей функции, причина может быть в версии самого модуля ЭДО, несовместимости форматов или настройках ящика — здесь правки подключаемого модуля не помогут.
Учитывайте, что основной модуль Диадок обновляется, и состав ожидаемых функций подключаемого модуля может меняться между версиями. После обновления модуля ЭДО имеет смысл сверить свой подключаемый модуль с актуальным шаблоном от поставщика: не появились ли новые обязательные функции и не изменились ли сигнатуры существующих.
При обращении в поддержку подготовьте: версию основного модуля, версию конфигурации и платформы, текст ошибки полностью, скриншот стека вызовов из отладчика и фрагмент кода функции, в которой возникает проблема. Это заметно сокращает время диагностики по сравнению с описанием «не работает заполнение».
Как выбрать действие
Что важно запомнить
Подключаемый модуль Диадок отлаживается как внешняя обработка: отладка включена для нужного контекста, открыт именно тот файл, который загружается, сеанс перезапущен после правок. Начинайте с проверки входных параметров и возвращаемых структур, а на время диагностики не скрывайте исключения. Работайте на копии базы или тестовом ящике, чтобы не нарушить реальный обмен.
Частые вопросы
Почему отладчик не останавливается на точке останова в подключаемом модуле?
Чаще всего причина в одном из трёх: открыт не тот файл, который реально загружает Диадок; код выполняется на сервере, а серверная отладка не включена; функция не вызывается при данном действии из-за условий в основном модуле. Проверьте путь к модулю в настройках, состав подключённых предметов отладки и условия срабатывания события.
Я исправил модуль, но Диадок ведёт себя по-старому. Что делать?
Основной модуль может кэшировать загруженную обработку в рамках сеанса. Перезапустите сеанс 1С, а если не помогло — перевыберите файл модуля в настройках Диадок. Также убедитесь, что правили именно тот файл, который указан в настройках, а не его копию в другом каталоге.
Можно ли отладить модуль без конфигуратора?
Полноценная пошаговая отладка без конфигуратора невозможна, но можно добавить в модуль логирование: запись параметров вызова и результатов в журнал регистрации или в текстовый файл. После воспроизведения проблемы лог покажет, где прерывается выполнение и какие данные приходят на вход.
Ошибка «Метод объекта не обнаружен» при вызове модуля — откуда она?
Основной модуль вызывает функции подключаемого модуля по имени. Ошибка означает, что функция с таким именем не найдена: проверьте точное написание имени с учётом регистра, наличие ключевого слова «Экспорт» в объявлении и то, что функция находится в модуле объекта обработки, а не в модуле формы.
Безопасно ли отлаживать модуль на рабочей базе?
Рискованно. Остановка выполнения в момент отправки или получения документов может прервать операцию и оставить документ в промежуточном статусе. Безопасный вариант — копия базы или тестовый ящик Диадок с отдельной тестовой организацией, где последствия прерывания не критичны.
После обновления модуля Диадок подключаемый модуль перестал работать. В чём причина?
В новых версиях основного модуля может меняться состав ожидаемых функций и их параметры. Сверьте свой модуль с актуальным шаблоном подключаемого модуля для вашей версии: проверьте имена функций, набор параметров и состав возвращаемых структур, затем отладьте изменённые вызовы.