RUTINAS DE CONVERSIÓN
Al convertir el contenido de un campo dynpro del formato de visualización al formato interno de SAP y viceversa, así como en la edición mediante la sentencia ABAP "WRITE", tiene lugar una conversión según el tipo de datos del campo.
En caso de que esa conversión estándar no sea adecuada, es posible sustituirla mediante la entrada de una rutina de conversión en el dominio sobre el que se basa.
Una rutina de conversión se identifica mediante un nombre de cinco posiciones y se guarda como un grupo de dos módulos de funciones. Los módulos de funciones tienen por tanto una convención para definición de nombres específica. La rutina de conversión xxxxx tiene asignados los siguientes módulos de funciones:
CONVERSION_EXIT_xxxxx_INPUT
CONVERSION_EXIT_xxxxx_OUTPUT
El módulo INPUT ejecuta la conversión del formato de visualización al formato interno y el módulo OUTPUT la conversión del formato interno al formato de visualización.
Si un campo de pantalla remite a un dominio con rutina de conversión, ésta se ejecutará automáticamente cada vez que se cree una entrada en dicho campo de pantalla o al visualizar valores mediante el mismo.
Según lo antes mencionado, para crear una rutina de conversión, debemos ir a la transacción SE37 y crear un módulo de función respetando la nomenclatura estándar.
A efectos de este manual, partimos de la hipótesis de que necesitamos tener en una tabla Z los importes con los decimales convertidos a enteros.
EJ: $ 1.25 à $125
$ 2.354 à $2354
1. Crearemos el grupo de función desde la Transacción SE80
2. Crearemos los módulos de función que tendrán la lógica de conversión
Según la nomenclatura estándar se deberán llamar de la siguiente manera:
· CONVERSION_EXIT_[NOMBRE DE LA RUTINA DE 5 CARACTERES DE LONGITUD]_INPUT
· CONVERSION_EXIT_[NOMBRE DE LA RUTINA DE 5 CARACTERES DE LONGITUD]_OUTPUT
3. Luego creamos una interfaz en el módulo de función que satisfaga nuestra necesidad
*"------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(INPUT) TYPE CURR09
*" REFERENCE(MONEDA) TYPE WAERS
*" EXPORTING
*" REFERENCE(OUTPUT) TYPE INTEGER
*" EXCEPTIONS
*" NO_CURRENCY
*"------------------------------------------
4. Hacemos la lógica que necesitamos como en cualquier módulo de función
* Fijo 2 porque es el valor default. Si la moneda no está en la tabla TCURX es porque usa 2 centavos.
DATA: vl_cant_centavos TYPE tcurx-currdec VALUE 2.
IF moneda IS INITIAL.
RAISE no_currency.
ENDIF.
* Recupero la cantidad de centavos que maneja esa moneda
SELECT SINGLE currdec
FROM tcurx
INTO vl_cant_centavos
WHERE currkey = moneda.
output = input * ( 10 ** vl_cant_centavos ).
Con esto ya disponemos de nuestra rutina de conversión para convertir en formato interno.
Haciendo lo mismo, pero con una lógica inversa, construiremos la rutina de conversión para el formato externo.
5. Creamos un dominio en el diccionario con la Transacción SE11 y le asignamos nuestra rutina de conversión que acabamos de desarrollar.