При работе с современными конфигурациями, такими как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей, разработчики часто сталкиваются с механизмом формирования отчетов в фоновом задании. Этот механизм, реализованный в рамках Библиотеки стандартных подсистем (БСП), значительно повышает комфорт пользователя, позволяя продолжать работу с программой, пока отчет строится на сервере. Однако для программиста это создает дополнительные трудности при отладке: точки останова в модуле объекта могут не срабатывать, а контекст выполнения уходит в отдельный сеанс.
В этой статье мы подробно разберем, как заставить систему формировать отчет в текущем сеансе, чтобы отладчик гарантированно «заходил» во все процедуры, включая ПриКомпоновкеРезультата и вложенные функции общих модулей.
Самый простой и эффективный способ, предусмотренный разработчиками БСП, — это запуск клиентского приложения со специфическим параметром командной строки. Проанализируем, как это работает. В коде БСП существует глобальная проверка, которая определяет, нужно ли выносить длительные операции (включая отчеты) в фон. Если система видит флаг отладки, она выполняет код синхронно.
Для активации этого режима выполним следующие шаги:
/C РежимОтладки (обратите внимание, что буква "C" должна быть латинской, а между ней и текстом должен быть пробел).Теперь при нажатии кнопки «Сформировать» в любом типовом отчете БСП поймет, что разработчику требуется прямой контроль, и не будет порождать новое фоновое задание. Весь процесс построения пройдет в рамках вашего текущего сеанса Тонкого клиента или Толстого клиента.
Если по каким-то причинам вы не хотите отключать фоновый режим (например, нужно отладить именно логику взаимодействия с фоновым заданием), можно настроить платформу так, чтобы она автоматически «подхватывала» новые серверные процессы. Выясним, как это сделать в актуальных версиях платформы 1С:Предприятие 8.3.
Рассмотрим порядок действий:
Важный нюанс: Чтобы этот метод работал стабильно, рекомендуется использовать протокол отладки HTTP вместо устаревшего TCP/IP. При использовании HTTP отладчик гораздо надежнее обнаруживает кратковременные фоновые процессы. Также помните, что отладка на сервере должна быть разрешена (параметр -debug в строке запуска службы агента сервера 1С).
Бывают ситуации, когда отчет является внешним или вы вносите изменения в расширение, и вам нужно гарантированно отключить фоновое выполнение только для конкретного объекта, не затрагивая всю систему. Разберем, как это реализовать через переопределение стандартной обработки в модуле объекта отчета.
В процедуре ПриКомпоновкеРезультата мы можем прервать штатный механизм БСП. Посмотрим на пример кода:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
// Если нам нужно принудительно отладить код здесь и сейчас:
СтандартнаяОбработка = Ложь; // Отключаем типовой механизм БСП/Платформы
// Выполняем компоновку вручную
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Установив СтандартнаяОбработка = Ложь, мы сообщаем платформе, что берем управление на себя. Поскольку этот код исполняется в контексте вызова формы (если отчет запущен не в фоне), мы можем свободно ставить точки останова и анализировать содержимое таблиц значений или внешних наборов данных.
Проанализируем основные причины, по которым даже при включенном автоподключении отладка может «пролетать» мимо:
v8_XXXX.tmp). Отладчик считает это другим объектом. Чтобы избежать этого, на время разработки лучше добавить отчет в состав конфигурации или расширения.Сигнал() или цикл, чтобы дать отладчику время.Если ваша задача — проверить именно запрос или логику связей в СКД, а не программный код в модулях, отличным решением станет использование Консоли СКД. Мы можем выгрузить настройки и схему из вашего отчета, загрузить их в консоль и выполнить там. Большинство современных консолей позволяют отключать фоновое выполнение одной галочкой в интерфейсе, что избавляет от необходимости перезапускать конфигуратор с параметрами /C.
Подведем итог: для быстрой и комфортной работы наиболее предпочтительным является Метод 1 с ключом РежимОтладки, так как он универсален для всех типовых решений на базе БСП и гарантирует предсказуемое поведение системы без изменения программного кода.