Как вызвать общую команду при открытии формы внешней обработки в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При разработке внешних обработок в конфигурациях на платформе 1С:Предприятие 8.3 (например, в «1С:Управление торговлей 11») разработчики часто сталкиваются с необходимостью выполнить действие существующей общей команды — например, открыть окно УправлениеЭквайринговымТерминалом непосредственно при запуске обработки. Разберем особенности платформы при работе с общими командами и способы решения этой задачи.

Ограничение платформы на прямой программный вызов общих команд

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

Кроме того, обработчики команд выполняются строго в контексте клиента (директива &НаКлиенте). Попытка вызвать клиентские методы управления интерфейсом в серверных процедурах формы приведет к ошибке выполнения.

Для реализации требуемого поведения рассмотрим два основных подхода:

  1. Программное открытие целевой формы в клиентском событии при открытии обработки.
  2. Интерактивное размещение общей команды на форме внешней обработки в конфигураторе.

Вариант 1. Программное открытие формы через событие «ПриОткрытии»

Проанализируем модуль общей команды УправлениеЭквайринговымТерминалом. Вся суть ее работы сводится к вызову формы подключаемого оборудования на клиенте:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры

Чтобы повторить это поведение при старте внешней обработки, перенесем вызов метода ОткрытьФорму в клиентский обработчик события ПриОткрытии формы внешней обработки:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    // Открываем форму управления эквайринговым терминалом
    ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ЭтаФорма);

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

Разберем важные нюансы этого подхода:

  1. Владелец формы: В качестве параметра источника/владельца передаем ЭтаФорма, чтобы открываемое окно было логически связано с внешней обработкой.
  2. Права доступа: Пользователь должен обладать правами на чтение и просмотр справочника ПодключаемоеОборудование, иначе метод ОткрытьФорму вызовет ошибку прав доступа.
  3. Рабочее место: Для корректной инициализации терминалов перед вызовом формы в сеансе должно быть определено текущее рабочее место (параметр сеанса РабочееМестоКлиента).
  4. Использование обработчика ожидания: Если требуется, чтобы форма внешней обработки сначала полностью отрисовалась на экране, а затем открылось окно терминала, вызов можно выполнить через однократный обработчик ожидания:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОбработчикОжидания("ОткрытьОкноЭквайринга", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьОкноЭквайринга()
    ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ЭтаФорма);
КонецПроцедуры

Вариант 2. Размещение команды на форме в конфигураторе

Если задача заключается в том, чтобы дать пользователю удобный доступ к команде прямо из интерфейса внешней обработки без написания кода, выполним следующие шаги:

  1. Откроем форму внешней обработки в конфигураторе.
  2. В панели Команды перейдем на вкладку Глобальные команды (или Общие команды).
  3. Найдем команду УправлениеЭквайринговымТерминалом.
  4. Перетащим команду мышью в дерево элементов формы (например, в командную панель формы или в отдельную группу кнопок).

В этом случае платформа автоматически создаст кнопку, привязанную к типовой общей команде конфигурации, и весь стандартный механизм отработает штатно при нажатии на кнопку пользователем.

← На главную