Командная панель на форме 1С 8.3: редактор формы, код и расширение
Содержание
Чтобы добавить командную панель в 1С 8.3, откройте форму в Конфигураторе, на вкладке «Элементы» добавьте группу вида «Командная панель» и перетащите в неё команды с вкладки «Команды». Если нужна кнопка на основной панели формы, отдельную группу создавать не надо: у каждой управляемой формы панель уже есть, достаточно перенести команду в её узел в дереве элементов.
Для типовой конфигурации на поддержке тот же результат дают расширение или код в ПриСозданииНаСервере. Ниже — все три способа, вариант для обычных форм и настройки, из-за которых кнопка «пропадает».
Что такое командная панель формы и где она живёт
Командная панель — это строка кнопок над формой или над таблицей: «Записать и закрыть», «Провести», «Печать», «Создать на основании», меню «Ещё». В управляемой форме она бывает трёх видов.
- 🧩 Основная панель формы. Есть у каждой формы по умолчанию, в дереве элементов это верхний узел «Командная панель». Платформа сама заполняет её стандартными командами объекта.
- 📋 Панель таблицы. У каждой таблицы формы своя панель с командами «Добавить», «Удалить», «Переместить вверх» и т. д.
- ➕ Дополнительная панель. Группа вида «Командная панель», которую разработчик ставит в любое место формы: в шапку, на страницу, рядом с полем.
Положение основной панели задаёт свойство формы ПоложениеКоманднойПанели: «Авто», «Верх», «Низ» или «Нет». У таблицы аналогичное свойство называется положением командной панели таблицы. Значение «Нет» прячет панель целиком — это первое, что стоит проверить, если кнопок на форме не видно вообще.
Какой способ добавления командной панели выбрать
| Способ | Когда подходит | Риски |
|---|---|---|
| Редактор формы в Конфигураторе | Своя конфигурация или снятая с поддержки | Правки в типовой затрутся при обновлении |
Программно в ПриСозданииНаСервере | Кнопки зависят от данных, прав, настроек | Код сложнее читать и отлаживать |
| Расширение конфигурации | Типовая конфигурация на поддержке | Нужно проверять расширение после каждого обновления |
| Внешняя обработка через «Дополнительные отчёты и обработки» | Типовые на БСП, нужна кнопка заполнения или печати | Работает только с поддерживаемыми видами обработок |
Перед изменением рабочей базы сделайте резервную копию. Выгрузка .dt или копия каталога файловой базы занимает минуты, а откат неудачного обновления конфигурации без копии может стоить дня.
Способ 1. Командная панель через редактор управляемой формы
Это основной путь для своих разработок. Порядок такой.
- Откройте объект метаданных (документ, справочник, обработку) и двойным щелчком — нужную форму.
- Перейдите на вкладку «Команды» → «Команды формы» и нажмите «Добавить». Задайте имя, например
ЗаполнитьПоШаблону, и заголовок. - В свойстве «Действие» нажмите на лупу. Конфигуратор спросит, где создать обработчик; для простой команды выберите вариант на клиенте.
- На вкладке «Элементы» кликните правой кнопкой по узлу формы или нужной группе → «Добавить» и выберите тип группы «Командная панель».
- Перетащите команду мышью из списка команд в новую панель. Появится элемент-кнопка, связанный с командой.
- Сохраните и обновите конфигурацию базы (F7), затем запустите 1С:Предприятие и проверьте форму.
Шаблон обработчика выглядит так:
&НаКлиенте
Процедура ЗаполнитьПоШаблону(Команда)
ЗаполнитьПоШаблонуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоШаблонуНаСервере()
// логика заполнения табличной части
КонецПроцедуры
Стандартные и глобальные команды
Не обязательно писать свои команды. На вкладке «Команды» есть ещё две ветки.
- 🔹 Стандартные команды — «Записать», «Провести», «Удалить», «Скопировать» и т. п. Их можно перенести на любую панель, а не только на основную.
- 🔹 Глобальные команды — команды других объектов и общие команды. Например, кнопка открытия списка связанного справочника прямо из формы документа.
Свойства, которые стоит настроить сразу
| Свойство | Где | Что даёт |
|---|---|---|
Картинка и Отображение | Команда | Иконка, текст или иконка с текстом |
СочетаниеКлавиш | Команда | Горячая клавиша, например Ctrl+Shift+F |
ИзменяетСохраняемыеДанные | Команда | Форма помечается изменённой после нажатия |
ТолькоВоВсехДействиях | Кнопка | Кнопка уходит в меню «Ещё» |
Автозаполнение | Панель | Панель сама добавляет стандартные команды |
ИсточникКоманд | Панель | Чьи команды подставлять: формы или таблицы |
Для дополнительной панели в шапке обычно отключают Автозаполнение, иначе платформа продублирует туда стандартные команды основной панели.
Способ 2. Программное добавление кнопок на командную панель
Код нужен, когда набор кнопок заранее не известен: зависит от вида операции, роли пользователя или настроек. Добавлять команды и элементы надо на сервере, обычно в ПриСозданииНаСервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НоваяКоманда = Команды.Добавить("ВыгрузитьВФайл");
НоваяКоманда.Заголовок = "Выгрузить в файл";
НоваяКоманда.Действие = "ВыгрузитьВФайлОбработчик";
Кнопка = Элементы.Добавить("КнопкаВыгрузитьВФайл", Тип("КнопкаФормы"), КоманднаяПанель);
Кнопка.ИмяКоманды = "ВыгрузитьВФайл";
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВФайлОбработчик(Команда)
// действие кнопки
КонецПроцедуры
Здесь КоманднаяПанель — свойство самой формы, ссылка на её основную панель. Чтобы положить кнопку в свою группу, третьим параметром передайте элемент группы, например Элементы.ПанельШапки.
Новую панель тоже можно создать из кода:
Панель = Элементы.Добавить("ПанельДействий", Тип("ГруппаФормы"), Элементы.ГруппаШапка);
Панель.Вид = ВидГруппыФормы.КоманднаяПанель;
Панель.Автозаполнение = Ложь;
Три правила, без которых код не заработает:
- ✅ Процедура, указанная в
Действие, должна существовать в модуле формы и иметь параметрКоманда. - ✅ Имена команд и элементов уникальны в пределах формы. Повторный вызов
Добавитьс тем же именем приведёт к ошибке. - ✅ Чтобы вставить кнопку не в конец, используйте
Элементы.Вставитьс четвёртым параметром — элементом, перед которым она встанет.
Обычные формы (толстый клиент)
В конфигурациях на обычных формах (режим 8.1/8.2, часть старых отраслевых решений) панель — это элемент управления «Командная панель» из палитры. Основная панель формы по умолчанию называется ДействияФормы, её источник действий — сама форма.
Кнопку из кода добавляют через коллекцию Кнопки:
Процедура ПриОткрытии()
Панель = ЭлементыФормы.ДействияФормы;
Панель.Кнопки.Добавить("Выгрузить", ТипКнопкиКоманднойПанели.Действие,
"Выгрузить", Новый Действие("ВыгрузитьНажатие"));
КонецПроцедуры
Процедура ВыгрузитьНажатие(Кнопка)
// действие
КонецПроцедуры
В редакторе обычной формы кнопки добавляют через свойства панели: двойной щелчок по панели открывает список кнопок, где задаются текст, картинка и действие. Код для управляемых форм в обычных не работает и наоборот, смешивать их нельзя.
Способ 3. Команды в типовой конфигурации без снятия с поддержки
Править форму типовой Бухгалтерии или ЗУП напрямую плохая идея: при каждом обновлении придётся сравнивать и объединять изменения. Есть два чистых пути.
Расширение конфигурации
- В Конфигураторе откройте
Конфигурация→Расширения конфигурациии создайте расширение. - В дереве основной конфигурации найдите форму, правой кнопкой → «Добавить в расширение».
- В заимствованной форме расширения добавьте команду и кнопку так же, как в способе 1. Обработчик пишется в модуле формы расширения.
- Сохраните расширение и обновите конфигурацию базы.
Если кнопки создаются кодом, перехватите событие формы:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Команды.Добавить и Элементы.Добавить, как в способе 2
КонецПроцедуры
После обновления типовой проверьте расширение: если разработчик переименовал форму или элемент, на который вы опирались, расширение может перестать применяться.
Подключаемая внешняя обработка
В конфигурациях на Библиотеке стандартных подсистем есть механизм «Дополнительные отчёты и обработки». Внешняя обработка вида «Заполнение объекта» или «Печатная форма» после регистрации появляется на командной панели нужных форм — в меню заполнения или печати. Конфигурацию при этом не меняют вообще.
Вариант удобен для одной-двух кнопок вроде «Заполнить по Excel». Для сложной логики с новыми реквизитами всё равно нужно расширение.
Кнопки, которые меняются на лету
Статичная панель подходит не всегда. Типичные задачи — скрыть кнопку для части пользователей, показать её только при определённом статусе документа, переключать режим кнопкой-флажком.
Видимостью и доступностью управляют через элемент кнопки, а не через команду:
&НаСервере
Процедура НастроитьКнопки()
Элементы.КнопкаВыгрузитьВФайл.Видимость = РольДоступна("ПолныеПрава");
Элементы.КнопкаВыгрузитьВФайл.Доступность = Объект.Проведен;
КонецПроцедуры
Вызывайте такую процедуру в ПриСозданииНаСервере и ПослеЗаписиНаСервере, чтобы состояние обновлялось после проведения.
Ещё несколько приёмов:
- 🔘 Кнопка-переключатель. Свойство кнопки
Пометка= Истина показывает её нажатой. В обработчике команды меняйте значение и одновременно режим формы. - 📂 Подменю. Группа вида «Подменю» внутри панели собирает редкие команды под одну кнопку со стрелкой.
- ⚙️ Функциональные опции. Если кнопка нужна только при включённой настройке учёта, укажите опцию в свойстве команды — платформа скроет кнопку сама, кода не нужно.
- 🔐 Права. Стандартные и глобальные команды объекта платформа скрывает автоматически, если у роли нет права на действие.
Менять Видимость можно и на клиенте, без вызова сервера. Но если решение зависит от данных базы, проверьте условие один раз на сервере и сохраните результат в реквизит формы.
Как сделать панель удобной для пользователей
Перегруженная панель раздражает не меньше, чем пустая. Несколько правил из практики.
- 🎯 Две-три главные кнопки видны всегда. Всё остальное — в «Ещё» через
ТолькоВоВсехДействияхили в подменю. - 🖼 Иконки только для частых действий. Десяток иконок без подписей пользователь не расшифрует.
- ⌨️ Горячие клавиши для массовых операций. Бухгалтер, который заполняет 50 документов в день, оценит Ctrl+Shift+F больше, чем красивую кнопку.
- 🟢 Кнопка по умолчанию. Свойство
КнопкаПоУмолчаниювыделяет кнопку и срабатывает по Ctrl+Enter. - 👥 Пользовательская настройка. Через «Ещё» → «Изменить форму» пользователь сам скрывает и переставляет кнопки. Если у кого-то панель выглядит иначе, чем у остальных, сначала сбросьте его настройки формы — в том же окне есть «Стандартные настройки».
Перед сдачей формы пройдитесь по списку:
Почему кнопка не появилась: разбор частых случаев
Ещё одна ловушка — обработчик создан на сервере вместо клиента. Команда формы вызывает процедуру с директивой &НаКлиенте; если обработчик помечен &НаСервере, вынесите серверную часть в отдельную процедуру и вызывайте её из клиентской, как в шаблоне способа 1.
Отдельный случай — дублирование стандартных команд. Если вы создали дополнительную панель и не отключили Автозаполнение, на форме окажутся две «Записать и закрыть». Снимите флажок в свойствах новой панели.
Частые вопросы
Можно ли добавить командную панель на форму списка?
Как убрать стандартную кнопку, например «Создать»?
Автозаполнение у панели и перенесите нужные команды вручную либо установите Видимость = Ложь у элемента кнопки. В расширении это делается через заимствованную форму.