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

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

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

Передача структуры параметров в форму выбора

Разберем базовый механизм вызова формы подбора. Платформа 1С:Предприятие позволяет передавать отбор через специальный параметр формы Отбор, представляющий собой структуру, где ключ — это имя реквизита списка, а значение — фильтруемое значение.

Если требуется разрешить пользователю подбирать несколько позиций подряд без постоянного переоткрытия окна, в структуру параметров формы добавляют флаг МножественныйВыбор. Посмотрим на пример кода открытия формы выбора документов с отбором по клиенту:


ПараметрыОтбора = Новый Структура;

// Формируем структуру отбора по полю динамического списка
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Партнер", Объект.Клиент);

ПараметрыОтбора.Вставить("Отбор", СтруктураОтбора);
ПараметрыОтбора.Вставить("МножественныйВыбор", Истина);
ПараметрыОтбора.Вставить("ЗакрыватьПриВыборе", Ложь);

// Открываем форму выбора, передавая в качестве владельца текущую форму
ОткрытьФорму("Документ.ЗаказКлиента.ФормаВыбора", ПараметрыОтбора, ЭтаФорма);

Проанализируем ключевые параметры, передаваемые в метод ОткрытьФорму:

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

Обработка результатов множественного подбора

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

Когда владелец формы указан как ЭтаФорма, при выборе элемента в дочерней форме подбора в основной форме вызывается клиентское событие ОбработкаВыбора. Перехватим и обработаем выбранное значение следующим образом:


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

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

Тонкости передачи условий и типов отбора

Посмотрим на важные нюансы работы с параметрами отбора, о которых следует знать при написании кода:

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

Таким образом, сочетание правильной передачи структуры отбора в метод ОткрытьФорму и использование клиентского обработчика ОбработкаВыбора формы-владельца позволяет легко организовать полноценный режим подбора с отбором без модификации типовых форм конфигурации.

← На главную