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