sap 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

posted on 2012-11-03 17:26  kydcbt  阅读(558)  评论(0编辑  收藏  举报

导航