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

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

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

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

Причина проблемы: Клиент-серверное разделение

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

ВнешниеОбработки.Создать("D:\ИмяОбработки.epf").Отладить();

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

Для корректного решения этой задачи мы должны разделить процесс на два этапа:

  1. Передать файл обработки на сервер и подключить его с помощью менеджера внешних обработок.
  2. Вернуть управление на клиентскую сторону и открыть нужную форму с помощью клиентских методов платформы.

Решение: Программное подключение и открытие формы на клиенте

Давайте рассмотрим по шагам классический и надежный алгоритм программного запуска внешней обработки из файла на диске.

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


&НаКлиенте
Процедура ОткрытьВнешнююОбработку(Команда)
    
    Перем ИмяОбработки, АдресХранилища;
    
    АдресХранилища = "";
    // Помещаем файл обработки во временное хранилище на сервере
    Если НЕ ПоместитьФайл(АдресХранилища, "D:\ИмяОбработки.epf", , Ложь) Тогда
        Возврат; // Пользователь отказался или файл недоступен
    КонецЕсли;
    
    // Подключаем обработку на сервере и получаем ее внутреннее имя
    ИмяОбработки = ПодключитьВнешнююОбработкуНаСервере(АдресХранилища);
    
    // Формируем путь к форме и открываем ее на клиенте
    ПутьКФорме = "ВнешняяОбработка." + ИмяОбработки + ".Форма.Форма";
    ОткрытьФорму(ПутьКФорме);

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

&НаСервере БезКонтекста
Функция ПодключитьВнешнююОбработкуНаСервере(Знач АдресХранилища)
    
    // Регистрируем внешнюю обработку в системе
    Возврат ВнешниеОбработки.Подключить(АдресХранилища);

КонецФункции

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

Учет механизмов безопасности платформы 8.3

При использовании вышеописанного метода на современных версиях платформы 1С:Предприятие 8.3 вы можете столкнуться с защитными механизмами системы:

  1. Защита от опасных действий: При программном подключении внешних файлов платформа выдает интерактивное предупреждение безопасности. Если код выполняется в фоновом задании, это вызовет аварийное завершение процесса. Чтобы обойти это ограничение, необходимо использовать специальный параметр защиты:
    
    ПараметрыЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
    ПараметрыЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
    
    // Передаем параметры защиты четвертым параметром метода Подключить
    ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Ложь, ПараметрыЗащиты);
    
  2. Ограничения безопасного режима: По умолчанию внешние обработки запускаются в безопасном режиме, блокирующем работу с COM-объектами, файловой системой сервера и привилегированным режимом. Если вашей обработке требуются полные права, передавайте значение Ложь третьим параметром в метод Подключить().

Использование стандартных механизмов БСП

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

Для открытия формы обработки через БСП достаточно вызвать методы общего модуля ДополнительныеОтчетыИОбработкиКлиент, например, процедуру ВыполнитьОткрытиеФормыОбработки(), передав туда ссылку на элемент справочника дополнительных обработок.

Особенности отладки внешних обработок

Часто программисты сталкиваются с тем, что точки останова в модулях внешней обработки не срабатывают при программном вызове. Это происходит из-за того, что платформа копирует бинарный код во временную директорию сервера, теряя связь с исходным файлом .epf на диске.

Практический совет: Чтобы отладчик стабильно перехватывал управление в точках останова, перед запуском программного кода откройте этот же файл обработки вручную через главное меню 1С:Предприятие: Файл -> Открыть. Платформа сопоставит сеанс отладки с физическим файлом на диске, и отладка будет работать корректно.

← На главную