При работе с Системой компоновки данных (СКД) или Построителем отчетов программисты часто сталкиваются с необычной конструкцией: части запроса заключаются в фигурные скобки {}. Начинающему разработчику может показаться, что это ошибка или специфический комментарий, но на самом деле это мощный механизм расширения языка запросов «1С:Предприятия». Давайте подробно разберем, зачем они нужны, как работают и как помогают сделать ваши отчеты гибкими и быстрыми.
Стандартный SQL-запрос жестко определяет, какие поля выбирать и какие условия накладывать. Однако в 1С пользователь хочет сам решать в режиме «1С:Предприятие», какие колонки он увидит в отчете, по каким полям сделает отбор и как отсортирует результат. Если писать запрос классическим способом, нам пришлось бы программно пересобирать текст запроса каждый раз при изменении настроек пользователем.
Фигурные скобки — это специальные инструкции для компоновщика макета. Они указывают системе: «Если пользователь в настройках отчета укажет эти поля, добавь их в итоговый запрос, а если не укажет — проигнорируй эту часть текста».
Рассмотрим основные секции, которые могут находиться внутри фигурных скобок:
{ВЫБРАТЬ ...} — определяет список доступных полей для выбора.{ГДЕ ...} — описывает условия отбора, которые может наложить пользователь.{УПОРЯДОЧИТЬ ПО ...} — задает поля, по которым разрешена сортировка.{ХАРАКТЕРИСТИКИ ...} — позволяет динамически подключать дополнительные реквизиты.В тексте запроса секция {ВЫБРАТЬ} позволяет явно указать, какие поля будут доступны пользователю в конструкторе настроек СКД. Проанализируем пример из вопроса:
|ВЫБРАТЬ
| Заявки.Банк КАК Банк,
...
{ВЫБРАТЬ
| Автосалон,
| Банк.*,
...
}
Здесь мы видим два важных момента. Во-первых, поля внутри скобок расширяют список доступных полей. Даже если поле Автосалон не выбрано в основной секции ВЫБРАТЬ (вне скобок), пользователь сможет добавить его в отчет через настройки компоновки.
Во-вторых, обратим внимание на запись Банк.*. Символ «звездочка» после точки означает, что пользователю становятся доступны все реквизиты данного объекта. Например, если Банк — это справочник, пользователь сможет вытянуть в отчет его ИНН, БИК, Корреспондентский счет и любые другие данные через точку, просто выбрав их в дереве полей СКД.
Разберем ситуацию, когда нам нужно предоставить пользователю возможность фильтрации. Рассмотрим пример кода:
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.СуммаОборота
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
{ГДЕ
Продажи.Номенклатура.*,
Продажи.Склад.*}
Если мы напишем обычное условие ГДЕ Продажи.Номенклатура = &Номенклатура, система будет обязана всегда требовать заполнения этого параметра. Если пользователь его не заполнит, запрос вернет пустой результат или выдаст ошибку. Но когда условие обернуто в фигурные скобки {ГДЕ ...}, система ведет себя иначе:
{ГДЕ} будет просто проигнорирован при выполнении, и лишние фильтры не нагрузят базу данных.Фигурные скобки также применяются к параметрам запроса. Посмотрим на пример:
ГДЕ Ссылка = {&НужнаяСсылка}
В данном случае, если значение параметра &НужнаяСсылка не будет заполнено в настройках компоновки, условие отбора будет полностью исключено из запроса. Это избавляет разработчика от написания громоздких проверок вида ГДЕ (&ПараметрЗаполнен = ЛОЖЬ ИЛИ Ссылка = &Параметр).
Выясним причину, по которой программисты иногда пишут эти скобки вручную, а иногда — нет. В схеме компоновки данных на закладке «Запрос» есть флажок «Автозаполнение».
Если флажок включен: СКД сама анализирует таблицы в запросе и автоматически делает доступными все их поля для выбора, отбора и порядка. В этом случае фигурные скобки использовать не обязательно, но можно — для того, чтобы «переопределить» поведение системы (например, дать полю понятный псевдоним или ограничить доступ к определенным реквизитам).
Если флажок выключен: СКД «видит» только те поля, которые явно описаны в тексте запроса с использованием фигурных скобок. Это режим профессиональной настройки, позволяющий жестко контролировать, что именно увидит пользователь и как будет работать оптимизация запроса.
Проанализируем ситуацию с виртуальными таблицами. Использование фигурных скобок внутри параметров виртуальных таблиц (например, в условиях среза последних или оборотов) — это признак хорошего тона и высокой квалификации разработчика.
Рассмотрим пример:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки( , {Номенклатура.* КАК Номенклатура}) КАК Остатки
Если поместить секцию {ГДЕ} или расширение параметров внутрь виртуальной таблицы, СКД «пробросит» пользовательский фильтр внутрь этой таблицы. В итоге СУБД получит данные уже отфильтрованными, вместо того чтобы сначала выбрать все остатки по всем товарам, а потом фильтровать их в памяти. Это критически важно для производительности на больших объемах данных.
Фигурные скобки в запросе 1С — это не просто синтаксический сахар, а основной инструмент управления Системой компоновки данных. Мы выяснили, что:
Понимание этого механизма позволяет создавать по-настоящему профессиональные и гибкие отчеты, которые не требуют постоянной доработки кода при каждом новом требовании заказчика.