Все возможные способы вызова функций по имени на клиенте 1С
В стать описаны все доступные способы вызова в платформах 1с 8.2 и 8.3 функций из переменной в строке на стороне клиента.
- Описание
- Подробнее
Описание
Данная статья имеет сугубо практическое применение для разработки мобильных приложений, веб-клиента, и других современных клиентов платформы 1С. Задача вызова функций по из строки кода используется в конфигурациях очень часто, и позволяет очень гибко вести разработку систем. В статье будут рассмотрены все доступные на момент публикации способы вызова.
Обзор способов:
Существующие способы:
- Оператор Выполнить.
- Оператор Вычислить.
- Через механизм Описания Оповещений.
- Через механизм Обработчик Ожидания.
Указанные выше способы имеют достоинства и недостатки, которые можно привести в виде следующей таблицы:
| Способ | Достоинства | Недостатки |
|---|---|---|
| Оператор Выполнить | Универсальный способ — годится для вызова процедур и функций как с экспортом, так и без него. | Недоступен для версий веб-клиента 8.2.12 и новее, т.ж. метод не безопасен — требуется дополнительный контроль параметров. Не работает на IOS.
|
| Оператор Вычислить | Простой и универсальный способ для большинства режимов по вызову функций как с экспортом, так и без него. | Не работает на IOS (выпадает в исключение), и требует чтобы вместо процедур везде были только функции, и т.ж. метод не безопасен — требуется дополнительный контроль параметров. |
| Через механизм Описание Оповещений | Этот способ позволяет вызывать как экспортные функции, так и процедуры. | Из недостатков пожалуй только то, что доступен на 8.3.3 и выше, и то что функция или процедура должна быть с экспортом, и ограниченное число параметров, и этот метод доступен только на клиенте. |
| Через механизм Обработчик Ожидания | Способ является рекордсменом по совместимости и режимам работы — работает начиная в версии 8.0 | 1. Сложная передача параметров. Для этого можно использовать только глобальные переменные. 2. Способ доступен только для вызова клиентских процедур, расположенных внутри этого модуля. |
После рассмотрения достоинств и недостатков, будет приведено краткое описание всех рассмотренных способов.
Код выполнить и вычислить выглядит таким образом:
Выполнить:
выполнить("сообщить(12)");Вычислить:
Тест=вычислить("5+2");Про последние 2 способа — они специфические. И основаны на особенностях использования специальных механизмов: описания оповещений для первого, а для второго — глобальных переменных на клиенте.
ВыполнитьОбработкуОписанияОповещения — код выглядит таким образом:
Описание=новый ОписаниеОповещения("ФункцияЗначение",ЭтаФорма,СписокПараметров.Параметры);
ВыполнитьОбработкуОповещения(Описание,Результат);Последний способ — вызов не стандартный, и его код выглядит таким образом:
&НаКлиенте
перем Аргумент1,Аргумент2;
//Вызов функции
Аргумент1=ВыбранныйЭлемент;
Аргумент2=СписокПараметров2.Параметры;
ПодключитьОбработчикОжидания("ФункцияЗначение",0.1,Истина);
Процедура ФункцияЗначение() экспорт
Значение1=Аргумент1;
Значение2=Аргумент2;
КонецПроцедуры
Поэтому, из способов наилучшим образом подходят выполнить, и ВыполнитьОбработкуОписанияОповещения. Причем последний не имеет проблемы с режимами работы на всех режимах для версий выше 8.3.3. Если же нужна работа в 8.2 и 8.3 и мобильное приложение — то остается только последний метод со всеми вытекающими проблемами.
