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