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

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

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

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

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

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

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

Как СКД обрабатывает период: параметры против отборов

Параметр в СКД — это значение, которое подставляется в запрос до его выполнения. Если в тексте запроса написано ГДЕ Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода, то СКД потребует значения этих параметров и передаст их в СУБД. Записи вне диапазона отсекаются на уровне запроса, что быстро и экономно по ресурсам.

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

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

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

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

Один параметр типа Стандартный период

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

Отбор по полю Период без параметров

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

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

Способ 1: два параметра «НачалоПериода» и «КонецПериода»

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

В тексте запроса на закладке «Наборы данных» добавьте условие:

ГДЕ

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

Для виртуальной таблицы регистра период передается в параметры самой таблицы:

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

Обратите внимание на границу конца периода. Если тип параметра — «Дата и время», а пользователь ввел 31.01 без времени, то значение будет 31.01 00:00:00, и документы, проведенные в течение последнего дня, в отчет не попадут. Решение — использовать в условии конструкцию <= КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) или задать в параметрах выражение для конца периода.

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

Способ 2: один параметр типа «Стандартный период»

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

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

НачалоПериода: &ПериодОтчета.ДатаНачала

КонецПериода: &ПериодОтчета.ДатаОкончания

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

Вывод параметров в настройки пользователя

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

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

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

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

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

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

Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(

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

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

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

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

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

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

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

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

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

Документы последнего дня периода
Норма

Попадают в отчет при любом времени проведения

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

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

Формирование без заполнения дат
Норма

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

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

Ошибка «Параметр не определен» или пустой отчет без пояснений

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

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

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

Многоминутное ожидание — период не передан в параметры виртуальной таблицы

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

FAQ

Можно ли задать период отчета без параметров, только отбором?

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

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

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

Как сделать, чтобы при открытии отчета период уже был заполнен?

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

Чем «Стандартный период» лучше двух дат для пользователя?

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

Ошибка «Параметр не определен» при формировании — что проверить?

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

Итог

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

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