Почему серверная точка останова 1С не срабатывает и как запустить отладку на сервере

· 10 мин

Содержание

Точку останова на сервере 1С включают в два этапа: сначала запускают агент сервера (ragent) с ключом -debug -http и перезапускают службу, затем в Конфигураторе через Отладка → Подключение подключают серверные предметы отладки. Только после этого F9 в процедуре с &НаСервере действительно останавливает выполнение.

Частое заблуждение — что красного кружка в модуле достаточно. В файловой базе так и есть. В клиент-серверной без режима отладки на стороне сервера точка останова молча пропускается: код выполняется в рабочем процессе rphost, к которому Конфигуратор просто не подключён. Всё ниже относится к платформе 8.3 (8.3.7 и новее, где появилась отладка по HTTP).

Что нужно проверить до включения отладки на сервере

Отладка на сервере — вмешательство в работу кластера. Прежде чем трогать службу, ответьте на четыре вопроса:

  • 🖥️ Какая это база. Рабочую базу лучше не отлаживать вовсе. Сделайте копию на тестовом сервере или хотя бы в отдельной базе того же кластера.
  • 🔢 Совпадают ли версии. Конфигуратор, из которого отлаживаете, должен быть той же версии платформы, что и сервер. При расхождении подключиться к серверным предметам не получится.
  • 🔐 Есть ли доступ к серверу. Нужны права администратора Windows на машине с сервером 1С (или root на Linux), чтобы поменять параметры службы.
  • 🧱 Открыт ли порт. При HTTP-отладке клиенты и рабочие процессы обращаются к серверу отладки dbgs. Его порт по умолчанию — 1550. Если Конфигуратор стоит на другой машине, порт должен быть доступен через брандмауэр.

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

TCP или HTTP

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

ПротоколКлюч агентаКогда подходитМинусы
HTTP-debug -httpОсновной вариант для 8.3.7+, удалённая отладка, отладка через веб-серверНужен открытый порт сервера отладки
TCP-debug -tcp или просто -debugСтарые релизы платформы до 8.3.7Нельзя отлаживать мобильные и веб-клиенты, хуже работает через сеть

Дальше в инструкции везде используется HTTP.

Как включить режим отладки на сервере 1С: Windows и Linux

Режим отладки задаётся параметром командной строки агента сервера. Отдельной галочки в консоли кластера для этого нет.

Windows

  1. Откройте services.msc и найдите службу агента сервера 1С. Её имя содержит «1C:Enterprise 8.3 Server Agent».
  2. Откройте свойства службы и посмотрите поле «Исполняемый файл». Строка выглядит примерно так:
"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. Поле в окне службы не редактируется. Поменяйте путь в реестре: откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>.
  2. Откройте параметр ImagePath и добавьте после ragent.exe" ключи -debug -http:
"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"
  1. Перезапустите службу.
  2. Проверьте результат в «Диспетчере задач» на вкладке «Подробности»: рядом с ragent.exe и rmngr.exe должен появиться процесс dbgs.exe. Это и есть сервер отладки.

Номер версии в пути (8.3.24.1548 в примере) у вас свой. Копируйте исходную строку целиком и только вставляйте ключи — не набирайте путь заново.

Linux

На Linux всё зависит от того, как установлен сервер.

  • 🐧 Старая схема с init-скриптом. В файле /etc/sysconfig/srv1cv83 (RHEL-подобные) или /etc/default/srv1cv83 (Debian, Ubuntu) раскомментируйте строку SRV1CV8_DEBUG=1. Затем перезапустите службу srv1cv83.
  • 🐧 Новая схема на systemd (поставка с юнитами в составе платформы). Найдите имя юнита командой systemctl list-units | grep 1cv8, посмотрите его через systemctl cat, добавьте -debug -http в строку ExecStart через systemctl edit, выполните systemctl daemon-reload и перезапустите юнит.

Проверка та же: в выводе ps aux | grep dbgs должен появиться процесс сервера отладки.

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

Сервер теперь готов принимать отладчик. Дальше — настройка Конфигуратора.

Шаг 1. Протокол отладки в Конфигураторе

Откройте Сервис → Параметры и вкладку «Отладка». Выберите протокол HTTP — тот же, что указан у агента. Если протоколы разные, Конфигуратор не увидит сервер отладки.

Шаг 2. Запуск отладки

Самый простой путь — Отладка → Начать отладку (F5) прямо из Конфигуратора. Платформа запустит клиент с параметрами отладки и сама подключит его к серверу отладки.

Если пользовательский сеанс уже открыт отдельно или работает на другой машине, клиент можно запустить с параметрами командной строки:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8c.exe" ENTERPRISE /S "srv1c\buh_test" /DEBUG -http -attach /DEBUGGERURL "http://srv1c:1550"

Здесь srv1c — имя сервера, buh_test — имя базы в кластере.

Шаг 3. Подключение серверных предметов

  1. В Конфигураторе откройте Отладка → Подключение.
  2. В списке будут клиентские и серверные предметы отладки этой базы. Серверный предмет — это сеанс в рабочем процессе кластера.
  3. Нажмите кнопку автоматического подключения и отметьте типы предметов: «Сервер», «Фоновое задание», при необходимости «Тонкий клиент» и «Веб-клиент».
  4. Закройте окно. Теперь каждый новый сеанс выбранного типа будет подключаться к отладчику сам.

Автоподключение действует, пока открыт Конфигуратор. После перезапуска Конфигуратора настройку стоит проверить заново.

Ставим точку останова в серверной процедуре

Сама точка останова ставится одинаково для клиентского и серверного кода. Разница только в том, какой предмет отладки её отработает.

  1. Откройте модуль: модуль объекта, общий модуль, модуль формы или модуль менеджера.
  2. Встаньте на строку с исполняемым кодом. На пустой строке, комментарии или строке Процедура … точка не сработает.
  3. Нажмите F9 или дважды щёлкните по левому полю модуля. Появится красный кружок.
  4. Выполните в пользовательском режиме действие, которое вызывает этот код: проведите документ, нажмите кнопку, откройте отчёт.

Когда выполнение остановится, работают стандартные клавиши:

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

Где именно выполняется код

Точка останова в модуле формы может оказаться и в клиентской, и в серверной процедуре. Смотрите на директиву компиляции над процедурой:

  • 💻 &НаКлиенте — останавливает клиентский предмет, сервер не нужен.
  • 🖥️ &НаСервере, &НаСервереБезКонтекста — нужен серверный предмет.
  • 🧩 Общий модуль с флагом «Сервер» или модуль объекта при проведении — тоже сервер.

Если точка в серверной процедуре не срабатывает, а в соседней клиентской — срабатывает, почти всегда дело в том, что серверный предмет не подключён (см. предыдущий раздел).

Отладка фоновых и регламентных заданий

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

Фоновые задания

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

Регламентные задания

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

  1. Запустить задание вручную. В типовых конфигурациях на БСП откройте Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания, выберите задание и выполните его сразу. При включённом автоподключении фоновых заданий отладчик остановится в обработчике.
  2. Вызвать обработчик напрямую. В свойствах регламентного задания в Конфигураторе посмотрите поле «Имя метода» — это процедура общего модуля. Вызовите её из внешней обработки в серверной процедуре и поставьте точку останова там.

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

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

Перед отладкой регламентного задания
Выполнено: 0 / 6

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

Большинство проблем с серверной отладкой сводятся к нескольким причинам. Ниже — симптомы и что проверить.

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

Отдельно про расширения. Если серверная процедура переопределена в расширении через &Перед, &После или &Вместо, ставьте точку в модуле расширения. Точка в основной конфигурации может не сработать, если расширение заменяет её код целиком.

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

Условные точки останова: как не нажимать F5 сто раз

Серверный код часто крутится в цикле: перепроведение 3 000 документов, обработка 500 строк табличной части. Обычная точка останова остановит выполнение на первой итерации, а нужна, скажем, 412-я.

Для этого есть точка останова с условием. Поставить её можно через меню Отладка (пункт про точку останова с условием) или через контекстное меню строки. В открывшемся окне впишите выражение на встроенном языке. Отладчик остановится, только когда оно вернёт Истина.

Примеры условий:

// Остановиться на конкретном документе
Ссылка.Номер = "0000-000412"

// Остановиться на строке с определённым контрагентом
СтрокаТЧ.Контрагент.ИНН = "7701234567"

// Остановиться, когда сумма ушла в минус
Сумма < 0

Что важно знать об условиях:

  • 📌 Условие вычисляется в контексте строки, где стоит точка. Переменные из других процедур в нём недоступны.
  • 📌 Если в выражении ошибка (опечатка в имени переменной), отладчик сообщит об этом при попытке вычислить условие. Проверьте выражение через Shift+F9 на обычной остановке.
  • 📌 Условие проверяется на каждом проходе. В цикле на сотни тысяч итераций со сложным выражением это заметно замедлит выполнение.

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

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

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

Отключить, но не удалять

В списке точек останова (Alt+F9) точки можно временно отключить, не стирая. Удобно, когда в длинной отладке расставлено десять точек, а сейчас нужна одна.

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

Нужно ли включать отладку на сервере для файловой базы?
Нет. В файловом варианте серверный код выполняется в том же процессе, что и клиент. Достаточно запустить отладку из Конфигуратора клавишей F5.
Можно ли отлаживать базу на сервере с другого компьютера?
Да. Нужен Конфигуратор той же версии платформы, протокол HTTP и доступ к порту сервера отладки (по умолчанию 1550) с вашей машины.
Замедляет ли режим отладки работу пользователей?
Сервер с ключом -debug тратит дополнительные ресурсы, а остановка на точке блокирует конкретный сеанс. Поэтому отлаживать лучше на копии базы.
Как отладить код, который выполняется при входе в базу?
Включите автоподключение предметов «Сервер» и «Тонкий клиент» до запуска сеанса. Тогда отладчик успеет подключиться к новому сеансу раньше, чем выполнится обработчик при начале работы.
Сохраняются ли точки останова после закрытия Конфигуратора?
Да, точки останова привязаны к модулям и остаются после перезапуска. Настройки автоподключения стоит проверять в каждом новом сеансе отладки.