本代码展示了一个多级别的列表,如果有多行的关键数据相同,就只显示第一行的关键数据并且不显示中间的表格线。
*&---------------------------------------------------------------------*
*& Report ZQS1
*&
*&---------------------------------------------------------------------*
*& Author : Zhang.JM
*& Written : 2007.12.18
*&---------------------------------------------------------------------*
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
REPORT zqs1 LINE-SIZE 157 .
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DATA: BEGIN OF itab OCCURS 20,
matnr(18) TYPE c,
maktx(35) TYPE c,
lifnr(10) TYPE c,
name1(35) TYPE c,
bukrs(4) TYPE c,
netpr TYPE p DECIMALS 2,
differ TYPE i,
sign TYPE i,
END OF itab.
DATA: count TYPE i.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
START-OF-SELECTION.
PERFORM read_data.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
END-OF-SELECTION.
PERFORM write_data.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_data.
DATA: l_matnr LIKE itab-matnr,
l_lifnr LIKE itab-lifnr,
length_uline TYPE i ,
pos TYPE i.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
* 处理无数据的情况
DESCRIBE TABLE itab LINES count.
IF count = 0.
MESSAGE 'No data!.' TYPE 'I'.
EXIT.
ENDIF.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SORT itab BY matnr lifnr netpr.
* 循环并处理
LOOP AT itab.
* 根据物料和供应商是否相同来确定横线和竖线的位置
IF itab-matnr <> l_matnr AND itab-lifnr <> l_lifnr.
l_matnr = itab-matnr. l_lifnr = itab-lifnr.
length_uline = 156. pos = 0.
ELSEIF itab-matnr = l_matnr AND itab-lifnr <> l_lifnr.
l_matnr = itab-matnr. l_lifnr = itab-lifnr.
CLEAR: itab-matnr,itab-maktx.
length_uline = 92. pos = 65.
ELSEIF itab-matnr = l_matnr AND itab-lifnr = l_lifnr.
l_matnr = itab-matnr. l_lifnr = itab-lifnr.
CLEAR: itab-matnr,itab-maktx,itab-lifnr,itab-name1.
length_uline = 46. pos = 111.
ENDIF.
* 根据前面确定的位置画竖线和横线
IF sy-tabix > 1.
IF pos > 0 .
WRITE:/ sy-vline,(18) '',sy-vline,(40) '',
sy-vline,(15) '',sy-vline.
ENDIF.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ULINE AT pos(length_uline).
ENDIF.
* 输出所需信息
WRITE:/ sy-vline,(18) itab-matnr LEFT-JUSTIFIED,sy-vline,
(40) itab-maktx LEFT-JUSTIFIED,sy-vline,
(15) itab-lifnr LEFT-JUSTIFIED,sy-vline,
(25) itab-name1 LEFT-JUSTIFIED,sy-vline,
(10) itab-bukrs LEFT-JUSTIFIED,sy-vline,
(11) itab-netpr RIGHT-JUSTIFIED,sy-vline.
* 处理不同情况的颜色
IF itab-sign = 1."blue
FORMAT COLOR 1 .
ELSEIF itab-sign = 2."red
FORMAT COLOR 6 .
ENDIF.
WRITE: (15) itab-differ RIGHT-JUSTIFIED,sy-vline.
FORMAT COLOR OFF .
ENDLOOP.
ULINE AT (156).
ENDFORM. " WRITE_DATA
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
* 做一些模拟数据
itab-matnr = 'AA0'.
itab-maktx = 'Name of AA0'.
itab-lifnr = 'BB0'.
itab-name1 = 'Vonder BB0'.
itab-bukrs = 'TST1'.
itab-netpr = 129.
itab-differ = 2.
APPEND itab.
itab-matnr = 'AA0'.
itab-lifnr = 'BB1'.
itab-name1 = 'Vonder name BB1'.
itab-netpr = 134.
itab-differ = 3.
APPEND itab.
itab-matnr = 'AA0'.
itab-lifnr = 'BB1'.
itab-differ = 4.
itab-netpr = 229.
itab-sign = 2.
APPEND itab.
itab-matnr = 'AA1'.
itab-maktx = 'Description of AA1'.
itab-lifnr = 'BB'.
itab-name1 = 'BB''s name'.
itab-netpr = 78.
itab-differ = 5.
itab-sign = 1.
APPEND itab.
itab-matnr = 'AA1'.
itab-lifnr = 'BB'.
itab-differ = 6.
itab-netpr = 72.
itab-sign = 2.
APPEND itab.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ENDFORM. " READ_DATA