При разработке внешних обработок в конфигурациях на платформе 1С:Предприятие 8.3 (например, в «1С:Управление торговлей 11») разработчики часто сталкиваются с необходимостью выполнить действие существующей общей команды — например, открыть окно УправлениеЭквайринговымТерминалом непосредственно при запуске обработки. Разберем особенности платформы при работе с общими командами и способы решения этой задачи.
В платформе 1С:Предприятие не предусмотрено прямого синтаксического метода (наподобие ВыполнитьКоманду()), позволяющего программно запустить обработчик ОбработкаКоманды из модуля общей команды. Команды проектируются платформой исключительно для интерактивного нажатия пользователем через элементы пользовательского интерфейса (кнопки, меню, командные панели).
Кроме того, обработчики команд выполняются строго в контексте клиента (директива &НаКлиенте). Попытка вызвать клиентские методы управления интерфейсом в серверных процедурах формы приведет к ошибке выполнения.
Для реализации требуемого поведения рассмотрим два основных подхода:
Проанализируем модуль общей команды УправлениеЭквайринговымТерминалом. Вся суть ее работы сводится к вызову формы подключаемого оборудования на клиенте:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Чтобы повторить это поведение при старте внешней обработки, перенесем вызов метода ОткрытьФорму в клиентский обработчик события ПриОткрытии формы внешней обработки:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Открываем форму управления эквайринговым терминалом
ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ЭтаФорма);
КонецПроцедуры
Разберем важные нюансы этого подхода:
ЭтаФорма, чтобы открываемое окно было логически связано с внешней обработкой.ПодключаемоеОборудование, иначе метод ОткрытьФорму вызовет ошибку прав доступа.РабочееМестоКлиента).
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОткрытьОкноЭквайринга", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОкноЭквайринга()
ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.УправлениеЭквайринговымТерминалом", , ЭтаФорма);
КонецПроцедуры
Если задача заключается в том, чтобы дать пользователю удобный доступ к команде прямо из интерфейса внешней обработки без написания кода, выполним следующие шаги:
УправлениеЭквайринговымТерминалом.В этом случае платформа автоматически создаст кнопку, привязанную к типовой общей команде конфигурации, и весь стандартный механизм отработает штатно при нажатии на кнопку пользователем.