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