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

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

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

Почему СКД вмешивается в ваш запрос

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

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

Способ №1: Отключение автоматического заполнения

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

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку Наборы данных.
  3. Выберите нужный набор данных (запрос).
  4. Снимите флажок Автозаполнение.

Важно понимать: при отключении этого параметра СКД перестает автоматически видеть все поля из вашего запроса. Теперь вам придется либо прописать список доступных полей на вкладке Наборы данных вручную, либо использовать конструкцию {ВЫБРАТЬ ...} в тексте запроса. Это требует больше времени, но зато вы полностью защищены от «самодеятельности» платформы.

Способ №2: Явное задание параметров в виртуальной таблице

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


ВЫБРАТЬ
    ПлановыеЗначения.Номенклатура КАК СкладскаяГруппа,
    ПлановыеЗначения.ЗначениеОборот КАК НормаДневная
ИЗ
    РегистрНакопления.ЗначенияПоказателейМотивации.Обороты(
        &ДатаНачала,
        &ДатаКонца,
        ,
        Показатель = &ПоказательСклОпер
            И Сценарий = &СценарийСклОпер) КАК ПлановыеЗначения

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

Способ №3: Использование стандартного периода

Профессиональный подход к отчетам в 1С подразумевает использование объекта СтандартныйПериод. Вместо создания двух отдельных параметров для начала и конца периода, мы создаем один параметр с именем Период.

Рассмотрим порядок действий:

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

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

← На главную