abap 报表实现

新进入一家公司,是搞erp的,用的sap,我是一点不懂啊,本来就是初级程序员,这下郁闷了,每人带,自己学……

开始的任务就是实现个报表和单据打印,中途出现了很多问题,现在把简单报表实现步骤写出来,希望大鸟指正错误和不足

*&---------------------------------------------------------------------*
*& Report  ZMM_TEST01
*& Author: 杨路
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZMM_TEST01.

TABLES:EKKO,EKPO,EKET,MAKT.  "引入tables
TYPE-POOLS: SLIS.                        "类似.net引入命名空间
*-----------------------------------------------------------------------*
*           Define types
*-----------------------------------------------------------------------*
TYPES: BEGIN OF TYP_LIST,
       BUKRS TYPE EKKO-BUKRS,
       EKORG TYPE EKKO-EKORG,
       EKGRP TYPE EKKO-EKGRP,
       EBELN TYPE EKKO-EBELN,
       EBELP TYPE EKPO-EBELP,
       MATNR TYPE MAKT-MATNR,
       MAKTX TYPE MAKT-MAKTX,
       MENGE TYPE EKPO-MENGE,
       MEINS TYPE EKPO-MEINS,
       NETPR TYPE EKPO-NETPR,
       WAERS TYPE EKKO-WAERS,
       EINDT TYPE EKET-EINDT,
       END OF TYP_LIST.              "定义结构

*-----------------------------------------------------------------------*
*                             Define data
*-----------------------------------------------------------------------*

DATA: GTD_DATA TYPE STANDARD TABLE OF TYP_LIST,
      GTH_DATA TYPE TYP_LIST.

DATA: GTD_TITLE TYPE SLIS_T_LISTHEADER,
      GTH_TITLE TYPE SLIS_LISTHEADER.

DATA: GTD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      GTH_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

DATA: GTH_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: GD_SPRAS TYPE SPRAS.
data P_DATUM type d.            "定义时间变量,后面设置默认时间
*--------------------------------------------------------------------------*
*                      selection-screen
*--------------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.  "双击text-001,给屏幕字段写汉语
SELECT-OPTIONS:
              S_LLIEF FOR EKKO-LLIEF,
              S_EBELN FOR EKKO-EBELN,
              S_MATNR FOR EKPO-MATNR ,
              S_AEDAT for EKKO-AEDAT OBLIGATORY.            "时间必输项
SELECTION-SCREEN END OF BLOCK B1.                    

INITIALIZATION.                              "设置默认时间为本月初到当前时间
   P_DATUM = sy-datum.
   P_DATUM+6(2) = '01'.
   P_DATUM = P_DATUM .
   S_AEDAT-low = P_DATUM.
   S_AEDAT-high = sy-datum .
   APPEND S_AEDAT.
*----------------------------------------------------------------------*
*       START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.                              "执行各个函数调用
  PERFORM SUB_GET_DATA.
  PERFORM SUB_DISPLAY.
  PERFORM SUB_CLEAR.
*&---------------------------------------------------------------------*
*&      Form  SUB_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SUB_GET_DATA .
SELECT
  EKKO~BUKRS
  EKKO~EKORG
  EKKO~EKGRP
  EKKO~EBELN
  EKPO~EBELP
  MAKT~MATNR
  MAKT~MAKTX
  EKPO~MENGE
  EKPO~MEINS
  EKPO~NETPR
  EKKO~WAERS
  EKET~EINDT
  INTO CORRESPONDING FIELDS OF TABLE GTD_DATA
  FROM EKKO
  INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN
  LEFT JOIN EKET ON EKPO~EBELN = EKET~EBELN
  AND EKPO~EBELP = EKET~EBELP
  LEFT JOIN MAKT ON EKPO~MATNR = MAKT~MATNR
  WHERE EKKO~AEDAT in S_AEDAT                "屏幕的选择条件
  AND  EKKO~LLIEF IN S_LLIEF
  AND  EKKO~EBELN IN S_EBELN
  AND EKPO~MATNR IN S_MATNR.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SUB_TITLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM SUB_TITLE.                        "表头显示信息
 REFRESH GTD_TITLE.
 CLEAR GTH_TITLE.
 PERFORM SUB_SET_TITLE USING  'H'  ''  '采购订单报表'.
 PERFORM SUB_SET_TITLE USING  'S'  '日期 :' SY-DATUM.
 PERFORM SUB_SET_TITLE USING  'S'  '作者 :' SY-UNAME.
ENDFORM.        "SET_TITLE

*&---------------------------------------------------------------------*
*&      Form  sub_field
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUB_FIELD .

*  PERFORM SUB_SET_FIELD USING  1  'CHECK_BOX' 'GTD_DATA' '' '1'
*                               '选取' 'X' 'X' '' .
  PERFORM SUB_SET_FIELD USING  1   'BUKRS'  'GTD_DATA' ''  '10'
                               '公司代码' '' '' 'X' .
  PERFORM SUB_SET_FIELD USING  2   'EKORG' 'GTD_DATA' ''  '4'
                               '采购组织' '' '' 'X' .
  PERFORM SUB_SET_FIELD USING  3   'EKGRP'  'GTD_DATA' ''  '3'
                               '采购组' '' '' '' .
  PERFORM SUB_SET_FIELD USING  4   'EBELN'  'GTD_DATA' ''  '4'
                               '采购凭证号' '' '' '' .
  PERFORM SUB_SET_FIELD USING  5   'EBELP' 'GTD_DATA' ''  '3'
                               '项目编号' '' '' '' .
  PERFORM SUB_SET_FIELD USING  6   'MATNR'   'GTD_DATA' ''  '10'
                               '物料号' '' '' '' .
  PERFORM SUB_SET_FIELD USING  7   'MAKTX'   'GTD_DATA' ''  '5'
                               '物料描述' '' '' 'X' .
  PERFORM SUB_SET_FIELD USING  8   'MENGE'   'GTD_DATA' '' '18'
                               '数量' '' '' 'X' .
  PERFORM SUB_SET_FIELD USING  9   'MEINS'  'GTD_DATA' ''  '40'
                               '单位' '' '' '' .
  PERFORM SUB_SET_FIELD USING  10  'NETPR' 'GTD_DATA' ''  '9'
                               '价格' '' '' '' .
  PERFORM SUB_SET_FIELD USING  11   'WAERS'  'GTD_DATA' ''  '4'
                               '货币' '' '' '' .
  PERFORM SUB_SET_FIELD USING  12   'EINDT'  'GTD_DATA' ''  '17'
                               '交货日期' '' '' '' .
ENDFORM.                    " sub_field
*&---------------------------------------------------------------------*
*&      Form  sub_set_layout
*&---------------------------------------------------------------------*
*      设置ALV列表显示的布局
*&---------------------------------------------------------------------*
FORM SUB_SET_LAYOUT.
  CLEAR GTH_LAYOUT.
  GTH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.       "设置为最适合的布局
  GTH_LAYOUT-ZEBRA = 'X'.
ENDFORM.                    " sub_set_layout
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*      AVL STATUS
*&---------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET TITLEBAR 'PO2'.                      "设置报表标题
  SET PF-STATUS 'ZSTATUS2' .                "设置工具栏等
ENDFORM.                    "set_pf_status
*&---------------------------------------------------------------------*
*&      Form  sub_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SUB_DISPLAY .

  PERFORM SUB_TITLE.
  PERFORM SUB_FIELD.
  PERFORM SUB_SET_LAYOUT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-CPROG
      I_CALLBACK_TOP_OF_PAGE   = 'ALV_TOP_OF_PAGE'
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND_ALV'
      IT_FIELDCAT              = GTD_FIELDCAT
      IS_LAYOUT                = GTH_LAYOUT
    TABLES
      T_OUTTAB                 = GTD_DATA        "内表
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    "SUB_DISPLAY


*&---------------------------------------------------------------------*
*&      Form  alv_top_of_page
*&---------------------------------------------------------------------*
*       ALV列表抬头的设定
*&---------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = GTD_TITLE.

ENDFORM.   "alv_top_of_page
*&---------------------------------------------------------------------*
*&      Form  user_command_alv
*&---------------------------------------------------------------------*
*      ALV 用户事件
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      Form  sub_clear
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SUB_CLEAR .
  FREE: GTD_DATA,
        GTH_DATA.

ENDFORM.                    " sub_clear
*&---------------------------------------------------------------------*
*&      Form  sub_set_title
*&---------------------------------------------------------------------*
*       ALV列表抬头信息的属性设置
*&---------------------------------------------------------------------*
*  -->  i_typ        "输出的类型
*  -->  i_key        "文本
*  -->  i_info       "数值
*&---------------------------------------------------------------------*
FORM SUB_SET_TITLE USING I_TYP TYPE ANY
                         I_KEY TYPE ANY
                         I_INFO TYPE ANY.

  CLEAR GTH_TITLE.
  GTH_TITLE-TYP  = I_TYP.             "输出的类型
  GTH_TITLE-KEY  = I_KEY.             "文本
  GTH_TITLE-INFO = I_INFO.            "数值
  APPEND GTH_TITLE TO GTD_TITLE.

ENDFORM.     "sub_set_title
*&---------------------------------------------------------------------*
*&       Form sub_set_field
*&---------------------------------------------------------------------*
*        设置ALV字段的属性
*&---------------------------------------------------------------------*
* -->i_pos               "显示列的位置
* -->i_fieldname         "内表的字段名
* -->i_tabname           "内表名
* -->i_box             "显示复选框
* -->i_edit              "是否为可输入
* -->i_key               "设置主键
* -->i_hotspot           "单击控制
* -->i_outputlen         "控制输出列的宽度
* -->i_seltext           "设置列的名称
* -->i_edit              "可编辑
*&---------------------------------------------------------------------*
FORM SUB_SET_FIELD USING I_POS TYPE ANY
                         I_FIELDNAME TYPE ANY
                         I_TABNAME TYPE ANY
                         I_KEY TYPE ANY
                         I_OUTPUTLEN TYPE ANY
                         I_SELTEXT TYPE ANY
                         I_EDIT TYPE ANY
                         I_BOX TYPE ANY
                         I_NO_ZERO TYPE ANY.
  GTH_FIELDCAT-COL_POS = I_POS.                "显示列的位置
  GTH_FIELDCAT-FIELDNAME = I_FIELDNAME.        "内表的字段名
  GTH_FIELDCAT-TABNAME = I_TABNAME.            "内表名
  GTH_FIELDCAT-KEY = I_KEY.                    "设置主键
  GTH_FIELDCAT-OUTPUTLEN = I_OUTPUTLEN.        "控制输出列的宽度
  GTH_FIELDCAT-SELTEXT_M = I_SELTEXT.          "设置列的名称
  GTH_FIELDCAT-EDIT      = I_EDIT.
  GTH_FIELDCAT-CHECKBOX  = I_BOX.
  GTH_FIELDCAT-NO_ZERO    = I_NO_ZERO.
  APPEND GTH_FIELDCAT TO GTD_FIELDCAT.
  CLEAR GTH_FIELDCAT.

ENDFORM.              "sub_set_field

转载于:https://www.cnblogs.com/zuisha13/archive/2011/08/05/luge.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值