Почему внешняя обработка не запускается или сразу закрывается в меню «Дополнительные отчеты и обработки»?

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

При разработке и внедрении внешних обработок в среду 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда обработка прекрасно работает при открытии через меню «Файл — Открыть», но ведет себя некорректно после регистрации в справочнике «Дополнительные отчеты и обработки». Одной из самых распространенных проблем является отсутствие видимого результата при запуске: форма либо вообще не появляется, либо «мелькает» на долю секунды и мгновенно закрывается. В этой статье мы подробно разберем причины такого поведения и способы их устранения.

Анализ механизма регистрации в БСП

Для начала проанализируем, как система взаимодействует с внешней обработкой. Библиотека стандартных подсистем (БСП) требует наличия в модуле объекта специальной функции СведенияОВнешнейОбработке(). Рассмотрим корректный пример реализации этой функции, адаптированный под современные стандарты БСП:


#Область ДляВызоваИзДругихПодсистем
// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки

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

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Открыть универсальный обмен данными'");
    НоваяКоманда.Идентификатор = "УниверсальныйОбменДаннымиXML";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;
КонецФункции

#КонецОбласти

Обратите внимание на параметр Использование. Мы указываем ТипКомандыОткрытиеФормы(). Это означает, что система должна найти основную форму обработки и открыть ее. Однако именно здесь кроется первая причина неудач. Если форма открывается и сразу закрывается, значит, существуют конфликты во взаимодействии между вызывающим окном БСП и формой обработки.

Проблема режима открытия окна

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

Разберем по шагам, как это исправить в конфигураторе:

  1. Откройте вашу внешнюю обработку в конфигураторе.
  2. Перейдите к списку форм и откройте нужную форму (обычно она назначена основной).
  3. Перейдите в Палитру свойств этой формы (нажмите правой кнопкой мыши на корень формы в дереве элементов или используйте Alt+Enter).
  4. Найдите категорию свойств «Использование».
  5. Найдите параметр «Режим открытия окна» (Window opening mode).
  6. Измените значение с Блокировать окно владельца на Независимый.

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

Влияние безопасного режима

Проанализируем еще один важный аспект — свойство БезопасныйРежим в параметрах регистрации. По умолчанию многие разработчики устанавливают его в значение Истина. Однако стандартная обработка «Универсальный обмен данными в формате XML» активно использует:

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

Особенности работы в Толстом клиенте

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

Убедитесь, что для обработки корректно определена основная форма. Если обработка содержит и обычную, и управляемую формы, система может пытаться открыть «не ту» в зависимости от контекста вызова. Лучшей практикой будет оставить во внешнем файле только управляемую форму, если вы работаете в современной конфигурации (БП 3.0, УТ 11, ERP).

Обновление обработки в базе данных

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

Выполните следующие действия:

  1. Зайдите в базу 1С под правами администратора.
  2. Перейдите в раздел «Администрирование» — «Печатные формы, отчеты и обработки» — «Дополнительные отчеты и обработки».
  3. Найдите вашу обработку в списке.
  4. Нажмите кнопку «Обновить из файла» и выберите ваш измененный файл.
  5. Нажмите «Записать и закрыть».

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

Дополнительная отладка через программный вызов

Если изменение режима открытия окна на Независимый не помогло, проанализируем ситуацию с помощью отладки. Чтобы понять, почему форма закрывается, можно временно изменить тип команды с ОткрытиеФормы на ВызовКлиентскогоМетода.

В этом случае в модуле формы обработки вам потребуется создать экспортную процедуру:


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

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

Подводя итог, скажем: в 90% случаев проблема «незапуска» стандартных обработок, переделанных во внешние, кроется именно в свойстве Режим открытия окна. Установив его в значение Независимый, вы обеспечите стабильную работу интерфейса в рамках подсистемы «Дополнительные отчеты и обработки».

← На главную