Где устанавливается параметр {(Счет).* КАК Счет} в СКД и как с ним работать

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

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

Что означает конструкция {(Счет).* КАК Счет} в запросе СКД

Фигурные скобки {} в языке запросов СКД используются для так называемого расширения языка запросов. Они описывают необязательные (потенциальные) условия и поля, которые будут включены в итоговый SQL-запрос только тогда, когда пользователь или программист задействует соответствующий отбор или параметр.

Запись {(Счет).* КАК Счет} в параметрах виртуальной таблицы (например, РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты) — это отбор, а не параметр виртуальной таблицы. Она сообщает платформе следующее:

  1. Поле Счет (а также любые его реквизиты благодаря записи .*, например, Счет.Код или Счет.Родитель) доступно для отбора.
  2. Если отбор по полю Счет задан в настройках компоновщика, платформа передаст его непосредственно в параметр виртуальной таблицы базы данных. Это существенно ускоряет выборку, так как лишние записи отсекаются еще на этапе формирования виртуальной таблицы, а не после расчета итогов.
  3. Если отбор не установлен, данная конструкция просто игнорируется платформой и не влияет на результат выполнения запроса.

Где найти данное условие в конструкторе запроса

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

  1. Откроем схему компоновки данных и перейдем к набору данных Запрос.
  2. Откроем Конструктор запроса.
  3. Перейдем на вкладку Компоновка данных.
  4. В левом верхнем углу вкладки найдем значок настройки параметров таблиц (или выберем нужную виртуальную таблицу в поле таблиц).
  5. На вкладке Условия или Параметры виртуальных таблиц в блоке компоновки задаются поля отбора для виртуальной таблицы. Именно отсюда платформа формирует синтаксис с фигурными скобками.

Как программно задать отбор по счету

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

Пример программного добавления отбора через типовые функции:


// Получаем список счетов, которые нужно исключить из расчета
СписокИсключаемыхСчетов = СтандартныеОтчеты.ПолучитьСписокСчетовИсключаемыхИзРасчетаЗадолженности(1);

// Добавляем отбор в компоновщик настроек отчета
ТиповыеОтчеты.ДобавитьОтбор(
    КомпоновщикНастроек, 
    "Счет", 
    СписокИсключаемыхСчетов, 
    ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии
);

Если требуется добавить отбор напрямую через объект КомпоновщикНастроек без использования типовых модулей, выполним следующий код:


ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Счет");
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии;
ЭлементОтбора.ПравоеЗначение = СписокИсключаемыхСчетов;
ЭлементОтбора.Использование  = Истина;

Важные нюансы при работе с отборами в СКД

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

← На главную