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