К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить кнопку на форму в 1С

Как добавить кнопку на форму в 1С: работа в конфигураторе, создание команды, обработчик нажатия, программное добавление кнопки и типичные ошибки новичков.

Добавление кнопки на форму — одна из первых задач, с которой сталкивается начинающий разработчик 1С. Кнопка нужна для запуска обработки, вызова печатной формы, открытия другого объекта или выполнения любого произвольного кода. В управляемых формах (режим «Такси») кнопка всегда связана с командой: нельзя просто «положить кнопку» без назначения ей действия.

Существует два принципиально разных подхода: добавить кнопку в конфигураторе при разработке формы либо создать её программно в момент выполнения. Первый способ предпочтителен для постоянной функциональности, второй — когда набор кнопок зависит от условий: роли пользователя, статуса документа, заполненности реквизитов.

Ниже разобраны оба способа, работа с командной панелью, обработчики нажатия, а также ошибки, из-за которых кнопка не отображается или не срабатывает.

Где добавляется кнопка: конфигуратор и структура формы

Форма объекта (документа, справочника, обработки) редактируется в конфигураторе: откройте нужный объект в дереве конфигурации, перейдите на вкладку «Формы» и откройте основную форму. Окно редактора формы состоит из нескольких областей: дерево элементов формы (слева вверху), список реквизитов, список команд и модуль формы.

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

Если форма объекта ещё не создана, платформа использует автоматически сгенерированную форму. Чтобы добавить свою кнопку, сначала создайте форму явно: в свойствах объекта нажмите кнопку открытия у поля «Форма объекта» и подтвердите создание конструктором.

Добавление кнопки через конфигуратор: пошагово

Стандартный путь — создать команду и вывести её кнопкой на форму. Действия выполняются в редакторе формы и занимают пару минут.

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

Имя команды задавайте осмысленное, без пробелов — оно используется в коде, например ЗаполнитьПоОстаткам. Заголовок — это текст, который увидит пользователь на кнопке. При необходимости задайте картинку: она отображается в командной панели вместе с текстом или вместо него, если снять свойство «Отображение».

Обратите внимание на свойство команды «Изменяет сохраняемые данные». Если установить его в «Истина», платформа будет считать форму модифицированной после выполнения команды и предложит сохранить объект при закрытии. Для команд, которые только открывают отчёт или другую форму, оставляйте значение «Ложь».

Обработчик нажатия: клиент и сервер

Конструктор обработчика предлагает варианты: «На клиенте», «На сервере», «На клиенте и на сервере». Простые действия — открыть форму, показать предупреждение, задать вопрос — выполняются на клиенте. Обращение к базе данных (заполнение табличной части, изменение реквизитов) требует серверного вызова.

1c
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
	ЗаполнитьПоОстаткамНаСервере();
КонецПроцедуры

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

Шаблон «клиентская обёртка + серверная процедура» — стандартная практика: клиентская процедура получает команду, серверная выполняет работу с данными. Не помещайте запросы и обращения к БД в клиентский контекст — компиляция модуля завершится ошибкой.

Размещение кнопки: командная панель, группы и подменю

Куда перетащить команду, зависит от назначения кнопки. Основные действия с объектом (запись, проведение, ключевые операции) логично размещать в командной панели формы. Вспомогательные и редко используемые действия принято убирать в подменю «Ещё», чтобы не перегружать интерфейс.

Чтобы кнопка попала в «Ещё», перетащите команду в соответствующее подменю внутри командной панели в дереве элементов. Если подменю «Ещё» не отображается, добавьте в командную панель группу вида «Подменю» и перенесите команды туда — в режиме предприятия она отобразится как выпадающий список.

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

Программное добавление кнопки

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

1c
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	НоваяКоманда = Команды.Добавить("СоздатьРеализацию");
	НоваяКоманда.Действие = "Подключаемый_СоздатьРеализацию";
	НоваяКоманда.Заголовок = "Создать реализацию";
	
	НоваяКнопка = Элементы.Добавить("КнопкаСоздатьРеализацию", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
	НоваяКнопка.ИмяКоманды = "СоздатьРеализацию";
КонецПроцедуры

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

Родительский элемент (третий параметр Элементы.Добавить) определяет, где появится кнопка. Если передать командную панель — кнопка попадёт в неё, если группу — внутрь группы. Убедитесь, что родительский элемент существует на форме, иначе получите ошибку обращения к несуществующему элементу.

Проверка результата и типичные ошибки

После добавления кнопки обновите конфигурацию базы данных (клавиша F7 в конфигураторе) — без этого изменения не попадут в режим предприятия. Затем откройте форму и проверьте три вещи: кнопка отображается в ожидаемом месте, нажатие запускает обработчик, результат обработчика корректен.

Контрольные точки

Как проверить результат

Видимость кнопки
Норма

Кнопка есть в командной панели или заданной группе

Тревожный признак

Кнопки нет — команда не перетащена в дерево элементов или снято свойство «Видимость»

Срабатывание
Норма

При нажатии выполняется код обработчика

Тревожный признак

Ошибка «процедура не обнаружена» — имя действия не совпадает с именем процедуры

Доступность
Норма

Кнопка активна для нужных пользователей

Тревожный признак

Кнопка серая — у команды настроены роли или свойство «Доступность»

Типичные ошибки
01
Кнопку добавили в дерево элементов, но привязали к несуществующей команде — форма не открывается с ошибкой
02
Серверный код (запрос к БД) написали в клиентском обработчике — ошибка компиляции модуля
03
Забыли обновить конфигурацию БД и ищут кнопку в старой версии формы
04
Программно добавляют кнопку не в ПриСозданииНаСервере, а в клиентском обработчике — элементы формы недоступны для добавления на клиенте
05
Изменили типовую форму, не включив возможность изменения, — доработка теряется при обновлении конфигурации

Отдельный случай — типовые конфигурации на поддержке. Прямая правка формы типового объекта затруднит обновление. Правильные альтернативы: механизм расширений конфигурации (кнопка добавляется в расширении, типовая форма не меняется) или подсистема дополнительных отчетов и обработок (БСП), которая сама выводит кнопки внешних обработок на формы.

Когда использовать расширение вместо изменения конфигурации

Сравнение вариантов

Изменение формы в конфигураторе

Подходит для собственных конфигураций и объектов. Для типовых объектов усложняет обновление

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

Рекомендуется для типовых конфигураций: кнопка и обработчик живут в расширении, обновление релизов не затрагивается. Ограничение — нельзя менять некоторые элементы заимствованных форм

Дополнительные обработки (БСП)

Подходит, когда кнопка просто запускает обработку или печать. Не требует доработки кода конфигурации, но расположение кнопки фиксировано подсистемой

Расширение создаётся через меню «Конфигурация → Расширения конфигурации». В расширение добавляется заимствованная форма объекта, после чего на неё можно добавить свою команду и кнопку тем же способом, что и в обычной форме. Обработчики пишутся в модуле формы расширения с использованием аннотаций &После, &Вместо или собственных процедур.

FAQ: частые вопросы о кнопках на форме 1С

Почему кнопка появилась в конфигураторе, но не видна в режиме предприятия?

Чаще всего не обновлена конфигурация базы данных (нужно нажать F7). Также проверьте свойства «Видимость» и «Доступность» кнопки и команды, права пользователя на команду и то, что открывается именно та форма, которую вы редактировали, — у объекта может быть несколько форм.

Как сделать кнопку с картинкой без текста?

В свойствах команды задайте картинку, а у кнопки в дереве элементов установите свойство «Отображение» в значение «Картинка». Для командной панели также есть свойство отображения кнопок у самой панели — оно влияет на все кнопки сразу.

Можно ли добавить кнопку на форму списка?

Да, механизм тот же: откройте форму списка объекта, создайте команду и перетащите её в командную панель. В обработчике текущая выделенная строка списка доступна через Элементы.Список.ТекущиеДанные или ТекущаяСтрока.

Как запустить внешнюю обработку по кнопке?

В клиентском обработчике используйте НачатьЗапускВнешнейОбработки или откройте форму обработки через ОткрытьФорму("ВнешняяОбработка.Имя.Форма"). Если конфигурация содержит БСП, удобнее зарегистрировать обработку в справочнике дополнительных отчетов и обработок — кнопка появится автоматически.

Почему программно созданная кнопка выдаёт ошибку при нажатии?

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

Как скрыть кнопку для части пользователей?

Простой способ — в ПриСозданииНаСервере проверить роль (РольДоступна("ПолныеПрава") или пользовательскую роль) и установить Элементы.ИмяКнопки.Видимость = Ложь. Более надёжный вариант — ограничить права на саму команду, чтобы действие было недоступно не только через кнопку, но и программно.

Итог

Что важно запомнить

Кнопка на форме 1С всегда привязана к команде. Создайте команду, перетащите её в дерево элементов и напишите обработчик — или добавьте команду и кнопку программно в ПриСозданииНаСервере. Для типовых конфигураций используйте расширение, а перед изменением рабочей базы делайте копию.