Отладка серверного кода в клиент-серверной базе 1С 8.3

· 9 мин

Содержание

Чтобы подключить отладчик на сервере 1С 8.3, агент сервера (ragent.exe) нужно запустить с ключом -debug, перезапустить службу, а в конфигураторе включить автоматическое подключение предметов отладки «Сервер». Без ключа -debug серверный код в клиент-серверной базе отладчику недоступен: точки останова в процедурах &НаСервере просто не срабатывают.

Способов включить отладку на сервере три, и выбирают их по ситуации. Правка параметров службы через реестр или sc config — постоянный вариант для сервера разработки. Ручной запуск агента из командной строки — разовая проверка на тестовой машине. Для Linux — правка юнита systemd или файла настроек службы. Ниже каждый вариант разобран с командами.

Подготовка: учётные записи, права и выбор базы

Отладка на сервере затрагивает сразу три уровня прав: Windows (или Linux), кластер 1С и саму информационную базу. Проверьте их до правки службы.

🔐 Что нужно заранее:

  • Права администратора ОС на сервере 1С. Без них не изменить параметры службы и не перезапустить её.
  • Учётная запись службы (обычно USR1CV8 или доменная служебная учётка). Процесс сервера отладки запускается от её имени, поэтому ей нужны права на каталог srvinfo и право «Вход в систему как служба».
  • Пользователь информационной базы с правом открывать конфигуратор. Отладчик работает из конфигуратора или EDT, а туда пускают только пользователей с административными правами.
  • Доступ к кластеру. Если на кластере заданы администраторы, держите их логин и пароль под рукой: они понадобятся консоли кластера для проверки сеансов.

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

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

Как включить отладку на сервере 1С 8.3 в Windows

Сервер 1С в Windows работает службой «1C:Enterprise 8.3 Server Agent». Имя службы зависит от разрядности и версии, поэтому сначала узнайте его точно.

Шаг 1. Найдите службу и её строку запуска

Откройте services.msc, найдите службу агента, в свойствах посмотрите «Имя службы» и «Исполняемый файл». Или выполните в командной строке:

sc queryex type= service state= all | findstr /i "1C:Enterprise"
sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"

Типичная строка запуска выглядит так:

"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

Номер версии и пути у вас будут свои. Порты 1540, 1541 и диапазон 1560:1591 — стандартные.

Шаг 2. Добавьте ключ -debug

Строка хранится в реестре, в параметре ImagePath раздела службы:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)

Откройте regedit, найдите этот раздел и допишите после ragent.exe" ключи отладки:

"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

💡 Перед правкой экспортируйте раздел реестра в .reg-файл. Ошибка в кавычках — и служба не стартует; из файла всё вернётся за секунду.

Если реестр трогать не хочется, ту же строку можно задать командой sc config. Пробел после binPath= обязателен, а внутренние кавычки экранируются обратной косой чертой:

sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe\" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\""

Шаг 3. Перезапустите службу

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

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Шаг 4. Убедитесь, что ключ применился

Самая частая ошибка — правка ушла не в ту службу (например, на сервере стоят две версии платформы). Проверьте реальную командную строку процесса в PowerShell:

Get-CimInstance Win32_Process -Filter "name='ragent.exe'" | Select-Object ProcessId, CommandLine

В выводе должен быть -debug. В HTTP-режиме рядом появится ещё процесс сервера отладки dbgs.exe.

Как включить отладку на сервере 1С в Linux

В Linux логика та же: агенту нужен ключ -debug. Где его прописать, зависит от способа установки.

Способ установкиГде включатьЧто сделать
Старый init-скрипт srv1cv83файл /etc/sysconfig/srv1cv83 (или /etc/default/srv1cv83 в Debian/Ubuntu)раскомментировать и выставить SRV1CV8_DEBUG=1
Юнит systemd (платформа 8.3.21 и новее)строка ExecStart юнита службы серверадописать -debug (и при нужде -http) к параметрам ragent

Для systemd правку удобнее делать через override, чтобы её не затёрло обновление платформы :

systemctl list-units --type=service | grep -i 1c
sudo systemctl edit --full <имя_службы_1С>
sudo systemctl daemon-reload
sudo systemctl restart <имя_службы_1С>
ps -ef | grep ragent

В выводе ps ищите ключ -debug в строке процесса ragent. Перезапуск службы, как и в Windows, обрывает все сеансы.

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

В 8.3 есть два механизма отладки. От выбора зависит, какие порты открывать и что указывать в конфигураторе.

ПротоколКлючи агентаКак работаетКогда выбирать
HTTP-debug -httpвсе предметы отладки подключаются к серверу отладки dbgs.exe, отладчик ходит к нему по HTTPосновной вариант для современных релизов, обязателен для EDT, удобен через сеть и брандмауэр
TCP-debug или -debug -tcpотладчик соединяется с предметами отладки напрямуюстарые схемы и привычные настройки, когда HTTP-отладка не используется

Протокол на сервере и в конфигураторе должен совпадать. Агент запущен с -http, а конфигуратор настроен на TCP — серверные предметы отладки в списке не появятся, хотя клиентские будут видны.

Протокол в конфигураторе задаётся в Сервис → Параметры, на вкладке «Отладка»: там выбирают протокол отладки для этой информационной базы и адрес сервера отладки.

Порты и брандмауэр для отладки на сервере

Для обычной работы клиент-серверной базы клиенту нужны порты агента и кластера. Отладке нужен ещё свой порт.

🔌 Что открыть на сервере 1С (входящие TCP):

  • 1540 — агент сервера. Сюда приходят клиент и консоль кластера.
  • 1541 — менеджер кластера.
  • 1560–1591 — рабочие процессы (диапазон задан в свойствах рабочего сервера; у вас он может быть другим).
  • 1550 — сервер отладки в HTTP-режиме, если порт не меняли. Именно к нему подключается конфигуратор по адресу вида http://srv1c:1550.

Правило для брандмауэра Windows создаётся одной командой из PowerShell, запущенного от администратора:

New-NetFirewallRule -DisplayName "1C Debug HTTP" -Direction Inbound -Protocol TCP -LocalPort 1550 -Action Allow

В Linux с firewalld аналог такой:

sudo firewall-cmd --permanent --add-port=1550/tcp
sudo firewall-cmd --reload

💡 Проверить, что порт слушается и доступен, проще всего с машины разработчика: Test-NetConnection srv1c -Port 1550 в PowerShell. Если TcpTestSucceeded : False при работающем dbgs.exe — режет брандмауэр или сетевой экран между сегментами.

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

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

Когда агент перезапущен с -debug, остаётся настроить конфигуратор. Порядок такой.

  1. Откройте базу в конфигураторе под пользователем с административными правами.
  2. Проверьте протокол и адрес сервера отладки в Сервис → Параметры на вкладке «Отладка». Для HTTP-режима адрес — имя сервера 1С и порт 1550.
  3. Откройте Отладка → Подключение. Появится окно «Предметы отладки».
  4. Нажмите «Автоматическое подключение» и отметьте нужные типы: Сервер, Тонкий клиент, при необходимости Фоновое задание, HTTP-сервис, Web-сервис.
  5. Запустите клиент кнопкой Отладка → Начать отладку → Тонкий клиент (F5). Клиент сам стартует в режиме отладки и подключится.
  6. Поставьте точку останова (F9) в процедуре с директивой &НаСервере и выполните действие в клиенте.

В окне «Предметы отладки» вы увидите и клиентский, и серверный предмет. Серверный подписан как «Сервер» с именем пользователя и номером сеанса.

Подключение к уже запущенному сеансу

Иногда ошибку воспроизводит конкретный пользователь, и перезапускать его клиент нельзя. Тогда клиента запускают с параметром командной строки /DEBUG — его удобно добавить в «Дополнительные параметры запуска» базы в списке информационных баз. Сеанс появится в «Предметах отладки» среди доступных, и его можно подключить вручную.

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

Регламентные задания, обмены и HTTP-сервисы работают без клиента. Чтобы поймать их код:

  • 🧩 включите в автоматическом подключении типы «Фоновое задание» или «HTTP-сервис»;
  • 🧩 поставьте точку останова в общем модуле, который вызывает задание;
  • 🧩 запустите задание вручную (например, из обработки или консоли заданий) и дождитесь остановки.

Отладка в файловой и клиент-серверной базе: в чём разница

Если база файловая, ключ -debug не нужен: серверный код выполняется внутри процесса клиента. Достаточно нажать F5 в конфигураторе — точки останова в &НаСервере сработают сразу.

Что сравниваемФайловая базаКлиент-серверная база
Где выполняется серверный кодв процессе клиента на компьютере пользователяв рабочем процессе rphost на сервере 1С
Нужен ли -debug у агентанетда, без него серверный код не отлаживается
Перезапуск службыне нуженнужен после правки строки запуска
Портыне нужны1540, 1541, диапазон рабочих процессов, плюс 1550 для HTTP-отладки
Фоновые заданиявыполняются в процессе клиента, отлаживаются как обычноотдельный тип предмета «Фоновое задание»

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

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

Почему не подключается отладчик на сервере 1С: ошибки и решения

Диагностика: выберите симптом

Ещё одна неочевидная причина — база зарегистрирована в кластере на другом сервере. Конфигуратор открыт через srv1c, а рабочие процессы крутятся на втором рабочем сервере кластера, где агент без -debug. В кластере из нескольких серверов ключ нужен на каждом, где могут выполняться сеансы базы.

После завершения отладки уберите -debug из строки запуска и перезапустите службу в нерабочее время. Режим отладки на рабочем сервере добавляет нагрузку и открывает лишний порт.

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

Можно ли включить отладку на сервере без перезапуска службы?
Нет. Ключ -debug читается агентом только при старте, поэтому после правки строки запуска службу нужно перезапустить. Это обрывает сеансы пользователей.
Нужен ли ключ -debug на сервере, если я отлаживаю через EDT?
Да. EDT работает через HTTP-отладку, поэтому агент нужно запускать с ключами -debug -http, а в EDT указать адрес сервера отладки.
Влияет ли режим отладки на скорость работы сервера?
Сам ключ даёт небольшую дополнительную нагрузку. Заметное замедление появляется, когда разработчик стоит на точке останова и держит блокировки, поэтому на рабочем сервере отладку держат включённой только на время работ.
Можно ли отлаживать сеанс другого пользователя?
Да, если его клиент запущен в режиме отладки (параметр /DEBUG) или включено автоподключение серверных предметов. Отладчик увидит сеанс в окне «Предметы отладки» и значения переменных этого сеанса.
Как понять, что база файловая и ключ -debug не нужен?
Посмотрите строку подключения в списке информационных баз. Путь к каталогу (File=) означает файловую базу, имя сервера и базы (Srvr=, Ref=) — клиент-серверную.