Отчеты и Аналитика · 11 мин
СКД в 1С: как вывести стандартный период в отчёт
Как вывести стандартный период в СКД 1С: настройка параметров ДатаНачала и ДатаОкончания, вывод стандартных периодов на форме отчёта, типичные ошибки и FAQ.
Стандартный период в системе компоновки данных (СКД) — это предопределённый тип СтандартныйПериод, который позволяет пользователю выбирать даты начала и окончания отчёта одним элементом: вручную, из списка готовых вариантов («Сегодня», «Этот месяц», «Прошлый квартал») или через произвольный диапазон. В отличие от пары отдельных полей типа «Дата», стандартный период удобнее для пользователя и автоматически корректно обрабатывает границы интервала.
Типичная задача разработчика звучит так: «в отчёте на СКД параметры периода не видны пользователю» или «нужно, чтобы вместо двух дат был один стандартный период». Причина почти всегда одна — параметры НачалоПериода и КонецПериода созданы как отдельные даты, либо у них снят флаг видимости, либо они дублируют виртуальный параметр «Период» регистра. Ниже разобраны все сценарии: от простого включения видимости до программной установки периода.
Что такое стандартный период и чем он отличается от пары дат
Тип СтандартныйПериод — это объект со свойствами ДатаНачала и ДатаОкончания плюс вариант выбора (произвольный или один из предопределённых: день, неделя, декада, месяц, квартал, полугодие, год). В интерфейсе он отображается как единое поле с кнопкой выбора, где пользователь может одним кликом установить «Этот месяц» вместо ручного ввода двух дат.
Пара отдельных параметров «Дата начала» и «Дата окончания» даёт тот же результат по данным, но проигрывает в удобстве: пользователь вынужден каждый раз вводить обе даты вручную. Кроме того, у стандартного периода дата окончания по умолчанию трактуется как конец дня (23:59:59), тогда как при ручном вводе даты окончания пользователь часто указывает 00:00:00 и теряет данные последнего дня.
Способ 1: параметр типа «СтандартныйПериод» в схеме компоновки
Самый прямой способ — завести один параметр типа СтандартныйПериод и в запросе обращаться к его границам. Откройте схему компоновки данных отчёта, перейдите на закладку «Параметры» и добавьте параметр, например Период. В колонке «Тип» выберите «СтандартныйПериод». Флаг «Ограничение доступности» оставьте снятым, чтобы параметр был доступен пользователю.
В тексте запроса набора данных обращайтесь к границам через точку:
ВЫБРАТЬ
Продажи.Номенклатура,
СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&Период.ДатаНачала, &Период.ДатаОкончания, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
Обратите внимание: конструкция &Период.ДатаНачала в запросе СКД работает не во всех контекстах одинаково. Более надёжный и распространённый приём — использовать виртуальную таблицу с автоматическими параметрами периода (способ 2) либо вычисляемые параметры границ.
Способ 2: стандартные параметры НачалоПериода и КонецПериода
Классический подход, который СКД поддерживает «из коробки»: при использовании виртуальной таблицы регистра (Обороты, Остатки, ОстаткиИОбороты) с параметрами &НачалоПериода и &КонецПериода платформа автоматически создаёт в схеме параметры с этими именами и типом «Дата». На форме отчёта они отображаются как два поля даты, а если отчёт построен на управляемых формах с типовыми механизмами — часто сворачиваются в единый стандартный период.
Чтобы параметры были видны пользователю, проверьте на закладке «Параметры»: для каждого из них снят флаг «Ограничение доступности», а в колонке «Включать в доступные поля» стоит флаг. Затем откройте закладку «Настройки», выберите режим настройки «Параметры данных» (в расширенном режиме) и убедитесь, что параметры присутствуют и отмечены.
Для отчётов на управляемых формах ключевой шаг — добавить параметры в пользовательские настройки. На закладке «Настройки» внизу перейдите на вкладку «Пользовательские настройки», нажмите «Добавить» и выберите параметры периода. В свойствах элемента установите «Режим редактирования» = «Быстрый доступ» — тогда поле появится прямо на панели отчёта, а не в глубине окна настроек.
- 1Откройте схему компоновки, закладка «Параметры»: проверьте, что параметры периода существуют и доступность не ограничена
- 2На закладке «Настройки» добавьте параметры в пользовательские настройки с режимом «Быстрый доступ»
- 3Задайте значение по умолчанию — например, стандартный период «Этот месяц»
- 4Сформируйте отчёт в режиме предприятия и проверьте, что поле периода видно и влияет на данные
Способ 3: параметр «Период» виртуальной таблицы регистра
У виртуальных таблиц регистров накопления и сведений есть служебный параметр Период, который платформа автоматически превращает в элемент типа «СтандартныйПериод» на форме. Например, для регистра сведений с периодичностью «в пределах секунды» запрос вида:
ВЫБРАТЬ
Курсы.Валюта,
Курсы.Курс
ИЗ
РегистрСведений.КурсыВалют КАК Курсы
ГДЕ
Курсы.Период МЕЖДУ &НачалоПериода И &КонецПериода
Альтернатива — связать параметр «Период» через закладку «Компоновка данных» конструктора запроса: там для виртуальных таблиц можно указать, какое поле отвечает за период, и СКД сама добавит стандартный отбор. Этот механизм называется «периодичность и стандартный период» в настройках набора данных.
Практическое правило: если отчёт строится по остаткам или оборотам — используйте виртуальные таблицы с параметрами НачалоПериода/КонецПериода. Если по физической таблице регистра сведений или документам — добавляйте отбор по полю «Период»/«Дата» через параметры вручную.
Программная установка стандартного периода
Когда период нужно задать из кода (например, при открытии отчёта из обработки или по кнопке), используйте объект СтандартныйПериод и установку значения через пользовательские настройки компоновщика:
СтандартныйПериод = Новый СтандартныйПериод;
СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период");
ПараметрПериод.Значение = СтандартныйПериод;
ПараметрПериод.Использование = Истина;
Если в схеме используется пара дат, а не стандартный период, установите оба параметра отдельно. Для даты окончания применяйте КонецДня(Дата), иначе данные последнего дня не попадут в отчёт — это самая частая причина «пропавших» документов.
СтандартныйПериод = Новый СтандартныйПериод(ВариантСтандартногоПериода.ПрошлыйКвартал); КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", СтандартныйПериод);Проверка результата и типичные ошибки
После настройки откройте отчёт в режиме 1С:Предприятие. Признак правильной работы: поле периода видно на панели (или в окне настроек), изменение варианта на «Прошлый месяц» меняет данные без перезахода в конфигуратор, данные последнего дня периода присутствуют в отчёте.
Как проверить результат
Поле «Период» на панели отчёта или в быстрых настройках
Поля нет — параметр не в пользовательских настройках или ограничена доступность
Документы последнего дня периода попадают в отчёт
Последний день пуст — дата окончания стоит на 00:00:00
Отчёт с периодом по умолчанию открывается быстро
Долгое формирование — период пуст, выбирается вся база
Когда какой вариант выбирать
Сравнение вариантов
Подходит для новых отчётов: одно поле, готовые варианты выбора. Ограничение — в запросе нужно аккуратно обращаться к границам через точку
Стандартный подход для виртуальных таблиц Обороты/Остатки. Прозрачно и предсказуемо, но пользователь вводит две даты
Для отчётов, открываемых из обработок и команд с заранее заданным контекстом. Требует кода, но даёт полный контроль
Для типовых отчётов по оборотам и остаткам выбирайте пару НачалоПериода/КонецПериода — это самый совместимый путь. Для отчётов, где пользователь часто переключается между «сегодня», «неделей» и «месяцем», удобнее единый стандартный период. Программную установку применяйте как дополнение: задайте разумное значение по умолчанию при открытии, а дальше пользователь меняет период сам.
Что важно запомнить
Стандартный период выводится через параметр схемы СКД, добавленный в пользовательские настройки с быстрым доступом. Всегда задавайте значение по умолчанию, контролируйте дату окончания (конец дня) и не дублируйте параметры периода разных типов в одной схеме.
Частые вопросы
Почему параметр периода есть в схеме, но не виден в отчёте?
Проверьте три вещи: снят ли флаг «Ограничение доступности» у параметра, добавлен ли он в пользовательские настройки на закладке «Настройки» и установлен ли режим «Быстрый доступ» или хотя бы «Обычный». Если отчёт открывается с сохранённым вариантом настроек, сбросьте настройки к стандартным — старый вариант может не содержать новый параметр.
Как сделать, чтобы по умолчанию стоял текущий месяц?
На закладке «Параметры» схемы в колонке «Значение» для параметра типа «СтандартныйПериод» выберите вариант «Этот месяц». Либо установите значение программно при создании отчёта через Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц).
Данные за последний день периода не попадают в отчёт. Что делать?
Причина в том, что дата окончания имеет время 00:00:00. Для параметров типа «Дата» применяйте функцию КонецДня() при программной установке или используйте тип «СтандартныйПериод», где дата окончания по умолчанию — конец дня. В виртуальных таблицах оборотов параметр КонецПериода также стоит передавать с концом дня.
Можно ли использовать два стандартных периода в одном отчёте для сравнения?
Да. Создайте два параметра, например «Период1» и «Период2», и используйте их в разных наборах данных или в одном запросе с объединением. Оба добавьте в пользовательские настройки. Это типовой приём для отчётов вида «продажи период к периоду».
Чем отличается параметр «Период» от «НачалоПериода» и «КонецПериода»?
«Период» — единый параметр типа «СтандартныйПериод» с одним полем ввода. «НачалоПериода» и «КонецПериода» — два отдельных параметра типа «Дата», которые СКД создаёт автоматически при использовании виртуальных таблиц регистров. По данным результат одинаков при корректных границах, разница — в интерфейсе и способе задания.
Как скрыть период от пользователя, но применять его в отчёте?
Не добавляйте параметр в пользовательские настройки и установите его значение программно или в настройках по умолчанию. Параметр будет использоваться в запросе, но пользователь его не увидит и не сможет изменить. Убедитесь, что флаг «Использование» у параметра в настройках установлен.