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