天天看點

abap 中動态表一例

*&---------------------------------------------------------------------*

*& Report  Z_DONGTAIBIAO

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT  z_dongtaibiao.

TYPE-POOLS: slis.

DATA: gt_fcat TYPE lvc_t_fcat,

gh_fcat LIKE LINE OF gt_fcat.

DATA: gt_dyn TYPE REF TO data.

DATA: gh_line TYPE REF TO data.

FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE,

<fs_line> TYPE ANY,

<fs_field> TYPE ANY.

DATA: BEGIN OF it OCCURS 0,

         iname(10),

         ioo(10),

         icc TYPE i,

       END OF it.

DATA: BEGIN OF it2 OCCURS 0,

   iname(10),

   ioo(10),

   icc TYPE i,

 END OF it2.

START-OF-SELECTION.

  it-iname = 'liu'.

  it-ioo = 'blue'.

  it-icc = 4.

  APPEND it.

  it-iname = 'liu'.

  it-ioo = 'red'.

  it-icc = 9.

  APPEND it.

  it-iname = 'liu'.

  it-ioo = 'green'.

  it-icc = 5.

  APPEND it.

  it2-iname = 'liu'.

  it2-ioo = 'dog'.

  it2-icc = 4.

  APPEND it2.

  it2-iname = 'liu'.

  it2-ioo = 'cat'.

  it2-icc = 3.

  APPEND it2.

  it-iname = 'gao'.

  it-ioo = 'blue'.

  it-icc = 8.

  APPEND it.

  it-iname = 'gao'.

  it-ioo = 'black'.

  it-icc = 6.

  APPEND it.

  it-iname = 'gao'.

  it-ioo = 'yellow'.

  it-icc = 2.

  APPEND it.

  it2-iname = 'gao'.

  it2-ioo = 'dog'.

  it2-icc = 8.

  APPEND it2.

  it2-iname = 'gao'.

  it2-ioo = 'horse'.

  it2-icc = 2.

  APPEND it2.

  DATA iii TYPE i.

  iii = 2.

  DATA: BEGIN OF it9 OCCURS 0,

           ioo(10),

           cc TYPE i,

         END OF it9.

  LOOP AT it.

    it9-ioo = it-ioo.

    COLLECT it9.

  ENDLOOP.

  SORT it9 ASCENDING BY ioo.

  LOOP AT it9.

    it9-cc = iii.

    MODIFY it9.

    iii = iii + 1.

  ENDLOOP.

  DATA: BEGIN OF it8 OCCURS 0,

           ioo(10),

           cc TYPE i,

         END OF it8.

  LOOP AT it2.

    it8-ioo = it2-ioo.

    COLLECT  it8.

  ENDLOOP.

  SORT it8 ASCENDING BY ioo.

  LOOP AT it8.

    it8-cc = iii.

    MODIFY it8.

    iii = iii + 1.

  ENDLOOP.

  DATA: BEGIN OF it7 OCCURS 0,

           iname(10),

         END OF it7.

  LOOP AT it.

    it7-iname = it-iname.

    COLLECT it7.

  ENDLOOP.

  LOOP AT it2.

    it7-iname = it2-iname.

    COLLECT it7.

  ENDLOOP.

  DATA i_count TYPE i.

   gh_fcat-col_pos = 1.

   gh_fcat-fieldname = 'item'.

   APPEND gh_fcat TO gt_fcat.

  i_count = 2.

  SORT it9 ASCENDING BY ioo.

  LOOP AT it9.

    gh_fcat-col_pos = i_count.

    gh_fcat-fieldname = it9-ioo.

    APPEND gh_fcat TO gt_fcat.

    i_count = i_count + 1.

  ENDLOOP.

  SORT it8 ASCENDING BY ioo.

  LOOP AT it8.

    gh_fcat-col_pos = i_count.

    gh_fcat-fieldname = it8-ioo.

    APPEND gh_fcat TO gt_fcat.

    i_count = i_count + 1.

  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table

    EXPORTING

      it_fieldcatalog = gt_fcat

    IMPORTING

      ep_table        = gt_dyn.

  ASSIGN gt_dyn->* TO <fs_table>.

  CREATE DATA gh_line LIKE LINE OF <fs_table>.

  ASSIGN gh_line->* TO <fs_line>.

  DATA ii TYPE i.

  LOOP AT it7.

    ASSIGN COMPONENT 1 OF STRUCTURE <fs_line> TO <fs_field>.

    <fs_field> = it7-iname.

    LOOP AT IT WHERE INAME = IT7-INAME.

       read table it9 with key

           ioo = it-ioo.

         ASSIGN COMPONENT it9-cc OF STRUCTURE <fs_line> TO <fs_field>.

         <fs_field> = it-icc.

    endloop.

    LOOP AT IT2 WHERE INAME = IT7-INAME.

       read table it8 with key

           ioo = it2-ioo.

         ASSIGN COMPONENT it8-cc OF STRUCTURE <fs_line> TO <fs_field>.

         <fs_field> = it2-icc.

    endloop.

    loop at it9.

       read table it with key iname = it7-iname

                              ioo = it9-ioo.

       if sy-subrc <> 0 .

            ASSIGN COMPONENT it9-cc OF STRUCTURE <fs_line> TO <fs_field>.

           <fs_field> = ''.

       endif.

    endloop.

     loop at it8.

       read table it2 with key iname = it7-iname

                               ioo   = it8-ioo.

       if sy-subrc <> 0 .

            ASSIGN COMPONENT it8-cc OF STRUCTURE <fs_line> TO <fs_field>.

           <fs_field> = ''.

       endif.

    endloop.

   INSERT <fs_line> INTO TABLE <fs_table>.

  ENDLOOP.

loop at it.

   write:/ it-iname,it-ioo,it-icc.

endloop.

uline.

loop at it2.

    write:/ it2-iname,it2-ioo,it2-icc.

 endloop.

uline.

uline.

  write '科目'.

  loop at it9.

      write:  it9-ioo.

  endloop.

  loop at it8.

    write: it8-ioo.

  endloop.

  uline.

  LOOP AT <fs_table> ASSIGNING <fs_line>.

    WRITE: / <fs_line>.

  ENDLOOP.