29.07.2015, 21:11 | #1 |
Участник
|
dynamics-coe: One warehouse, 2 cost models
Источник: http://blogs.msdn.com/b/dynamics-coe...st-models.aspx
============== Around 14 years ago I designed a feature called the “Dual warehouse”. The feature is scarcely documented (https://technet.microsoft.com/en-us/.../jj733298.aspx) and barely understood. It was intended to maintain 2 warehouse cost prices in parallel in countries suffering from hyperinflation. In 2002 I was even given a chance to present this feature to Erik Damgaard, at that time known not as a Danish TV celebrity but the Damgaard Data co-founder and the father of Dynamics AX. His verdict was “he understood the benefit but the approach was a bit too radical” to his taste. Indeed, the feature was not only tracking inventory cost in 2 currencies (the local accounting one and in the reporting i.e. secondary currency) but also calculating it in accordance with 2 different cost calculation models and posting the financial impact into the general ledger in an isolated GL layer to make it visible on IFRS vs. local account statements. Every inventory transaction was given an additional set of fields CostAmountSecCur* to store the value in the secondary currency. The feature was blamed for bugs, but after a while it made it into the Dynamics AX core application. A decade later the bugs are gone and the feature is still there in Dynamics AX 2012 R3 for Russia and other Eastern European countries, it has been kept on a par with the latest developments at the AX logistics core. What have been the reasons to keep it in the application?
Example 1 I am using the standard Dynamics AX 2012 R3 demo database, the RUMF company. “RUB” is both the local currency and the reporting currency there. The license configuration key Country regional specific features / Multiple countries regions / Russia / Dual warehousing must be active. Contrary to AX2009, local compliance features in Dynamics AX 2012 cannot be re-used in a “foreign” legal entity by just turning the configuration key: the primary company address must be in Russia. I leave it to the reader to hack AX and to ‘jailbreak’ this feature. Do not expect it to be very easy. Let me first highlight the business case the feature was initially intended to support. Imagine a product valued at a monthly average price. It is delivered in 2 batches at the same effective price in USD but a different equivalent in RUB: Date Business case Price USD Rate USD/RUB Primary cost price RUB (Weighted avg.) Secondary cost price USD (Weighted avg.) 15.01.2015 Purchase 100 kg 10,00 66,10 66,10 10 17.02.2015 Purchase 100 kg 10,00 62,66 64,38 10 16.05.2015 Sale 50 kg 15,00 50,01 64,38 10 The contribution margin in the ‘hard’ currency USD is 33.33%, while the contribution margin in RUB is just 14.17%. Which is the “right” one depends on the cost structure of the company. Technically, the one cannot be deducted from the other without knowing the full transaction history. In Dynamics AX a separate inventory closing run is required. This is exactly what the “Dual warehouse” feature does: it allows for 2 parallel closing runs, 2 settlement data pools and a secondary GL ledger. Example 2 Now let us explore my major case with one currency but 2 models: Date Business case Price USD Inventory cost price USD (Weighted avg.) Inventory cost price USD (Standard) Cost variation USD 15.01.2015 Purchase 100 kg 10,00 10 10 17.02.2015 Purchase 100 kg 12,00 11 10 +2 16.05.2015 Sale 50 kg 15,00 11 10 To test it, set up a new item model group. Pay attention the secondary inventory model group and the Post secondary financial parameters. The latter activates the “dual” GL posting layer. Create a new product with the tracking groups None-None. Assign a default site and a warehouse. Use the button Manage costs / Item price on the released product ribbon to assign a standard price to the item. Do not enter the price of 10.00 on the first tab page of the “Pending price” grid but on the second, in the field Secondary cost! Leave the primary standard cost to be zero. Activate the price. In the item group of the product, set an account for the “Rounding variance”. Open a purchase order to the “Vortex corporation” and post 2 PO invoices with different prices as outlined above. Open a sales order and post an AR invoice with 50 kg. Now check the inventory transactions and look at the awaited, but still stunning result, or as we say at Microsoft – awesome. Just awesome: Note the column Cost amount (cur.) meticulously tracking our standard cost as opposed to the average cost in the ordinary Cost amount column. Now open the GL voucher for the second PO invoice: Examine how the system recorded the cost variance in a separate posting layer. You may also perform the Inventory management / Periodic / Closing and adjustment vs. Closing and adjustment in currency. Here nether of the procedures is going to make any cost adjustments, since within the primary cost model the momentary cost price happens to be the same as the total average, while the secondary model should not produce any settlements at all for our product valuated at a standard cost. Conclusion The examples above have been deliberately kept simple; in reality different currencies and models lead to collisions where an inventory transaction may be settled in one model but remain ‘open’ in the other; where manual adjustments and write-offs are only applied to one of the models; where the ‘physical’ price affects the calculation. I still hope this short introduction has given you an idea what this feature can do if applied creatively. Источник: http://blogs.msdn.com/b/dynamics-coe...st-models.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
30.07.2015, 09:43 | #2 |
Участник
|
Цитата:
В общем, всем, кто будет смотреть в сторону функционала двухвалютного склада, рекомендую дважды подумать и трижды прогнать на тестовой базе все связанные операции, прежде чем решаться на такое. |
|
30.07.2015, 09:57 | #3 |
Участник
|
А, да, еще пересчет себестоимости в валюте не запускается в пакете в принципе, потому что CLR не умеет приводить тип InventCostClosingRecalcSecCur_RU к InventCostClosingRecalc: первый не является прямым или косвенным наследником второго, и такое раздолбайство с приведением типов прокатывает только в интерпретаторе Х++.
Т.е. с момента выхода AX 2012 никому из Microsoft, включая автора исходной публикации, даже в голову не пришло запустить пересчет себестоимости в валюте в пакетном режиме. Последний раз редактировалось gl00mie; 30.07.2015 в 10:21. Причина: картинка |
|
30.07.2015, 10:23 | #4 |
Moderator
|
Кстати, по отраслевой легенде, именно Коламбус (по состоянию на 2007 год примерно) имел клиента, в котором реально использовался двухвалютный склад. Ты там поспрашивай аксакалов - может его и вправду где-то внедряли.
|
|
30.07.2015, 10:24 | #5 |
Участник
|
Там еще криво проводки InventTrans расщеплялись при совместном использовании закрытия по первичной и вторичной валюте.
|
|
30.07.2015, 10:26 | #6 |
Banned
|
|
|
30.07.2015, 10:34 | #7 |
Участник
|
Мне самому довелось участвовать во внедрении этого чудо-функционала и узнать "интимные подробности" его работы
Я очень рад за вас Среди партнеров MBS, наверно, принято прогонять сквозной пример, прежде чем рекомендовать какой-то функционал? Интересно, как в вашем сквозном примере отработал пакет пересчета себестоимости в валюте? |
|
30.07.2015, 10:43 | #8 |
Banned
|
В пылу эмоций логика молчит. Что мне еще для вас прогнать в свободное от моих клиентов время? Ох уж этот русский человек со своей пассивностью и фатализмом, всегда можно указать на кого-то другого, который должен был бы сделать за вас работу.
|
|
30.07.2015, 11:34 | #9 |
Участник
|
Цитата:
Цитата:
Сообщение от fed
в 99% случаев любой баг правится самостоятельно, а потом, возможно, регистрируется в MBS. Однако, регистрация уже исправленного тобой бага в MBS, это гарантированно работа с негативным экономическим эффектом, поскольку:
1. Ты тратишь свое время (гарантированные затраты), с очень негаратированным результатом (неизвестно признают ли твой инцидент ошибкой; если признают, то неизвестно будут ли исправлять; если будут исправлять - то неизвестно в каком rollup). 2. В случае если ошибка будет таки исправлена, то с большой вероятностью, это приведет к дополнительным затратам. Скажем, если ты незарепортил баг, то скорее всего твое исправление будет поднято на новый rollup (если ты на него будешь апргрейдиться) полуавтоматически, Если же ты его зарепортил, то тебе придется заниматься исследованием того как микрософтовский подход к исправлению бага отличается от твоего собственного, курочить и свой и микрософтовской код, писать конвертеры данных для апгрейда. Соответственно, регистрация ошибок выгодна ТОЛЬКО для партнеров (которые вели и ведут много проектов) и ТОЛЬКО если речь идет о какой-то часто встречающейся ошибке, в часто внедряемом модуле. Только в этом случае, есть слабые шансы что затраты на регистрацию ошибки, когда-то отобьются. (И то не факт). Цитата:
Во-вторых, для меня прогонять ничего не надо, "я себе уже всё доказал". Но коль скоро
|
|
30.07.2015, 11:59 | #10 |
Banned
|
Мысль понял. Вы критикуете меня за недостаточную проработку блога, написанного на общественных началах вечером в свободное от работы время, и ожидаете большего качества. Это ваше право, разумеется. Более того, вы даже можете оставить там соответствующий комментарий: "bullshit!" Целью однако было не детальное тестирование функциональности, а проверка (proof of concept) определенного не предусмотренного сценария и популяризация данной функции. Потому как вещь, которая никому не нужна, совершенно точно не будет ни развиваться, ни исправляться.
К регистрации ошибок вы подходите с экономической точки зрения: "выгодно-не выгодно". Разница в европейской ментальности, если угодно, это альтруизм, улучшение мира, а не только жалобы на него. К примеру, соседка подбирает мусор не только тот, что валится на ее участке, но и на улице перед домом. В этом ключе я постараюсь проверить проблему с пакетной обработкой, а также зарегистрировать баг. Еще у меня в запасниках лежит баг с отсутствием округления в русском реестре просроченной задолженности, есть еще кое-что. Делать это придется в свободное от работы время, так что не ожидайте быстрых результатов. |
|
|
За это сообщение автора поблагодарили: gl00mie (3). |
30.07.2015, 12:06 | #11 |
Участник
|
Цитата:
Сообщение от EVGL
К регистрации ошибок вы подходите с экономической точки зрения: "выгодно-не выгодно". Разница в европейской ментальности, если угодно, это альтруизм, улучшение мира, а не только жалобы на него. К примеру, соседка подбирает мусор не только тот, что валится на ее участке, но и на улице перед домом.
Возможно, в Австрии должно быть нечто подобное. P.S. Но с темы вы красиво съехали. Завидую. |
|
30.07.2015, 12:55 | #12 |
Moderator
|
Цитата:
Сообщение от EVGL
К регистрации ошибок вы подходите с экономической точки зрения: "выгодно-не выгодно". Разница в европейской ментальности, если угодно, это альтруизм, улучшение мира, а не только жалобы на него. К примеру, соседка подбирает мусор не только тот, что валится на ее участке, но и на улице перед домом.
|
|
|
За это сообщение автора поблагодарили: EVGL (1), Logger (1), gl00mie (1). |
17.01.2017, 12:17 | #13 |
Участник
|
Коллеги,
а каким образом можно настроить разноску проводок по валютному складу на отдельных забалансовых счетах? |
|
Теги |
баг, двухвалютный склад, закрытие склада |
|
|