Работа с внешними обработками в клиент-серверном варианте 1С (особенно в таких конфигурациях, как БГУ 2.0) часто сопровождается трудностями при попытке отладить серверный код. Программисты сталкиваются с ситуацией, когда точка останова, установленная в модуле объекта, попросту игнорируется системой, хотя на локальной (файловой) базе всё работает корректно. Рассмотрим подробно, почему это происходит и как настроить рабочее окружение для полноценной отладки.
Первым делом проанализируем состояние самого процесса отладки. Бывают ситуации, когда сеанс «1С:Предприятие» запущен, но он не связан с текущим сеансом Конфигуратора. Выясним, как это проверить. Если вы нажимаете кнопку «Начать отладку» (F5), а значок отладки в конфигураторе не становится активным (или кнопка запуска остается доступной для повторного нажатия), значит, автоматического подключения не произошло.
Выполним следующие шаги для принудительного подключения:
Разберем ситуацию, когда в списке нет нужного сеанса. Это может означать, что отладка на сервере или клиенте вообще запрещена настройками системы. После ручного подключения попробуем снова вызвать действие в обработке. Если точка останова на клиенте заработала, а на сервере — нет, переходим к следующему этапу.
Это наиболее распространенная причина проблем. По умолчанию сервер 1С:Предприятия запускается в режиме оптимизации производительности, где отладка выключена, так как она потребляет дополнительные ресурсы сервера. Проверим, включен ли режим -debug. Если у вас нет прямого доступа к консоли сервера или службам Windows, проанализируем косвенные признаки.
Попробуем создать простейший тест. В модуле обработки напишем переход с клиента на сервер и попробуем зайти внутрь серверной процедуры с помощью клавиши F11:
&НаКлиенте
Процедура ТестОтладки(Команда)
ТестовыйВызовНаСервере(); // Ставим точку здесь и жмем F11
КонецПроцедуры
&НаСервере
Процедура ТестовыйВызовНаСервере()
А = 1 + 1; // Если сюда не зашло — отладка на сервере выключена
КонецПроцедуры
Если система «перепрыгивает» серверную процедуру, значит, на сервере не установлен ключ -debug. В этом случае необходимо обратиться к системному администратору, чтобы он добавил этот параметр в строку запуска службы 1C:Enterprise 8.3 Server Agent в реестре Windows или в настройках конфигурационного файла на Linux.
Даже если ключ -debug установлен, точки останова во внешних обработках могут не срабатывать из-за специфики их запуска. В управляемых формах (БГУ 2.0) внешние обработки часто исполняются в фоновых заданиях или через временные файлы. Настроим автоматический захват этих процессов.
Зайдем в меню Отладка — Подключение... и нажмем кнопку Настройка.... Убедимся, что установлены флажки напротив следующих пунктов:
Почему важны именно Фоновые задания? В конфигурациях на базе БСП (Библиотека стандартных подсистем), к которым относится и БГУ, запуск длительных операций из внешних обработок часто делегируется фоновому заданию на сервере. Если этот флаг не стоит, ваш Конфигуратор просто «не заметит» запуск нового серверного потока, в котором выполняется ваш код.
Проанализируем еще один нюанс: когда мы открываем внешнюю обработку через Файл — Открыть, она получает один путь. Когда же она зарегистрирована в справочнике «Дополнительные отчеты и обработки», система копирует ее во временное хранилище на сервере. Из-за разницы путей Конфигуратор может не сопоставить открытый у вас файл с тем кодом, который реально исполняет сервер.
Рекомендуем на время отладки выполнять следующие действия:
Файл — Открыть в режиме Предприятия, предварительно открыв этот же файл в Конфигураторе.Бывают ситуации (например, работа в «облаке»), когда включить серверную отладку невозможно физически. В этом случае применим метод логирования. Вместо точек останова будем использовать вывод информации в доступные каналы.
Рассмотрим использование Журнала регистрации. Это надежнее, чем метод Сообщить(), так как сообщения могут не вернуться с сервера на клиент при возникновении ошибки или при работе в фоновом задании.
&НаСервере
Процедура ВыполнитьДействиеНаСервере(Параметры)
// Вместо точки останова пишем в лог
ЗаписьЖурналаРегистрации("ОтладкаОбработки",
УровеньЖурналаРегистрации.Предупреждение, , ,
"Значение переменной X: " + Параметры.ЗначениеX);
// Ваш код...
КонецПроцедуры
Затем в режиме Предприятия откроем Журнал регистрации, установим фильтр по событию "ОтладкаОбработки" и увидим все значения переменных в динамике. Это позволяет проанализировать алгоритм даже на «глухом» сервере без возможности пошагового прохода.
Выясним, какой протокол используется в вашей системе. В современных версиях платформы 8.3 существует два режима. Если ваша база опубликована на веб-сервере или находится в облаке, скорее всего, используется HTTP-отладка. Для ее работы требуется наличие службы dbgs.
Если вы работаете через локальную сеть, проверьте настройки брандмауэра. Для TCP-отладки должны быть открыты порты из диапазона 1560–1591. Если порты блокируются антивирусом или сетевым экраном, Конфигуратор увидит сеанс, но не сможет «зацепиться» за него для передачи данных отладки.
Подводя итог, если точка останова не срабатывает, пройдем по чек-листу:
-debug у службы сервера (через запуск серверной процедуры с F11).ЗаписьЖурналаРегистрации для анализа данных «на лету» без остановки процесса.Использование этих методов позволит вам эффективно диагностировать ошибки в 1С:БГУ 2.0 даже в сложных условиях клиент-серверной архитектуры.