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