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

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

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

Анализ типичных ошибок при формировании колонок по периодам

Проанализируем две распространенные ошибки, которые возникают при попытке разбить дату документа на периоды:

  1. Использование функции МЕСЯЦ() в запросе. Функция МЕСЯЦ(Документ.Дата) возвращает число от 1 до 12. При выводе такой группировки в колонки пользователь видит числа вместо привычных названий («Январь», «Февраль»). Кроме того, если отчет формируется за период более одного года, данные января текущего года объединятся с данными января прошлого года в одну колонку.
  2. Преобразование даты в строку на уровне вычисляемых полей. Если создать строковое поле с названием месяца через формат Формат(Дата, "ДФ=ММММ"), то при добавлении в группировку колонок платформа упорядочит их по алфавиту: «Август», «Апрель», «Декабрь» и так далее, нарушив логику временного ряда.

Способ 1. Приведение даты к началу периода с форматированием (рекомендуемый)

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

В тексте запроса приведем дату документа к началу нужного временного интервала с помощью функции НАЧАЛОПЕРИОДА:


ВЫБРАТЬ
    ДокументРеализация.Ссылка КАК Документ,
    НАЧАЛОПЕРИОДА(ДокументРеализация.Дата, МЕСЯЦ) КАК ПериодМесяц,
    НАЧАЛОПЕРИОДА(ДокументРеализация.Дата, КВАРТАЛ) КАК ПериодКвартал,
    ДокументРеализация.СуммаДокумента КАК Сумма
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументРеализация

Разберем дальнейшие настройки в схеме компоновки данных:

  1. Перейдем на вкладку Наборы данных. В списке полей найдем ПериодМесяц и ПериодКвартал. Поле остается полноценной датой, поэтому сортировка по нему всегда будет хронологической.
  2. В колонке Оформление для поля ПериодМесяц настроим параметр Формат. Если требуется только наименование месяца, укажем строку формата: ДФ='ММММ'. Если отчет может формироваться за несколько лет, обязательно добавим год во избежание путаницы: ДФ='ММММ гггг'.
  3. Для поля ПериодКвартал в параметре Формат используем спецификатор квартала: ДФ='к "кв." гггг "г."'. Это избавит от необходимости писать громоздкие конструкции ВЫБОР КОГДА в тексте запроса.
  4. На вкладке Настройки добавим в структуру отчета таблицу. В строки поместим нужные аналитические разрезы (например, номенклатуру или контрагентов), а в колонки добавим группировку по полю ПериодКвартал, внутрь которой вложим подчиненную группировку по полю ПериодМесяц.

Способ 2. Использование автозаполнения и стандартных периодических полей

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

Посмотрим на пример запроса:


ВЫБРАТЬ
    ДокументРеализация.Ссылка КАК Документ,
    ДокументРеализация.Дата КАК Дата,
    ДокументРеализация.СуммаДокумента КАК Сумма
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументРеализация

В окне выбора полей группировки раскроем ветку поля Дата, нажав на значок «плюс». В списке будут доступны стандартные реквизиты:

  1. Дата.ПериодМесяц
  2. Дата.ПериодКвартал
  3. Дата.ПериодГод

Эти поля сразу содержат начало соответствующего интервала и системное стандартное представление, что позволяет вывести иерархическую структуру колонок за считанные минуты.

Отображение периодов без движений: механизм «Дополнение периода»

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

  1. На вкладке Настройки выберем группировку колонок по периоду (например, по месяцу).
  2. В окне свойств выбранной группировки (или на вкладке Группируемые поля) включим флажок Дополнение периода.
  3. Укажем Тип дополнения: для колонок месяца выберем Месяц, для квартала — Квартал.
  4. В качестве начальной и конечной даты дополнения укажем параметры отчета, например &НачалоПериода и &КонецПериода.

Благодаря этому платформа автоматически сгенерирует колонки для всех периодов заданного диапазона, независимо от фактического наличия документов в информационной базе.

← На главную