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

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

Как задать период в СКД 1С: настройка параметров и отборов

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

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

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

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

Где в СКД задается период: общая логика

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

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

Способ 1. Период через параметры виртуальной таблицы

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

ВЫБРАТЬ

ПродажиОбороты.Номенклатура,

ПродажиОбороты.КоличествоОборот,

ПродажиОбороты.СуммаОборот

ИЗ

РегистрНакопления.Продажи.Обороты(

&НачалоПериода,

&КонецПериода,

Период,

) КАК ПродажиОбороты

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

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

Способ 2. Период через отбор по полю даты

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

ВЫБРАТЬ

РеализацияТоваровУслуг.Ссылка,

РеализацияТоваровУслуг.Дата,

РеализацияТоваровУслуг.СуммаДокумента

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Такое условие ограничивает выборку на уровне СУБД и работает быстро. Альтернатива — вынести поле Дата в отбор на закладке «Настройки» → «Отбор». Это гибче (пользователь сам выбирает вид сравнения), но менее производительно: сначала выбираются все документы, потом накладывается фильтр. На больших таблицах документов разница во времени формирования отчета может быть кратной.

Сравнение вариантов

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

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

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

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

Отбор в настройках СКД

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

Настройка параметров на закладке «Параметры»

На закладке «Параметры» схемы компоновки для каждого параметра периода задаются свойства, влияющие на поведение отчета:

  • Имя и тип — для дат используйте тип «Дата»;
  • Доступность — снятый флажок «Ограничение доступности» позволяет пользователю менять значение;
  • Значение по умолчанию — например, начало текущего месяца; задается выражением на встроенном языке;
  • Включать в доступные поля — обычно оставляют включенным;
  • Выражение — позволяет вычислить один параметр из другого, например КонецПериода = КОНЕЦПЕРИОДА(&НачалоПериода, МЕСЯЦ).

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

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

Стандартный период: удобный выбор для пользователя

Вводить две даты вручную неудобно, поэтому в типовых отчетах используется тип «СтандартныйПериод» — пользователь выбирает «Этот месяц», «Прошлый квартал», «Произвольный период» из выпадающего списка. Чтобы реализовать это в собственном отчете, создайте на закладке «Параметры» параметр с типом «СтандартныйПериод» (например, Период), а параметры НачалоПериода и КонецПериода сделайте вычисляемыми через выражения.

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

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

Остатки на дату: параметр Период виртуальной таблицы

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

ВЫБРАТЬ

ТоварыОстатки.Номенклатура,

ТоварыОстатки.КоличествоОстаток

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыОстатки

Остатки вычисляются на начало указанного момента. Поэтому, чтобы получить остатки «на конец дня 31.12», в параметр нужно передать либо конец дня с добавлением секунды, либо начало следующего дня. Частая практика — в выражении параметра использовать КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1), ДЕНЬ) или получать остатки на дату, следующую за указанной пользователем.

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

Типичные ошибки
01
Передача в КонецПериода даты без времени — данные за последний день периода не попадают в отчет. Лечение: стандартный период или функция КОНЕЦПЕРИОДА.
02
Отбор по дате только в настройках СКД вместо условия в запросе — отчет по большой базе формируется минутами.
03
Параметр объявлен в запросе, но не включен в пользовательские настройки — пользователь не может изменить период и видит данные только по умолчанию.
04
Остатки запрошены на дату, введенную пользователем как начало дня, — итог «на конец дня» не сходится с ОСВ.
05
Дублирование параметров: один и тот же период задан и в виртуальной таблице, и в отборе — двойная фильтрация запутывает при расхождениях.

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

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

Контрольные точки

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

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

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

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

Документы за последний день отсутствуют — проблема с концом периода

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

Отчет формируется за приемлемое время

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

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

Параметры в форме отчета
Норма

Пользователь видит и меняет период

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

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

Итоги по остаткам
Норма

Совпадают с эталонным отчетом на ту же дату

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

Расхождение на обороты последнего дня — неверный момент расчета остатков

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

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

Итог

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

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

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

Почему в отчет не попадают документы за последний день периода?

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

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

На закладке «Параметры» для параметра типа «СтандартныйПериод» можно задать значение по умолчанию через выражение, а для обычных дат — вычисляемые выражения вида НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ). В типовых конфигурациях значения по умолчанию часто задаются в модуле объекта отчета в обработчике ПриКомпоновкеРезультата или через пользовательские настройки варианта.

Чем отличается параметр «Период» от «НачалоПериода» и «КонецПериода»?

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

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

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

Почему отчет с отбором по периоду формируется очень долго?

Скорее всего, период задан отбором на закладке «Настройки», а не в запросе. Платформа выбирает всю таблицу и фильтрует её при компоновке. Перенесите ограничение в параметры виртуальной таблицы или условие ГДЕ — выборка сократится на уровне СУБД.

Как задать период в СКД программно, из кода?

Через объект настроек компоновки: получить Настройки отчета, найти параметр через Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")) и присвоить ему Значение и Использование = Истина. Затем сформировать отчет программно через компоновщик макета и процессор компоновки.