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

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

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

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

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

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

Все действия выполняются в конфигураторе и требуют права на изменение конфигурации. Перед любыми доработками рабочей базы сделайте выгрузку информационной базы (файл .dt) или хотя бы сохраните конфигурацию в файл .cf — это единственный способ быстро откатить изменения при ошибке.

Где именно нужна кнопка: выбор сценария

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

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

Маршрут решения

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

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

Добавление кнопки на форму объекта

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

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

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

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

Написание обработчика команды

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

Выбирайте директиву осознанно. Директива &НаКлиенте подходит для действий с интерфейсом: открыть форму, показать предупреждение, задать вопрос пользователю. Директива &НаСервере нужна для обращения к данным: запросы, запись объектов, пересчёт. Типовой приём — клиентская процедура-обработчик, которая вызывает серверную процедуру для работы с данными, а затем обновляет интерфейс.

bsl
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
	ЗаполнитьПоОстаткамНаСервере();
	Элементы.Товары.Обновить();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
	// запрос к остаткам и заполнение табличной части
КонецПроцедуры

Обратите внимание: в серверной процедуре без контекста (&НаСервереБезКонтекста) недоступны данные формы напрямую — объект нужно получать через РеквизитФормыВЗначение("Объект"). Для большинства кнопок на форме документа удобнее контекстный серверный вызов &НаСервере, где реквизиты формы доступны напрямую.

Кнопка в командной панели списка и команде объекта

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

Альтернатива — команда самого объекта метаданных. Откройте документ или справочник в дереве конфигурации, перейдите на вкладку «Команды» (или «Команды объекта» в свойствах) и добавьте команду там. Такая команда автоматически появляется в командной панели формы списка и формы элемента, а её обработчик пишется в модуле менеджера объекта с параметром — ссылкой на объект или массивом ссылок.

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

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

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

В расширенной форме добавляйте команду и кнопку точно так же, как описано выше. Обработчики пишутся в модуле формы расширения с директивами &После("ИмяПроцедуры"), &Вместо("ИмяПроцедуры") или как отдельные процедуры для новых команд. Новые команды расширения не конфликтуют с типовыми, если имена уникальны — используйте префикс расширения в имени команды.

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

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

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

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

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

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

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

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

Реакция на нажатие
Норма

Выполняется код обработчика, форма обновляется

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

Ничего не происходит — не назначен обработчик в свойстве «Действие» команды

Работа с данными
Норма

Данные записываются и читаются корректно

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

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

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

Кнопка работает у целевых пользователей

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

У пользователя нет права на объект — кнопка падает с ошибкой доступа

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

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

Итог

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

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

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

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

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

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

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

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

У табличной части есть своя командная панель. Создайте команду формы и перетащите её в элемент «КоманднаяПанель» внутри группы табличной части. В обработчике текущая строка доступна через Элементы.ИмяТаблицы.ТекущиеДанные.

Чем команда формы отличается от глобальной команды?

Команда формы существует только внутри конкретной формы и её обработчик пишется в модуле этой формы. Глобальная (общая) команда доступна из интерфейса всей прикладной решения и её обработчик размещается в общем модуле.

Как сделать кнопку с картинкой?

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

Можно ли временно скрыть кнопку, не удаляя её?

Да. Установите у элемента формы свойство «Видимость» в значение «Ложь» или управляйте видимостью программно: Элементы.ИмяКнопки.Видимость = Ложь. Это удобно, когда кнопка должна появляться только при определённых условиях, например при конкретном статусе документа.