Отладка серверного кода 1С 8.3: флаг -debug, протокол HTTP и подключение из Конфигуратора
Содержание
Серверная отладка в 1С 8.3 включается не в Конфигураторе, а на самом сервере: в строку запуска службы агента ragent.exe добавляют ключ -debug (для современного режима — -debug -http), затем перезапускают службу. После этого в Конфигураторе через Отладка → Подключение появляются предметы отладки «Сервер», и точки останова в серверных модулях начинают срабатывать.
Частое заблуждение — что достаточно поставить точку останова в процедуре с &НаСервере и нажать F5. В файловой базе это работает, потому что сервер живёт внутри клиентского процесса. В клиент-серверной базе без ключа -debug рабочие процессы rphost отладчик просто не пускают, и точка останова молча проскакивает.
Подготовка: права, учётные записи и доступ к серверу
Прежде чем трогать службу, проверьте, что у вас есть всё нужное. Половина неудачных попыток упирается не в 1С, а в доступ.
📌 Что понадобится:
- Права локального администратора на сервере 1С — без них не изменить параметры службы и не перезапустить её.
- Учётная запись службы. Обычно это
USR1CV8или доменная учётная запись. Запомните, под кем работает служба: после правки параметров она должна стартовать под тем же пользователем. - Пользователь информационной базы с правом запуска Конфигуратора — как правило, с ролью «Полные права».
- Доступ к консоли кластера (
Администрирование серверов 1С Предприятия). Если на кластере заданы администраторы, нужен логин и пароль администратора кластера. - Сетевой доступ с вашего компьютера к серверу: порт агента 1540, менеджера кластера 1541, диапазон рабочих процессов (по умолчанию 1560–1591) и порт сервера отладки — по умолчанию 1550 для HTTP-режима.
Включать серверную отладку на рабочем сервере с сотнями пользователей нежелательно. Перезапуск службы обрывает все сеансы, а остановка на точке останова замораживает вызов пользователя, который попал в этот код. Лучше копия базы на тестовом кластере.
Как включить серверную отладку 1С в службе агента
Это главный шаг. Всё остальное без него не работает .
Windows
- Откройте
regeditи перейдите вHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите раздел службы агента — его имя начинается с
1C:Enterprise 8.3 Server Agent. В свежих платформах в имени бывает номер версии; если служб несколько, ориентируйтесь на путь к нужной платформе. - Откройте параметр
ImagePath. Там строка вида:
"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"
- Добавьте после
-agentключ отладки. Для режима HTTP:
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -debug -http -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
- Сохраните и перезапустите службу в
services.msc(или командамиnet stop/net startс именем службы в кавычках).
Номер версии и каталог srvinfo в примере условные — берите их из своей строки, меняйте только ключи отладки.
Перезапуск службы агента завершает все сеансы пользователей на этом сервере. Предупредите людей или делайте это вне рабочего времени.
Linux
На Linux ключ тот же, меняется место. В старых установках со скриптом /etc/init.d/srv1cv83 за отладку отвечает переменная SRV1CV8_DEBUG в файле настроек службы — ей ставят значение 1. В новых платформах служба запускается юнитом systemd, и ключ -debug дописывают в строку ExecStart юнита агента, после чего выполняют systemctl daemon-reload и перезапуск службы.
TCP или HTTP: что выбрать
У платформы два протокола отладки. Ключ -debug без уточнения включает TCP, -debug -http — HTTP.
| Режим | Ключи агента | Когда подходит | Минусы |
|---|---|---|---|
| TCP | -debug или -debug -tcp | Старые привычки, одиночный сервер в той же сети | Не отлаживает мобильные клиенты, капризен к сетевым экранам |
| HTTP | -debug -http | Рекомендуемый вариант для 8.3: удалённая отладка, веб-клиент, расширения | Нужен открытый порт сервера отладки (по умолчанию 1550) |
Если нужен другой порт сервера отладки, у агента для этого есть ключ -debugServerPort. Остальные параметры смотрите в справке к ragent своей версии платформы.
💡 Протокол в Конфигураторе должен совпадать с протоколом сервера. Сервер на HTTP, а Конфигуратор ищет предметы по TCP — список будет пустым.
Проверка в консоли кластера серверов
Консоль администрирования не содержит флажка «включить отладку» — сам режим задаётся только ключом агента. Но консоль нужна, чтобы убедиться, что всё поднялось и база доступна.
Что проверить:
- В консоли раскройте
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Рабочие процессы. Процессы должны быть в состоянии «Включен» с текущим временем запуска — значит, служба перезапустилась. - В разделе
Информационные базынайдите базу и посмотритеСеансы. Здесь видно, какой рабочий процесс обслуживает ваш сеанс — пригодится, если на кластере несколькоrphost. - Откройте «Диспетчер задач» на сервере, вкладку «Подробности», добавьте столбец «Командная строка». У процессов
rphost.exeв строке должен быть-debug. Нет его — служба стартовала со старыми параметрами.
💡 Если консоль не открывается после перезапуска («сервер 1С:Предприятия не обнаружен»), чаще всего в ImagePath сломаны кавычки. Сверьте строку с исходной.
Запуск отладчика и подключение к серверу
Теперь очередь Конфигуратора и клиента. Порядок такой.
Шаг 1. Настройте Конфигуратор
Откройте базу в Конфигураторе. В Сервис → Параметры → Запуск 1С:Предприятия на вкладке «Дополнительные» включите флажок, отвечающий за установку режима разрешения отладки, и выберите тот же протокол, что на сервере (HTTP или TCP). Для HTTP укажите адрес сервера отладки, обычно http://localhost:1550 — Конфигуратор сам поднимает его локально.
Шаг 2. Включите автоматическое подключение
Откройте Отладка → Подключение. В окне предметов отладки нажмите «Автоматическое подключение» и отметьте типы:
- 🖥 Сервер — код модулей с
&НаСервере, общие серверные модули, модули объектов и менеджеров; - ⚙ Фоновое задание — регламентные задания и длительные операции;
- 🧑💻 Тонкий клиент или Толстый клиент — если нужно пройти и клиентскую часть.
Без автоподключения новый серверный вызов каждый раз появляется в списке, и его приходится цеплять вручную.
Шаг 3. Запустите клиент с разрешённой отладкой
Самый простой путь — Отладка → Начать отладку (F5) прямо из Конфигуратора: клиент стартует уже подключённым. Если нужен отдельный ярлык, используйте параметр командной строки /DEBUG:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh_test" /DEBUG -http -attach /DEBUGGERURL "http://devpc:1550"
Здесь srv1c\buh_test — сервер и имя базы, devpc — компьютер, где открыт Конфигуратор.
Шаг 4. Поставьте точку останова
Откройте серверный модуль, встаньте на строку и нажмите F9. Для точечных случаев используйте точку останова с условием (Ctrl+Shift+F9), например Объект.Номер = "0000-000125" — тогда отладчик не будет останавливаться на каждом документе.
Как разобрать стек вызовов и значения переменных
Отладчик остановился — начинается настоящая работа. Основные клавиши:
| Действие | Клавиша |
|---|---|
| Продолжить выполнение | F5 |
| Шаг с заходом в процедуру | F11 |
| Шаг без захода | F10 |
| Выйти из текущей процедуры | Shift+F11 |
| Вычислить выражение | Shift+F9 |
| Поставить или снять точку останова | F9 |
Стек вызовов
Окно стека открывается из меню Отладка → Стек вызовов. Верхняя строка — текущая процедура, ниже — кто её вызвал. Двойной щелчок по строке переносит в этот модуль, и в табло видны локальные переменные того уровня.
💡 Стек отвечает на вопрос «откуда сюда пришли». Если ошибка возникает в общем модуле, вызываемом из десятка мест, смотрите на третью-четвёртую строку снизу вверх — там обычно видна форма или обработка, с которой начался вызов.
Табло и вычисление выражений
- 🔍 Табло (
Отладка → Табло) — постоянный список выражений. ДобавьтеЗапрос.Текст,ТаблицаТоваров.Количество(),ТекущаяДата()— значения обновятся на каждом шаге. - 🧮 Вычислить выражение (Shift+F9) — разовая проверка. Удобно для запроса: выделите переменную
Результат, вызовите окно и раскройтеРезультат.Выгрузить(), чтобы увидеть строки таблицы. - 📋 Наведение курсора на переменную показывает её значение во всплывающей подсказке.
Остановка по ошибке
Если вы не знаете, где падает код, включите Отладка → Остановка по ошибке. Отладчик встанет на строке, где возникло исключение, даже если его потом перехватывает Попытка … Исключение. Можно задать фильтр по тексту ошибки, чтобы не ловить ожидаемые исключения.
Пока сеанс стоит на точке останова, он держит транзакцию и блокировки. Другие пользователи, работающие с теми же данными, будут ждать или получат ошибку блокировки. Не уходите на обед с открытым отладчиком на общей базе.
Журнал регистрации как помощник отладчика
Отладчик хорош, когда ошибку можно воспроизвести. Если она случилась у пользователя ночью в регламентном задании, начинают с журнала регистрации.
Где открыть:
- в Конфигураторе —
Администрирование → Журнал регистрации; - в типовых конфигурациях —
Администрирование → Обслуживание → Журнал регистрации.
Как использовать вместе с отладкой:
- Установите отбор по уровню «Ошибка» и интервалу времени.
- В найденной записи посмотрите поле «Метаданные» и «Комментарий» — там текст исключения и объект, на котором оно возникло.
- Найдите модуль, поставьте точку останова с условием по этому объекту и воспроизведите операцию под отладкой.
Для фоновых заданий удобно добавить в код временную запись:
ЗаписьЖурналаРегистрации("Отладка.ЗагрузкаКурсов",
УровеньЖурналаРегистрации.Информация,
,
,
СтрШаблон("Обработано строк: %1", Формат(КоличествоСтрок, "ЧГ=0")));
После разбора уберите эти строки, иначе журнал разрастётся. Файлы журнала серверной базы лежат на сервере в каталоге кластера srvinfo\reg_1541\<GUID базы>\1Cv8Log.
Типовые проблемы серверной отладки и их решение
Если на кластере несколько рабочих процессов
Сеанс может обслуживаться разными rphost, и это нормально: автоподключение цепляет их все. Проблема возникает, если на кластере несколько рабочих серверов, а -debug прописали только на одном. Ключ нужно добавить в службу агента на каждом сервере, где запускаются рабочие процессы, либо на время отладки оставить базе только один рабочий сервер.
Как выключить отладку после работы
Уберите -debug -http из ImagePath и перезапустите службу в нерабочее время. Режим отладки добавляет накладные расходы на каждый серверный вызов, держать его постоянно на продуктивном сервере незачем.