Inicio > ABAP/4 > Obtener Tipo de cambio con BAPI_EXCHANGERATE_GETDETAIL

Obtener Tipo de cambio con BAPI_EXCHANGERATE_GETDETAIL

Caso: se desea obtener el tipo de cambio entre dos monedas.

Solución: Utilizamos el siguiente código de ejemplo:

DATA: lv_fecha_ini TYPE sy-datum,
lv_kurst TYPE kurst_curr,
lv_fcurr_ori TYPE fcurr_curr,
lv_fcurr_des TYPE tcurr_curr,
lv_ukurs TYPE ukursp,
lc_ukurs TYPE char20,
lv_mensaje TYPE string.

START-OF-SELECTION.

* Busca el último tipo de cambio guardado en la transacción OB08, a partir de la fecha del día
lv_fecha_ini = sy-datum.
lv_kurst = ‘M’.
lv_fcurr_ori = ‘USD’.
lv_fcurr_des = ‘CLP’.

PERFORM obtener_tc USING lv_fecha_ini " Fecha a partir de…
lv_kurst " Tipo de Cotización
lv_fcurr_ori " Moneda origen
lv_fcurr_des " Moneda destino
CHANGING lv_ukurs. " T/C

IF lv_ukurs IS INITIAL.
MESSAGE w001(00) WITH ‘No existe tipo cambio para:’ lv_fecha_ini.
ELSE.
WRITE lv_ukurs TO lc_ukurs.
CONDENSE lc_ukurs.
CONCATENATE ‘T/C para:’
lv_fecha_ini+6(2)
‘.’
lv_fecha_ini+4(2)
‘.’
lv_fecha_ini(4)
‘ -> 1 ‘
lv_fcurr_ori
space
‘ = ‘
lc_ukurs
space
lv_fcurr_des
INTO lv_mensaje.
MESSAGE i001(00) WITH lv_mensaje ”.
ENDIF.

FORM obtener_tc USING pi_fecha TYPE sy-datum
pi_kurst TYPE kurst_curr
pi_fcurr_ori TYPE fcurr_curr
pi_fcurr_des TYPE tcurr_curr
CHANGING po_ukurs TYPE ukursp.

DATA : l_exch_rate TYPE bapi1093_0,
l_fecha TYPE c LENGTH 10 VALUE space,
l_return TYPE bapiret1,
l_tcurr TYPE tcurr,
l_ukurs TYPE ukursp,
l_tc_encontrado TYPE c,
l_fecha_inicial TYPE sy-datum.

CLEAR l_tc_encontrado.
l_fecha_inicial = pi_fecha.

WHILE l_tc_encontrado IS INITIAL.

WRITE : pi_fecha TO l_fecha DD/MM/YYYY.

CALL FUNCTION ‘CONVERSION_EXIT_INVDT_INPUT’
EXPORTING
input = l_fecha
IMPORTING
output = l_fecha.

* Busco el registro en la tabla TCURR
SELECT SINGLE * INTO l_tcurr
FROM tcurr AS tcurr
WHERE tcurr~kurst EQ pi_kurst
AND tcurr~fcurr EQ ‘USD’
AND tcurr~tcurr EQ ‘CLP’
AND tcurr~gdatu EQ l_fecha.

IF ( sy-subrc EQ 0 ).
* Obtengo el tipo de cambio
CALL FUNCTION ‘BAPI_EXCHANGERATE_GETDETAIL’
EXPORTING
rate_type = ‘M’
from_curr = pi_fcurr_ori
to_currncy = pi_fcurr_des
date = l_fecha_inicial
IMPORTING
exch_rate = l_exch_rate
return = l_return.

* Si no lo encuentra, busco hacia atrás
IF ( l_return-type CA ‘S ‘ ).
po_ukurs = l_exch_rate-exch_rate.
l_tc_encontrado = ‘X’. " Encontré un tipo de cambio
ELSE.
l_fecha_inicial = l_fecha_inicial – 1.
ENDIF.
ELSE.
l_fecha_inicial = l_fecha_inicial – 1.
ENDIF.

ENDWHILE.

ENDFORM.

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: