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