where и filter period
where и filter period запоминают только имя поля даты; в запрос добавляется отбор МЕЖДУ &ДатаНачПериода И &ДатаКонПериода, а реквизитов периода в новом файле нет.
Перед чтением
- data Справочник
На этой странице
where Поле between … и filter period on Поле задают отбор строк по периоду. Из всей записи Studio запоминает только имя поля; остальное (between …, другие условия) не учитывается.
Назначение#
Отбор по периоду оставляет в результате только записи, у которых поле даты попадает в выбранный пользователем период. Обе формы записи равнозначны: выберите ту, что удобнее читать.
Синтаксис#
where [<источник>.]<Поле> between <что угодно>
filter period on [<источник>.]<Поле>Обычно запись ставят в блок data { }, после источников и соединений.
Элементы#
| Элемент | Обязателен | Что означает |
|---|---|---|
where или filter period on | да | начало отбора; регистр букв where не важен |
<источник>. | нет | латинское имя источника из data; отбрасывается |
<Поле> | да | имя поля даты, как в конфигурации |
between … | нет | для where; текст после поля не учитывается |
Пример#
spec1c {
report contracts
title: "Договоры за период"
target: ordinary
data {
contracts = Справочник.КлиентскиеДоговора
fields: Ссылка, Код, ДатаДоговора
where ДатаДоговора between ПериодT
}
}Та же модель через filter period:
spec1c {
report contracts
data {
contracts = Справочник.КлиентскиеДоговора
fields: Ссылка, Код, ДатаДоговора
filter period on contracts.ДатаДоговора
}
}Что принимает разбор#
- Первое слово после
where(или послеfilter period on) — имя поля. Латинский префикс источникаcontracts.отбрасывается. - Кириллический префикс не отбрасывается: в
where Договоры.Дата between …полем считаетсяДоговоры. - Любой оператор превращается в отбор по периоду:
where Сумма > 100запомнит полеСуммаи сгенерирует для негоМЕЖДУ. - Если есть и
where, иfilter period, действуетwhere. Из несколькихwhereдействует первая. - Запись работает и вне блока
data, но внутри блока она имеет приоритет. whereбез имени поля пропускается без сообщения.
Что попадает в модель#
Только имя поля периода. Оно видно в инспекторе в блоке «Фильтр периода T».
Что проверяется#
Ничего: Studio не проверяет, что поле существует и что это дата. В облачной среде конфигурация не загружается.
Что генерируется в BSL#
В запрос добавляется условие МЕЖДУ с двумя параметрами и их установка из одноимённых переменных. Фрагмент живой сборки:
|ГДЕ
| КлиентскиеДоговора.ДатаДоговора МЕЖДУ &ДатаНачПериода И &ДатаКонПериода
|";
Запрос.УстановитьПараметр("ДатаНачПериода", ДатаНачПериода);
Запрос.УстановитьПараметр("ДатаКонПериода", ДатаКонПериода);Таблица перед полем — та, у которой поле есть в списке fields; если его нет ни у одного источника, берётся основная таблица. Имена параметров ДатаНачПериода и ДатаКонПериода фиксированы и не зависят от того, что написано после between.
Реквизитов ДатаНачПериода и ДатаКонПериода в собранном новом файле нет (проверено распаковкой). Studio их не создаёт.
Работа в 1С#
В 1С код не запускался. Поскольку реквизитов периода в новом файле нет, ожидаема ошибка «переменная не определена» при компиляции или выполнении модуля. Перед использованием файла добавьте на форму в Конфигураторе два реквизита типа «Дата» с именами ДатаНачПериода и ДатаКонПериода или не используйте where / filter period для нового файла.
Ограничения#
- Запоминается только имя поля; условие и параметры после него игнорируются.
- Любой
whereпревращается в отборМЕЖДУ. - Только один отбор на спецификацию.
- Реквизиты периода не создаются.
- Удаление
whereне убирает отбор из модели.
Полный список — Ограничения реализации.
Связанные конструкции#
- data — источники данных.
- fields — поле даты лучше включить в
fields. - Соединения: left_join, inner_join, right_join — соединения, после которых обычно пишут отбор.
См. также
- data Справочник
- fields Справочник
- Соединения: left_join, inner_join, right_join Справочник
- Соответствие конструкций и BSL Справочник
- Ограничения реализации Справочник
Сверено с продуктом: 27.10.2026