В чем практическая разница между отбором и параметром в СКД и что выбрать при создании отчета

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

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

Фундаментальные различия в определении

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

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

Практические отличия в пользовательском режиме

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

  1. Вид сравнения: У отбора пользователь может в любой момент изменить «Вид сравнения» (Равно, В списке, В группе, Содержит, Заполнено и т.д.). У параметра такой возможности нет — вид сравнения жестко задается разработчиком в тексте запроса (обычно это просто равенство &Параметр = Поле).
  2. Динамическое добавление: Пользователь может самостоятельно добавить новый отбор по любому доступному полю, которое разработчик не скрыл из доступных. Параметры же жестко заданы в структуре отчета; пользователь не может «добавить» новый параметр, если разработчик не предусмотрел его заранее.
  3. Интерфейс: Параметры часто используются для выбора системных значений, таких как СтандартныйПериод. Это позволяет пользователю выбирать интервалы (Вчера, Текущий квартал, Прошлый год) одним нажатием кнопки, в то время как отбор по дате обычно заставляет выбирать конкретные границы вручную.

Производительность и работа с виртуальными таблицами

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

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


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

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

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

Использование фигурных скобок для гибкости параметров

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


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

В данном случае параметр &Организация является обязательным. Если пользователь не заполнит его, отчет выдаст ошибку. Однако условие по складу заключено в фигурные скобки. Если на вкладке «Параметры» пользователь снимет галочку использования со склада, СКД просто выбросит этот кусок из финального SQL-запроса, и данные будут получены по всем складам.

Параметры как инструменты бизнес-логики

Разберем ситуации, когда отборы бессильны, и нам необходимы именно параметры. Параметры могут выступать не только как фильтры, но и как переменные для расчетов.

  1. Вычисляемые поля: Мы можем создать параметр &КурсВалюты и использовать его в формуле вычисляемого поля: Сумма * &КурсВалюты. Отбор не может участвовать в арифметических операциях внутри схемы.
  2. Условное оформление: Мы можем подсвечивать строки отчета в зависимости от значения параметра. Например, если Сумма > &ПорогРентабельности, то красим строку в красный цвет.
  3. Выбор алгоритма: С помощью параметра пользователь может выбирать режим формирования отчета (например, «Выводить в тысячах рублей» или «Выводить в рублях»). В тексте запроса или в выражениях полей мы можем анализировать этот параметр и делить значения на 1000.

Иерархия применения: Глобальное vs Локальное

Посмотрим на уровни применения настроек. Параметры в СКД практически всегда действуют глобально на весь набор данных. Отборы же обладают уникальной гибкостью иерархии:

Когда и что выбирать: краткая шпаргалка

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

Выбирайте ПАРАМЕТР, если:

Выбирайте ОТБОР, если:

Таким образом, эффективное использование СКД предполагает комбинирование этих методов: использование параметров для оптимизации запросов и базовой логики, и отборов — для предоставления пользователю максимальной гибкости при анализе данных.

← На главную