Разработка и Конфигурация · 11 мин
Как отладить расширение в 1С: практическое руководство
Как отладить расширение в 1С: настройка отладчика, точки останова, отладка фоновых заданий и веб-сервисов, типичные ошибки и способы их решения.
Расширение в 1С — это механизм, который позволяет добавлять и изменять функциональность конфигурации без снятия её с поддержки. Однако код расширения работает не всегда так, как ожидается: обработчики не вызываются, заимствованные методы ведут себя иначе, а ошибки воспроизводятся только у конкретного пользователя. В таких случаях без отладки не обойтись.
Отладка расширения почти не отличается от отладки основной конфигурации, но имеет несколько важных нюансов: порядок подключения расширений влияет на исполнение кода, аннотации определяют, когда вызовется ваш обработчик, а безопасный режим может блокировать часть операций. Понимание этих особенностей экономит часы поиска проблемы.
Ниже разобран практический процесс: как подключить отладчик, где ставить точки останова, как отлаживать серверный код, фоновые задания и внешние соединения, а также какие ошибки встречаются чаще всего и как их диагностировать.
Подготовка: что проверить перед началом отладки
Прежде чем запускать отладчик, убедитесь, что расширение действительно подключено к информационной базе и активно. Откройте в режиме «1С:Предприятие» раздел «Администрирование» → «Печатные формы, отчеты и обработки» → «Расширения» (в некоторых конфигурациях путь отличается) и проверьте, что у расширения установлен флажок «Используется». Если расширение добавлено неактивным, его код просто не исполняется, и точки останова не сработают.
Второй обязательный шаг — перезапуск сеанса после изменения расширения. Изменения в коде расширения применяются к уже запущенному сеансу не всегда корректно, поэтому после обновления расширения в конфигураторе закройте и заново откройте клиентское приложение. Иначе вы рискуете отлаживать старую версию кода и делать неверные выводы.
Также проверьте порядок применения расширений, если их несколько. Расширения применяются последовательно, и более позднее может переопределять поведение предыдущего. Если ваш метод «замещает» (&Вместо) обработчик, а фактически выполняется код другого расширения, проблема именно в порядке подключения.
Запуск отладчика и точки останова
Базовый сценарий отладки расширения совпадает с отладкой основной конфигурации. В конфигураторе откройте модуль расширения, установите точку останова клавишей F9 или кликом по левому полю редактора, затем нажмите F5 («Начать отладку»). Конфигуратор запустит клиентское приложение в отладочном режиме, и при достижении нужной строки выполнение остановится.
Если клиент уже запущен, подключитесь к нему через меню «Отладка» → «Подключение». В списке доступных предметов отладки выберите нужный сеанс. Обратите внимание на колонку типа предмета отладки: для серверного кода нужен предмет отладки на сервере, иначе точки останова в серверных процедурах не сработают.
- 1Откройте конфигуратор и убедитесь, что расширение сохранено и обновлено в базе
- 2Проверьте, что в режиме предприятия расширение активно и подключено
- 3Установите точку останова (F9) в нужной строке модуля расширения
- 4Нажмите F5 для запуска отладки или подключитесь к работающему сеансу
- 5Воспроизведите действие пользователя, вызывающее код
- 6В момент остановки изучите переменные через табло (Shift+F9) и стек вызовов
Во время остановки используйте табло (Shift+F9) для просмотра значений переменных и выражений, окно «Стек вызовов» для понимания, откуда пришло управление, и «Шаг через» (F10), «Шаг в» (F11), «Шаг из» (Shift+F11) для построчного прохода. Именно стек вызовов чаще всего показывает, почему вместо вашего обработчика выполнился другой код.
Отладка серверного кода расширения
Большая часть логики расширений выполняется на сервере, и здесь есть ключевое требование: сервер 1С должен быть запущен в отладочном режиме. Для файловых баз это происходит автоматически при запуске отладки из конфигуратора. Для клиент-серверного варианта службу агента сервера нужно запускать с параметром отладки.
Проверить режим можно в конфигураторе: «Сервис» → «Параметры» → вкладка с настройками отладки. Там же указывается протокол отладки (по HTTP или по TCP) — он должен совпадать с настройкой запуска сервера. Если точки останова в серверных процедурах игнорируются, а клиентский код останавливается нормально, почти наверняка сервер работает без отладочного режима.
Для включения отладки на сервере службу агента запускают с ключом -debug в строке параметров. После изменения параметров службу перезапускают, что приводит к разрыву сеансов пользователей — планируйте это на нерабочее время или используйте тестовый кластер.
ragent.exe -debug -debugProtocol tcpОтладка обработчиков и заимствованных методов
Специфика расширений — аннотации &Перед, &После и &Вместо. Если точка останова в вашем обработчике не срабатывает, первым делом проверьте, вызывается ли вообще заимствованный метод. Поставьте контрольную точку в исходном методе основной конфигурации (он доступен для отладки, даже если конфигурация на поддержке) и убедитесь, что выполнение до него доходит.
Типичная ситуация: обработчик с аннотацией &Вместо «молчит», потому что другое расширение, применённое позже, тоже замещает тот же метод, и выполняется именно его версия. Порядок применения расширений определяется в списке расширений, и изменить его можно, перемещая расширения в списке.
Для обработчиков подписок на события и обработчиков форм проверяйте, что в расширении корректно заимствована форма или объект и что обработчик привязан к нужному событию. Если вы создали процедуру в модуле формы расширения, но не связали её с событием через панель свойств, она никогда не вызовется — и отладчик это «молчание» не покажет.
Отладка фоновых заданий и внешних соединений
Если код расширения выполняется в фоновом задании (например, при обмене данными или в регламентных операциях), обычная точка останова не сработает — фоновое задание исполняется в отдельном сеансе. Включите в настройках отладки конфигуратора опцию автоматического подключения к фоновым заданиям, либо подключитесь вручную через «Отладка» → «Подключение», когда задание уже запущено.
Практический приём: поставьте в начале фонового метода небольшую задержку или запись в журнал регистрации с идентификатором сеанса — так проще успеть подключиться к нужному предмету отладки до завершения задания. Для коротких заданий это особенно актуально.
Код, вызываемый через веб-сервисы, HTTP-сервисы и COM-соединения, отлаживается аналогично: нужно включить автоматическое подключение соответствующих типов предметов отладки в настройках конфигуратора и убедиться, что сервер работает в отладочном режиме. Для HTTP-сервисов дополнительно проверьте, что публикация на веб-сервере указывает на ту же базу, которую вы отлаживаете.
Как выбрать способ отладки
Диагностика без отладчика: журнал регистрации и сообщения
Не всегда есть возможность подключить отладчик — например, ошибка проявляется только у пользователя на рабочей базе. В этом случае используйте журнал регистрации: добавьте в проблемные места кода вызовы ЗаписьЖурналаРегистрации с уровнем «Информация» или «Ошибка» и фиксируйте значения ключевых переменных. После воспроизведения проблемы отфильтруйте журнал по пользователю и времени.
Для быстрой диагностики на клиенте подойдёт Сообщить(), но помните: сообщения из серверного кода доходят до клиента только после завершения серверного вызова, поэтому для длинных операций журнал регистрации информативнее. Временные диагностические вызовы обязательно удаляйте из расширения после решения проблемы — лишние записи замедляют работу и засоряют журнал.
Как проверить, что отладка настроена правильно
Выполнение останавливается при воспроизведении действия
Точка останова отображается неактивной или игнорируется
Остановка на серверной процедуре, виден стек вызовов
Останавливается только клиентский код
В отладчике видны последние изменения модуля
Код в отладчике отличается от редактора — сеанс не перезапущен
Стек вызовов показывает ваш метод расширения
В стеке только методы основной конфигурации или другого расширения
Ограничения и безопасный режим
Расширения по умолчанию могут работать в безопасном режиме, который запрещает доступ к файловой системе, COM-объектам, внешним компонентам и ряду других операций. Если код расширения завершается с ошибкой о недопустимой операции, проверьте в свойствах расширения флажок «Безопасный режим» и «Защита от опасных действий». Снимать эти ограничения следует осознанно и только для доверенных расширений.
Ещё одно ограничение: расширение не может изменять структуру данных произвольно — добавляемые объекты имеют ограничения по сравнению с объектами основной конфигурации. Если проблема связана не с логикой, а с тем, что нужный реквизит или табличная часть недоступны для заимствования, отладчик этого не покажет: проверяйте сообщения об ошибках при обновлении расширения.
Что важно запомнить
Отладка расширения выполняется штатным отладчиком конфигуратора. Ключевые условия успеха: активное расширение, перезапущенный сеанс, сервер в отладочном режиме для серверного кода, автоподключение для фоновых заданий и правильный порядок применения расширений. Большинство «не срабатывает точка останова» объясняется именно нарушением одного из этих условий.
Частые вопросы
Почему точка останова в расширении подсвечена как недоступная?
Так отладчик показывает, что строка находится в неисполняемом контексте: например, точка стоит в серверной процедуре, а сервер не запущен в отладочном режиме, либо модуль вообще не загружен в текущем сеансе. Проверьте активность расширения, режим сервера и перезапустите сеанс.
Можно ли отладить расширение на рабочей базе пользователя?
Технически да, если сервер переведён в отладочный режим, но это замедляет работу и остановка на точке блокирует вызовы других пользователей. Правильный подход — скопировать базу, воспроизвести проблему на копии и отлаживаться там. На рабочей базе ограничьтесь журналом регистрации.
Как понять, какое из нескольких расширений выполняет метод?
Поставьте точку останова в заимствованном методе основной конфигурации и пройдите выполнение шагами: стек вызовов покажет, из какого расширения вызывается код. Дополнительно можно поочерёдно отключать расширения и проверять поведение.
Обработчик &После выполняется, а &Вместо — нет. Почему?
Наиболее вероятная причина — другое расширение, применённое позже, тоже замещает этот метод, и исполняется его версия. Реже причина в том, что заимствованный метод изменился после обновления конфигурации, и расширение требует проверки применимости.
Что делать, если после обновления конфигурации расширение перестало работать?
Откройте расширение в конфигураторе и выполните проверку применимости: платформа покажет методы и объекты, которые изменились или удалены в основной конфигурации. Исправьте заимствования, обновите расширение в базе и проверьте работу на копии до установки в рабочую базу.
Можно ли отлаживать расширение через веб-клиент?
Да, отладка веб-клиента поддерживается: в настройках отладки конфигуратора нужно указать подключение через веб-сервер и включить соответствующий тип предметов отладки. При этом сервер также должен работать в отладочном режиме для серверного кода.