Отладка серверного кода в клиент-серверной базе 1С 8.3
Содержание
Чтобы подключить отладчик на сервере 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, остаётся настроить конфигуратор. Порядок такой.
- Откройте базу в конфигураторе под пользователем с административными правами.
- Проверьте протокол и адрес сервера отладки в
Сервис → Параметрына вкладке «Отладка». Для HTTP-режима адрес — имя сервера 1С и порт 1550. - Откройте
Отладка → Подключение. Появится окно «Предметы отладки». - Нажмите «Автоматическое подключение» и отметьте нужные типы: Сервер, Тонкий клиент, при необходимости Фоновое задание, HTTP-сервис, Web-сервис.
- Запустите клиент кнопкой
Отладка → Начать отладку → Тонкий клиент(F5). Клиент сам стартует в режиме отладки и подключится. - Поставьте точку останова (F9) в процедуре с директивой
&НаСервереи выполните действие в клиенте.
В окне «Предметы отладки» вы увидите и клиентский, и серверный предмет. Серверный подписан как «Сервер» с именем пользователя и номером сеанса.
Подключение к уже запущенному сеансу
Иногда ошибку воспроизводит конкретный пользователь, и перезапускать его клиент нельзя. Тогда клиента запускают с параметром командной строки /DEBUG — его удобно добавить в «Дополнительные параметры запуска» базы в списке информационных баз. Сеанс появится в «Предметах отладки» среди доступных, и его можно подключить вручную.
Отладка фоновых заданий и HTTP-сервисов
Регламентные задания, обмены и HTTP-сервисы работают без клиента. Чтобы поймать их код:
- 🧩 включите в автоматическом подключении типы «Фоновое задание» или «HTTP-сервис»;
- 🧩 поставьте точку останова в общем модуле, который вызывает задание;
- 🧩 запустите задание вручную (например, из обработки или консоли заданий) и дождитесь остановки.
Отладка в файловой и клиент-серверной базе: в чём разница
Если база файловая, ключ -debug не нужен: серверный код выполняется внутри процесса клиента. Достаточно нажать F5 в конфигураторе — точки останова в &НаСервере сработают сразу.
| Что сравниваем | Файловая база | Клиент-серверная база |
|---|---|---|
| Где выполняется серверный код | в процессе клиента на компьютере пользователя | в рабочем процессе rphost на сервере 1С |
Нужен ли -debug у агента | нет | да, без него серверный код не отлаживается |
| Перезапуск службы | не нужен | нужен после правки строки запуска |
| Порты | не нужны | 1540, 1541, диапазон рабочих процессов, плюс 1550 для HTTP-отладки |
| Фоновые задания | выполняются в процессе клиента, отлаживаются как обычно | отдельный тип предмета «Фоновое задание» |
Отсюда практичный приём: если ошибка воспроизводится на копии базы, выгрузите её в .dt, загрузите в файловую базу
и отлаживайте локально. Серверные настройки при этом не нужны вовсе.
Но поведение, связанное с самим сервером (права учётки службы, пути на сервере, внешние компоненты, блокировки при параллельной работе), в файловой базе не воспроизведётся. Его ловят только на сервере.
Почему не подключается отладчик на сервере 1С: ошибки и решения
Ещё одна неочевидная причина — база зарегистрирована в кластере на другом сервере. Конфигуратор открыт через srv1c, а рабочие процессы крутятся на втором рабочем сервере кластера, где агент без -debug. В кластере из нескольких серверов ключ нужен на каждом, где могут выполняться сеансы базы.
После завершения отладки уберите -debug из строки запуска и перезапустите службу в нерабочее время. Режим отладки на рабочем сервере добавляет нагрузку и открывает лишний порт.