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