Как вывести динамическое количество колонок из документа в отчет СКД и настроить отображение ресурсов?

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

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

Анализ проблем с отображением ресурсов

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

  1. Агрегатные функции: Убедитесь, что в разделе Ресурсы схемы компоновки данных для нужного поля выбрана агрегатная функция (например, Сумма(Поле) или Количество(Поле)). Простого добавления поля недостаточно.
  2. Связи наборов данных: Если вы используете несколько наборов, СКД должна четко понимать, как соотнести данные из первого (основного) набора со вторым. Проверьте условия связи и тип соединения (обычно это Левое соединение).
  3. Передача параметров: Одной из частых ошибок является дублирование параметров в схеме СКД и в коде модуля формы. Если вы программно добавляете параметр, убедитесь, что он совпадает по имени с параметром в схеме, иначе СКД может использовать пустой параметр, из-за чего данные в отчет не попадут.

Метод 1: Использование одного сложного запроса

Самый надежный способ избежать проблем с «пропадающими» данными и сложными связями — это объединение всех источников данных в один запрос. Вместо того чтобы мучиться с Набором данных 2 и Набором данных 3, попробуйте собрать все необходимое в едином запросе к базе данных. Это позволит:

В запросе вы можете использовать операторы ВЫБОР КОГДА для создания колонок или обращаться к табличным частям документов напрямую.

Метод 2: Настройка горизонтальных группировок

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

  1. Перейти в настройки отчета (вкладка Настройки).
  2. В структуре отчета создать Группировку колонок.
  3. Выбрать поле, которое определяет содержание колонок (например, ВидСкидки).
  4. Убедиться, что в Выбранные поля добавлены ресурсы, которые должны рассчитываться для каждой колонки.

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

Программная передача параметров

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


// Получаем параметры из настроек компоновки
ПараметрыСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных;
// Устанавливаем значение параметра
ЭлементПараметра = ПараметрыСКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СчетАвансаДТ"));
Если ЭлементПараметра <> Неопределено Тогда
    ЭлементПараметра.Значение = ВыбранныйСчет;
    ЭлементПараметра.Использование = Истина;
КонецЕсли;

Всегда проверяйте результат выполнения запроса в Консоли запросов до того, как переносить его в СКД. Если в консоли данные по вашим параметрам не выводятся, то и в отчете они не появятся. Это золотое правило отладки в 1С.

Заключение: как упростить жизнь разработчику

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

Работайте по шагам: сначала добейтесь корректного результата в простом запросе, затем добавляйте группировки, и только потом настраивайте детальное отображение ресурсов.

← На главную