При интеграции внешних обработок в конфигурации, разработанные на основе «Библиотеки стандартных подсистем» (БСП) — таких как «1С:Управление нашей фирмой», «1С:Управление торговлей», «1С:ERP» и других, разработчики нередко сталкиваются с ситуацией, когда обработка успешно добавляется в справочник дополнительных отчетов и обработок, но при вызове команды ее форма попросту не появляется на экране. При этом система может не выдавать никаких явных сообщений об ошибках, оставляя пользователя в неведении. Разберем подробно, почему возникает подобное поведение платформы и как правильно зарегистрировать и настроить внешнюю обработку для гарантированного отображения интерфейса.
Основной механизм подключения дополнительного функционала в современных конфигурациях опирается на вызов экспортной функции СведенияОВнешнейОбработке(), расположенной в модуле объекта внешней обработки. Если структура параметров регистрации сформирована некорректно или используются устаревшие форматы описания команд, подсистема дополнительных отчетов и обработок не сможет инициировать открытие окна.
Рассмотрим актуальный шаблон функции, использующий вызовы функций общего модуля ДополнительныеОтчетыИОбработкиКлиентСервер:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заказ с характеристиками (сервер)";
НоваяКоманда.Идентификатор = "ЗаказСХарактеристикамиСервер";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Проанализируем ключевые моменты данного кода:
Использование принимает значение, возвращаемое функцией ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). Это сообщает БСП, что при нажатии на команду пользователем необходимо сразу отобразить основную форму обработки, а не выполнять фоновый серверный вызов.Идентификатор команды должно быть уникальным в пределах таблицы команд обработки. Если форма открывается стандартным методом, платформа ищет форму по умолчанию, назначенную в свойствах метаданных обработки.БезопасныйРежим при необходимости можно принудительно отключить (значение Ложь), если форма при инициализации обращается к операциям, запрещенным в защищенном контуре исполнения (работа с внешними файлами, COM-соединения или привилегированные серверные методы).Одной из скрытых причин, по которой форма может визуально не открываться (особенно во встроенном рабочем месте или панелях интерфейса «Такси»), является некорректная настройка свойств самого объекта формы. Выясним причину такого поведения.
Если у управляемой формы свойство РежимОткрытияОкна установлено в значение, блокирующее владельца или окно программы, а контекст вызова из подсистемы БСП не передает родительского окна, отображение интерфейса может дать сбой или окно формы окажется скрытым на заднем плане.
Для гарантированного решения выполним следующие действия в конфигураторе:
Дополнительные отчеты и обработки кнопкой «Обновить из файла».Если команда БСП настроена на открытие формы, но окно не показывается, разберем по шагам сопутствующие технические нюансы:
ТипКомандыОткрытиеФормы() не поймет, какое именно окно требуется отобразить.ПриСозданииНаСервере и ПриОткрытии в модуле формы. Если в процессе их выполнения переменной Отказ присваивается значение Истина либо происходит неперехваченная исключительная ситуация, форма мгновенно закрывается еще до вывода на экран. При открытии через механизмы БСП такое исключение может гаситься общей системной оберткой.ВерсииПодсистем в режиме «1С:Предприятие» — там хранится точный номер версии библиотеки, что позволяет свериться с документацией на предмет изменений в методах подключения.Если стандартный тип команды ТипКомандыОткрытиеФормы() по каким-либо причинам не подходит или форма требует нестандартных параметров при открытии, рассмотрим альтернативный подход — перехват управления на стороне клиента.
Для этого в функции СведенияОВнешнейОбработке() укажем другой тип использования:
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
Затем в модуле формы внешней обработки определим экспортную процедуру-обработчик команды:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды) Экспорт
// Выполняем явное открытие нужной формы с передачей параметров
ОткрытьФорму("ВнешняяОбработка." + ПараметрыКоманды.ДополнительнаяОбработкаСсылка.ИмяОбъекта + ".Форма.Форма", ПараметрыКоманды);
КонецПроцедуры
Такой подход обеспечивает полный контроль над процессом открытия окна, позволяет предварительно выполнить клиентские проверки, задать индивидуальные параметры отображения и локализовать возможные ошибки при инициализации интерфейса.