ZR_FI_017

*===============================基本信息===============================*
* 标题:GR/IR明细表
* 创建日期:2005-08-05       
*===============================定    义===============================*

************************************************************************
* 基本代码
************************************************************************
REPORT ZR_FI_017
NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE  174
MESSAGE-ID ZFI1.

************************************************************************
* INCLUDE:包含文件
************************************************************************
INCLUDE OLE2INCL.

************************************************************************
* TABLE: 定义TABLE
************************************************************************
TABLES: T001,  "公司代码
        MAKT,  "物料描述
        BKPF,  "会计核算凭证标题(主表)
        BSEG,  "会计核算凭证段(从表)
        MSEG,  "凭证段:物料
        RBKP,
        RSEG,
        RKWA,  "委托领取
        EKPO,  "采购从表
        EKBE,  "采购凭证历史
        VBKPF, "预制凭证的凭证抬头
        SKAT.  "总帐科目主记录(科目表:说明)
************************************************************************
*INTERNAL TABLES
************************************************************************
*定义内表ITABS
*报表最后输出时使用的数据
DATA: BEGIN OF IT_PRINT_001 OCCURS 0.
        DATA FLAG.
        DATA BUKRS LIKE BKPF-BUKRS.    "公司代码
        DATA GJAHR LIKE BKPF-GJAHR.    "会计年度

        DATA BLART LIKE BKPF-BLART.    "凭证类型
        DATA CTYPE LIKE MAKT-MAKTX.    "凭证类型名
        DATA KOART LIKE BSEG-KOART.    "帐户类型
        DATA SHKZG LIKE BSEG-SHKZG.    "借方/贷方
        DATA BLDAT LIKE BKPF-BLDAT.    "凭证中的凭证日期
        DATA BUDAT LIKE BKPF-BUDAT.    "凭证中的记帐日期
        DATA AUGDT LIKE BSEG-AUGDT.    "清账日期
        DATA BELNR LIKE BKPF-BELNR.    "会计凭证号码
        DATA DMBTR LIKE BSEG-DMBTR.    "按本位币计的金额
        DATA LIFNR LIKE BSEG-LIFNR.    "供应商编号
        DATA EBELN LIKE BSEG-EBELN.    "采购凭证号
        DATA EBELP LIKE BSEG-EBELP.    "采购凭证的项目编号
        DATA ZEKKN LIKE BSEG-ZEKKN.    "序列号帐户分配
        DATA MBLNR LIKE MSEG-MBLNR.    "物料凭证号
        DATA MBLNR2 LIKE MSEG-MBLNR.   "发票凭证号
        DATA SGTXT LIKE BSEG-SGTXT.    "项目文本
        DATA MATNR LIKE BSEG-MATNR.    "物料号
        DATA MAKTX LIKE MAKT-MAKTX.    "物料描述
        DATA MENGE LIKE BSEG-MENGE.    "出入库数量
        DATA MEINS LIKE BSEG-MEINS.    "计量单位
        "DATA NETPR LIKE EKPO-NETPR.   "采购凭证中的净价格(以凭证货币计)
        DATA NETPR TYPE P DECIMALS 4.  "价格
        DATA PEINH LIKE EKPO-PEINH.    "价格单位

        DATA HKONT LIKE BSEG-HKONT.    "总分类帐帐目
        DATA AWKEY LIKE BKPF-AWKEY.    "对象关键字
        DATA ZUONR LIKE BSEG-ZUONR.    "分配
DATA: END OF IT_PRINT_001.

DATA: ITAB_01 LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE.
DATA: ITAB_02 LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE.

*往数据库增加运行日志
  DATA: BEGIN OF IT_ZREPORTLOG OCCURS  0.
    INCLUDE TYPE ZREPORTLOG.
  DATA: END OF IT_ZREPORTLOG.
************************************************************************
* CONSTANTS : 定义常量
************************************************************************

************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.

************************************************************************
* DATA : 定义变量
************************************************************************
DATA: NAME_LAST LIKE USER_ADDR-NAME_LAST,
      NAME_FIRST LIKE USER_ADDR-NAME_FIRST,
      NAME(16).

*用于ALV控件双击事件
DATA: G_SELECTED_FIELD_VALUE(80).

*ALV控件构造时需要的参数
DATA: G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      G_ALV_FIELDCAT_LINE LIKE LINE OF G_ALV_FIELDCAT,
      G_ALV_EVENT         TYPE SLIS_T_EVENT.

*ALV控件输出的表头
DATA: G_ALV_LISTHEADER TYPE SLIS_T_LISTHEADER.

*指定ALV控件触发TOP_OF_PAGE事件时调用的子程序
DATA: G_ALV_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
             VALUE 'F_ALV_EVENT_TOP_OF_PAGE'.
DATA: G_ALV_FORMNAME_END_OF_LIST TYPE SLIS_FORMNAME
             VALUE 'F_ALV_EVENT_END_OF_LIST'.

*指定ALV控件的显示特征
DATA : G_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
************************************************************************
* DEFINE: 定义宏
************************************************************************

************************************************************************
*  SELECTION SCREEN : 定义报表筛选条件
************************************************************************
*确定过滤参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_001 WITH FRAME. TITLE BLK_001 .
    PARAMETERS: P_GJAHR LIKE BKPF-GJAHR OBLIGATORY MEMORY ID 117_1.    "会计年度
    PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY MEMORY ID 117_2.    "公司代码
    PARAMETERS: P_SAKNR LIKE BSEG-SAKNR OBLIGATORY DEFAULT '12010000'
                                                   MEMORY ID 117_3.    "G/L科目
    SELECT-OPTIONS P_BUDAT FOR BKPF-BUDAT MEMORY ID 117_4.             "凭证记帐日期
    SELECT-OPTIONS P_BELNR FOR BKPF-BELNR MEMORY ID 117_5.             "财务凭证编号
    SELECT-OPTIONS P_LIFNR FOR BSEG-LIFNR MEMORY ID 117_6.             "供应商编号
    SELECT-OPTIONS P_EBELN FOR BSEG-EBELN MEMORY ID 117_7.             "采购凭证
    SELECT-OPTIONS P_EBELP FOR BSEG-EBELP MEMORY ID 117_8.             "采购凭证项目
SELECTION-SCREEN END OF BLOCK BLK_001.

*特殊汇总类型参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_003 WITH FRAME. TITLE BLK_003 .
    PARAMETERS: P_TYPE1 AS CHECKBOX DEFAULT 'X'.
    PARAMETERS: P_TYPE2 AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK_003.

*选择报表类型
SELECTION-SCREEN BEGIN OF BLOCK BLK_002 WITH FRAME. TITLE BLK_002 .
PARAMETERS: P_REPORT RADIOBUTTON GROUP R1,
            P_ALV RADIOBUTTON GROUP R1 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK_002.


*===============================事    件===============================*
************************************************************************
* INITIALIZATION.启动程序开始执行
************************************************************************
INITIALIZATION.
  BLK_001 = '检索参数'.
  BLK_002 = '报表类型'.
  BLK_003 = '特殊参数处理'.
************************************************************************
* AT SELECTION SCREEN:
************************************************************************
AT SELECTION-SCREEN.
  PERFORM. F_CHECK_INPUT.          "检查用户输入
************************************************************************
* START OF SELECTION:
************************************************************************
START-OF-SELECTION.
*往数据库增加运行日志
  IT_ZREPORTLOG-MANDT = SY-MANDT.
  IT_ZREPORTLOG-TCODE = SY-TCODE.
  IT_ZREPORTLOG-DATUM = SY-DATUM.
  IT_ZREPORTLOG-UZEIT = SY-UZEIT.
  IT_ZREPORTLOG-UNAME = SY-UNAME.
  IT_ZREPORTLOG-TITLE = SY-TITLE.
  APPEND IT_ZREPORTLOG.
  INSERT INTO ZREPORTLOG VALUES IT_ZREPORTLOG .

  PERFORM. F_READ_DATA.

  IF P_REPORT = 'X'.
    PERFORM. F_PRINT_REPORT.
  ELSEIF P_ALV = 'X'.
    PERFORM. F_PRINT_ALV.
  ENDIF.
************************************************************************
* END OF SELECTION
************************************************************************
END-OF-SELECTION.

************************************************************************
* TOP OF PAGE
************************************************************************
TOP-OF-PAGE.
  PERFORM. SUB_HEAD.
************************************************************************
* END OF PAGE
************************************************************************
END-OF-PAGE.
  PERFORM. SUB_BOTTOM.


*===============================子 例 程===============================*
*&---------------------------------------------------------------------*
*过滤条件有效性检查
*&---------------------------------------------------------------------*
FORM. F_CHECK_INPUT.
  "判断是否输入GR/IR或GR/IR调整科目
  IF ( P_SAKNR <> '0012010000' ) AND ( P_SAKNR <> '0012100000' )
   AND ( P_SAKNR <> '0012019999' ).
    MESSAGE E055.
  ENDIF.

  "判断是否存在该凭证记录
  SELECT SINGLE *
    FROM BKPF
    WHERE BUKRS = P_BUKRS AND GJAHR = P_GJAHR
      AND BELNR IN P_BELNR   "会计凭证号码
      AND BUDAT IN P_BUDAT.  "凭证中的记帐日期

  IF SY-SUBRC <> 0.
    MESSAGE E054.
  ENDIF.

ENDFORM.                    " F_CHECK_INPUT
*&---------------------------------------------------------------------*
*从数据库中读取数据,填充报表输出时所用的内表
*&---------------------------------------------------------------------*
FORM. F_READ_DATA .
DATA: L_MBLNR2 LIKE MSEG-MBLNR.   "发票凭证号
DATA: ITAB_TEMP LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE.

*----主记录处理
  IF P_TYPE2 = 'X'.
    SELECT BUKRS         "公司代码
           GJAHR         "会计年度
           BELNR         "会计凭证号码
           BLART         "凭证类型
           BLDAT         "凭证中的凭证日期
           BUDAT         "凭证中的记帐日期
           AWKEY         "对象关键字
      FROM BKPF
      INTO CORRESPONDING FIELDS OF TABLE ITAB_01
      WHERE BUKRS = P_BUKRS
        AND GJAHR = P_GJAHR
        AND BELNR IN P_BELNR
        AND BUDAT IN P_BUDAT
        AND ( BLART = 'WA' OR BLART = 'WE' OR BLART = 'RE'  ).
   ELSE.
    SELECT BUKRS         "公司代码
           GJAHR         "会计年度
           BELNR         "会计凭证号码
           BLART         "凭证类型
           BLDAT         "凭证中的凭证日期
           BUDAT         "凭证中的记帐日期
           AWKEY         "对象关键字
      FROM BKPF
      INTO CORRESPONDING FIELDS OF TABLE ITAB_01
      WHERE BUKRS = P_BUKRS
        AND GJAHR = P_GJAHR
        AND BELNR IN P_BELNR
        AND BUDAT IN P_BUDAT.
   ENDIF.

*----从记录处理
   LOOP AT ITAB_01.
     REFRESH ITAB_02.
     CLEAR ITAB_02.
     IF P_TYPE1 = 'X'.
       SELECT BUKRS      "公司代码
              GJAHR      "会计年度
              BELNR      "会计凭证号码
              KOART      "帐户类型
              SHKZG      "借方/贷方
              DMBTR      "按本位币计的金额
              SGTXT      "项目文本
              HKONT      "总分类帐帐目
              LIFNR      "供应商或债权人的帐号
              EBELN      "采购单号
              EBELP      "采购凭证的项目编号
              MATNR      "物料号
              MENGE      "数量
              MEINS      "基本单位
              ZEKKN      "序列号帐户分配
              AUGDT      "清帐日期
              ZUONR      "分配
         FROM BSEG
         INTO CORRESPONDING FIELDS OF TABLE ITAB_02
         WHERE BUKRS = ITAB_01-BUKRS
           AND GJAHR = ITAB_01-GJAHR
           AND BELNR = ITAB_01-BELNR
           AND BUZEI <> ''
*           AND LIFNR IN P_LIFNR   "直接取BSEG上的供应商,这种方法不全面,有些记录上不含记录.
           AND EBELN IN P_EBELN
           AND EBELP IN P_EBELP
           AND HKONT = P_SAKNR
           AND AUGDT = '00000000'.     "清帐日期
     ELSE.
       SELECT BUKRS      "公司代码
              GJAHR      "会计年度
              BELNR      "会计凭证号码
              KOART      "帐户类型
              SHKZG      "借方/贷方
              DMBTR      "按本位币计的金额
              SGTXT      "项目文本
              HKONT      "总分类帐帐目
              LIFNR      "供应商或债权人的帐号
              EBELN      "采购单号
              EBELP      "采购凭证的项目编号
              MATNR      "物料号
              MENGE      "数量
              MEINS      "基本单位
              ZEKKN      "序列号帐户分配
              AUGDT      "清帐日期
              ZUONR      "分配
         FROM BSEG
         INTO CORRESPONDING FIELDS OF TABLE ITAB_02
         WHERE BUKRS = ITAB_01-BUKRS
           AND GJAHR = ITAB_01-GJAHR
           AND BELNR = ITAB_01-BELNR
           AND BUZEI <> ''
*           AND LIFNR IN P_LIFNR
           AND EBELN IN P_EBELN
           AND EBELP IN P_EBELP
           AND HKONT = P_SAKNR.
     ENDIF.

     "将ITAB_01表的相关记录赋值到ITAB_02内表
     LOOP AT ITAB_02.
       ITAB_02-BLART = ITAB_01-BLART.
       ITAB_02-BLDAT = ITAB_01-BLDAT.
       ITAB_02-BUDAT = ITAB_01-BUDAT.
       "非寄售产生的GR/IR
       IF ITAB_02-BLART <> 'RE'.
         ITAB_02-MBLNR = ITAB_01-AWKEY(10).   "取物料凭证号
       ELSE.
         ITAB_02-MBLNR2 = ITAB_01-AWKEY(10).  "取发票凭证号
       ENDIF.
       "寄售产生的GR/IR
       IF ITAB_02-BLART = 'WA'.
         ITAB_02-MBLNR = ITAB_02-ZUONR(10).   "取物料凭证号
       ENDIF.
       "寄售开票产生的GR/IR
       IF ITAB_02-BLART = 'RE' AND ITAB_02-EBELN = ''.
         ITAB_02-MBLNR = ITAB_02-ZUONR(10).   "取物料凭证号
       ENDIF.

       MODIFY ITAB_02.
     ENDLOOP.

     "将ITAB_02表的相关记录COPY到IT_PRINT_001内表
     LOOP AT ITAB_02.
       IT_PRINT_001-BUKRS = ITAB_02-BUKRS.
       IT_PRINT_001-GJAHR = ITAB_02-GJAHR.
       IT_PRINT_001-BELNR = ITAB_02-BELNR.
       IT_PRINT_001-KOART = ITAB_02-KOART.
       IT_PRINT_001-AUGDT = ITAB_02-AUGDT.
       IT_PRINT_001-SHKZG = ITAB_02-SHKZG.
       IF ITAB_02-SHKZG = 'S'.
         IT_PRINT_001-DMBTR = ITAB_02-DMBTR.
       ELSE.
         IT_PRINT_001-DMBTR = 0 - ITAB_02-DMBTR.
       ENDIF.
       IT_PRINT_001-SGTXT = ITAB_02-SGTXT.
       IT_PRINT_001-HKONT = ITAB_02-HKONT.
       IT_PRINT_001-LIFNR = ITAB_02-LIFNR.
       IT_PRINT_001-EBELN = ITAB_02-EBELN.
       IT_PRINT_001-EBELP = ITAB_02-EBELP.
       IT_PRINT_001-MATNR = ITAB_02-MATNR.
       IT_PRINT_001-MENGE = ITAB_02-MENGE.
       IT_PRINT_001-MEINS = ITAB_02-MEINS.
       IT_PRINT_001-ZEKKN = ITAB_02-ZEKKN.
       IT_PRINT_001-BLART = ITAB_02-BLART.
       IT_PRINT_001-BLDAT = ITAB_02-BLDAT.
       IT_PRINT_001-BUDAT = ITAB_02-BUDAT.
       IT_PRINT_001-MBLNR = ITAB_02-MBLNR.
       IT_PRINT_001-MBLNR2 = ITAB_02-MBLNR2.
       APPEND IT_PRINT_001.
     ENDLOOP.
   ENDLOOP.

*--取非寄售的发票号
  LOOP AT IT_PRINT_001.
    L_MBLNR2 = ''.
    "如果是发票凭证的取其发票号
    IF IT_PRINT_001-BLART = 'WE'.
      SELECT BELNR
        INTO L_MBLNR2
        FROM EKBE
        WHERE EBELN = IT_PRINT_001-EBELN
          AND EBELP = IT_PRINT_001-EBELP
          AND ZEKKN = IT_PRINT_001-ZEKKN
          AND VGABE = '2'
          AND GJAHR = P_GJAHR
          AND BELNR <> ''
          AND BUZEI <> ''
          AND LFBNR = IT_PRINT_001-MBLNR.
      ENDSELECT.

      "如果是物料凭证的通过以下方法取其发票号
      IF L_MBLNR2 = ''.
        SELECT BELNR
          INTO L_MBLNR2
          FROM EKBE
          WHERE EBELN = IT_PRINT_001-EBELN
            AND EBELP = IT_PRINT_001-EBELP
            AND ZEKKN = IT_PRINT_001-ZEKKN
            AND VGABE = '2'
            AND GJAHR = P_GJAHR
            AND BELNR <> ''
            AND BUZEI <> ''
            AND LFBNR IN (
                  SELECT LFBNR                           "参考凭证的凭证号
                     FROM EKBE
                     WHERE EBELN = IT_PRINT_001-EBELN    "采购凭证
                       AND EBELP = IT_PRINT_001-EBELP    "采购凭证项目
                       AND ZEKKN = IT_PRINT_001-ZEKKN
                       AND VGABE = '1'
                       AND GJAHR = P_GJAHR
                       AND BELNR = IT_PRINT_001-MBLNR     "物料凭证号
                       AND BUZEI <> ''
                           ).
        ENDSELECT.
      ENDIF.

      IT_PRINT_001-MBLNR2 = L_MBLNR2.
      MODIFY IT_PRINT_001.
    ENDIF.
  ENDLOOP.

*--取寄售的发票号
  LOOP AT IT_PRINT_001.
    IF IT_PRINT_001-BLART = 'WA'.
      SELECT BELNR
        INTO IT_PRINT_001-MBLNR2
        FROM RKWA
        WHERE MBLNR = IT_PRINT_001-MBLNR
          AND MJAHR = P_GJAHR
          AND ZEILE <> ''
          AND LIFNR = IT_PRINT_001-LIFNR
          AND WERKS = IT_PRINT_001-BUKRS
          AND MATNR = IT_PRINT_001-MATNR.
        ENDSELECT.

      MODIFY IT_PRINT_001.
    ENDIF.
  ENDLOOP.

*--判断该记录是否开票过否,若开过,则删除该记录
  IF P_TYPE2 = 'X'.
    LOOP AT IT_PRINT_001.
      IF IT_PRINT_001-MBLNR2 <> ''.
        DELETE IT_PRINT_001.
      ENDIF.
    ENDLOOP.
  ENDIF.

*--取发票检验的物料凭证号
  LOOP AT IT_PRINT_001.
    IF IT_PRINT_001-BLART = 'RE'.
      SELECT LFBNR
        INTO IT_PRINT_001-MBLNR
        FROM EKBE
        WHERE EBELN = IT_PRINT_001-EBELN
          AND EBELP = IT_PRINT_001-EBELP
          AND ZEKKN = IT_PRINT_001-ZEKKN
          AND VGABE = '2'
          AND GJAHR = P_GJAHR
          AND BELNR = IT_PRINT_001-MBLNR2
          AND BUZEI <> ''.
        ENDSELECT.

      MODIFY IT_PRINT_001.
    ENDIF.
  ENDLOOP.

*--取价格
  LOOP AT IT_PRINT_001.
    IF IT_PRINT_001-MENGE <> 0.
      IT_PRINT_001-NETPR = IT_PRINT_001-DMBTR * 100 / IT_PRINT_001-MENGE.
      IT_PRINT_001-PEINH = 100.
    ELSE.
      IT_PRINT_001-NETPR = 0.
      IT_PRINT_001-PEINH = 0.
    ENDIF.

    MODIFY IT_PRINT_001.
  ENDLOOP.

*--取供应商编号(根据采购订单号)
  LOOP AT IT_PRINT_001.
    IF IT_PRINT_001-EBELN <> ''.
      SELECT LIFNR
        INTO IT_PRINT_001-LIFNR
        FROM EKKO
        WHERE EBELN = IT_PRINT_001-EBELN.
      ENDSELECT.
    ELSE.
      SELECT LIFNR
        INTO IT_PRINT_001-LIFNR
        FROM BSEG
        WHERE BUKRS = IT_PRINT_001-BUKRS
          AND BELNR = IT_PRINT_001-MBLNR
          AND GJAHR = IT_PRINT_001-GJAHR
          AND BUZEI = 1
          AND BUZID = 'K'.
      ENDSELECT.
    ENDIF.

    MODIFY IT_PRINT_001.
  ENDLOOP.

*--供应商过滤
  LOOP AT IT_PRINT_001.
    IF IT_PRINT_001-LIFNR NOT IN P_LIFNR.
      DELETE IT_PRINT_001.
    ENDIF.
  ENDLOOP.

*--取物料描述
  LOOP AT IT_PRINT_001.
    SELECT MAKTX
      INTO IT_PRINT_001-MAKTX
      FROM MAKT
      WHERE SPRAS = '1'
        AND MATNR = IT_PRINT_001-MATNR.
    ENDSELECT.
    MODIFY IT_PRINT_001.
  ENDLOOP.

*--记录类型名称处理
  LOOP AT IT_PRINT_001.
    "
    IF IT_PRINT_001-BLART = 'WA'.
      IF IT_PRINT_001-SHKZG = 'H'.
        IT_PRINT_001-CTYPE = '寄售物料-领料'.
      ELSE.
        IT_PRINT_001-CTYPE = '寄售物料-退料'.
      ENDIF.
    ENDIF.
    "
    IF IT_PRINT_001-BLART = 'WE'.
      IF IT_PRINT_001-SHKZG = 'H'.
        IT_PRINT_001-CTYPE = '采购收货入库'.
      ELSE.
        IT_PRINT_001-CTYPE = '采购退货出库'.
      ENDIF.
    ENDIF.
    "
    IF IT_PRINT_001-BLART = 'RE'.
      IF IT_PRINT_001-EBELN = ''.
        IF IT_PRINT_001-SHKZG = 'H'.
          IT_PRINT_001-CTYPE = '发票检验(寄售物料-退料)'.
        ELSE.
          IT_PRINT_001-CTYPE = '发票检验(寄售物料-领料)'.
        ENDIF.
      ELSE.
        IT_PRINT_001-CTYPE = '发票检验'.
      ENDIF.
    ENDIF.
    "
    IF IT_PRINT_001-BLART = 'AB'.
      IT_PRINT_001-CTYPE = '自动清账'.
    ENDIF.
    "
    IF IT_PRINT_001-BLART = 'SA'.
      IF IT_PRINT_001-SHKZG = 'H'.
        IT_PRINT_001-CTYPE = 'GR/IR调整-冲销'.
      ELSE.
        IT_PRINT_001-CTYPE = 'GR/IR调整'.
      ENDIF.
    ENDIF.

    MODIFY IT_PRINT_001.
  ENDLOOP.

ENDFORM.                    " F_READ_DATA
*&---------------------------------------------------------------------*
*     普通报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_REPORT.

ENDFORM.                     " F_PRINT_REPORT
*&---------------------------------------------------------------------*
*A     ALV报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_ALV.
  REFRESH G_ALV_LISTHEADER[].
  PERFORM. F_ALV_MODIFY_LISTHEADER .
  REFRESH G_ALV_FIELDCAT.
  PERFORM. F_ALV_BUILD_FIELDCAT.
  PERFORM. F_ALV_BUILD_EVENTCAT.
  PERFORM. F_ALV_DISPLAY.
  STOP.
ENDFORM.                    " F_PRINT_ALV
*&---------------------------------------------------------------------*
*&      设置ALV报表输出时的抬头信息
*&---------------------------------------------------------------------*
FORM. F_ALV_MODIFY_LISTHEADER .
  DATA : L_ALV_LISTHEADER_LINE LIKE LINE OF G_ALV_LISTHEADER.
  L_ALV_LISTHEADER_LINE-TYP = 'H'.
  L_ALV_LISTHEADER_LINE-KEY = ''.
  L_ALV_LISTHEADER_LINE-INFO = 'GR/IR明细表'.
  APPEND L_ALV_LISTHEADER_LINE TO G_ALV_LISTHEADER.
ENDFORM.                    " F_ALV_MODIFY_LISTHEADER
*&---------------------------------------------------------------------*
*&      设置ALV报表输出时的字段 NEED MODIFY
*&---------------------------------------------------------------------*
FORM. F_ALV_BUILD_FIELDCAT .
  DATA : COL_POS TYPE I VALUE 0.
  G_ALV_LAYOUT-GET_SELINFOS      = 'X'.
  G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  G_ALV_LAYOUT-DETAIL_POPUP      = 'X'.
  G_ALV_LAYOUT-BOX_FIELDNAME     = 'FLAG'.
  G_ALV_LAYOUT-NO_KEYFIX         = 'X'.
  G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BUKRS'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'BUKRS'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '公司代码'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '公司代码'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '公司代码'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '公司代码'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BLART'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'BLART'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '凭证类型'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '凭证类型'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '凭证类型'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '凭证类型'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MAKT'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MAKTX'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'CTYPE'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '类型名称'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '类型名称'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '类型名称'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '类型名称'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BLDAT'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'BLDAT'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '凭证日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '凭证日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '凭证日期'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '凭证日期'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BUDAT'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'BUDAT'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '记帐日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '记帐日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '记帐日期'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '记帐日期'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'AUGDT'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'AUGDT'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '清帐日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '清帐日期'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '清帐日期'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '清帐日期'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BKPF'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BELNR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'BELNR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '会计凭证号码'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '会计凭证号码'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '会计凭证号码'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '会计凭证号码'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.


  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'DMBTR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'DMBTR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '本位币计的金额'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '本位币计的金额'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '本位币计的金额'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '本位币计的金额'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'LIFNR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'LIFNR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '供应商编号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '供应商编号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '供应商编号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '供应商编号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'EBELN'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'EBELN'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '采购凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '采购凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '采购凭证号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '采购凭证号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'EBELP'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'EBELP'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '采购项目号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '采购项目号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '采购项目号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '采购项目号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MBLNR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MBLNR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '物料凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '物料凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '物料凭证号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '物料凭证号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MBLNR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MBLNR2'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '发票凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '发票凭证号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '发票凭证号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '发票凭证号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'EKPO'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MATNR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MATNR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '物料号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '物料号'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '物料号'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '物料号'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MAKT'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MAKTX'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MAKTX'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '物料描述'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '物料描述'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '物料描述'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '物料描述'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MENGE'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MENGE'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '出入库数量'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '出入库数量'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '出入库数量'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '出入库数量'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MEINS'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'MEINS'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '计量单位'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '计量单位'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '计量单位'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '计量单位'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'EKPO'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'NETPR'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'NETPR'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '净价格'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '净价格'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '净价格'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '净价格'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'EKPO'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'PEINH'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'PEINH'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '价格单位'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '价格单位'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '价格单位'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '价格单位'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'SGTXT'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'SGTXT'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '项目文本'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '项目文本'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '项目文本'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '项目文本'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

  ADD 1 TO COL_POS.
  G_ALV_FIELDCAT_LINE-REF_TABNAME = 'BSEG'.
  G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
  G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'HKONT'.
  G_ALV_FIELDCAT_LINE-FIELDNAME = 'HKONT'.
  G_ALV_FIELDCAT_LINE-KEY = ''.
  G_ALV_FIELDCAT_LINE-DDICTXT(1)  = 'L'.
  G_ALV_FIELDCAT_LINE-SELTEXT_S = '总分类帐帐目'.
  G_ALV_FIELDCAT_LINE-SELTEXT_L = '总分类帐帐目'.
  G_ALV_FIELDCAT_LINE-SELTEXT_M = '总分类帐帐目'.
  G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '总分类帐帐目'.
  G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
  APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.

ENDFORM.                    " F_ALV_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      改变ALV的TOP_OF_PAGE事件处理过程
*&---------------------------------------------------------------------*
FORM. F_ALV_BUILD_EVENTCAT .
  DATA : LS_EVENT TYPE SLIS_ALV_EVENT.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            I_LIST_TYPE = 0
       IMPORTING
            ET_EVENTS   = G_ALV_EVENT.
  READ TABLE G_ALV_EVENT WITH KEY NAME =
       SLIS_EV_TOP_OF_PAGE INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE G_ALV_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
    APPEND LS_EVENT TO G_ALV_EVENT.
  ENDIF.
ENDFORM.                    " F_ALV_BUILD_EVENTCAT
*&---------------------------------------------------------------------*
*&      调用ALV控件的输出程序
*&---------------------------------------------------------------------*
FORM. F_ALV_DISPLAY .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         I_CALLBACK_PROGRAM      = 'ZR_FI_017'
         I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND'
         IS_LAYOUT               = G_ALV_LAYOUT
         IT_FIELDCAT             = G_ALV_FIELDCAT
         I_SAVE                  = 'A'
         IT_EVENTS               = G_ALV_EVENT
         I_GRID_TITLE            = ''
       TABLES
         T_OUTTAB                = IT_PRINT_001
       EXCEPTIONS
         PROGRAM_ERROR           = 1
         OTHERS                  = 2.
ENDFORM.                    " F_ALV_DISPLAY
*&---------------------------------------------------------------------*
*&      ALV控件双击事件的接口
*&---------------------------------------------------------------------*
FORM. F_ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA S_TEMP(100) TYPE C.
  CASE R_UCOMM.
    WHEN '&IC1'.  "NEED MODIFY
      IF RS_SELFIELD-SEL_TAB_FIELD = 'IT_PRINT_001-MATNR'.
        G_SELECTED_FIELD_VALUE =  RS_SELFIELD-VALUE.
       "需调用其它程序。

      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "F_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*&      调用ALV控件的抬头输出程序
*&---------------------------------------------------------------------*
FORM. F_ALV_EVENT_TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
         IT_LIST_COMMENTARY = G_ALV_LISTHEADER.
ENDFORM. "F_ALV_EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      输出ALV的页脚
*&---------------------------------------------------------------------*
FORM. F_ALV_EVENT_END_OF_LIST.
  SKIP.
  WRITE: AT 280 '总计:'.
ENDFORM. "F_ALV_EVENT_END_OF_LIST
*&---------------------------------------------------------------------*
*&      单据表头显示
*&---------------------------------------------------------------------*
FORM. SUB_HEAD.

ENDFORM.                    " SUB_OUTPUTHEAD
*&---------------------------------------------------------------------
*&      单据表尾显示
*&---------------------------------------------------------------------
FORM. SUB_BOTTOM.
*取制单人
 CLEAR NAME_LAST.
 CLEAR NAME_FIRST.
 CLEAR NAME.
 SELECT NAME_LAST NAME_FIRST
      FROM USER_ADDR
   INTO (NAME_LAST, NAME_FIRST)
   WHERE BNAME = SY-UNAME .   "取logon 帐号
 ENDSELECT.
 CONCATENATE NAME_LAST(4) NAME_FIRST(8) INTO NAME.

 WRITE: AT 70  '操作员',NAME+0(10) LEFT-JUSTIFIED .
 WRITE: AT 90 '打印时间:',SY-DATUM,SY-UZEIT.
ENDFORM.                    "SUB_BOTTOM

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/765243/viewspace-253302/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/765243/viewspace-253302/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适用对象: 1.对SAP感兴趣,对财务熟悉,想了解SAP财务模块的财务人员;2.刚刚入行或准备入行的从业人员且想从事SAP财务模块的朋友;3.从事公司IT运维,侧重于财务方向的内部顾问;4.有一定经验的SAP业务顾问,想全面学习SAP财务模块的顾问;5.财会专业大学毕业生,或大四、研三在校生;6.审计人员,想要了解SAP原理。 讲师介绍: 讲师:LEO 从业超过10年的SAP资深财务顾问。 具有多个国内外项目实施经验,涉及电力,制造,地产、电子和零售行业。现任某电子行业的资深财务顾问,提供财务建设的咨询实施服务。精通SAP财务模块,包括财务会计模块(FI),成本会计模块(CO),财务会计模块FI与MM模块集成,财务会计模块FI与SD模块集成,成本会计模块CO与PP模块集成,并且对SAP系统中的MM、SD、PP等模块有比较深的实践, 对业财一体化有较深刻理解,有多家公司的系统实施和运维经验。 课程概述: 一、讲解内容: 1.全面讲解SAP财务模块相关的内容,涵盖总账模块、应付模块、应收模块、固定资产模块、 业务伙伴BP模块、月结&年结模块、后台配置系统讲解、上线数据导入等,不局限于FICO模块。2.侧重FICO相关的模块的系统逻辑和业务场景的联系的讲解。3.侧重FICO前台操作和后台配置的联系的讲解。4.侧重财务和业务联系的讲解,不限于FI-SD集成、FI-MM集成、CO-PP集成等。二、讲课方式: 采用【思维导图+PPT+系统演示(前台操作+后台配置)+实际业务场景】等多种形式。三、通过此课程,你将掌握: 1.SAP基本和复杂操作2.总账会计模块3.应收会计模块4.应付会计模块5.固定资产会计模块6.FI月结和年结 7.FI模块全面的后台配置8.FICO与SD、MM、PP模块的集成9.FICO模块的实施上线10.FICO相关原理和业务四、本次课程【SAP S4 HANA FI财务模块实战课程】主要讲FI财务会计模块,FI财务会计模块内容如下:五、特别说明:CO成本会计模块安排另一套课程【SAP S4 HANA CO成本模块实战课程】,CO成本会计模块内容如下 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值