Внешняя компонента для вычисления математических выражений.

Программирование - Внешние компоненты

Внешняя компонента для вычисления математических выражений.
Позволяет разработчику создавать  пользовательский конструктор формул.

//Внешняя компонента для вычисления математических выражений.

//Позволяет разработчику создавать  пользовательский конструктор формул.

 

Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
СЗ = СоздатьОбъект("СписокЗначений");
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 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));

КонецПроцедуры //ПриНачалеРаботыСистемы()  

Скачать файлы

Наименование Файл Версия Размер
Внешняя компонента для вычисления математических выражений.
.rar 10,85Kb
13.08.12
15
.rar 10,85Kb 15 Скачать

См. также

Комментарии
1. amblik (amblik) 16.08.12 10:07 Сейчас в теме
Хотелось бы попробовать и поставить "+" , но нет возможности скачать :(
2. Андрей (Andrey_74) 5 16.08.12 11:20 Сейчас в теме
(1) amblik, Проверил – скачал
А что пишет?
3. amblik (amblik) 16.08.12 11:35 Сейчас в теме
(2) Andrey_74,
Скачать можно пользователям, а у меня нету start money
4. Андрей Казанцев (ander_) 17.08.12 09:13 Сейчас в теме
не совсем понятна фишка. Какова скорость? Насколько сложные конструкции поддерживаются? Да и вообще какой-нибудь бы более боевой (более практически значимый) пример.
5. Андрей (Andrey_74) 5 17.08.12 11:24 Сейчас в теме
(4) ander_,
Дополнил описание,
про скорость не понял (расшифруйте)
Процессор 8086 был создан в 1978 году и мог выполнять целых 0.3-0.7 миллионов операций в секунду.:)
(VBScript ) для решения прикладных задач (расчет зарплаты и т.д.) пользователю достаточно +-*/><= если.
Боевой пример по итогам обсуждения, если потребуется.
6. Андрей Казанцев (ander_) 17.08.12 12:20 Сейчас в теме
(5) Andrey_74,
количество операций выполняемых процессором в единицу времени - это конечно красивый показатель, но вы же пишете не на ассемблере, чтобы к нему аппелировать. И даже там чтобы сложить два числа нужна не одна операция (ибо нужно занести числа в регистры, возможно выставить какие-нибудь флаги, возможно выполнить еще какие-то проверки и т.п.) но не суть. В принципе, после того как уточнили описание, я уже свое любопытство по большей мере удовлетворил :).
ЗЫ: а возведение в степень и извлечение квадратного корня есть? :)
7. Игорь Steelvan (Steelvan) 30 12.11.12 20:29 Сейчас в теме
Операции xor поддерживаются ? Можно использовать для RC4 без использования MSScript для xor ?
Оставьте свое сообщение