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

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

Как создать кнопку в форме в 1С

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

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

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

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

Что нужно подготовить перед добавлением кнопки

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

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

Открываем форму объекта в конфигураторе

Запустите конфигуратор и откройте нужную информационную базу. В дереве конфигурации найдите объект, к форме которого нужно добавить кнопку: справочник, документ, обработку или отчёт. Раскройте ветку объекта, затем ветку «Формы».

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

Создаём команду формы — основу кнопки

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

У новой команды задайте свойства. Ключевые: «Имя» — программный идентификатор без пробелов, например ЗаполнитьПоУмолчанию; «Заголовок» — текст, который увидит пользователь на кнопке; «Картинка» — значок, если кнопка будет в командной панели. Свойство «Действие» пока оставьте пустым, обработчик создадим на следующем шаге.

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

Назначаем обработчик команды

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

Выбирайте по логике действия. Если кнопка открывает другую форму, показывает вопрос или предупреждение — достаточно клиентского обработчика. Если нужно прочитать или записать данные, выполнить запрос — потребуется серверный вызов. Типичный шаблон: клиентский обработчик выполняет подготовку и вызывает серверную процедуру.

Пример минимального обработчика:

&НаКлиенте

Процедура ЗаполнитьПоУмолчанию(Команда)

ЗаполнитьПоУмолчаниюНаСервере();

ПоказатьОповещениеПользователя("Данные заполнены");

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

&НаСервере

Процедура ЗаполнитьПоУмолчаниюНаСервере()

Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;

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

Имя процедуры обработчика должно совпадать с именем команды — платформа создаёт его автоматически, и переименовывать его вручную не следует, иначе связь разорвётся.

Выводим кнопку на форму

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

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

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

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

Альтернатива: программное создание кнопки

Иногда кнопку нужно создать динамически — например, по условию или при открытии формы из расширения. В этом случае команда и кнопка создаются кодом в обработчике ПриСозданииНаСервере:

&НаСервере

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

НоваяКоманда = Команды.Добавить("ПечатьСлужебная");

НоваяКоманда.Действие = "Подключаемый_ПечатьСлужебная";

НоваяКоманда.Заголовок = "Служебная печать";

НоваяКнопка = Элементы.Добавить("КнопкаПечатьСлужебная",

Тип("КнопкаФормы"), Элементы.КоманднаяПанель);

НоваяКнопка.ИмяКоманды = "ПечатьСлужебная";

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

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

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

Кнопка через редактор формы

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

Программное создание

Подходит для расширений и условного отображения. Гибче, но сложнее отлаживать, обработчик всё равно нужен в модуле.

Стандартные команды объекта

Запись, проведение, печать уже есть у объекта — не создавайте дубли, добавьте стандартную команду на форму через её свойства.

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

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

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

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

Отображение кнопки
Норма

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

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

Кнопки нет — команда не перетащена в элементы или группа скрыта

Нажатие
Норма

Выполняется код обработчика, нет сообщений об ошибке

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

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

Работа с данными
Норма

Изменения сохраняются и видны после перезаписи объекта

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

Данные меняются на форме, но не записываются — забыли вызвать Записать()

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

Часто задаваемые вопросы

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

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

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

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

Почему кнопка неактивна (серая) на форме?

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

Как добавить кнопку, не снимая типовую конфигурацию с поддержки?

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

Можно ли одну кнопку показывать только определённым пользователям?

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

Чем кнопка отличается от гиперссылки на форме?

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

Итог

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

Кнопка в управляемой форме 1С всегда строится по цепочке: команда формы → обработчик в модуле → элемент «Кнопка» в дереве элементов. Для типовых конфигураций используйте расширение, а после внедрения проверяйте видимость, работу обработчика и сохранение данных.