冰镇可乐 发表于 2015-9-19 08:59:32

sap abap 报表初学

  新进入一家公司,是搞erp的,用的sap,我是一点不懂啊,本来就是初级程序员,这下郁闷了,每人带,自己学……
  开始的任务就是实现个报表和单据打印,中途出现了很多问题,现在把简单报表实现步骤写出来,希望大鸟指正错误和不足
  *&---------------------------------------------------------------------* *& ReportZMM_TEST01 *& Author: 杨路 *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------*
  REPORTZMM_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. *&---------------------------------------------------------------------* *&      FormSUB_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                "屏幕的选择条件   ANDEKKO~LLIEF IN S_LLIEF   ANDEKKO~EBELN IN S_EBELN   AND EKPO~MATNR IN S_MATNR. ENDFORM.
  *&---------------------------------------------------------------------* *&      FormSUB_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
  *&---------------------------------------------------------------------* *&      Formsub_field *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *-->p1      text *<--p2      text *----------------------------------------------------------------------* FORM SUB_FIELD .
  *PERFORM SUB_SET_FIELD USING1'CHECK_BOX' 'GTD_DATA' '' '1' *                               '选取' 'X' 'X' '' .   PERFORM SUB_SET_FIELD USING1   'BUKRS''GTD_DATA' '''10'                              '公司代码' '' '' 'X' .   PERFORM SUB_SET_FIELD USING2   'EKORG' 'GTD_DATA' '''4'                              '采购组织' '' '' 'X' .   PERFORM SUB_SET_FIELD USING3   'EKGRP''GTD_DATA' '''3'                              '采购组' '' '' '' .   PERFORM SUB_SET_FIELD USING4   'EBELN''GTD_DATA' '''4'                              '采购凭证号' '' '' '' .   PERFORM SUB_SET_FIELD USING5   'EBELP' 'GTD_DATA' '''3'                              '项目编号' '' '' '' .   PERFORM SUB_SET_FIELD USING6   'MATNR'   'GTD_DATA' '''10'                              '物料号' '' '' '' .   PERFORM SUB_SET_FIELD USING7   'MAKTX'   'GTD_DATA' '''5'                              '物料描述' '' '' 'X' .   PERFORM SUB_SET_FIELD USING8   'MENGE'   'GTD_DATA' '' '18'                              '数量' '' '' 'X' .   PERFORM SUB_SET_FIELD USING9   'MEINS''GTD_DATA' '''40'                              '单位' '' '' '' .   PERFORM SUB_SET_FIELD USING10'NETPR' 'GTD_DATA' '''9'                              '价格' '' '' '' .   PERFORM SUB_SET_FIELD USING11   'WAERS''GTD_DATA' '''4'                              '货币' '' '' '' .   PERFORM SUB_SET_FIELD USING12   'EINDT''GTD_DATA' '''17'                              '交货日期' '' '' '' . ENDFORM.                  " sub_field *&---------------------------------------------------------------------* *&      Formsub_set_layout *&---------------------------------------------------------------------* *      设置ALV列表显示的布局 *&---------------------------------------------------------------------* FORM SUB_SET_LAYOUT.   CLEAR GTH_LAYOUT.   GTH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.       "设置为最适合的布局   GTH_LAYOUT-ZEBRA = 'X'. ENDFORM.                  " sub_set_layout *&---------------------------------------------------------------------* *&      Formset_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 *&---------------------------------------------------------------------* *&      Formsub_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
  *&---------------------------------------------------------------------* *&      Formalv_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 *&---------------------------------------------------------------------* *&      Formuser_command_alv *&---------------------------------------------------------------------* *      ALV 用户事件 *&---------------------------------------------------------------------*
  *&---------------------------------------------------------------------* *&      Formsub_clear *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM SUB_CLEAR .   FREE: GTD_DATA,         GTH_DATA.
  ENDFORM.                  " sub_clear *&---------------------------------------------------------------------* *&      Formsub_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
页: [1]
查看完整版本: sap abap 报表初学