К статье
Практический материал

Отчеты и Аналитика · 11 мин

Как в СКД-отчете 1С сделать свой период

Как в СКД-отчете 1С настроить свой период: параметры НачалоПериода и КонецПериода, стандартные периоды, произвольные даты, выражения в запросе и настройки периода для пользователя.

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

Основная сложность в том, что СКД обрабатывает даты по-разному в зависимости от того, где они заданы: в тексте запроса, в параметрах виртуальной таблицы, в отборах компоновки или в пользовательских настройках. Неправильно выбранное место для периода приводит к лишним соединениям, медленной работе отчета или ошибкам «параметр не заполнен».

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

Как СКД работает с датами и периодами

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

Самый эффективный вариант — передавать период в параметры виртуальной таблицы. Тогда платформа отбирает данные на уровне СУБД до соединений и группировок, что существенно быстрее, чем фильтрация готового результата. Отбор же на уровне компоновки применяется уже к полученному набору и не ускоряет запрос.

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

Параметры НачалоПериода и КонецПериода в запросе

Базовый способ — создать в схеме компоновки два параметра: НачалоПериода и КонецПериода, оба типа «Дата» с составом «Дата и время». В тексте запроса они подставляются в параметры виртуальной таблицы регистра:

Обороты(&НачалоПериода, &КонецПериода, , )

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

ГДЕ Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода

На закладке «Параметры» схемы компоновки для этих параметров снимите флаг «Ограничение доступности», если пользователь должен менять их в режиме предприятия. При необходимости задайте значения по умолчанию — например, выражение НачалоМесяца(&ТекущаяДата) через параметр-выражение или программно при создании отчета.

Проверьте, что у параметров не стоит признак «Включать в доступные поля» с запретом редактирования, если отчет формируется из формы: иначе при открытии пользователь увидит пустые даты и получит ошибку «Значение параметра не установлено» либо пустой отчет.

Порядок действий
  1. 1
    Откройте схему компоновки данных отчета, закладка «Параметры»
  2. 2
    Добавьте параметры НачалоПериода и КонецПериода типа «Дата»
  3. 3
    Подставьте параметры в текст запроса: в параметры виртуальной таблицы или в условие ГДЕ
  4. 4
    Для конца периода используйте КонецПериода(&КонецПериода, ДЕНЬ) или передавайте дату с временем 23:59:59
  5. 5
    Сформируйте отчет и проверьте, что данные за граничные даты попадают в результат

Параметр «СтандартныйПериод» для удобного выбора

Ввод двух дат неудобен пользователю: легко ошибиться, забыть про время окончания, перепутать начало и конец. Практичное решение — добавить параметр Период типа «СтандартныйПериод», а даты начала и конца вычислять из него.

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

У стандартного периода дата окончания уже содержит конец дня (23:59:59), поэтому проблема «потерянного последнего дня» исчезает. Это еще одна причина предпочесть его ручному вводу двух дат.

Период в отборах компоновки и пользовательские настройки

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

Однако у этого подхода есть ограничение: отбор компоновки применяется к уже полученным данным. Если запрос выбирает обороты без ограничения по датам, а фильтр стоит только в отборе, то с сервера выгружается весь объем регистра, и на больших базах отчет будет работать заметно медленнее. Поэтому отбор компоновки по периоду оправдан только для небольших выборок или когда период должен быть необязательным.

Чтобы пользователь видел период в быстрых настройках отчета, добавьте параметр или отбор в пользовательские настройки: на закладке «Настройки» схемы выберите режим редактирования «Быстрый доступ» для нужного элемента. Тогда поле периода появится прямо на форме отчета рядом с кнопкой «Сформировать».

Сравнение вариантов задания периода

Параметры виртуальной таблицы

Самый быстрый вариант: отбор на уровне СУБД. Подходит для регистров накопления и сведений. Ограничение — работает только с виртуальными таблицами.

Условие ГДЕ в запросе

Универсально для любых таблиц, включая документы. Эффективно, но требует аккуратности с концом периода.

Отбор компоновки

Гибко для пользователя, можно отключить. Не ускоряет запрос, при больших объемах — медленно.

СтандартныйПериод

Удобный выбор интервала для пользователя, корректный конец дня из коробки. Требует связки с параметрами запроса.

Программная установка периода и нестандартные сценарии

Установка периода из кода

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

Настройки = Отчет.КомпоновщикНастроек.Настройки;

Парам = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));

Парам.Значение = НачалоМесяца(ТекущаяДатаСеанса());

Парам.Использование = Истина;

После установки значений обязательно установите флаг Использование, иначе параметр останется неактивным и отчет сформируется без учета периода. Это одна из самых частых причин «программно заданный период не работает».

Произвольный период внутри запроса

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

Период «на дату»

Для отчетов по остаткам чаще нужна одна дата, а не интервал. В этом случае достаточно одного параметра Период, передаваемого в виртуальную таблицу Остатки. Чтобы пользователь мог не заполнять дату и получать остатки на текущий момент, параметр делают необязательным, а в запросе используют конструкцию с проверкой на пустое значение или задают значение по умолчанию программно.

Если отчет должен по умолчанию открываться за текущий месяц, не задавайте фиксированные даты в значениях по умолчанию параметров — они «застынут» на момент разработки. Используйте программную установку в событии ПриКомпоновкеРезультата или стандартный период «Этот месяц» в пользовательских настройках.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

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

Если данные расходятся, проверьте три вещи: время в дате окончания (не обрезан ли последний день), признак Использование у параметров и отсутствие дублирующего отбора в настройках компоновки, который дополнительно сужает выборку.

Типичные ошибки
01
КонецПериода задан как дата без времени — теряются данные за последний день. Решение: КонецПериода(&КонецПериода, ДЕНЬ) или СтандартныйПериод.
02
Параметр установлен программно, но не включен флаг Использование — отбор не применяется, отчет показывает все данные.
03
Период задан только в отборе компоновки — запрос выбирает весь регистр, отчет работает медленно на больших базах.
04
Дублирование отбора: период и в параметрах запроса, и в отборе компоновки с разными значениями — результат пустой или неожиданный.
05
Фиксированные даты в значениях по умолчанию параметров — через месяц отчет открывается с устаревшим периодом.
Контрольные точки

Как проверить результат

Данные за первый день периода
Норма

Документы и обороты первого дня присутствуют в отчете

Тревожный признак

Первый день пустой — проверьте дату начала и время в ней

Данные за последний день периода
Норма

Обороты последнего дня учтены полностью

Тревожный признак

Последний день отсутствует — конец периода задан без времени, добавьте КонецПериода()

Скорость формирования
Норма

Отчет формируется за приемлемое время на большом периоде

Тревожный признак

Долгое формирование — период задан в отборе компоновки вместо параметров запроса

Пустой параметр
Норма

Отчет либо требует заполнения, либо корректно работает со значением по умолчанию

Тревожный признак

Ошибка «Значение параметра не установлено» при открытии

Частые вопросы о периоде в СКД

Как сделать, чтобы конец периода автоматически включал весь день?

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

Почему программно заданный период не применяется к отчету?

Чаще всего не установлен признак Использование у параметра компоновки. Также проверьте, что вы обращаетесь к параметру по его точному имени из схемы компоновки и что меняете настройки именно того компоновщика, который формирует отчет (у формы отчета и объекта отчета это могут быть разные экземпляры).

Как дать пользователю выбор: период или одна дата?

Добавьте оба параметра (Период типа СтандартныйПериод и ДатаОтчета) и сделайте их необязательными. В запросе используйте условие с проверкой: если дата заполнена — отбор по ней, иначе по периоду. Либо разделите варианты отчета на две настройки с разными параметрами.

Можно ли задать период без изменения запроса?

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

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

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

Отчет за большой период формируется очень долго, что делать?

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

Итог

Что важно запомнить

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