segunda-feira, 12 de fevereiro de 2024

Collect usando FOR IN GROUPS

Código exemplo abaixo, pegando dados de remessa

sELECT likp~vbeln,

       likp~ernam,

       lips~matnr,
       lips~lfimg
  INTO TABLE @DATA(lt_likp)

  FROM likp INNER JOIN lips ON lips~vbeln = likp~vbeln
 WHERE likp~lfart = 'ZVME'.

"Criar estrutura que quer fazer a somatória
TYPES: BEGIN OF ty_rem,
         matnr TYPE lips-matnr,
         lfimg TYPE lips-lfimg,
       END OF ty_rem.

TYPES ty_t_rem TYPE TABLE OF ty_rem WITH DEFAULT KEY.

DATA w_lips TYPE ty_rem.

BREAK-POINT.

DATA(lt_lips) = VALUE ty_t_rem( FOR GROUPS w_lips_x OF <ls_collect> IN lt_likp
                     GROUP BY ( matnr = <ls_collect>-matnr )
                     LET coll_line = REDUCE #( INIT ls_sum TYPE ty_rem
                                                      FOR ls_sum_likp IN GROUP w_lips_x
                                                        NEXT ls_sum-lfimg = ls_sum-lfimg + ls_sum_likp-lfimg
                                                             ls_sum-matnr = ls_sum_likp-matnr
                                                        ) IN ( coll_line ) ).
BREAK-POINT.



======================

LOOP COM GROUPS

types: begin of ty_doc,

bukrs type bukrs,

belnr type belnr_d,

gjahr type gjahr,

buzei type buzei,

end of ty_doc.


data t_doc type STANDARD TABLE OF ty_doc WITH DEFAULT KEY.


t_doc = value #(

( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 1 )

( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 2 )

( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 3 )

( bukrs = '1000' belnr = '2' gjahr = '2025' buzei = 1 )

( bukrs = '1000' belnr = '3' gjahr = '2025' buzei = 1 )

( bukrs = '1000' belnr = '3' gjahr = '2025' buzei = 2 )


( bukrs = '2000' belnr = '4' gjahr = '2025' buzei = 1 )

( bukrs = '2000' belnr = '5' gjahr = '2025' buzei = 1 )

( bukrs = '2000' belnr = '6' gjahr = '2025' buzei = 1 )


( bukrs = '3000' belnr = '7' gjahr = '2025' buzei = 1 )

( bukrs = '3000' belnr = '7' gjahr = '2025' buzei = 2 )

( bukrs = '3000' belnr = '8' gjahr = '2025' buzei = 1 )


).


BREAK-POINT.


loop at t_doc into data(ls_doc) GROUP BY ls_doc-bukrs into data(lv_bukrs).


loop at group lv_bukrs into data(lv_docs).


if 1 = 1.


endif.


endloop.


endloop.

Nenhum comentário:

Postar um comentário