REPORT ZFIR_PROFIT.
TYPE-POOLS: SLIS.
*CSKS-KOSAR
TABLES: BKPF , BSEG , CSKS , ZFITAB001 , FAGLFLEXA.
CONSTANTS: C_ZNAME TYPE ZFITAB001-ZNAME VALUE 'A02'.
RANGES: R_RACCT FOR FAGLFLEXA-RACCT.
RANGES: R_KOSAR FOR CSKS-KOSAR.
RANGES: R_HKONT FOR ZFITAB001-ZFHKONT.
DATA: IT_FITAB001 TYPE STANDARD TABLE OF ZFITAB001 WITH HEADER LINE.
*--------------------------------------------------------------------*
* 介绍: IT_CELL 统计出 行,列,科目范围等信息
* IT_CELL_DATA 统计出 行,列,金额
*--------------------------------------------------------------------*
TYPES: BEGIN OF TY_CELL,
ZROW TYPE ZFITAB001-ZROW, "行
ZCOL TYPE ZFITAB001-ZCOL, "列
R_HKONT TYPE RANGE OF ZFITAB001-ZFHKONT , "科目范围
R_KOSAR TYPE RANGE OF ZFITAB001-ZFKOSAR, "成本中心类型
PLUSM TYPE ZFITAB001-PLUSM, "正负
ZXM TYPE ZFITAB001-ZXM, "描述
ZHC TYPE ZFITAB001-ZHC, "行次
END OF TY_CELL.
DATA: IT_CELL TYPE STANDARD TABLE OF TY_CELL WITH HEADER LINE.
TYPES: BEGIN OF TY_CELL_DATA,
ZROW TYPE ZFITAB001-ZROW, "行
ZCOL TYPE ZFITAB001-ZCOL, "列
BQ_DMBTR TYPE FAGLFLEXT-HSLVT, "本 期 数
BN_DMBTR TYPE FAGLFLEXT-HSLVT, "本年累计数
SQ_DMBTR TYPE FAGLFLEXT-HSLVT, "上年同期累计数
END OF TY_CELL_DATA.
DATA: IT_CELL_DATA TYPE STANDARD TABLE OF TY_CELL_DATA WITH HEADER LINE.
*---- OLE变量
DATA: V_EXCEL TYPE OLE2_OBJECT,
V_SHEET TYPE OLE2_OBJECT,
* g_sheet TYPE ole2_object,
V_BOOK TYPE OLE2_OBJECT,
V_CELL TYPE OLE2_OBJECT.
DATA: V_SHEET_NUMBER TYPE I.
DATA: L_NAME LIKE WWWDATATAB,
L_MIME LIKE W3MIME OCCURS 10,
L_FILENAME TYPE STRING,
L_DFNAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING,
L_ROW TYPE I,
L_COL TYPE I,
L_TITLE TYPE STRING.
DATA: IDX_TABIX TYPE SY-TABIX.
*--------------------------------------------------------------------*
* SELECT-SCREEN
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME.
PARAMETERS: P_BUKRS TYPE BKPF-BUKRS OBLIGATORY,
P_GJAHR TYPE BKPF-GJAHR OBLIGATORY,
P_MONAT TYPE BKPF-MONAT OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BK1.
*--------------------------------------------------------------------*
* START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.
*---- 查询数据
PERFORM FRM_GET_DATA.
**---- 下载
PERFORM FRM_DOWNLOAD_EXCEL.
*--------------------------------------------------------------------*
* FORM
*--------------------------------------------------------------------*
FORM FRM_GET_DATA.
SELECT *
FROM ZFITAB001
INTO TABLE IT_FITAB001
WHERE ZNAME = C_ZNAME
.
CLEAR: R_RACCT[].
LOOP AT IT_FITAB001.
CLEAR: R_RACCT.
IF IT_FITAB001-ZFHKONT <> ''.
IF IT_FITAB001-ZTHKONT <> ''.
R_RACCT-SIGN = 'I'.
R_RACCT-OPTION = 'BT'.
R_RACCT-LOW = IT_FITAB001-ZFHKONT.
R_RACCT-HIGH = IT_FITAB001-ZTHKONT.
APPEND R_RACCT.
ELSE.
R_RACCT-SIGN = 'I'.
R_RACCT-OPTION = 'EQ'.
R_RACCT-LOW = IT_FITAB001-ZFHKONT.
APPEND R_RACCT.
ENDIF.
ENDIF.
*---- 组合每个单元格的查询条件
READ TABLE IT_CELL WITH KEY ZROW = IT_FITAB001-ZROW ZCOL = IT_FITAB001-ZCOL.
IF SY-SUBRC = 0.
IDX_TABIX = SY-TABIX.
IF IT_FITAB001-ZFHKONT <> ''.
APPEND R_RACCT TO IT_CELL-R_HKONT[].
ENDIF.
IF IT_FITAB001-ZFKOSAR <> ''.
CLEAR R_KOSAR.
IF IT_FITAB001-ZFKOSAR = 'B'.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = ''.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ELSE.
IF IT_FITAB001-ZTKOSAR <> ''.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'BT'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
R_KOSAR-HIGH = IT_FITAB001-ZTKOSAR.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ELSE.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ENDIF.
ENDIF.
ENDIF.
MODIFY IT_CELL INDEX IDX_TABIX.
ELSE.
CLEAR IT_CELL.
IT_CELL-ZROW = IT_FITAB001-ZROW. "行
IT_CELL-ZCOL = IT_FITAB001-ZCOL. "列
IT_CELL-PLUSM = IT_FITAB001-PLUSM. "正负
IT_CELL-ZXM = IT_FITAB001-ZXM. "描述
IT_CELL-ZHC = IT_FITAB001-ZHC. "行次
IF IT_FITAB001-ZFHKONT <> ''.
APPEND R_RACCT TO IT_CELL-R_HKONT[].
ENDIF.
IF IT_FITAB001-ZFKOSAR <> ''.
CLEAR R_KOSAR.
IF IT_FITAB001-ZFKOSAR = 'B'.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = ''.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ELSE.
IF IT_FITAB001-ZTKOSAR <> ''.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'BT'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
R_KOSAR-HIGH = IT_FITAB001-ZTKOSAR.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ELSE.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
APPEND R_KOSAR TO IT_CELL-R_KOSAR[].
ENDIF.
ENDIF.
ENDIF.
APPEND IT_CELL.
ENDIF.
ENDLOOP.
DATA: L_RYEAR TYPE FAGLFLEXA-RYEAR.
DATA: FLAG TYPE C.
L_RYEAR = P_GJAHR - 1. "前一年
DATA: IT_FAGLFLEXT TYPE STANDARD TABLE OF FAGLFLEXT WITH HEADER LINE.
*---- 查询本年和上一年的金额
SELECT *
FROM FAGLFLEXT
INTO CORRESPONDING FIELDS OF TABLE IT_FAGLFLEXT
WHERE ( RYEAR = P_GJAHR OR RYEAR = L_RYEAR )
AND RBUKRS = P_BUKRS
AND RACCT IN R_RACCT.
* DELETE it_faglflext WHERE awtyp = 'AUAK'.
LOOP AT IT_FAGLFLEXT.
LOOP AT IT_CELL.
CLEAR IT_CELL_DATA.
IT_CELL_DATA-ZROW = IT_CELL-ZROW.
IT_CELL_DATA-ZCOL = IT_CELL-ZCOL.
CLEAR IT_FITAB001[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_FITAB001[] FROM ZFITAB001
WHERE ZNAME = C_ZNAME
AND ZROW = IT_CELL-ZROW
AND ZCOL = IT_CELL-ZCOL
.
DELETE IT_FITAB001[] WHERE ZFHKONT IS INITIAL AND ZTHKONT IS INITIAL AND ZFKOSAR IS INITIAL AND ZTKOSAR IS INITIAL.
SORT IT_FITAB001[] BY ZFHKONT ZTHKONT ZFKOSAR ZTKOSAR .
DELETE ADJACENT DUPLICATES FROM IT_FITAB001[] COMPARING ZFHKONT ZTHKONT ZFKOSAR ZTKOSAR.
CLEAR FLAG .
LOOP AT IT_FITAB001.
CLEAR: R_RACCT.
CLEAR: R_RACCT[].
IF IT_FITAB001-ZFHKONT <> ''.
IF IT_FITAB001-ZTHKONT <> ''.
R_RACCT-SIGN = 'I'.
R_RACCT-OPTION = 'BT'.
R_RACCT-LOW = IT_FITAB001-ZFHKONT.
R_RACCT-HIGH = IT_FITAB001-ZTHKONT.
APPEND R_RACCT.
ELSE.
R_RACCT-SIGN = 'I'.
R_RACCT-OPTION = 'EQ'.
R_RACCT-LOW = IT_FITAB001-ZFHKONT.
APPEND R_RACCT.
ENDIF.
ENDIF.
IF R_RACCT[] IS NOT INITIAL AND IT_FAGLFLEXT-RACCT IN R_RACCT[] .
CLEAR R_KOSAR.
CLEAR R_KOSAR[].
IF IT_FITAB001-ZFKOSAR <> ''.
IF IT_FITAB001-ZFKOSAR = 'B'.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = ''.
APPEND R_KOSAR.
ELSE.
IF IT_FITAB001-ZTKOSAR <> ''.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'BT'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
R_KOSAR-HIGH = IT_FITAB001-ZTKOSAR.
APPEND R_KOSAR.
ELSE.
R_KOSAR-SIGN = 'I'.
R_KOSAR-OPTION = 'EQ'.
R_KOSAR-LOW = IT_FITAB001-ZFKOSAR.
APPEND R_KOSAR.
ENDIF.
ENDIF.
CLEAR CSKS .
SELECT SINGLE * FROM CSKS WHERE KOSTL = IT_FAGLFLEXT-RCNTR.
IF R_KOSAR[] IS NOT INITIAL AND CSKS-KOSAR IN R_KOSAR[].
FLAG = 'X'.
EXIT.
ENDIF.
ELSE.
FLAG = 'X'.
EXIT.
ENDIF.
ENDIF.
CLEAR IT_FITAB001.
ENDLOOP.
IF FLAG IS INITIAL.
CONTINUE.
ENDIF.
*---- 汇总
*---- 本年
IF IT_FAGLFLEXT-RYEAR = P_GJAHR.
CASE P_MONAT.
WHEN 1.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL01. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL02 , IT_FAGLFLEXT-HSL03 , IT_FAGLFLEXT-HSL04 , IT_FAGLFLEXT-HSL05 , IT_FAGLFLEXT-HSL06,
IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 2.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL02. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL03 , IT_FAGLFLEXT-HSL04 , IT_FAGLFLEXT-HSL05 , IT_FAGLFLEXT-HSL06,
IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 3.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL03. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL04 , IT_FAGLFLEXT-HSL05 , IT_FAGLFLEXT-HSL06,
IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 4.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL04. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL05 , IT_FAGLFLEXT-HSL06,
IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 5.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL05. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL06,
IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 6.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL06. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL07 , IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 7.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL07. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL08 , IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 8.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL08. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL09 , IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 9.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL09. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL10 , IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 10.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL10. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL11 , IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 11.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL11. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL12,
IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 12.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL12. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL13 , IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 13.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL13. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL14 , IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 14.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL14. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL15 , IT_FAGLFLEXT-HSL16 .
WHEN 15.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL15. "本 期 数
CLEAR: IT_FAGLFLEXT-HSL16 .
WHEN 16.
IT_CELL_DATA-BQ_DMBTR = IT_FAGLFLEXT-HSL16. "本 期 数
WHEN OTHERS.
ENDCASE.
IT_CELL_DATA-BN_DMBTR = IT_FAGLFLEXT-HSL01 + IT_FAGLFLEXT-HSL02 + IT_FAGLFLEXT-HSL03 + IT_FAGLFLEXT-HSL04 + IT_FAGLFLEXT-HSL05 + IT_FAGLFLEXT-HSL06
+ IT_FAGLFLEXT-HSL07 + IT_FAGLFLEXT-HSL08 + IT_FAGLFLEXT-HSL09 + IT_FAGLFLEXT-HSL10 + IT_FAGLFLEXT-HSL11 + IT_FAGLFLEXT-HSL12
+ IT_FAGLFLEXT-HSL13 + IT_FAGLFLEXT-HSL14 + IT_FAGLFLEXT-HSL15 + IT_FAGLFLEXT-HSL16 . "本年累计数
ENDIF.
*---- 上年同期
IF IT_FAGLFLEXT-RYEAR = L_RYEAR.
CASE P_MONAT.
WHEN 1.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL01. "
WHEN 2.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL02. "
WHEN 3.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL03. "
WHEN 4.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL04. "
WHEN 5.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL05. "
WHEN 6.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL06. "
WHEN 7.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL07. "
WHEN 8.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL08. "
WHEN 9.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL09. "
WHEN 10.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL10. "
WHEN 11.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL11. "
WHEN 12.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL12. "
WHEN 13.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL13. "
WHEN 14.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL14. "
WHEN 15.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL15. "
WHEN 16.
IT_CELL_DATA-SQ_DMBTR = IT_FAGLFLEXT-HSL16. "
WHEN OTHERS.
ENDCASE.
ENDIF.
* IF it_faglflext-drcrk = 'H'.
* it_cell_data-bq_dmbtr = - it_cell_data-bq_dmbtr.
* it_cell_data-bn_dmbtr = - it_cell_data-bn_dmbtr.
* it_cell_data-sq_dmbtr = - it_cell_data-sq_dmbtr.
* ENDIF.
IF IT_CELL-PLUSM = '-'..
IT_CELL_DATA-BQ_DMBTR = - IT_CELL_DATA-BQ_DMBTR.
IT_CELL_DATA-BN_DMBTR = - IT_CELL_DATA-BN_DMBTR.
IT_CELL_DATA-SQ_DMBTR = - IT_CELL_DATA-SQ_DMBTR.
ENDIF.
COLLECT IT_CELL_DATA.
ENDLOOP.
ENDLOOP.
ENDFORM.
FORM FRM_DOWNLOAD_EXCEL.
DATA: LV_STR TYPE C LENGTH 1000.
DATA: LV_CHAR TYPE CHAR200.
DATA: O_VALUE TYPE CHAR200.
L_NAME-RELID = 'MI'.
L_NAME-OBJID = 'ZFIR_PROFIT_STATEMENT_REPORTB'.
L_NAME-TEXT = TEXT-H01.
*---- 取模板
CALL FUNCTION 'WWWDATA_IMPORT'
EXPORTING
KEY = L_NAME
TABLES
MIME = L_MIME
EXCEPTIONS
WRONG_OBJECT_TYPE = 1
IMPORT_ERROR = 2
OTHERS = 3.
*---- 弹出框
CONCATENATE TEXT-H01 '_' SY-DATUM SY-UZEIT INTO L_DFNAME.
L_TITLE = TEXT-H01.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = L_TITLE
* DEFAULT_EXTENSION = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
DEFAULT_FILE_NAME = L_DFNAME
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
STOP.
ENDIF.
*---- 下载模板
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = L_FULLPATH
FILETYPE = 'BIN'
TABLES
DATA_TAB = L_MIME.
*--打开excel模板
PERFORM FRM_OPEN_EXCEL USING L_FULLPATH.
*--打开excel第一个sheet
V_SHEET_NUMBER = 1.
PERFORM FRM_OPEN_EXCEL_SHEET USING V_SHEET_NUMBER.
*---- 公司代码
SELECT SINGLE BUTXT FROM T001 INTO LV_STR WHERE BUKRS = P_BUKRS.
PERFORM FRM_WRITE_CELL_X USING 3 1 LV_STR.
*---- 日期
DATA: L_DATE TYPE CHAR8.
L_DATE+0(4) = P_GJAHR.
L_DATE+4(2) = P_MONAT.
L_DATE+6(2) = '01'.
CLEAR LV_STR.
WRITE L_DATE TO LV_STR USING EDIT MASK 'LL____/__/__'.
PERFORM FRM_WRITE_CELL USING 3 3 LV_STR.
LOOP AT IT_CELL_DATA.
*---- 本期
IF IT_CELL_DATA-BQ_DMBTR <> 0.
LV_STR = IT_CELL_DATA-BQ_DMBTR.
CONDENSE LV_STR NO-GAPS.
PERFORM FRM_PUT_SIGN_IN_FRONT USING LV_STR.
PERFORM FRM_WRITE_CELL USING IT_CELL_DATA-ZROW IT_CELL_DATA-ZCOL LV_STR.
ENDIF.
*---- 本年
IT_CELL_DATA-ZCOL = IT_CELL_DATA-ZCOL + 1.
IF IT_CELL_DATA-BN_DMBTR <> 0.
LV_STR = IT_CELL_DATA-BN_DMBTR.
CONDENSE LV_STR NO-GAPS.
PERFORM FRM_PUT_SIGN_IN_FRONT USING LV_STR.
PERFORM FRM_WRITE_CELL USING IT_CELL_DATA-ZROW IT_CELL_DATA-ZCOL LV_STR.
ENDIF.
*---- 上年同期
IT_CELL_DATA-ZCOL = IT_CELL_DATA-ZCOL + 1.
IF IT_CELL_DATA-SQ_DMBTR <> 0.
LV_STR = IT_CELL_DATA-SQ_DMBTR.
CONDENSE LV_STR NO-GAPS.
PERFORM FRM_PUT_SIGN_IN_FRONT USING LV_STR.
PERFORM FRM_WRITE_CELL USING IT_CELL_DATA-ZROW IT_CELL_DATA-ZCOL LV_STR.
ENDIF.
ENDLOOP.
*---- 关闭EXCEL
SET PROPERTY OF V_EXCEL 'DisplayAlerts' = 0.
PERFORM FRM_SAVE_EXCEL USING L_FULLPATH.
ENDFORM.
FORM FRM_OPEN_EXCEL USING PA_PATH.
CREATE OBJECT V_EXCEL 'Excel.Application'.
SET PROPERTY OF V_EXCEL 'DisplayAlerts' = 0.
SET PROPERTY OF V_EXCEL 'Visible' = 0. "0."不可见
CALL METHOD OF
V_EXCEL
'Workbooks' = V_BOOK.
CALL METHOD OF
V_BOOK
'Open' = V_BOOK
EXPORTING
#1 = PA_PATH.
IF SY-SUBRC <> 0.
MESSAGE E001(00) WITH 'Open file failed!'.
STOP.
ENDIF.
ENDFORM. " FRM_OPEN_EXCEL
*&---------------------------------------------------------------------*
*& Form FRM_OPEN_EXCEL_SHEET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PA_SHEET_NUMBER text
*----------------------------------------------------------------------*
FORM FRM_OPEN_EXCEL_SHEET USING PA_SHEET_NUMBER.
CALL METHOD OF
V_BOOK
'Sheets' = V_SHEET
EXPORTING
#1 = PA_SHEET_NUMBER.
ENDFORM. " FRM_OPEN_EXCEL_SHEET
*&---------------------------------------------------------------------*
*& Form FRM_WRITE_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PA_ROW text
* -->PA_COL text
* -->PA_VAL text
*----------------------------------------------------------------------*
FORM FRM_WRITE_CELL USING PA_ROW
PA_COL
PA_VAL.
DATA: L_ROW TYPE P LENGTH 10 DECIMALS 0,
L_COL TYPE P LENGTH 10 DECIMALS 0.
L_ROW = PA_ROW.
L_COL = PA_COL.
CALL METHOD OF
V_SHEET
'Cells' = V_CELL
EXPORTING
#1 = L_ROW
#2 = L_COL.
SET PROPERTY OF V_CELL 'Value' = PA_VAL.
ENDFORM. " FRM_WRITE_CELL
FORM FRM_SAVE_EXCEL USING PA_FULLPATH.
SET PROPERTY OF V_EXCEL 'Visible' = 1. "显示
CALL METHOD OF
V_BOOK
'SAVEAS'
EXPORTING
#1 = PA_FULLPATH.
* CALL METHOD OF V_BOOK 'CLOSE' .
CALL METHOD OF
V_BOOK
'Exit' = V_BOOK.
CALL METHOD OF
V_EXCEL
'QUIT'.
FREE OBJECT V_SHEET.
FREE OBJECT V_BOOK.
FREE OBJECT V_EXCEL.
ENDFORM. " FRM_SAVE_EXCEL
FORM FRM_PUT_SIGN_IN_FRONT USING P_VALUE.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
VALUE = P_VALUE.
ENDFORM.
FORM FRM_WRITE_CELL_TEXT USING PA_ROW
PA_COL
PA_VAL.
DATA: L_STR TYPE CHAR100.
CALL METHOD OF
V_SHEET
'Cells' = V_CELL
EXPORTING
#1 = PA_ROW
#2 = PA_COL.
GET PROPERTY OF V_CELL 'Value' = L_STR.
IF L_STR = ''.
L_STR = PA_VAL.
ELSE.
CONCATENATE L_STR PA_VAL
INTO L_STR
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>CR_LF.
ENDIF.
* SHIFT l_str LEFT DELETING LEADING space.
PA_VAL = L_STR.
SET PROPERTY OF V_CELL 'Value' = PA_VAL.
ENDFORM. " FRM_WRITE_CELL
FORM FRM_WRITE_CELL_X USING PA_ROW
PA_COL
PA_VAL.
DATA: L_STR TYPE CHAR100.
CALL METHOD OF
V_SHEET
'Cells' = V_CELL
EXPORTING
#1 = PA_ROW
#2 = PA_COL.
* GET PROPERTY OF V_CELL 'Value' = L_STR.
** REPLACE ALL OCCURRENCES OF REGEX '&' IN l_str WITH pa_val.
* REPLACE FIRST OCCURRENCE OF REGEX '&' IN L_STR WITH PA_VAL.
* PA_VAL = L_STR.
CLEAR L_STR .
L_STR = '编制单位:'&& PA_VAL.
SET PROPERTY OF V_CELL 'Value' = L_STR.
ENDFORM. " FRM_WRITE_CELL
ZFI利润表(开发笔记)
最新推荐文章于 2023-12-26 09:53:38 发布