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

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

СКД в 1С: как вывести стандартный период в отчёт

Как вывести стандартный период в СКД 1С: настройка параметров ДатаНачала и ДатаОкончания, вывод стандартных периодов на форме отчёта, типичные ошибки и FAQ.

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

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

Что такое стандартный период и чем он отличается от пары дат

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

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

Способ 1: параметр типа «СтандартныйПериод» в схеме компоновки

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

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

ВЫБРАТЬ

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

СУММА(Продажи.СуммаОборот) КАК Сумма

ИЗ

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

СГРУППИРОВАТЬ ПО

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

Обратите внимание: конструкция &Период.ДатаНачала в запросе СКД работает не во всех контекстах одинаково. Более надёжный и распространённый приём — использовать виртуальную таблицу с автоматическими параметрами периода (способ 2) либо вычисляемые параметры границ.

Способ 2: стандартные параметры НачалоПериода и КонецПериода

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

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

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

Порядок действий
  1. 1
    Откройте схему компоновки, закладка «Параметры»: проверьте, что параметры периода существуют и доступность не ограничена
  2. 2
    На закладке «Настройки» добавьте параметры в пользовательские настройки с режимом «Быстрый доступ»
  3. 3
    Задайте значение по умолчанию — например, стандартный период «Этот месяц»
  4. 4
    Сформируйте отчёт в режиме предприятия и проверьте, что поле периода видно и влияет на данные

Способ 3: параметр «Период» виртуальной таблицы регистра

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

ВЫБРАТЬ

Курсы.Валюта,

Курсы.Курс

ИЗ

РегистрСведений.КурсыВалют КАК Курсы

ГДЕ

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

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

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

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

Когда период нужно задать из кода (например, при открытии отчёта из обработки или по кнопке), используйте объект СтандартныйПериод и установку значения через пользовательские настройки компоновщика:

СтандартныйПериод = Новый СтандартныйПериод;

СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;

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

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

ПараметрПериод.Значение = СтандартныйПериод;

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

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

bsl
СтандартныйПериод = Новый СтандартныйПериод(ВариантСтандартногоПериода.ПрошлыйКвартал); КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", СтандартныйПериод);

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

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

Типичные ошибки
01
Параметр создан, но не добавлен в пользовательские настройки — пользователь его не видит и не может изменить
02
Дата окончания задана как начало дня (00:00:00) — документы последнего дня периода выпадают из отчёта
03
У параметра включено «Ограничение доступности» — параметр скрыт от пользователя и не выводится на форму
04
Одновременно используются параметр «Период» виртуальной таблицы и ручные НачалоПериода/КонецПериода — дублирование отборов и путаница
05
Нет значения по умолчанию — при первом открытии отчёт строится по всем данным базы и формируется очень долго
Контрольные точки

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

Видимость поля периода
Норма

Поле «Период» на панели отчёта или в быстрых настройках

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

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

Граница окончания
Норма

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

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

Последний день пуст — дата окончания стоит на 00:00:00

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

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

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

Долгое формирование — период пуст, выбирается вся база

Когда какой вариант выбирать

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

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

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

Пара НачалоПериода/КонецПериода

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

Программная установка

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

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

Итог

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

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

Частые вопросы

Почему параметр периода есть в схеме, но не виден в отчёте?

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

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

На закладке «Параметры» схемы в колонке «Значение» для параметра типа «СтандартныйПериод» выберите вариант «Этот месяц». Либо установите значение программно при создании отчёта через Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц).

Данные за последний день периода не попадают в отчёт. Что делать?

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

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

Да. Создайте два параметра, например «Период1» и «Период2», и используйте их в разных наборах данных или в одном запросе с объединением. Оба добавьте в пользовательские настройки. Это типовой приём для отчётов вида «продажи период к периоду».

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

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

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

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