Что означают фигурные скобки в тексте запроса 1С и как с ними работать

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

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

Суть расширения языка запросов для СКД

Стандартный SQL-запрос жестко определяет, какие поля выбирать и какие условия накладывать. Однако в 1С пользователь хочет сам решать в режиме «1С:Предприятие», какие колонки он увидит в отчете, по каким полям сделает отбор и как отсортирует результат. Если писать запрос классическим способом, нам пришлось бы программно пересобирать текст запроса каждый раз при изменении настроек пользователем.

Фигурные скобки — это специальные инструкции для компоновщика макета. Они указывают системе: «Если пользователь в настройках отчета укажет эти поля, добавь их в итоговый запрос, а если не укажет — проигнорируй эту часть текста».

Рассмотрим основные секции, которые могут находиться внутри фигурных скобок:

  1. {ВЫБРАТЬ ...} — определяет список доступных полей для выбора.
  2. {ГДЕ ...} — описывает условия отбора, которые может наложить пользователь.
  3. {УПОРЯДОЧИТЬ ПО ...} — задает поля, по которым разрешена сортировка.
  4. {ХАРАКТЕРИСТИКИ ...} — позволяет динамически подключать дополнительные реквизиты.

Разбор секции ВЫБРАТЬ и магия символа «.*»

В тексте запроса секция {ВЫБРАТЬ} позволяет явно указать, какие поля будут доступны пользователю в конструкторе настроек СКД. Проанализируем пример из вопроса:


|ВЫБРАТЬ
|    Заявки.Банк КАК Банк,
...
{ВЫБРАТЬ
|    Автосалон,
|    Банк.*,
...
}

Здесь мы видим два важных момента. Во-первых, поля внутри скобок расширяют список доступных полей. Даже если поле Автосалон не выбрано в основной секции ВЫБРАТЬ (вне скобок), пользователь сможет добавить его в отчет через настройки компоновки.

Во-вторых, обратим внимание на запись Банк.*. Символ «звездочка» после точки означает, что пользователю становятся доступны все реквизиты данного объекта. Например, если Банк — это справочник, пользователь сможет вытянуть в отчет его ИНН, БИК, Корреспондентский счет и любые другие данные через точку, просто выбрав их в дереве полей СКД.

Секция ГДЕ: гибкие фильтры без лишнего кода

Разберем ситуацию, когда нам нужно предоставить пользователю возможность фильтрации. Рассмотрим пример кода:


ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.СуммаОборота
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи
{ГДЕ
    Продажи.Номенклатура.*,
    Продажи.Склад.*}

Если мы напишем обычное условие ГДЕ Продажи.Номенклатура = &Номенклатура, система будет обязана всегда требовать заполнения этого параметра. Если пользователь его не заполнит, запрос вернет пустой результат или выдаст ошибку. Но когда условие обернуто в фигурные скобки {ГДЕ ...}, система ведет себя иначе:

Необязательные параметры

Фигурные скобки также применяются к параметрам запроса. Посмотрим на пример:

ГДЕ Ссылка = {&НужнаяСсылка}

В данном случае, если значение параметра &НужнаяСсылка не будет заполнено в настройках компоновки, условие отбора будет полностью исключено из запроса. Это избавляет разработчика от написания громоздких проверок вида ГДЕ (&ПараметрЗаполнен = ЛОЖЬ ИЛИ Ссылка = &Параметр).

Связь с механизмом «Автозаполнение»

Выясним причину, по которой программисты иногда пишут эти скобки вручную, а иногда — нет. В схеме компоновки данных на закладке «Запрос» есть флажок «Автозаполнение».

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

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

Оптимизация и производительность

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

Рассмотрим пример:


ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки( , {Номенклатура.* КАК Номенклатура}) КАК Остатки

Если поместить секцию {ГДЕ} или расширение параметров внутрь виртуальной таблицы, СКД «пробросит» пользовательский фильтр внутрь этой таблицы. В итоге СУБД получит данные уже отфильтрованными, вместо того чтобы сначала выбрать все остатки по всем товарам, а потом фильтровать их в памяти. Это критически важно для производительности на больших объемах данных.

Подведем итоги

Фигурные скобки в запросе 1С — это не просто синтаксический сахар, а основной инструмент управления Системой компоновки данных. Мы выяснили, что:

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

← На главную