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