COLLECT


O comando collect é usado para fazer a compressão dos dados (idem o comando APPEND), tendo como principal diferença que não permite ter duas chaves para valores diferentes, collect do inglês para o português é recolha, significando recolher ao encontrar um dado igual. O  dado igual significa uma chave para a tabela interna, podendo ser qualquer tipo de dado, por default o primeiro campo da tabela interna é a chave primaria da tabela Entendendo o que o collect faz realmente: Exemplo: 

DATA: BEGIN OF T_COLLECT OCCURS 0,

               NOME(20)       TYPE C, 

              DESCRICAO(20) TYPE C,  

             VALOR          TYPE I,  

      END OF T_COLLECT. 

DATA  WA_T_COLLECT LIKE T_COLLECT.

Temos a tabela T_COLLECT contendo três campos, quando carregamos os valores para a tabela primeiro é carregado uma HEADER TABLE ou uma WORK AREA, para depois anexar estes valores para a tabela interna. Ex.:Carregando a HEADER TABLE  

       T_COLLECT-NOME      = ‘UDERSON’. 

       T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’.

       T_COLLECT-VALOR     = 100.

 Carregando a WORK AREA: 

        WA_T_COLLECT-NOME      = ”.

        WA_T_COLLECT-DESCRICAO = ‘TESTE 3 DO COLLECT’.

        WA_T_COLLECT-VALOR     =  300. 

 Após carregar a HEADER TABLE ou a WORK AREA, é necessário anexar os valores para a tabela interna, por dedução usamos o comando APPEND, que transfere os dados da HEADER ou da WORK AREA para tabela interna, criando a cada APPEND uma nova linha de dados, o comando COLLECT como já citado faz a mesma coisa, porem com uma diferença, quando a chave que está na HEADER ou na WORK AREA é encontrada ja inserida na tabela interna o comando COLLECT verifica todos os campos numéricos, somando cada campo relativo. Então o que realmente o comando COLLECT faz é  encontrar valores chaves iguais e somar os campos numéricos, quando a chave é igual porem os campos textos são diferentes ele cria uma nova linha de valores, onde as somas dos valores numéricos não são realizadas por conter dados textos diferentes. Carregando a HEADER TABLE anexando os valores conforme a explicação.

         T_COLLECT-NOME      = ‘UDERSON’.

         T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’. 

         T_COLLECT-VALOR     = 100.

         COLLECT T_COLLECT.

  Carregando a WORK AREA e transferindo os valores para a tabela interna confoem a explicação : 

        WA_T_COLLECT-NOME      = ”.

        WA_T_COLLECT-DESCRICAO = ‘TESTE 3 DO COLLECT’.

        WA_T_COLLECT-VALOR     =  300.

       COLLECT WA_T_COLLECT INTO T_COLLECT. 

Ob.: Quando os valores são transferidos apartir de uma WORK AREA, a HEADER da TABELA INTERNA não é carregada.    

Exemplo:

REPORT  Z_SINTAXE_GERAL.

 DATA: BEGIN OF T_COLLECT OCCURS 0, 

              NOME(20)       TYPE C, 

              DESCRICAO(20)  TYPE C,

               VALOR          TYPE I, 

              TOTAL          TYPE I,

        END OF T_COLLECT. 

DATA  WA_T_COLLECT LIKE T_COLLECT.

 DATA: CONT TYPE I VALUE 1.

 T_COLLECT-NOME      = ‘UDERSON’.

T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’.

T_COLLECT-VALOR     = 100.

T_COLLECT-TOTAL     = 200.

COLLECT T_COLLECT.

T_COLLECT-NOME      = ‘LEANDRO’. 

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’.

T_COLLECT-VALOR     = 1000.

T_COLLECT-TOTAL     = 200.

COLLECT T_COLLECT.

T_COLLECT-NOME      = ‘UDERSON’.

T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’.

T_COLLECT-VALOR     = 400.

T_COLLECT-TOTAL     = 200.

COLLECT T_COLLECT.

T_COLLECT-NOME      = ‘LEANDRO’.

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’.

T_COLLECT-VALOR     = 1300.

T_COLLECT-TOTAL     = 200.

COLLECT T_COLLECT

T_COLLECT-NOME      = ‘GUILHERME’.

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’.

T_COLLECT-VALOR     =  300. 

T_COLLECT-TOTAL     = 200. 

COLLECT T_COLLECT.

WA_T_COLLECT-NOME      = ”. 

WA_T_COLLECT-DESCRICAO = ‘TESTE 3 DO COLLECT’. 

WA_T_COLLECT-VALOR     =  300. 

WA_T_COLLECT-TOTAL     = 200. 

COLLECT WA_T_COLLECT INTO T_COLLECT.

WA_T_COLLECT-NOME      = ”.

W_T_COLLECT-DESCRICAO = ‘TESTE 3 DO COLLECT’. 

WA_T_COLLECT-VALOR     =  300.

WA_T_COLLECT-TOTAL     = 200. 

COLLECT WA_T_COLLECT INTO T_COLLECT.

WA_T_COLLECT-NOME      = ”. 

WA_T_COLLECT-DESCRICAO = ‘TESTE 3 DO COLLECT’. 

WA_T_COLLECT-VALOR     =  300. 

WA_T_COLLECT-TOTAL     = 200. 

COLLECT WA_T_COLLECT INTO T_COLLECT.

LOOP AT T_COLLECT. 

   WRITE: ‘NOME: ‘, T_COLLECT-NOME, ‘ DESCRIÇÃO: ‘,  T_COLLECT-DESCRICAO, ‘ VALOR: ‘, T_COLLECT-VALOR, ‘TOTAL:’, T_COLLECT-TOTAL.

     SKIP. 

ENDLOOP.

T_COLLECT-NOME      = ‘UDERSON’. 

T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’. 

T_COLLECT-VALOR     = 100. 

T_COLLECT-TOTAL     = 200.

APPEND T_COLLECT.

T_COLLECT-NOME      = ‘LEANDRO’. 

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’. 

T_COLLECT-VALOR     = 1000. 

T_COLLECT-TOTAL     = 200.

APPEND T_COLLECT.

T_COLLECT-NOME      = ‘UDERSON’. 

T_COLLECT-DESCRICAO = ‘TESTE 1 DO COLLECT’. 

T_COLLECT-VALOR     = 400. 

T_COLLECT-TOTAL     = 200.

APPEND T_COLLECT.

T_COLLECT-NOME      = ‘LEANDRO’. 

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’. 

T_COLLECT-VALOR     = 1300. 

T_COLLECT-TOTAL     = 200.

APPEND T_COLLECT.

T_COLLECT-NOME      = ‘GUILHERME’. 

T_COLLECT-DESCRICAO = ‘TESTE 2 DO COLLECT’. 

T_COLLECT-VALOR     =  300. 

T_COLLECT-TOTAL     = 200.

APPEND T_COLLECT.

LOOP AT T_COLLECT.

    IF ( SY-TABIX > 4 ). 

    IF ( CONT = 1 ).

        ULINE. 

    ENDIF. 

WRITE: ‘NOME: ‘, T_COLLECT-NOME, ‘ DESCRIÇÃO: ‘,  T_COLLECT-DESCRICAO, ‘ VALOR: ‘, T_COLLECT-VALOR, ‘TOTAL:’, T_COLLECT-TOTAL. 

SKIP. 

CONT = CONT + 1. 

ENDIF. 

ENDLOOP. 

Design a site like this with WordPress.com
Iniciar