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

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

Как создать кнопку в 1С: подробная инструкция

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

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

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

Где создаются кнопки: управляемые и обычные формы

В современных конфигурациях (УТ 11, ERP, БП 3.0) используются управляемые формы. В них кнопка не рисуется напрямую: вы описываете команду и размещаете её в дереве элементов, а платформа сама решает, как её отобразить — кнопкой в командной панели, пунктом меню «Ещё» или гиперссылкой. Обычные формы (устаревший режим, встречается в старых конфигурациях на 8.2) позволяют размещать кнопку мышью в произвольной точке формы.

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

Создание кнопки через конфигуратор: пошагово

Откройте конфигуратор, найдите нужный объект (документ, справочник или обработку) и дважды щёлкните по его форме. Если формы нет — создайте её: правой кнопкой по объекту → «Формы» → «Добавить», выберите тип «Форма объекта» или «Форма списка».

Основной порядок действий такой:

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

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

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

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

Минимальный обработчик, который заполняет табличную часть документа на сервере, выглядит так:

&НаКлиенте

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

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

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

&НаСервере

Процедура ЗаполнитьТоварыНаСервере()

Объект.Товары.Очистить();

// здесь запрос и заполнение табличной части

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

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

1c
&НаКлиенте
Процедура ПоказатьПредупреждениеПользователю(Команда)
    ПоказатьПредупреждение(, НСтр("ru = 'Операция выполнена'"));
КонецПроцедуры

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

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

&НаСервере

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

Команда = Команды.Добавить("МояКнопка");

Команда.Действие = "МояКнопкаНажатие";

Команда.Заголовок = "Моё действие";

Кнопка = Элементы.Добавить("МояКнопка", Тип("КнопкаФормы"),

Элементы.КоманднаяПанель);

Кнопка.ИмяКоманды = "МояКнопка";

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

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

Настройка внешнего вида и поведения кнопки

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

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

Как проверить, что кнопка работает правильно

После сохранения конфигурации обновите базу (F7 или «Конфигурация» → «Обновить конфигурацию базы данных») и запустите режим 1С:Предприятие. Откройте форму и проверьте не только сам факт нажатия, но и поведение в разных сценариях: на новом незаписанном объекте, на проведённом документе, у пользователя с ограниченными правами.

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

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

Видимость кнопки
Норма

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

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

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

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

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

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

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

Права
Норма

У пользователя без нужных прав кнопка либо недоступна, либо корректно сообщает об ошибке

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

Платформа падает с ошибкой доступа без обработки

Типичные ошибки при создании кнопок

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

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

Итог

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

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

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

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

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

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

Установите свойство Доступность элемента в коде: Элементы.МояКнопка.Доступность = Объект.Проведен. Для управляемых форм также можно использовать функциональные опции и условное оформление, если условие типовое.

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

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

Почему кнопка есть, но не нажимается (серая)?

Проверьте три причины: у команды не задано действие, элемент формы не связан с командой через свойство ИмяКоманды, либо доступность управляется правами или функциональной опцией, которая отключена. Также кнопка недоступна, если форма открыта в режиме только для просмотра.

Как вывести кнопку в подменю «Ещё»?

В дереве элементов формы перетащите команду в группу «Ещё» (обычно находится внутри командной панели формы). Если такой группы нет, добавьте группу с видом «Подменю» и поместите команду туда.

Как добавить кнопку на форму списка?

Откройте форму списка объекта в конфигураторе и добавьте команду так же, как для формы объекта. Учтите, что в форме списка нет объекта для редактирования — в обработчике работайте с выделенными строками через Элементы.Список.ВыделенныеСтроки.