При настройке пользовательского интерфейса часто возникает задача оптимизировать работу пользователей и сократить количество кликов при вводе типовой информации. Например, в иерархическом справочнике создано несколько предопределенных групп (например, «Земельные участки», «Здания», «Сооружения»), и пользователю требуется создавать элементы в нужной группе напрямую из панели разделов подсистемы, минуя открытие общего списка и ручной переход по иерархии папок.
Разберем, почему командный интерфейс платформы 1С:Предприятие 8.3 устроен именно так и как правильно реализовать требуемую логику с помощью общих команд и управляемых форм.
Проанализируем архитектурную особенность командного интерфейса управляемого приложения. Командный интерфейс подсистем и разделов строится строго на базе метаданных (справочников, документов, отчетов, общих команд), а не на данных информационной базы (конкретных строк таблиц или ссылок). По этой причине платформа не позволяет штатным перетаскиванием в конфигураторе вывести ссылку на конкретный элемент или группу справочника в панель навигации подсистемы.
Стандартная команда создания объекта (команда «Создать» у справочника) создает новый пустой элемент без привязки к конкретному родителю. Чтобы зафиксировать родительскую группу, необходимо создать отдельную команду и описать передачу нужных параметров заполнения программно.
Рассмотрим детальный порядок действий для реализации создания элемента в предопределенной группе через панель действий подсистемы.
Общие → Команды и добавим новую общую команду (например, СоздатьЗемельныйУчасток). В качестве альтернативы можно добавить команду непосредственно в состав команд нужного справочника.Панель действий.Создать.Посмотрим на рабочий пример кода клиентского обработчика команды, выполняющего открытие формы нового объекта с автоматической подстановкой родителя:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Получаем ссылку на предопределенную группу по ее имени в конфигураторе
НужнаяГруппа = ПредопределенноеЗначение("Справочник.НедвижимоеИмущество.ЗемельныеУчастки");
// Формируем структуру значений заполнения для реквизитов объекта
ЗначенияЗаполнения = Новый Структура("Родитель", НужнаяГруппа);
// Передаем структуру в системный параметр формы "ЗначенияЗаполнения"
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
// Открываем основную форму объекта
ОткрытьФорму(
"Справочник.НедвижимоеИмущество.ФормаОбъекта",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка
);
КонецПроцедуры
Разберем подробнее, за счет чего происходит подстановка родителя:
В платформе 1С:Предприятие 8.3 для управляемых форм реализован системный механизм обработки параметров заполнения. При вызове функции ОткрытьФорму без указания ключа существующего объекта платформа открывает форму для создания нового элемента. Если в параметрах открытия передан параметр с зарезервированным именем ЗначенияЗаполнения, платформа автоматически выполняет следующие действия:
ОбработкаЗаполнения модуля объекта.Родитель).Родитель флаг Заполнять из данных заполнения по умолчанию включен в палитре свойств стандартных реквизитов справочника.Важное замечание по получению предопределенного элемента: Функция ПредопределенноеЗначение принимает имя предопределенного элемента, заданное в дереве метаданных конфигуратора (идентификатор), а не его текстовое наименование из режима предприятия.
Если перед созданием элемента пользователю требуется сначала просмотреть список уже существующих объектов внутри конкретной группы, мы можем использовать ту же команду, но открывать форму списка с предустановленным фильтром или позиционированием строки.
Сценарий 1: Открытие списка с фильтром по группе
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
НужнаяГруппа = ПредопределенноеЗначение("Справочник.НедвижимоеИмущество.ЗемельныеУчастки");
Отбор = Новый Структура("Родитель", НужнаяГруппа);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Справочник.НедвижимоеИмущество.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность);
КонецПроцедуры
Сценарий 2: Открытие иерархического списка с фокусом на группе
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
НужнаяГруппа = ПредопределенноеЗначение("Справочник.НедвижимоеИмущество.ЗемельныеУчастки");
// Параметр ТекущаяСтрока устанавливает фокус в дереве или иерархическом списке
ПараметрыФормы = Новый Структура("ТекущаяСтрока", НужнаяГруппа);
ОткрытьФорму("Справочник.НедвижимоеИмущество.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность);
КонецПроцедуры
Если конфигурация находится на типовой поддержке без возможности внесения изменений в основную ветку метаданных, описанные команды рекомендуется вынести в отдельное расширение конфигурации. В расширении достаточно создать общую команду, подключить ее к нужной подсистеме и прописать логику вызова ОткрытьФорму. Это сохранит конфигурацию на полной поддержке и упростит последующие обновления системы.