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