Почему не работает отладка в модуле менеджера отчета и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков при переходе на актуальные версии платформы 1С:Предприятие 8.3 и конфигурации, построенные на базе Библиотеки стандартных подсистем (БСП), такие как «Бухгалтерия предприятия 3.0» или «Зарплата и управление персоналом 3.1». Проблема заключается в следующем: отладка на сервере включена, в обычных серверных модулях (например, в модуле объекта при записи документа) точки останова срабатывают, но как только дело доходит до формирования стандартного отчета, отладчик упорно игнорирует код в МодулеМенеджера.

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

Причина №1: Механизм длительных операций и фоновые задания

Проанализируем, как работают современные отчеты. В старых конфигурациях формирование отчета происходило в том же сеансе, в котором работал пользователь. В современных системах практически все тяжелые операции, включая построение отчетов (например, «Книга покупок»), вынесены в фоновые задания. Это сделано для того, чтобы интерфейс пользователя не «зависал» во время ожидания данных.

Когда вы нажимаете кнопку «Сформировать», основной сеанс клиента дает команду серверу запустить отдельное фоновое задание. С точки зрения системы — это новый сеанс, к которому ваш Конфигуратор по умолчанию не подключен. Именно поэтому точка останова, установленная в МодулеМенеджера, игнорируется, хотя сам код выполняется успешно (что подтверждается изменением данных в сформированном отчете).

Настройка автоматического подключения к фоновым заданиям

Чтобы отладчик «подхватывал» новые сеансы, создаваемые системой для формирования отчетов, необходимо выполнить следующие действия:

  1. Перейдем в меню Отладка — Параметры...
  2. В открывшемся окне выберем вкладку Отладка, затем подраздел Автоматическое подключение.
  3. Установим флажок напротив пункта Фоновые задания.
  4. Нажмем «ОК» и перезапустим процесс формирования отчета.

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

Причина №2: Особенности протоколов отладки (TCP и HTTP)

Начиная с версии платформы 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

Специфика отладки регламентных заданий

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

  1. Пользователь сеанса: Регламентные задания часто запускаются под специальным системным пользователем. Убедитесь, что в окне Отладка — Подключение... в списке доступных предметов отладки вы видите сеансы всех пользователей, а не только своего.
  2. Скорость выполнения: Иногда фоновое задание отрабатывает за доли секунды, и Конфигуратор просто не успевает инициализировать подключение к нему. Чтобы «поймать» такой сеанс, применим небольшую хитрость — добавим искусственную паузу в начало отлаживаемого алгоритма:

// Временная задержка для подключения отладчика
Процедура ВыполнитьРегламентноеЗадание() Экспорт
    
    // Даем разработчику 10 секунд на подключение
    ТекущееВремя = ТекущаяДата();
    Пока ТекущаяДата() < ТекущееВремя + 10 Цикл
        // Пустой цикл
    КонецЦикла;
    
    // Далее идет основной код задания
    ПровестиАнализДанных();
    
КонецПроцедуры

Использование режима «Остановка по ошибке»

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

Разберем по шагам:

  1. В Конфигураторе выберите Отладка — Остановка по ошибке...
  2. Нажмите «Добавить» и введите текст ошибки (или оставьте настройки по умолчанию для остановки на любой ошибке).
  3. В начало интересующего вас метода вставьте заведомо ошибочный код, например, деление на ноль:

Процедура ОбработкаРасчетаНаСервере()
    // Временная "ловушка" для отладчика
    А = 1 / 0; 
    
    // Основной код
    // ...
КонецПроцедуры

Когда фоновое задание дойдет до этой строки, платформа сгенерирует исключение. Поскольку включена «Остановка по ошибке», система будет вынуждена приостановить выполнение и предложить вам открыть конфигуратор в месте возникновения проблемы. Это гарантированный способ «войти» в сеанс фонового задания.

Проблема разных рабочих процессов

В крупных кластерах серверов 1С может быть запущено несколько рабочих процессов rphost. Посмотрим на ситуацию: ваш Конфигуратор подключен к одному процессу, а фоновое задание запустилось в другом. В идеальных условиях платформа должна обрабатывать это автоматически, но на практике (особенно на старых релизах 8.3) это срабатывает не всегда.

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

Кэширование серверных модулей

Иногда причиной «странного» поведения отладки является кэш сервера. Вы вносите изменения в код, ставите точку останова, но платформа продолжает исполнять старую версию модуля. Чтобы исключить этот фактор, выполните следующие действия:

  1. Остановите службу сервера 1С.
  2. Очистите содержимое папки snccntx в каталоге данных сервера (srvinfo).
  3. Запустите службу сервера заново.

Это заставит платформу перекомпилировать все модули и обеспечит точное соответствие строк кода в Конфигураторе и исполняемых инструкций на сервере.

Подведем итог. Для успешной отладки в модулях менеджеров отчетов и фоновых заданиях нам необходимо:

Соблюдение этих правил превращает «новую реальность» платформы 8.3 из проблемы в предсказуемый рабочий процесс.

← На главную