Как отладить сложный отчет с программным заполнением данных в Консоли компоновки ИР

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

При работе с профессиональным инструментарием «Инструменты разработчика» (ИР) часто возникает вопрос: как перенести в консоль логику отчета, которая прописана не в самой схеме компоновки данных (СКД), а в модуле объекта? В современных конфигурациях (ЗУП 3.1, ERP 2.5) отчеты редко представляют собой «чистый» запрос. Текст запроса может динамически собираться, параметры — устанавливаться программно, а наборы данных — подменяться прямо перед выполнением. Рассмотрим подробно, как эффективно отлаживать такие отчеты, используя возможности Консоли компоновки данных ИР.

Метод 1. Извлечение исполняемого запроса через отладчик

Самый простой, но «ручной» способ — это получение итогового текста запроса, который система генерирует после всех программных манипуляций в модуле объекта. Разберем этот процесс по шагам:

  1. Запустим отчет в обычном пользовательском режиме.
  2. В конфигураторе установим точку останова в модуле объекта (обычно это процедура ПриКомпоновкеРезультата или вызов компоновщика макета).
  3. Найдем строку, где вызывается КомпоновщикМакета.Выполнить().
  4. В окне «Вычислить выражение» (Shift+F9) проанализируем переменную МакетКомпоновки. Внутри этого объекта в коллекции НаборыДанных содержится итоговый текст запроса со всеми подставленными условиями и расширениями.

Проанализируем пример кода для извлечения запроса в отладчике:


// В отладчике можно вычислить следующее выражение:
МакетКомпоновки.НаборыДанных.НаборДанных1.Запрос

Полученный текст запроса можно просто скопировать и вставить в Консоль компоновки ИР. Однако помните, что в этом случае вы потеряете связь с параметрами и настройками СКД, поэтому этот метод хорош только для быстрой проверки логики самого запроса.

Метод 2. Использование вкладки «События» в Консоли ИР

Консоль компоновки ИР позволяет имитировать работу модуля объекта через встроенные обработчики. Рассмотрим, как правильно перенести код из конфигуратора в консоль. Проанализируем ситуацию: в отчете используется общий модуль для заполнения общих запросов (например, ЗарплатаКадрыОбщиеНаборыДанных).

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

Рассмотрим пример адаптации кода:


// Код в модуле объекта отчета:
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеЗапросы(ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных, Истина);

// Код для вставки в обработчик Консоли ИР "Перед компоновкой макета":
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеЗапросы(Схема.НаборыДанных, Истина);

Обратим внимание, что в контексте обработчика ИР объект Схема уже определен. Если вы попытаетесь использовать Объект.СхемаКомпоновкиДанных, система может выдать ошибку «Поле объекта не обнаружено», так как структура временного объекта в консоли отличается от типового отчета.

Метод 3. Захват схемы из оперативной памяти (Runtime)

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

Посмотрим, как это сделать:

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

Этот способ является наиболее предпочтительным для сложных отчетов в ERP-системах, так как он позволяет увидеть схему «как она есть» в памяти 1С непосредственно перед выполнением запроса к СУБД.

Метод 4. Работа через «Консоль внешних отчетов»

Если вы работаете с внешним отчетом (файл .erf), в составе ИР предусмотрен специальный инструмент — «Консоль внешних отчетов». Разберем ее преимущество: в отличие от обычной консоли СКД, она умеет загружать файл целиком, включая его модуль объекта.

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

  1. Откроем инструмент «Консоль внешних отчетов».
  2. Загрузим ваш файл .erf.
  3. Инструмент попытается выполнить штатные процедуры модуля объекта при запуске.
  4. Вы получите возможность редактировать настройки и видеть результат, сохраняя при этом работу оригинальных программных алгоритмов формирования данных.

Важные нюансы при отладке в ИР

Проанализируем типичные ошибки, с которыми сталкиваются разработчики:

1. Контекст исполнения кода. В обработчиках консоли ИР переменная ЭтотОбъект может ссылаться на саму обработку консоли, а не на ваш отчет. Всегда проверяйте, какие переменные проброшены в контекст (обычно это Схема, Настройки, КомпоновщикНастроек).

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


// Пример инициализации для типовых конфигураций
УстановкаПараметровСеанса.УстановитьПараметрыСеансаПользователя();

3. Динамические наборы данных. Если отчет программно добавляет НаборДанныхОбъект, убедитесь, что в консоли ИР на вкладке «Внешние наборы данных» вы указали таблицу (например, ТаблицаЗначений), которая будет имитировать эти данные, иначе компоновка завершится с ошибкой отсутствия набора.

Резюмируем: для простых правок достаточно скопировать итоговый запрос из макета компоновки через отладчик. Для полноценной разработки и циклической отладки лучше использовать вкладку «События» в ИР, заменяя обращения к ЭтотОбъект на прямые ссылки на Схему и КомпоновщикНастроек.

← На главную