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