Рано или поздно каждый разработчик сталкивается с задачей выполнения динамического кода, введенного пользователем. Например, формула расчета цены продажи.
На платформе 1С:Предприятие 8 есть два механизма, позволяющих выполнять такой код:
А) Оператор Выполнить()
Оператор Выполнить() реализован на уровне платформы и выполняет произвольный блок кода, который может включать произвольные объекты встроенного языка. Однако, код не может содержать объявления процедур и функций, а также ключевое слово Возврат
.
ВнешняяПеременная = Неопределено; ПроизвольныйКод = " |А = 100; |Б = 200; |ВнешняяПеременная = А * Б;"; Вычислить(ПроизвольныйКод); Сообщить(ВнешняяПеременная); // 20000
Как видите, возврат значений в контексте вызова возможен только через заранее предусмотренную переменную.
Б) Функция Вычислить()
Встроенная функция Вычислить() вычисляет произвольное строковое выражение, в котором заключена арифметическая или логическая операция, и возвращает результат в точку вызова:
ЦенаЗакупки = 100; ЦенаЗакупкиМин = 90; ЦенаПродажи = Вычислить("(ЦенаЗакупки + ЦенаЗакупкиМин)/2"); Сообщить("Цена продажи = " + ЦенаПродажи); // Цена продажи 95