Все возможные способы вызова функций по имени на клиенте 1С

20.03.23

Разработка - Механизмы платформы 1С

В стать описаны все доступные способы вызова в платформах 1с 8.2 и 8.3 функций из переменной в строке на стороне клиента.

Данная статья имеет сугубо практическое применение для разработки мобильных приложений, веб-клиента, и других современных клиентов платформы 1С. Задача вызова функций по из строки кода используется в конфигурациях очень часто, и позволяет очень гибко вести разработку систем. В статье будут рассмотрены  все доступные на момент публикации способы вызова.

 

Обзор способов:

Существующие способы: 

  1. Оператор Выполнить.
  2. Оператор Вычислить.
  3. Через механизм Описания Оповещений.
  4. Через механизм Обработчик Ожидания. 

Указанные выше способы имеют достоинства и недостатки, которые можно привести в виде следующей таблицы:

 

Способ   Достоинства     Недостатки
Оператор
Выполнить
Универсальный способ - годится для вызова процедур и функций как с экспортом, так и без него.

Недоступен для версий веб-клиента 8.2.12 и новее, т.ж. метод не безопасен - требуется дополнительный контроль параметров. Не работает на IOS.

 

Оператор
Вычислить
Простой и универсальный способ для большинства режимов по вызову функций как с экспортом, так и без него. Не работает на IOS (выпадает в исключение), и требует чтобы вместо процедур везде были только функции, и т.ж. метод не безопасен - требуется дополнительный контроль параметров.
Через механизм 
Описание Оповещений
Этот способ позволяет вызывать как экспортные функции, так и процедуры. Из недостатков пожалуй только то, что доступен на 8.3.3 и выше, и то что функция или процедура должна быть с экспортом, и ограниченное число параметров, и этот метод доступен только на клиенте.
Через механизм 
Обработчик Ожидания
Способ является рекордсменом по совместимости и режимам работы - работает начиная в версии 8.0

1. Сложная передача параметров. Для этого можно использовать только глобальные переменные.
2. Способ доступен только для вызова клиентских процедур, расположенных внутри этого модуля.

3. Необходим дополнительный контроль по подключаемым обработчикам - это для некоторых режимов (веб-клиент) является критическим.

 

После рассмотрения достоинств и недостатков, будет приведено краткое описание всех рассмотренных способов. 

Код выполнить и вычислить выглядит таким образом: 

Выполнить:

выполнить("сообщить(12)");

Вычислить:

Тест=вычислить("5+2");

Про последние 2 способа - они специфические. И основаны на особенностях использования специальных механизмов: описания оповещений для первого, а для второго - глобальных переменных на клиенте.

ВыполнитьОбработкуОповещения - код выглядит таким образом:

Описание=новый ОписаниеОповещения("ФункцияЗначение",ЭтаФорма,СписокПараметров.Параметры);
ВыполнитьОбработкуОповещения(Описание,Результат);

Последний способ - вызов не стандартный, и его код выглядит таким образом: 

&НаКлиенте
перем Аргумент1,Аргумент2;

//Вызов функции
Аргумент1=ВыбранныйЭлемент;
Аргумент2=СписокПараметров2.Параметры;
ПодключитьОбработчикОжидания("ФункцияЗначение",0.1,Истина);

Процедура ФункцияЗначение() экспорт
	//Если идет одноразовый вызов - отключаем сразу, т.к. можно повесить систему
	ОтключитьОбработчикОповещения("ФункцияЗначение");
	Значение1=Аргумент1;
	Значение2=Аргумент2;
	
КонецПроцедуры

Поэтому, из способов наилучшим образом подходят выполнить, и ВыполнитьОбработкуОповещения. Причем последний не имеет проблемы с режимами работы на всех режимах для версий выше 8.3.3. Если же нужна работа в 8.2 и 8.3 и мобильное приложение - то остается только последний метод со всеми вытекающими проблемами.

Выполнить Вычислить.

См. также

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    14571    SeiOkami    46    

111

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    8861    human_new    27    

68

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    5437    YA_418728146    6    

119

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    5029    sebekerga    54    

88

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    11037    SeiOkami    24    

90

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье рассмотрим типовую подсистему "Варианты отчетов" БСП на примере применения в универсальном отчете любой современной конфигурации.

30.05.2023    3998    quazare    4    

85

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    6049    SeiOkami    10    

133

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    13205    dsdred    48    

156
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1264 19.12.22 17:54 Сейчас в теме
Забыли о самых главных минусах Выполнить и Вычислить:
При разработке решений следует учитывать, что опасно не только непосредственное выполнение кода, написанного в режиме Предприятие, но и те места, где методами Выполнить или Вычислить исполняется код, сконструированный на основе параметров, переданных в серверные функции и процедуры. Ограничение не распространяется на код, выполняемый на клиенте.


Источник: ИТС

И забыли про серьезное ограничение ВыполнитьОбработкуОповещения: использовать можно только на клиенте
justas1c; +1 Ответить
2. user1206119 74 19.12.22 18:44 Сейчас в теме
Спасибо), возился с клиентской частью, поэтому и не обновил. Дополнил описание.
3. МихаилМ 19.12.22 23:01 Сейчас в теме
можно программно создась скд и в ней вызвать экспортный метод .
4. user1206119 74 19.12.22 23:08 Сейчас в теме
А смысл в создании? - указанных способов уже хватает.
5. svezr 5 21.12.22 23:19 Сейчас в теме
Встречал рекомендацию вместо Выполнить() использовать ОбщегоНазначения.ВыполнитьВБезопасномРежиме() - иначе, как минимум, не пройдёт аудит на Фреш.
Оставьте свое сообщение