К статье
Практический материал

Разработка и Конфигурация · 10 мин

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

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

Подменю на форме в 1С — это группа команд, объединённая под одной кнопкой в командной панели. Такой приём используют, когда кнопок много и они загромождают форму: например, несколько вариантов печати, заполнения документа или вызова обработок прячут в раскрывающееся меню «Печать», «Заполнить» или «Ещё».

В управляемых формах подменю создаётся через элемент формы «Группа» с видом «Подменю». Сделать это можно двумя способами: в конфигураторе, перетащив группу и команды в дерево элементов формы, или программно — в модуле формы при её создании. Оба подхода рассмотрены ниже с конкретным кодом и проверкой результата.

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

Что такое подменю и когда его стоит использовать

Подменю — элемент командной панели, который при нажатии раскрывает список вложенных кнопок. В типовых конфигурациях вы видите его постоянно: кнопка «Печать» в документах, «Создать на основании», «Ещё» в формах списков. Все они технически устроены одинаково — это группа с видом «Подменю», внутри которой лежат кнопки команд.

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

Не стоит увлекаться вложенностью: подменю внутри подменю платформа позволяет создать, но на практике это затрудняет поиск команды. Оптимально — один уровень вложенности. Если команд так много, что требуется два уровня, лучше пересмотреть состав формы и вынести часть функций в отдельные обработки.

Создание подменю через конфигуратор

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

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

Порядок действий в конфигураторе
  1. 1
    Откройте форму в конфигураторе и перейдите на закладку «Форма» с деревом элементов
  2. 2
    В контекстном меню командной панели выберите «Добавить» → «Группа»
  3. 3
    В свойствах группы установите Вид = Подменю, задайте Заголовок (например, «Печать»)
  4. 4
    Перетащите нужные команды из палитры команд внутрь созданной группы — появятся кнопки
  5. 5
    Сохраните форму и проверьте результат в режиме 1С:Предприятие

После добавления группы в её свойствах обязательно проверьте поле «Вид» — по умолчанию группа создаётся как «Обычная группа», и если вид не изменить на «Подменю», кнопки просто выстроятся в ряд без выпадающего меню. Заголовок группы станет текстом на кнопке, раскрывающей меню; также можно задать картинку через свойство «Картинка».

Команды добавляются в подменю перетаскиванием из правой панели «Команды» (закладка «Командный интерфейс» или список команд формы). Каждая команда, помещённая в группу-подменю, отображается как кнопка. Если команды ещё нет, сначала создайте её на закладке «Команды» редактора формы и назначьте обработчик.

Создание подменю программно

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// 1. Создаём команды формы

Команда = Команды.Добавить("ЗаполнитьПоОстаткам");

Команда.Действие = "ЗаполнитьПоОстаткам";

Команда.Заголовок = "По остаткам";

Команда = Команды.Добавить("ЗаполнитьПоЗаказу");

Команда.Действие = "ЗаполнитьПоЗаказу";

Команда.Заголовок = "По заказу";

// 2. Создаём группу-подменю в командной панели

Группа = Элементы.Добавить("ГруппаЗаполнить", Тип("ГруппаФормы"), Элементы.КоманднаяПанель);

Группа.Вид = ВидГруппыФормы.Подменю;

Группа.Заголовок = "Заполнить";

// 3. Добавляем кнопки внутрь подменю

Кнопка = Элементы.Добавить("КнопкаЗаполнитьПоОстаткам", Тип("КнопкаФормы"), Группа);

Кнопка.ИмяКоманды = "ЗаполнитьПоОстаткам";

Кнопка = Элементы.Добавить("КнопкаЗаполнитьПоЗаказу", Тип("КнопкаФормы"), Группа);

Кнопка.ИмяКоманды = "ЗаполнитьПоЗаказу";

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

Обратите внимание на три момента. Во-первых, свойство «Действие» команды должно совпадать с именем процедуры-обработчика в модуле формы (с директивой &НаКлиенте или &НаСервере). Во-вторых, родитель кнопки — именно созданная группа, а не командная панель, иначе кнопка окажется снаружи меню. В-третьих, имя элемента должно быть уникальным в пределах формы.

Подменю в существующих типовых кнопках: «Ещё» и «Печать»

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

Подменю «Печать» наполняется через модуль менеджера объекта: процедура «ДобавитьКомандыПечати» определяет, какие печатные формы появятся в меню. Если ваша команда печати не отображается, проверьте, что она добавлена именно в этой процедуре и что у пользователя есть права на соответствующий объект.

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

Настройка внешнего вида подменю

У группы-подменю есть несколько свойств, влияющих на отображение. «Заголовок» — текст на кнопке меню; если оставить пустым и задать только картинку, получится компактная иконка. «Картинка» выбирается из библиотеки картинок платформы или общих картинок конфигурации. Свойство «Отображение» позволяет показывать кнопку как текст, картинку или и то и другое.

Полезное свойство — «ОтображениеПодменю» (в новых версиях платформы) и «Важность» у отдельных команд. Также подменю можно сделать неактивным или невидимым программно: Элементы.ГруппаЗаполнить.Видимость = Ложь; — это удобно для скрытия меню по условию, например, когда документ проведён и заполнение недоступно.

Для выделения подменю в командной панели используют свойство «Важное» у группы — тогда кнопка меню не уйдёт в «Ещё» при сужении окна. Учтите обратный эффект: если пометить важными слишком много элементов, при маленьком окне командная панель станет перегруженной, и часть кнопок всё равно скроется.

Проверка результата и типичные ошибки

После настройки откройте форму в режиме 1С:Предприятие и проверьте: кнопка подменю видна в командной панели, при нажатии раскрывается список команд, каждая команда выполняет своё действие без ошибок. Также проверьте форму при разной ширине окна — убедитесь, что подменю не исчезает неожиданно.

Контрольные точки

Как проверить результат

Кнопка подменю в командной панели
Норма

Кнопка с заданным заголовком видна и раскрывает список

Тревожный признак

Кнопки нет — проверьте Вид группы и её родителя в дереве элементов

Состав раскрывающегося меню
Норма

Все добавленные команды присутствуют и активны

Тревожный признак

Команды серые или отсутствуют — проверьте привязку кнопки к команде и права

Выполнение команды
Норма

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

Тревожный признак

Ошибка «Процедура не обнаружена» — имя в свойстве Действие не совпадает с именем процедуры

Типичные ошибки
01
Группа создана, но вид не изменён на «Подменю» — кнопки выстроились в ряд вместо выпадающего меню
02
Кнопка добавлена в командную панель, а не в группу-подменю — команда отображается снаружи меню
03
В программном коде свойство Действие не совпадает с именем обработчика — ошибка при нажатии
04
Подменю добавлено в форму, но у пользователя нет прав на команды — меню пустое или невидимое
05
Программное создание элементов вызвано повторно без проверки — ошибка дублирования имени элемента

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

Частые вопросы

Можно ли сделать подменю в обычной форме (не управляемой)?

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

Как добавить подменю не в командную панель, а рядом с полями формы?

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

Почему моё подменю попало в кнопку «Ещё» само по себе?

При недостатке ширины окна платформа автоматически переносит часть командной панели в «Ещё». Чтобы подменю оставалось на виду, установите группе свойство важности (в свойствах группы) или сократите количество кнопок верхнего уровня.

Как программно изменить заголовок подменю в зависимости от условий?

Обратитесь к элементу по имени и поменяйте свойство: Элементы.ГруппаЗаполнить.Заголовок = "Заполнить (недоступно)". Это можно делать в любом серверном или клиентском обработчике, например при изменении статуса документа.

Можно ли вкладывать одно подменю в другое?

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

Как добавить свою команду в типовое подменю «Печать» без изменения конфигурации?

Используйте подсистему «Дополнительные отчеты и обработки» БСП: зарегистрируйте внешнюю печатную форму, назначьте её объекту — команда появится в меню «Печать» автоматически. Альтернатива — расширение конфигурации с добавлением команды печати в модуль менеджера объекта.

Итог

Что важно запомнить

Подменю на форме 1С — это группа с видом «Подменю» внутри командной панели, наполненная кнопками команд. Создаётся в конфигураторе перетаскиванием или программно через Элементы.Добавить. Главные проверки: вид группы, родитель кнопок, совпадение свойства Действие с именем обработчика. Для типовых конфигураций используйте расширения.