Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков при переходе на актуальные версии платформы 1С:Предприятие 8.3 и конфигурации, построенные на базе Библиотеки стандартных подсистем (БСП), такие как «Бухгалтерия предприятия 3.0» или «Зарплата и управление персоналом 3.1». Проблема заключается в следующем: отладка на сервере включена, в обычных серверных модулях (например, в модуле объекта при записи документа) точки останова срабатывают, но как только дело доходит до формирования стандартного отчета, отладчик упорно игнорирует код в МодулеМенеджера.
Выясним причину этого поведения и рассмотрим пошагово, как настроить среду разработки для полноценного анализа серверного кода.
Проанализируем, как работают современные отчеты. В старых конфигурациях формирование отчета происходило в том же сеансе, в котором работал пользователь. В современных системах практически все тяжелые операции, включая построение отчетов (например, «Книга покупок»), вынесены в фоновые задания. Это сделано для того, чтобы интерфейс пользователя не «зависал» во время ожидания данных.
Когда вы нажимаете кнопку «Сформировать», основной сеанс клиента дает команду серверу запустить отдельное фоновое задание. С точки зрения системы — это новый сеанс, к которому ваш Конфигуратор по умолчанию не подключен. Именно поэтому точка останова, установленная в МодулеМенеджера, игнорируется, хотя сам код выполняется успешно (что подтверждается изменением данных в сформированном отчете).
Чтобы отладчик «подхватывал» новые сеансы, создаваемые системой для формирования отчетов, необходимо выполнить следующие действия:
После включения этой настройки Конфигуратор будет автоматически отслеживать появление новых фоновых процессов на сервере и подключаться к ним в момент их инициализации. Рассмотрим подробнее, почему иногда этого бывает недостаточно.
Начиная с версии платформы 8.3.7, в 1С доступно два протокола отладки. Выбор протокола существенно влияет на то, насколько стабильно Конфигуратор будет «ловить» фоновые задания:
Важно помнить, что если сам сервер 1С запущен без соответствующих ключей, никакие настройки в Конфигураторе не помогут. Проверим параметры запуска службы 1C:Enterprise 8.3 Server Agent. В строке запуска должен присутствовать флаг -debug. Если используется отладка по HTTP, параметры должны выглядеть примерно так:
"C:\Program Files\1cv8\8.3.x.x\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug -http
Рассмотрим ситуацию, когда необходимо отладить регламентное задание, которое запускается не интерактивно пользователем, а по расписанию. Здесь возникают дополнительные сложности:
// Временная задержка для подключения отладчика
Процедура ВыполнитьРегламентноеЗадание() Экспорт
// Даем разработчику 10 секунд на подключение
ТекущееВремя = ТекущаяДата();
Пока ТекущаяДата() < ТекущееВремя + 10 Цикл
// Пустой цикл
КонецЦикла;
// Далее идет основной код задания
ПровестиАнализДанных();
КонецПроцедуры
Если автоматическое подключение включено, но точка останова все равно игнорируется, проанализируем ситуацию с помощью режима Остановка по ошибке. Это отличный способ принудительно заставить отладчик сфокусироваться на нужном коде.
Разберем по шагам:
Процедура ОбработкаРасчетаНаСервере()
// Временная "ловушка" для отладчика
А = 1 / 0;
// Основной код
// ...
КонецПроцедуры
Когда фоновое задание дойдет до этой строки, платформа сгенерирует исключение. Поскольку включена «Остановка по ошибке», система будет вынуждена приостановить выполнение и предложить вам открыть конфигуратор в месте возникновения проблемы. Это гарантированный способ «войти» в сеанс фонового задания.
В крупных кластерах серверов 1С может быть запущено несколько рабочих процессов rphost. Посмотрим на ситуацию: ваш Конфигуратор подключен к одному процессу, а фоновое задание запустилось в другом. В идеальных условиях платформа должна обрабатывать это автоматически, но на практике (особенно на старых релизах 8.3) это срабатывает не всегда.
Если вы столкнулись с такой проблемой, попробуйте на время отладки ограничить количество рабочих процессов на сервере до одного или использовать консоль администрирования для проверки того, на каком именно процессе запущен целевой фоновый сеанс.
Иногда причиной «странного» поведения отладки является кэш сервера. Вы вносите изменения в код, ставите точку останова, но платформа продолжает исполнять старую версию модуля. Чтобы исключить этот фактор, выполните следующие действия:
snccntx в каталоге данных сервера (srvinfo).Это заставит платформу перекомпилировать все модули и обеспечит точное соответствие строк кода в Конфигураторе и исполняемых инструкций на сервере.
Подведем итог. Для успешной отладки в модулях менеджеров отчетов и фоновых заданиях нам необходимо:
-debug.Соблюдение этих правил превращает «новую реальность» платформы 8.3 из проблемы в предсказуемый рабочий процесс.