Алхимия вызова функции из строки по имени в 1С на клиенте

17.12.25

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

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

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

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

Указанные выше способы имеют достоинства и недостатки, показаны ниже:

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

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

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

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

Через механизм 
Обработчик Ожидания
Способ является рекордсменом по совместимости и режимам работы - работает начиная в версии 8.0

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

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

 

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

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

Выполнить:

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

Вычислить:

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

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

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

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

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

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

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

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

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

Дополнение по оператору Выполнить от 19.10.2025

Если же все же нужно выполнить произвольный код в условиях WEB клиента и Мобильного клиента на клиентской стороне, то можно использовать для этого обработку, которая использует отдельную хитрость для достижения аналогичного функционала - описанного в статье Аналог оператора Выполнить на WEB и мобильном клиенте (включая IOS)

 

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    31581    TitanLuchs    108    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17291    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    21111    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    36887    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    32224    dsdred    106    

148

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    28267    bayselonarrend    22    

177

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    15349    dsdred    22    

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


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

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