Откуда берутся параметры в форме выбора справочника при открытии из табличной части?

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

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

1. Механизм стандартного интерактивного выбора

Когда пользователь нажимает кнопку выбора (три точки) в ячейке табличной части, платформа запускает стандартный интерактивный сценарий:

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

2. Стандартные параметры управляемой формы

Рассмотрим подробнее структуру стандартных параметров, предоставляемых системой «из коробки». Эти параметры определены на уровне платформы и описаны в синтакс-помощнике (раздел «Встроенный язык – Интерфейс (управляемый) – Управляемая форма – Расширение динамического списка / объекта»):

3. Автоматическое формирование параметров без написания кода

Если в форме документа нет программного кода, платформа формирует структуру Параметры на основе декларативных настроек в конфигураторе. Проанализируем два главных инструмента разработчика:

Связи параметров выбора (Choice parameter links)

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

Параметры выбора (Choice parameters)

Это статически заданные фильтры. Например, если в конкретной табличной части документа должны выбираться только те сотрудники, у которых реквизит ВидЗанятости имеет значение ОсновноеМестоРаботы, этот отбор можно жестко прописать в свойствах поля формы или реквизита в конфигураторе. Платформа запакует это условие в параметр Отбор перед открытием формы справочника.

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

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

Способ А. Динамическое изменение параметров элемента формы

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


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

Способ Б. Полный программный перехват в событии НачалоВыбора

Если требуется передать нестандартные параметры или полностью контролировать процесс открытия формы, мы переопределяем событие НачалоВыбора табличной части:


&НаКлиенте
Процедура ТабличнаяЧастьСотрудникНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    // 1. Отменяем стандартное открытие формы платформой
    СтандартнаяОбработка = Ложь;
    
    // 2. Формируем структуру параметров
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
    
    // Добавляем структуру отбора
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("ВАрхиве", Ложь);
    СтруктураОтбора.Вставить("Организация", Объект.Организация);
    ПараметрыОткрытия.Вставить("Отбор", СтруктураОтбора);
    
    // Добавляем наш собственный произвольный параметр
    ПараметрыОткрытия.Вставить("ПоказыватьТолькоДоговорников", Истина);
    
    // 3. Открываем форму выбора справочника.
    // Передача Элемента в качестве третьего параметра (Владелец) критически важна!
    // Благодаря этому система поймет, куда вернуть выбранное значение.
    ОткрытьФорму("Справочник.Сотрудники.ФормаВыбора", ПараметрыОткрытия, Элемент);
    
КонецПроцедуры

В форме выбора справочника в процедуре ПриСозданииНаСервере мы сможем легко считать наш произвольный параметр:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("ПоказыватьТолькоДоговорников") Тогда
        Если Параметры.ПоказыватьТолькоДоговорников Тогда
            // Управляем видимостью или накладываем специфичный программный отбор на список
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

5. Использование параметров при вводе по строке

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

6. Передача параметров при создании нового элемента (префикс «Дополнительно»)

Иногда пользователь открывает форму выбора справочника из документа, не находит нужного сотрудника и решает нажать кнопку «Создать». Чтобы перенести данные из исходного документа (например, организацию) в форму создания нового сотрудника, платформа предоставляет встроенный механизм префиксов:

← На главную