Как поместить ресурс в строку таблицы СКД рядом с колонками по периодам?

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

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

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

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

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

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

Основное решение: Настройка группировок в колонках таблицы

Посмотрим на практическое решение, которое позволяет поместить общие ресурсы в начало колонок, а периодические — развернуть следом. Для этого мы будем использовать структуру таблицы с несколькими группировками колонок.

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

Точечная настройка "Выбранных полей" для каждой колонки

Чтобы в динамических колонках по месяцам не дублировались общие показатели (например, чтобы под каждым месяцем не выводились "Поступление" или "Списание"), разберем настройку вкладки Выбранные поля на уровне конкретных группировок, а не всего отчета.

  1. Выделим созданную группировку колонок Детальные записи. Перейдем на вкладку Выбранные поля именно для этой группировки и добавим туда общие ресурсы: БалансоваяСтоимость, СуммаПоступления, СуммаСписания.
  2. Выделим группировку колонок Месяц. На ее вкладке Выбранные поля оставим исключительно ресурс АмортизацияЗаПериод.
  3. Важно: перейдем в общие настройки всего отчета (корневой элемент настроек) и удалим из Выбранных полей эти ресурсы, чтобы СКД не пыталась принудительно вывести их везде и они не наслаивались друг на друга.

Управление расположением ресурсов и улучшение внешнего вида отчета

Рассмотрим дополнительные настройки, которые сделают наш отчет более читаемым и эстетичным.

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

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

  1. В схеме компоновки данных создадим новое Вычисляемое поле. Назовем его, например, ЗаголовокОбщихПоказателей.
  2. В выражении этого поля укажем простую строку с пробелом или текстом: "Общие показатели".
  3. В настройках структуры вместо пустой группировки "Детальные записи" в колонках выберем группировку по этому новому полю.

В результате над общими ресурсами появится красивый и понятный заголовок, объединяющий балансовую стоимость, поступления и списания.

Альтернативный архитектурный подход: Связь наборов данных

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

  1. Набор данных 1 (Справочник или Регистр сведений): Напишем запрос, который собирает только статичные или общие данные по основным средствам на определенную дату (например, из регистра бухгалтерии виртуальной таблицей остатков). Эти данные не будут являться ресурсами в чистом виде — они выступят в роли атрибутов (реквизитов) самого объекта.
  2. Набор данных 2 (Обороты): Напишем запрос к виртуальной таблице оборотов, который извлекает только суммы начисленной амортизации в разрезе периодов (месяцев).
  3. Свяжем эти два набора на вкладке Связи наборов данных по полю ОсновноеСредство.

В чем преимущество такого подхода? Теперь нам не нужно мудрить с детальными записями в колонках таблицы. Мы можем выводить общие данные (балансовую стоимость и т.д.) просто как дополнительные поля в группировке строк. Для этого в настройках группировки строк укажем параметр Расположение реквизитов как ВОтдельнойКолонке. А периодическую амортизацию выведем стандартно: в колонках таблицы укажем группировку Месяц, а в выбранных полях отчета оставим только ресурс Амортизация.

В этом сценарии общие суммы вообще не обязательно назначать ресурсами на вкладке Ресурсы (если по ним не нужны общие итоги в подвале отчета), так как они корректно отобразятся как свойства группировки строк, не конфликтуя с колонками по периодам. Этот метод значительно упрощает логику настройки и повышает производительность отчета при больших объемах данных.

← На главную