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

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

Как добавить кнопки в 1С: пошаговое руководство

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

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

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

Способы добавления кнопки: что выбрать

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

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

Сравнение вариантов

Изменение конфигурации

Полный доступ к форме, но объект снимается с поддержки — обновления станут сложнее. Подходит для собственных (нетиповых) конфигураций.

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

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

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

Кнопка создаётся кодом в ПриСозданииНаСервере. Гибко по условиям, но сложнее сопровождать и отлаживать.

Подготовка: что проверить перед изменениями

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

Перед любыми изменениями сделайте выгрузку информационной базы (Файл → Выгрузить информационную базу) или хотя бы сохраните конфигурацию в файл (Конфигурация → Сохранить конфигурацию в файл). Это займёт несколько минут, но позволит откатиться, если форма перестанет открываться.

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

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

Шаг 1. Создайте команду формы

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

Шаг 2. Разместите кнопку на форме

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

Шаг 3. Напишите обработчик

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

&НаКлиенте

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

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

ОповеститьОбИзменении(Объект.Ссылка);

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

&НаСервере

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

Объект.Статус = Перечисления.СтатусыДокумента.НаСогласовании;

Записать();

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

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

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

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

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

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

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

&НаСервере

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

Если Объект.Проведен Тогда

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

Команда.Действие = "ПечатьАкта";

Команда.Заголовок = "Печать акта";

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

Кнопка.ИмяКоманды = "ПечатьАкта";

КонецЕсли;

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

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

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

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

В свойствах кнопки управляйте её представлением: свойство «Отображение» определяет, показывать ли картинку, надпись или оба варианта; «Картинка» задаёт значок из библиотеки картинок платформы; «Важность» (Обычное / Важное / Внимание) влияет на выделение кнопки в интерфейсе. Для командной панели доступно свойство «ТолькоВоВсехДействиях» — кнопка уйдёт в подменю «Ещё», что полезно для редких операций.

Управлять доступностью удобно через условие в обработчике ПриОкончанииРедактирования или через свойство «Доступность», устанавливаемое программно. Например, кнопку «Провести и закрыть» для нового документа имеет смысл блокировать, пока не заполнены обязательные поля.

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

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

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

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

Кнопка видна на форме
Норма

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

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

Кнопки нет — проверьте, что команда перетащена в дерево элементов и конфигурация обновлена

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

Выполняется обработчик без сообщений об ошибке

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

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

Права пользователя
Норма

Кнопка работает под ролью обычного пользователя

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

Ошибка доступа — у роли нет прав на вызываемые объекты

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

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

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

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

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

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

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

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

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

Единого переключателя нет. Варианты: добавить команду в общую форму или общий командный интерфейс, использовать общую команду конфигурации с типом параметра «ДокументОбъект», либо создать подключаемую обработку через механизм дополнительных отчетов и обработок (БСП), которая добавляет кнопки печати и заполнения без изменения форм.

Что безопаснее для типовой конфигурации: расширение или внешняя обработка?

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

Итог

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

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