Отчеты и Аналитика · 9 мин
Как добавить период в СКД 1С
Как добавить период в СКД 1С: параметры НачалоПериода и КонецПериода, стандартный период, отбор по дате в схеме компоновки данных и настройках отчёта.
Период — самый частый параметр любого отчёта на системе компоновки данных (СКД) в 1С. Пользователь ожидает видеть поля «Начало периода» и «Конец периода» либо единый элемент «Стандартный период», а разработчику нужно правильно связать эти параметры с запросом и настройками отчёта. Ошибки на этом этапе приводят к пустым отчётам, дублированию данных или сообщению «Параметр не найден».
Есть несколько способов добавить период: объявить параметры вручную на закладке «Параметры», использовать стандартный период с автоматическим расчётом дат, задать отбор по полю даты без параметров или применить виртуальные таблицы регистров с параметрами в тексте запроса. Выбор зависит от того, откуда берутся данные и насколько гибкой должна быть настройка для пользователя.
Ниже разобраны все рабочие варианты с конкретными действиями в конструкторе СКД, типичными ошибками и способами проверить результат до передачи отчёта пользователям.
Какие способы добавления периода существуют в СКД
СКД предлагает три базовых подхода. Первый — два отдельных параметра типа «Дата» (НачалоПериода и КонецПериода), которые используются в условии ГДЕ запроса. Это классический вариант, понятный пользователю и простой в отладке.
Второй подход — один параметр типа «СтандартныйПериод». Он даёт пользователю привычный выпадающий список с вариантами «Сегодня», «Эта неделя», «Этот месяц» и произвольным интервалом. Внутри запроса придётся обращаться к полям параметра через точку: &Период.ДатаНачала и &Период.ДатаОкончания.
Третий подход — передача периода напрямую в виртуальную таблицу регистра (Обороты, Остатки, ОстаткиИОбороты). Это самый эффективный вариант по производительности: платформа отбирает данные на уровне СУБД ещё до выполнения остального запроса.
Сравнение вариантов
Универсально, работает с любыми таблицами. Пользователь вводит даты вручную, нет готовых вариантов «Этот месяц» без дополнительных выражений.
Удобен пользователю: готовые интервалы из списка. Требует обращения к .ДатаНачала и .ДатаОкончания в запросе.
Максимальная производительность для регистров. Применимо только к виртуальным таблицам, не работает для физических таблиц документов.
Добавляем параметры НачалоПериода и КонецПериода
Откройте схему компоновки данных отчёта и перейдите на закладку «Параметры». Нажмите «Добавить» и создайте параметр с именем НачалоПериода, тип — «Дата», состав даты — «Дата» (или «Дата и время», если важны часы). Аналогично добавьте параметр КонецПериода.
Теперь свяжите параметры с запросом. На закладке «Наборы данных» в тексте запроса добавьте условие:
ГДЕ
Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
Для полей типа «Дата» с временем важный нюанс: если пользователь вводит конец периода как 31.01 без времени, запись за 31.01 14:30 в отбор не попадёт. Поэтому в запросе конец периода часто дополняют функцией КОНЕЦПЕРИОДА:
ГДЕ
Продажи.Период МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
Чтобы параметры не были пустыми при открытии отчёта, задайте значения по умолчанию через выражения на закладке «Параметры» в колонке «Значение» либо программно в модуле отчёта при создании настроек.
- 1Откройте СКД, закладка «Параметры», добавьте НачалоПериода и КонецПериода с типом «Дата»
- 2В тексте запроса добавьте условие ГДЕ с МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
- 3Снимите флажок «Ограничение доступности», если параметр должен быть виден пользователю
- 4На закладке «Настройки» добавьте параметры в пользовательские настройки с режимом «Быстрый доступ»
- 5Сформируйте отчёт и проверьте, что данные попадают в заданный интервал
Используем стандартный период
Стандартный период удобнее для конечного пользователя: вместо двух дат он выбирает «Этот месяц» или «Произвольный период» из готового списка. На закладке «Параметры» создайте параметр Период и в поле «Тип» выберите «СтандартныйПериод» (StandardPeriod).
В запросе обращайтесь к границам через точку:
ГДЕ
Реализация.Дата МЕЖДУ &Период.ДатаНачала И &Период.ДатаОкончания
Обратите внимание: свойство ДатаОкончания стандартного периода уже содержит конец дня (23:59:59), поэтому КОНЕЦПЕРИОДА дополнительно применять не нужно. Это частая причина путаницы при переходе с двух отдельных дат на стандартный период — двойное округление не ломает запрос, но усложняет чтение.
Период в параметрах виртуальных таблиц регистров
Когда данные берутся из регистров накопления или бухгалтерии, период правильнее передавать прямо в виртуальную таблицу. Пример для регистра накопления:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты
Такой запрос работает заметно быстрее на больших базах: итоги рассчитываются только за указанный интервал, а не по всей таблице с последующим отбором. Параметры НачалоПериода и КонецПериода при этом объявляются на закладке «Параметры» точно так же, как описано выше.
Для регистра сведений с периодичностью и таблицы «СрезПоследних» параметр периода передаётся первым: РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ). Здесь параметр задаёт момент времени, на который берётся срез, а не интервал.
Отбор по дате без параметров
Иногда параметры не нужны вовсе: достаточно дать пользователю отбор по полю «Период» или «Дата» на закладке «Настройки» — «Отбор». Пользователь сам добавит условие «Дата Равно …» или «Дата В списке …». Это гибче, но менее очевидно для неподготовленного пользователя и не решает задачу «показать отчёт за период» одним действием.
Комбинированный вариант — параметры для быстрого выбора периода плюс доступный отбор по дате для тонкой настройки. В типовых конфигурациях именно так устроено большинство отчётов: параметры сверху панели, отборы — в расширенных настройках.
Если пользователи жалуются, что отчёт «не видит» документы последнего дня периода, в девяти случаях из десяти причина в отсутствии КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) в условии запроса. Проверяйте это в первую очередь.
Проверка результата и типичные ошибки
После настройки сформируйте отчёт за заведомо известный интервал, где есть хотя бы один документ. Затем сузьте период до одного дня с документом и убедитесь, что суммы совпадают с данными по документу. Сравнение с аналогичным типовым отчётом за тот же период — хороший контроль корректности.
Типовая ошибка «Параметр не найден» возникает, когда параметр используется в запросе, но не объявлен на закладке «Параметры», или имя в запросе отличается от имени параметра хотя бы одной буквой. Другая частая проблема — параметр объявлен, но у него установлен флажок «Ограничение доступности» и он не включён в пользовательские настройки: пользователь просто не видит поле ввода.
Как проверить результат
Суммы в отчёте совпадают с документом
Документ не попадает в отчёт или суммы завышены
Документ входит в отчёт
Документ теряется — нет КОНЕЦПЕРИОДА
Поля периода видны и доступны для ввода
Полей нет — проверить ограничение доступности и быстрый доступ
Часто задаваемые вопросы
Как задать период по умолчанию, например текущий месяц?
На закладке «Настройки» в параметрах данных укажите значение для параметра, либо программно в модуле отчёта при событии «ПриКомпоновкеРезультата» установите НачалоМесяца(ТекущаяДата()) и КонецМесяца(ТекущаяДата()). Для стандартного периода можно выбрать вариант «Этот месяц» прямо в настройках.
Почему отчёт пустой, хотя документы в базе есть?
Чаще всего параметры периода не заполнены, конец периода не округлён до конца дня, или отбор накладывается дважды — и в параметрах виртуальной таблицы, и в условии ГДЕ с противоречивыми значениями. Проверьте значения параметров в настройках и текст запроса.
Можно ли сделать период необязательным?
Да. Снимите обязательность параметра и обрамите условие фигурными скобками в запросе: {ГДЕ (Поле.Дата МЕЖДУ &НачалоПериода И &КонецПериода)}. Тогда при пустых параметрах условие не применится, и отчёт покажет все данные.
Чем отличается параметр в запросе от отбора в настройках?
Параметр подставляется в текст запроса до его выполнения и обычно обязателен. Отбор в настройках применяется СКД динамически, пользователь может менять его состав и вид сравнения. Параметры эффективнее для виртуальных таблиц, отборы гибче для пользователя.
Как добавить период в уже готовый типовой отчёт без изменения конфигурации?
Если поле даты доступно в отчёте, добавьте отбор по нему через «Ещё — Изменить вариант отчёта — Отбор». Для полноценных параметров периода потребуется доработка схемы через расширение конфигурации, что не нарушает поддержку типового решения.
Почему при использовании стандартного периода запрос выдаёт ошибку?
Проверьте, что в запросе вы обращаетесь к &Период.ДатаНачала и &Период.ДатаОкончания, а не к самому параметру &Период в сравнении с датой. Стандартный период — это объект, а не значение типа «Дата».
Что важно запомнить
Период в СКД добавляется параметрами на закладке «Параметры» и связывается с запросом через условие ГДЕ или параметры виртуальной таблицы. Всегда округляйте конец периода функцией КОНЕЦПЕРИОДА, задавайте значения по умолчанию и проверяйте отчёт на документе с неполным временем последнего дня.