采购订单付款清单

来源:互联网 发布:贴膜工具专用套箱淘宝 编辑:程序博客网 时间:2024/04/28 21:00
*----------------------------------------------------------------------*
* Program Name          :  采购订单付款清单                            *
* Purpose               :                                              *
* Project Name          :                                              *
* Created by            :                                              *
* Create on             :  2010-09-16                                  *
* Functional Consultant :  
* Description           :
*
*
*----------------------------------------------------------------------*
*    Modification Log                                                  *
*Date        Programmer     Corr. #      Description                   *
*2010/MM/DD  xxxxxxxxxx     xxxxxxxxxx   Initial pgm dev               *
*----------------------------------------------------------------------*

REPORT  ZMM018.

********************************
*TABLE DECLARE
********************************
TABLES:EKKO,                "采购订单抬头
       EKPO,                "采购订单行项目
       BSIK,                "对供应商付款
       BSAK.                "对供应商付款(清账)

*********************************
*GLOBAL DEFINITIONS
*********************************
TYPE-POOLSSLIS.

DATAFIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATAIT_FIELDCAT TYPE LVC_T_FCAT,
      WA_FIELDCAT TYPE LVC_S_FCAT,

      GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT    TYPE LVC_S_LAYO,
      GD_REPID     LIKE SY-REPID.

DATA:WA_SORT TYPE LVC_S_SORT,           "用于排序后汇总
     IT_SORT TYPE LVC_T_SORT.

DATA:WA_EXCLUDING TYPE SLIS_EXTAB,      "隐藏标准工具栏按钮
     IT_EXCLUDING TYPE SLIS_T_EXTAB.

**********************************
*DATA DEFINITIONS
**********************************
TYPES:BEGIN OF TY_OUT,
      LIFNR LIKE EKKO-LIFNR,                      "供应商
      LLIEF LIKE EKKO-LLIEF,                      "产品供应商
      EBELN LIKE EKKO-EBELN,                      "采购订单号
      WAERS LIKE EKKO-WAERS,                      "货币单位
      EINDT LIKE EKET-EINDT,                      "请求交货日期
      ELIKZ LIKE EKPO-ELIKZ,                      "交货已完成
      BRTWR LIKE EKPO-BRTWR,                      "采购订单金额
      MWSKZ LIKE EKPO-MWSKZ,                      "税码
      NAME1 LIKE LFA1-NAME1,                      "供应商名称
      NAME2 LIKE LFA1-NAME2,                      "产品供应商名称
      EBELP LIKE EKPO-EBELP,                      "采购订单行项目
      WRBTR LIKE EKBE-WRBTR,                      "收货金额
      BUDAT LIKE EKBE-BUDAT,                      "最后收货日期
      XREF2 LIKE BSIK-XREF2,                      "合同号
      NETWR LIKE BSIK-WRBTR,                      "付款金额
      BSDAT LIKE BSIK-BUDAT,                      "付款日期
      BELNR LIKE BSIK-BELNR,                      "付款凭证号
      SGTXT LIKE BSIK-SGTXT,                      "文本
      NETPR LIKE BSIK-WRBTR,                      "未付款金额
      END OF TY_OUT.

DATA:IT_EKKO TYPE TY_OUT OCCURS WITH HEADER LINE.
DATA:IT_TEMP TYPE TY_OUT OCCURS WITH HEADER LINE.
DATA:IT_OUT  TYPE TY_OUT OCCURS WITH HEADER LINE.
DATA:IT_OUTX  TYPE TY_OUT OCCURS WITH HEADER LINE.

TYPES:BEGIN OF TY_EKET,
      EBELN LIKE EKET-EBELN,                      "采购订单号
      EINDT LIKE EKET-EINDT,                      "请求交货日期
      END OF TY_EKET.
DATA:IT_EKET TYPE TY_EKET OCCURS WITH HEADER LINE .

TYPES:BEGIN OF TY_LFA1,
      LIFNR LIKE LFA1-LIFNR,
      NAME1 LIKE LFA1-NAME1,
      END OF TY_LFA1.
DATA:IT_LFA1 TYPE TY_LFA1 OCCURS WITH HEADER LINE .

TYPES:BEGIN OF TY_EKBE,
      EBELN LIKE EKBE-EBELN,                "采购订单号
      MWSKZ LIKE EKPO-MWSKZ,                "税码
      BWART LIKE EKBE-BWART,                "移动类型
      BELNR LIKE EKBE-BELNR,                "商品凭证号(用于防止for all entires of 删除相同项)
      BUZEI LIKE EKBE-BUZEI,                "商品凭证项目
      WRBTR LIKE EKBE-WRBTR,                "收货金额
      END OF TY_EKBE.
DATA:IT_EKBE1 TYPE TY_EKBE OCCURS WITH HEADER LINE.
DATA:IT_EKBE TYPE TY_EKBE OCCURS WITH HEADER LINE.

TYPES:BEGIN OF TY_BUDAT,
      EBELN LIKE EKBE-EBELN,
      BUDAT LIKE EKBE-BUDAT,
      END OF TY_BUDAT.
DATA:IT_BUDAT TYPE TY_BUDAT OCCURS WITH HEADER LINE .

TYPES:BEGIN OF TY_BSIK,
      XREF1 LIKE BSIK-XREF1,                "采购订单号
      BELNR LIKE BSIK-BELNR,                "付款凭证号
      BUDAT LIKE BSIK-BUDAT,                "付款日期
      XREF2 LIKE BSIK-XREF2,                "合同号
      SHKZG LIKE BSIK-SHKZG,                "借贷标记
      WRBTR LIKE BSIK-WRBTR,                "付款金额
      SGTXT LIKE BSIK-SGTXT,                "文本
      END OF TY_BSIK.
DATA:IT_BSIK TYPE TY_BSIK OCCURS WITH HEADER LINE .
DATA:IT_BSK TYPE TY_BSIK OCCURS WITH HEADER LINE .
*******************************************
*SELECT CONDITION
*******************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
              S_EBELN FOR EKKO-EBELN,               "采购订单号
              S_LIFNR FOR EKKO-LIFNR,               "供应商代码
              S_AEDAT FOR EKKO-AEDAT.               "采购订单创建日期
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
        P_RAD1 RADIOBUTTON GROUP RD DEFAULT 'X',  "汇总
        P_RAD2 RADIOBUTTON GROUP RD.              "明细
SELECTION-SCREEN END OF BLOCK B2.


*&--------------------------------------------*
*&  START-OF-SELECTION
*&--------------------------------------------*
START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM ASSORT_DATA.
  PERFORM SORT_ALV.
  PERFORM BUILD_FIELDCATALOG.
  PERFORM BUILD_LAYOUT.
  PERFORM BUILD_EXCLUDING.
  PERFORM DISPLAY_ALV_REPORT.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
*& 取供应商名称和产品供应商名称
  SELECT LIFNR NAME1 INTO TABLE IT_LFA1 FROM LFA1 ORDER BY LIFNR.

*&取采购订单(对于已经审批过并收货过的采购订单不允许修改行项目或增加新行项目 如果业务这样操作 我们将得到错误数据)
  SELECT EKKO~LIFNR
         EKKO~LLIEF
         EKKO~EBELN
         EKKO~WAERS
         EKPO~BRTWR
         EKPO~MWSKZ
         EKPO~ELIKZ
         EKPO~EBELP
         INTO CORRESPONDING FIELDS OF TABLE IT_EKKO
         FROM EKKO INNER JOIN EKPO ON EKKO~EBELN EKPO~EBELN
         WHERE EKKO~EBELN IN S_EBELN AND EKKO~LIFNR IN S_LIFNR AND EKKO~AEDAT IN S_AEDAT AND EKKO~BSART 'ZNB' AND EKKO~PROCSTAT '05' AND EKPO~LOEKZ <> 'L'.
  LOOP AT IT_EKKO .           "根据税码计算得到含税金额
    IF IT_EKKO-MWSKZ 'J1'.
      IT_EKKO-BRTWR IT_EKKO-BRTWR * '1.17'.
    ELSEIF IT_EKKO-MWSKZ 'J2'.
      IT_EKKO-BRTWR IT_EKKO-BRTWR * '1.13'.
    ELSEIF IT_EKKO-MWSKZ 'J6'.
      IT_EKKO-BRTWR IT_EKKO-BRTWR * '1.03'.
    ELSEIF IT_EKKO-MWSKZ 'J0'.
      IT_EKKO-BRTWR IT_EKKO-BRTWR .
    ENDIF.
    MODIFY IT_EKKO.
  ENDLOOP.
  APPEND LINES OF IT_EKKO TO IT_TEMP.
  SORT IT_TEMP BY LIFNR LLIEF EBELN WAERS.
  LOOP AT IT_TEMP.              "处理内表,得到采购订单的有效总金额
    IT_OUT-LIFNR IT_TEMP-LIFNR.
    IT_OUT-LLIEF IT_TEMP-LLIEF.
    IT_OUT-EBELN IT_TEMP-EBELN.
    IT_OUT-WAERS IT_TEMP-WAERS.
    AT END OF WAERS.
      SUM.
      IT_OUT-BRTWR IT_TEMP-BRTWR.
      APPEND IT_OUT.
      CLEAR IT_OUT.
    ENDAT.
  ENDLOOP.

*& 取收货金额
  SORT IT_EKKO BY EBELN EBELP.
  DELETE ADJACENT DUPLICATES FROM IT_EKKO COMPARING EBELN EBELP.
  IF IT_EKKO[] IS NOT INITIAL.
    SELECT EKBE~EBELN EKPO~MWSKZ EKBE~BWART EKBE~BELNR EKBE~BUZEI EKBE~WRBTR INTO TABLE IT_EKBE1 "为防止for all entries 删除所有字段值相同项增加关键字
      FROM EKBE INNER JOIN EKPO ON EKPO~EBELN EKBE~EBELN AND EKPO~EBELP EKBE~EBELP
       FOR ALL ENTRIES IN IT_EKKO WHERE EKBE~EBELN IT_EKKO-EBELN AND EKBE~EBELP IT_EKKO-EBELP AND EKBE~BWART IN ('101','105','102','106').
  ENDIF.
  LOOP AT IT_EKBE1.
    IF IT_EKBE1-BWART '102' OR IT_EKBE1-BWART '106'.
      IT_EKBE1-WRBTR IT_EKBE1-WRBTR * -1.
    ENDIF.
    IF IT_EKBE1-MWSKZ 'J1'.
      IT_EKBE1-WRBTR IT_EKBE1-WRBTR * '1.17'.
    ELSEIF IT_EKBE1-MWSKZ 'J2'.
      IT_EKBE1-WRBTR IT_EKBE1-WRBTR * '1.13'.
    ELSEIF IT_EKBE1-MWSKZ 'J6'.
      IT_EKBE1-WRBTR IT_EKBE1-WRBTR * '1.03'.
    ELSEIF IT_EKBE1-MWSKZ 'J0'.
      IT_EKBE1-WRBTR IT_EKBE1-WRBTR .
    ENDIF.
    MODIFY IT_EKBE1.
  ENDLOOP.
  SORT IT_EKBE1 BY EBELN.
  LOOP AT IT_EKBE1.
    IT_EKBE-EBELN IT_EKBE1-EBELN.
    AT END OF EBELN.
      SUM.
      IT_EKBE-WRBTR IT_EKBE1-WRBTR.
      APPEND IT_EKBE.
      CLEAR IT_EKBE.
    ENDAT.
  ENDLOOP.
  SORT IT_EKBE BY EBELN.

*& 取付款情况
  SELECT XREF1 BELNR BUDAT XREF2 SHKZG WRBTR SGTXT INTO TABLE IT_BSIK FROM BSIK
    WHERE XREF1 IN S_EBELN AND XREF1 <> ''.
  SELECT XREF1 BELNR BUDAT XREF2 SHKZG WRBTR SGTXT APPENDING TABLE IT_BSIK FROM BSAK
    WHERE XREF1 IN S_EBELN AND XREF1 <> ''.
  LOOP AT IT_BSIK WHERE SHKZG 'H'.
    IT_BSIK-WRBTR IT_BSIK-WRBTR * -1.
    MODIFY IT_BSIK.
  ENDLOOP.
  SORT IT_BSIK BY XREF1.
  LOOP AT IT_BSIK.
    IT_BSK-XREF1 IT_BSIK-XREF1.
    IT_BSK-XREF2 IT_BSIK-XREF2.
    AT END OF XREF1.
      SUM.
      IT_BSK-WRBTR IT_BSIK-WRBTR.
      APPEND IT_BSK.
      CLEAR IT_BSK.
    ENDAT.
  ENDLOOP.
  SORT IT_BSK BY XREF1.

*& 取最后收货日期
  SELECT EBELN MAXBUDAT AS BUDAT INTO TABLE IT_BUDAT FROM EKBE  WHERE EBELN IN S_EBELN
    AND EKBE~BWART IN ('101','105','102','106'GROUP BY EBELN ORDER BY EBELN.

*& 取采购订单请求交货日期
  SELECT EKET~EBELN MAXEINDT AS EINDT INTO TABLE IT_EKET FROM EKET INNER JOIN EKPO ON EKET~EBELN EKPO~EBELN AND EKET~EBELP EKPO~EBELP
     WHERE EKET~EBELN IN S_EBELN AND EKPO~LOEKZ <> 'L' GROUP BY EKET~EBELN ORDER BY EKET~EBELN.

  SORT IT_TEMP BY EBELN ELIKZ.
  DELETE ADJACENT DUPLICATES FROM IT_TEMP COMPARING EBELN ELIKZ."根据采购订单号和交货已完成分类删除相同项
  SORT IT_TEMP BY EBELN.


ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG .
  DATA:COL_POS TYPE I.

  WA_FIELDCAT-FIELDNAME   'LIFNR'.
  WA_FIELDCAT-SCRTEXT_M   '供应商代码'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   8.
  WA_FIELDCAT-EMPHASIZE   'X'.
  WA_FIELDCAT-KEY         'X'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'NAME1'.
  WA_FIELDCAT-SCRTEXT_M   '供应商名称'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   20.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'LLIEF'.
  WA_FIELDCAT-SCRTEXT_M   '产品供应商'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   8.
  WA_FIELDCAT-EMPHASIZE   'X'.
  WA_FIELDCAT-KEY         'X'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'NAME2'.
  WA_FIELDCAT-SCRTEXT_M   '产品供应商名称'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   20.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'XREF2'.
  WA_FIELDCAT-SCRTEXT_M   '合同号'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   10.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'EBELN'.
  WA_FIELDCAT-SCRTEXT_M   '采购订单号'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   10.
  WA_FIELDCAT-EMPHASIZE   'X'.
  WA_FIELDCAT-KEY         'X'.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'EINDT'.
  WA_FIELDCAT-SCRTEXT_M   '要求收货日期'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   10.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'BUDAT'.
  WA_FIELDCAT-SCRTEXT_M   '最后收货日期'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   10.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'ELIKZ'.
  WA_FIELDCAT-SCRTEXT_M   '完结标识'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   5.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  WA_FIELDCAT-FIELDNAME   'WAERS'.
  WA_FIELDCAT-SCRTEXT_M   '货币单位'.
  COL_POS  COL_POS + .
  WA_FIELDCAT-COL_POS     COL_POS.
  WA_FIELDCAT-OUTPUTLEN   4.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR  WA_FIELDCAT.

  IF P_RAD1 'X'.

    WA_FIELDCAT-FIELDNAME   'BRTWR'.
    WA_FIELDCAT-SCRTEXT_M   '订单有效金额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'WRBTR'.
    WA_FIELDCAT-SCRTEXT_M   '已收货总额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'NETWR'.
    WA_FIELDCAT-SCRTEXT_M   '付款总额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'NETPR'.
    WA_FIELDCAT-SCRTEXT_M   '未付款总额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

  ELSEIF P_RAD2 'X'.

    WA_FIELDCAT-FIELDNAME   'BRTWR'.
    WA_FIELDCAT-SCRTEXT_M   '订单有效金额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'WRBTR'.
    WA_FIELDCAT-SCRTEXT_M   '已收货总额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'BELNR'.
    WA_FIELDCAT-SCRTEXT_M   '付款凭证号'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   10.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'BSDAT'.
    WA_FIELDCAT-SCRTEXT_M   '付款日期'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   10.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'NETWR'.
    WA_FIELDCAT-SCRTEXT_M   '付款金额'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   15.
    WA_FIELDCAT-DO_SUM      'X'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

    WA_FIELDCAT-FIELDNAME   'SGTXT'.
    WA_FIELDCAT-SCRTEXT_M   '文本'.
    COL_POS  COL_POS + .
    WA_FIELDCAT-COL_POS     COL_POS.
    WA_FIELDCAT-OUTPUTLEN   30.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
    CLEAR  WA_FIELDCAT.

  ENDIF.

ENDFORM.                    " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT .
* Set layout field for field attributes(i.e. input/output)
  GD_LAYOUT-ZEBRA             'X'.
  GD_LAYOUT-NO_TOTLINE        'X'."用于控制不显示总计项
  GD_LAYOUT-CWIDTH_OPT        'X'."优化列宽
ENDFORM.                    " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT .
  GD_REPID SY-REPID.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM          GD_REPID
      I_CALLBACK_HTML_TOP_OF_PAGE 'ALV_TOP_OF_PAGE'
      IS_LAYOUT_LVC               GD_LAYOUT
      IT_FIELDCAT_LVC             IT_FIELDCAT
      IT_EXCLUDING                IT_EXCLUDING
      IT_SORT_LVC                 IT_SORT
      I_SAVE                      'X'
    TABLES
      T_OUTTAB                    IT_OUT
    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.                    " DISPLAY_ALV_REPORT

*&---------------------------------------------------------------------*
*&      Form  SORT_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SORT_ALV .
  WA_SORT-SPOS          '01'.
  WA_SORT-FIELDNAME     'WAERS'.
  WA_SORT-UP            'X'.
  WA_SORT-SUBTOT        'X'.
  APPEND WA_SORT TO IT_SORT.
  CLEAR WA_SORT.
ENDFORM.                    " SORT_ALV
*&---------------------------------------------------------------------*
*&      Form  ASSORT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ASSORT_DATA .
  IF P_RAD1 'X'.
    LOOP AT IT_OUT.
      READ TABLE IT_LFA1 WITH KEY LIFNR IT_OUT-LIFNR BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-NAME1 IT_LFA1-NAME1.
      ENDIF.

      READ TABLE IT_LFA1 WITH KEY LIFNR IT_OUT-LLIEF BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-NAME2 IT_LFA1-NAME1.
      ENDIF.

      READ TABLE IT_EKET WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-EINDT IT_EKET-EINDT.
      ENDIF.

      READ TABLE IT_EKBE WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-WRBTR IT_EKBE-WRBTR.
      ENDIF.

      READ TABLE IT_BUDAT WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-BUDAT IT_BUDAT-BUDAT.
      ENDIF.

      READ TABLE IT_BSK WITH KEY XREF1 IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-XREF2 IT_BSK-XREF2.
        IT_OUT-NETWR IT_BSK-WRBTR.
      ENDIF.

      READ TABLE IT_TEMP WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-ELIKZ IT_TEMP-ELIKZ.
      ENDIF.
      IF IT_OUT-ELIKZ 'X'.
        IT_OUT-ELIKZ '是'.
        IT_OUT-NETPR IT_OUT-WRBTR IT_OUT-NETWR.
      ELSE.
        IT_OUT-ELIKZ '否'.
        IT_OUT-NETPR IT_OUT-BRTWR IT_OUT-NETWR.
      ENDIF.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  IT_OUT-LIFNR
        IMPORTING
          OUTPUT IT_OUT-LIFNR.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  IT_OUT-LLIEF
        IMPORTING
          OUTPUT IT_OUT-LLIEF.
      MODIFY IT_OUT.
    ENDLOOP .
*    DELETE IT_OUT WHERE NETWR = 0.
    CLEAR:IT_TEMP,IT_TEMP[].
  ELSEIF P_RAD2 'X'.
    LOOP AT IT_OUT.
      READ TABLE IT_LFA1 WITH KEY LIFNR IT_OUT-LIFNR BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-NAME1 IT_LFA1-NAME1.
      ENDIF.

      READ TABLE IT_LFA1 WITH KEY LIFNR IT_OUT-LLIEF BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-NAME2 IT_LFA1-NAME1.
      ENDIF.

      READ TABLE IT_EKET WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-EINDT IT_EKET-EINDT.
      ENDIF.

      READ TABLE IT_EKBE WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-WRBTR IT_EKBE-WRBTR.
      ENDIF.

      READ TABLE IT_BUDAT WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-BUDAT IT_BUDAT-BUDAT.
      ENDIF.

      READ TABLE IT_TEMP WITH KEY EBELN IT_OUT-EBELN BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUT-ELIKZ IT_TEMP-ELIKZ.
      ENDIF.
      IF IT_OUT-ELIKZ 'X'.
        IT_OUT-ELIKZ '是'.
      ELSE.
        IT_OUT-ELIKZ '否'.
      ENDIF.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  IT_OUT-LIFNR
        IMPORTING
          OUTPUT IT_OUT-LIFNR.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  IT_OUT-LLIEF
        IMPORTING
          OUTPUT IT_OUT-LLIEF.
      MODIFY IT_OUT.
    ENDLOOP .
    CLEAR:IT_TEMP,IT_TEMP[].

    SORT IT_OUT BY EBELN.
    LOOP AT IT_BSIK.
      READ TABLE IT_OUT WITH KEY EBELN IT_BSIK-XREF1 BINARY SEARCH.
      IF SY-SUBRC 0.
        IT_OUTX IT_OUT.
        IT_OUTX-XREF2 IT_BSIK-XREF2.
        IT_OUTX-NETWR IT_BSIK-WRBTR.
        IT_OUTX-BSDAT IT_BSIK-BUDAT.
        IT_OUTX-BELNR IT_BSIK-BELNR.
        IT_OUTX-SGTXT IT_BSIK-SGTXT.
        APPEND IT_OUTX.
        CLEAR IT_OUTX.
      ENDIF.
    ENDLOOP.

    CLEAR:IT_OUT,IT_OUT[].
    DATA:L_EBELN LIKE EKKO-EBELN.
    CLEAR L_EBELN.
    LOOP AT IT_OUTX.
      IF L_EBELN IT_OUTX-EBELN.
        IT_OUTX-BRTWR 0.
        IT_OUTX-WRBTR 0.
        MODIFY IT_OUTX.
      ENDIF.
      L_EBELN IT_OUTX-EBELN.
    ENDLOOP.
    APPEND LINES OF IT_OUTX TO IT_OUT.

  ENDIF.
ENDFORM.                    " ASSORT_DATA

*&---------------------------------------------------------------------*
*&      Form  alv_top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->CL_DD      text
*----------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE USING CL_DD TYPE REF TO CL_DD_DOCUMENT.
  DATAM_P TYPE I.
  DATAM_BUFF TYPE STRING.

  M_BUFF '<html>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.

  M_BUFF '<H2><font color=#336699>采购订单付款清单</font></H2>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.

*  CALL METHOD CL_DD->ADD_GAP
*    EXPORTING
*      WIDTH = 210.
*
*  CALL METHOD CL_DD->ADD_PICTURE
*    EXPORTING
*      PICTURE_ID = 'ENJOYSAP_LOGO'.

  M_BUFF '<font color=#336699>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.

  CONCATENATE '<b>PRINT DATE</b>:' SY-DATUM+0(4)'-'SY-DATUM+4(2)'-'SY-DATUM+6(2'&nbsp;&nbsp;&nbsp;<b>USER</b>:' SY-UNAME '<br>' INTO M_BUFF.

  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.

  M_BUFF '</font>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.

  M_BUFF '</html>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS M_BUFF
    CHANGING
      POSITION M_P.
ENDFORM.                    "alv_top_of_page
*&---------------------------------------------------------------------*
*&      Form  BUILD_EXCLUDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_EXCLUDING .
  WA_EXCLUDING-FCODE '&UMC'.            "隐藏合计
  APPEND WA_EXCLUDING TO IT_EXCLUDING.

  WA_EXCLUDING-FCODE '&SUM'.            "隐藏小计
  APPEND WA_EXCLUDING TO IT_EXCLUDING.
ENDFORM.                    " BUILD_EXCLUDING
原创粉丝点击