Командная панель на форме 1С 8.3: редактор формы, код и расширение

· 9 мин

Содержание

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

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

Что такое командная панель формы и где она живёт

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

  • 🧩 Основная панель формы. Есть у каждой формы по умолчанию, в дереве элементов это верхний узел «Командная панель». Платформа сама заполняет её стандартными командами объекта.
  • 📋 Панель таблицы. У каждой таблицы формы своя панель с командами «Добавить», «Удалить», «Переместить вверх» и т. д.
  • ➕ Дополнительная панель. Группа вида «Командная панель», которую разработчик ставит в любое место формы: в шапку, на страницу, рядом с полем.

Положение основной панели задаёт свойство формы ПоложениеКоманднойПанели: «Авто», «Верх», «Низ» или «Нет». У таблицы аналогичное свойство называется положением командной панели таблицы. Значение «Нет» прячет панель целиком — это первое, что стоит проверить, если кнопок на форме не видно вообще.

Какой способ добавления командной панели выбрать

СпособКогда подходитРиски
Редактор формы в КонфигуратореСвоя конфигурация или снятая с поддержкиПравки в типовой затрутся при обновлении
Программно в ПриСозданииНаСервереКнопки зависят от данных, прав, настроекКод сложнее читать и отлаживать
Расширение конфигурацииТиповая конфигурация на поддержкеНужно проверять расширение после каждого обновления
Внешняя обработка через «Дополнительные отчёты и обработки»Типовые на БСП, нужна кнопка заполнения или печатиРаботает только с поддерживаемыми видами обработок

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

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

Это основной путь для своих разработок. Порядок такой.

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

Шаблон обработчика выглядит так:

&НаКлиенте
Процедура ЗаполнитьПоШаблону(Команда)
	ЗаполнитьПоШаблонуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПоШаблонуНаСервере()
	// логика заполнения табличной части
КонецПроцедуры

Стандартные и глобальные команды

Не обязательно писать свои команды. На вкладке «Команды» есть ещё две ветки.

  • 🔹 Стандартные команды — «Записать», «Провести», «Удалить», «Скопировать» и т. п. Их можно перенести на любую панель, а не только на основную.
  • 🔹 Глобальные команды — команды других объектов и общие команды. Например, кнопка открытия списка связанного справочника прямо из формы документа.

Свойства, которые стоит настроить сразу

СвойствоГдеЧто даёт
Картинка и ОтображениеКомандаИконка, текст или иконка с текстом
СочетаниеКлавишКомандаГорячая клавиша, например Ctrl+Shift+F
ИзменяетСохраняемыеДанныеКомандаФорма помечается изменённой после нажатия
ТолькоВоВсехДействияхКнопкаКнопка уходит в меню «Ещё»
АвтозаполнениеПанельПанель сама добавляет стандартные команды
ИсточникКомандПанельЧьи команды подставлять: формы или таблицы

Для дополнительной панели в шапке обычно отключают Автозаполнение, иначе платформа продублирует туда стандартные команды основной панели.

Способ 2. Программное добавление кнопок на командную панель

Код нужен, когда набор кнопок заранее не известен: зависит от вида операции, роли пользователя или настроек. Добавлять команды и элементы надо на сервере, обычно в ПриСозданииНаСервере.

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

	НоваяКоманда = Команды.Добавить("ВыгрузитьВФайл");
	НоваяКоманда.Заголовок = "Выгрузить в файл";
	НоваяКоманда.Действие  = "ВыгрузитьВФайлОбработчик";

	Кнопка = Элементы.Добавить("КнопкаВыгрузитьВФайл", Тип("КнопкаФормы"), КоманднаяПанель);
	Кнопка.ИмяКоманды = "ВыгрузитьВФайл";

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

&НаКлиенте
Процедура ВыгрузитьВФайлОбработчик(Команда)
	// действие кнопки
КонецПроцедуры

Здесь КоманднаяПанель — свойство самой формы, ссылка на её основную панель. Чтобы положить кнопку в свою группу, третьим параметром передайте элемент группы, например Элементы.ПанельШапки.

Новую панель тоже можно создать из кода:

Панель = Элементы.Добавить("ПанельДействий", Тип("ГруппаФормы"), Элементы.ГруппаШапка);
Панель.Вид = ВидГруппыФормы.КоманднаяПанель;
Панель.Автозаполнение = Ложь;

Три правила, без которых код не заработает:

  • ✅ Процедура, указанная в Действие, должна существовать в модуле формы и иметь параметр Команда.
  • ✅ Имена команд и элементов уникальны в пределах формы. Повторный вызов Добавить с тем же именем приведёт к ошибке.
  • ✅ Чтобы вставить кнопку не в конец, используйте Элементы.Вставить с четвёртым параметром — элементом, перед которым она встанет.

Обычные формы (толстый клиент)

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

Кнопку из кода добавляют через коллекцию Кнопки:

Процедура ПриОткрытии()
	Панель = ЭлементыФормы.ДействияФормы;
	Панель.Кнопки.Добавить("Выгрузить", ТипКнопкиКоманднойПанели.Действие,
		"Выгрузить", Новый Действие("ВыгрузитьНажатие"));
КонецПроцедуры

Процедура ВыгрузитьНажатие(Кнопка)
	// действие
КонецПроцедуры

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

Способ 3. Команды в типовой конфигурации без снятия с поддержки

Править форму типовой Бухгалтерии или ЗУП напрямую плохая идея: при каждом обновлении придётся сравнивать и объединять изменения. Есть два чистых пути.

Расширение конфигурации

  1. В Конфигураторе откройте Конфигурация → Расширения конфигурации и создайте расширение.
  2. В дереве основной конфигурации найдите форму, правой кнопкой → «Добавить в расширение».
  3. В заимствованной форме расширения добавьте команду и кнопку так же, как в способе 1. Обработчик пишется в модуле формы расширения.
  4. Сохраните расширение и обновите конфигурацию базы.

Если кнопки создаются кодом, перехватите событие формы:

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// Команды.Добавить и Элементы.Добавить, как в способе 2
КонецПроцедуры

После обновления типовой проверьте расширение: если разработчик переименовал форму или элемент, на который вы опирались, расширение может перестать применяться.

Подключаемая внешняя обработка

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

Вариант удобен для одной-двух кнопок вроде «Заполнить по Excel». Для сложной логики с новыми реквизитами всё равно нужно расширение.

Кнопки, которые меняются на лету

Статичная панель подходит не всегда. Типичные задачи — скрыть кнопку для части пользователей, показать её только при определённом статусе документа, переключать режим кнопкой-флажком.

Видимостью и доступностью управляют через элемент кнопки, а не через команду:

&НаСервере
Процедура НастроитьКнопки()
	Элементы.КнопкаВыгрузитьВФайл.Видимость   = РольДоступна("ПолныеПрава");
	Элементы.КнопкаВыгрузитьВФайл.Доступность = Объект.Проведен;
КонецПроцедуры

Вызывайте такую процедуру в ПриСозданииНаСервере и ПослеЗаписиНаСервере, чтобы состояние обновлялось после проведения.

Ещё несколько приёмов:

  • 🔘 Кнопка-переключатель. Свойство кнопки Пометка = Истина показывает её нажатой. В обработчике команды меняйте значение и одновременно режим формы.
  • 📂 Подменю. Группа вида «Подменю» внутри панели собирает редкие команды под одну кнопку со стрелкой.
  • ⚙️ Функциональные опции. Если кнопка нужна только при включённой настройке учёта, укажите опцию в свойстве команды — платформа скроет кнопку сама, кода не нужно.
  • 🔐 Права. Стандартные и глобальные команды объекта платформа скрывает автоматически, если у роли нет права на действие.

Менять Видимость можно и на клиенте, без вызова сервера. Но если решение зависит от данных базы, проверьте условие один раз на сервере и сохраните результат в реквизит формы.

Как сделать панель удобной для пользователей

Перегруженная панель раздражает не меньше, чем пустая. Несколько правил из практики.

  • 🎯 Две-три главные кнопки видны всегда. Всё остальное — в «Ещё» через ТолькоВоВсехДействиях или в подменю.
  • 🖼 Иконки только для частых действий. Десяток иконок без подписей пользователь не расшифрует.
  • ⌨️ Горячие клавиши для массовых операций. Бухгалтер, который заполняет 50 документов в день, оценит Ctrl+Shift+F больше, чем красивую кнопку.
  • 🟢 Кнопка по умолчанию. Свойство КнопкаПоУмолчанию выделяет кнопку и срабатывает по Ctrl+Enter.
  • 👥 Пользовательская настройка. Через «Ещё» → «Изменить форму» пользователь сам скрывает и переставляет кнопки. Если у кого-то панель выглядит иначе, чем у остальных, сначала сбросьте его настройки формы — в том же окне есть «Стандартные настройки».

Перед сдачей формы пройдитесь по списку:

Проверка командной панели перед публикацией
Выполнено: 0 / 5

Почему кнопка не появилась: разбор частых случаев

Диагностика: выберите симптом

Ещё одна ловушка — обработчик создан на сервере вместо клиента. Команда формы вызывает процедуру с директивой &НаКлиенте; если обработчик помечен &НаСервере, вынесите серверную часть в отдельную процедуру и вызывайте её из клиентской, как в шаблоне способа 1.

Отдельный случай — дублирование стандартных команд. Если вы создали дополнительную панель и не отключили Автозаполнение, на форме окажутся две «Записать и закрыть». Снимите флажок в свойствах новой панели.

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

Можно ли добавить командную панель на форму списка?
Да. Форма списка — такая же управляемая форма: у неё есть основная панель и панель таблицы списка. Команды добавляют теми же способами.
Как убрать стандартную кнопку, например «Создать»?
Отключите Автозаполнение у панели и перенесите нужные команды вручную либо установите Видимость = Ложь у элемента кнопки. В расширении это делается через заимствованную форму.
Работают ли такие кнопки в веб-клиенте и мобильном клиенте?
В веб-клиенте да. В мобильном клиенте панель отображается по-своему, часть кнопок уходит в меню, поэтому главную команду лучше сделать кнопкой по умолчанию.
Чем команда формы отличается от общей команды?
Команда формы живёт только в одной форме. Общая команда создаётся в ветке «Общие» → «Общие команды» и может появляться на панелях многих форм через свойство «Группа» и параметр команды.
Как вывести одну кнопку сразу на формы нескольких документов?
Создайте общую команду, в типе параметра укажите ссылки на нужные документы, а в свойстве «Группа» выберите группу командной панели формы. Кнопка появится на формах всех перечисленных документов без правки самих форм.