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

*&---------------------------------------------------------------------*
*& 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
 
posted on 2007-12-25 11:24  华亭慧剑  阅读(753)  评论(2编辑  收藏  举报