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