Своя кнопка в разделах, панелях и формах: работа с командами в Конфигураторе

· 9 мин

Содержание

Чтобы добавить команду в командный интерфейс 1С 8.3, создайте в Конфигураторе общую команду (Общие → Общие команды) или команду объекта (вкладка «Команды» в окне объекта), задайте ей группу размещения, включите в нужную подсистему и выдайте ролям право на неё. Потом обновите конфигурацию базы данных (F7) — и кнопка появится в разделе, на панели или в форме.

Если кнопки после этого нет, почти всегда виновато одно из четырёх: не та группа, не та подсистема, нет прав у роли или не совпал тип параметра. Ниже — порядок действий и разбор каждого случая.

Как устроен командный интерфейс 8.3

В управляемом приложении кнопки не рисуют вручную на «рабочем столе». Платформа сама собирает интерфейс из трёх источников:

  • 🗂 Подсистемы — это разделы программы (панель разделов слева или сверху).
  • ⚙️ Команды — то, что нажимает пользователь: открыть список, создать документ , запустить обработку.
  • 🔐 Права и функциональные опции — фильтр: команда видна, только если у пользователя есть права и опция включена.

Команды бывают четырёх видов.

Вид командыГде создаётсяГде появляется
СтандартнаяСоздаётся платформой автоматически для каждого объектаОткрыть список, создать элемент, открыть отчёт или обработку
Команда объектаВкладка «Команды» в окне справочника, документа, отчёта, обработкиВ разделах, панелях и формах — по группе и типу параметра
Общая командаВетка Общие → Общие командыГде угодно: не привязана к одному объекту
Команда формыВкладка «Команды» в редакторе формыТолько в этой форме

Отсюда главное правило. Где появится команда, решают два свойства: «Группа» и «Тип параметра команды». Подсистема отвечает за раздел, роль — за видимость.

Панели раздела тоже стоит различать:

  • Панель навигации — ссылки, которые открывают списки в рабочей области раздела.
  • Панель действий — действия: «Создать», «Отчеты», «Сервис».
  • Командная панель формы и навигационная панель формы — кнопки и ссылки внутри конкретной формы.

Создаём новую команду в дереве метаданных

Возьмём пример: нужна кнопка «Печать наклейки» для документа «Реализация товаров», которая открывает обработку с выбранным документом.

Общая команда или команда объекта

  • Команда нужна одному объекту — создавайте её внутри объекта. Так она переедет вместе с ним при сравнении и объединении конфигураций.
  • Команда работает с несколькими типами (например, и с реализацией, и с поступлением) — делайте общую команду и укажите составной тип параметра.

Порядок создания

  1. Откройте Конфигуратор и в дереве метаданных разверните Общие → Общие команды.
  2. Нажмите Добавить (или Insert). Откроется палитра свойств новой команды.
  3. Заполните Имя (без пробелов, например ПечатьНаклейки) и Синоним — этот текст увидит пользователь на кнопке.
  4. Укажите Группу — куда положить команду (варианты ниже).
  5. Если команда работает с объектом, задайте Тип параметра команды, например ДокументСсылка.РеализацияТоваровУслуг.
  6. Выберите Режим использования параметра: Одиночный — команда получает одну ссылку, Множественный — массив ссылок из выделенных строк списка.
  7. По желанию задайте Картинку, Отображение (текст, картинка или оба), Подсказку и Сочетание клавиш.
  8. Откройте Модуль команды и напишите обработчик.

Обработчик команды

Конфигуратор сам создаёт шаблон процедуры ОбработкаКоманды. Пример, который открывает форму обработки и передаёт в неё документ:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

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

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

Модуль команды выполняется на клиенте. Если команде нужно что-то записать в базу, вызывайте процедуру общего модуля с флагом «Вызов сервера», а не обращайтесь к данным прямо из модуля команды.

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

Размещение команды в разделах и группах

Свойство «Группа» — это адрес кнопки. Для общих команд и команд объектов доступны стандартные группы:

ГруппаГде окажется кнопка
Панель навигации. Важное / Обычное / См. такжеСсылка в панели навигации раздела
Панель действий. СоздатьБлок «Создать» раздела
Панель действий. ОтчетыБлок «Отчеты» раздела
Панель действий. СервисБлок «Сервис» раздела
Командная панель формы. Важное / Обычное / См. такжеКнопка или пункт меню «Еще» в формах объекта
Навигационная панель формы. Важное / Перейти / См. такжеСсылка слева или сверху в форме объекта

Группы панели действий и панели навигации требуют, чтобы команда была включена в подсистему. Группы формы работают иначе: туда команда попадает автоматически, если её тип параметра совпадает с объектом формы.

Своя группа команд

Стандартных групп мало, когда в разделе десятки команд. Тогда создайте собственную группу:

  1. Ветка Общие → Группы команд → Добавить.
  2. Задайте имя, синоним и Категорию: панель навигации, панель действий, командная панель формы или навигационная панель формы.
  3. В свойстве «Группа» команды выберите новую группу.

Так получаются аккуратные блоки вроде «Печать» или «Загрузка данных» с общим заголовком.

Включение в подсистему

  1. Откройте нужную подсистему (Общие → Подсистемы).
  2. На вкладке «Состав» отметьте общую команду или объект, которому принадлежит команда.
  3. Проверьте, что у подсистемы включено свойство «Включать в командный интерфейс».

Команду можно включить сразу в несколько подсистем — тогда она появится в нескольких разделах.

Редактор командного интерфейса: порядок и видимость

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

Командный интерфейс одной подсистемы

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

Все подсистемы сразу

Если разделов много, удобнее общий редактор: правая кнопка мыши по ветке Подсистемы → «Все подсистемы». Слева дерево подсистем, справа их команды и панели. Здесь удобно проверить, в какие разделы попала команда и не задвоилась ли она.

Панель разделов и начальная страница

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

Настройки конфигурации — это только значения по умолчанию. Если пользователь уже настраивал навигацию и действия у себя, его личные настройки перекроют ваши. Чтобы увидеть изменения, ему нужно вернуть стандартные настройки в окне настройки панели.

Видимость команды по ролям

Видимость команды проходит три фильтра. Команда показывается, только если пройдены все.

  1. 🔐 Права роли. У общих команд в редакторе роли есть право «Просмотр». Снимите его — и команда исчезнет у всех пользователей с этой ролью. У команд объекта тоже есть право «Просмотр», плюс нужны права на сам объект.
  2. 👁 Видимость по ролям в командном интерфейсе. В редакторе командного интерфейса подсистемы рядом с общей колонкой «Видимость» есть колонки по каждой роли. Галочка в колонке роли включает или выключает команду только для неё.
  3. 🧩 Функциональные опции. Если команда (или её объект) входит в состав функциональной опции, а опция выключена, команды не будет ни у кого.

Разница между первым и вторым фильтром практическая:

МеханизмЧто делаетКогда выбирать
Право «Просмотр» в ролиЗапрещает команду полностью, в том числе из формПользователю нельзя выполнять действие
Видимость по ролям в подсистемеУбирает ссылку из раздела, но не запрещаетДействие разрешено, но в этом разделе только мешает

Для отладки запустите базу под пользователем с нужной ролью, а не под администратором. У полных прав видно всё, и ошибку в настройке ролей не заметить.

Кнопка на форме документа

Есть два способа вывести команду в форму документа. Они решают разные задачи.

Способ 1. Глобальная команда с типом параметра

Если у общей команды или команды объекта тип параметра — ссылка на этот документ, а группа — «Командная панель формы», платформа сама добавит кнопку в форму документа и в форму списка. Менять форму не нужно. Такой путь не трогает типовые формы и спокойно переживает обновления.

Чтобы разместить такую команду в конкретном месте формы:

  1. Откройте форму в редакторе.
  2. На вкладке «Команды» переключитесь на «Глобальные команды».
  3. Найдите свою команду в разделе параметризуемых команд и перетащите её в дерево элементов или в командную панель.

Способ 2. Команда формы

Нужна, когда кнопка работает с данными открытой формы — например, чистит табличную часть до записи документа.

  1. В редакторе формы откройте вкладку «Команды» → «Команды формы» → Добавить.
  2. Задайте имя и заголовок, в свойстве «Действие» нажмите на лупу — Конфигуратор создаст обработчик в модуле формы.
  3. Перетащите команду в элементы формы — получится кнопка.

Пример обработчика, который удаляет строки с нулевым количеством из табличной части Товары (предполагается, что в ней есть реквизит Количество):

&НаКлиенте
Процедура УдалитьПустыеСтроки(Команда)
	УдалитьПустыеСтрокиНаСервере();
КонецПроцедуры

&НаСервере
Процедура УдалитьПустыеСтрокиНаСервере()

	Индекс = Объект.Товары.Количество() - 1;
	Пока Индекс >= 0 Цикл
		Если Объект.Товары[Индекс].Количество = 0 Тогда
			Объект.Товары.Удалить(Индекс);
		КонецЕсли;
		Индекс = Индекс - 1;
	КонецЦикла;

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

Цикл идёт с конца: при удалении строки индексы следующих сдвигаются, а обход с конца этому не мешает.

Если конфигурация на поддержке

Правка типовой формы снимает объект с поддержки и усложняет обновления. Безопаснее добавить команду через расширение конфигурации (доступно с платформы 8.3.6):

  • общую команду создайте прямо в расширении;
  • чтобы добавить кнопку в типовую форму, заимствуйте эту форму в расширение и добавьте команду там;
  • подсистему тоже можно заимствовать и включить в её состав свою команду.

После загрузки или изменения расширения база должна применить его — проверьте, что расширение активно в списке расширений в режиме 1С:Предприятие.

Почему команда не появилась: разбор ошибок

Диагностика: выберите симптом

Ещё две частые ловушки:

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

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

Можно ли добавить команду, не открывая Конфигуратор?
Своя команда — нет, её создают в Конфигураторе или в расширении. Пользователь в режиме 1С:Предприятие может только показать, скрыть и переставить уже существующие команды в настройках навигации и действий.
Как назначить команде горячую клавишу?
В свойствах команды заполните «Сочетание клавиш». Не берите сочетания, которые уже заняты платформой, например Ctrl+Enter (провести и закрыть) или Ctrl+S (записать).
Почему команда в списке документов неактивна?
Если у команды задан тип параметра, она доступна только при выделенной строке подходящего типа. В пустом списке или на группе она недоступна.
Где хранится порядок команд, который настроил пользователь?
В пользовательских настройках информационной базы. Обновление конфигурации их не сбрасывает, поэтому после перестройки интерфейса пользователю иногда нужно вернуть стандартные настройки.
Можно ли вывести одну команду сразу в раздел и в форму?
Одной командой — нет: у неё одна группа. Создайте вторую команду с группой панели действий, а общий код вынесите в общий модуль и вызывайте из обеих.