Как настроить параметры НачалоПериода и КонецПериода в СКД 1С и связать их со СтандартнымПериодом

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Почему пропадают стандартные параметры периода?

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

Если же мы пишем запрос к физической таблице документов (например, к таблице Документ.РеализацияТоваровУслуг), СКД не находит виртуальных таблиц и, соответственно, не создает параметры по умолчанию. В этом случае нам необходимо объявить их самостоятельно и связать с удобным пользовательским интерфейсом выбора периода.

Пошаговое руководство: Связываем пользовательский «Период» с системными датами

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

Рассмотрим этот процесс по шагам:

  1. Откройте схему компоновки данных и перейдите на вкладку «Параметры».
  2. Добавьте новый параметр. Назовите его Период и установите для него тип данных СтандартныйПериод. Этот параметр будет виден пользователю.
  3. Найдите (или добавьте вручную, если их нет) параметры НачалоПериода и КонецПериода. Установите для них тип данных Дата.
  4. В поле «Выражение» для параметра НачалоПериода пропишите:
    &Период.ДатаНачала
  5. В поле «Выражение» для параметра КонецПериода пропишите:
    &Период.ДатаОкончания
  6. Для параметров НачалоПериода и КонецПериода установите флаг «Ограничение доступности». Это скроет технические параметры от пользователя, чтобы не загромождать интерфейс, оставив доступным только красивое поле Период.

Синтаксический капкан: Разница между запросом и выражением СКД

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

Запомните главное правило написания функций приведения даты к началу или концу периода:

Если вы напишете в параметрах схему без кавычек (например, КонецПериода(&Период.ДатаОкончания, День)), СКД выдаст ошибку и значение параметра останется пустым.

Скрытые механизмы типа «СтандартныйПериод»

Многие разработчики не знают о важной особенности платформы 1С: свойства объекта СтандартныйПериод автоматически инициализируют время границ интервала:

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

Правильное написание условий в запросе

Посмотрим на пример правильного построения запроса для выборки документов за период с использованием оператора МЕЖДУ. Обратите внимание, что условие накладывается на поле Дата документа:


ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    РеализацияТоваровУслуг.Номер КАК Номер,
    РеализацияТоваровУслуг.Дата КАК Дата,
    РеализацияТоваровУслуг.Проведен КАК Проведен,
    РеализацияТоваровУслуг.Организация КАК Организация,
    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Если вы хотите перестраховаться от сброса времени в параметре &КонецПериода к началу дня (00:00:00), можно написать условие в запросе следующим образом:


ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)

Программная установка параметров с использованием типа «Граница»

Если ваш отчет формируется программно через встроенный язык 1С, хорошей практикой для точного включения документов, записанных на самую последнюю секунду дня, является использование объекта Граница. Рассмотрим пример кода:


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

// Установка начала периода
ПараметрНачало = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
Если ПараметрНачало <> Неопределено Тогда
    ПараметрНачало.Значение = НачалоДня(ВыбраннаяДатаНачала);
    ПараметрНачало.Использование = Истина;
КонецЕсли;

// Установка конца периода с использованием Границы (включая последнюю секунду)
ПараметрКонец = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("КонецПериода"));
Если ПараметрКонец <> Неопределено Тогда
    ПараметрКонец.Значение = Новый Граница(КонецДня(ВыбраннаяДатаОкончания), ВидГраницы.Включая);
    ПараметрКонец.Использование = Истина;
КонецЕсли;

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

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

  1. В конструкторе схемы компоновки данных перейдите на вкладку «Настройки» (самая последняя вкладка справа внизу).
  2. В нижней части экрана перейдите на вкладку «Параметры».
  3. Найдите созданный вами параметр Период.
  4. Нажмите на кнопку «Свойства элемента пользовательских настроек» (иконка в виде желтой шестеренки на панели инструментов вкладки параметров).
  5. В появившемся окне установите флаг «Включать в пользовательские настройки».
  6. В поле «Режим редактирования» выберите значение «Быстрый доступ».

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

← На главную