2012-12-20 66 views
1

我需要在銷售線,購物車行和商品主數據(銷售標籤)的價格字段中顯示5位小數。 我創建了5個小數位的新EDT以代替salesLine.SalesPrice和InventTableModule.Price字段。但是一旦創建了銷售線。 SalesPrice字段中的值四捨五入爲2位小數。例如,物料主數據中的值爲10.12345,但在銷售行上它顯示爲10.12000。最後3位數字消失了。銷售線價格字段中的舍入

我從各種帖子/博客聽到多種方法,直到現在。

  1. 在RealBase EDT上將NoOfDecimals屬性更改爲5,從而有效地更改應用程序中的金額字段。我不想這樣做。

  2. 更改GL>設置>幣種>舍入規則的舍入規則。這些字段不可編輯。

  3. 我將EDT更改爲PriceDiscTable.Amount字段的5位小數。但沒有幫助。我想我的案例中的SalesPrice不是來自貿易協議。

任何我俯瞰/失蹤?

謝謝

+1

你可以在不同的單位出售?例如,如果您目前計劃以KG出售,則以克爲單位出售。這會消除修改的需要和aariste指出的問題嗎? –

+0

那麼事情就是它不是我賣的東西,我的客戶會這樣做:)但一個好點,我會和我的商業顧問討論這個問題。 – Harry

回答

1

看看PriceDisc.price()方法。即使您更改EDT中的小數或創建新的EDT方法,無論您是從貿易協議還是InventTableModule價格字段獲取價格,Dynamics都會按代碼四捨五入。

的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; 
     (...) 

的舍入類型將取決於的值匯率表格中的最後一個選項卡(舍入)。所以如果你想讓小數點正常工作,你必須修改更多的東西。

我希望這是有幫助的。

+0

感謝您的回覆。一件奇怪的事情是,當我創建銷售線時,它不初始化調試器就初始化值(qty,salesprice)。但是當我將光標移動到另一行時,調試器啓動。所以我仍然不確定價值從何而來。我的斷點是CurrencyExchangeHelper :: roundWithRuleType方法。在我的情況下,此方法中的參數_amount的值爲0,代碼返回0值。所以我不知道這個邏輯是如何工作的! – Harry

+1

嘗試在DS的ItemId修改方法中設置斷點。 –

+0

AX讓我驚訝。如果我手動嘗試使用SalesLineType類的initFromInventTable方法強制salesPrice字段中的值,那也不起作用。我可以在inventTableModule上獲得一個句柄,並將價格從Price字段中的值傳遞給SalesPrice字段。至少這是我的想法。另一件事是因爲這個方法運行在IL中,我不得不編譯成IL,但仍然沒有幫助。 – Harry

0

aariste我認爲你是指AX版本2009,因爲Currency.priceTypeRound方法在2012年不推薦使用。但我確實在Currency表中找到了類似的方法,並在2012年添加了一個名爲CurrencyExchangeHelper的新類。不幸的是,整個定價機制太複雜了,我決定不干預它。 2012年的另一個不同點是幾乎沒有方法在IL中運行,所以普通的調試器無法捕獲它們,直到更改名爲「在IL中執行業務操作」的工具中的設置。我現在正在大力推銷salesPrice並重新計算lineAmount覆蓋貿易協議定價邏輯。我完全贊成像David Lawson所建議的那樣增加價格單位,而不是更改代碼。感謝您對這個問題的看法和建議。