Как убрать выбор типа и настроить фильтрацию значений в отборах СКД

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

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

Анализ проблемы составных типов данных

Разберем ситуацию на примере классического запроса к регистру сведений РегистрСведений.ЗначенияСвойствОбъектов. Типичный текст запроса в СКД выглядит следующим образом:


ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Свойство

Поле Значение в данном регистре имеет составной тип данных, определяемый Планом видов характеристик (ПВХ). Именно из-за этой "составности" платформа не знает заранее, какой справочник или примитивный тип данных будет использоваться. Проанализируем, как помочь системе определить тип автоматически.

Шаг 1. Настройка связи по типу

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

  1. Перейдем на закладку Наборы данных.
  2. В списке полей найдем поле Значение.
  3. Найдем колонку Связь по типу (она может быть скрыта, в этом случае нужно прокрутить список вправо).
  4. Нажмем на кнопку выбора в этой колонке. В появившемся окне выберем поле Свойство.

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

Шаг 2. Ограничение списка выбора (Фильтрация по владельцу)

Выясним причину второй проблемы: почему при выборе значения (например, для свойства "Цвет") открывается список, содержащий значения и для "Цвета", и для "Размера", и для других характеристик? Это происходит потому, что Связь по типу определяет только тип данных, но не накладывает фильтр на записи внутри этого типа. Если значения свойств хранятся в подчиненном справочнике (например, Справочник.ЗначенияСвойствОбъектов), нам нужно передать владельца в форму выбора.

Разберем, как настроить Связи параметров выбора в СКД:

  1. В той же таблице полей на закладке Наборы данных найдем колонку Параметры редактирования для поля Значение.
  2. Нажмем на "лупу" или кнопку выбора.
  3. В открывшемся окне найдем пункт Связи параметров выбора.
  4. Добавим новую связь:
    • В колонке Параметр выбора укажем Отбор.Владелец.
    • В колонке Поле компоновки выберем наше поле Свойство.

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

Шаг 3. Использование характеристик в СКД

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

На закладке Характеристики можно описать правила, по которым СКД будет получать дополнительные реквизиты для объектов. Рассмотрим основные параметры этой настройки:

Если настроить этот механизм, то СКД "под капотом" сама проставит все необходимые связи типов и параметров выбора. Поля свойств станут доступны в настройках отчета как вложенные реквизиты объекта, что значительно упростит работу пользователя.

Особенности для Управляемых форм

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

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

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


ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Свойство
    И ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК Справочник.ЗначенияСвойствОбъектов) ССЫЛКА Справочник.ЗначенияСвойствОбъектов

Использование оператора ВЫРАЗИТЬ помогает оптимизатору запросов СУБД быстрее обрабатывать условия по составным полям, однако основная логика удобства интерфейса все равно ложится на настройки Связи по типу и Связи параметров выбора, которые мы разобрали выше.

← На главную