es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer el cálculo REDUCE en el método AMDP?

¿Cómo podemos lograr una REDUCCIÓN como la lógica siguiente dentro de un método AMDP?

lv_total = reduce tslxx9( init x type tslxx9 for lwa_out in lt_out
                              where ( companycode     = <lf_wa>-bukrs and
                                      ryear           = <lf_wa>-year  and
                                      currency        = <lf_wa>-currency
                                    )
                                      next x = x + lwa_out-amount ).
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr la misma lógica dentro de un método AMDP, podemos seguir los siguientes pasos:

    1. Crear una variable de tabla local de tipo tslxx9 e inicializarla con el valor inicial de x utilizando la sintaxis de “expresión de constructor”.
    2. Recorrer la tabla de entrada lt_out y filtrar registros basados en las condiciones mencionadas en la cláusula “where”.

    3. En cada iteración, agregar el campo amount del registro actual al valor de x.

    4. Finalmente, devolver el valor actualizado de x.

    El fragmento de código para implementar esta lógica es el siguiente:

    MÉTODO calculate_total
      POR PROCEDIMIENTO DE BASE DE DATOS PARA HDB EN LENGUAJE SQLSCRIPT
      OPCIONES SOLO-LECTURA.
    
      TYPES: BEGIN OF lty_tslxx9,
               companycode TYPE tslxx9-companycode,
               ryear TYPE tslxx9-year,
               currency TYPE tslxx9-currency,
               amount TYPE tslxx9-amount,
    
             END OF lty_tslxx9.
    
      DATA(lt_out) = SELECT * FROM tslxx9;
    
      DATA(lv_total) = (
          SELECT 
              REDUCE INIT x = tslxx9( companycode = '', ryear = '', currency = '', amount = 0 )
              PARA lwa_out EN :lt_out
              DONDE ( companycode = :lf_wa-bukrs Y 
                      ryear = :lf_wa-year Y 
                      currency = :lf_wa-currency )
              SIGUIENTE x = tslxx9( 
                  companycode = lwa_out-companycode, 
                  ryear = lwa_out-ryear, 
                  currency = lwa_out-currency, 
                  amount = x.amount + lwa_out-amount )
          DESDE DUMMY
      );
    
    FIN-MÉTODO.
    

    Nota: El código anterior asume que ya tenemos una definición de tipo de tabla “tslxx9” y una estructura de parámetro de entrada “lf_wa” con los campos “bukrs”, “year” y “currency”. La lógica dentro de la cláusula reduce actualiza dinámicamente el valor de x al agregar el campo amount de cada registro que cumple con la condición where.

Comments are closed.