Как посмотреть результирующую таблицу перед выводом в табличный документ в СКД

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

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

Способ 1. Программный вывод в коллекцию значений

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

Разберем по шагам, как это реализовать программно:


// 1. Получаем схему и настройки
Схема = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();

// 2. Формируем макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки);

// 3. Инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

// 4. Создаем коллекцию для выгрузки и процессор вывода
ТаблицаРезультата = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультата);

// 5. Выводим результат в таблицу
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Теперь в отладчике можно просмотреть содержимое переменной ТаблицаРезультата

Проанализируем ситуацию: в переменной ТаблицаРезультата вы увидите колонки, соответствующие выбранным полям, и строки с результатами. Если данных там нет или они неверны, значит, проблему нужно искать в запросе или связях наборов данных.

Способ 2. Извлечение исполняемого запроса из макета

СКД крайне редко выполняет тот запрос, который вы написали в конфигураторе «как есть». Система модифицирует его: добавляет условия ГДЕ из пользовательских отборов, соединяет таблицы для получения вычисляемых полей и итогов. Чтобы увидеть реальный текст запроса, который уходит в СУБД, нам нужно проанализировать МакетКомпоновкиДанных.

Для этого в режиме отладки после выполнения метода КомпоновщикМакета.Выполнить() нужно найти в объекте МакетКомпоновки свойство НаборыДанных. Внутри него для наборов типа «запрос» будет доступно поле Запрос. Скопируйте этот текст и значения параметров в Консоль запросов. Это позволит вам выполнить «чистый» запрос к базе данных и проверить, какие данные он возвращает до вмешательства механизмов компоновки.

Способ 3. Использование Консоли компоновки данных (БСП)

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

  1. Просмотр XML-схемы: Вы можете увидеть финальный XML-макет, который генерирует система.
  2. Исполняемый запрос: Консоль сама выводит итоговый текст запроса со всеми подставленными параметрами.
  3. Промежуточные таблицы: Инструмент позволяет просматривать данные на разных этапах компоновки, что незаменимо при отладке сложных отчетов с иерархией.

Способ 4. Итеративный обход результата методом «Следующий»

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


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

Этот метод позволяет «поймать» конкретную строку или группировку и посмотреть, какие значения параметров в ней содержатся в момент генерации отчета.

Способ 5. Создание упрощенных вариантов отчета

Выясним причину неверных данных без написания кода. В СКД можно создать дополнительный Вариант отчета. В настройках этого варианта следует максимально упростить структуру:

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

Резюме

Для эффективной отладки СКД программисту важно владеть всеми перечисленными техниками. Если проблема сложная и включает временные таблицы, лучше всего использовать Инструменты разработчика (ИР) или консоль БСП. Если нужно быстро проверить значения полей — используйте программный вывод в ТаблицаЗначений и встроенный визуализатор отладчика 1С.

← На главную