Conteúdo

Tabela interna dentro de tabela interna


Nada mais é que uma tabela interna onde além de campos convencionais, tem outra tabela interna.

REPORT ZSAPeiros.

* A idéia é selecionar a VBAP, e retornar em UMA ÚNICA LINHA da tabela interna T_DADOS,
* o documento VBELN e TODOS os materiais com descrição do documento selecionado

* Definição da tabela com material e descrição
TYPES:
  BEGIN OF ty_matnrs,
    matnr               TYPE          mara-matnr, "Material
    maktx               TYPE          makt-maktx, "Descrição
    END OF ty_matnrs.

* Definição da tabela com documento e tabela de materiais
DATA: BEGIN OF t_dados OCCURS 0.
DATA:   vbeln           TYPE          vbap-vbeln. "Documento
DATA:   matnrs          TYPE TABLE OF ty_matnrs.  "Tabela de materiais
DATA: END OF t_dados.

* Declaração de tabelas internas diversas
DATA:
  t_matnrs              TYPE TABLE OF ty_matnrs,  "Tabela de materiais
  w_matnrs              TYPE          ty_matnrs,  "Tabela de materiais
  t_makt                TYPE TABLE OF makt,       "Material/Descrição
  w_makt                TYPE          makt,       "Material/Descrição
  t_vbap                TYPE TABLE OF vbap,       "Tabela VBAP
  w_vbap                TYPE          vbap.       "Estrutura VBAP

* Parâmetros
PARAMETERS p_vbeln TYPE vbap-vbeln.


* Seleção dos dados
START-OF-SELECTION.

  SELECT *
    FROM vbap
    INTO TABLE t_vbap
   WHERE vbeln EQ p_vbeln.

  IF sy-subrc IS INITIAL.

    SELECT *
      FROM makt
      INTO TABLE t_makt
       FOR ALL ENTRIES IN t_vbap
     WHERE matnr EQ t_vbap-matnr
       AND spras EQ sy-langu.

    IF sy-subrc IS INITIAL.
      SORT t_makt BY matnr.
    ENDIF.

    LOOP AT t_vbap INTO w_vbap.

* Monta tabela com campos matnr e maktx
      READ TABLE t_makt
            INTO w_makt
        WITH KEY matnr = w_vbap-matnr
                 BINARY SEARCH.

      IF sy-subrc IS INITIAL.
        w_matnrs-matnr = w_vbap-matnr.
        w_matnrs-maktx = w_makt-maktx.
        APPEND w_matnrs TO t_matnrs.
      ENDIF.

    ENDLOOP.

* Popula tabela T_DADOS com documento VBELN e TABELA de materiais
    t_dados-vbeln    = p_vbeln.
    t_dados-matnrs[] = t_matnrs[].
    APPEND t_dados.

  ENDIF.

  BREAK-POINT.