středa 27. února 2013

Práce s více měnami v Microsoft CRM

Práce s více měnami je u firem v malé a otevřené ekonomice, jako je ta česká, častým požadavkem na CRM. Microsoft Dynamics CRM práci s více měnami podporuje. Snaží se přitom tvářit navenek velmi jednoduše a transparentně, přestože procesy na pozadí úplně triviální nejsou. Jejich lepší pochopení umožňuje eliminovat množství omylů a překvapení při používání CRM. Následující obsah článku je volným překladem anglického originálu na toto téma: http://andrewbschultz.com/2011/08/15/crm-2011-multi-currency-limitations-and-workarounds-part-1-exchange-rate-updates/

Již Microsoft Dynamics CRM 4.0 představilo podporu více měn. Funkcionalita vypadala následovně:
  • Pro organizaci byla zvolena „Základní měna“ během instalace.
  • Uživatel si mohl změnit jeho „Výchozí měnu“, což znamenalo, že peněžní částky zadával defaultně v této měně, ač ji mohl manuálně pro každý záznam změnit.
  • Pokud uživatel zadal peněžní údaj v jiné než základní měně systému, systém vypočítal vyjádření této částky i v základní měně a uložil tuto hodnotu také – do dalšího pole, které uživatel běžně nevidí. To umožňuje vytvářet souhrnné reporty nad záznamy ve více měnách (např. tržby z celého světa).
Tohle vypadá docela dobře, že? V teoretické rovině není, co od toho požadovat více. Bohužel v reálném světě, jak to obvykle bývá, některá úskalí tohoto systému existují.

Změny směnných kurzů

Všem je jasné, že kurzy měn, u všech normálních zemí, kolísají. Ač je to neustálý proces, firmy obvykle aktualizují kurzy jednou týdně nebo jednou měsíčně. To obvykle stačí. Směnné kurzy jsou v CRM uloženy v záznamech entity Měna.



Velmi jednoduché. Změníte jednou za měsíc kurzy všech používaných měn. Ale co se stane s již vytvořenými záznamy, na kterých je měna použita?

Například máme vytvořenou Příležitost v Eurech. Co se s ní stane, když koruna posílí? Nejdříve si popišme, jak jsou na formuláři zpracovány měny a kurzy. Každý formulář, na kterém je pole typu měna (peněžní částka), obsahuje 4 pole zahrnuté do jejich obsluhy.
  1. Vlastní pole s peněžní hodnotou.
  2. K němu párové pole, v němž bude tato hodnota vyjádřena v základní měně systému, a které je vytvořeno automaticky pro každé peněžní pole na formuláři.
  3. Měna – lookup pole na entitu Měna. Přidá se automaticky na každou entitu, která obsahuje pole s peněžní hodnotou.
  4. Směnný kurz – desetinné číslo, který vyjadřuje směnný poměr mezi základní měnou a měnou zvolenou pro tento záznam.
Důležité je si všimnout, že záznam má pouze jedno pole Měna a jedno pole Kurz.

 
 
Např. při vytvoření příležitosti v jiné než základní měně proběhne následující scénář:
  1. Nastavím měnu na Euro.
  2. Zadám částku do daného pole, např. Odhadované výnosy.
  3. Uložím záznam. Během ukládání proběhne:
    1. Hodnota Kurzu je naplněna aktuální hodnotou kurzu z entity Měna.
    2. Je vypočítána hodnota odhadovaných výnosů v korunách a uložena do druhého pole.
    3. Obojí proběhne bez ohledu na to, zdali jsou pole měna a částka v základní měně na formuláři nebo ne.
Poté dojde ke zmíněnému posílení koruny. Co se stane s příležitostí? Nic. Alespoň ne okamžitě. Pole Kurz na záznamu není automaticky změněno při změně kurzu měny (nastaveném na Měně). Ale jakmile změním jakékoliv peněžní pole na záznamu, je při uložení záznamu dotažena nová hodnota kurzu a přepočítány částky v základní měně pro všechna peněžní pole. K tomuto přepočtu dojde také při změně stavu záznamu (jako např. de/aktivace záznamu).

Proč tomu tak je?

Zdálo by se, že bude lepší, aby se přepočítaly hodnoty všech otevřených záznamů okamžitě po centrální změně kurzu v systému. Aby k přepočtu došlo co nejdříve, protože měníme pouze vyjádření částky v základní měně. Nijak to neovlivní skutečné částky uvedené na fakturách, nabídkách a dalších. Proč tedy nedojde ke změně co nejdříve, abychom měli co nejdříve aktuální data pro reportování?

Nyní jde pouze o domněnky, ale dobré důvody pro tento mechanismu existují. Jedním z nich je, že nechcete, aby docházelo k aktualizaci záznamů, které se již nemají měnit – např. faktury z minulého roku. Byla vyfakturována daná částka v cizí měně, což pro nás znamenalo určitý výnos v naší měně. Současná změna kurzu na tom již zpětně nic nezmění. Proto k tomu nedochází ani v systému.
Můžete namítnout, že by mohlo dojít pouze k aktualizaci aktivních záznamů. To by však kladlo přílišné nároky na uživatele. Víme sice, že nepoužívané ukončené záznamy by měly být deaktivovány, uživatelé to ale bohužel ne vždy dělají.

Dalším argumentem může být, že u velkých firem by změna mohla ovlivnit třeba desetitisíce záznamů (hlavičky i řádky faktur, nabídek, poptávek, příležitostí ad.). Taková změna by se určitou dobu prováděla, musela by běžet asynchronně, po dobu provádění by byla data nekonzistentní, otázkou jsou i zásahy do záznamů během provádění této změny.




V souhrnu zopakujme, co je vhodné zapamatovat si z článku:
  • Jeden záznam může obsahovat více peněžních polí, ale všechny pouze v jedné měně.
  • Pro účely souhrnů nad více záznamy jsou všechny částky uloženy ještě v základní měně systému.
  • K přepočtu částek do základní měny nedochází okamžitě při změně kurzu měny, ale až po úpravě některého z peněžních polí na záznamu nebo při změně jeho stavu.
K tomu ještě připojuji:
  • Změna stavu záznamu provede přepočet hodnot v základní měně pro všechna peněžní pole na záznamu, ale již to neprovede pro podřazené položky/produkty (Příležitost, Nabídka, Objednávka, Faktura). To může být v některých případech nešťastné – vznik nekonzistencí (součet výnosů jiný než celkový výnos) nebo náročné na opravu (po položkách).
  • Na těchto záznamech je také tlačítko Přepočítat. Lze pomocí něho znovu přepočítat Celkovou částku. Celková částka se přepočítá i při uložení. Aby se záznam uložil, musí se změnit některé z polí. Tlačítkem Přepočítat přepočet vynutíme i bez změny pole. Tlačítko Přepočítat pouze obnovuje Celkovou částku, ale přepočet do základní měny přímo nespouští. Pouze pokud se přepočtem změní Celková částka, je změněno peněžní pole a obnoví se kurz měny atd. Pokud je součet stejný, nezmění se nic. Navíc tlačítko v žádném případě neovlivní cokoliv na jednotlivých položkách.



Customizátoři CRM v češtině musí dávat pozor ještě na nevhodně volenou terminologii, které jsem se při překladu tohoto článku snažil vyhnout.

V CRM je systémová entita „Měna“ („Currency“), jejíž záznamy představují jednotlivé měny používané ve firmě (např. CZK, EUR, USD). Na záznamu Měny definuje její název, symbol, počet používaných desetinných míst a především směnný kurz (pozor, může být i v nepřímém tvaru, tj. 1 CZK = 0,04 EUR).

Problémem je, že typ pole na formuláři, které má obsahovat peněžní částku, je bohužel nazváno také „Měna“ (anglicky „Money“), ačkoliv přesnější by bylo „Peníze“, „Částka“, „Peněžní hodnota“ nebo něco podobného.

Žádné komentáře:

Okomentovat