Сталкивались ли вы с ситуацией, когда вы ставите точку останова в коде, например, в модуле менеджера, но отладчик ее упорно игнорирует? При этом вы точно знаете, что код выполняется — сообщения через процедуру Сообщить() исправно выводятся. Эта проблема — одна из самых частых при разработке в клиент-серверном варианте, и у нее есть несколько типовых причин. Давайте вместе разберемся, почему так происходит и как заставить отладку работать.
Проанализируем ситуацию. Модуль менеджера, как и другие серверные модули (модули объектов, общие серверные модули), выполняется на стороне сервера 1С. Код на форме может выполняться как на клиенте (&НаКлиенте), так и на сервере (&НаСервере). Если отладка работает на форме, но не работает в модуле менеджера, это почти наверняка указывает на одну из двух причин: либо отладка на сервере в принципе не включена, либо ваш код выполняется в отдельном, фоновом процессе.
Это самая распространенная причина. В целях повышения производительности по умолчанию отладка серверных вызовов в клиент-серверной архитектуре отключена. Чтобы ее активировать, необходимо внести изменения в параметры запуска службы сервера 1С. Действия зависят от операционной системы, на которой установлен сервер.
Важно: все манипуляции со службой сервера необходимо производить, когда в базе нет активных пользователей, так как потребуется перезапуск службы, что приведет к завершению всех текущих сеансов.
Нам потребуется отредактировать параметры запуска службы через реестр. Разберем по шагам:
services.msc) или через "Диспетчер задач".Win + R и введите команду regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.x Server Agent (x86-64). Замените 8.x на вашу версию.ImagePath. Его значение — это строка запуска процесса ragent.exe. Нам нужно добавить в самый конец этой строки флаг -debug.
Например, было:
"C:\Program Files\1cv8\8.3.22.2106\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
А должно стать (обратите внимание на -debug в конце):
"C:\Program Files\1cv8\8.3.22.2106\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
В Linux-системах настройка выполняется через редактирование файла юнита для systemd или скрипта запуска. Чаще всего достаточно добавить переменную окружения SRV1CV8_DEBUG=1 в файл, отвечающий за запуск службы сервера.
После перезапуска службы можно легко проверить, включилась ли отладка. Зайдите в Конфигуратор и поставьте точку останова в процедуре ПриСозданииНаСервере в форме любого документа или справочника. Откройте эту форму в режиме Предприятия. Если отладчик остановился на точке останова — поздравляем, отладка на сервере работает! Если нет — перепроверьте выполненные шаги или переходите к следующей возможной причине.
Вторая вероятная причина — ваш код в модуле менеджера выполняется не в основном пользовательском сеансе, а в фоновом или регламентном задании. Например, это может быть обработка, запущенная по расписанию, или длительная операция, вынесенная в фон, чтобы не блокировать интерфейс пользователя. Фоновые задания выполняются в отдельных сеансах, и стандартный отладчик, подключенный к вашему сеансу, их "не видит".
Чтобы отлаживать такой код, нужно настроить автоматическое подключение отладчика к фоновым заданиям. Сделать это очень просто.
После этого отладчик будет автоматически "присоединяться" ко всем запускаемым фоновым процессам, и ваша точка останова сработает. Будьте внимательны: если в системе активно используются регламентные задания, отладчик может начать останавливаться на каждом из них, что может мешать работе. Включайте эту опцию на время отладки и отключайте после.
Существует также альтернативный способ для конфигураций, использующих Библиотеку стандартных подсистем (БСП). Можно запустить сеанс Предприятия со специальным ключом /РежимОтладки. Этот ключ заставляет многие фоновые задания выполняться синхронно, в том же сеансе, что позволяет отлаживать их без автоматического подключения.
Если два основных способа не помогли, проблема может быть в чем-то еще, хотя это случается реже.
Сообщить(), как в исходной проблеме, — отличный способ для такой проверки.Таким образом, проблема с неотрабатывающей точкой останова в серверном коде почти всегда решается двумя шагами: проверкой и включением отладки на сервере, а затем, при необходимости, настройкой подключения к фоновым заданиям. Следуя этим инструкциям, вы сможете наладить полноценную отладку и быстро находить ошибки в своем коде.