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