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 TYP 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.