Как отключить фоновое формирование отчетов в 1С для удобной отладки

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

При работе с современными конфигурациями, такими как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей, разработчики часто сталкиваются с механизмом формирования отчетов в фоновом задании. Этот механизм, реализованный в рамках Библиотеки стандартных подсистем (БСП), значительно повышает комфорт пользователя, позволяя продолжать работу с программой, пока отчет строится на сервере. Однако для программиста это создает дополнительные трудности при отладке: точки останова в модуле объекта могут не срабатывать, а контекст выполнения уходит в отдельный сеанс.

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

Метод 1. Использование параметра запуска «РежимОтладки»

Самый простой и эффективный способ, предусмотренный разработчиками БСП, — это запуск клиентского приложения со специфическим параметром командной строки. Проанализируем, как это работает. В коде БСП существует глобальная проверка, которая определяет, нужно ли выносить длительные операции (включая отчеты) в фон. Если система видит флаг отладки, она выполняет код синхронно.

Для активации этого режима выполним следующие шаги:

  1. Откроем Конфигуратор вашей информационной базы.
  2. Перейдем в меню Сервис — Параметры.
  3. В открывшемся окне выберем вкладку Запуск 1С:Предприятия, затем подвкладку Дополнительные.
  4. В поле Параметры запуска впишем следующую строку: /C РежимОтладки (обратите внимание, что буква "C" должна быть латинской, а между ней и текстом должен быть пробел).
  5. Нажмем ОК и запустим систему в режиме отладки (клавиша F5).

Теперь при нажатии кнопки «Сформировать» в любом типовом отчете БСП поймет, что разработчику требуется прямой контроль, и не будет порождать новое фоновое задание. Весь процесс построения пройдет в рамках вашего текущего сеанса Тонкого клиента или Толстого клиента.

Метод 2. Настройка автоматического подключения отладчика

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

Рассмотрим порядок действий:

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

Важный нюанс: Чтобы этот метод работал стабильно, рекомендуется использовать протокол отладки HTTP вместо устаревшего TCP/IP. При использовании HTTP отладчик гораздо надежнее обнаруживает кратковременные фоновые процессы. Также помните, что отладка на сервере должна быть разрешена (параметр -debug в строке запуска службы агента сервера 1С).

Метод 3. Программное отключение фона в модуле отчета

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

В процедуре ПриКомпоновкеРезультата мы можем прервать штатный механизм БСП. Посмотрим на пример кода:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Если нам нужно принудительно отладить код здесь и сейчас:
    СтандартнаяОбработка = Ложь; // Отключаем типовой механизм БСП/Платформы
    
    // Выполняем компоновку вручную
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Установив СтандартнаяОбработка = Ложь, мы сообщаем платформе, что берем управление на себя. Поскольку этот код исполняется в контексте вызова формы (если отчет запущен не в фоне), мы можем свободно ставить точки останова и анализировать содержимое таблиц значений или внешних наборов данных.

Почему отладка фоновых заданий иногда не срабатывает?

Проанализируем основные причины, по которым даже при включенном автоподключении отладка может «пролетать» мимо:

Использование консоли системы компоновки данных

Если ваша задача — проверить именно запрос или логику связей в СКД, а не программный код в модулях, отличным решением станет использование Консоли СКД. Мы можем выгрузить настройки и схему из вашего отчета, загрузить их в консоль и выполнить там. Большинство современных консолей позволяют отключать фоновое выполнение одной галочкой в интерфейсе, что избавляет от необходимости перезапускать конфигуратор с параметрами /C.

Подведем итог: для быстрой и комфортной работы наиболее предпочтительным является Метод 1 с ключом РежимОтладки, так как он универсален для всех типовых решений на базе БСП и гарантирует предсказуемое поведение системы без изменения программного кода.

← На главную