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