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