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

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

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

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

Способ 1. Использование стандартных полей периодов СКД

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

Проанализируем шаги для реализации этого метода:

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

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

Способ 2. Настройка периодичности виртуальной таблицы

Выясним важный нюанс: почему дополнительные поля периодов (ПериодДень и др.) могут не появляться в списке доступных? Причина часто кроется в параметрах виртуальной таблицы регистра накопления в тексте запроса.

Разберем, как правильно настроить параметры:

В тексте запроса для таблицы ОстаткиИОбороты существует параметр Периодичность. Если мы установим его жестко в значение Регистратор, система будет предоставлять данные только в разрезе документов. Чтобы активировать автоматическое формирование временных срезов, рекомендуется устанавливать значение Авто.


ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ПериодДень,
    ПродажиОбороты.Регистратор,
    ПродажиОбороты.КоличествоОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты

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

Способ 3. Группировка через функции запроса

Если по каким-то причинам стандартные поля СКД использовать не получается (например, при сложной логике объединения нескольких таблиц), мы можем подготовить данные самостоятельно в тексте запроса. Посмотрим на пример использования функции НАЧАЛОПЕРИОДА.

Проанализируем пример кода:


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

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

Важные настройки для корректного отображения

Чтобы отчет выглядел профессионально, рассмотрим дополнительные настройки, которые часто упускают из виду:

  1. Дополнение периодов: Если за определенный день движений не было, колонка в отчете пропадет. Чтобы этого избежать, перейдем в настройки группировки ПериодДень, выберем вкладку «Дополнение». Установим флаг «Использовать дополнение», выберем тип (День) и укажем параметры начала и окончания периода. Это создаст непрерывную временную шкалу.
  2. Форматирование дат: По умолчанию дата может выводиться со временем 00:00:00. Чтобы это исправить, в свойствах поля набора данных установим Оформление -> Формат. Для дня укажем ДФ=dd.MM.yyyy, для месяца — ДФ='MMMM yyyy'.
  3. Роли периодов: Для правильного расчета остатков в разрезе дат крайне важно проверить, чтобы у полей периодов стояла роль Период с соответствующим порядковым номером. Самый младший период (Секунда или Регистратор) должен иметь номер 1, день — 2, месяц — 3.

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

← На главную