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

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

Как отладить расширение в 1С: практическое руководство

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

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

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

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

Подготовка: что проверить перед началом отладки

Прежде чем запускать отладчик, убедитесь, что расширение действительно подключено к информационной базе и активно. Откройте в режиме «1С:Предприятие» раздел «Администрирование» → «Печатные формы, отчеты и обработки» → «Расширения» (в некоторых конфигурациях путь отличается) и проверьте, что у расширения установлен флажок «Используется». Если расширение добавлено неактивным, его код просто не исполняется, и точки останова не сработают.

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

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

Запуск отладчика и точки останова

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

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

Порядок запуска отладки расширения
  1. 1
    Откройте конфигуратор и убедитесь, что расширение сохранено и обновлено в базе
  2. 2
    Проверьте, что в режиме предприятия расширение активно и подключено
  3. 3
    Установите точку останова (F9) в нужной строке модуля расширения
  4. 4
    Нажмите F5 для запуска отладки или подключитесь к работающему сеансу
  5. 5
    Воспроизведите действие пользователя, вызывающее код
  6. 6
    В момент остановки изучите переменные через табло (Shift+F9) и стек вызовов

Во время остановки используйте табло (Shift+F9) для просмотра значений переменных и выражений, окно «Стек вызовов» для понимания, откуда пришло управление, и «Шаг через» (F10), «Шаг в» (F11), «Шаг из» (Shift+F11) для построчного прохода. Именно стек вызовов чаще всего показывает, почему вместо вашего обработчика выполнился другой код.

Отладка серверного кода расширения

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

Проверить режим можно в конфигураторе: «Сервис» → «Параметры» → вкладка с настройками отладки. Там же указывается протокол отладки (по HTTP или по TCP) — он должен совпадать с настройкой запуска сервера. Если точки останова в серверных процедурах игнорируются, а клиентский код останавливается нормально, почти наверняка сервер работает без отладочного режима.

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

text
ragent.exe -debug -debugProtocol tcp

Отладка обработчиков и заимствованных методов

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

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

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

Типичные ошибки при отладке расширений
01
Отладка старой версии: расширение изменено, но сеанс не перезапущен — точки останова ведут себя непредсказуемо
02
Несколько расширений замещают один метод: выполняется код другого расширения, а не вашего
03
Сервер не в отладочном режиме: серверные точки останова игнорируются без каких-либо сообщений
04
Безопасный режим включён: часть операций (работа с файлами, COM, внешние компоненты) блокируется, и код завершается с ошибкой ещё до вашей точки останова
05
Обработчик не привязан к событию формы: процедура существует, но не вызывается

Отладка фоновых заданий и внешних соединений

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

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

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

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

Как выбрать способ отладки

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

Диагностика без отладчика: журнал регистрации и сообщения

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

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

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

Как проверить, что отладка настроена правильно

Точка останова в клиентском коде
Норма

Выполнение останавливается при воспроизведении действия

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

Точка останова отображается неактивной или игнорируется

Серверный вызов
Норма

Остановка на серверной процедуре, виден стек вызовов

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

Останавливается только клиентский код

Исполняемая версия кода
Норма

В отладчике видны последние изменения модуля

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

Код в отладчике отличается от редактора — сеанс не перезапущен

Вызов обработчика расширения
Норма

Стек вызовов показывает ваш метод расширения

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

В стеке только методы основной конфигурации или другого расширения

Ограничения и безопасный режим

Расширения по умолчанию могут работать в безопасном режиме, который запрещает доступ к файловой системе, COM-объектам, внешним компонентам и ряду других операций. Если код расширения завершается с ошибкой о недопустимой операции, проверьте в свойствах расширения флажок «Безопасный режим» и «Защита от опасных действий». Снимать эти ограничения следует осознанно и только для доверенных расширений.

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

Итог

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

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

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

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

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

Можно ли отладить расширение на рабочей базе пользователя?

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

Как понять, какое из нескольких расширений выполняет метод?

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

Обработчик &После выполняется, а &Вместо — нет. Почему?

Наиболее вероятная причина — другое расширение, применённое позже, тоже замещает этот метод, и исполняется его версия. Реже причина в том, что заимствованный метод изменился после обновления конфигурации, и расширение требует проверки применимости.

Что делать, если после обновления конфигурации расширение перестало работать?

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

Можно ли отлаживать расширение через веб-клиент?

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