Отладка серверного кода 1С 8.3: флаг -debug, протокол HTTP и подключение из Конфигуратора

· 9 мин

Содержание

Серверная отладка в 1С 8.3 включается не в Конфигураторе, а на самом сервере: в строку запуска службы агента ragent.exe добавляют ключ -debug (для современного режима — -debug -http), затем перезапускают службу. После этого в Конфигураторе через Отладка → Подключение появляются предметы отладки «Сервер», и точки останова в серверных модулях начинают срабатывать.

Частое заблуждение — что достаточно поставить точку останова в процедуре с &НаСервере и нажать F5. В файловой базе это работает, потому что сервер живёт внутри клиентского процесса. В клиент-серверной базе без ключа -debug рабочие процессы rphost отладчик просто не пускают, и точка останова молча проскакивает.

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

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

📌 Что понадобится:

  • Права локального администратора на сервере 1С — без них не изменить параметры службы и не перезапустить её.
  • Учётная запись службы. Обычно это USR1CV8 или доменная учётная запись. Запомните, под кем работает служба: после правки параметров она должна стартовать под тем же пользователем.
  • Пользователь информационной базы с правом запуска Конфигуратора — как правило, с ролью «Полные права».
  • Доступ к консоли кластера (Администрирование серверов 1С Предприятия). Если на кластере заданы администраторы, нужен логин и пароль администратора кластера.
  • Сетевой доступ с вашего компьютера к серверу: порт агента 1540, менеджера кластера 1541, диапазон рабочих процессов (по умолчанию 1560–1591) и порт сервера отладки — по умолчанию 1550 для HTTP-режима.

Включать серверную отладку на рабочем сервере с сотнями пользователей нежелательно. Перезапуск службы обрывает все сеансы, а остановка на точке останова замораживает вызов пользователя, который попал в этот код. Лучше копия базы на тестовом кластере.

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

Это главный шаг. Всё остальное без него не работает .

Windows

  1. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
  2. Найдите раздел службы агента — его имя начинается с 1C:Enterprise 8.3 Server Agent. В свежих платформах в имени бывает номер версии; если служб несколько, ориентируйтесь на путь к нужной платформе.
  3. Откройте параметр 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"
  1. Добавьте после -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"
  1. Сохраните и перезапустите службу в 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. В консоли раскройте Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Рабочие процессы. Процессы должны быть в состоянии «Включен» с текущим временем запуска — значит, служба перезапустилась.
  2. В разделе Информационные базы найдите базу и посмотрите Сеансы. Здесь видно, какой рабочий процесс обслуживает ваш сеанс — пригодится, если на кластере несколько rphost.
  3. Откройте «Диспетчер задач» на сервере, вкладку «Подробности», добавьте столбец «Командная строка». У процессов 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" — тогда отладчик не будет останавливаться на каждом документе.

Отладка не срабатывает? Проверьте по порядку
Выполнено: 0 / 6

Как разобрать стек вызовов и значения переменных

Отладчик остановился — начинается настоящая работа. Основные клавиши:

ДействиеКлавиша
Продолжить выполнениеF5
Шаг с заходом в процедуруF11
Шаг без заходаF10
Выйти из текущей процедурыShift+F11
Вычислить выражениеShift+F9
Поставить или снять точку остановаF9

Стек вызовов

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

💡 Стек отвечает на вопрос «откуда сюда пришли». Если ошибка возникает в общем модуле, вызываемом из десятка мест, смотрите на третью-четвёртую строку снизу вверх — там обычно видна форма или обработка, с которой начался вызов.

Табло и вычисление выражений

  • 🔍 Табло (Отладка → Табло) — постоянный список выражений. Добавьте Запрос.Текст, ТаблицаТоваров.Количество(), ТекущаяДата() — значения обновятся на каждом шаге.
  • 🧮 Вычислить выражение (Shift+F9) — разовая проверка. Удобно для запроса: выделите переменную Результат, вызовите окно и раскройте Результат.Выгрузить(), чтобы увидеть строки таблицы.
  • 📋 Наведение курсора на переменную показывает её значение во всплывающей подсказке.

Остановка по ошибке

Если вы не знаете, где падает код, включите Отладка → Остановка по ошибке. Отладчик встанет на строке, где возникло исключение, даже если его потом перехватывает Попытка … Исключение. Можно задать фильтр по тексту ошибки, чтобы не ловить ожидаемые исключения.

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

Журнал регистрации как помощник отладчика

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

Где открыть:

  • в Конфигураторе — Администрирование → Журнал регистрации;
  • в типовых конфигурациях — Администрирование → Обслуживание → Журнал регистрации.

Как использовать вместе с отладкой:

  1. Установите отбор по уровню «Ошибка» и интервалу времени.
  2. В найденной записи посмотрите поле «Метаданные» и «Комментарий» — там текст исключения и объект, на котором оно возникло.
  3. Найдите модуль, поставьте точку останова с условием по этому объекту и воспроизведите операцию под отладкой.

Для фоновых заданий удобно добавить в код временную запись:

ЗаписьЖурналаРегистрации("Отладка.ЗагрузкаКурсов",
    УровеньЖурналаРегистрации.Информация,
    ,
    ,
    СтрШаблон("Обработано строк: %1", Формат(КоличествоСтрок, "ЧГ=0")));

После разбора уберите эти строки, иначе журнал разрастётся. Файлы журнала серверной базы лежат на сервере в каталоге кластера srvinfo\reg_1541\<GUID базы>\1Cv8Log.

Типовые проблемы серверной отладки и их решение

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

Если на кластере несколько рабочих процессов

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

Как выключить отладку после работы

Уберите -debug -http из ImagePath и перезапустите службу в нерабочее время. Режим отладки добавляет накладные расходы на каждый серверный вызов, держать его постоянно на продуктивном сервере незачем.

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

Нужна ли серверная отладка для файловой базы?
Нет. В файловом варианте серверный код выполняется в том же процессе, что и клиент, поэтому точки останова в серверных процедурах срабатывают после обычного F5 из Конфигуратора.
Можно ли включить отладку без перезапуска службы 1С?
Нет. Ключ -debug читается при старте агента и рабочих процессов, поэтому перезапуск службы обязателен, а вместе с ним завершаются все сеансы.
Можно ли отлаживать сразу двумя разработчиками на одном сервере?
Можно, если каждый подключает свои сеансы. Предмет отладки в каждый момент принадлежит одному отладчику, поэтому договоритесь, кто какие сеансы и задания цепляет.
Почему в стеке вызовов видны не все процедуры?
Модули без исходного текста, например поставляемые с паролем или собранные без исходников, отладчик не раскрывает. В стеке они видны как вызов, но зайти внутрь нельзя.
Влияет ли отладка на скорость работы пользователей?
Включённый режим сам по себе даёт небольшие накладные расходы. Заметно тормозят только остановки на точках: пользователь, чей вызов встал, ждёт, пока разработчик не нажмёт F5.