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

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

Как добавить кнопку на форму в 1С 8.3

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

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

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

Где создаётся кнопка: команда, обработчик, элемент формы

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

Команды бывают трёх видов. Стандартные команды объекта (Записать, Провести, Печать) платформа добавляет автоматически. Команды формы создаёт разработчик в редакторе формы. Глобальные команды и команды прикладных объектов доступны через соответствующие вкладки редактора. Для прикладной задачи «добавить свою кнопку» почти всегда используется команда формы.

Добавление кнопки в конфигураторе: пошаговый порядок

Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку) и откройте его основную форму двойным щелчком. Редактор формы разделён на области: слева вверху — дерево элементов, справа — палитра свойств, внизу вкладки «Элементы», «Реквизиты», «Команды», «Параметры», «Командный интерфейс».

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

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

Минимальный обработчик команды выглядит так:

&НаКлиенте

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

ЗаполнитьПоОстаткамНаСервере();

Элементы.Товары.Обновить();

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

&НаСервере

Процедура ЗаполнитьПоОстаткамНаСервере()

// Запрос остатков и заполнение табличной части

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

Размещение кнопки: командная панель, группа, подменю «Ещё»

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

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

Программное добавление кнопки из кода

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

&НаСервере

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

НоваяКоманда = Команды.Добавить("КомандаПроверить");

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

НоваяКоманда.Заголовок = "Проверить";

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

НоваяКнопка.ИмяКоманды = "КомандаПроверить";

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

&НаКлиенте

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

ПоказатьПредупреждение(, "Проверка выполнена");

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

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

Добавление кнопки в типовую конфигурацию без снятия с поддержки

Прямое изменение формы типового документа требует включить возможность изменения и частично снять объект с поддержки. Это усложняет будущие обновления: при каждом обновлении конфигурации изменённую форму придётся сравнивать и объединять вручную. Безопасная альтернатива — расширение конфигурации.

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

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

Изменение формы в конфигураторе

Подходит для самописных конфигураций. Для типовых требует снятия с поддержки и усложняет обновления.

Расширение конфигурации

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

Дополнительные обработки (БСП)

Кнопка появляется в подменю «Дополнительные обработки» формы без доработок вообще. Подходит для печати и заполнения, но расположение кнопки не настраивается.

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

Гибкий вариант, когда кнопка нужна по условию. Требует аккуратности: код выполняется при каждом открытии формы.

Проверка результата и типичные ошибки

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

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

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

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

Кнопка видна в ожидаемом месте формы с заданным заголовком

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

Кнопки нет ни на форме, ни в подменю «Ещё»

Нажатие
Норма

Выполняется обработчик, ошибок в журнале нет

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

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

Данные после действия
Норма

Изменения видны, признак модифицированности выставлен

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

Данные не обновились или форма закрывается без вопроса о сохранении

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

Почему кнопка есть в конфигураторе, но не видна в режиме предприятия?

Чаще всего платформа убрала её в подменю «Ещё» из-за автозаполнения командной панели — откройте «Ещё» и проверьте. Также проверьте свойство «Видимость» у кнопки и родительских групп, функциональные опции команды и не забыли ли вы обновить конфигурацию базы данных (F7).

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

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

Можно ли добавить кнопку, не открывая конфигуратор?

Да, если конфигурация построена на Библиотеке стандартных подсистем: через «Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки» можно подключить внешнюю обработку типа «Заполнение объекта» или «Создание связанных объектов». Кнопка появится в соответствующем подменю формы без доработки конфигурации.

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

Управляйте свойством «Доступность» элемента в коде, например в обработчике ПриОткрытии или ТекущаяСтрокаПриАктивизацииСтроки: Элементы.КнопкаПроверить.Доступность = Не Объект.Проведен. Менять доступность у самой команды через код нельзя — управляется именно элемент формы.

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

Стандартные команды (Записать, Провести, Перечитать) платформа создаёт автоматически на основе свойств объекта, их обработчики переопределяются в модуле формы. Команду формы разработчик создаёт вручную и полностью определяет её поведение, заголовок, картинку и сочетание клавиш.

Исчезнет ли кнопка после обновления типовой конфигурации?

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

Итог

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

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