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