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