Как работают конструкции в фигурных скобках в параметрах виртуальных таблиц СКД?

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

При работе с Системой компоновки данных (СКД) разработчики часто сталкиваются с конструкциями в текстах запросов, которые заключены в фигурные скобки {}. Эти конструкции не являются частью стандартного языка запросов SQL или 1С, а представляют собой специальные инструкции (расширения), предназначенные для процессора компоновки данных. Рассмотрим подробнее, что означают такие записи в параметрах виртуальных таблиц и как они влияют на поведение отчета.

Разбор синтаксиса расширений в параметрах виртуальных таблиц

Рассмотрим конкретный пример запроса к регистру сведений, который вызвал вопросы:


РегистрСведений.упоСвойстваПроектныхЗадач.СрезПоследних(
    {(НЕОПРЕДЕЛЕНО) КАК Поле2}, 
    {(ПроектнаяЗадача) КАК СсылкаНаПроектнуюЗадачу}
)

Проанализируем эту ситуацию. Здесь мы видим два параметра виртуальной таблицы СрезПоследних (Период и Условие), обернутых в расширение СКД. Давайте разберем каждый из них по шагам.

Управление периодом через (НЕОПРЕДЕЛЕНО) КАК ...

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

По умолчанию СКД пытается автоматически связать все виртуальные таблицы в запросе с глобальным параметром Период. Если в отчете используется несколько таблиц, это может привести к тому, что все они будут жестко ограничены одной датой. Конструкция {(НЕОПРЕДЕЛЕНО) КАК Поле2} позволяет решить следующие задачи:

Оптимизация отборов через псевдонимы полей {(Поле) КАК Псевдоним}

Второй параметр в нашем примере — это условие фильтрации. Запись {(ПроектнаяЗадача) КАК СсылкаНаПроектнуюЗадачу} не является обычным переименованием. Выясним причину ее использования.

Когда мы пишем условие в фигурных скобках внутри параметров виртуальной таблицы, мы даем СКД "наводку". Рассмотрим, как это работает на практике:

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

Посмотрим на пример того, во что превратится запрос при выполнении, если пользователь установит отбор по конкретной задаче:


// Было в СКД:
РегистрСведений.упоСвойстваПроектныхЗадач.СрезПоследних(, {(ПроектнаяЗадача) КАК СсылкаНаПроектнуюЗадачу})

// Стало в SQL (упрощенно):
РегистрСведений.упоСвойстваПроектныхЗадач.СрезПоследних(, ПроектнаяЗадача = &П1)

Почему это критически важно? Фильтрация внутри параметров виртуальной таблицы происходит на уровне СУБД в момент формирования временной таблицы среза. Если фильтр накладывается через ГДЕ, системе сначала приходится рассчитать срез последних для всех записей регистра, и только потом отсекать лишние. Использование расширений в параметрах таблицы кратно ускоряет работу отчета, особенно на больших объемах данных.

Связь с механизмом характеристик

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

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

Таким образом, использование фигурных скобок в параметрах виртуальных таблиц — это мощный инструмент профессиональной разработки в 1С. Он позволяет создавать универсальные, высокопроизводительные отчеты, которые корректно обрабатывают параметры периодов и эффективно используют механизмы фильтрации СУБД.

← На главную