При создании отчетов в Системе компоновки данных (СКД) часто возникает задача вывести данные, где часть колонок жестко задана в запросе, а другая часть — формируется динамически на основании данных из документа (например, список скидок или видов начислений). В данной статье мы разберем, почему ресурсы могут не отображаться, как правильно настроить связи наборов данных и какие подходы к архитектуре отчета являются наиболее эффективными.
Если в вашем отчете ресурсы (числовые показатели) не появляются в группировках, причин может быть несколько. Прежде всего, давайте проверим фундаментальные настройки:
Ресурсы схемы компоновки данных для нужного поля выбрана агрегатная функция (например, Сумма(Поле) или Количество(Поле)). Простого добавления поля недостаточно.Левое соединение).СКД может использовать пустой параметр, из-за чего данные в отчет не попадут.Самый надежный способ избежать проблем с «пропадающими» данными и сложными связями — это объединение всех источников данных в один запрос. Вместо того чтобы мучиться с Набором данных 2 и Набором данных 3, попробуйте собрать все необходимое в едином запросе к базе данных. Это позволит:
В запросе вы можете использовать операторы ВЫБОР КОГДА для создания колонок или обращаться к табличным частям документов напрямую.
Если вам необходимо, чтобы колонки формировались динамически, разберем работу с горизонтальными группировками. Чтобы вывести значения скидок в колонки, нужно:
Настройки).Группировку колонок.ВидСкидки).Выбранные поля добавлены ресурсы, которые должны рассчитываться для каждой колонки.Важно помнить, что СКД строит таблицу ресурсов автоматически, если группировка настроена корректно. Если ресурсы повторяются или не выводятся, проверьте, не добавили ли вы ресурс в Выбранные поля без предварительного определения в настройках схемы.
Если вам требуется заполнять параметры из кода, делайте это через коллекцию ПараметрыДанных объекта КомпоновщикНастроек. Рассмотрим пример правильного заполнения параметра:
// Получаем параметры из настроек компоновки
ПараметрыСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных;
// Устанавливаем значение параметра
ЭлементПараметра = ПараметрыСКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СчетАвансаДТ"));
Если ЭлементПараметра <> Неопределено Тогда
ЭлементПараметра.Значение = ВыбранныйСчет;
ЭлементПараметра.Использование = Истина;
КонецЕсли;
Всегда проверяйте результат выполнения запроса в Консоли запросов до того, как переносить его в СКД. Если в консоли данные по вашим параметрам не выводятся, то и в отчете они не появятся. Это золотое правило отладки в 1С.
Если вы чувствуете, что архитектура отчета становится слишком громоздкой (множество наборов, сложные связи, непонятные параметры), — упрощайте. Перенос логики в запрос — это не «идиотский ход», а профессиональное решение, которое экономит время на отладку и поддержку. Если же количество колонок заранее неизвестно и они зависят от состава документа, используйте динамический запрос, формируемый кодом, либо Сводную таблицу в настройках отчета.
Работайте по шагам: сначала добейтесь корректного результата в простом запросе, затем добавляйте группировки, и только потом настраивайте детальное отображение ресурсов.