gifts2017

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

Опубликовал Андрей (Andrey_74) в раздел Программирование - Внешние компоненты

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

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

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

 

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

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

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

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

См. также

Подписаться Добавить вознаграждение
Комментарии
1. amblik (amblik) 16.08.12 10:07
Хотелось бы попробовать и поставить "+" , но нет возможности скачать :(
2. Андрей (Andrey_74) 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) 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) 12.11.12 20:29
Операции xor поддерживаются ? Можно использовать для RC4 без использования MSScript для xor ?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа