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

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

Как добавить период в СКД 1С

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

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

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

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

Какие способы добавления периода существуют в СКД

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

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

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

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

Два параметра типа Дата

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

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

Удобен пользователю: готовые интервалы из списка. Требует обращения к .ДатаНачала и .ДатаОкончания в запросе.

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

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

Добавляем параметры НачалоПериода и КонецПериода

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

Теперь свяжите параметры с запросом. На закладке «Наборы данных» в тексте запроса добавьте условие:

ГДЕ

Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода

Для полей типа «Дата» с временем важный нюанс: если пользователь вводит конец периода как 31.01 без времени, запись за 31.01 14:30 в отбор не попадёт. Поэтому в запросе конец периода часто дополняют функцией КОНЕЦПЕРИОДА:

ГДЕ

Продажи.Период МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)

Чтобы параметры не были пустыми при открытии отчёта, задайте значения по умолчанию через выражения на закладке «Параметры» в колонке «Значение» либо программно в модуле отчёта при создании настроек.

Порядок действий
  1. 1
    Откройте СКД, закладка «Параметры», добавьте НачалоПериода и КонецПериода с типом «Дата»
  2. 2
    В тексте запроса добавьте условие ГДЕ с МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
  3. 3
    Снимите флажок «Ограничение доступности», если параметр должен быть виден пользователю
  4. 4
    На закладке «Настройки» добавьте параметры в пользовательские настройки с режимом «Быстрый доступ»
  5. 5
    Сформируйте отчёт и проверьте, что данные попадают в заданный интервал

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

Стандартный период удобнее для конечного пользователя: вместо двух дат он выбирает «Этот месяц» или «Произвольный период» из готового списка. На закладке «Параметры» создайте параметр Период и в поле «Тип» выберите «СтандартныйПериод» (StandardPeriod).

В запросе обращайтесь к границам через точку:

ГДЕ

Реализация.Дата МЕЖДУ &Период.ДатаНачала И &Период.ДатаОкончания

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

Период в параметрах виртуальных таблиц регистров

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

ВЫБРАТЬ

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

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

ИЗ

РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

Такой запрос работает заметно быстрее на больших базах: итоги рассчитываются только за указанный интервал, а не по всей таблице с последующим отбором. Параметры НачалоПериода и КонецПериода при этом объявляются на закладке «Параметры» точно так же, как описано выше.

Для регистра сведений с периодичностью и таблицы «СрезПоследних» параметр периода передаётся первым: РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ). Здесь параметр задаёт момент времени, на который берётся срез, а не интервал.

Отбор по дате без параметров

Иногда параметры не нужны вовсе: достаточно дать пользователю отбор по полю «Период» или «Дата» на закладке «Настройки» — «Отбор». Пользователь сам добавит условие «Дата Равно …» или «Дата В списке …». Это гибче, но менее очевидно для неподготовленного пользователя и не решает задачу «показать отчёт за период» одним действием.

Комбинированный вариант — параметры для быстрого выбора периода плюс доступный отбор по дате для тонкой настройки. В типовых конфигурациях именно так устроено большинство отчётов: параметры сверху панели, отборы — в расширенных настройках.

Если пользователи жалуются, что отчёт «не видит» документы последнего дня периода, в девяти случаях из десяти причина в отсутствии КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) в условии запроса. Проверяйте это в первую очередь.
ПЗ
Практическое замечание

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

После настройки сформируйте отчёт за заведомо известный интервал, где есть хотя бы один документ. Затем сузьте период до одного дня с документом и убедитесь, что суммы совпадают с данными по документу. Сравнение с аналогичным типовым отчётом за тот же период — хороший контроль корректности.

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

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

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

Отчёт за один день с известным документом
Норма

Суммы в отчёте совпадают с документом

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

Документ не попадает в отчёт или суммы завышены

Документ с временем 23:59 в последний день периода
Норма

Документ входит в отчёт

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

Документ теряется — нет КОНЕЦПЕРИОДА

Форма настроек у пользователя
Норма

Поля периода видны и доступны для ввода

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

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

Часто задаваемые вопросы

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

На закладке «Настройки» в параметрах данных укажите значение для параметра, либо программно в модуле отчёта при событии «ПриКомпоновкеРезультата» установите НачалоМесяца(ТекущаяДата()) и КонецМесяца(ТекущаяДата()). Для стандартного периода можно выбрать вариант «Этот месяц» прямо в настройках.

Почему отчёт пустой, хотя документы в базе есть?

Чаще всего параметры периода не заполнены, конец периода не округлён до конца дня, или отбор накладывается дважды — и в параметрах виртуальной таблицы, и в условии ГДЕ с противоречивыми значениями. Проверьте значения параметров в настройках и текст запроса.

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

Да. Снимите обязательность параметра и обрамите условие фигурными скобками в запросе: {ГДЕ (Поле.Дата МЕЖДУ &НачалоПериода И &КонецПериода)}. Тогда при пустых параметрах условие не применится, и отчёт покажет все данные.

Чем отличается параметр в запросе от отбора в настройках?

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

Как добавить период в уже готовый типовой отчёт без изменения конфигурации?

Если поле даты доступно в отчёте, добавьте отбор по нему через «Ещё — Изменить вариант отчёта — Отбор». Для полноценных параметров периода потребуется доработка схемы через расширение конфигурации, что не нарушает поддержку типового решения.

Почему при использовании стандартного периода запрос выдаёт ошибку?

Проверьте, что в запросе вы обращаетесь к &Период.ДатаНачала и &Период.ДатаОкончания, а не к самому параметру &Период в сравнении с датой. Стандартный период — это объект, а не значение типа «Дата».

Итог

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

Период в СКД добавляется параметрами на закладке «Параметры» и связывается с запросом через условие ГДЕ или параметры виртуальной таблицы. Всегда округляйте конец периода функцией КОНЕЦПЕРИОДА, задавайте значения по умолчанию и проверяйте отчёт на документе с неполным временем последнего дня.