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