Варіанти отримання значення елементарного (серверного) вираження на клієнтській стороні (в тому числі

При роботі в режимі керованого застосування, іноді на клієнтській стороні доводиться отримувати результат "елементарного виразу", обчислити яке можна тільки на сервері. В "класичної" реалізації це може призводити до великої кількості здвоєних процедур / функцій (одна на клієнті - викликає іншу на сервері). У статті розглянуті 4 варіанти вирішення цього завдання.

Припустимо на формі потрібно в залежності від інтерактивного зміни прапорця встановлювати значення будь-якого реквізиту, це можна сделаеть так:

Варіант 1:
НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
ФлажокПріІзмененііНаСервере ();
КонецПроцедури

Варіант 2:
НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
Об'єкт. Статус = ВернутьСтатусНаСервере ();
КонецПроцедури

Строго кажучи, обидва ці варіанти "неправильні", тобто Працюватимуть вони звичайно ж будуть, але нееффентівно, так само неефективний наступний варіант (є в УТ11):

Варіант 3:
НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
Об'єкт. Статус = РаботаСФомуламі. ВичіслітьФормулу ( "Перечісленія.СтатусиЗаказовКліентов.КОбеспеченію");
КонецПроцедури

Тут виробляється вивов стандартної серверної функції, реалізованої в загальному модулі УТ11 РаботаСФомуламі. ВичіслітьФормулу. Її реалізація:

Функція ВичіслітьФормулу (ТекстРасчета) Експорт
Повернення Обчислити (ТекстРасчета);
КонецФункціі

Функція платформи, яка дозволяє зробити те ж саме, але з одного боку без прив'язки до конфігурації, з іншого кешіруя отримане значення:

Варіант 4:
НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
Об'єкт. Статус = ПредопределенноеЗначеніе ( "Перечісленіе.СтатусиЗаказовКліентов.КОбеспеченію");
КонецПроцедури

Останній варіант з одного боку дозволяє не вдаватися до збільшення коду, за рахунок виклику на клієнті, з іншого кешируєт отримане значення на рівні платформи. Є у нього і незначний недолік, який, втім, виникає при "негарному стилі" програмування, наприклад таке:

НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
Об'єкт. Група = РаботаСФомуламі. ВичіслітьФормулу ( "Справочнікі.Партнери.НайтіПоКоду (" "00002" ")");
КонецПроцедури

Таке значення не можна обчислити використовуючи Варіант 4. але правильніше в цьому випадку використовувати зумовлений елемент довідника, тоді Варіант 4 цілком можна застосувати, наприклад так:

НаКліенте
Процедура ФлажокПріІзмененіі (Елемент)
Об'єкт. Група = ПредопределенноеЗначеніе ( "Справочнік.Партнери.Наше Підприємство");
КонецПроцедури

Коротко переваги (+) / недоліки (-) кожного варіанта