//Внешняя компонента для вычисления математических выражений.
//Позволяет разработчику создавать пользовательский конструктор формул.
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
СЗ = СоздатьОбъект("СписокЗначений");
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции // глРазложить
Процедура ПриНачалеРаботыСистемы()
Если ЗагрузитьВнешнююКомпоненту (каталогИб()+"Scpt1c.dll") <> 1 Тогда
Предупреждение("Компонента Scpt1c.dll не найдена!");
КонецЕсли;
ПересчетЛ = СоздатьОбъект("Addin.srprun");
xxx=0; // ххх, ууу и т.д - любые переменные , которые разработчик может взять из базы данных (оклад, ко-во дней, СКД() и т.д.)
yyy=0;
ВВестиЗначение(xxx,"Введите х","число",10 );
ВВестиЗначение(yyy,"Введите y","число",10 );
// разработчику требуется создать редактор формул - достаточно создать справочник с текстовым полем.
// дать пользователю инструкцию, список переменных, которыми пользователь может оперировать (xxx, ууу…..) .
// можно создать сервис "добавить" с предопределенными операторами (VBScript) и зарезервированными переменными,
// который облегчает пользователю разработку формул.
// Данный текст выражения пользователь вносит, самостоятельно используя дополнительный сервис, или не…. (в справочник с текстовым полем)
// Результат_Получ - зарезервировано
ФормулаТекстНов =" Результат_Получ=0
|if xxx|Результат_Получ=yyy-xxx
|else
|Результат_Получ=xxx-yyy/100
|end if ";
// разработчик подменяет синонимы переменных на реальные значения
ФормулаТекстНов=СтрЗаменить(ФормулаТекстНов,"xxx",СокрЛП(xxx));
ФормулаТекстНов=СтрЗаменить(ФормулаТекстНов,"yyy",СокрЛП(yyy));
// разработчик с использованием внешней компоненты вычисляет выражение (получает результат)
Получим=глРазложить(СтрЗаменить(ПересчетЛ.Выполнить(ФормулаТекстНов),",","."),"|");
//Сообщает пользователю
Сообщить(получим.ПолучитьЗначение(1));
КонецПроцедуры //ПриНачалеРаботыСистемы()