This is my problem: I create a NEW item, very very “standard” costing: average price = cost + profit margin = 37,5 - - - - buy 10 at 1000 € (100 each) so: average cost = 100 unit cost = 100 price = 160 - - - - sell 3 at 120 € each F9 = margin: 16.7%, CORRECT! - - - - buy 20 more at 1500 € (75 each) so: average cost = 81.48 (correct!) unit cost = 100 (!!!) price = 160 (!!!) WHY ??? in 3.60 the unit cost was recalculated and price was recalculated too! - - - - sell 21 at 100 each F9 = 0% margin (!!! real margin is 23.8% !!!) - - - - again, something worse: average cost become 16,67 (AAAAARGH) unit cost remain 100 (AAAARGH twice) - - - - In short: we need to have price that change at each receipt; THIS was one of most important reason to choose navision (for us, in Italy) it seemed evreything allright in 3.60 that we’ve tested, now we bought 3.70 We’ve told everything to our NSC, but he cannot resolve our problem he says 'cause code-unit 22 is changed too much… 1) Is it possible that noone got this problem? 2) Unit cost should not be ALWAYS copied from average cost at each change of average cost? 3) the operation adjust-costs-prices give us even more confusion, converting the average cost in “hystorical average cost”; in other words do not calculate the effective quantities. Anyone can help me? Thank in advance Gianni Capra from Italy
Hi Gianni, This exact problem, i.e. the change of average cost not immediately updating the unit cost field caused us so many headaches it is unbelievable. We have logged it through our NSC and are still awaiting a reply, but in my humble opinion this is simply not right. As long as you return the adjust cost routine from time to time your financials will work out alright, but profit margins in the order will be all over the place. The only way we managed to solve this was by running the adjust cost routine after every a post in every sales order, purchase order and item journal. This takes ages to run so our developer changed it slightly so it only runs for the items that are on the order/journal. Now every shipment/invoice immediately updates the unit cost and our two costs fields are in sync, but it is still a fudge and we await the response from MBS. With regards to your questions: 1. Well, we do… 2. Yes, this is what I would expect, although it is perhaps debatable if you turn on expected cost posting (it then also calculates on the basis of expected costs, not just invoiced values, average costs will always only use invoiced amounts) 3. Well, after creating the adjustment value entries for your COGS it recalculates using Cost Amount Actual / Invoiced Qty, so you should be able to follow it through on your example easily. I will chase MBS for an answer to our query and post it if it turns out to be useful. Regards Meint P.S. I orginallly posted another thread for this issue and it has some replies in it as well, see here: http://www.mbsonline.org/forum/topic.asp?TOPIC_ID=9412 P.P.S. the purists will tell you to only ever rely on your ledger entries in Navision, but like many people we have the need to see it in sales order/quote documents as well and as accurately as possible.
Hi Meint! I’m very happy to see that I’m not alone. First of all, thank you for your very important help. Now I must carefully read your suggests, trying to understand them very well, 'cause my english is very “basic”[;)] The same post was read by an italian collegue (Elena Bianchi) that writes: codeunit: 5804, updates unit cost only when the function UPDATEUNITCOST is called from batch: New version: WITH Item DO BEGIN IF NewStdCost <> 0 THEN “Standard Cost” := NewStdCost; IF “Costing Method” = “Costing Method”::Standard THEN “Unit Cost” := “Standard Cost” ELSE BEGIN IF CalledFromAdjustment THEN BEGIN CostCalcMgt.GetRndgSetup(GLSetup,Currency,RndgSetupRead); IF CalculateAverageInclExpCost(Item,AverageCost,AverageCostACY) THEN IF AverageCost <> 0 THEN “Unit Cost” := ROUND(AverageCost,GLSetup.“Unit-Amount Rounding Precision”); END ELSE BEGIN IF (“Unit Cost” = 0) AND (InvoicedQty > 0) AND (LastDirectCost <> 0) THEN BEGIN CALCFIELDS(“Net Invoiced Qty.”); IF (“Net Invoiced Qty.” > 0) AND (“Net Invoiced Qty.” <= InvoicedQty) THEN “Unit Cost” := LastDirectCost; END; END; END; Old version: UpdateUnitCost(VAR Item : Record Item;LocationCode : Code[10];VariantCode : Code[10];LastDirectCost : Decimal;NewStdCost : Decimal;Upda WITH Item DO BEGIN IF NewStdCost <> 0 THEN “Standard Cost” := NewStdCost; IF “Costing Method” = “Costing Method”::Standard THEN “Unit Cost” := “Standard Cost” ELSE BEGIN IF LastDirectCost <> 0 THEN “Unit Cost” := LastDirectCost; CostCalcMgt.GetRndgSetup(GLSetup,Currency,RndgSetupRead); IF CalculateAverageCost(Item,AverageCost,AverageCostACY) THEN IF AverageCost <> 0 THEN “Unit Cost” := ROUND(AverageCost,GLSetup.“Unit-Amount Rounding Precision”); END; She also suggests me to change the OnValidate on field “Calc Price/Margin” in a way that calc on averagecost instead of unitcost but remains unsolved the extremely wrong value of average cost … ------ I think that it’s very strange that this question is not dramatically solved by a patch… ------ Thank You again Gianni