Команды и кнопки в управляемых формах 1С: добавление без путаницы в интерфейсе

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

Коротко: команда = действие, кнопка = способ показать действие. Одна команда может отображаться и кнопкой на панели, и пунктом в «Еще/Все действия», и рядом с табличной частью.

Оглавление

Команда и кнопка: что создавать в первую очередь

Команда формы задаёт:

  • имя и заголовок (как увидит пользователь),
  • обработчик (что выполнится),
  • управляемость (видимость/доступность, контекст).

Кнопка формы обычно содержит только:

  • ИмяКоманды — ссылку на команду.

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

Создание команды и кнопки в редакторе формы (рекомендуется)

  1. Создайте команду на вкладке «Команды» управляемой формы:
  • Имя: МоеДействие
  • Заголовок: «Моё действие»
  • Действие: ВыполнитьМоеДействие
  1. Реализуйте обработчик в модуле формы:
&НаКлиенте
Процедура ВыполнитьМоеДействие(Команда)
	// UI и взаимодействие с пользователем — на клиенте
	// Тяжёлую логику лучше унести на сервер:
	ВыполнитьМоеДействиеНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьМоеДействиеНаСервере()
	// Запросы, запись объектов, расчёты — на сервере
КонецПроцедуры
  1. Добавьте кнопку (например, в командную панель формы) и укажите:
  • ИмяКоманды = "МоеДействие"

Если команда «не срабатывает», в 80% случаев проблема в несовпадении имени процедуры из свойства Действие с реальным именем обработчика в модуле формы.

Размещение команд: панель, «Еще», табличная часть

Чтобы форма выглядела предсказуемо, придерживайтесь схемы:

  • Частые действия → основная командная панель (видимые кнопки).
  • Редкие/служебные → «Еще/Все действия» (чтобы не шуметь).
  • Действия над строками табличной части → панель рядом с таблицей, а не вверху формы.

Для команд, которые зависят от выделения/текущей строки табличной части, заранее продумайте:

  • когда команда доступна (есть строки? есть выделение? документ в нужном состоянии?),
  • что делать без выделения (сообщение, автоподбор, отказ от выполнения).

Не пытайтесь «перестроить» стандартные команды любой ценой. Если платформа ограничивает порядок/вывод команд от источника, обычно проще: либо принять стандарт, либо осознанно собирать свою группу команд вручную.

Программное добавление команды и кнопки (в т.ч. в расширении)

Подходит, когда типовую форму не хочется менять, а кнопку нужно добавить точечно. Логика та же: добавили команду → добавили кнопку → связали.

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

	// 1) Команда (защита от повторного добавления)
	Если ЭтаФорма.Команды.Найти("КомандаМоя") = Неопределено Тогда
		КомандаМоя = ЭтаФорма.Команды.Добавить("КомандаМоя");
		КомандаМоя.Заголовок = "Моё действие";
		КомандаМоя.Действие  = "ВыполнитьКомандуМоя";
	КонецЕсли;

	// 2) Кнопка (родитель — нужная командная панель/группа)
	Если ЭтаФорма.Элементы.Найти("КнопкаМоя") = Неопределено Тогда
		КнопкаМоя = ЭтаФорма.Элементы.Добавить(
			"КнопкаМоя",
			Тип("КнопкаФормы"),
			ЭтаФорма.Элементы.ФормаКоманднаяПанель
		);
		КнопкаМоя.Заголовок  = "Моё действие";
		КнопкаМоя.ИмяКоманды = "КомандаМоя";
	КонецЕсли;

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

&НаКлиенте
Процедура ВыполнитьКомандуМоя(Команда)
	// Ваш сценарий
КонецПроцедуры

Программное «достраивание» интерфейса усложняет тестирование и может ломаться при изменении имен контейнеров в типовой форме. Минимизируйте привязку к конкретным именам элементов и добавляйте только при необходимости.

Какой способ выбрать

Сравнение подходов для добавления команд и кнопок

ПодходКогда использоватьПлюсыМинусы
Через редактор формыСобственная форма/доработка конфигурацииНадёжно, проще сопровождатьНужна правка формы
Команда + грамотное размещение в интерфейсеНужно «чисто» встроить действие в UXМеньше визуального шума, логично для пользователейНужно понять, где команда должна жить (панель/«Еще»/таблица)
Программно (в т.ч. расширение)Типовая форма, изменения нежелательныГибко и точечноРиски при обновлениях, больше условий и проверок

Частые ошибки

  • В Действии команды указана процедура, которой нет (или отличается регистр/символы).
  • Обработчик помечен &НаСервере, но внутри есть диалоги/взаимодействие с UI — переносите старт на &НаКлиенте.
  • Кнопка создана, но не заполнено ИмяКоманды.
  • Команда есть, но «пропала» из интерфейса из‑за условий доступности/видимости (проверяйте логику включения).
  • Команду, относящуюся к табличной части, вывели в верхнюю панель формы — пользователи не находят её «по месту».

FAQ

Можно ли одной командой управлять несколькими кнопками/пунктами меню?
Да. Команда одна, а отображений может быть несколько — в этом и смысл разделения.

Где писать бизнес‑логику: на клиенте или на сервере?
Обычно: запуск и UI — &НаКлиенте, обработка данных/запросы/запись — отдельной процедурой &НаСервере.

Как сделать команду доступной только при выполнении условий?
Делайте проверку в обработчике (и выходите с сообщением), а для удобства дополнительно отключайте команду/кнопку через доступность (в зависимости от вашей архитектуры формы).

Что лучше для табличной части: отдельная команда или обработчик событий таблицы?
Для явного пользовательского действия почти всегда лучше команда (понятная кнопка/пункт), а события таблицы оставляйте для реакций интерфейса (подсветка, заполнение реквизитов и т.п.).