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