Почему не открывается форма внешней обработки в 1С на базе БСП и как это исправить?

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

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

Проверка и настройка функции регистрации СведенияОВнешнейОбработке

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

Рассмотрим актуальный шаблон функции, использующий вызовы функций общего модуля ДополнительныеОтчетыИОбработкиКлиентСервер:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Заказ с характеристиками (сервер)";
    НоваяКоманда.Идентификатор = "ЗаказСХарактеристикамиСервер";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Проанализируем ключевые моменты данного кода:

  1. Параметр Использование принимает значение, возвращаемое функцией ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). Это сообщает БСП, что при нажатии на команду пользователем необходимо сразу отобразить основную форму обработки, а не выполнять фоновый серверный вызов.
  2. Значение Идентификатор команды должно быть уникальным в пределах таблицы команд обработки. Если форма открывается стандартным методом, платформа ищет форму по умолчанию, назначенную в свойствах метаданных обработки.
  3. Параметр БезопасныйРежим при необходимости можно принудительно отключить (значение Ложь), если форма при инициализации обращается к операциям, запрещенным в защищенном контуре исполнения (работа с внешними файлами, COM-соединения или привилегированные серверные методы).

Свойства формы: Режим открытия окна

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

Если у управляемой формы свойство РежимОткрытияОкна установлено в значение, блокирующее владельца или окно программы, а контекст вызова из подсистемы БСП не передает родительского окна, отображение интерфейса может дать сбой или окно формы окажется скрытым на заднем плане.

Для гарантированного решения выполним следующие действия в конфигураторе:

  1. Откроем корневой элемент управляемой формы внешней обработки.
  2. В палитре свойств найдем параметр РежимОткрытияОкна.
  3. Установим для него значение Независимый (или проверим, чтобы не было принудительной блокировки интерфейса, если это не требуется бизнес-логикой).
  4. Сохраним внешнюю обработку в файл и заново загрузим ее в справочник Дополнительные отчеты и обработки кнопкой «Обновить из файла».

Проверка назначения основной формы и обработчиков событий

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

  1. Назначение основной формы в метаданных: Убедимся, что в корневом элементе конфигуратора для нашей внешней обработки в строке Основная форма явно выбрана созданная управляемая форма. Если в обработке создано несколько форм или основная форма не задана, подсистема БСП при вызове ТипКомандыОткрытиеФормы() не поймет, какое именно окно требуется отобразить.
  2. Ошибки в событиях инициализации: Изучим код процедур ПриСозданииНаСервере и ПриОткрытии в модуле формы. Если в процессе их выполнения переменной Отказ присваивается значение Истина либо происходит неперехваченная исключительная ситуация, форма мгновенно закрывается еще до вывода на экран. При открытии через механизмы БСП такое исключение может гаситься общей системной оберткой.
  3. Контроль версий подсистем: Для точной диагностики всегда полезно знать версию БСП, используемую в конфигурации. Посмотрим на регистр сведений ВерсииПодсистем в режиме «1С:Предприятие» — там хранится точный номер версии библиотеки, что позволяет свериться с документацией на предмет изменений в методах подключения.

Альтернативный вариант: открытие формы через клиентский метод

Если стандартный тип команды ТипКомандыОткрытиеФормы() по каким-либо причинам не подходит или форма требует нестандартных параметров при открытии, рассмотрим альтернативный подход — перехват управления на стороне клиента.

Для этого в функции СведенияОВнешнейОбработке() укажем другой тип использования:


НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();

Затем в модуле формы внешней обработки определим экспортную процедуру-обработчик команды:


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды) Экспорт
    
    // Выполняем явное открытие нужной формы с передачей параметров
    ОткрытьФорму("ВнешняяОбработка." + ПараметрыКоманды.ДополнительнаяОбработкаСсылка.ИмяОбъекта + ".Форма.Форма", ПараметрыКоманды);
    
КонецПроцедуры

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

← На главную