本代码展示了一个多级别的列表,如果有多行的关键数据相同,就只显示第一行的关键数据并且不显示中间的表格线。
*&---------------------------------------------------------------------*
*& Report ZQS1
*&
*&---------------------------------------------------------------------*
*& Author : Zhang.JM
*& Written : 2007.12 . 18
*&---------------------------------------------------------------------*
REPORT zqs1 LINE - SIZE 157 .
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.
START - OF - SELECTION.
PERFORM read_data.
END - OF - SELECTION.
PERFORM write_data.
*&---------------------------------------------------------------------*
*& 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.
* 处理无数据的情况
DESCRIBE TABLE itab LINES count.
IF count = 0 .
MESSAGE ' No data!. ' TYPE ' I ' .
EXIT.
ENDIF.
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.
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
*&---------------------------------------------------------------------*
*& 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.
ENDFORM. " READ_DATA
*& Report ZQS1
*&
*&---------------------------------------------------------------------*
*& Author : Zhang.JM
*& Written : 2007.12 . 18
*&---------------------------------------------------------------------*
REPORT zqs1 LINE - SIZE 157 .
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.
START - OF - SELECTION.
PERFORM read_data.
END - OF - SELECTION.
PERFORM write_data.
*&---------------------------------------------------------------------*
*& 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.
* 处理无数据的情况
DESCRIBE TABLE itab LINES count.
IF count = 0 .
MESSAGE ' No data!. ' TYPE ' I ' .
EXIT.
ENDIF.
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.
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
*&---------------------------------------------------------------------*
*& 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.
ENDFORM. " READ_DATA