本代码展示了一个多级别的列表,如果有多行的关键数据相同,就只显示第一行的关键数据并且不显示中间的表格线。

多级列表的 WRITE 输出方法*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*& Report  ZQS1
多级列表的 WRITE 输出方法
*&
多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*&    Author       : Zhang.JM
多级列表的 WRITE 输出方法
*&    Written      : 2007.12.18
多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法REPORT  zqs1 LINE
-SIZE 157 .
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法DATA: BEGIN OF itab OCCURS 
20,
多级列表的 WRITE 输出方法      matnr(
18) TYPE c,
多级列表的 WRITE 输出方法      maktx(
35) TYPE c,
多级列表的 WRITE 输出方法      lifnr(
10) TYPE c,
多级列表的 WRITE 输出方法      name1(
35) TYPE c,
多级列表的 WRITE 输出方法      bukrs(
4)  TYPE c,
多级列表的 WRITE 输出方法      netpr     TYPE p DECIMALS 
2,
多级列表的 WRITE 输出方法      differ    TYPE i,
多级列表的 WRITE 输出方法      sign      TYPE i,
多级列表的 WRITE 输出方法      END OF itab.

多级列表的 WRITE 输出方法DATA: count TYPE i.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法START
-OF-SELECTION.
多级列表的 WRITE 输出方法  PERFORM read_data.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法END
-OF-SELECTION.
多级列表的 WRITE 输出方法  PERFORM write_data.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*&      Form  WRITE_DATA
多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*       text
多级列表的 WRITE 输出方法
*----------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*  -->  p1        text
多级列表的 WRITE 输出方法
*  <--  p2        text
多级列表的 WRITE 输出方法
*----------------------------------------------------------------------*
多级列表的 WRITE 输出方法FORM write_data.
多级列表的 WRITE 输出方法  DATA: l_matnr LIKE itab
-matnr,
多级列表的 WRITE 输出方法        l_lifnr LIKE itab
-lifnr,
多级列表的 WRITE 输出方法        length_uline TYPE i ,
多级列表的 WRITE 输出方法        pos     TYPE i.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法
* 处理无数据的情况
多级列表的 WRITE 输出方法  DESCRIBE TABLE itab LINES count.
多级列表的 WRITE 输出方法  IF count 
= 0.
多级列表的 WRITE 输出方法    MESSAGE 
'No data!.' TYPE 'I'.
多级列表的 WRITE 输出方法    EXIT.
多级列表的 WRITE 输出方法  ENDIF.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法  SORT itab BY matnr lifnr netpr.
多级列表的 WRITE 输出方法
* 循环并处理
多级列表的 WRITE 输出方法  LOOP AT itab.
多级列表的 WRITE 输出方法
*   根据物料和供应商是否相同来确定横线和竖线的位置
多级列表的 WRITE 输出方法    IF itab
-matnr <> l_matnr AND itab-lifnr <> l_lifnr.
多级列表的 WRITE 输出方法      l_matnr 
= itab-matnr. l_lifnr = itab-lifnr.
多级列表的 WRITE 输出方法      length_uline 
= 156.  pos  = 0.
多级列表的 WRITE 输出方法    ELSEIF itab
-matnr = l_matnr AND itab-lifnr <> l_lifnr.
多级列表的 WRITE 输出方法      l_matnr 
= itab-matnr. l_lifnr = itab-lifnr.
多级列表的 WRITE 输出方法      CLEAR: itab
-matnr,itab-maktx.
多级列表的 WRITE 输出方法      length_uline 
= 92.  pos  = 65.
多级列表的 WRITE 输出方法    ELSEIF itab
-matnr = l_matnr AND itab-lifnr = l_lifnr.
多级列表的 WRITE 输出方法      l_matnr 
= itab-matnr. l_lifnr = itab-lifnr.
多级列表的 WRITE 输出方法      CLEAR: itab
-matnr,itab-maktx,itab-lifnr,itab-name1.
多级列表的 WRITE 输出方法      length_uline 
= 46.  pos  = 111.
多级列表的 WRITE 输出方法    ENDIF.
多级列表的 WRITE 输出方法
*   根据前面确定的位置画竖线和横线
多级列表的 WRITE 输出方法    IF sy
-tabix > 1.
多级列表的 WRITE 输出方法      IF pos 
> 0 .
多级列表的 WRITE 输出方法        WRITE:
/  sy-vline,(18'',sy-vline,(40'',
多级列表的 WRITE 输出方法                 sy
-vline,(15'',sy-vline.
多级列表的 WRITE 输出方法      ENDIF.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法      ULINE AT pos(length_uline).
多级列表的 WRITE 输出方法    ENDIF.
多级列表的 WRITE 输出方法
*   输出所需信息
多级列表的 WRITE 输出方法    WRITE:
/ sy-vline,(18) itab-matnr LEFT-JUSTIFIED,sy-vline,
多级列表的 WRITE 输出方法                     (
40) itab-maktx LEFT-JUSTIFIED,sy-vline,
多级列表的 WRITE 输出方法                     (
15) itab-lifnr LEFT-JUSTIFIED,sy-vline,
多级列表的 WRITE 输出方法                     (
25) itab-name1 LEFT-JUSTIFIED,sy-vline,
                         (
10) itab-bukrs LEFT-JUSTIFIED,sy-vline,
多级列表的 WRITE 输出方法                     (
11) itab-netpr RIGHT-JUSTIFIED,sy-vline.
多级列表的 WRITE 输出方法
*   处理不同情况的颜色
多级列表的 WRITE 输出方法    IF itab
-sign = 1."blue
多级列表的 WRITE 输出方法
      FORMAT COLOR 1  .
多级列表的 WRITE 输出方法    ELSEIF itab
-sign = 2."red
多级列表的 WRITE 输出方法
      FORMAT COLOR 6  .
多级列表的 WRITE 输出方法    ENDIF.
多级列表的 WRITE 输出方法    WRITE: (
15) itab-differ RIGHT-JUSTIFIED,sy-vline.
多级列表的 WRITE 输出方法    FORMAT COLOR OFF .
多级列表的 WRITE 输出方法  ENDLOOP.
多级列表的 WRITE 输出方法  ULINE AT (
156).
多级列表的 WRITE 输出方法ENDFORM.                    
" WRITE_DATA
多级列表的 WRITE 输出方法

多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*&      Form  READ_DATA
多级列表的 WRITE 输出方法
*&---------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*       text
多级列表的 WRITE 输出方法
*----------------------------------------------------------------------*
多级列表的 WRITE 输出方法
*  -->  p1        text
多级列表的 WRITE 输出方法
*  <--  p2        text
多级列表的 WRITE 输出方法
*----------------------------------------------------------------------*
多级列表的 WRITE 输出方法FORM read_data .
多级列表的 WRITE 输出方法
* 做一些模拟数据
多级列表的 WRITE 输出方法  itab
-matnr = 'AA0'.
多级列表的 WRITE 输出方法  itab
-maktx = 'Name of AA0'.
多级列表的 WRITE 输出方法  itab
-lifnr = 'BB0'.
多级列表的 WRITE 输出方法  itab
-name1 = 'Vonder BB0'.
多级列表的 WRITE 输出方法  itab
-bukrs = 'TST1'.
多级列表的 WRITE 输出方法  itab
-netpr = 129.
多级列表的 WRITE 输出方法  itab
-differ = 2.
多级列表的 WRITE 输出方法  APPEND itab.
多级列表的 WRITE 输出方法  itab
-matnr = 'AA0'.
多级列表的 WRITE 输出方法  itab
-lifnr = 'BB1'.
多级列表的 WRITE 输出方法  itab
-name1 = 'Vonder name BB1'.
多级列表的 WRITE 输出方法  itab
-netpr = 134.
多级列表的 WRITE 输出方法  itab
-differ = 3.
多级列表的 WRITE 输出方法  APPEND itab.
多级列表的 WRITE 输出方法  itab
-matnr = 'AA0'.
多级列表的 WRITE 输出方法  itab
-lifnr = 'BB1'.
多级列表的 WRITE 输出方法  itab
-differ = 4.
多级列表的 WRITE 输出方法  itab
-netpr = 229.
多级列表的 WRITE 输出方法  itab
-sign = 2.
多级列表的 WRITE 输出方法  APPEND itab.
多级列表的 WRITE 输出方法  itab
-matnr = 'AA1'.
多级列表的 WRITE 输出方法  itab
-maktx = 'Description of AA1'.
多级列表的 WRITE 输出方法  itab
-lifnr = 'BB'.
多级列表的 WRITE 输出方法  itab
-name1 = 'BB''s name'.
多级列表的 WRITE 输出方法  itab
-netpr = 78.
多级列表的 WRITE 输出方法  itab
-differ = 5.
多级列表的 WRITE 输出方法  itab
-sign = 1.
多级列表的 WRITE 输出方法  APPEND itab.
多级列表的 WRITE 输出方法  itab
-matnr = 'AA1'.
多级列表的 WRITE 输出方法  itab
-lifnr = 'BB'.
多级列表的 WRITE 输出方法  itab
-differ = 6.
多级列表的 WRITE 输出方法  itab
-netpr = 72.
多级列表的 WRITE 输出方法  itab
-sign = 2.
多级列表的 WRITE 输出方法  APPEND itab.
多级列表的 WRITE 输出方法
多级列表的 WRITE 输出方法ENDFORM.                    
" READ_DATA
 

相关文章: