Можно ли вызвать методы внешней обработки на сервере без контекста?

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

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

Постановка задачи

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

Решение проблемы через временное хранилище

Для того чтобы сервер мог работать с внешней обработкой, необходимо сначала поместить ее файл в хранилище, а затем «подключить» ее в серверном контексте. Рассмотрим пошаговый алгоритм реализации этого механизма.

  1. Получение файла: Сначала нам нужно получить путь к файлу внешней обработки. В управляемом приложении мы можем использовать реквизит формы, в котором хранится путь, или получить его иным способом.
  2. Помещение файла в хранилище: Используем метод ПоместитьФайл, чтобы загрузить данные обработки во временное хранилище. Это сделает файл доступным для серверных процедур.
  3. Подключение обработки: На сервере мы используем метод ВнешниеОбработки.Подключить, передавая адрес из хранилища.
  4. Вызов методов: После подключения мы можем создавать объект внешней обработки с помощью ВнешниеОбработки.Создать и вызывать нужные функции.

Пример программной реализации

Давайте проанализируем практический пример, который позволяет реализовать данный подход. Мы будем использовать &НаСервереБезКонтекста для получения макета, минимизируя передачу лишних данных:


// На клиенте инициализируем процесс
&НаКлиенте
Процедура ПолучитьМакетВнешнейОбработки()
    // Получаем имя обработки из имени формы
    ИмяОбработки = СтрРазделить(ЭтаФорма.ИмяФормы, ".")[1];
    Макет = ПолучитьМакетОбработки(ИмяОбработки, "Макет1");
КонецПроцедуры

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

Важные нюансы архитектуры

Рассмотрим подробнее, почему важно правильно выстраивать архитектуру таких решений:

Заключение

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

← На главную