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

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

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

Как включить отладку на сервере 1С, настроить конфигуратор, поставить точку останова в серверной процедуре и проверить результат. Типичные ошибки и FAQ.

Серверная процедура в 1С выполняется в контексте сервера приложений или файловой информационной базы, а не на клиенте, поэтому обычная отладка «из формы» её не останавливает. Чтобы увидеть, что происходит внутри серверного кода, нужно включить режим отладки на самом сервере, подключить предметы отладки в конфигураторе и правильно разместить точку останова. Ниже разобран полный порядок действий для клиент-серверного и файлового вариантов работы.

Основная сложность отладки серверного кода — разделение процессов. Клиентское приложение (тонкий или толстый клиент) и сервер 1С:Предприятия (процесс rphost) — это разные программы, и конфигуратор должен подключиться к обоим. Если отладка «не ловит» точку останова в серверной процедуре, почти всегда причина в том, что сервер запущен без ключа отладки либо не подключён нужный тип предмета отладки.

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

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

В управляемом приложении код делится на клиентский и серверный. Директивы компиляции &НаСервере и &НаКлиенте определяют, где выполняется процедура. Когда вы запускаете отладку стандартным способом (F5 в конфигураторе), по умолчанию подключается только клиентский процесс. Серверный вызов уходит в отдельный процесс, и точка останова внутри &НаСервере-процедуры просто игнорируется.

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

Точка останова серая или с вопросомМодуль недоступен для отладки

Проверьте, что включён режим отладки сервера и подключён предмет отладки «Сервер»

Отладка останавливается только на клиентеСерверный контекст не подключён

Откройте «Отладка → Подключение» и отметьте нужные типы предметов отладки

Процедура вообще не вызываетсяКод выполняется в другом месте

Проверьте директиву компиляции и цепочку вызовов из клиентского кода

Включение отладки на сервере 1С

Для клиент-серверного варианта работы отладку нужно включить при запуске службы агента сервера. В Windows это делается через реестр или параметры службы: в строку запуска агента добавляется ключ -debug. После изменения параметра службу необходимо перезапустить — до перезапуска режим не активируется. В Linux ключ -debug добавляется в параметры запуска службы srv1cv8 в соответствующем unit-файле или скрипте запуска.

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

Включение отладки на сервере (Windows)
  1. 1
    Остановите службу «Агент сервера 1С:Предприятия»
  2. 2
    Откройте реестр: ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent
  3. 3
    В параметре ImagePath добавьте в конец строки запуска ключ -debug
  4. 4
    Запустите службу заново
  5. 5
    Проверьте, что служба стартовала без ошибок

Учтите, что ключ -debug допустимо сочетать с параметром -http для отладки через протокол HTTP, что бывает нужно при работе отладчика через сервер в современных версиях платформы. Конкретный набор параметров зависит от версии платформы — сверяйтесь с документацией на вашу версию.

Подключение предметов отладки в конфигураторе

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

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

Постановка точки останова и прохождение кода

Откройте модуль, содержащий серверную процедуру — это может быть общий модуль с флагом «Сервер», модуль объекта или модуль формы с директивой &НаСервере. Установите точку останова (F9) на первой исполняемой строке процедуры. Точка не сработает, если поставить её на строку объявления переменной без инициализации, комментарий или заголовок процедуры.

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

Дальше используйте стандартные шаги отладки: F11 — шаг с заходом в вызываемые процедуры, F10 — шаг через вызов, Shift+F11 — выход из текущей процедуры. Значения переменных смотрите через «Вычислить выражение» (Shift+F9) или табло. Помните, что в серверном контексте недоступны интерактивные действия: нельзя открыть форму, показать предупреждение или запросить ввод у пользователя — такие вызовы приведут к ошибке.

bsl
&НаСервере
Процедура РассчитатьИтогиНаСервере(ДокументСсылка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ СУММА(Т.Сумма) КАК Сумма ИЗ Документ.Реализация.Товары КАК Т ГДЕ Т.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда
        ИтоговаяСумма = Результат.Сумма; // точка останова здесь
    КонецЕсли;
КонецПроцедуры

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

Серверный код нередко выполняется не из интерактивного сеанса, а в фоновом задании или через HTTP-сервис. Такие процессы тоже отлаживаются, но их нужно отдельно подключить в окне «Отладка → Подключение». Фоновое задание появляется в списке предметов отладки только в момент своего выполнения, поэтому для длинных операций успеть подключиться несложно, а для коротких — поставьте точку останова заранее и включите автоматическое подключение в настройках отладки.

Практический приём для коротких фоновых заданий: в настройках отладки конфигуратора включите автоматическое подключение новых предметов отладки нужных типов. Тогда отладчик подхватит фоновое задание сразу при его запуске и остановится на первой точке останова без ручных действий.

Ограничения и риски отладки на рабочем сервере

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

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

Типичные ошибки и их устранение

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

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

Типичные ошибки
01
Запуск сервера без -debug — точка останова в серверной процедуре никогда не сработает
02
Не подключён предмет отладки «Сервер» в окне «Отладка → Подключение» — отладчик видит только клиента
03
Код изменён, но конфигурация базы данных не обновлена — исполняется старая версия модуля
04
Попытка вызвать интерактивный метод (Предупреждение, Вопрос) в серверном коде — ошибка выполнения
05
Отладка на боевом сервере в часы пик — блокировки и жалобы пользователей
Контрольные точки

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

Служба сервера запущена с -debug
Норма

В строке запуска службы присутствует ключ -debug, служба работает

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

Ключа нет или служба не стартует после изменения

Подключение предметов отладки
Норма

В окне «Отладка → Подключение» отмечен тип «Сервер»

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

Список пуст или отмечен только клиент

Срабатывание точки останова
Норма

При выполнении действия управление переходит в конфигуратор на нужной строке

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

Действие выполняется без остановки — проверяйте цепочку вызовов

FAQ: частые вопросы по отладке серверных процедур

Можно ли отладить серверную процедуру в файловом режиме без настройки сервера?

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

Почему точка останова отображается серым или с восклицательным знаком?

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

Как отладить процедуру, которая вызывается из регламентного задания?

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

Опасно ли включать -debug на рабочем сервере?

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

Что делать, если серверная процедура не вызывается вообще?

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

Можно ли посмотреть значения параметров, переданных на сервер?

Да. Когда отладчик остановился внутри серверной процедуры, используйте «Вычислить выражение» (Shift+F9) или табло, чтобы посмотреть значения параметров и локальных переменных. Учтите, что ссылочные данные вычисляются запросом к базе и на больших объектах это может занять время.

Итог

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

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