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

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

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывести данные в виде шахматки (матрицы/кросс-таблицы). Например, когда по строкам выводятся аналитические разрезы (подразделения, статьи ДДС), а по колонкам — периоды (месяцы), причем под каждым месяцем необходимо выводить сразу несколько числовых показателей (планируемый приход и планируемый расход).

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

1. Подготовка запроса и ресурсов набора данных

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

Пример текста запроса в наборе данных СКД:


ВЫБРАТЬ
	ПланОплатаДДС.Подразделение КАК Подразделение,
	ПланОплатаДДС.СтатьяДДС КАК СтатьяДДС,
	НАЧАЛОПЕРИОДА(ПланОплатаДДС.Период, МЕСЯЦ) КАК ПериодМесяц,
	ВЫБОР
		КОГДА ПланОплатаДДС.Тип = ЗНАЧЕНИЕ(Перечисление._ПриходРасходПоПлануДДС.Поступления)
			ТОГДА ПланОплатаДДС.СуммаПриход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПланируемогоПрихода,
	ВЫБОР
		КОГДА ПланОплатаДДС.Тип = ЗНАЧЕНИЕ(Перечисление._ПриходРасходПоПлануДДС.Расходы)
			ТОГДА ПланОплатаДДС.СуммаПриход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПланируемогоРасхода
ИЗ
	РегистрНакопления._ПланОплатаДДС.ОстаткиИОбороты(, , Регистратор, , ) КАК ПланОплатаДДС
ГДЕ
	ПланОплатаДДС.Регистратор ССЫЛКА Документ._БюджетДДС

Для того чтобы показатели корректно рассчитывались на всех уровнях группировок, перейдем на вкладку Ресурсы и укажем функции суммирования для полей СуммаПланируемогоПрихода и СуммаПланируемогоРасхода:

Сумма(СуммаПланируемогоПрихода) и Сумма(СуммаПланируемогоРасхода).

2. Настройка структуры отчета (Создание структуры типа "Таблица")

Чтобы развернуть период по горизонтали (в колонки), обычная группировка строк не подойдет. Необходимо использовать элемент структуры Таблица.

Разберем по шагам настройку на вкладке Настройки в конструкторе СКД:

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

При такой настройке СКД автоматически создаст над-колонку для каждого месяца, а внутри нее две под-колонки с соответствующими суммами прихода и расхода.

3. Форматирование периода ("Январь 2017")

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

Поле ПериодМесяц должно оставаться типом Дата. Для представления даты в удобном виде (например, "Январь 2017") выберите один из двух стандартных способов:

Способ А. Настройка свойства "Формат" в наборе данных:

  1. Перейдем на вкладку Наборы данных и найдем поле ПериодМесяц.
  2. В колонке Оформление кликнем по кнопке открытия настроек и найдем параметр Формат.
  3. Установим значение формата: ДФ='ММММ гггг' (где ММММ — полное название месяца с прописной буквы, гггг — четырехзначный год).

Способ Б. Выражение представления:

На вкладке Наборы данных в колонке Выражение представления для поля ПериодМесяц пропишем код:

Формат(ПериодМесяц, "ДФ='ММММ гггг'")

В этом случае значением поля останется дата (что гарантирует верную сортировку по возрастанию/убыванию), но пользователю в шапке таблицы отобразится наглядное текстовое представление.

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

Рассмотрим важные нюансы, которые помогут избежать ошибок при формировании отчета:

  1. Периодичность виртуальной таблицы: Вместо использования функции НАЧАЛОПЕРИОДА() в теле запроса предпочтительно указывать периодичность прямо в параметрах виртуальной таблицы: ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, , ). СКД сама сформирует поле периода и корректно назначит ему роли.
  2. Дополнение пустых периодов: Если за какой-то месяц оборотов не было, по умолчанию этот месяц в колонках отчета пропустится. Чтобы вывести пустые месяцы, откроем настройки группировки ПериодМесяц в структуре отчета и зададим свойство Тип дополнения = Месяц.
← На главную