Как в СКД объявить параметр и установить в него фиксированное значение из перечисления

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

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

Способ 1. Настройка на вкладке «Параметры»

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

  1. Откроем конструктор схемы компоновки данных и перейдем на закладку Параметры.
  2. Если параметр еще не создан (например, он не используется в тексте запроса), добавим его вручную, нажав на кнопку «Добавить».
  3. В колонке Имя укажем идентификатор параметра, например, ТипОперации.
  4. В колонке Тип необходимо выбрать ссылку на конкретное перечисление. Для этого нажмем на кнопку выбора, раскроем ветку ПеречислениеСсылка и выберем нужное нам перечисление (например, ПеречислениеСсылка.ВидыОпераций).
  5. Важный нюанс: Чтобы программа не предлагала пользователю выбирать список значений, убедимся, что флаг Доступен список значений снят.
  6. В колонке Значение выберем конкретный элемент перечисления. Обратите внимание: здесь мы выбираем не тип, а само предопределенное значение объекта.

Для того чтобы параметр был скрыт от глаз пользователя и его нельзя было изменить в режиме «1С:Предприятие», выполним дополнительные настройки:

Способ 2. Использование колонки «Выражение»

Иногда простая установка значения в колонке «Значение» может не сработать так, как ожидается (например, при очистке настроек пользователем). Более надежным методом является использование колонки Выражение. Проанализируем этот вариант.

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

Значение(Перечисление.ВидыОпераций.Продажа)

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

Способ 3. Фиксация значения непосредственно в тексте запроса

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

В тексте запроса в секции ГДЕ или в параметрах виртуальной таблицы мы можем сразу прописать условие, используя встроенную функцию языка запросов ЗНАЧЕНИЕ():


ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.Количество
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПродаж.Завершена)

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

Способ 4. Использование альтернативы через «Вычисляемые поля»

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

  1. Перейдем на вкладку Вычисляемые поля.
  2. Добавим новое поле, назовем его, например, ФиксированныйСтатус.
  3. В колонке Выражение пропишем уже знакомую конструкцию: Значение(Перечисление.Статусы.Активен).

Теперь это поле можно добавить в выбранные поля компоновки. Оно всегда будет содержать одну и ту же ссылку на элемент перечисления.

Почему изменения не отображаются в режиме пользователя?

Часто программисты сталкиваются с тем, что настройки в конфигураторе сделаны верно, но в режиме «1С:Предприятие» отчет продолжает работать со старыми значениями или не выводит данные. Разберем причину этого поведения.

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

  1. В режиме пользователя откройте отчет.
  2. Перейдите в Настройки.
  3. Нажмите кнопку Установить стандартные настройки (или «Еще» – «Установить стандартные настройки»).

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

Использование параметров в виртуальных таблицах

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

  1. В параметрах виртуальной таблицы укажите &ТипЦен.
  2. На вкладке Параметры настройте его через Выражение или Значение, как мы разбирали выше.
  3. Обязательно установите Ограничение доступности.

Это позволит платформе оптимизировать запрос и получить только те записи, которые соответствуют вашему перечислению, еще на этапе обращения к итогам регистра.

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

← На главную