Каталог решений - Отборы динамического списка

Отборы динамического списка

Отборы динамического списка

В наличии

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

Категория:

Описание

Объект динамический список содержит в себе следующие отборы:

  • Список.Отбор
  • Список.КомпоновщикНастроек.Настройки.Отбор
  • Список.КомпоновщикНастроек.ПользовательскиеНастройки.Отбор
  • Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор

Возникают вопросы:

  • Зачем столько отборов?
  • Какой надо использовать?
  • Как передать значения отборов при открытии формы?

Пробуем разобраться.

Зачем столько отборов?

Первое о чем хочется сказать, это:
Список.Отбор = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор

Т.е. если вы добавите отбор например вот так:

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

то фактически увидите примененный отбор и в Список.Отбор.

Таким образом можно говорить о том, что управление отборами в динамическом списке выполняется только через компоновщик настроек. Далее можно рассматривать только три вида отборов:

  • Настройки.Отбор
  • ПользовательскиеНастройки.Отбор
  • ФиксированныеНастройки.Отбор

Рассмотрим их особенности и порядок применения отборов.

ФиксированныеНастройки.Отбор

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

Пример кода, для открытия формы с условием на "Равно" или "В списке":

Отбор = Новый Структура;
	
Отбор.Вставить("Наименование", "Отбор ""Равно""");
// ИЛИ
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить("Отбор ""В списке 1""");
СписокЗначений.Добавить("Отбор ""В списке 2""");
Отбор.Вставить("Наименование", СписокЗначений);
// ИЛИ
Массив = Новый Массив;
Массив.Добавить("Отбор ""Массив 1""");
Массив.Добавить("Отбор ""Массив 2""");
Отбор.Вставить("Наименование", Массив);

ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму(ИмяФормыСписка(), ПараметрыФормы);

Произвольные фиксированные настройки можно передавать в форму списка:

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

Настройки.Отбор

Это настройки по умолчанию, они же доступны из конфигуратора в конструкторе формы.
Данные настройки будут применяться если пользователь нажмет "Еще — Установить стандартные настройки".

Способа передать эти настройки в форму через параметры не нашел.

ПользовательскиеНастройки.Отбор

 Это настройки,  которые доступны для редактирования пользователю через "Еще — Настройки списка …" на закладке отбор.

Передавать эти настройки в общем случае нельзя, но если очень хочется то можно:

ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ОтборКомпоновкиДанных = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки = "dfcece9d-5077-440b-b6b3-45a5cb4538eb";

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

Примечание: ГУИД в данном случае является магическим числом без которого не работает и которого нет в документации.

Какие есть особенности в использовании отборов?

"Особенности", как известно — это место где дьявол скрывается в мелочах.

1. Пользовательские и фиксированные установки нельзя устанавливать на одно и то же поле.

Причина этого ограничения мне не понятна, возможно было бы меньше проблем если бы отборы фиксированных и пользовательских настроек объединялись через "И", но имеем что имеем:

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

 

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

Возможные решения:

  1. Передавать фиксированный отбор вместе с пустым отбором в пользовательских настройках с ГУИДом  "dfcece9d-5077-440b-b6b3-45a5cb4538eb".
  2. Научить пользователя отключать лишние отборы в случае появления данной ошибки.

2. Элементы пользовательского отбора имеют настройки.

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

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

а в конфигураторе вот так:

3. Отбор пользовательских настроек это элемент коллекции "ПользовательскиеНастройки.Элементы".

В результате вывести на форму отбор пользовательских настроек можно только если на форме уже есть таблица "ПользовательскиеНастройки". Редактировать отбор можно только если элемент "ПользовательскиеНастроки" имеет включенную видимость и текущей строкой в нем является отбор. Возможным решением задачи "предоставить возможность редактирования пользовательских отборов прямо на форме списка" может быть:

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

Вот вроде бы и все. Во вложении обработка в которой выведены на форму все отборы.

Обработка и приведенных выше код проверялись на платформе версии 8.3.20, но должны работать и на более младших версиях.

has been added to your cart:
Оформление заказа