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

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

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

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

Ограничение командного интерфейса и логика платформы

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

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

Пошаговое создание команды для ввода элемента в группе

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

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

Программный код обработчика команды

Посмотрим на рабочий пример кода клиентского обработчика команды, выполняющего открытие формы нового объекта с автоматической подстановкой родителя:


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

Как работает механизм «ЗначенияЗаполнения»

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

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

  1. Передает переданную структуру в событие ОбработкаЗаполнения модуля объекта.
  2. Автоматически заполняет реквизиты объекта, имена которых совпадают с ключами переданной структуры (в нашем случае реквизит Родитель).
  3. Для стандартного реквизита Родитель флаг Заполнять из данных заполнения по умолчанию включен в палитре свойств стандартных реквизитов справочника.

Важное замечание по получению предопределенного элемента: Функция ПредопределенноеЗначение принимает имя предопределенного элемента, заданное в дереве метаданных конфигуратора (идентификатор), а не его текстовое наименование из режима предприятия.

Альтернативные сценарии: открытие списка с отбором или позиционированием

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

Сценарий 1: Открытие списка с фильтром по группе


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

Сценарий 2: Открытие иерархического списка с фокусом на группе


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

Реализация без изменения типовой конфигурации

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

← На главную