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

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

Как добавить кнопку в 1С:Предприятие

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

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

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

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

Что нужно подготовить перед добавлением кнопки

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

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

Создаём команду формы — основу будущей кнопки

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

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

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

Размещаем кнопку на форме

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

Если кнопка нужна внутри табличной части или рядом с конкретным полем, перетащите команду в соответствующую группу. Порядок элементов в дереве определяет порядок отображения на форме: чем выше кнопка в дереве, тем левее или выше она появится.

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

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

Кнопка в командной панели против кнопки в группе

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

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

Пишем обработчик нажатия

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

Типовой шаблон обработчика выглядит так: сначала проверка условий (заполненность реквизитов, записан ли объект), затем выполнение действия, затем уведомление пользователя о результате. Если действие требует обращения к базе данных, вызывайте из клиентского обработчика серверную процедуру.

bsl
&НаКлиенте
Процедура ПечатьАкта(Команда)
	Если Объект.Ссылка.Пустая() Тогда
		ПоказатьПредупреждение(, "Сначала запишите документ");
		Возврат;
	КонецЕсли;
	СформироватьАктНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьАктНаСервере()
	// обращение к данным и формирование печатной формы
КонецПроцедуры

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

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

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

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

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

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

Правка конфигурации

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кнопка видна в ожидаемом месте формы, заголовок соответствует заданному

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

Кнопки нет — проверьте видимость, права и функциональные опции

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

Выполняется обработчик, результат соответствует логике

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

Ошибка при нажатии — смотрите текст ошибки и проверяйте контекст обработчика

Открытие формы
Норма

Форма открывается без сообщений об ошибках

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

Ошибка открытия — обычно признак кнопки без корректной команды

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

Итог

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

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

Часто задаваемые вопросы

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

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

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

Чаще всего причина в свойстве «Доступность» кнопки или в том, что команда связана с таблицей формы, у которой нет активной строки. Также проверьте права пользователя на команду и условия видимости, заданные функциональными опциями.

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

В дереве элементов формы найдите таблицу, разверните её и перетащите команду в подчинённую командную панель таблицы. Обработчик сможет обращаться к текущей строке табличной части через свойство ТекущиеДанные элемента таблицы.

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

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

Можно ли сделать кнопку с выпадающим списком действий?

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

Как назначить кнопке горячие клавиши?

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