Как программно настроить отбор в динамическом списке на форме в 1С:Бухгалтерия 3.0?

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

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

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

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

Реализация отбора через коллекцию элементов

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

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


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

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

Как ограничить доступ пользователя к изменению отбора

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

Рассмотрим, как это можно реализовать программно:


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

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

Если ваш отбор должен меняться в процессе работы формы (например, по нажатию кнопки), работа с элементами отбора может быть избыточной. Более эффективным способом является использование параметров запроса в самом Динамическом списке.

  1. Откройте настройки Динамического списка в конфигураторе.
  2. Перейдите на вкладку Параметры и добавьте параметр, например, ПериодОтбора.
  3. В тексте запроса используйте этот параметр в блоке ГДЕ, например: ГДЕ Дата >= &ПериодОтбора.
  4. В коде формы просто устанавливайте значение параметра: Список.Параметры.УстановитьЗначениеПараметра("ПериодОтбора", НоваяДата);.

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

Важные советы по разработке

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

← На главную