Отчеты и Аналитика · 9 мин
Как сгруппировать данные по месяцам в СКД 1С
Как сгруппировать данные по месяцам в СКД 1С: периодичность группировки, вычисляемые поля, функция НачалоПериода в запросе, настройки и типичные ошибки.
Группировка по месяцам — одна из самых частых задач при построении отчетов на системе компоновки данных (СКД) в 1С. Продажи, поступления, начисления зарплаты, движения по складу — почти любой аналитический отчет требуется разложить по календарным месяцам, чтобы увидеть динамику. При этом у разработчика есть несколько способов это сделать, и выбор зависит от того, как построен запрос и какие требования предъявляются к итоговой форме.
В СКД месячная группировка может быть реализована на уровне запроса (функциями языка запросов), на уровне вычисляемых полей и на уровне настроек самой компоновки — через параметр «Периодичность» у группировки по полю типа «Дата». Каждый способ имеет свои ограничения: например, периодичность в настройках удобна для пользователя, но не всегда очевидна при программной формировке отчета, а группировка в запросе жестко фиксирует структуру данных.
Ниже разобраны основные подходы с конкретными шагами: где именно в конструкторе СКД указывается периодичность, как написать запрос с функцией НАЧАЛОПЕРИОДА, как оформить вывод месяца в читаемом виде и какие ошибки чаще всего приводят к тому, что группировка «не работает» или показывает не те итоги.
Способ 1. Периодичность группировки в настройках СКД
Самый быстрый и «правильный» с точки зрения платформы способ — использовать встроенный механизм периодичности. Если в наборе данных есть поле с типом «Дата» (например, Период регистратора или дата документа), СКД умеет автоматически сворачивать его до нужного уровня: день, неделя, месяц, квартал, год.
Для этого откройте схему компоновки данных, перейдите на закладку «Настройки», добавьте группировку по полю даты. Затем выделите эту группировку и в нижней части окна настроек найдите параметр «Периодичность» (вкладка «Группировка» либо кнопка с параметрами группировки, в зависимости от версии платформы и режима настроек). Установите значение «Месяц».
После этого отчет при формировании покажет строки вида «Январь», «Февраль» и т.д. с итогами по ресурсам внутри каждого месяца. Важно, что исходное поле даты при этом остается в запросе как есть — свертку выполняет сама компоновка, поэтому детализацию можно вернуть в любой момент, просто сменив периодичность обратно на «Авто» или «День».
- 1Откройте схему компоновки данных отчета и перейдите на закладку «Настройки»
- 2Добавьте группировку по полю с датой (например, «Период»)
- 3Выделите группировку и в параметрах установите «Периодичность» = «Месяц»
- 4Добавьте в выбранные поля нужные ресурсы (суммы, количество)
- 5Сформируйте отчет и проверьте, что строки свернуты до месяцев
Нюанс: если группировка по дате вложена внутрь другой группировки (например, «Контрагент» → «Период»), периодичность задается именно для вложенной группировки. Если задать её у внешней — эффекта на месяцы не будет.
Способ 2. Группировка месяца в запросе через НАЧАЛОПЕРИОДА
Когда структура отчета фиксирована и пользователь не должен менять детализацию, месяц удобнее вычислить прямо в запросе набора данных. Для этого в языке запросов есть функция НАЧАЛОПЕРИОДА, которая приводит дату к началу указанного периода.
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК Месяц,
СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ)
УПОРЯДОЧИТЬ ПО
МесяцОбратите внимание на три обязательных элемента: функция НАЧАЛОПЕРИОДА указана и в списке выбираемых полей, и в предложении СГРУППИРОВАТЬ ПО, а также добавлена сортировка по полю месяца — иначе месяцы могут выводиться в произвольном порядке. Ресурсы (суммы, количество) оборачиваются агрегатной функцией СУММА.
Для виртуальных таблиц оборотов регистров накопления есть еще более короткий путь: у таблицы «Обороты» можно задать параметр периодичности «Месяц» прямо в конструкторе запроса, и тогда поле «Период» уже будет содержать начало месяца. Это снижает объем выбираемых данных на уровне СУБД, что полезно на больших регистрах.
Минус подхода: пользователь отчета не сможет сам переключиться на детализацию по дням — запрос жестко возвращает данные по месяцам. Если такая гибкость нужна, используйте первый способ или параметризуйте запрос.
Способ 3. Вычисляемое поле и форматирование месяца
Иногда требуется не просто сгруппировать, а вывести месяц в особом виде — например, «2026-01» или «Янв 24». Для этого на закладке «Вычисляемые поля» схемы компоновки можно создать поле с выражением на языке выражений СКД, а затем группировать уже по нему.
Однако учтите ограничение: язык выражений компоновки беднее встроенного языка 1С, и функции форматирования дат в нем ограничены. Часто проще вычислить месяц в запросе, а представление задать через форматную строку: выделите поле в настройках, откройте «Оформление» и в параметре «Формат» укажите, например, ДФ='ММММ гггг' — тогда дата начала месяца отобразится как «Январь 2026».
Группировка по месяцам в колонках (кросс-таблица)
Частая аналитическая задача — показать месяцы не строками, а колонками: например, товары по строкам и продажи по каждому месяцу в колонках. В СКД это делается через таблицу: в настройках вместо «Группировка» добавьте элемент «Таблица», в строки поместите измерение (номенклатуру, контрагента), а в колонки — поле периода с периодичностью «Месяц».
Для колонок действует то же правило периодичности: выделите группировку колонки по дате и установите «Периодичность» = «Месяц». Ресурс (сумма, количество) добавляется в выбранные поля и автоматически раскладывается на пересечения строк и колонок.
Практическое ограничение: если период отчета широкий (несколько лет), количество колонок станет неудобным для просмотра. В таких случаях периодичность лучше поднять до квартала или ограничить период параметрами отчета.
Проверка результата и типичные проблемы
После настройки сформируйте отчет за заведомо проверяемый период — например, за два месяца, по которым известны итоги из стандартного отчета конфигурации. Суммы по месяцам в вашем отчете должны сойтись с эталонными, а общий итог — равняться сумме помесячных значений.
Как проверить результат
Одна строка на каждый месяц периода
Много строк с одинаковым месяцем — группировка по дате, а не по месяцу
Январь, февраль, март — по возрастанию
Хаотичный порядок — нет сортировки по полю периода
Совпадают со стандартным отчетом за тот же период
Расхождения — проверяйте отборы и виртуальные таблицы
Месяцы без данных отсутствуют или показаны с нулями осознанно
Ожидались нулевые строки, но их нет — нужно дополнение периодов
Отдельная ситуация — месяцы, в которых не было движений. По умолчанию СКД их просто не выводит. Если нужна непрерывная шкала (например, для диаграммы), у группировки по периоду есть параметр «Дополнение периодов» — установите там значение «Месяц», и пустые месяцы появятся с нулевыми или пустыми значениями ресурсов.
Какой способ выбрать
Если отчет интерактивный и пользователь сам управляет настройками — используйте периодичность группировки в настройках СКД. Если структура фиксирована, а запрос работает с виртуальными таблицами оборотов — задайте периодичность «Месяц» в самой виртуальной таблице или через НАЧАЛОПЕРИОДА. Для кросс-отчетов с месяцами в колонках — таблица с группировкой колонок по периоду.
Как выбрать действие
Что важно запомнить
Группировка по месяцам в СКД делается тремя путями: периодичность «Месяц» в настройках группировки, функция НАЧАЛОПЕРИОДА в запросе или периодичность виртуальной таблицы оборотов. Для непрерывной шкалы включайте дополнение периодов, а результат сверяйте со стандартными отчетами за тот же период.
Частые вопросы
Почему в отчете несколько строк с одним и тем же месяцем?
Скорее всего, группировка построена по исходному полю даты без периодичности, а месяц выведен только форматом. Установите у группировки параметр «Периодичность» = «Месяц» либо группируйте в запросе по НАЧАЛОПЕРИОДА(Период, МЕСЯЦ).
Как вывести месяц словами, а не датой?
Выделите поле периода в настройках, откройте оформление и задайте форматную строку, например ДФ='ММММ гггг'. Поле при этом должно оставаться типа «Дата» — формат меняет только отображение.
Можно ли группировать по месяцам без изменения запроса?
Да, именно для этого существует параметр «Периодичность» у группировки в настройках СКД. Запрос продолжает возвращать даты, а свертку до месяца выполняет сама компоновка при формировании отчета.
Как показать месяцы, в которых не было данных?
У группировки по периоду в настройках есть параметр «Дополнение периодов». Установите значение «Месяц» — тогда в отчете появятся все месяцы выбранного интервала, включая пустые.
Что быстрее: группировка в запросе или периодичность в СКД?
На больших объемах данных выгоднее сворачивать на уровне запроса — например, задав периодичность «Месяц» у виртуальной таблицы оборотов: СУБД вернет меньше записей. Периодичность в настройках удобнее для интерактивности, но компоновке приходится обрабатывать более детальные данные.
Как сделать месяцы колонками, а не строками?
В настройках СКД добавьте элемент «Таблица»: в строки поместите аналитическое измерение (товар, контрагент), в колонки — поле периода, и у колоночной группировки установите «Периодичность» = «Месяц». Ресурс добавьте в выбранные поля таблицы.