多级列表的 WRITE 输出方法

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

*&---------------------------------------------------------------------*
*&  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
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值