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