我需要在销售线,净额行和物料主数据(销售标签)的价格字段中显示5个小数位。 我创建了5个小数位的新EDT来替换salesLine.SalesPrice和InventTableModule.Price字段。但是一旦创建了销售线。 SalesPrice字段中的值四舍五入为2位小数。例如,Item master中的值为10.12345,但在销售线上显示为10.12000。最后3位数字消失了。
到目前为止,我已经从各种帖子/博客中听到了多种方法。
要在RealBase EDT上将NoOfDecimals属性更改为5,可以有效地更改应用程序中的Amount字段。我不想这样做。
更改GL上的舍入规则>设置>货币>舍入规则。这些字段不可编辑。
我将PriceDiscTable.Amount字段的EDT更改为5位小数。但没有帮助。我想我的案例中的SalesPrice并非来自贸易协议。
我忽视/遗失的任何事情?
由于
答案 0 :(得分:1)
看看PriceDisc.price()方法。即使您在EDT中更改小数或创建新的EDT方法,无论您是从贸易协议还是从InventTableModule价格字段中获取价格,动态都会按代码对价格进行舍入。
PriceDisc.price()方法稍后将调用Currency.priceTypeRound(...)方法,将其舍入为2位小数:
private Price priceTyperound(Price _price,
PriceRoundOff _unit)
{
Price price;
real decimals;
;
switch (this.RoundOffTypePrice)
{
case RoundOffType::Ordinary:
if (_unit)
price = round(_price, _unit);
else
price = round(_price,0.01);
break;
(...)
舍入类型取决于汇率表单中最后一个标签(舍入)的值。因此,如果希望小数正常工作,则必须修改更多内容。
我希望这很有帮助。
答案 1 :(得分:0)
aariste我认为你正在引用AX版本2009,因为Currency.priceTypeRound方法在2012年已被弃用。但我确实在Currency表和2012年添加的名为CurrencyExchangeHelper的新类中找到了类似的方法。可悲的是,整个定价机制是太复杂了,我决定不干涉它。 2012年的另一个不同之处是很少有方法在IL中运行,因此正常的调试器无法捕获它们,直到您更改名为“在IL中执行业务操作”的工具中的设置。我现在正在强行推动salesPrice并重新计算lineAmount,覆盖贸易协议定价逻辑。我完全赞成增加价格单位,因为David Lawson建议不要改变代码。感谢你们对这个问题进行调查并提出建议。