Как добавить произвольные команды формы в меню Создать на основании в 1С

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

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

Вариант 1. Использование подсистемы Подключаемые команды (БСП)

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

Разберем по шагам, как настроить такую команду в модуле менеджера документа-основания:

  1. Откроем модуль менеджера документа, для которого настраивается список основания.
  2. Найдем или создадим экспортную процедуру ДобавитьКомандыСозданияНаОсновании (в версиях БСП 3.x) или соответствующую процедуру настройки команд подсистемы.
  3. Добавим строку команды в переданную таблицу команд и укажем обработчик, привязанный к форме.

Посмотрим на пример заполнения параметров команды в модуле менеджера:


Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
    
    Команда = КомандыСозданияНаОсновании.Добавить();
    Команда.Идентификатор = "ОткрытьСпециальныйМастерСоздания";
    Команда.Представление = НСтр("ru = 'Специальный мастер ввода'");
    Команда.Порядок = 10;
    
    // Указываем имя экспортной клиентской процедуры из модуля формы
    Команда.Обработчик = "ОбработатьСозданиеНаОсновании";
    
    // Указываем форму, в которой расположен обработчик команды
    Команда.ИмяФормы = "Документ.ЗаказКлиента.Форма.ФормаСписка";
    
КонецПроцедуры

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

В более ранних версиях БСП (до ветки 3.0) подсистема носила название Ввод на основании. В таких редакциях настройка может выполняться через общие модули ВводНаОснованииПереопределяемый (например, процедуру ПередДобавлениемКомандСоздатьНаОсновании) или ПодключаемыеКомандыПереопределяемый (процедуру ПриОпределенииКомандПодключенныхКОбъекту).

Вариант 2. Создание собственного подменю в дереве элементов формы

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

Рассмотрим порядок действий в конфигураторе:

  1. Откроем нужную форму (например, форму списка документов).
  2. Перейдем в свойства командной панели формы (или таблицы) и снимем флаг Автозаполнение, либо в окне Командный интерфейс формы отключим видимость платформенной группы Создать на основании.
  3. В дереве элементов формы добавим новый элемент с типом ГруппаФормы и установим его вид в значение Подменю.
  4. Зададим новому элементу имя (например, ПодменюСоздатьНаОсновании), заголовок «Создать на основании» и стандартную картинку ВвестиНаОсновании из библиотеки картинок платформы.
  5. Создадим на вкладке Команды обычные локальные команды формы, реализующие требуемую логику в процедурах модуля формы.
  6. Перетащим созданные команды внутрь нашей группы-подменю в дереве элементов формы.

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

Вариант 3. Программное добавление кнопки в обработчике формы

Проанализируем еще одну частую ситуацию: когда командная панель создается динамически или требуется добавить команду формы в существующее подменю БСП программным путем без изменения метаданных в менеджере объекта.

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


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

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

← На главную