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

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

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

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

 

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

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

7 Comments

  1. amblik

    Хотелось бы попробовать и поставить «+» , но нет возможности скачать 🙁

    Reply
  2. Andrey_74

    (1) amblik, Проверил – скачал

    А что пишет?

    Reply
  3. amblik

    (2)

    Скачать можно пользователям, а у меня нету start money

    Reply
  4. ander_

    не совсем понятна фишка. Какова скорость? Насколько сложные конструкции поддерживаются? Да и вообще какой-нибудь бы более боевой (более практически значимый) пример.

    Reply
  5. Andrey_74

    (4) ander_,

    Дополнил описание,

    про скорость не понял (расшифруйте)

    Процессор 8086 был создан в 1978 году и мог выполнять целых 0.3-0.7 миллионов операций в секунду.:)

    (VBScript ) для решения прикладных задач (расчет зарплаты и т.д.) пользователю достаточно +-*/><= если.

    Боевой пример по итогам обсуждения, если потребуется.

    Reply
  6. ander_

    (5)

    количество операций выполняемых процессором в единицу времени — это конечно красивый показатель, но вы же пишете не на ассемблере, чтобы к нему аппелировать. И даже там чтобы сложить два числа нужна не одна операция (ибо нужно занести числа в регистры, возможно выставить какие-нибудь флаги, возможно выполнить еще какие-то проверки и т.п.) но не суть. В принципе, после того как уточнили описание, я уже свое любопытство по большей мере удовлетворил :).

    ЗЫ: а возведение в степень и извлечение квадратного корня есть? 🙂

    Reply
  7. Steelvan

    Операции xor поддерживаются ? Можно использовать для RC4 без использования MSScript для xor ?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *