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