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

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

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

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

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

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

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

Где создаются кнопки: форма, командный интерфейс и панель действий

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

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

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

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

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

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

Обработчик команды в модуле формы выглядит так:

&НаКлиенте

Процедура ПечатьАкта(Команда)

// Действия при нажатии кнопки

Сообщить("Кнопка нажата");

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

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

Привязка кнопки к стандартной команде объекта

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

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

&НаКлиенте

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

Если Записать() Тогда

ОтправитьПоПочте();

КонецЕсли;

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

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

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

&НаСервере

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

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

НоваяКоманда.Действие = "Подключаемый_Согласовать";

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

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

НоваяКнопка.ИмяКоманды = "СогласоватьДокумент";

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

&НаКлиенте

Процедура Подключаемый_Согласовать(Команда)

Сообщить("Документ отправлен на согласование");

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

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

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

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

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

Сравнение вариантов

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

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

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

Подходит, когда набор кнопок зависит от данных или прав пользователя. Гибко, но сложнее отлаживать и нельзя менять после открытия формы.

Стандартные команды

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

Настройка внешнего вида и поведения кнопки

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

Для управления доступностью в зависимости от состояния объекта используйте код в обработчиках формы. Например, кнопку согласования разумно отключать, пока документ не записан:

&НаКлиенте

Процедура ПриОткрытии(Отказ)

Элементы.КнопкаСогласовать.Доступность = Не Объект.Ссылка.Пустая();

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

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

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

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

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

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

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

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

Кнопка на форме
Норма

Видна в ожидаемом месте, заголовок читается

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

Кнопки нет или она попала в меню «Ещё»

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

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

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

Ошибка «процедура не определена» или тишина без реакции

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

Изменения сохраняются, объект перечитывается корректно

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

Ошибка вызова сервера с клиента или потеря данных формы

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

Как добавить кнопку на форму списка, а не форму элемента?

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

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

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

Почему кнопка видна, но неактивна (серая)?

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

Как изменить кнопку в типовой конфигурации, не нарушая обновление?

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

Чем кнопка отличается от гиперссылки на форме?

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

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

В клиентском обработчике команды вызовите процедуру модуля формы с директивой &НаСервере. Учтите ограничение: в серверную процедуру нельзя передать и вернуть некоторые клиентские типы, а контекст формы на сервере доступен только в директиве &НаСервере (без «Вместо» и «КонтекстСервера» нюансов в простых случаях).

Итог

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

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