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