Querida comunidad, muy buenas tardes, día o noche según corresponda a cada uno.
Tengo una situación que no logro resolver y queria apelar a su ayuda.
El requerimiento es: “Calcular mediante una f() Z tanto cantidad base como el importe para algunas clases de condiciones especificas del pedido de venta”.
Una vez calculados estos valores se deben registrar en la tabla de condiciones, multiplicar ambos valores para obtener el total de la condición.
Para satisfacer este requerimiento he implementado una user-exit del programa RV61AFZB el siguiente código:
READ TABLE xkomv INTO ts_xkomv WITH KEY kschl = 'ZPCU'. "Precio Unitario
IF sy-subrc = 0.
lv_indice = SY-TABIX.
CALL FUNCTION 'ZMF_SD_CONTENIDO_PAGABLE'
EXPORTING
i_vbeln = lv_vbeln
i_posnr = lv_posnr
IMPORTING
o_contenido_pagable = lv_contpag.
CALL FUNCTION 'ZMF_SD_CONVERT_CONDITIONS'
EXPORTING
i_kbetr = ts_xkomv-kbetr
i_kawrt = lv_contpag
i_meins = ts_xkomv-KMEIN
i_waers = ts_xkomv-WAERS
IMPORTING
O_KBETR = ts_xkomv-kbetr
O_KAWRT = ts_xkomv-KAWRT
O_KWERT = ts_xkomv-kwert.
MODIFY xkomv FROM ts_xkomv INDEX lv_indice TRANSPORTING KAWRT kwert.
La primera función me permite obtener el valor que quiero asignar a la variable KAWRT y el siguente código es el que me retorna dicho valor:
data: o_contenido_pagable type KAWRT,
lv_contenido type DEC_16_04_S,
lv_porcminded type DEC_16_04_S.
o_contenido_pagable = ( lv_contenido * ( lv_porcminded / 100 ) ).
Finalmente, una vez obtenido el contenido pagable se lo asigno a la estructura XKOMV en la segunda función de la siguiente manera:
TABLES: tcurx.
DATA: lv_message TYPE string,
lr_exc TYPE REF TO cx_root,
lv_base(16) TYPE p,
lv_cant_char TYPE char30.
TRY .
SELECT SINGLE * FROM tcurx
WHERE currkey = i_waers.
o_kbetr = i_kbetr.
o_kwert = i_kbetr * i_kawrt.
DATA: lv_cant TYPE BAPICUREXT,
lv_cant1 TYPE bapicurr-bapicurr,
lv_monto TYPE BP_WJT,
lv_return LIKE bapireturn.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERN_9'
EXPORTING
currency = i_waers
amount_internal = i_kawrt
IMPORTING
amount_external = lv_cant.
lv_cant1 = lv_cant.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERN_9'
EXPORTING
currency = i_waers
amount_external = lv_cant1
max_number_of_digits = 19
IMPORTING
amount_internal = lv_monto
return = lv_return.
o_kawrt = lv_monto.
CATCH cx_root INTO lr_exc.
lv_message = lr_exc->get_text( ).
ENDTRY.
El problema es que en la primera función el sistema me retorna el siguiente resultado:
Al calcular las condiciones se generan los siguientes montos:
Finalmente mi pedido se muestra de la siguente manera:
El error esta en el campo Base condición dice 273,561 y deberia ser 2735,61
Si alguien conoce una manera de resolver el tratamiento de campos tipo curr me seria de mucha ayuda.
Muchas gracias querida comunidad.