在salesLine价格字段中舍入

时间:2012-12-20 07:05:38

标签: axapta dynamics-ax-2012 ax

我需要在销售线,净额行和物料主数据(销售标签)的价格字段中显示5个小数位。 我创建了5个小数位的新EDT来替换salesLine.SalesPrice和InventTableModule.Price字段。但是一旦创建了销售线。 SalesPrice字段中的值四舍五入为2位小数。例如,Item master中的值为10.12345,但在销售线上显示为10.12000。最后3位数字消失了。

到目前为止,我已经从各种帖子/博客中听到了多种方法。

  1. 要在RealBase EDT上将NoOfDecimals属性更改为5,可以有效地更改应用程序中的Amount字段。我不想这样做。

  2. 更改GL上的舍入规则>设置>货币>舍入规则。这些字段不可编辑。

  3. 我将PriceDiscTable.Amount字段的EDT更改为5位小数。但没有帮助。我想我的案例中的SalesPrice并非来自贸易协议。

  4. 我忽视/遗失的任何事情?

    由于

2 个答案:

答案 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建议不要改变代码。感谢你们对这个问题进行调查并提出建议。