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