SAP的ALV输出列表

来源:互联网 发布:怎么添加网络连接 编辑:程序博客网 时间:2024/05/18 02:45

 

REPORT z_test01 NO STANDARD PAGE HEADING.
*--------------------------定义数据------------------------------------*
*WERKS=工厂,NAME1=工厂名称,BUDAT=凭证日期,MBLNR=物料凭证编号,
*MJAHR=物料凭证年度,VGART=凭证类型----------*
DATA: BEGIN OF it_result OCCURS 0,
werks LIKE t001w-werks,
name1 LIKE t001w-name1,
budat LIKE mkpf-budat,
dmbtr LIKE mseg-dmbtr,
zwzxh TYPE p DECIMALS 3,
END OF it_result.

DATA: BEGIN OF it_t001w OCCURS 0,
werks LIKE t001w-werks,
name1 LIKE t001w-name1,
END OF it_t001w.

DATA: BEGIN OF it_mkpf OCCURS 0,
mblnr LIKE mkpf-mblnr,
mjahr LIKE mkpf-mjahr,
budat LIKE mkpf-budat,
END OF it_mkpf.

DATA: BEGIN OF it_mseg OCCURS 0,
mblnr LIKE mseg-mblnr,
mjahr LIKE mseg-mjahr,
zeile LIKE mseg-zeile,
werks LIKE mseg-werks,
dmbtr LIKE mseg-dmbtr,
shkzg LIKE mseg-shkzg,
END OF it_mseg.

*定义ALV使用到的内存池
TYPE-POOLS: slis.

*定义一列的描述对象,通过此对象可以对列的属性进行设置
*DATA: is_layout TYPE slis_layout_alv.

*定义列的内表对象,把列放入此内表中,通过此内表把标题输出到屏幕
data: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.

 

DATA: tmp_title(70),
tmp_repid LIKE sy-repid.

*----------------初始选择屏幕--------------------*
SELECT-OPTIONS: s_werks FOR it_result-werks,
s_budat FOR it_result-budat.

*这里定义一个单选按钮的选择屏幕,如果R1则传统列表输出,如果R2则用ALV输出
PARAMETERS: r1 RADIOBUTTON GROUP rad1,
r2 RADIOBUTTON GROUP rad1 DEFAULT 'X'.


*-------------------TOP-OF-PAGE------------------*
TOP-OF-PAGE.
*  PERFORM frm_head_output .
*------------------START-OF-SELECTION-------------*
START-OF-SELECTION.
  PERFORM frm_getdata.
  PERFORM frm_process.
*------------------END-OF-SELECTION---------------*
END-OF-SELECTION.
  PERFORM frm_output.
*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
* 获取数据
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_getdata .
  SELECT * FROM t001w   "工厂表
  INTO CORRESPONDING FIELDS OF TABLE it_t001w
  WHERE werks IN s_werks.

  SELECT * FROM mkpf   "物料表
  INTO CORRESPONDING FIELDS OF TABLE it_mkpf
  WHERE vgart EQ 'WA' AND budat IN s_budat.

  SELECT * FROM mseg  "分段物料
  INTO CORRESPONDING FIELDS OF TABLE it_mseg
  WHERE werks IN s_werks
  AND bwart IN ('201','202','261','262').


ENDFORM. " FRM_GETDATA
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS
*&---------------------------------------------------------------------*
* 对数据进行处理
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_process .
  LOOP AT it_mseg.
    CLEAR it_result.
    READ TABLE it_mkpf WITH KEY mblnr = it_mseg-mblnr  "根据条件取出某行数据后改变它的值
    mjahr = it_mseg-mjahr.
    CHECK sy-subrc EQ 0.
    READ TABLE it_t001w WITH KEY werks = it_mseg-werks. "根据条件取出某行数据后改变它的值

    it_result-werks = it_t001w-werks.
    it_result-name1 = it_t001w-name1.
    it_result-budat = it_mkpf-budat.

    CASE it_mseg-shkzg. "判断是借还是贷
      WHEN 'H'.
        it_result-dmbtr = it_mseg-dmbtr.
      WHEN 'S'.
        it_result-dmbtr = 0 - it_mseg-dmbtr.
    ENDCASE.
    COLLECT it_result.
  ENDLOOP.
ENDFORM. " FRM_PROCESS
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
* 输出数据
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_output .
  IF r2 = 'X' .
    gt_fieldcat-fieldname = 'WERKS'.
    gt_fieldcat-seltext_m = '物料号'.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.
    gt_fieldcat-fieldname = 'NAME1'.
    gt_fieldcat-seltext_m = '物料名称'.
    gt_fieldcat-outputlen = 30.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.
    gt_fieldcat-fieldname = 'BUDAT'.
    gt_fieldcat-seltext_m = '记帐日期'.
    gt_fieldcat-outputlen = 10.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.
    gt_fieldcat-fieldname = 'DMBTR'.
    gt_fieldcat-seltext_m = '本位币金额'.
    gt_fieldcat-outputlen = 20.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.
    gt_fieldcat-fieldname = 'ZWZXH'.
    gt_fieldcat-seltext_m = '物资消耗(万元/kwh)'.
    gt_fieldcat-outputlen = 30.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.

    tmp_title = '库存资金占用额'.
    tmp_repid = sy-repid.


    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program = tmp_repid   "主程序名
        it_fieldcat        = gt_fieldcat[]   "标题字段内表
        i_grid_title       = tmp_title       "表格标题
      TABLES
        t_outtab           = it_result.      "需要输出内容的内表
  ENDIF.
  IF r1 = 'X'.
    LOOP AT it_result.
      WRITE: '|',(10) it_result-werks CENTERED,
      '|',(40) it_result-name1,
      '|',(15) it_result-budat CENTERED,
      '|',(21) it_result-dmbtr,
      '|',(22) it_result-zwzxh ,
      '|'.
      ULINE /.
    ENDLOOP.
  ENDIF.
ENDFORM. " FRM_OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_HEAD_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM frm_head_output .
*
*  ULINE .
*  WRITE: '|',(10) '物料号' CENTERED,
*  '|',(40) '物料名称' CENTERED,
*  '|',(15) '记账期间' CENTERED,
*  '|',(21) '本位币金额' CENTERED ,
*  '|',(22) '物资消耗(万元/kwh)' CENTERED ,
*  '|'.
*  ULINE /.
*
*ENDFORM. " FRM_HEAD_OUTPUT

*转载别人的