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

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

Как добавить кнопку в интерфейс 1С

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

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

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

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

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

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

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

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

Добавление кнопки на форму через конфигуратор

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

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

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

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

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

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

&НаКлиенте

Процедура ПечатьАкта(Команда)

ПоказатьПредупреждение(, "Кнопка нажата");

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

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

&НаКлиенте

Процедура ЗаполнитьПоОстаткам(Команда)

ЗаполнитьПоОстаткамНаСервере();

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

&НаСервере

Процедура ЗаполнитьПоОстаткамНаСервере()

// запрос к остаткам и заполнение табличной части

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

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

bsl
&НаКлиенте
Процедура МояКоманда(Команда)
    МояКомандаНаСервере();
КонецПроцедуры

&НаСервере
Процедура МояКомандаНаСервере()
    // действия с данными
КонецПроцедуры

Добавление кнопки через расширение конфигурации

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

В дереве конфигурации найдите нужную форму, через контекстное меню выберите «Добавить в расширение». Заимствованная форма появится в расширении. Дальше логика та же: добавьте команду с префиксом (например, Расш1_ПечатьАкта), перетащите её в командную панель и создайте обработчик в модуле формы расширения.

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

Программное создание кнопки и общие команды

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

&НаСервере

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

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

Команда.Заголовок = "Сформировать";

Команда.Действие = "Подключаемый_Сформировать";

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

Кнопка.ИмяКоманды = "ДинамическаяКоманда";

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

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

Сравнение способов добавления кнопки

Изменение формы в конфигураторе

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

Расширение конфигурации

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

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

Когда кнопки появляются по условию или их состав неизвестен заранее. Гибко, но сложнее в отладке и поддержке.

Общая команда

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

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

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

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

Типичные ошибки
01
Команда создана, но не перетащена в панель — кнопки в интерфейсе нет вообще
02
Кнопка создана вручную без привязки к команде — элемент отображается серым и не нажимается
03
Обработчик объявлен без директивы &НаКлиенте/&НаСервере или в неподходящем контексте — ошибка компиляции модуля формы
04
Действие с данными написано в клиентской процедуре — ошибка вызова серверных методов с клиента
05
В расширении команда названа без префикса — конфликт имён при обновлении типовой конфигурации
06
Изменения не перенесены в базу: конфигурация сохранена, но F7 (обновление конфигурации БД) не выполнено
Контрольные точки

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

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

Кнопка отображается в нужной панели у пользователя с рабочими правами

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

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

Реакция на нажатие
Норма

Выполняется задуманное действие, данные сохраняются корректно

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

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

Поведение после обновления
Норма

После обновления типовой конфигурации кнопка из расширения на месте

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

Кнопка пропала — расширение требует актуализации к новой структуре формы

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

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

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

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

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

Как разместить кнопку в подменю «Ещё», а не на основной панели?

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

Пропадёт ли кнопка при обновлении типовой конфигурации?

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

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

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

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

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

Итог

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

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