Новая кнопка в панелях 1С: от настройки до кода

· 9 мин

Содержание

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

Обычный пользователь может только переставить и включить уже существующие команды. Новую кнопку с собственным действием добавляет разработчик в Конфигураторе или в расширении конфигурации. Разберём оба уровня.

Какие бывают панели и что на них можно разместить

У управляемого приложения несколько зон, и в каждую кнопки попадают по своим правилам.

ПанельЧто этоОткуда берутся кнопки
Панель разделовВерхняя полоса с разделами программыПодсистемы верхнего уровня
Панель навигацииСписок команд раздела слеваКоманды подсистемы, группа «Панель навигации»
Панель действийКоманды «Создать», «Отчёты», «Сервис»Команды подсистемы, группа «Панель действий»
Командная панель формыКнопки над содержимым формыКоманды формы и глобальные команды
Командная панель таблицыКнопки над табличной частью или спискомКоманды формы, привязанные к таблице

Если нужна кнопка внутри формы, работайте с командами формы. Если нужен пункт в разделе программы, работайте с командным интерфейсом подсистемы. Это два разных механизма, и путаница между ними — самая частая причина «кнопка есть, а на экране её нет».

Что настроит сам пользователь без программирования

Свою кнопку с кодом пользователь не создаст. Зато он может вынести на панель то, что разработчик уже предусмотрел.

Откройте главное меню (кнопка со стрелкой в левом верхнем углу), перейдите в пункт «Вид». Там находятся настройки панели разделов, панели навигации и панели действий. В каждой открывается список доступных команд: часть отмечена галочками, остальные можно добавить стрелками между левым и правым списком.

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

Новую команду таким способом не создать. Если нужного действия в списках нет, его надо программировать.

Как добавить кнопку на форму через команду формы

Это основной способ. Работаем в Конфигураторе, поэтому нужен доступ разработчика к конфигурации. Для типовых конфигураций (Бухгалтерия предприятия, ЗУП, Управление торговлей) прямая правка снимает конфигурацию с поддержки, поэтому для них делают расширение.

Порядок действий:

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

Процедура в модуле формы выглядит так:

&НаКлиенте
Процедура ПересчитатьИтоги(Команда)
	ПересчитатьИтогиНаСервере();
	Оповестить("ИтогиОбновлены");
КонецПроцедуры

&НаСервере
Процедура ПересчитатьИтогиНаСервере()
	// здесь логика на сервере
КонецПроцедуры

Если командной панели у формы нет, добавьте группу типа «Командная панель». Для формы она обычно уже есть и называется ФормаКоманднаяПанель.

Кнопка в панели таблицы

Чтобы кнопка работала с выбранной строкой, вынесите её в командную панель именно этой таблицы. У таблицы формы есть собственное свойство «Командная панель». Внутри процедуры берите текущую строку через Элементы.Список.ТекущиеДанные и обязательно проверяйте результат на Неопределено, иначе при пустом списке получите ошибку.

Кнопка с выпадающим меню

Если кнопок несколько и они похожи, соберите их в группу типа «Подменю». Тогда на панели будет одна кнопка со стрелкой, а команды раскроются списком. Для редких действий это удобнее, чем растягивать панель.

Как вывести команду в панель раздела и панель навигации

Команды формы живут внутри формы. Чтобы действие появилось в разделе программы, нужна команда, которая открывает форму или запускает обработку, и подсистема, куда её поместят.

Алгоритм:

  1. Создайте объект «Команда» в ветке «Общие → Команды» (или используйте команду, уже принадлежащую объекту). Укажите группу: например, «Панель навигации» или «Панель действий».
  2. В свойстве «Параметр команды» укажите тип данных, если команда работает с выбранным объектом, либо оставьте пусто, если параметра нет.
  3. В «Модуле команды» напишите обработчик, например открытие формы.
  4. Откройте нужную подсистему и на закладке «Содержание» отметьте объекты, которые в неё входят. Команды объектов попадают в интерфейс раздела автоматически, а общие команды отмечаются так же, как остальные объекты.
  5. Проверьте раздел под обычным пользователем.

Новая подсистема верхнего уровня даёт новую кнопку в панели разделов. Для неё задают картинку и заголовок. У подсистемы есть и пункт «Командный интерфейс», в котором точно настраивают, в какой группе и в каком порядке лежат команды.

Если кнопка не видна, сначала проверьте права. Команда скрывается, когда у роли пользователя нет права «Просмотр» на объект, к которому она относится, или не разрешено использование команды.

Рабочая область начальной страницы

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

Как добавить кнопку программно в код

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

Сначала создают команду, потом кнопку:

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

	Команда = Команды.Добавить("ВыгрузитьВФайл");
	Команда.Заголовок = "Выгрузить в файл";
	Команда.Действие = "ВыгрузитьВФайлКоманда";

	Кнопка = Элементы.Добавить("КнопкаВыгрузитьВФайл", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
	Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопкаКоманднойПанели;
	Кнопка.ИмяКоманды = "ВыгрузитьВФайл";

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

&НаКлиенте
Процедура ВыгрузитьВФайлКоманда(Команда)
	// действие выполняется на клиенте
КонецПроцедуры

Что здесь важно знать:

  • В строку Действие записывают имя процедуры модуля формы. Процедура должна существовать и быть клиентской, иначе при нажатии появится ошибка.
  • Имя команды и имя кнопки не должны повторять уже занятые имена на форме.
  • Третий параметр Элементы.Добавить — родитель. Укажите группу или панель, куда положить кнопку. Если опустить, кнопка встанет в конец корня формы.
  • Команды, созданные динамически, живут только пока открыта форма. Сохранять их не нужно.

Не добавляйте элементы в общую командную панель тех форм, которые вы не контролируете. При обновлении типовой конфигурации такая связка легко ломается, а ошибка видна только при открытии формы.

Динамические изменения добавляйте в расширение, а не в основную конфигурацию, если конфигурация на поддержке.

Где разместить новую кнопку?

Кнопка в типовой конфигурации через расширение

Типовую форму не правят напрямую, пока конфигурация на поддержке. Правильный путь — расширение конфигурации .

  1. В Конфигураторе откройте «Конфигурация → Расширения конфигурации » и создайте новое расширение.
  2. Добавьте в него нужную форму через команду «Заимствовать объекты» в контекстном меню объекта основной конфигурации.
  3. Откройте заимствованную форму в расширении и добавьте команду и кнопку так же, как в обычной форме.
  4. Если нужно вызвать процедуру типового модуля, пишите отдельную свою процедуру в модуле формы расширения и не меняйте существующие.
  5. Сохраните расширение в базу и обновите конфигурацию базы данных.

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

Держите изменения расширения небольшими: одна форма, одна кнопка, один обработчик. Так проще понять, что сломалось после обновления.

События кнопки и что писать в обработчике

Нажатие кнопки вызывает процедуру, привязанную к команде. У неё один параметр Команда. Все остальные данные берите из формы: реквизитов, текущих данных таблицы, параметров.

Практические приёмы:

  • Обращение к серверу. Тяжёлую работу с базой выносите в серверную процедуру с директивой &НаСервере. Клиентская процедура только вызывает её.
  • Подтверждение. Перед необратимым действием спросите пользователя через ПоказатьВопрос или ПоказатьПредупреждение с оповещением об окончании. В управляемом приложении эти вызовы не блокируют выполнение, поэтому продолжение кода выносят в процедуру-обработчик.
  • Блокировка на время работы. Если команда выполняется долго, покажите состояние через Состояние("Идёт обработка...").
  • Доступность. Чтобы сделать кнопку недоступной, меняют свойство Доступность команды или кнопки. Для скрытия используют Видимость кнопки.
  • Передача параметров. Для открытия другой формы по кнопке используют ОткрытьФорму с параметрами, а не глобальные переменные.

Пример управления видимостью по условию:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.КнопкаПровести.Видимость = ПравоДоступа("Проведение", Метаданные.Документы.РеализацияТоваровУслуг);
КонецПроцедуры

Имя документа в примере подставьте своё. Если такого документа в вашей конфигурации нет, код не запустится.

Кнопка не работает: что проверить
Выполнено: 0 / 5

Отладка и проверка кнопки

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

  1. Сохраните изменения в Конфигураторе и нажмите «Отладка → Начать отладку» (клавиша F5). Для расширения сначала обновите конфигурацию базы данных.
  2. Откройте нужную форму под пользователем с той ролью, которая будет работать. Администратору видно больше, чем рядовому сотруднику.
  3. Поставьте точку останова на первой строке обработчика. Если остановка не происходит, команда не привязана к процедуре.
  4. Пройдите процедуру по шагам и посмотрите значения в окне «Вычислить выражение».
  5. Проверьте граничные случаи: пустой список, не выбрана строка, документ не записан, нет прав.

Для динамически созданных кнопок открывайте и закрывайте форму повторно: ошибки с дублированием имён проявляются именно при повторном создании.

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

Типичные причины, почему кнопки не видно

СимптомВероятная причина
Кнопка есть в Конфигураторе, но не видна в программеНе сохранена конфигурация базы или не обновлена БД расширения
Видна у администратора, не видна у пользователяНет права на объект или роль не подключена к команде
Команда есть в списках настройки, но не выведенаЕё не включили в настройке панели действий или навигации
Кнопка сераяДоступность выключена или не заполнено условие
Нажатие вызывает ошибку «Процедура не найдена»Имя в Действие не совпадает с именем процедуры или процедура без нужной директивы

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

Можно ли добавить кнопку в типовую конфигурацию без программиста?
Нет. Без программирования доступна только перестановка уже существующих команд через «Вид» в главном меню и режим изменения формы.
Чем кнопка отличается от команды?
Команда задаёт действие и заголовок, кнопка — это её отображение на форме. Одну команду можно вывести кнопками на нескольких панелях.
Почему созданная из кода кнопка не нажимается?
Чаще всего в свойстве Действие указано имя процедуры, которой нет в модуле формы, либо процедура написана не как клиентская. Проверьте точное совпадение имён.
Как добавить кнопку в панель разделов?
Создайте подсистему верхнего уровня, задайте картинку и заголовок, затем включите в неё нужные объекты и команды.
Нужно ли перезапускать 1С после изменения панели?
Для изменений конфигурации достаточно обновить конфигурацию базы данных и открыть форму заново. Настройки пользователя через «Вид» применяются сразу.