Konverzní rutiny v SAPu

Určitě se vám již přihodilo, že jste při prohlížení databázové tabulky pomocí Data browseru (SE16) viděli v poli hodnotu, která tam ale ve skutečnosti vůbec nebyla (tedy byla tam hodnota jiná). Což se vám následně vymstilo při přímém zápisu dané hodnoty do podmínky v selectu, který vám pak zatvrzele odmítal cokoliv vrátit.
Tento rozdvojený pohled na data mají na svědomí tzv. konverzní rutiny (conversion routines/exits). Jedním z nejčastějších případů aplikace konverzních rutin jsou tzv. leading zeros, neboli úvodní nuly doplňované na začátek textových řetězců obsahujících výhradně číselné znaky tak, aby hodnota v poli byla zarovnána zprava. Kupříkladu pole materiál (MATNR), dodavatel (LIFNR), výrobní zakázka (AUFNR) atd. Obsahuje-li však pole i jiné než číselné znaky (např. materiál MAT123), pak k žádné konverzi nedochází.
Z technického hlediska jsou konverzní rutiny reprezentovány dvěma funkčními moduly (jedním vstupním a druhým výstupním), které jsou přiřazeny k doméně datového typu v ABAP Dictionary (SE11). Vstupní funkční modul se volá pokaždé, když uživatel zadá hodnotu do vstupního pole, např. vyplní číslo dodavatele 32654. O doplnění úvodní nul se pak postará funkční modul CONVERSION_EXIT_ALPHA_INPUT, který zkonvertuje zadanou hodnotu na interní formát 0000032654. Opačnou funkcionalitu zajišťuje výstupní funkční modul CONVERSION_EXIT_ALPHA_OUTPUT, který před zobrazením hodnoty na výstupu nadbytečné nuly zase odebere .
Další příkladem užití konverzních rutin je pole/proměnná typu datum. Datum je numerický řetězec s délkou osmi znaků ve tvaru YYYYYMMDD (takto je také uložen v databázi). Navenek se však nejčastěji tváří jako DD.MM.YYYYY nebo MM/DD/YYYYY, a to v závislosti na uživatelském nastavení (viz tab. USR01, pole DATFM). Pokud jej uživatel v tomto tvaru zadá do vstupního pole, SAP si jej automaticky zkonvertuje na interní formát YYYYYMMDD. A naopak pole s datovým typem datum zobrazí na výstupu v odpovídajícím uživatelském formátu.
Nedávno jsem potřeboval napsat jednoduchý select, který by četl měnové kurzy z tabulky TCURR dle zadaného data. Prkotina, řeklo by se. Ne tak docela. Ukázalo se totiž že datum je v tabulce uloženo v jakémsi obskurním formátu, ačkoliv Data browser zarputile tvrdil něco jiného. Naštěstí jsem si brzy vzpomněl na konverzní rutiny a záhada byla vyřešena.
Inu i takovéto legrácky patří k životu ABAP programátora. Může se vám to nelíbit, můžete s tím nesouhlasit… ale to je tak asi všechno, co s tím můžete dělat.







[1] zoloft
Ahoj,díky za dobrý článek. Čeká mě úvod do ABAP a programování SAP,tak od tebe zídkávám předstvu o co jde.