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

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

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

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

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

Задача решается в конфигураторе без привлечения внешних инструментов. Потребуется доступ к конфигурации с правами на изменение, а для типовых конфигураций — снятая или частично снятая поддержка либо работа через расширение. Ниже разобраны оба сценария: добавление кнопки на форму объекта в конфигураторе и программное создание кнопки из кода.

Где именно нужна кнопка: определяем сценарий

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

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

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

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

Конфигурация собственная или уже дорабатываетсяДобавляйте кнопку прямо в форму через конфигуратор
Типовая конфигурация на полной поддержкеИспользуйте расширение конфигурации — поддержка и обновления сохранятся
Нужна кнопка для заполнения или печати без изменения формыПодключите внешнюю обработку через «Дополнительные отчеты и обработки»
Кнопка нужна временно, для отладкиСоздайте внешнюю обработку с формой и открывайте её через «Файл — Открыть»

Создаём команду формы в конфигураторе

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

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

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

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

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

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

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

В свойствах созданной кнопки можно настроить «Важность» (обычная или важная — важные выделяются визуально), доступность и видимость. Эти свойства можно менять и программно, например скрывать кнопку для пользователей без определённой роли.

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

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

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

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

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

Кнопка через расширение для типовой конфигурации

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

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

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

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

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

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

Проверка результата и отладка

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

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

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

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

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

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

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

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

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

Выполняется обработчик без сообщений об ошибках

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

Ошибка компиляции или вызова — смотрите директивы &НаКлиенте/&НаСервере

Повторное нажатие
Норма

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

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

Дублируются строки или данные — добавьте проверки в код

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

Кнопка работает под целевой ролью

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

Ошибка доступа — проверьте права на объекты, к которым обращается код

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

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

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

Как добавить картинку на кнопку?

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

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

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

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

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

Чем кнопка в управляемой форме отличается от кнопки в обычной форме?

В обычных формах (платформа 8.2, режим обычного приложения) кнопка — самостоятельный элемент с событием «Нажатие», её можно просто перетащить на форму. В управляемых формах кнопка — только отображение команды: сначала создаётся команда формы, потом она выводится элементом. Логика привязана к команде, а не к кнопке.

Можно ли добавить кнопку в форму списка?

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

Итог

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

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