Как вывести отборы динамического списка на управляемую форму в 1С 8.3?

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

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

Причина возникновения проблемы: иерархия настроек СКД

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

  1. Настройки (основные): Это те параметры, которые мы задаем в конфигураторе. Они являются «дефолтными» для списка.
  2. Пользовательские настройки: Это те изменения, которые внес пользователь в режиме «1С:Предприятие». Именно они отображаются на форме в специальных группах.
  3. Фиксированные настройки: Параметры, которые нельзя изменить или увидеть через стандартный интерфейс. Они накладываются на данные всегда.

Проблема автора заключается в том, что созданный отбор попал в первую категорию (Настройки), но не был включен во вторую (Пользовательские настройки). Поэтому система применяет фильтр, но не «выносит» его на экран.

Шаг 1. Включение отбора в пользовательские настройки

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

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

Шаг 2. Настройка режима отображения (Быстрый доступ)

Проанализируем режимы отображения, которые предлагает платформа. От этого зависит, как именно фильтр появится на форме:

Если вы хотите, чтобы пользователь видел отбор в виде поля со значением прямо над списком, выбирайте «Быстрый доступ» в окне свойств элемента пользовательских настроек.

Шаг 3. Привязка группы пользовательских настроек на форме

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

  1. Создадим на форме новый элемент типа «Группа» (обычно это «Группа - Обычная группа» или «Группа - Командная панель»).
  2. В дереве элементов формы выберем сам объект Таблица, который отображает наш динамический список.
  3. В окне свойств таблицы найдем свойство «Группа пользовательских настроек».
  4. В выпадающем списке выберем ту группу, которую мы создали в пункте 1.

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

Шаг 4. Решение проблемы «исчезающих» настроек

Как отметил автор в сообщении 5, пользователь может случайно или намеренно сбросить настройки списка к стандартным, и тогда созданные заготовки могут вести себя непредсказуемо. Кроме того, платформа часто кэширует настройки пользователя. Если вы внесли изменения в конфигураторе, а в режиме «Предприятие» они не появились, попробуйте выполнить команду «Еще — Установить стандартные настройки» прямо в списке документов.

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

Шаг 5. Программное управление отборами

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

Рассмотрим пример кода, который программно добавляет отбор и выводит его в пользовательские настройки:


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

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

КонецПроцедуры

Фиксированные настройки: когда отбор нельзя менять

Если ваша цель — жестко ограничить список документов (например, показывать в форме только документы определенного подразделения без возможности это отключить), то пользовательские настройки вам не подходят. В этом случае используйте ФиксированныеНастройки. Эти настройки суммируются с пользовательскими, но не видны им и не могут быть удалены через интерфейс.

Посмотрим на пример установки фиксированного отбора:


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

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

← На главную