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

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

Как сделать кнопки в 1С: пошаговое руководство

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

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

Способ добавления зависит от типа формы. В управляемых формах (платформа 8.3, современные конфигурации) кнопки создаются через команды формы или команды объекта. В обычных формах (старые конфигурации на 8.2 и ранее) кнопка добавляется как элемент диалога с событием «Нажатие». Ниже разобраны оба подхода, а также программное создание кнопок «на лету».

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

Где создавать кнопку: форма объекта, общая форма или расширение

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

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

Для разовых задач и тестирования удобна внешняя обработка: создайте новую внешнюю обработку (Файл → Новый → Внешняя обработка), добавьте ей форму и тренируйтесь на ней. Это полностью безопасно для рабочей базы.

Создание кнопки на управляемой форме через конфигуратор

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

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

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

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

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

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

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

&НаКлиенте

Процедура ЗаполнитьПоОстаткам(Команда)

ЗаполнитьПоОстаткамНаСервере();

Сообщить("Табличная часть заполнена");

КонецПроцедуры

&НаСервере

Процедура ЗаполнитьПоОстаткамНаСервере()

// здесь запрос к остаткам и заполнение табличной части

КонецПроцедуры

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

bsl
&НаКлиенте
Процедура Приветствие(Команда)
    ПоказатьПредупреждение(, "Кнопка работает!");
КонецПроцедуры

Кнопки в командной панели и важные команды

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

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

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

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

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

НоваяКоманда = Команды.Добавить("КомандаСклад1");

НоваяКоманда.Заголовок = "Склад 1";

НоваяКоманда.Действие = "НажатиеДинамическойКнопки";

НоваяКнопка = Элементы.Добавить("КнопкаСклад1", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);

НоваяКнопка.ИмяКоманды = "КомандаСклад1";

КонецПроцедуры

&НаКлиенте

Процедура НажатиеДинамическойКнопки(Команда)

Сообщить("Нажата: " + Команда.Имя);

КонецПроцедуры

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

Типичные ошибки
01
Обработчик назван иначе, чем команда — кнопка нажимается без реакции
02
Код работы с данными написан в клиентской процедуре — ошибка вызова серверных методов
03
Динамические кнопки создаются на клиенте — платформа не даёт изменять состав формы вне серверных вызовов
04
Команда создана, но не перетащена в дерево элементов — кнопки на форме просто нет
05
Изменения внесены, но конфигурация базы данных не обновлена (F7) — в режиме предприятия видна старая форма

Кнопки в обычных формах

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

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

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

Сравнение подходов

Команда формы в конфигураторе

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

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

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

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

Единственный безопасный способ для типовых конфигураций на поддержке; требует проверки совместимости после обновлений

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

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

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

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

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

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

Видимость кнопки на форме
Норма

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

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

Кнопки нет — команда не перетащена в элементы или отключена видимость

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

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

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

Ничего не происходит — обработчик не связан с командой или содержит ошибку компиляции

Работа под разными ролями
Норма

Действие выполняется у всех целевых пользователей

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

Ошибка прав доступа у части пользователей

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

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

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

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

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

Как сделать, чтобы кнопка нажималась сочетанием клавиш?

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

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

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

Можно ли одной кнопкой вызывать стандартную команду, например «Провести»?

Да. В списке команд формы перейдите на вкладку «Глобальные команды» или используйте стандартные команды объекта и перетащите нужную (например, «ПровестиИЗакрыть») в дерево элементов — платформа сама создаст кнопку со стандартным поведением.

Почему динамически созданная кнопка выдаёт ошибку «Процедура не обнаружена»?

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

Итог

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

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