quarta-feira, 26 de outubro de 2011

Soma por chave ( COLLECT )

  *&---------------------------------------------------------------------*
"  Se tiver querendo somar algo por alguma chave, usamos o 'COLLECT' ele
" funciona como um 'APPEND' mas antes de coloca o registro na tabela ele
" verifica se já existe este registro, se existir ( conforme chave ) é
" feito a adição do registro somando o ultimo campo.

" A chave são todos os campos anteriores, portanto se ele encontrar algo
" diferente neste campos isso é considerado outro registro.

report zmjcollect.

" Tipos ...
" Tipo a - Chaves ( carrid, connid, fldate )
TYPES :
  BEGIN OF ty_soma_a,
    carrid TYPE sflight-carrid,
    connid TYPE sflight-connid,
    fldate TYPE sflight-fldate,
    price  TYPE sflight-price,
  END OF   ty_soma_a,

" Tipo b - Chaves ( carrid, connid )
  BEGIN OF ty_soma_b,
    carrid TYPE sflight-carrid,
    connid TYPE sflight-connid,
    price  TYPE sflight-price,
  END OF   ty_soma_b
  .

" Tabelas internas ...
data : it_sflight TYPE TABLE OF sflight,
       it_sfsomaa TYPE TABLE OF ty_soma_a,
       it_sfsomab TYPE TABLE OF ty_soma_b
       .

" Estruturas ...
data : st_sflight TYPE sflight,
       st_sfsomaa TYPE ty_soma_a,
       st_sfsomab TYPE ty_soma_b
       .

BREAK-POINT.


" Alimentação da tabela principal
SELECT *
  from sflight
  into TABLE it_sflight
  UP TO 100 rows
  .

" Ordenando tabela principal conforme condições
sort it_sflight by carrid ASCENDING
                   connid ASCENDING
                   fldate ASCENDING
                   .

" Loop na tabela principal
  LOOP AT it_sflight INTO st_sflight.
" Movo os campos correspondentes da estrutura principal para uma estrut. aux.
" que é do mesmo tipo que a tabela do 'Collect'.
    MOVE-CORRESPONDING st_sflight to st_sfsomaa.
" Aqui tah a mágica
    COLLECT st_sfsomaa INTO it_sfsomaa.

" Movo os campos correspondentes da estrutura principal para uma estrut. aux.
" que é do mesmo tipo que a tabela do 'Collect'.
    MOVE-CORRESPONDING st_sflight to st_sfsomab.
" Aqui tah a mágica (dinovo)
    COLLECT st_sfsomab INTO it_sfsomab.

  ENDLOOP.

" Ordenando as tabelas auxiliares.
  SORT : it_sfsomaa,
         it_sfsomab
         .

  BREAK-POINT.
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário