Exemplo 002 (Comentado)

sábado, 7 de abril de 2012 0 comentários

Descrição do exemplo:
Relatorio com ALV e FOR ALL ENTRIES.

Exemplo:

(Comentado)


1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
*&------------------------------------------------*
* DECLARACAO DO TIPO PARA GERAR O RELATORIO ALV  *
*&------------------------------------------------*
TYPE-POOLSSLIS.

*&------------------------------------------------*
* DECLARACAO DO TIPO TY_SAIDA     *
*&------------------------------------------------*
TYPESBEGIN OF TY_SAIDA,
        COD_CLIENTE TYPE ZTABELA_03-COD_CLIENTE,
        FILME TYPE ZTABELA_03-FILME,
        DIA TYPE ZTABELA_03-DIA,
        ATENDENTE TYPE ZTABELA_03-ATENDENTE,
        NOME TYPE ZTABELA_01-NOME,
        ENDERECO TYPE ZTABELA_01-ENDERECO,
END OF TY_SAIDA.

*&------------------------------------------------*
* DECLARACAO DO TIPO TY_CLIE
*&------------------------------------------------*
TYPESBEGIN OF TY_CLIE,
        COD_CLIENTE TYPE ZTABELA_01-COD_CLIENTE,
        NOME TYPE ZTABELA_01-NOME,
        ENDERECO TYPE ZTABELA_01-ENDERECO,
END OF TY_CLIE.

*&------------------------------------------------*
* DECLARACAO DO TIPO TY_LOCA
*&------------------------------------------------*
TYPESBEGIN OF TY_LOCA,
        COD_CLIENTE TYPE ZTABELA_03-COD_CLIENTE,
        FILME TYPE ZTABELA_03-FILME,
        DIA TYPE ZTABELA_03-DIA,
        ATENDENTE TYPE ZTABELA_03-ATENDENTE,
END OF TY_LOCA.



*&------------------------------------------------*
* DECLARACAO DAS WORK-AREAS E TABELAS INTERNAS
*&------------------------------------------------*
DATATI_SAIDA TYPE TABLE OF TY_SAIDA,
      WA_SAIDA TYPE TY_SAIDA,
      TI_CLIE TYPE TABLE OF TY_CLIE,
      WA_CLIE TYPE TY_CLIE,
      TI_LOCA TYPE TABLE OF TY_LOCA,
      WA_LOCA TYPE TY_LOCA.


*&------------------------------------------------*
* TABELA INTERNA E WORK-AREA PARA CUSTOMIZAR O RELATORIO ALV
*&------------------------------------------------*
DATA:  TI_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV,
        WA_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV.


*&------------------------------------------------*
* FAZ O SELECT DA TABELA ZTABELA_01
*&------------------------------------------------*
SELECT COD_CLIENTE
       NOME
       ENDERECO
FROM ZTABELA_01
INTO TABLE TI_CLIE.
*&------------------------------------------------*
* SE OCORREU TUDO BEM... FAZ O SELECT
*&------------------------------------------------*
IF SY-SUBRC IS INITIAL.
*&------------------------------------------------*
*SELECT DA TABELA TRANSPARENTE
*TABELA_03 DOS CAMPOS COD_CLIENTE,
*FILME, DIA, ATENDENTE PARA TODAS AS
*ENTRADAS DA TABELA   INTERNA TI_CLIE
*NDE COD_CLIENTE FOR IGUAL AO
*COD_CLIENTE DA TABELA INTERNA TI_CLIE
*&------------------------------------------------*
  SELECT COD_CLIENTE
         FILME
         DIA
         ATENDENTE

    FROM ZTABELA_03
    INTO TABLE TI_LOCA
    FOR ALL ENTRIES IN TI_CLIE
    WHERE COD_CLIENTE TI_CLIE-COD_CLIENTE.

*&------------------------------------------------*
  "SE OCORREU TUDO BEM... FAZ O LOOP.
*&------------------------------------------------*
  IF SY-SUBRC IS INITIAL.

*&------------------------------------------------*
    "LOOP NA TABELA INTERNA TI_CLIE.
*&------------------------------------------------*
    LOOP AT TI_CLIE INTO WA_CLIE.

*&------------------------------------------------*
*PEGA A LINHA (WA_LINHA) DA TABELA
*INTERNA (TI_LOCA) COM A CHAVE
*COD_CLIENTE DA WORK-AREA WA_CLIE.
*&------------------------------------------------*
      READ TABLE TI_LOCA INTO WA_LOCA
      WITH KEY COD_CLIENTE WA_CLIE-COD_CLIENTE
      BINARY SEARCH.

*&------------------------------------------------*
      "SE OCORREU TUDO BEM...PRENCHE A WORK-AREA.
*&------------------------------------------------*
      IF SY-SUBRC IS INITIAL.

*&------------------------------------------------*
        "PREENCHE A WORK-AREA WA_SAIDA.
*&------------------------------------------------*
        WA_SAIDA-COD_CLIENTE WA_LOCA-COD_CLIENTE.
        WA_SAIDA-FILME WA_LOCA-FILME.
        WA_SAIDA-DIA WA_LOCA-DIA.
        WA_SAIDA-ATENDENTE WA_LOCA-ATENDENTE.
        WA_SAIDA-NOME WA_CLIE-NOME.
        WA_SAIDA-ENDERECO WA_CLIE-ENDERECO.
*&------------------------------------------------*
        "PREENCHE A LINHA DA TABELA INTERNA TI_SAIDA.
*&------------------------------------------------*
        APPEND WA_SAIDA TO TI_SAIDA.
*&------------------------------------------------*
        "LIMPA A WORK-AREA WA_SAIDA
*&------------------------------------------------*
        CLEAR WA_SAIDA.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDIF.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'COD_CLIENTE'.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'FILME'.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'DIA'.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'ATENDETE'.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'NOME'.
*&------------------------------------------------*
*CHAMA O FORM F_FIELD
*&------------------------------------------------*
PERFORM F_FIELD USING 'ENDERECO'.


*&------------------------------------------------*
* CHAMA O FORM F_GRID
*&------------------------------------------------*
PERFORM F_GRID.
*&------------------------------------------------*
* FORM PARA GERAR O RELATORIO
*&------------------------------------------------*
FORM F_GRID.

  DATAWA_LAYOUT TYPE SLIS_LAYOUT_ALV.
  WA_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  WA_LAYOUT-ZEBRA             'X'.
*&------------------------------------------------*
* CHAMA A FUNCAO QUE GERA O RELATORIO
*&------------------------------------------------*
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT     WA_LAYOUT
      IT_FIELDCAT   TI_FIELDCATALOG[]
    TABLES
      T_OUTTAB      TI_SAIDA
    EXCEPTIONS
      PROGRAM_ERROR 1
      OTHERS        2.
  IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.
ENDFORM.
*&------------------------------------------------*
* FORM PARA CONFIGURAR O RELATORIO
*&------------------------------------------------*
FORM F_FIELD USING P_CAMPO.

  WA_FIELDCATALOG-TABNAME       'TI_SAIDA'.
  WA_FIELDCATALOG-FIELDNAME     P_CAMPO.
  WA_FIELDCATALOG-REF_FIELDNAME P_CAMPO.
  WA_FIELDCATALOG-REF_TABNAME   'TI_SAIDA'.
  WA_FIELDCATALOG-SELTEXT_M     P_CAMPO.
  APPEND WA_FIELDCATALOG TO TI_FIELDCATALOG.
  CLEAR  WA_FIELDCATALOG.
ENDFORM.

0 comentários:

Postar um comentário