Своя кнопка в разделах, панелях и формах: работа с командами в Конфигураторе
Содержание
Чтобы добавить команду в командный интерфейс 1С 8.3, создайте в Конфигураторе общую команду (Общие → Общие команды) или команду объекта (вкладка «Команды» в окне объекта), задайте ей группу размещения, включите в нужную подсистему и выдайте ролям право на неё. Потом обновите конфигурацию базы данных (F7) — и кнопка появится в разделе, на панели или в форме.
Если кнопки после этого нет, почти всегда виновато одно из четырёх: не та группа, не та подсистема, нет прав у роли или не совпал тип параметра. Ниже — порядок действий и разбор каждого случая.
Как устроен командный интерфейс 8.3
В управляемом приложении кнопки не рисуют вручную на «рабочем столе». Платформа сама собирает интерфейс из трёх источников:
- 🗂 Подсистемы — это разделы программы (панель разделов слева или сверху).
- ⚙️ Команды — то, что нажимает пользователь: открыть список, создать документ , запустить обработку.
- 🔐 Права и функциональные опции — фильтр: команда видна, только если у пользователя есть права и опция включена.
Команды бывают четырёх видов.
| Вид команды | Где создаётся | Где появляется |
|---|---|---|
| Стандартная | Создаётся платформой автоматически для каждого объекта | Открыть список, создать элемент, открыть отчёт или обработку |
| Команда объекта | Вкладка «Команды» в окне справочника, документа, отчёта, обработки | В разделах, панелях и формах — по группе и типу параметра |
| Общая команда | Ветка Общие → Общие команды | Где угодно: не привязана к одному объекту |
| Команда формы | Вкладка «Команды» в редакторе формы | Только в этой форме |
Отсюда главное правило. Где появится команда, решают два свойства: «Группа» и «Тип параметра команды». Подсистема отвечает за раздел, роль — за видимость.
Панели раздела тоже стоит различать:
- Панель навигации — ссылки, которые открывают списки в рабочей области раздела.
- Панель действий — действия: «Создать», «Отчеты», «Сервис».
- Командная панель формы и навигационная панель формы — кнопки и ссылки внутри конкретной формы.
Создаём новую команду в дереве метаданных
Возьмём пример: нужна кнопка «Печать наклейки» для документа «Реализация товаров», которая открывает обработку с выбранным документом.
Общая команда или команда объекта
- Команда нужна одному объекту — создавайте её внутри объекта. Так она переедет вместе с ним при сравнении и объединении конфигураций.
- Команда работает с несколькими типами (например, и с реализацией, и с поступлением) — делайте общую команду и укажите составной тип параметра.
Порядок создания
- Откройте Конфигуратор и в дереве метаданных разверните
Общие → Общие команды. - Нажмите
Добавить(илиInsert). Откроется палитра свойств новой команды. - Заполните Имя (без пробелов, например
ПечатьНаклейки) и Синоним — этот текст увидит пользователь на кнопке. - Укажите Группу — куда положить команду (варианты ниже).
- Если команда работает с объектом, задайте Тип параметра команды, например
ДокументСсылка.РеализацияТоваровУслуг. - Выберите Режим использования параметра:
Одиночный— команда получает одну ссылку,Множественный— массив ссылок из выделенных строк списка. - По желанию задайте Картинку, Отображение (текст, картинка или оба), Подсказку и Сочетание клавиш.
- Откройте Модуль команды и напишите обработчик.
Обработчик команды
Конфигуратор сам создаёт шаблон процедуры ОбработкаКоманды. Пример, который открывает форму обработки и передаёт в неё документ:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыФормы = Новый Структура("Документ", ПараметрКоманды);
ОткрытьФорму("Обработка.ПечатьНаклеек.Форма.Форма", ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Модуль команды выполняется на клиенте. Если команде нужно что-то записать в базу, вызывайте процедуру общего модуля с флагом «Вызов сервера», а не обращайтесь к данным прямо из модуля команды.
При режиме Множественный в ПараметрКоманды придёт массив, даже если пользователь выделил одну строку. Перебирайте его циклом Для Каждого.
Размещение команды в разделах и группах
Свойство «Группа» — это адрес кнопки. Для общих команд и команд объектов доступны стандартные группы:
| Группа | Где окажется кнопка |
|---|---|
| Панель навигации. Важное / Обычное / См. также | Ссылка в панели навигации раздела |
| Панель действий. Создать | Блок «Создать» раздела |
| Панель действий. Отчеты | Блок «Отчеты» раздела |
| Панель действий. Сервис | Блок «Сервис» раздела |
| Командная панель формы. Важное / Обычное / См. также | Кнопка или пункт меню «Еще» в формах объекта |
| Навигационная панель формы. Важное / Перейти / См. также | Ссылка слева или сверху в форме объекта |
Группы панели действий и панели навигации требуют, чтобы команда была включена в подсистему. Группы формы работают иначе: туда команда попадает автоматически, если её тип параметра совпадает с объектом формы.
Своя группа команд
Стандартных групп мало, когда в разделе десятки команд. Тогда создайте собственную группу:
- Ветка
Общие → Группы команд→Добавить. - Задайте имя, синоним и Категорию: панель навигации, панель действий, командная панель формы или навигационная панель формы.
- В свойстве «Группа» команды выберите новую группу.
Так получаются аккуратные блоки вроде «Печать» или «Загрузка данных» с общим заголовком.
Включение в подсистему
- Откройте нужную подсистему (
Общие → Подсистемы). - На вкладке «Состав» отметьте общую команду или объект, которому принадлежит команда.
- Проверьте, что у подсистемы включено свойство «Включать в командный интерфейс».
Команду можно включить сразу в несколько подсистем — тогда она появится в нескольких разделах.
Редактор командного интерфейса: порядок и видимость
После включения в подсистему команда уже видна, но может стоять в конце списка или оказаться лишней в каком-то разделе. Порядок правят в редакторе командного интерфейса.
Командный интерфейс одной подсистемы
- Откройте подсистему, на вкладке «Основные» нажмите кнопку «Командный интерфейс».
- Слева выберите панель: панель навигации или панель действий.
- Перетаскивайте команды между группами и стрелками меняйте порядок.
- Колонка «Видимость» задаёт, показывать ли команду по умолчанию.
Все подсистемы сразу
Если разделов много, удобнее общий редактор: правая кнопка мыши по ветке Подсистемы → «Все подсистемы». Слева дерево подсистем, справа их команды и панели. Здесь удобно проверить, в какие разделы попала команда и не задвоилась ли она.
Панель разделов и начальная страница
Порядок самих разделов и состав начальной страницы задаются у корня конфигурации. Щёлкните правой кнопкой по корню дерева метаданных: в контекстном меню есть пункты для открытия командного интерфейса конфигурации и рабочей области начальной страницы. Там же переставляют разделы и выбирают формы, которые открываются при запуске.
Настройки конфигурации — это только значения по умолчанию. Если пользователь уже настраивал навигацию и действия у себя, его личные настройки перекроют ваши. Чтобы увидеть изменения, ему нужно вернуть стандартные настройки в окне настройки панели.
Видимость команды по ролям
Видимость команды проходит три фильтра. Команда показывается, только если пройдены все.
- 🔐 Права роли. У общих команд в редакторе роли есть право «Просмотр». Снимите его — и команда исчезнет у всех пользователей с этой ролью. У команд объекта тоже есть право «Просмотр», плюс нужны права на сам объект.
- 👁 Видимость по ролям в командном интерфейсе. В редакторе командного интерфейса подсистемы рядом с общей колонкой «Видимость» есть колонки по каждой роли. Галочка в колонке роли включает или выключает команду только для неё.
- 🧩 Функциональные опции. Если команда (или её объект) входит в состав функциональной опции, а опция выключена, команды не будет ни у кого.
Разница между первым и вторым фильтром практическая:
| Механизм | Что делает | Когда выбирать |
|---|---|---|
| Право «Просмотр» в роли | Запрещает команду полностью, в том числе из форм | Пользователю нельзя выполнять действие |
| Видимость по ролям в подсистеме | Убирает ссылку из раздела, но не запрещает | Действие разрешено, но в этом разделе только мешает |
Для отладки запустите базу под пользователем с нужной ролью, а не под администратором. У полных прав видно всё, и ошибку в настройке ролей не заметить.
Кнопка на форме документа
Есть два способа вывести команду в форму документа. Они решают разные задачи.
Способ 1. Глобальная команда с типом параметра
Если у общей команды или команды объекта тип параметра — ссылка на этот документ, а группа — «Командная панель формы», платформа сама добавит кнопку в форму документа и в форму списка. Менять форму не нужно. Такой путь не трогает типовые формы и спокойно переживает обновления.
Чтобы разместить такую команду в конкретном месте формы:
- Откройте форму в редакторе.
- На вкладке «Команды» переключитесь на «Глобальные команды».
- Найдите свою команду в разделе параметризуемых команд и перетащите её в дерево элементов или в командную панель.
Способ 2. Команда формы
Нужна, когда кнопка работает с данными открытой формы — например, чистит табличную часть до записи документа.
- В редакторе формы откройте вкладку «Команды» → «Команды формы» →
Добавить. - Задайте имя и заголовок, в свойстве «Действие» нажмите на лупу — Конфигуратор создаст обработчик в модуле формы.
- Перетащите команду в элементы формы — получится кнопка.
Пример обработчика, который удаляет строки с нулевым количеством из табличной части Товары (предполагается, что в ней есть реквизит Количество):
&НаКлиенте
Процедура УдалитьПустыеСтроки(Команда)
УдалитьПустыеСтрокиНаСервере();
КонецПроцедуры
&НаСервере
Процедура УдалитьПустыеСтрокиНаСервере()
Индекс = Объект.Товары.Количество() - 1;
Пока Индекс >= 0 Цикл
Если Объект.Товары[Индекс].Количество = 0 Тогда
Объект.Товары.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
Цикл идёт с конца: при удалении строки индексы следующих сдвигаются, а обход с конца этому не мешает.
Если конфигурация на поддержке
Правка типовой формы снимает объект с поддержки и усложняет обновления. Безопаснее добавить команду через расширение конфигурации (доступно с платформы 8.3.6):
- общую команду создайте прямо в расширении;
- чтобы добавить кнопку в типовую форму, заимствуйте эту форму в расширение и добавьте команду там;
- подсистему тоже можно заимствовать и включить в её состав свою команду.
После загрузки или изменения расширения база должна применить его — проверьте, что расширение активно в списке расширений в режиме 1С:Предприятие.
Почему команда не появилась: разбор ошибок
Ещё две частые ловушки:
- ⚠️ Команда с режимом
Множественный, а в коде ожидается одна ссылка. Обработчик падает с ошибкой при обращении к реквизитам массива. - ⚠️ Изменения внесены в основную конфигурацию, а база открыта с расширением, которое заимствует ту же форму. Расширение может переопределить расположение кнопки, и искать её нужно там.
Частые вопросы
Можно ли добавить команду, не открывая Конфигуратор?
Как назначить команде горячую клавишу?
Ctrl+Enter (провести и закрыть) или Ctrl+S (записать).