ABAP:OLE输出Excel的demo

OLE技术输出Excel是一种常用的报表输出技术,下面的程序是一个通过OLE输出Excel的demo程序。

**&********************************************************************
*& PROGRAM NAME        : 其他业务收支明细表                            *
*& Module Name         : FI                                           *
*& Apply Author        :                                              *
*& Author              :                                              *
*& Started on          :                                              *
*& Transaction         :                                              *
*& Program type        :                                              *
*& SAP Release         :                                              *
*& Program ID          : ZFIR_031                                     *
*& Program Description : 其他业务收支明细表                            *
*&*&*******************************************************************
*&*&*******************************************************************
* MODIFICATIONS (latest entry at the top)                             *
* ------------------------------------------------------------------- *
* REL  DATE    NAME (COMPANY)   DESCRIPTION               TASK-NO     *
* ---  ----    ---- ---------     -----------             -------     *
***********************************************************************
REPORT zfir_031.

INCLUDE ZFIR_031_TOP.

INCLUDE ZFIR_031_OLE.

INCLUDE ZFIR_031_FRM.


*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

*&---------------------------------------------------------------------*
*&      INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.

  PERFORM frm_init.

*----------------------------------------------------------------------*
*        AT SELECTION-SCREEN ON VALUE-REQUEST                          *
*----------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM frm_check_input.

  PERFORM frm_get_data.

*&---------------------------------------------------------------------*
*&      END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      frm_data_show.
*&---------------------------------------------------------------------*

  PERFORM frm_process_data.

  PERFORM frm_excel_show.
*&---------------------------------------------------------------------*
*& 包含               ZFIR_031_TOP
*&---------------------------------------------------------------------*

TABLES: kna1,skat,bkpf,bseg,mara,acdoca.

DATA: p_dateb TYPE sy-datum,
      p_datee TYPE sy-datum.

DATA: zcount     TYPE i,
      lv_count   TYPE i,
      lv_count1  TYPE i,
      lv_count2  TYPE i,
      lv_count3  TYPE i,
      lv_count4  TYPE i,
      lv_count5  TYPE i,
      lv_count6  TYPE i,
      lv_count7  TYPE i,
      lv_count8  TYPE i,
      lv_count9  TYPE i,
      lv_count10 TYPE i,
      lv_count11 TYPE i,
      lv_count12 TYPE i,
      lv_count13 TYPE i,
      lv_count14 TYPE i,
      lv_count15 TYPE i,
      lv_count16 TYPE i.

DATA: lv_linename TYPE string.

DATA: lv_linecount TYPE i.

DATA: p_gjahr1 TYPE bkpf-gjahr,
      p_dateb1 TYPE sy-datum,
      p_datee1 TYPE sy-datum.

TYPES: BEGIN OF tys_acdoca,
         rbukrs TYPE acdoca-rbukrs,
         kunnr  TYPE acdoca-kunnr,
         zz004  TYPE acdoca-zz004,
         gjahr  TYPE acdoca-gjahr,
         monat  TYPE bkpf-monat,
         drcrk  TYPE acdoca-drcrk,
         racct  TYPE acdoca-racct,
         msl    TYPE acdoca-msl,
         hsl    TYPE acdoca-hsl,
         belnr  TYPE acdoca-belnr,
         buzei  TYPE acdoca-buzei,
         blart  TYPE acdoca-blart,
         docln  TYPE acdoca-docln,
         budat  TYPE acdoca-budat,
         matnr  TYPE acdoca-matnr,
*         MATKL  TYPE MARA-MATKL,
         name1  TYPE kna1-name1,
       END OF tys_acdoca.

DATA: wa_acdoca TYPE tys_acdoca,
      gt_acdoca TYPE STANDARD TABLE OF tys_acdoca.

TYPES: BEGIN OF tys_alvshow,
         kunnr TYPE acdoca-kunnr,
         name1 TYPE kna1-name1,
         zbysl TYPE acdoca-msl,
         zbyje TYPE acdoca-hsl,
         zbnsl TYPE acdoca-msl,
         zbnje TYPE acdoca-hsl,
         zsnsl TYPE acdoca-msl,
         zsnje TYPE acdoca-hsl,
       END OF tys_alvshow.

DATA: wa_alvshowtmp TYPE tys_alvshow,
      gt_alvshowtmp TYPE STANDARD TABLE OF tys_alvshow.

DATA: wa_alvshow111 TYPE tys_alvshow,
      gt_alvshow111 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow112 TYPE tys_alvshow,
      gt_alvshow112 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow211 TYPE tys_alvshow,
      gt_alvshow211 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow212 TYPE tys_alvshow,
      gt_alvshow212 TYPE STANDARD TABLE OF tys_alvshow.

DATA: wa_alvshow1211 TYPE tys_alvshow,
      gt_alvshow1211 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow1212 TYPE tys_alvshow,
      gt_alvshow1212 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow1213 TYPE tys_alvshow,
      gt_alvshow1213 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow1221 TYPE tys_alvshow,
      gt_alvshow1221 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow1222 TYPE tys_alvshow,
      gt_alvshow1222 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow1223 TYPE tys_alvshow,
      gt_alvshow1223 TYPE STANDARD TABLE OF tys_alvshow.

DATA: wa_alvshow2211 TYPE tys_alvshow,
      gt_alvshow2211 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow2212 TYPE tys_alvshow,
      gt_alvshow2212 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow2213 TYPE tys_alvshow,
      gt_alvshow2213 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow2221 TYPE tys_alvshow,
      gt_alvshow2221 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow2222 TYPE tys_alvshow,
      gt_alvshow2222 TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow2223 TYPE tys_alvshow,
      gt_alvshow2223 TYPE STANDARD TABLE OF tys_alvshow.

DATA: gt_alvshow_gyjztz TYPE STANDARD TABLE OF tys_alvshow,
      wa_alvshow_gyjztz TYPE tys_alvshow.

*-->Add begin at 20211018 增加分摊逻辑
TYPES: BEGIN OF tys_cbft,           " 成本单独按物料数量的比例再分摊到内外部 20210806
* added by yiqy 20220224 --- begin
         gjahr TYPE acdoca-gjahr,
         monat TYPE bkpf-monat,
* added by yiqy 20220224 --- end
         matnr TYPE acdoca-matnr,
         msl   TYPE acdoca-msl,
         zbysl TYPE acdoca-msl,
         zbyje TYPE acdoca-hsl,
         zbnsl TYPE acdoca-msl,
         zbnje TYPE acdoca-hsl,
         zsnsl TYPE acdoca-msl,
         zsnje TYPE acdoca-hsl,
       END OF tys_cbft.

DATA: wa_cbft211 TYPE tys_cbft,     " 成本单独按物料数量的比例再分摊到内外部 20210806
      gt_cbft211 TYPE STANDARD TABLE OF tys_cbft.
DATA: wa_cbft212 TYPE tys_cbft,
      gt_cbft212 TYPE STANDARD TABLE OF tys_cbft.
DATA: wa_cbft21 TYPE tys_cbft,
      gt_cbft21 TYPE STANDARD TABLE OF tys_cbft.
*-->Add end at 20211018 增加分摊逻辑
*----------------------------------------------------------------------*
*- Selection Screen                                                   -*
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-s01.

*  PARAMETERS: P_ZDATE TYPE BSEG-AUGDT DEFAULT SY-DATUM OBLIGATORY .
*  PARAMETERS: p_bukrs TYPE bkpf-bukrs OBLIGATORY .
  SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY .
  PARAMETERS: p_gjahr TYPE bkpf-gjahr DEFAULT sy-datum+0(4) OBLIGATORY .
  PARAMETERS: p_monat TYPE bkpf-monat DEFAULT sy-datum+4(2) OBLIGATORY .

*  SELECT-OPTIONS: S_HKONT FOR BSEG-HKONT.
*  SELECT-OPTIONS: S_KUNNR FOR KNA1-KUNNR.
*  SELECT-OPTIONS: S_LIFNR FOR LFA1-LIFNR.

SELECTION-SCREEN END OF BLOCK blk1.
*&---------------------------------------------------------------------*
*& 包含               ZFIR_031_OLE
*&---------------------------------------------------------------------*


*----------------------------------------------------------------------*
*  DEFINE TYPE POOL
*----------------------------------------------------------------------*
* DOI使用的Type pool
TYPE-POOLS: SBDST,SOI.

*----------------------------------------------------------------------*
* CLASS DECLARATION
*----------------------------------------------------------------------*
CLASS LC_EXCEL_DOCUMENT DEFINITION DEFERRED.
CLASS CL_GUI_CFW DEFINITION LOAD.

* DOI使用的变量
DATA: GO_DOCUMENT TYPE REF TO LC_EXCEL_DOCUMENT.
DATA: GV_DOC_URL TYPE BAPIURI-URI.
DATA: GV_DOCUMENT_TYPE TYPE SOI_DOCUMENT_TYPE VALUE SOI_DOCTYPE_EXCEL_CHART.
DATA: GO_CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL.
DATA: GO_ERROR TYPE REF TO I_OI_ERROR.
*DATA: go_container TYPE REF TO cl_gui_custom_container.
DATA: GO_CONTAINER TYPE REF TO CL_GUI_CONTAINER.
DATA: GO_LINK_SERVER TYPE REF TO I_OI_LINK_SERVER.
DATA: GO_BDS_INSTANCE TYPE REF TO CL_BDS_DOCUMENT_SET.
DATA: GT_RANGES TYPE SOI_RANGE_LIST.
DATA: GT_ERROR_TABLE TYPE TABLE OF REF TO I_OI_ERROR.
DATA: GT_CONTENTS TYPE SOI_GENERIC_TABLE.
DATA: GT_CELLTAB TYPE SOI_CELL_TABLE.
DATA: GWA_RANGE LIKE LINE OF GT_RANGES.
DATA: GWA_CONTENT LIKE LINE OF GT_CONTENTS.
DATA: GWA_CELLTAB LIKE LINE OF GT_CELLTAB.
DATA: GV_AVAILABLE TYPE I.
DATA: LV_RANGENAME TYPE C.
DATA:LV_TYP TYPE I.
DATA:LV_COLOR TYPE I.

DATA: GV_CLASSNAME      TYPE SBDST_CLASSNAME VALUE 'HRFPM_EXCEL_STANDARD',
      GV_CLASSTYPE      TYPE SBDST_CLASSTYPE VALUE 'OT',
      GT_DOC_URIS       TYPE SBDST_URI,
      GT_DOC_SIGNATURE  TYPE SBDST_SIGNATURE,
      GWA_DOC_SIGNATURE LIKE LINE OF GT_DOC_SIGNATURE,
      GWA_DOC_URIS      LIKE LINE OF GT_DOC_URIS.
DATA: GO_SAVE_ERROR TYPE REF TO I_OI_ERROR.
DATA: GV_RETCODE TYPE SOI_RET_STRING .
DATA: GT_DATA_TABLE TYPE SBDST_CONTENT,
      GV_DATA_SIZE  TYPE I.
DATA: CL_CONTAINER TYPE REF TO CL_GUI_CONTAINER,
      CL_SPLITTER  TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
DATA LV_FILENAME TYPE RLGRAP-FILENAME .
DATA: L_FILE         TYPE STRING,
      L_FILE_IMPORT  TYPE STRING,
      L_PATH_INITIAL TYPE STRING,
      LT_FILE_TABLE  TYPE FILETABLE,
      LW_FILE        TYPE FILE_TABLE,
      L_RC           TYPE I.
DATA:GO_RANGE TYPE OLE2_OBJECT.
DATA: L_RANGE(15) TYPE C,
      V_CELL_F    TYPE OLE2_OBJECT,      "From cell
      V_CELL_T    TYPE OLE2_OBJECT.      "To cell.
*----------------------------------------------------------------------*
* DEFINE LOCAL CLASS
*----------------------------------------------------------------------*
CLASS LC_EXCEL_DOCUMENT DEFINITION.
  PUBLIC SECTION.
    DATA: PROXY         TYPE REF TO I_OI_DOCUMENT_PROXY,
          DOCUMENT_TYPE TYPE SOI_DOCUMENT_TYPE,
          DATA_TABLE    TYPE SBDST_CONTENT,
          DATA_SIZE     TYPE I,
          DOC_URL       TYPE BAPIURI-URI.
    DATA: SHEET_INTERFACE TYPE REF TO I_OI_SPREADSHEET.

*   构造器
    METHODS: CONSTRUCTOR
      IMPORTING CONTROL       TYPE REF TO I_OI_CONTAINER_CONTROL
                DOCUMENT_TYPE TYPE SOI_DOCUMENT_TYPE.

*   关闭DOI文档时事件,询问是否保存
    METHODS: ON_CLOSE_DOCUMENT
      FOR EVENT ON_CLOSE_DOCUMENT OF I_OI_DOCUMENT_PROXY
      IMPORTING DOCUMENT_PROXY HAS_CHANGED.

*   打开DOI
    METHODS: OPEN_DOCUMENT_URL
      IMPORTING OPEN_INPLACE  TYPE C DEFAULT ' '
                OPEN_READONLY TYPE C DEFAULT ' '
                DOC_URL       TYPE BAPIURI-URI DEFAULT ' '
      EXPORTING ERROR         TYPE REF TO I_OI_ERROR.

*   关闭DOI文档
    METHODS: CLOSE_DOCUMENT
      IMPORTING DO_SAVE         TYPE C DEFAULT ' '
                VALUE(NO_FLUSH) TYPE C DEFAULT ' '
      EXPORTING ERROR           TYPE REF TO I_OI_ERROR.

  PRIVATE SECTION.
    DATA: CONTROL  TYPE REF TO I_OI_CONTAINER_CONTROL.


ENDCLASS. "c_excel_document DEFINITION

*----------------------------------------------------------------------*
*       CLASS lc_excel_document IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LC_EXCEL_DOCUMENT IMPLEMENTATION.

  METHOD: CONSTRUCTOR.

    ME->CONTROL = CONTROL.
    ME->DOCUMENT_TYPE = DOCUMENT_TYPE.

  ENDMETHOD.                    "constructor



  METHOD OPEN_DOCUMENT_URL.

    IF NOT PROXY IS INITIAL.
      CALL METHOD ME->CLOSE_DOCUMENT.
    ENDIF.
    CALL METHOD CONTROL->GET_DOCUMENT_PROXY
      EXPORTING
        DOCUMENT_TYPE      = DOCUMENT_TYPE
        REGISTER_CONTAINER = ABAP_TRUE
      IMPORTING
        DOCUMENT_PROXY     = PROXY
        ERROR              = ERROR.
    IF ERROR->ERROR_CODE NE C_OI_ERRORS=>RET_OK.
      EXIT.
    ENDIF.
    ME->DOC_URL = DOC_URL.
    CALL METHOD PROXY->OPEN_DOCUMENT
      EXPORTING
        DOCUMENT_URL     = DOC_URL
        OPEN_INPLACE     = OPEN_INPLACE
        OPEN_READONLY    = OPEN_READONLY
        PROTECT_DOCUMENT = ABAP_TRUE
      IMPORTING
        ERROR            = ERROR.

    IF ERROR->ERROR_CODE NE C_OI_ERRORS=>RET_OK.
      EXIT.
    ENDIF.

    CALL METHOD PROXY->HAS_SPREADSHEET_INTERFACE
      IMPORTING
        IS_AVAILABLE = GV_AVAILABLE
        ERROR        = ERROR.

    IF GV_AVAILABLE EQ 1.
      CALL METHOD PROXY->GET_SPREADSHEET_INTERFACE
        IMPORTING
          SHEET_INTERFACE = SHEET_INTERFACE
          ERROR           = ERROR.
      SET HANDLER ME->ON_CLOSE_DOCUMENT FOR PROXY.
    ENDIF.

  ENDMETHOD.                    "open_document_url

  METHOD CLOSE_DOCUMENT.

    DATA: IS_CLOSED   TYPE I, HAS_CHANGED TYPE I.
    DATA: SAVE_ERROR TYPE REF TO I_OI_ERROR.

    IF NOT PROXY IS INITIAL.
      CALL METHOD PROXY->IS_DESTROYED
        IMPORTING
          RET_VALUE = IS_CLOSED.

      IF IS_CLOSED IS INITIAL.
        CALL METHOD PROXY->CLOSE_DOCUMENT
          EXPORTING
            DO_SAVE     = DO_SAVE
          IMPORTING
            HAS_CHANGED = HAS_CHANGED
            ERROR       = ERROR.
        IF ERROR->ERROR_CODE NE C_OI_ERRORS=>RET_OK.
          EXIT.
        ENDIF.
      ENDIF.

      IF NOT HAS_CHANGED IS INITIAL.
        CALL METHOD PROXY->SAVE_DOCUMENT_TO_TABLE
          EXPORTING
            NO_FLUSH       = ABAP_TRUE
          IMPORTING
            ERROR          = SAVE_ERROR
          CHANGING
            DOCUMENT_TABLE = DATA_TABLE
            DOCUMENT_SIZE  = DATA_SIZE.
      ENDIF.

      CALL METHOD PROXY->RELEASE_DOCUMENT
        IMPORTING
          ERROR = ERROR.

      IF NOT SAVE_ERROR IS INITIAL.
        IF SAVE_ERROR->ERROR_CODE NE C_OI_ERRORS=>RET_OK.
          ERROR = SAVE_ERROR.
        ENDIF.
      ENDIF.

      SET HANDLER ME->ON_CLOSE_DOCUMENT FOR PROXY ACTIVATION ' '.

    ELSE.
      CALL METHOD C_OI_ERRORS=>CREATE_ERROR_FOR_RETCODE
        EXPORTING
          RETCODE  = C_OI_ERRORS=>RET_DOCUMENT_NOT_OPEN
          NO_FLUSH = ' '
        IMPORTING
          ERROR    = ERROR.
    ENDIF.

  ENDMETHOD.                    "close_document

  METHOD ON_CLOSE_DOCUMENT.

    DATA: ANSWER, DO_SAVE.

    IF HAS_CHANGED EQ 1.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          TITLEBAR              = TEXT-T05
          TEXT_QUESTION         = TEXT-T06
          DISPLAY_CANCEL_BUTTON = ' '
        IMPORTING
          ANSWER                = ANSWER.
      IF ANSWER EQ '1'.
        DO_SAVE = 'X'.
      ELSE.
        DO_SAVE = ' '.
      ENDIF.
      CALL METHOD ME->CLOSE_DOCUMENT
        EXPORTING
          DO_SAVE = DO_SAVE
        IMPORTING
          ERROR   = GO_ERROR.
      CALL METHOD GO_ERROR->RAISE_MESSAGE
        EXPORTING
          TYPE = 'E'.
    ENDIF.
  ENDMETHOD.                    "on_close_document

ENDCLASS. "lc_excel_document IMPLEMENTATION

*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_SAVE
*&---------------------------------------------------------------------*
* text:保存excel到本地
*----------------------------------------------------------------------*
FORM FRM_EXCEL_SAVE .

  DATA:LV_RETCODE TYPE SOI_RET_STRING.

  IF NOT GO_DOCUMENT IS INITIAL AND NOT GO_DOCUMENT->PROXY IS INITIAL.
    CALL METHOD GO_DOCUMENT->PROXY->SAVE_AS
      EXPORTING
        FILE_NAME = LV_FILENAME
*       prompt_user = abap_true
      IMPORTING
        ERROR     = GO_ERROR
        RETCODE   = LV_RETCODE.

    IF LV_RETCODE = 'OK'.
*      MESSAGE    s001(00) WITH '下载成功'.
    ENDIF.
  ELSE.
    MESSAGE S001(00) WITH '下载失败' DISPLAY LIKE 'E'.
  ENDIF.

  CALL METHOD CL_GUI_CFW=>FLUSH.
  CALL METHOD CL_GUI_CFW=>DISPATCH.

ENDFORM. " FRM_EXCEL_SAVE

*&---------------------------------------------------------------------*
*&      Form  FRM_EXIT
*&---------------------------------------------------------------------*
*       text:退出DOI
*----------------------------------------------------------------------*
FORM FRM_EXIT .

  CALL METHOD CL_GUI_CFW=>FLUSH.
  CALL METHOD CL_GUI_CFW=>DISPATCH.
  CALL METHOD GO_LINK_SERVER->STOP_LINK_SERVER
    IMPORTING
      ERROR   = GO_ERROR
      RETCODE = GV_RETCODE.
  CALL METHOD GO_DOCUMENT->PROXY->CLOSE_DOCUMENT
    EXPORTING
      DO_SAVE  = ' '
      NO_FLUSH = ' '
    IMPORTING
      ERROR    = GO_ERROR
      RETCODE  = GV_RETCODE.
  CALL METHOD GO_CONTROL->RELEASE_ALL_DOCUMENTS
    EXPORTING
      NO_FLUSH = ' '
    IMPORTING
      ERROR    = GO_ERROR
      RETCODE  = GV_RETCODE.
*****************************Modify by Sariel 10.09.2014 13:37:18 S
  GO_CONTROL->DESTROY_CONTROL( ).
*****************************Modify by Sariel 10.09.2014 13:37:18 E
*      perform frm_init_excel_var.
  FREE: GO_CONTROL,GO_LINK_SERVER,GO_DOCUMENT,
        GO_ERROR,GO_LINK_SERVER,GO_BDS_INSTANCE.
  REFRESH: GT_CONTENTS, GT_DOC_URIS,GT_DOC_SIGNATURE.
*  CALL METHOD go_container->free.
  LEAVE TO SCREEN 0.

ENDFORM. " FRM_EXIT

*&---------------------------------------------------------------------*
*&      Form  FRM_EXCEL_PRINT
*&---------------------------------------------------------------------*
*       text:调用excel打印功能直接打印
*----------------------------------------------------------------------*
FORM FRM_EXCEL_PRINT .

  DATA:LV_RETCODE TYPE SOI_RET_STRING.

  IF NOT GO_DOCUMENT IS INITIAL AND
      NOT GO_DOCUMENT->PROXY IS INITIAL.
    CALL METHOD GO_DOCUMENT->PROXY->PRINT_DOCUMENT
      EXPORTING
        PROMPT_USER = ABAP_TRUE
      IMPORTING
        ERROR       = GO_ERROR
        RETCODE     = LV_RETCODE.
    CALL METHOD GO_ERROR->RAISE_MESSAGE
      EXPORTING
        TYPE = 'E'.
    IF LV_RETCODE = 'OK'.
      MESSAGE S039(SPPF_MEDIA).
    ENDIF.
  ELSE.
    MESSAGE S238(LF) DISPLAY LIKE 'E'.
  ENDIF.
  CALL METHOD CL_GUI_CFW=>FLUSH.
  CALL METHOD CL_GUI_CFW=>DISPATCH.

ENDFORM. " FRM_EXCEL_PRINT

*&---------------------------------------------------------------------*
*&      Form  frm_getcell
*&---------------------------------------------------------------------*
*        得到单元格
*----------------------------------------------------------------------*
*      -->U_I        行
*      -->U_J        列
*      -->U_VALUE    单元格值
*----------------------------------------------------------------------*
FORM FRM_GETCELL TABLES T_CONTENTS TYPE SOI_GENERIC_TABLE
                        USING U_I
                               U_J
                               U_VALUE U_I_FLAG.

  DATA: L_VALUE(40).

  L_VALUE = U_VALUE.

  IF U_I_FLAG EQ ABAP_TRUE.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        VALUE = L_VALUE.
  ENDIF.

  GWA_CONTENT-ROW = U_I.
  GWA_CONTENT-COLUMN = U_J.
  GWA_CONTENT-VALUE = L_VALUE.

  APPEND GWA_CONTENT TO T_CONTENTS.
  CLEAR GWA_CONTENT.

ENDFORM. "frm_getcell


"下载模板时传入的参数
TYPES: BEGIN OF TY_DOWN_TEMPLET,
         RELID    TYPE WWWDATATAB-RELID,    "'MI'
         OBJID    TYPE WWWDATATAB-OBJID,    "在SMW0传入的文件名
         TEXT     TYPE WWWDATATAB-TEXT,     "在SMW0传入的文件描述
         DEF_NAME TYPE STRING,          "保存时的文件名
       END OF TY_DOWN_TEMPLET.

DATA:WA_DOWN_TEMPLET TYPE TY_DOWN_TEMPLET.
DATA :P_FULLPATH TYPE RLGRAP-FILENAME.
*define for Excel process
TYPE-POOLS OLE2.
CONSTANTS : C_OBJID TYPE WWWDATATAB-OBJID VALUE SY-REPID.
DATA: LC_RANGE TYPE OLE2_OBJECT.
*END
*创建对象实例,用于打开Excel程序
DATA: XL_APPL           TYPE OLE2_OBJECT,
      XL_SHEET          TYPE OLE2_OBJECT,
      XL_INIT_SHEET     TYPE OLE2_OBJECT,
      XL_TEMPLATE_SHEET TYPE OLE2_OBJECT,
      XL_WKBKS          TYPE OLE2_OBJECT,
      XL_CELL           TYPE OLE2_OBJECT,
      XL_ROW            TYPE OLE2_OBJECT,
      XL_FONT           TYPE OLE2_OBJECT.
DATA:L_INDEX TYPE SY-TABIX.
DATA LV_TABIX TYPE SY-TABIX.
*END
DATA: LV_DDTEXT TYPE DD07V-DDTEXT.
DATA: LV_DOMVALUE TYPE DD07V-DOMVALUE_L.
DATA: E_SUBRC TYPE CHAR1.


*取域值
FORM F_GET_DESC_FROM_DOMAIN USING PV_NAME TYPE DD07V-DOMNAME
                                    PV_DOMVALUE TYPE  DD07V-DOMVALUE_L
                             CHANGING CV_TEXT TYPE DD07V-DDTEXT.

  CLEAR:CV_TEXT.
  CALL FUNCTION 'DOMAIN_VALUE_GET'
    EXPORTING
      I_DOMNAME  = PV_NAME
      I_DOMVALUE = PV_DOMVALUE
    IMPORTING
      E_DDTEXT   = CV_TEXT
    EXCEPTIONS
      NOT_EXIST  = 1
      OTHERS     = 2.

ENDFORM.
*下载路径选择
*&---------------------------------------------------------------------*
*&      Form  FM_DOWN_MODEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FM_DOWN_MODEL .

  DATA: LW_NAME     LIKE WWWDATATAB,
        LI_MIME     LIKE W3MIME OCCURS 10,
        L_FILENAME  TYPE STRING,
        L_PATH      TYPE STRING,
        L_FULLPATH  TYPE STRING,
        L_TITLE     TYPE STRING,
        L_DEF_NAME  TYPE STRING,
        USER_ACTION TYPE I.

  DATA : LS_ERRTXT      TYPE STRING.
  DATA : LI_RC TYPE SY-SUBRC.

  CLEAR: LW_NAME.
*判断是否存在模版
  SELECT SINGLE RELID OBJID TEXT INTO CORRESPONDING FIELDS OF LW_NAME
      FROM WWWDATA
      WHERE SRTF2 = 0
      AND RELID = WA_DOWN_TEMPLET-RELID
      AND OBJID = WA_DOWN_TEMPLET-OBJID.
  IF SY-SUBRC NE 0 OR LW_NAME-OBJID EQ SPACE.
    CONCATENATE '模板文件' WA_DOWN_TEMPLET-RELID '不存在,请用TCODE:SMWO进行加载' INTO LS_ERRTXT.
    MESSAGE LS_ERRTXT TYPE  'S' DISPLAY LIKE 'E'.
    E_SUBRC = 'E'.
    RETURN.
  ENDIF.

  CLEAR: L_TITLE.
  L_TITLE = '请选择存放路径'."保存框标题

  CLEAR:L_DEF_NAME.
  L_DEF_NAME = WA_DOWN_TEMPLET-DEF_NAME."保存时的文件名





*  "选择下载路径
*  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
*    EXPORTING
*      WINDOW_TITLE         = L_TITLE
*      DEFAULT_EXTENSION    = 'xlsx'
*      DEFAULT_FILE_NAME    = L_DEF_NAME
*      FILE_FILTER          = 'Excel文件(*.XLS)|*.XLS|Excel文件(*.XLSX)|*.XLSX|全部文件 (*.*)|*.*|' "'(电子表格EXCEL)'
*    CHANGING
*      FILENAME             = L_FILENAME
*      PATH                 = L_PATH
*      FULLPATH             = L_FULLPATH
*      USER_ACTION          = USER_ACTION
*    EXCEPTIONS
*      CNTL_ERROR           = 1
*      ERROR_NO_GUI         = 2
*      NOT_SUPPORTED_BY_GUI = 3
*      OTHERS               = 4.
*  IF USER_ACTION = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.
*    MESSAGE S001(00) WITH '文件下载打开操作已取消!' DISPLAY LIKE 'W'.
*    E_SUBRC = 'E'.
*    RETURN.
*  ENDIF.
*  IF  L_FULLPATH EQ ''.
*    MESSAGE S001(00) WITH '文件路径不能为空' DISPLAY LIKE 'E'.
*    E_SUBRC = 'E'.
*    RETURN.
*  ENDIF.
*
*  P_FULLPATH =  L_FULLPATH .


  CONCATENATE 'C:\Temp' '\'  L_DEF_NAME INTO P_FULLPATH .

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = LW_NAME
      DESTINATION = P_FULLPATH     " 'C:\Temp\test************.xls' .
    IMPORTING
      RC          = LI_RC.
  IF LI_RC NE 0.
    CONCATENATE '模板文件:' WA_DOWN_TEMPLET-RELID '下载失败' INTO LS_ERRTXT.
    MESSAGE LS_ERRTXT TYPE 'S' DISPLAY LIKE 'E'.
    E_SUBRC = 'E'.
    RETURN.
  ENDIF.

ENDFORM.

*打开EXCEL
*&---------------------------------------------------------------------*
*&      Form  FM_OPENEXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FM_OPENEXCEL .
  DATA: COLUMN  TYPE OLE2_OBJECT.
  CREATE OBJECT XL_APPL 'EXCEL.APPLICATION'.
  IF SY-SUBRC <> 0.
    MESSAGE S001(00) WITH '创建EXCLE对象失败,稍后重试' DISPLAY LIKE 'E'.
    E_SUBRC = 'E'.
    RETURN.
  ENDIF.
*  SET PROPERTY OF xl_appl 'Visible' = 1.
  CALL METHOD OF
    XL_APPL
      'Workbooks' = XL_WKBKS.
  CALL METHOD OF
    XL_WKBKS
    'Open'
    EXPORTING
      #1 = P_FULLPATH
      #2 = 0
      #3 = 0.             "只读参数
  IF SY-SUBRC <> 0.
    PERFORM FREE_OBJECT.
    MESSAGE S001(00) WITH '打开模板文件失败,请检查参数是否正确!' DISPLAY LIKE 'E'.
    E_SUBRC = 'E'.
    RETURN.
  ENDIF.
  CALL METHOD OF
      XL_APPL
      'Worksheets' = XL_SHEET
    EXPORTING
      #1           = 'sheet1'.
*  SET PROPERTY OF xl_sheet 'NAME' = 's1'.
  GET PROPERTY OF XL_APPL 'ActiveWorkbook' =  XL_WKBKS. "必须加上,否则无法保存excel.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FREE_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FREE_OBJECT .
  FREE OBJECT XL_ROW.
  FREE OBJECT XL_CELL.
  FREE OBJECT XL_SHEET.
  FREE OBJECT XL_INIT_SHEET.
  FREE OBJECT XL_TEMPLATE_SHEET.
  FREE OBJECT XL_WKBKS.
  FREE OBJECT XL_APPL.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  EXCEL_WRITE_CELL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_XL_APPL  text
*      -->P_L_INDEX  text
*      -->P_1      text
*      -->P_L_INDEX  text
*----------------------------------------------------------------------*
FORM EXCEL_WRITE_CELL USING XLS TYPE OLE2_OBJECT
                            ROW   TYPE I
                            COL   TYPE I
                            FVAL.
*  DATA: cell TYPE ole2_object.
  CALL METHOD OF
      XLS
      'CELLS' = XL_CELL
    EXPORTING
      #1      = ROW
      #2      = COL.

  SET PROPERTY OF XL_CELL 'VALUE' = FVAL.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DELETE_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_INDEX  text
*----------------------------------------------------------------------*
FORM FRM_DELETE_LINE USING VALUE(F_ROW).
  DATA: LC_RANGE TYPE OLE2_OBJECT.

  CALL METHOD OF XL_SHEET'Rows' = LC_RANGE
    EXPORTING #1 = F_ROW.

  CALL METHOD OF LC_RANGE 'Delete'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INSERT_COPY_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_INDEX  text
*----------------------------------------------------------------------*
FORM FRM_INSERT_COPY_LINE USING VALUE(F_RANGE).
  DATA: LC_RANGE TYPE OLE2_OBJECT.

  CALL METHOD OF XL_APPL 'Rows' = LC_RANGE
     EXPORTING #1 = F_RANGE.
  CALL METHOD OF LC_RANGE 'Select'.
  CALL METHOD OF LC_RANGE 'Copy'.
  CALL METHOD OF LC_RANGE 'Insert'.
  FREE OBJECT LC_RANGE.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  EXCEL_SET_FONT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_XL_APPL  text
*      -->P_1      text
*      -->P_2      text
*      -->P_LV_HEAD  text
*----------------------------------------------------------------------*
FORM EXCEL_SET_FONT USING XLS TYPE OLE2_OBJECT
                              ROW   TYPE I
                              COL   TYPE I
                              FVAL.
  CALL METHOD OF
     XLS
     'CELLS' = XL_CELL
   EXPORTING
     #1      = ROW
     #2      = COL.

  CALL METHOD OF XL_CELL 'FONT' = XL_FONT.
  SET PROPERTY OF XL_FONT 'SIZE' = '18'.
  SET PROPERTY OF XL_CELL 'VALUE' = FVAL.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INSERT_COPY_COL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_INDEX  text
*----------------------------------------------------------------------*
FORM FRM_INSERT_COPY_COL USING VALUE(F_RANGE).
  DATA: LC_RANGE TYPE OLE2_OBJECT.

  CALL METHOD OF XL_APPL 'Columns' = LC_RANGE
     EXPORTING #1 = F_RANGE.
  CALL METHOD OF LC_RANGE 'Select'.
  CALL METHOD OF LC_RANGE 'Copy'.
  CALL METHOD OF LC_RANGE 'Insert'.
  FREE OBJECT LC_RANGE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  MERGE_CELLS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_XL_APPL  text
*      -->P_1      text
*      -->P_LV_COL  text
*----------------------------------------------------------------------*
FORM MERGE_CELLS USING P_ROW TYPE STRING
                           P_COL TYPE STRING.

  DATA: LC_RANGE TYPE OLE2_OBJECT.
  CALL METHOD OF   XL_SHEET 'Range' = LC_RANGE
        EXPORTING
          #1 = P_ROW
          #2 = P_COL.
  SET PROPERTY OF LC_RANGE 'MergeCells' = 1.
  SET PROPERTY OF LC_RANGE 'VerticalAlignment' = 2."居中对齐
  FREE OBJECT LC_RANGE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  MERGE_CELLS2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_R  text
*      -->P_LV_R  text
*----------------------------------------------------------------------*
FORM MERGE_CELLS2 USING P_ROW TYPE STRING
                             P_COL TYPE STRING.

  DATA: LC_RANGE TYPE OLE2_OBJECT.
  CALL METHOD OF   XL_SHEET 'Range' = LC_RANGE
        EXPORTING
          #1 = P_ROW
          #2 = P_COL.
  SET PROPERTY OF LC_RANGE 'MergeCells' = 1.
  SET PROPERTY OF LC_RANGE 'horizontalAlignment'  = 3."居中对齐

  FREE OBJECT LC_RANGE.
ENDFORM.
FORM FRM_COPY_RANGE USING VALUE(F_RANGE)
                           P_FROW TYPE I
                           P_FCOL TYPE I.
*                           p_trow TYPE i
*                           p_tcol TYPE i.


  CALL METHOD OF XL_SHEET 'Range' = GO_RANGE
    EXPORTING
      #1 = F_RANGE.
  CALL METHOD OF GO_RANGE 'Copy'.
* mark whole spread sheet
  CALL METHOD OF XL_SHEET 'Cells' = V_CELL_F
    EXPORTING
    #1 = P_FROW
    #2 = P_FCOL.
  CALL METHOD OF XL_SHEET 'Cells' = V_CELL_T
    EXPORTING
    #1 = P_FROW
    #2 = P_FCOL.
  CALL METHOD OF XL_SHEET 'RANGE' = GO_RANGE
    EXPORTING
    #1 = V_CELL_F
    #2 = V_CELL_T.
  CALL METHOD OF GO_RANGE 'SELECT'.
  CALL METHOD OF XL_SHEET 'Paste'.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               ZFIR_031_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_input .

  CLEAR: p_dateb,p_datee,p_dateb1,p_datee1.

  p_dateb+0(4) = p_gjahr.
  p_dateb+4(2) = p_monat.
  p_dateb+6(2) = '01'.

  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
    EXPORTING
      i_date = p_dateb
    IMPORTING
      e_date = p_datee.

  p_gjahr1 = p_gjahr - 1.

  p_dateb1+0(4) = p_gjahr1.
  p_dateb1+4(2) = p_monat.
  p_dateb1+6(2) = '01'.

  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
    EXPORTING
      i_date = p_dateb1
    IMPORTING
      e_date = p_datee1.

*  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
*        ID 'BUKRS' FIELD P_BUKRS
*        ID 'ACTVT' DUMMY .
*  IF SY-SUBRC <> 0 .
*    MESSAGE '您无权限查看公司代码:' && P_BUKRS && '的报表' TYPE 'S' DISPLAY LIKE 'E' .
*    LEAVE LIST-PROCESSING .
*  ENDIF.
  SELECT bukrs FROM t001 INTO TABLE @DATA(lt_t001) WHERE bukrs IN @s_bukrs.
  REFRESH s_bukrs.
  LOOP AT lt_t001 INTO DATA(ls_t001).
    AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
          ID 'BUKRS' FIELD ls_t001-bukrs
          ID 'ACTVT' DUMMY .
    IF sy-subrc = 0.
      s_bukrs = 'IEQ'.
      s_bukrs-low = ls_t001-bukrs.
      APPEND s_bukrs.
    ENDIF.
  ENDLOOP.
  IF s_bukrs[] IS INITIAL .
    MESSAGE '您无权限查看此报表' TYPE 'S' DISPLAY LIKE 'E' .
    LEAVE LIST-PROCESSING .
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  DATA: r_racct TYPE RANGE OF acdoca-racct .

* modified by yiqy 20220303 --- begin
*  r_racct = VALUE #( ( sign = 'I' option = 'CP' low = '605199*' )
*                     ( sign = 'I' option = 'CP' low = '640200*' )
*                     ( sign = 'I' option = 'CP' low = '60510101*' )
*                     ( sign = 'I' option = 'CP' low = '60510102*' )
*                     ( sign = 'I' option = 'CP' low = '64020101*' )
*                     ( sign = 'I' option = 'CP' low = '64020102*' )
*                     ( sign = 'I' option = 'EQ' low = '6402010300' )
*                     ( sign = 'I' option = 'EQ' low = '6051020000' )
*                     ( sign = 'I' option = 'EQ' low = '6051030000' )
*                     ( sign = 'I' option = 'EQ' low = '6402020000' )
*                     ( sign = 'I' option = 'EQ' low = '6402030000' )
*                   ) .
  r_racct = VALUE #( ( sign = 'I' option = 'CP' low = '6051*' )
                     ( sign = 'I' option = 'CP' low = '6402*' )
                   ) .
* modified by yiqy 20220303 --- end

  SELECT acdoca~rbukrs acdoca~kunnr acdoca~zz004 acdoca~gjahr bkpf~monat acdoca~drcrk acdoca~racct acdoca~hsl
    acdoca~belnr acdoca~buzei acdoca~blart acdoca~msl acdoca~matnr acdoca~docln acdoca~budat
  INTO CORRESPONDING FIELDS OF TABLE gt_acdoca
  FROM acdoca
  INNER JOIN bkpf ON bkpf~bukrs = acdoca~rbukrs
  AND bkpf~gjahr  = acdoca~gjahr AND bkpf~belnr = acdoca~belnr
*  LEFT OUTER JOIN MARA ON MARA~MATNR = ACDOCA~MATNR
*  WHERE ACDOCA~RBUKRS = P_BUKRS
  WHERE acdoca~rbukrs IN s_bukrs
    AND acdoca~racct IN r_racct
*    AND ACDOCA~KUNNR IN S_KUNNR
    AND acdoca~budat <= p_datee.

  SORT gt_acdoca BY rbukrs kunnr racct.

  LOOP AT gt_acdoca ASSIGNING FIELD-SYMBOL(<fs_ac>) .
    IF <fs_ac>-kunnr IS INITIAL .
      <fs_ac>-kunnr = <fs_ac>-zz004 .
    ENDIF.
  ENDLOOP.
*605199

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data .
*-->Add begin at 20211015 增加分摊逻辑
  DATA lv_msl21 TYPE acdoca-msl.
  DATA lv_msl22 TYPE acdoca-msl.
*-->Add end at 20211015 增加分摊逻辑
  LOOP AT gt_acdoca INTO wa_acdoca .

    IF wa_acdoca-kunnr IS NOT INITIAL.
      SELECT SINGLE name1
      INTO wa_acdoca-name1
      FROM kna1
      WHERE kunnr = wa_acdoca-kunnr.
    ENDIF.

    MOVE-CORRESPONDING wa_acdoca TO wa_alvshowtmp.

    IF wa_acdoca-gjahr = p_gjahr AND wa_acdoca-monat = p_monat.  "本月

      IF wa_acdoca-drcrk = 'H'.
        wa_alvshowtmp-zbysl = wa_acdoca-msl.
        wa_alvshowtmp-zbyje = wa_acdoca-hsl.

      ELSE.
        wa_alvshowtmp-zbysl = wa_acdoca-msl.
        wa_alvshowtmp-zbyje = wa_acdoca-hsl.
      ENDIF.

    ENDIF.

    IF wa_acdoca-gjahr = p_gjahr AND wa_acdoca-monat <= p_monat.   "本年

      IF wa_acdoca-drcrk = 'H'.
        wa_alvshowtmp-zbnsl = wa_acdoca-msl .
        wa_alvshowtmp-zbnje = wa_acdoca-hsl .
      ELSE.
        wa_alvshowtmp-zbnsl = wa_acdoca-msl .
        wa_alvshowtmp-zbnje = wa_acdoca-hsl .
      ENDIF.

    ENDIF.

    IF wa_acdoca-gjahr = p_gjahr1 AND wa_acdoca-monat <= p_monat.   "上年

      IF wa_acdoca-drcrk = 'H'.
        wa_alvshowtmp-zsnsl =  wa_acdoca-msl .
        wa_alvshowtmp-zsnje =  wa_acdoca-hsl .
      ELSE.
        wa_alvshowtmp-zsnsl =  wa_acdoca-msl .
        wa_alvshowtmp-zsnje =  wa_acdoca-hsl .
      ENDIF.

    ENDIF.

***************************************************************************************************

    IF wa_acdoca-racct = '6402010300' .
      MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow_gyjztz .
      CLEAR wa_alvshow_gyjztz-kunnr .
      CLEAR wa_alvshow_gyjztz-name1 .
      COLLECT wa_alvshow_gyjztz INTO gt_alvshow_gyjztz .
    ENDIF.

* modified by yiqy 20220302 --- begin
*    IF wa_acdoca-racct+0(6) = '605199' OR wa_acdoca-racct = '6051020000' OR wa_acdoca-racct = '6051030000'.  "收入
    IF wa_acdoca-racct+0(4) = '6051' AND wa_acdoca-racct+0(6) NE '605101'.  "其他销售收入 (除605101*外其他6051*科目)
* modified by yiqy 20220302 --- end
      IF wa_acdoca-kunnr+0(2) = 'SM'. "内部

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow111.

        CLEAR: wa_alvshow111-kunnr.
        wa_alvshow111-name1 = '汇总数'.

        COLLECT wa_alvshow111 INTO gt_alvshow111.

      ELSE.  "外部

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow112.

        CLEAR: wa_alvshow112-kunnr.
        wa_alvshow112-name1 = '汇总数'.

        COLLECT wa_alvshow112 INTO gt_alvshow112.

      ENDIF.
*-->Modify begin at 20211018 修改6402分摊逻辑
*    ELSEIF wa_acdoca-racct+0(6) = '640200' OR wa_acdoca-racct = '6402020000' OR wa_acdoca-racct = '6402030000'. "成本
*
*      IF wa_acdoca-kunnr+0(2) = 'SM'. "内部
*
*        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow211.
*
*        CLEAR: wa_alvshow211-kunnr.
*        wa_alvshow211-name1 = '汇总数'.
*
*        COLLECT wa_alvshow211 INTO gt_alvshow211.
*
*      ELSE. "外部
*
*        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow212.
*
*        CLEAR: wa_alvshow212-kunnr.
*        wa_alvshow212-name1 = '汇总数'.
*
*        COLLECT wa_alvshow212 INTO gt_alvshow212.
*
*      ENDIF.

* modified by yiqy 20220302 --- begin
*    ELSEIF wa_acdoca-racct+0(4) = '6402'.
*      IF wa_acdoca-racct+0(8) NE '64020101' AND
*         wa_acdoca-racct+0(8) NE '64020102' AND
*         wa_acdoca-racct+0(8) NE '64020103'.
    ELSEIF wa_acdoca-racct+0(4) = '6402'.  " 其他销售成本 (除640201*外的其他6402*科目)
      IF wa_acdoca-racct+0(6) NE '640201'.

* modified by yiqy 20220302 --- end

* modified by yiqy 20211115 --- begin
*        IF wa_acdoca-kunnr+0(2) = 'SM' OR wa_acdoca-zz004+0(2) = 'SM' . "内部
*          MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow211.
*
*          CLEAR: wa_alvshow211-kunnr.
*          wa_alvshow211-name1 = '汇总数'.
*
*          COLLECT wa_alvshow211 INTO gt_alvshow211.
*
*          wa_cbft211-matnr = wa_acdoca-matnr.
*          wa_cbft211-msl   = wa_acdoca-msl.
*          COLLECT wa_cbft211 INTO gt_cbft211.
*
*        ELSEIF wa_acdoca-kunnr IS NOT INITIAL OR  wa_acdoca-zz004 IS NOT INITIAL. "外部
*          MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow212.
*
*          CLEAR: wa_alvshow212-kunnr.
*          wa_alvshow212-name1 = '汇总数'.
*
*          COLLECT wa_alvshow212 INTO gt_alvshow212.
*
*          wa_cbft212-matnr = wa_acdoca-matnr.
*          wa_cbft212-msl   = wa_acdoca-msl.
*          COLLECT wa_cbft212 INTO gt_cbft212.
*
*        ELSEIF wa_acdoca-kunnr IS INITIAL AND  wa_acdoca-zz004 IS INITIAL. "客户为空的数据单独保存
*          IF wa_acdoca-blart = 'ML'. " 将为空的剔除,然后单独按比例再分摊 20210806
*            MOVE-CORRESPONDING wa_alvshowtmp TO wa_cbft21.
*            wa_cbft21-matnr = wa_acdoca-matnr.
*            COLLECT wa_cbft21 INTO gt_cbft21.
*          ENDIF.
*        ENDIF.

        IF wa_acdoca-kunnr+0(2) = 'SM' OR wa_acdoca-zz004+0(2) = 'SM' . "内部
          MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow211.

          CLEAR: wa_alvshow211-kunnr.
          wa_alvshow211-name1 = '汇总数'.

          COLLECT wa_alvshow211 INTO gt_alvshow211.

* added by yiqy 20220224 --- begin
          wa_cbft211-gjahr = wa_acdoca-gjahr.
          wa_cbft211-monat = wa_acdoca-monat.
* added by yiqy 20220224 --- end
          wa_cbft211-matnr = wa_acdoca-matnr.
          wa_cbft211-msl   = wa_acdoca-msl.
          COLLECT wa_cbft211 INTO gt_cbft211.

        ELSEIF wa_acdoca-kunnr IS NOT INITIAL OR  wa_acdoca-zz004 IS NOT INITIAL. "外部
          MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow212.

          CLEAR: wa_alvshow212-kunnr.
          wa_alvshow212-name1 = '汇总数'.

          COLLECT wa_alvshow212 INTO gt_alvshow212.

* added by yiqy 20220224 --- begin
          wa_cbft212-gjahr = wa_acdoca-gjahr.
          wa_cbft212-monat = wa_acdoca-monat.
* added by yiqy 20220224 --- end
          wa_cbft212-matnr = wa_acdoca-matnr.
          wa_cbft212-msl   = wa_acdoca-msl.
          COLLECT wa_cbft212 INTO gt_cbft212.

        ELSEIF wa_acdoca-kunnr IS INITIAL AND  wa_acdoca-zz004 IS INITIAL. "客户为空的数据单独保存
          IF wa_acdoca-matnr IS NOT INITIAL.      "没有客户,有物料,是按物料的内外部数量占比分摊
            MOVE-CORRESPONDING wa_alvshowtmp TO wa_cbft21.
            " added by yiqy 20220224 --- begin  成本分摊按年月分别汇总
            wa_cbft21-gjahr = wa_acdoca-gjahr.
            wa_cbft21-monat = wa_acdoca-monat.
            " added by yiqy 20220224 --- end
            wa_cbft21-matnr = wa_acdoca-matnr.
            COLLECT wa_cbft21 INTO gt_cbft21.

          ELSE.   "没有客户,没有物料
            IF wa_acdoca-rbukrs BETWEEN '1001' AND '1010' AND wa_acdoca-rbukrs <> '1007'. "内部
              MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow211.

              CLEAR: wa_alvshow211-kunnr.
              wa_alvshow211-name1 = '汇总数'.

              COLLECT wa_alvshow211 INTO gt_alvshow211.

* added by yiqy 20220224 --- begin
              wa_cbft211-gjahr = wa_acdoca-gjahr.
              wa_cbft211-monat = wa_acdoca-monat.
* added by yiqy 20220224 --- end
              wa_cbft211-matnr = wa_acdoca-matnr.
              wa_cbft211-msl   = wa_acdoca-msl.
              COLLECT wa_cbft211 INTO gt_cbft211.

            ELSE. "外部
              MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow212.

              CLEAR: wa_alvshow212-kunnr.
              wa_alvshow212-name1 = '汇总数'.

              COLLECT wa_alvshow212 INTO gt_alvshow212.

* added by yiqy 20220224 --- begin
              wa_cbft212-gjahr = wa_acdoca-gjahr.
              wa_cbft212-monat = wa_acdoca-monat.
* added by yiqy 20220224 --- end
              wa_cbft212-matnr = wa_acdoca-matnr.
              wa_cbft212-msl   = wa_acdoca-msl.
              COLLECT wa_cbft212 INTO gt_cbft212.

            ENDIF.

          ENDIF.
        ENDIF.

* modified by yiqy 20211115 --- end

      ENDIF.
*-->Add end at 20211018 增加分摊逻辑
    ENDIF.

    CLEAR: wa_alvshow111,wa_alvshow112,wa_alvshow211,wa_alvshow212.

***************************************************************************************************

    IF wa_acdoca-racct+0(8) = '60510101'." AND wa_acdoca-kunnr+0(2) = 'SM'.  "收入内部

      IF wa_acdoca-matnr+9(9) = '200000018'.

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1211.

        CLEAR: wa_alvshow1211-kunnr.
        wa_alvshow1211-name1 = '汇总数'.

        COLLECT wa_alvshow1211 INTO gt_alvshow1211.

      ELSEIF ( wa_acdoca-matnr+9(9) = '200000030' OR wa_acdoca-matnr+9(9) = '200000031' OR wa_acdoca-matnr+9(9) = '200000032' OR wa_acdoca-matnr+9(9) = '200000033' ).

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1212.

        CLEAR: wa_alvshow1212-kunnr.
        wa_alvshow1212-name1 = '汇总数'.

        COLLECT wa_alvshow1212 INTO gt_alvshow1212.

      ELSE . "其他牛

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1213.

        CLEAR: wa_alvshow1213-kunnr.
        wa_alvshow1213-name1 = '汇总数'.

        COLLECT wa_alvshow1213 INTO gt_alvshow1213.

      ENDIF.

    ELSEIF wa_acdoca-racct+0(8) = '60510102'." AND wa_acdoca-kunnr+0(2) <> 'SM'.  "收入外部

      IF wa_acdoca-matnr+9(9) = '200000018'.

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1221.

        CLEAR: wa_alvshow1221-kunnr.
        wa_alvshow1221-name1 = '汇总数'.

        COLLECT wa_alvshow1221 INTO gt_alvshow1221.

      ELSEIF ( wa_acdoca-matnr+9(9) = '200000030' OR wa_acdoca-matnr+9(9) = '200000031' OR wa_acdoca-matnr+9(9) = '200000032' OR wa_acdoca-matnr+9(9) = '200000033' ).

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1222.

        CLEAR: wa_alvshow1222-kunnr.
        wa_alvshow1222-name1 = '汇总数'.

        COLLECT wa_alvshow1222 INTO gt_alvshow1222.
      ELSE .
        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow1223.

        CLEAR: wa_alvshow1223-kunnr.
        wa_alvshow1223-name1 = '汇总数'.

        COLLECT wa_alvshow1223 INTO gt_alvshow1223.
      ENDIF.

    ELSEIF wa_acdoca-racct+0(8) = '64020101'." AND wa_acdoca-kunnr+0(2) = 'SM'. "成本内部

      IF wa_acdoca-matnr+9(9) = '200000018'.

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2211.

        CLEAR: wa_alvshow2211-kunnr.
        wa_alvshow2211-name1 = '汇总数'.

        COLLECT wa_alvshow2211 INTO gt_alvshow2211.

      ELSEIF ( wa_acdoca-matnr+9(9) = '200000030' OR wa_acdoca-matnr+9(9) = '200000031' OR wa_acdoca-matnr+9(9) = '200000032' OR wa_acdoca-matnr+9(9) = '200000033' ).

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2212.

        CLEAR: wa_alvshow2212-kunnr.
        wa_alvshow2212-name1 = '汇总数'.

        COLLECT wa_alvshow2212 INTO gt_alvshow2212.
      ELSE . "其他牛
        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2213.

        CLEAR: wa_alvshow2213-kunnr.
        wa_alvshow2213-name1 = '汇总数'.

        COLLECT wa_alvshow2213 INTO gt_alvshow2213.
      ENDIF.

    ELSEIF wa_acdoca-racct+0(8) = '64020102'." AND wa_acdoca-kunnr+0(2) <> 'SM'. . "成本外部

      IF wa_acdoca-matnr+9(9) = '200000018'.

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2221.

        CLEAR: wa_alvshow2221-kunnr.
        wa_alvshow2221-name1 = '汇总数'.

        COLLECT wa_alvshow2221 INTO gt_alvshow2221.

      ELSEIF ( wa_acdoca-matnr+9(9) = '200000030' OR wa_acdoca-matnr+9(9) = '200000031' OR wa_acdoca-matnr+9(9) = '200000032' OR wa_acdoca-matnr+9(9) = '200000033' ).

        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2222.

        CLEAR: wa_alvshow2222-kunnr.
        wa_alvshow2222-name1 = '汇总数'.

        COLLECT wa_alvshow2222 INTO gt_alvshow2222.
      ELSE . "其他牛
        MOVE-CORRESPONDING wa_alvshowtmp TO wa_alvshow2223.

        CLEAR: wa_alvshow2223-kunnr.
        wa_alvshow2223-name1 = '汇总数'.

        COLLECT wa_alvshow2223 INTO gt_alvshow2223.
      ENDIF.

    ENDIF.

    CLEAR: wa_alvshow1211,wa_alvshow1212,wa_alvshow1221,wa_alvshow1222,wa_alvshow2211,wa_alvshow2212,wa_alvshow2221,wa_alvshow2222,
           wa_alvshow1213,wa_alvshow1223,wa_alvshow2213,wa_alvshow2223.

    CLEAR: wa_acdoca,wa_alvshowtmp.
  ENDLOOP.

*-->Add begin at 20211018 增加分摊逻辑
  LOOP AT gt_cbft21 INTO wa_cbft21.
    CLEAR wa_cbft211.
    CLEAR wa_cbft212.
    CLEAR wa_alvshow211.
    CLEAR wa_alvshow212.

* modified by yiqy 20220224 --- begin
*    READ TABLE gt_cbft211 INTO wa_cbft211 WITH KEY matnr = wa_cbft21-matnr.
*    READ TABLE gt_cbft212 INTO wa_cbft212 WITH KEY matnr = wa_cbft21-matnr.
    READ TABLE gt_cbft211 INTO wa_cbft211 WITH KEY gjahr = wa_cbft21-gjahr
                                                   monat = wa_cbft21-monat
                                                   matnr = wa_cbft21-matnr.
    READ TABLE gt_cbft212 INTO wa_cbft212 WITH KEY gjahr = wa_cbft21-gjahr
                                                   monat = wa_cbft21-monat
                                                   matnr = wa_cbft21-matnr.
* modified by yiqy 20220224 --- end

    lv_msl21 = wa_cbft211-msl + wa_cbft212-msl.

    IF lv_msl21 <> 0 AND wa_cbft211-msl >= wa_cbft212-msl.

*      wa_alvshow212-ZBYSL = wa_CBFT21-zbysl * WA_CBFT212-msl / lv_msl21.
      wa_alvshow212-zbyje = wa_cbft21-zbyje * wa_cbft212-msl / lv_msl21.
*      wa_alvshow212-ZBNSL = wa_CBFT21-ZBNSL * WA_CBFT212-msl / lv_msl21.
      wa_alvshow212-zbnje = wa_cbft21-zbnje * wa_cbft212-msl / lv_msl21.
*      wa_alvshow212-ZSNSL = wa_CBFT21-ZSNSL * WA_CBFT212-msl / lv_msl21.
      wa_alvshow212-zsnje = wa_cbft21-zsnje * wa_cbft212-msl / lv_msl21.

      CLEAR: wa_alvshow212-kunnr.
      wa_alvshow212-name1 = '汇总数'.
      COLLECT wa_alvshow212 INTO gt_alvshow212.

      wa_alvshow211-zbyje = wa_cbft21-zbyje - wa_alvshow212-zbyje.
      wa_alvshow211-zbnje = wa_cbft21-zbnje - wa_alvshow212-zbnje.
      wa_alvshow211-zsnje = wa_cbft21-zsnje - wa_alvshow212-zsnje.

      CLEAR: wa_alvshow211-kunnr.
      wa_alvshow211-name1 = '汇总数'.
      COLLECT wa_alvshow211 INTO gt_alvshow211.
    ENDIF.


    IF lv_msl21 <> 0 AND wa_cbft211-msl <= wa_cbft212-msl.

      wa_alvshow211-zbyje = wa_cbft21-zbyje * wa_cbft211-msl / lv_msl21.
      wa_alvshow211-zbnje = wa_cbft21-zbnje * wa_cbft211-msl / lv_msl21.
      wa_alvshow211-zsnje = wa_cbft21-zsnje * wa_cbft211-msl / lv_msl21.

      CLEAR: wa_alvshow211-kunnr.
      wa_alvshow211-name1 = '汇总数'.
      COLLECT wa_alvshow211 INTO gt_alvshow211.

      wa_alvshow212-zbyje = wa_cbft21-zbyje - wa_alvshow211-zbyje.
      wa_alvshow212-zbnje = wa_cbft21-zbnje - wa_alvshow211-zbnje.
      wa_alvshow212-zsnje = wa_cbft21-zsnje - wa_alvshow211-zsnje.
      CLEAR: wa_alvshow212-kunnr.
      wa_alvshow212-name1 = '汇总数'.
      COLLECT wa_alvshow212 INTO gt_alvshow212.
    ENDIF.

* added by yiqy 20211115 --- begin
    IF lv_msl21 = 0 AND wa_cbft211-msl = 0 AND wa_cbft212-msl = 0.      "如果内部和外部数量合计为0(都是0),算在内部

      wa_alvshow211-zbyje = wa_cbft21-zbyje.
      wa_alvshow211-zbnje = wa_cbft21-zbnje.
      wa_alvshow211-zsnje = wa_cbft21-zsnje.
      wa_alvshow211-zbysl = wa_cbft21-zbysl.
      wa_alvshow211-zbnsl = wa_cbft21-zbnsl.
      wa_alvshow211-zsnsl = wa_cbft21-zsnsl.

      CLEAR: wa_alvshow211-kunnr.
      wa_alvshow211-name1 = '汇总数'.
      COLLECT wa_alvshow211 INTO gt_alvshow211.

    ENDIF.
* added by yiqy 20211115 --- end
  ENDLOOP.
*-->Add end at 20211018 增加分摊逻辑
*********************************************************************************

  CLEAR: zcount.

  LOOP AT gt_alvshow111 INTO wa_alvshow111.

    zcount = zcount + 1.

    wa_alvshow111-zbysl = wa_alvshow111-zbysl * -1.
    wa_alvshow111-zbyje = wa_alvshow111-zbyje * -1.
    wa_alvshow111-zbnsl = wa_alvshow111-zbnsl * -1.
    wa_alvshow111-zbnje = wa_alvshow111-zbnje * -1.
    wa_alvshow111-zsnsl = wa_alvshow111-zsnsl * -1.
    wa_alvshow111-zsnje = wa_alvshow111-zsnje * -1.

    MODIFY gt_alvshow111 FROM wa_alvshow111 INDEX zcount.

    CLEAR: wa_alvshow111.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow112 INTO wa_alvshow112.

    zcount = zcount + 1.

    wa_alvshow112-zbysl = wa_alvshow112-zbysl * -1.
    wa_alvshow112-zbyje = wa_alvshow112-zbyje * -1.
    wa_alvshow112-zbnsl = wa_alvshow112-zbnsl * -1.
    wa_alvshow112-zbnje = wa_alvshow112-zbnje * -1.
    wa_alvshow112-zsnsl = wa_alvshow112-zsnsl * -1.
    wa_alvshow112-zsnje = wa_alvshow112-zsnje * -1.

    MODIFY gt_alvshow112 FROM wa_alvshow112 INDEX zcount.

    CLEAR: wa_alvshow112.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1211 INTO wa_alvshow1211.

    zcount = zcount + 1.

    wa_alvshow1211-zbysl = wa_alvshow1211-zbysl * -1.
    wa_alvshow1211-zbyje = wa_alvshow1211-zbyje * -1.
    wa_alvshow1211-zbnsl = wa_alvshow1211-zbnsl * -1.
    wa_alvshow1211-zbnje = wa_alvshow1211-zbnje * -1.
    wa_alvshow1211-zsnsl = wa_alvshow1211-zsnsl * -1.
    wa_alvshow1211-zsnje = wa_alvshow1211-zsnje * -1.

    MODIFY gt_alvshow1211 FROM wa_alvshow1211 INDEX zcount.

    CLEAR: wa_alvshow1211.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1212 INTO wa_alvshow1212.

    zcount = zcount + 1.

    wa_alvshow1212-zbysl = wa_alvshow1212-zbysl * -1.
    wa_alvshow1212-zbyje = wa_alvshow1212-zbyje * -1.
    wa_alvshow1212-zbnsl = wa_alvshow1212-zbnsl * -1.
    wa_alvshow1212-zbnje = wa_alvshow1212-zbnje * -1.
    wa_alvshow1212-zsnsl = wa_alvshow1212-zsnsl * -1.
    wa_alvshow1212-zsnje = wa_alvshow1212-zsnje * -1.

    MODIFY gt_alvshow1212 FROM wa_alvshow1212 INDEX zcount.

    CLEAR: wa_alvshow1212.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1213 INTO wa_alvshow1213. "其他牛

    zcount = zcount + 1.

    wa_alvshow1213-zbysl = wa_alvshow1213-zbysl * -1.
    wa_alvshow1213-zbyje = wa_alvshow1213-zbyje * -1.
    wa_alvshow1213-zbnsl = wa_alvshow1213-zbnsl * -1.
    wa_alvshow1213-zbnje = wa_alvshow1213-zbnje * -1.
    wa_alvshow1213-zsnsl = wa_alvshow1213-zsnsl * -1.
    wa_alvshow1213-zsnje = wa_alvshow1213-zsnje * -1.

    MODIFY gt_alvshow1213 FROM wa_alvshow1213 INDEX zcount.

    CLEAR: wa_alvshow1213.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1221 INTO wa_alvshow1221.

    zcount = zcount + 1.

    wa_alvshow1221-zbysl = wa_alvshow1221-zbysl * -1.
    wa_alvshow1221-zbyje = wa_alvshow1221-zbyje * -1.
    wa_alvshow1221-zbnsl = wa_alvshow1221-zbnsl * -1.
    wa_alvshow1221-zbnje = wa_alvshow1221-zbnje * -1.
    wa_alvshow1221-zsnsl = wa_alvshow1221-zsnsl * -1.
    wa_alvshow1221-zsnje = wa_alvshow1221-zsnje * -1.

    MODIFY gt_alvshow1221 FROM wa_alvshow1221 INDEX zcount.

    CLEAR: wa_alvshow1221.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1222 INTO wa_alvshow1222.

    zcount = zcount + 1.

    wa_alvshow1222-zbysl = wa_alvshow1222-zbysl * -1.
    wa_alvshow1222-zbyje = wa_alvshow1222-zbyje * -1.
    wa_alvshow1222-zbnsl = wa_alvshow1222-zbnsl * -1.
    wa_alvshow1222-zbnje = wa_alvshow1222-zbnje * -1.
    wa_alvshow1222-zsnsl = wa_alvshow1222-zsnsl * -1.
    wa_alvshow1222-zsnje = wa_alvshow1222-zsnje * -1.

    MODIFY gt_alvshow1222 FROM wa_alvshow1222 INDEX zcount.

    CLEAR: wa_alvshow1222.
  ENDLOOP.

  CLEAR: zcount.

  LOOP AT gt_alvshow1223 INTO wa_alvshow1223. "其他牛

    zcount = zcount + 1.

    wa_alvshow1223-zbysl = wa_alvshow1223-zbysl * -1.
    wa_alvshow1223-zbyje = wa_alvshow1223-zbyje * -1.
    wa_alvshow1223-zbnsl = wa_alvshow1223-zbnsl * -1.
    wa_alvshow1223-zbnje = wa_alvshow1223-zbnje * -1.
    wa_alvshow1223-zsnsl = wa_alvshow1223-zsnsl * -1.
    wa_alvshow1223-zsnje = wa_alvshow1223-zsnje * -1.

    MODIFY gt_alvshow1223 FROM wa_alvshow1223 INDEX zcount.

    CLEAR: wa_alvshow1223.
  ENDLOOP.

*********************************************************************************

  SORT gt_alvshow111 BY kunnr.
  SORT gt_alvshow112 BY kunnr.
  SORT gt_alvshow211 BY kunnr.
  SORT gt_alvshow212 BY kunnr.

  lv_count1 = lines( gt_alvshow111 ).
  lv_count2 = lines( gt_alvshow112 ).
  lv_count3 = lines( gt_alvshow211 ).
  lv_count4 = lines( gt_alvshow212 ).

  SORT gt_alvshow1211 BY kunnr.
  SORT gt_alvshow1212 BY kunnr.
  SORT gt_alvshow1213 BY kunnr.
  SORT gt_alvshow1221 BY kunnr.
  SORT gt_alvshow1222 BY kunnr.
  SORT gt_alvshow1223 BY kunnr.

  lv_count5 = lines( gt_alvshow1211 ).
  lv_count6 = lines( gt_alvshow1212 ).
  lv_count13 = lines( gt_alvshow1213 ).
  lv_count7 = lines( gt_alvshow1221 ).
  lv_count8 = lines( gt_alvshow1222 ).
  lv_count14 = lines( gt_alvshow1223 ).

  SORT gt_alvshow2211 BY kunnr.
  SORT gt_alvshow2212 BY kunnr.
  SORT gt_alvshow2213 BY kunnr.
  SORT gt_alvshow2221 BY kunnr.
  SORT gt_alvshow2222 BY kunnr.
  SORT gt_alvshow2223 BY kunnr.

  lv_count9 =  lines( gt_alvshow2211 ).
  lv_count10 = lines( gt_alvshow2212 ).
  lv_count15 = lines( gt_alvshow2213 ).
  lv_count11 = lines( gt_alvshow2221 ).
  lv_count12 = lines( gt_alvshow2222 ).
  lv_count16 = lines( gt_alvshow2223 ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_SHOW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_excel_show .

  CLEAR: wa_down_templet.

  wa_down_templet-relid = 'MI'.
  wa_down_templet-def_name = '其他业务收支明细表(多集团)' && '_'&& sy-datum.
  wa_down_templet-objid = sy-repid.

  PERFORM fm_down_model.

  IF e_subrc = 'E'.
    RETURN.
  ENDIF.

  PERFORM fm_openexcel.

  IF e_subrc = 'E'.
    RETURN.
  ENDIF.

  PERFORM fm_filldata_into_cell.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_FILLDATA_INTO_CELL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM fm_filldata_into_cell .

  DATA: lv_date TYPE string,
        l_dw    TYPE string,
        r_row   TYPE i,
        r_col   TYPE i.

*  DATA: zcompany(25).
*
*  SELECT SINGLE butxt
*  INTO zcompany
*  FROM t001
*  WHERE bukrs = p_bukrs.
  DATA: zcompany(1024).
  SELECT bukrs,butxt INTO TABLE @DATA(lt_t001) FROM t001 WHERE bukrs IN @s_bukrs.
  LOOP AT lt_t001 INTO DATA(ls_t001).
    IF zcompany IS INITIAL.
      zcompany = ls_t001-butxt.
    ELSE.
      CONCATENATE zcompany ls_t001-butxt INTO zcompany SEPARATED BY ','.
    ENDIF.
  ENDLOOP.

  l_dw = '单位:' && zcompany && '  所属期间:' && p_gjahr && '年' && p_monat && '月'.

  PERFORM  excel_write_cell USING xl_appl  3 1  l_dw .

  lv_linename = '8:8'.
  r_row  = 7.

  IF lv_count1 > 0 .
*    DO LV_COUNT1 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW111 INTO WA_ALVSHOW111.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW111-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW111-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW111-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW111-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW111-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW111-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW111-ZSNJE .
*
*      CLEAR: WA_ALVSHOW111.
*    ENDLOOP.

    LOOP AT gt_alvshow111 INTO wa_alvshow111.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW111-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow111-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow111-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow111-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow111-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow111-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow111-zsnje .

      CLEAR: wa_alvshow111.
    ENDLOOP.

  ENDIF.

  r_row = r_row  + 2.

  lv_count = r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count2 > 0 .
*    DO LV_COUNT2 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW112 INTO WA_ALVSHOW112.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW112-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW112-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW112-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW112-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW112-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW112-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW112-ZSNJE .
*
*      CLEAR: WA_ALVSHOW112.
*    ENDLOOP.

    LOOP AT gt_alvshow112 INTO wa_alvshow112.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW112-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow112-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow112-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow112-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow112-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow112-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow112-zsnje .

      CLEAR: wa_alvshow112.
    ENDLOOP.

  ENDIF.

  r_row = r_row  + 4.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count5 > 0 .
*    DO LV_COUNT5 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1211 INTO WA_ALVSHOW1211.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1211-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1211-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1211-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1211-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1211-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1211-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1211-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1211.
*    ENDLOOP.

    LOOP AT gt_alvshow1211 INTO wa_alvshow1211.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1211-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1211-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1211-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1211-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1211-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1211-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1211-zsnje .

      CLEAR: wa_alvshow1211.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count6 > 0 .
*    DO LV_COUNT6 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1212 INTO WA_ALVSHOW1212.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1212-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1212-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1212-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1212-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1212-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1212-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1212-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1212.
*    ENDLOOP.

    LOOP AT gt_alvshow1212 INTO wa_alvshow1212.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1212-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1212-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1212-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1212-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1212-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1212-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1212-zsnje .

      CLEAR: wa_alvshow1212.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 1.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count13 > 0 .
*    DO LV_COUNT6 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1212 INTO WA_ALVSHOW1212.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1212-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1212-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1212-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1212-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1212-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1212-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1212-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1212.
*    ENDLOOP.

    LOOP AT gt_alvshow1213 INTO wa_alvshow1213.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1213-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1213-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1213-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1213-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1213-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1213-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1213-zsnje .

      CLEAR: wa_alvshow1213.
    ENDLOOP.

  ENDIF.




  r_row = r_row  + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count7 > 0 .
*    DO LV_COUNT7 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1221 INTO WA_ALVSHOW1221.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1221-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1221-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1221-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1221-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1221-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1221-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1221-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1221.
*    ENDLOOP.

    LOOP AT gt_alvshow1221 INTO wa_alvshow1221.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1221-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1221-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1221-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1221-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1221-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1221-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1221-zsnje .

      CLEAR: wa_alvshow1221.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count8 > 0 .
*    DO LV_COUNT8 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1222 INTO WA_ALVSHOW1222.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1222-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1222-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1222-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1222-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1222-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1222-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1222-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1222.
*    ENDLOOP.

    LOOP AT gt_alvshow1222 INTO wa_alvshow1222.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1222-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1222-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1222-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1222-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1222-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1222-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1222-zsnje .

      CLEAR: wa_alvshow1222.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 1.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count14 > 0 .
*    DO LV_COUNT8 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW1222 INTO WA_ALVSHOW1222.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1222-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW1222-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW1222-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW1222-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW1222-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW1222-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW1222-ZSNJE .
*
*      CLEAR: WA_ALVSHOW1222.
*    ENDLOOP.

    LOOP AT gt_alvshow1223 INTO wa_alvshow1223.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW1223-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow1223-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow1223-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow1223-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow1223-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow1223-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow1223-zsnje .

      CLEAR: wa_alvshow1223.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 3.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count3 > 0 .
*    DO LV_COUNT3 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW211 INTO WA_ALVSHOW211.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW211-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW211-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW211-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW211-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW211-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW211-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW211-ZSNJE .
*
*      CLEAR: WA_ALVSHOW211.
*    ENDLOOP.

    LOOP AT gt_alvshow211 INTO wa_alvshow211.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW211-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow211-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow211-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow211-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow211-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow211-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow211-zsnje .

      CLEAR: wa_alvshow211.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count4 > 0 .
*    DO LV_COUNT4 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW212 INTO WA_ALVSHOW212.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW212-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW212-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW212-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW212-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW212-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW212-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW212-ZSNJE .
*
*      CLEAR: WA_ALVSHOW212.
*    ENDLOOP.

    LOOP AT gt_alvshow212 INTO wa_alvshow212.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW212-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow212-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow212-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow212-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow212-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow212-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow212-zsnje .

      CLEAR: wa_alvshow212.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 4.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count9 > 0 .
*    DO LV_COUNT9 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2211 INTO WA_ALVSHOW2211.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2211-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2211-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2211-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2211-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2211-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2211-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2211-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2211.
*    ENDLOOP.

    LOOP AT gt_alvshow2211 INTO wa_alvshow2211.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2211-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2211-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2211-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2211-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2211-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2211-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2211-zsnje .

      CLEAR: wa_alvshow2211.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count10 > 0 .
*    DO LV_COUNT10 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2212 INTO WA_ALVSHOW2212.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2212-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2212-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2212-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2212-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2212-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2212-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2212-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2212.
*    ENDLOOP.

    LOOP AT gt_alvshow2212 INTO wa_alvshow2212.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2212-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2212-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2212-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2212-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2212-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2212-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2212-zsnje .

      CLEAR: wa_alvshow2212.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 1.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count15 > 0 .
*    DO LV_COUNT10 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2212 INTO WA_ALVSHOW2212.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2212-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2212-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2212-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2212-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2212-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2212-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2212-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2212.
*    ENDLOOP.

    LOOP AT gt_alvshow2213 INTO wa_alvshow2213.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2213-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2213-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2213-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2213-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2213-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2213-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2213-zsnje .

      CLEAR: wa_alvshow2213.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count11 > 0 .
*    DO LV_COUNT11 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2221 INTO WA_ALVSHOW2221.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2221-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2221-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2221-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2221-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2221-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2221-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2221-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2221.
*    ENDLOOP.

    LOOP AT gt_alvshow2221 INTO wa_alvshow2221.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2221-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2221-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2221-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2221-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2221-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2221-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2221-zsnje .

      CLEAR: wa_alvshow2221.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 2.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count12 > 0 .
*    DO LV_COUNT12 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2222 INTO WA_ALVSHOW2222.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2222-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2222-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2222-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2222-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2222-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2222-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2222-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2222.
*    ENDLOOP.

    LOOP AT gt_alvshow2222 INTO wa_alvshow2222.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2222-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2222-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2222-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2222-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2222-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2222-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2222-zsnje .

      CLEAR: wa_alvshow2222.
    ENDLOOP.

  ENDIF.
  r_row = r_row + 1.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  IF lv_count16 > 0 .
*    DO LV_COUNT12 TIMES.
*      PERFORM FRM_INSERT_COPY_LINE USING LV_LINENAME.
*    ENDDO.
*
*    LOOP AT GT_ALVSHOW2222 INTO WA_ALVSHOW2222.
*      R_ROW =  R_ROW  + 1.
*
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2222-NAME1 .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  2  WA_ALVSHOW2222-ZBYSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  3  WA_ALVSHOW2222-ZBYJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  4  WA_ALVSHOW2222-ZBNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  5  WA_ALVSHOW2222-ZBNJE .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  6  WA_ALVSHOW2222-ZSNSL .
*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  7  WA_ALVSHOW2222-ZSNJE .
*
*      CLEAR: WA_ALVSHOW2222.
*    ENDLOOP.

    LOOP AT gt_alvshow2223 INTO wa_alvshow2223.

*      PERFORM  EXCEL_WRITE_CELL USING XL_APPL  R_ROW  1  WA_ALVSHOW2223-NAME1 .
      PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow2223-zbysl .
      PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow2223-zbyje .
      PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow2223-zbnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow2223-zbnje .
      PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow2223-zsnsl .
      PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow2223-zsnje .

      CLEAR: wa_alvshow2223.
    ENDLOOP.

  ENDIF.

  r_row = r_row + 1.

  lv_count =  r_row + 1.

  lv_linename = lv_count && ':' && lv_count .

  LOOP AT gt_alvshow_gyjztz INTO wa_alvshow_gyjztz .
    PERFORM  excel_write_cell USING xl_appl  r_row  2  wa_alvshow_gyjztz-zbysl .
    PERFORM  excel_write_cell USING xl_appl  r_row  3  wa_alvshow_gyjztz-zbyje .
    PERFORM  excel_write_cell USING xl_appl  r_row  4  wa_alvshow_gyjztz-zbnsl .
    PERFORM  excel_write_cell USING xl_appl  r_row  5  wa_alvshow_gyjztz-zbnje .
    PERFORM  excel_write_cell USING xl_appl  r_row  6  wa_alvshow_gyjztz-zsnsl .
    PERFORM  excel_write_cell USING xl_appl  r_row  7  wa_alvshow_gyjztz-zsnje .
  ENDLOOP.


  SET PROPERTY OF xl_appl 'VISIBLE' = 1.

  CALL METHOD OF xl_wkbks 'SAVE' .

  PERFORM free_object.

  IF e_subrc <> 'E'.
    MESSAGE  s001(00) WITH '报表下载成功'.
  ENDIF.

*********************************************************

*  CALL METHOD OF XL_WKBKS 'SAVE' .
*  CALL METHOD OF XL_WKBKS 'CLOSE'.
*
*  PERFORM FREE_OBJECT.
*
*  IF E_SUBRC <> 'E'.
*    MESSAGE  S001(00) WITH '报表下载成功'.
*  ENDIF.

ENDFORM.

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值