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