К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как обратиться к команде объекта в 1С

Как обратиться к команде объекта 1С: команды формы, командный интерфейс, программный вызов команды, глобальные и параметризуемые команды.

В платформе «1С:Предприятие 8» команда — это именованное действие, которое можно вызвать из интерфейса или программно: открыть список, создать элемент, выполнить обработку данных. Команды бывают стандартными (платформенными) и пользовательскими, которые разработчик добавляет в дереве метаданных у конкретного объекта — справочника, документа, отчёта, обработки.

Обратиться к команде объекта можно тремя путями: через командный интерфейс формы (кнопка в командной панели или меню), через глобальный командный интерфейс прикладного решения (панель разделов и панель функций) и программно — из встроенного языка. Выбор пути зависит от задачи: пользователю достаточно интерфейса, разработчику обычно нужен вызов из кода или настройка видимости команды.

Ниже разобраны все три сценария с примерами кода, типичными ошибками и способами проверить, что команда действительно сработала. Материал ориентирован на управляемые формы и интерфейс «Такси», поскольку именно они используются в актуальных конфигурациях.

Что такое команда объекта и где она хранится

Команда объекта — это элемент метаданных, вложенный в конкретный объект конфигурации. У справочника «Номенклатура», документа «Реализация товаров» или отчёта «Продажи» может быть своя ветка «Команды» в дереве конфигурации. Каждая такая команда имеет имя, синоним, представление и обработчик — модуль, в котором написан код, выполняемый при вызове.

Помимо пользовательских команд у объектов есть стандартные команды, которые платформа добавляет автоматически: «Создать», «Провести», «Пометить на удаление», «Установить интервал дат» и другие. Стандартные команды управляются свойствами объекта (например, «Ввод по строке», «Использовать стандартные команды») и не требуют написания обработчиков.

При создании команды в конфигураторе важно сразу определить её тип параметризации: команда без параметра, команда с одним параметром или с несколькими. От этого зависит, сможет ли команда принимать ссылку на текущий объект — например, чтобы по кнопке из формы документа сформировать по нему отчёт.

Создание пользовательской команды у объекта

Откройте конфигуратор, найдите нужный объект (например, документ) и в его дереве метаданных выделите ветку «Команды». Через контекстное меню выберите «Добавить», задайте имя команды латиницей без пробелов — по этому имени к ней потом обращаются из кода. В палитре свойств укажите синоним — именно его увидит пользователь на кнопке.

В свойстве «Тип параметра команды» задайте, какие данные команда принимает. Если оставить поле пустым, команда будет вызываться без параметра — так подходят, например, команды печати всего списка. Если указать «ДокументСсылка.РеализацияТоваров», команда появится в формах этого документа и получит ссылку на текущий объект.

Обработчик команды создаётся кнопкой с лупой у свойства «Обработчик» или через «Действия команды». Платформа предложит выбрать, где разместить код: в модуле команды (для глобальных вызовов) или в модуле формы. Для команд, работающих с формой объекта, обработчик обычно состоит из клиентской части, которая получает параметр и открывает нужную форму.

Порядок действий
  1. 1
    Откройте объект конфигурации и добавьте элемент в ветку «Команды»
  2. 2
    Задайте имя, синоним и тип параметра команды
  3. 3
    Создайте обработчик и напишите код действия
  4. 4
    Перетащите команду в командную панель формы или в командный интерфейс подсистемы
  5. 5
    Обновите конфигурацию базы данных и проверьте кнопку в режиме предприятия

Как обратиться к команде из командной панели формы

Самый частый сценарий — кнопка на форме объекта. После создания команды откройте форму объекта в конфигураторе, перейдите на закладку «Командный интерфейс» окна редактора формы и отметьте флажком нужную команду в списке «Командная панель» или «Глобальные команды». Платформа сама добавит кнопку.

Если требуется разместить кнопку в конкретной группе формы (например, в подменю «Печать»), перетащите команду из панели «Доступные команды» в дерево элементов формы. В свойствах кнопки можно изменить заголовок, картинку, отображение (только картинка, надпись и картинка) и важность — свойство «Важное» выносит кнопку в основную часть командной панели.

Параметризуемые команды платформа подставляет в формы автоматически: если у команды тип параметра совпадает со ссылкой объекта формы, она появляется в подменю «Перейти» или в командной панели в зависимости от настроек. Это удобно для отчётов по документу и связанных обработок.

Обращение к команде через глобальный командный интерфейс

Глобальные команды доступны из панели функций раздела и из главного меню, независимо от того, какая форма открыта. Чтобы команда объекта стала глобальной, в её свойствах в конфигураторе включите «Режим использования параметра» и «Группа команд» — а главное, добавьте команду в командный интерфейс подсистемы.

Откройте подсистему (например, «Продажи»), перейдите на закладку «Командный интерфейс» и перетащите команду объекта в панель навигации или панель действий. Команды панели навигации открывают списки и отчёты, команды панели действий — создают документы и запускают обработки. Порядок кнопок настраивается перетаскиванием, видимость — флажками.

Стандартные команды создания объектов (например, «Реализация товаров: создать») тоже добавляются через командный интерфейс подсистемы — искать их нужно в разделе «Команды создания объектов». Это позволяет вывести создание документа одной кнопкой в разделе без открытия списка.

Программный вызов команды из встроенного языка

Из кода к команде обращаются несколькими способами в зависимости от того, что она делает. Если команда открывает форму — вызывают ОткрытьФорму с параметрами. Если нужно выполнить стандартную команду формы (провести, записать) — используют метод формы ВыполнитьКоманду или вызывают соответствующий метод объекта напрямую.

Для вызова обработчика команды формы из другого места той же формы достаточно вызвать процедуру обработчика как обычную процедуру модуля, передав параметр команды. Из внешнего кода (другой формы, общего модуля) логику команды правильнее вынести в общий модуль и вызывать её — прямой вызов обработчика чужой формы невозможен без получения самой формы.

&НаКлиенте

Процедура ПечатьНакладной(Команда)

// Команда параметризуемая: получаем ссылку на текущий документ

ПараметрыФормы = Новый Структура("ДокументСсылка", Объект.Ссылка);

ОткрытьФорму("Обработка.ПечатьНакладной.Форма", ПараметрыФормы, ЭтаФорма);

КонецПроцедуры

// Программное выполнение стандартной команды формы

ЭтаФорма.ВыполнитьКоманду("Записать");

Для глобальных команд, открывающих списки, используют ОткрытьФорму с именем формы списка: ОткрытьФорму("Документ.РеализацияТоваров.ФормаСписка"). Это эквивалент нажатия команды панели навигации, выполненный из кода.

bsl
&НаКлиенте
Процедура СформироватьПоДокументу(Команда)
    ПараметрыОтчета = Новый Структура("ОтборДокумент", Объект.Ссылка);
    ОткрытьФорму("Отчет.ПродажиПоДокументу.Форма", ПараметрыОтчета);
КонецПроцедуры

Проверка результата и типичные ошибки

После настройки обновите конфигурацию базы данных (F7) и откройте форму в режиме предприятия. Команда считается подключённой правильно, если кнопка видна в ожидаемом месте, не серая (доступна), а при нажатии выполняется обработчик без ошибок. Для параметризуемой команды дополнительно проверьте, что в обработчик приходит заполненная ссылка — выведите её через Сообщить на этапе отладки.

Наиболее частые проблемы: команда создана, но не перенесена в командный интерфейс формы; у роли пользователя нет права на объект; обработчик размещён на сервере, а код обращается к клиентским методам; тип параметра команды не совпадает со ссылкой формы, поэтому платформа не показывает кнопку. Каждая из этих причин диагностируется отдельно — по наличию кнопки, её доступности и тексту ошибки.

Типичные ошибки
01
Команда создана в метаданных, но не отмечена в командном интерфейсе формы — кнопка не появляется
02
Несовпадение типа параметра команды и типа ссылки формы — платформа скрывает команду
03
Код обработчика помещён в серверную процедуру, но вызывает ОткрытьФорму — ошибка вызова
04
У роли пользователя нет права Использование на объект — команда недоступна без сообщения об ошибке
Контрольные точки

Как проверить результат

Кнопка на форме
Норма

Кнопка видна и активна в нужной группе командной панели

Тревожный признак

Кнопки нет или она серая — проверить командный интерфейс и права

Передача параметра
Норма

В обработчик приходит заполненная ссылка на текущий объект

Тревожный признак

Параметр пустой — неверно настроен тип параметра команды

Выполнение обработчика
Норма

Код отрабатывает без ошибок, открывается нужная форма

Тревожный признак

Ошибка о недопустимом вызове — перепутаны клиентский и серверный контексты

FAQ

Как вызвать команду объекта из другой формы?

Напрямую обработчик чужой формы вызвать нельзя. Логику команды следует вынести в общий модуль (клиентский или серверный) и вызывать её из обеих форм. Если команда только открывает форму — используйте ОткрытьФорму с нужными параметрами.

Почему параметризуемая команда не отображается в форме документа?

Платформа показывает такую команду только в формах, чей основной реквизит имеет тип, совпадающий с типом параметра команды. Проверьте, что в свойстве «Тип параметра команды» указан именно тот тип ссылки, с которым работает форма, и что команда отмечена в закладке «Командный интерфейс» формы.

Можно ли выполнить стандартную команду «Провести» программно?

Да. В модуле формы доступен метод ВыполнитьКоманду с именем стандартной команды, либо можно вызвать Записать с параметром РежимЗаписиДокумента.Проведение. Вне формы документ проводится методом объекта Записать(РежимЗаписиДокумента.Проведение).

Как добавить команду объекта в панель действий раздела?

Откройте нужную подсистему в конфигураторе, перейдите на закладку «Командный интерфейс» и перетащите команду из списка доступных в панель действий. После обновления конфигурации базы данных кнопка появится у пользователей в соответствующем разделе.

Почему пользователь видит кнопку, но при нажатии получает ошибку прав?

Команда отображается, но обработчик обращается к данным, на которые у роли нет прав — например, открывает отчёт по регистру, недоступному пользователю. Проверьте права не только на объект-владелец команды, но и на все объекты, к которым обращается код обработчика.

Итог

Что важно запомнить

Команда объекта создаётся в ветке «Команды» метаданных, подключается к форме через командный интерфейс или к разделу через подсистему, а из кода вызывается через ОткрытьФорму, ВыполнитьКоманду или прямой вызов процедуры обработчика. Правильный тип параметра и права доступа — два главных условия, при которых команда отображается и работает.