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