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

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

Отладка кода 1С на сервере: настройка и практика

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

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

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

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

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

В конфигурации 1С контекст исполнения определяется директивами компиляции: &НаСервере, &НаКлиенте, серверные общие модули, модули объектов и менеджеров. Весь этот код в клиент-серверной базе выполняется внутри рабочих процессов rphost на сервере приложений. Отладчик конфигуратора по умолчанию подключается только к клиентскому сеансу, поэтому точки останова в серверных модулях игнорируются.

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

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

Включение режима отладки на агенте сервера

Главный шаг — запуск агента сервера 1С с параметром отладки. На Windows это делается через изменение параметров службы, на Linux — через правку скрипта запуска или unit-файла systemd. Ключевой параметр командной строки агента: -debug. Для отладки через HTTP (актуально при удалённой работе и в новых версиях платформы) добавляется -http.

На Windows откройте реестр или свойства службы «Агент сервера 1С:Предприятия» и допишите в строку запуска параметр -debug. Более надёжный путь — найти службу в реестре по пути HKLM\SYSTEM\CurrentControlSet\Services, отредактировать значение ImagePath и перезапустить службу. Учтите, что перезапуск агента завершает все сеансы пользователей — планируйте работу вне рабочего времени или заранее предупредите сотрудников.

На Linux параметр добавляется в скрипт запуска агента (например, srv1cv8) или в unit systemd. После правки выполните перезапуск службы и проверьте в списке процессов, что ragent действительно стартовал с нужными ключами.

bash
net stop "1C:Enterprise 8.3 Server Agent" && sc config "1C:Enterprise 8.3 Server Agent" binPath= "\"C:\Program Files\1cv8\8.3.22.1750\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\" -debug -http" && net start "1C:Enterprise 8.3 Server Agent"

Отладка по TCP и по HTTP: что выбрать

Платформа поддерживает два протокола отладки: классический TCP и более новый HTTP. TCP-отладка работает «из коробки» после флага -debug, но требует сетевой доступности портов отладки между компьютером разработчика и сервером. HTTP-отладка включается ключом -http и работает через стандартный порт, что удобно при работе через VPN, брандмауэры и в распределённых инфраструктурах.

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

Сравнение протоколов отладки

TCP (-debug)

Классический вариант, подходит для локальной сети. Требует открытых портов диапазона отладки; через строгие брандмауэры и VPN часто не работает.

HTTP (-debug -http)

Работает через стандартный веб-порт, проходит через брандмауэры и прокси. Рекомендуется для удалённой отладки и новых версий платформы; требует согласованной настройки в конфигураторе.

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

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

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

Если в списке предметов пусто, проверьте три вещи: агент запущен с -debug, протокол в конфигураторе совпадает с параметрами запуска, и сеанс пользователя открыт после перезапуска сервера — старые сеансы, созданные до включения отладки, не отлаживаются.

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

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

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

Отладка HTTP-сервисов и веб-сервисов устроена иначе: код исполняется в сеансах, которые создаёт веб-сервер при обращении к публикации. В этом случае в настройках публикации или в файле default.vrd включается режим отладки (параметр debug), а в конфигураторе подключается соответствующий тип предмета отладки. После этого отправьте тестовый запрос к сервису — исполнение остановится на точке останова в модуле сервиса.

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

Типичные проблемы и их диагностика

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

Вторая группа проблем — сетевые. При TCP-отладке брандмауэр блокирует порты отладки, при HTTP-отладке неверно указан адрес сервера отладки в параметрах конфигуратора. Диагностируется просто: если список предметов отладки пуст при гарантированно включённом режиме, проблема в сети или протоколе.

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

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

Проверка результата и безопасное завершение

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

Контрольные точки помогут убедиться, что всё настроено верно как при включении, так и при отключении режима.

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

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

Список предметов отладки в конфигураторе
Норма

Видны серверные сеансы и фоновые задания, точки останова срабатывают

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

Список пуст или содержит только клиентский сеанс — проверяйте флаг -debug и протокол

Параметры процесса ragent
Норма

В командной строке процесса присутствует -debug (при включённой отладке)

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

Флага нет — служба запущена со старыми параметрами, нужен перезапуск

Производительность продуктивного сервера
Норма

После завершения работ режим отладки выключен, служба перезапущена без -debug

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

Режим оставлен включённым — пользователи жалуются на замедление

Итог

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

Серверная отладка в 1С включается флагом -debug у агента сервера с обязательным перезапуском службы. Подключайте серверные сеансы и фоновые задания через «Отладка → Подключение», следите за совпадением протокола (TCP или HTTP) и актуальностью конфигурации базы. На продуктивном сервере режим отладки включайте временно и выключайте после завершения работ.

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

Можно ли отлаживать код на сервере без перезапуска службы агента?

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

Почему отладчик останавливается не на той строке, где стоит точка останова?

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

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

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

Отладка замедляет работу пользователей. Это нормально?

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

Можно ли отладить внешнюю обработку, запущенную на сервере?

Да, если обработка открыта через конфигуратор («Файл → Открыть») и её модуль загружен в отладчик. Точки останова в модуле внешней обработки сработают как в клиентском, так и в серверном контексте при условии, что сервер запущен в режиме отладки и сеанс подключён.

Что делать, если сервер на Linux, а конфигуратор на Windows?

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