Problema al actualizar valores de condiciones VA02

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:

image

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.

Hola,
En ciertos programas que tuve que realizar miramos este campo de la tabla KONV
image

Y en el caso que el KRECH sea ‘A’ tenemos que multiplicarlo o dividirlo por 10.
Quizás tengas que verificar ese campo y dependiendo del valor tengas que multiplicarlo por 10.
Saludos!

2 Me gusta

Gracias master tremendo tips que te mandaste, estoy caso seguro que la solución pasa por esto, voy a implementar y comento!!

Gracias miles

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.