Как настроить отчет СКД с внешним набором данных, чтобы корректно выводить значения на пересечении строк и колонок?

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

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

Обязательная настройка ресурсов в СКД

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

Рассмотрим, как это работает: если вы просто добавили числовое поле в «Выбранные поля» настроек отчета, СКД воспримет его как детальную запись. Однако при формировании таблицы система пытается агрегировать данные. Если поле не является ресурсом, СКД «не знает», какую функцию применить к значениям (суммировать, брать максимум или среднее), и в итоге оставляет ячейку пустой.

Что нужно сделать:

  1. Перейдем на вкладку Ресурсы в схеме компоновки данных.
  2. Перенесем числовые поля (например, Количество или Сумма) в правую колонку.
  3. Убедимся, что в колонке «Выражение» установлена агрегатная функция, например, Сумма(Количество).

Соответствие имен и типов данных во внешнем наборе

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

Посмотрим на пример правильной инициализации таблицы значений в коде:


ОписаниеЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2));
ОписаниеНоменклатура = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", ОписаниеНоменклатура);
ТЗ.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
ТЗ.Колонки.Добавить("Количество", ОписаниеЧисло);

Программная связь в процедуре ПриКомпоновкеРезультата

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

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


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

Проблема кэширования настроек (Варианты отчета)

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

Как решить проблему с кэшем:

  1. В режиме «1С:Предприятие» в форме отчета нажмите кнопку «Еще» — «Установить стандартные настройки».
  2. Если это не помогло, попробуйте изменить имя отчета или создать новый вариант.
  3. Проверьте, добавлена ли форма отчета. В некоторых случаях наличие собственной формы отчета помогает корректно инициализировать настройки компоновщика.

Обработка пустых значений и NULL

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

Итоги и рекомендации

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

  1. Добавлено ли поле в Ресурсы на вкладке СКД.
  2. Совпадают ли имена колонок в ТаблицеЗначений с именами в схеме (с учетом регистра).
  3. Сброшены ли настройки пользователя до стандартных.

Соблюдение этих правил гарантирует правильное сопоставление данных и корректный вывод отчета в виде кросс-таблицы по месяцам или любым другим измерениям.

← На главную