abap 中动态表一例

来源:互联网 发布:太原老兵知豆电话 编辑:程序博客网 时间:2024/05/21 09:34

*&---------------------------------------------------------------------*
*& 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.

原创粉丝点击