31.01.2015, 04:39 | #1 |
Участник
|
Где в AX2012 используются выражения арифметические
Например, можно написать, например (A + B) * C
короче что-то типа формул чтобы вводить можно было видел давно как-то и забыл, где p.s. не то, что в Product Configuration |
|
31.01.2015, 08:15 | #2 |
MCT
|
в ценообразовании по атрибутам партий
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
31.01.2015, 09:05 | #3 |
Участник
|
спасибо
а есть еще места? я вроде в другом месте видел где-то Последний раз редактировалось lvan; 31.01.2015 в 09:09. |
|
31.01.2015, 09:45 | #4 |
Участник
|
В Финансовых отчётах. Колонка есть расчётная. Не помню, как сейчас в 2012 называется, в 2009 колонка с типом Расчёт.
|
|
31.01.2015, 19:54 | #5 |
Участник
|
Не очень понятен вопрос - что имеется ввиду "где можно написать". В коде или в интерфейсе?
В X++ в общем-то в любом месте кода. В конфигураторе продукции, в ГФО - пожалуйста (но в топике указано что помимо конфигуратора). В evalBuf можно. Ну и, в общем, в интерфейсе практически в любом поле можно использовать выражения. |
|
31.01.2015, 21:23 | #6 |
Участник
|
evalBuf, runBuf и XppCompiler.execute - не секурно, исключается
юзеры там напишут drop database и привет Trustworthy Computing надо короче хочу калькулятор, но с поддержкой переменных и функций причем функции свои чтобы можно было добавлять, например в специальном классе чтобы программист написал функцию, и её пользователи могли использовать в формулах Последний раз редактировалось lvan; 31.01.2015 в 21:31. |
|
31.01.2015, 21:43 | #7 |
северный Будда
|
В 3.0 так можно было делать в зарплатных счётчиках
В 2012 русской зарплаты не видел, но не думаю, что сильно изменилось
__________________
С уважением, Вячеслав |
|
31.01.2015, 22:00 | #8 |
Участник
|
а подскажите путь в меню или в AOT
а то я с payroll не знаком |
|
31.01.2015, 22:11 | #9 |
Участник
|
Насчет переменных что-то не припоминается (опять же исключая конфигуратор продукции), а функции, созданные в отдельным классе, а используемые пользователями есть в стандартном фильтре начиная с DAX2009. Какой-то убогий интерпретатор был в Ax3.0, в том функционале, который был до появления AIF (не помню как это называлось), но там что-то уж очень простое.
|
|
01.02.2015, 22:57 | #10 |
Участник
|
Если хочется добавлять свои функции, то и интерпретатор надо будет писать свой, а не какой-то уже имеющийся. В инете по запросу expression evaluator можно найти вагон и маленькую тележку примеров, типа этого.
|
|
01.02.2015, 23:10 | #11 |
Участник
|
ГФО
Счетчики в зарплате и налогах пересчет складских единиц
__________________
|
|
02.02.2015, 13:24 | #12 |
Молодой, подающий надежды
|
Класс ProdMathEvaluator дергается, например, из классов PDSAdvancedPricing* (форма PDSCalculationTable)
__________________
Кононов Пётр |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
03.02.2015, 04:43 | #13 |
Участник
|
Интерпретатор напишу. Не хочу парсер писать - вроде есть в dll
надо только понять, как его использовать |
|
03.02.2015, 08:37 | #14 |
Axapta Retail User
|
Счетчики в зарплате
Последовательности расчета - Счетчики |
|
03.02.2015, 09:11 | #15 |
Участник
|
Xlnt framework это называется
|
|
18.03.2015, 03:33 | #16 |
Участник
|
Цитата:
выглядит примерно так: X++: private anytype evalBinary(Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.BinaryExpression _expr) { switch (true) { case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.AddExpression : return this.evalExpression(_expr.get_Left()) + this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.SubtractExpression : return this.evalExpression(_expr.get_Left()) - this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.MultiplyExpression : return this.evalExpression(_expr.get_Left()) * this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.DivideExpression : return this.evalExpression(_expr.get_Left()) / this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.OrExpression : return this.evalExpression(_expr.get_Left()) || this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.AndExpression : return this.evalExpression(_expr.get_Left()) && this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.EqualExpression : return this.evalExpression(_expr.get_Left()) == this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.NotEqualExpression : return this.evalExpression(_expr.get_Left()) != this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.LessThanExpression : return this.evalExpression(_expr.get_Left()) < this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.LessThanOrEqualExpression : return this.evalExpression(_expr.get_Left()) <= this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.GreaterThanExpression : return this.evalExpression(_expr.get_Left()) > this.evalExpression(_expr.get_Right()); case _expr is Microsoft.Dynamics.AX.Framework.Tools.CodeUpgradeTool.Parser.GreaterThanOrEqualExpression : return this.evalExpression(_expr.get_Left()) >= this.evalExpression(_expr.get_Right()); default: type = _expr.GetType(); throw error(strFmt("Expression %1 not implemented", CLRInterop::getAnyTypeForObject(type.get_Name()))); } } |
|
|
|