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