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

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

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

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

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

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

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

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

Второй важный момент — режим исполнения. Обработчик команды может работать на клиенте (директива &НаКлиенте), на сервере (&НаСервере) или без контекста сервера (&НаСервереБезКонтекста). От этого зависит, какие данные доступны внутри обработчика и как быстро он выполняется.

Создание команды формы

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

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

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

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

Размещение кнопки на форме

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

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

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

Написание обработчика нажатия

Простейший обработчик на клиенте выглядит так:

&НаКлиенте

Процедура ЗаполнитьПоДаннымКонтрагента(Команда)

Если Объект.Контрагент.Пустая() Тогда

ПоказатьПредупреждение(, "Сначала выберите контрагента");

Возврат;

КонецЕсли;

ЗаполнитьНаСервере();

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

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

bsl
&НаСервере
Процедура ЗаполнитьНаСервере()
    Запрос = Новый Запрос("ВЫБРАТЬ Адрес ИЗ Справочник.Контрагенты ГДЕ Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Объект.Контрагент);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Объект.АдресДоставки = Выборка.Адрес;
    КонецЕсли;
КонецПроцедуры

Обратите внимание: в серверной процедуре без контекста (&НаСервереБезКонтекста) недоступны данные формы напрямую. Если нужно читать или менять данные объекта, используйте либо контекстный серверный вызов, либо передавайте ссылку параметром и работайте с объектом через менеджер.

Кнопка в типовой конфигурации через расширение

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

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

Маршрут решения

Как выбрать способ доработки

Конфигурация типовая и стоит на поддержкеИспользуйте расширение конфигурации
Это собственная обработка или отчётДобавляйте кнопку напрямую в форму обработки
Конфигурация уже снята с поддержки и активно дорабатываетсяДопустима прямая правка формы в конфигураторе
Нужна кнопка во многих формах сразуРассмотрите общую команду конфигурации вместо команды формы

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

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

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

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

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

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

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

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

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

Выполняется обработчик, изменения сохраняются

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

Ничего не происходит — проверьте связь кнопки с командой и имя процедуры

Ошибочные данные
Норма

Показывается предупреждение, форма остаётся рабочей

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

Ошибка платформы или закрытие формы — добавьте проверки в обработчик

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

Частые вопросы

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

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

Как сделать кнопку с выпадающим списком действий?

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

Почему кнопка неактивна, хотя видимость включена?

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

Как сделать кнопку основной, чтобы она срабатывала по Enter?

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

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

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

Чем команда формы отличается от общей команды?

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

Итог

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

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