需求是通过doi的方式,输出报表,代码如下。
REPORT ZFIR_015 NO STANDARD PAGE HEADING LINE-SIZE 120 MESSAGE-ID ZFI_01.
INCLUDE ZFIR_015T01.
INCLUDE ZFIR_015S01.
INCLUDE ZFIR_015O01.
INCLUDE ZFIR_015I01.
INCLUDE ZFIR_015F01.
INCLUDE ZFIR_015F02.
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
PERFORM FRM_INIT.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
*&---------------------------------------------------------------------*
*& END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& frm_data_show.
*&---------------------------------------------------------------------*
PERFORM FRM_CALL_SCREEN.
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015T01
*&---------------------------------------------------------------------*
TABLES:FAGLFLEXT,T001.
DATA: GC_DOC_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'HRFPM_EXCEL_STANDARD',
GC_DOC_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT',
GC_DOC_OBJECT_KEY TYPE SBDST_OBJECT_KEY VALUE 'ZHA004_21',
GC_DOCUMENT_NAME(30) TYPE C VALUE '固定资产明细表'. " 模板名字.
CONSTANTS: GC_URL_IND TYPE I VALUE 1.
DATA: GV_ITEM_URL(256), " 存放模板的URL .
GV_INPLACE TYPE C VALUE 'X',
GV_NO_FLUSH(1) TYPE C VALUE 'X',
GV_UPDATING TYPE I VALUE '-1'.
DATA: GO_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"容器实例
GO_CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL, "控制器实例
GO_DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY, "文档操作对象
GV_DOCUMENT_TYPE TYPE SOI_DOCUMENT_TYPE,
GO_SPREADSHEET TYPE REF TO I_OI_SPREADSHEET, "分隔符对象
GO_ERROR TYPE REF TO I_OI_ERROR, "错误信息
GV_RETCODE TYPE SOI_RET_STRING,
GO_ERRORS TYPE REF TO I_OI_ERROR OCCURS 0 WITH HEADER LINE. "错误信息
DATA: GT_SHEETS TYPE SOI_SHEETS_TABLE,
GS_SHEET TYPE SOI_SHEETS.
* Table 定义
DATA: BEGIN OF GS_ALV,
LINE TYPE CHAR2,
ZZ007 TYPE CHAR2,
COL1 TYPE CHAR50,
COL2 TYPE ACDOCA-HSL,
COL3 TYPE ACDOCA-HSL,
COL4 TYPE ACDOCA-HSL,
COL5 TYPE ACDOCA-HSL,
COL6 TYPE ACDOCA-HSL,
COL7 TYPE ACDOCA-HSL,
COL8 TYPE ACDOCA-HSL,
COL9 TYPE ACDOCA-HSL,
COL10 TYPE ACDOCA-HSL,
COL11 TYPE ACDOCA-HSL,
COL12 TYPE ACDOCA-HSL,
END OF GS_ALV,
GT_ALV LIKE TABLE OF GS_ALV.
DATA: BEGIN OF GS_RACCT,
LB TYPE CHAR2,
COL TYPE SY-INDEX,
RACCT TYPE FAGLFLEXT-RACCT,
END OF GS_RACCT,
GT_RACCT LIKE TABLE OF GS_RACCT.
DATA: BEGIN OF GS_FAGL,
RACCT TYPE FAGLFLEXT-RACCT,
HSLVT TYPE FAGLFLEXT-HSLVT,
END OF GS_FAGL,
GT_FAGL LIKE TABLE OF GS_FAGL.
DATA: BEGIN OF GS_ACDOCA,
RACCT TYPE ACDOCA-RACCT,
DRCRK TYPE ACDOCA-DRCRK,
ZZ007 TYPE ACDOCA-ZZ007,
HSL TYPE ACDOCA-HSL,
END OF GS_ACDOCA,
GT_ACDOCA LIKE TABLE OF GS_ACDOCA.
RANGES: GR_RACCT FOR ACDOCA-RACCT.
* 变量定义
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015S01
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BO1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_BUKRS FOR T001-BUKRS NO-EXTENSION NO INTERVALS OBLIGATORY.
SELECT-OPTIONS: S_DATUM FOR SY-DATUM NO-EXTENSION NO INTERVALS OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BO1.
AT SELECTION-SCREEN ON S_BUKRS.
PERFORM CHECK_INPUT_BUKRS.
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISP_EXCEL OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE DISP_EXCEL OUTPUT.
PERFORM FRM_DISP_EXCEL.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
DATA: LV_CODE TYPE SY-UCOMM.
CLEAR LV_CODE.
LV_CODE = SY-UCOMM.
CASE LV_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
CLEAR LV_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form check_input_bukrs
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CHECK_INPUT_BUKRS .
IF S_BUKRS[] IS INITIAL.
MESSAGE E000 WITH TEXT-M01.
ELSE.
SELECT SINGLE BUKRS
FROM T001
INTO @DATA(LV_BUKRS)
WHERE BUKRS IN @S_BUKRS.
IF SY-SUBRC NE 0.
MESSAGE E000 WITH TEXT-M03.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
PERFORM GET_ACDOCA_DATA.
PERFORM GET_FAGLFLEXT_DATA.
PERFORM FILL_FIRST_COL.
PERFORM FILL_DATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FIRST_LINE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GS_ALV
*&---------------------------------------------------------------------*
FORM FILL_FIRST_COL.
GS_ALV-LINE = 1.
GS_ALV-COL1 = '固定资产年初原值'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 2.
GS_ALV-ZZ007 = '01'.
GS_ALV-COL1 = '购置(从集团外部购入)'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 3.
GS_ALV-ZZ007 = '02'.
GS_ALV-COL1 = '年内从集团内部单位购入(发票金额)——列示具体单位名称'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 4.
GS_ALV-ZZ007 = '03'.
GS_ALV-COL1 = '年内从集团内部单位购入(运费安装费等其他金额)'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 5.
GS_ALV-ZZ007 = '04'.
GS_ALV-COL1 = '在建工程转入'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 6.
GS_ALV-ZZ007 = '05'.
GS_ALV-COL1 = '接受捐赠'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 7.
GS_ALV-ZZ007 = '06'.
GS_ALV-COL1 = '年内从集团内部单位转入'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 8.
GS_ALV-ZZ007 = '07'.
GS_ALV-COL1 = '其他增加'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 9.
GS_ALV-ZZ007 = '08'.
GS_ALV-COL1 = '重分类'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 10.
GS_ALV-ZZ007 = '09'.
GS_ALV-COL1 = '处置固定资产(向集团外部处置)'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 11.
GS_ALV-ZZ007 = '10'.
GS_ALV-COL1 = '年内向集团内部单位出售——列示具体内部单位名称'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 12.
GS_ALV-ZZ007 = '11'.
GS_ALV-COL1 = '年内向集团内部单位转出'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 13.
GS_ALV-ZZ007 = '12'.
GS_ALV-COL1 = '国产设备退税减少原值金额'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 14.
GS_ALV-ZZ007 = '13'.
GS_ALV-COL1 = '其他减少'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 15.
GS_ALV-COL1 = '固定资产期末原值 '.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 16.
GS_ALV-COL1 = '累计折旧年初数'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 17.
GS_ALV-ZZ007 = '13'.
GS_ALV-COL1 = '年内计提'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 18.
GS_ALV-ZZ007 = '14'.
GS_ALV-COL1 = '年内从集团内部单位转入—列示具体内部单位名称'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 19.
GS_ALV-ZZ007 = '15'.
GS_ALV-COL1 = '其他增加'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 20.
GS_ALV-ZZ007 = '16'.
GS_ALV-COL1 = '重分类'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 21.
GS_ALV-ZZ007 = '17'.
GS_ALV-COL1 = '处置固定资产时拨回'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 22.
GS_ALV-ZZ007 = '18'.
GS_ALV-COL1 = '年内向集团内部单位出售减少——列示具体内部单位名称'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 23.
GS_ALV-ZZ007 = '19'.
GS_ALV-COL1 = '年内向集团内部单位转出减少'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 24.
GS_ALV-ZZ007 = '20'.
GS_ALV-COL1 = '国产设备退税减少累计折旧金额'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 25.
GS_ALV-ZZ007 = '21'.
GS_ALV-COL1 = '其他减少'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 26.
GS_ALV-COL1 = '累计折旧期末数'.
APPEND GS_ALV TO GT_ALV.
GS_ALV-LINE = 27.
CLEAR GS_ALV.
GS_ALV-COL1 = '账面净值'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 28.
GS_ALV-COL1 = '固定资产减值准备'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
GS_ALV-LINE = 29.
GS_ALV-COL1 = '账面净值减减值准备后净额'.
APPEND GS_ALV TO GT_ALV.
CLEAR GS_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_INIT .
PERFORM GET_RACCT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_racct
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_RACCT .
REFRESH GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '2'.
GS_RACCT-RACCT = '160101'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '3'.
GS_RACCT-RACCT = '160102'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '4'.
GS_RACCT-RACCT = '160103'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '6'.
GS_RACCT-RACCT = '160104'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '7'.
GS_RACCT-RACCT = '160105'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '8'.
GS_RACCT-RACCT = '160106'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '9'.
GS_RACCT-RACCT = '160107'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '10'.
GS_RACCT-RACCT = '160108'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'GZ'. "固定资产
GS_RACCT-COL = '11'.
GS_RACCT-RACCT = '160109'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '2'.
GS_RACCT-RACCT = '160201'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '3'.
GS_RACCT-RACCT = '160202'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '4'.
GS_RACCT-RACCT = '160203'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '6'.
GS_RACCT-RACCT = '160204'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '7'.
GS_RACCT-RACCT = '160205'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '8'.
GS_RACCT-RACCT = '160206'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '9'.
GS_RACCT-RACCT = '160207'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '10'.
GS_RACCT-RACCT = '160208'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
GS_RACCT-LB = 'ZJ'. "固定资产
GS_RACCT-COL = '11'.
GS_RACCT-RACCT = '160209'.
APPEND GS_RACCT TO GT_RACCT.
CLEAR GS_RACCT.
LOOP AT GT_RACCT INTO GS_RACCT.
PERFORM GET_RANGE_RACCT USING GS_RACCT-RACCT.
ENDLOOP.
SORT GR_RACCT BY LOW.
DELETE ADJACENT DUPLICATES FROM GR_RACCT COMPARING LOW.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_RANGE_RACCT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM GET_RANGE_RACCT USING PV_VALUE.
DATA: LV_RACCT TYPE SKB1-SAKNR.
IF PV_VALUE IS NOT INITIAL.
CLEAR LV_RACCT.
LV_RACCT = PV_VALUE && '%'.
SELECT 'I' AS SIGN,
'EQ' AS OPTION,
SAKNR AS LOW
FROM SKB1
APPENDING CORRESPONDING FIELDS OF TABLE @GR_RACCT
WHERE BUKRS IN @S_BUKRS
AND SAKNR LIKE @LV_RACCT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_ACDOCA_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_ACDOCA_DATA .
DATA: LT_ACDOCA LIKE TABLE OF GS_ACDOCA,
LT_ACDOCA_TEM LIKE TABLE OF GS_ACDOCA.
* 取数
REFRESH: LT_ACDOCA, GT_ACDOCA.
SELECT RACCT
DRCRK
ZZ007
HSL
FROM ACDOCA
INTO CORRESPONDING FIELDS OF TABLE LT_ACDOCA
WHERE RBUKRS IN S_BUKRS
AND GJAHR = S_DATUM-LOW(4)
AND RACCT IN GR_RACCT
AND ZZ007 NE ''.
SORT LT_ACDOCA BY RACCT DRCRK ZZ007.
* 求和
LOOP AT GT_RACCT INTO GS_RACCT.
REFRESH: LT_ACDOCA_TEM.
LT_ACDOCA_TEM[] = LT_ACDOCA[].
DELETE LT_ACDOCA_TEM WHERE RACCT(6) NE GS_RACCT-RACCT.
LOOP AT LT_ACDOCA_TEM INTO DATA(LS_ACDOCA).
DATA(LS_ACDOCA_TEM) = LS_ACDOCA.
AT END OF ZZ007.
SUM.
CLEAR GS_ACDOCA.
GS_ACDOCA-RACCT = GS_RACCT-RACCT.
GS_ACDOCA-DRCRK = LS_ACDOCA_TEM-DRCRK.
GS_ACDOCA-ZZ007 = LS_ACDOCA_TEM-ZZ007.
GS_ACDOCA-HSL = LS_ACDOCA-HSL.
APPEND GS_ACDOCA TO GT_ACDOCA.
CLEAR GS_ACDOCA.
ENDAT.
CLEAR:LS_ACDOCA_TEM, LS_ACDOCA.
ENDLOOP.
CLEAR GS_RACCT.
ENDLOOP.
SORT GT_ACDOCA BY RACCT DRCRK ZZ007.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FILL_DATA .
DATA: LT_ALV_NEW LIKE TABLE OF GS_ALV.
LOOP AT GT_ALV INTO GS_ALV.
CASE GS_ALV-LINE .
WHEN '1'.
PERFORM CALCULATE_FAGLFLEXT_HSLVT_GZ.
WHEN '16'.
PERFORM CALCULATE_FAGLFLEXT_HSLVT_ZJ.
WHEN '27'.
WHEN '28'.
WHEN '29'.
WHEN '15' OR '26'.
WHEN OTHERS.
PERFORM CALCUL_ACDOCA USING GS_ALV-ZZ007.
ENDCASE.
MODIFY GT_ALV FROM GS_ALV.
CLEAR GS_ALV.
ENDLOOP.
REFRESH LT_ALV_NEW.
CLEAR GS_ALV.
READ TABLE GT_ALV INTO GS_ALV WITH KEY LINE = '15'.
IF SY-SUBRC = 0.
DATA(LV_TABIX) = SY-TABIX.
DATA(LT_ALV) = GT_ALV[].
LOOP AT LT_ALV INTO DATA(LS_ALV) WHERE LINE >= 1 AND LINE <= 14.
LS_ALV-LINE = GS_ALV-LINE.
LS_ALV-ZZ007 = GS_ALV-ZZ007.
LS_ALV-COL1 = GS_ALV-COL1.
COLLECT LS_ALV INTO LT_ALV_NEW.
ENDLOOP.
IF LT_ALV_NEW IS NOT INITIAL.
READ TABLE LT_ALV_NEW INTO DATA(LS_ALV_NEW) INDEX 1.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING LS_ALV_NEW TO GS_ALV.
MODIFY GT_ALV FROM GS_ALV INDEX LV_TABIX.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALCULATE_FAGLFLEXT_HSLVT_GZ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CALCULATE_FAGLFLEXT_HSLVT_GZ .
DATA: LV_FIELD TYPE CHAR30.
FIELD-SYMBOLS <FS_FIELD>.
DATA(LT_RACCT) = GT_RACCT[].
DELETE LT_RACCT WHERE LB = 'ZJ'.
SORT GT_FAGL BY RACCT.
LOOP AT LT_RACCT INTO GS_RACCT.
CLEAR LV_FIELD.
UNASSIGN <FS_FIELD>.
LV_FIELD = 'COL' && GS_RACCT-COL.
ASSIGN COMPONENT LV_FIELD OF STRUCTURE GS_ALV TO <FS_FIELD>.
CLEAR GS_FAGL.
READ TABLE GT_FAGL INTO GS_FAGL WITH KEY RACCT = GS_RACCT-RACCT
BINARY SEARCH.
IF SY-SUBRC = 0.
DATA(LV_HSLVT) = GS_FAGL-HSLVT.
IF <FS_FIELD> IS ASSIGNED.
MOVE LV_HSLVT TO <FS_FIELD>.
ENDIF.
ENDIF.
CLEAR GS_RACCT.
ENDLOOP.
GS_ALV-COL5 = GS_ALV-COL2 + GS_ALV-COL3 + GS_ALV-COL4.
GS_ALV-COL12 = GS_ALV-COL5 + GS_ALV-COL6 + GS_ALV-COL7 +
GS_ALV-COL8 + GS_ALV-COL9 + GS_ALV-COL10 +
GS_ALV-COL11.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FAGLFLEXT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_FAGLFLEXT_DATA .
DATA: LT_FAGL LIKE TABLE OF GS_FAGL,
LT_FAGL_TEM LIKE TABLE OF GS_FAGL.
REFRESH: GT_FAGL,LT_FAGL.
* 取数
SELECT RACCT
HSLVT
FROM FAGLFLEXT
INTO CORRESPONDING FIELDS OF TABLE LT_FAGL
WHERE RBUKRS IN S_BUKRS
AND RYEAR = S_DATUM-LOW(4)
AND RACCT IN GR_RACCT.
* 求和
LOOP AT GT_RACCT INTO GS_RACCT.
REFRESH: LT_FAGL_TEM.
LT_FAGL_TEM[] = LT_FAGL[].
DELETE LT_FAGL_TEM WHERE RACCT(6) NE GS_RACCT-RACCT.
LOOP AT LT_FAGL_TEM INTO DATA(LS_FAGL).
LS_FAGL-RACCT = GS_RACCT-RACCT.
COLLECT LS_FAGL INTO GT_FAGL.
CLEAR LS_FAGL.
ENDLOOP.
CLEAR GS_RACCT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALCUL_ACDOCA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CALCUL_ACDOCA USING PV_ZZ007.
DATA: LV_FIELD TYPE CHAR30.
FIELD-SYMBOLS <FS_FIELD>.
DATA(LT_RACCT) = GT_RACCT[].
DELETE LT_RACCT WHERE LB = 'ZJ'.
LOOP AT LT_RACCT INTO GS_RACCT.
CLEAR LV_FIELD.
UNASSIGN <FS_FIELD>.
LV_FIELD = 'COL' && GS_RACCT-COL.
ASSIGN COMPONENT LV_FIELD OF STRUCTURE GS_ALV TO <FS_FIELD>.
CLEAR GS_ACDOCA.
READ TABLE GT_ACDOCA INTO GS_ACDOCA WITH KEY RACCT = GS_RACCT-RACCT
DRCRK = 'S'
ZZ007 = PV_ZZ007
BINARY SEARCH.
IF SY-SUBRC = 0.
DATA(LV_HSL) = GS_ACDOCA-HSL.
IF <FS_FIELD> IS ASSIGNED.
MOVE LV_HSL TO <FS_FIELD>.
ENDIF.
ENDIF.
CLEAR GS_RACCT.
ENDLOOP.
GS_ALV-COL5 = GS_ALV-COL2 + GS_ALV-COL3 + GS_ALV-COL4.
GS_ALV-COL12 = GS_ALV-COL5 + GS_ALV-COL6 + GS_ALV-COL7 +
GS_ALV-COL8 + GS_ALV-COL9 + GS_ALV-COL10 +
GS_ALV-COL11.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALCULATE_FAGLFLEXT_HSLVT_zj
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CALCULATE_FAGLFLEXT_HSLVT_ZJ .
DATA: LV_FIELD TYPE CHAR30.
FIELD-SYMBOLS <FS_FIELD>.
DATA(LT_RACCT) = GT_RACCT[].
DELETE LT_RACCT WHERE LB = 'GZ'.
SORT GT_FAGL BY RACCT.
LOOP AT LT_RACCT INTO GS_RACCT.
CLEAR LV_FIELD.
UNASSIGN <FS_FIELD>.
LV_FIELD = 'GS_ALV-COL' && GS_RACCT-COL.
ASSIGN LV_FIELD TO <FS_FIELD>.
CLEAR GS_FAGL.
READ TABLE GT_FAGL INTO GS_FAGL WITH KEY RACCT = GS_RACCT-RACCT
BINARY SEARCH.
IF SY-SUBRC = 0.
DATA(LV_HSLVT) = GS_FAGL-HSLVT.
IF <FS_FIELD> IS ASSIGNED.
MOVE LV_HSLVT TO <FS_FIELD>.
ENDIF.
ENDIF.
CLEAR GS_RACCT.
ENDLOOP.
GS_ALV-COL5 = GS_ALV-COL2 + GS_ALV-COL3 + GS_ALV-COL4.
GS_ALV-COL12 = GS_ALV-COL5 + GS_ALV-COL6 + GS_ALV-COL7 +
GS_ALV-COL8 + GS_ALV-COL9 + GS_ALV-COL10 +
GS_ALV-COL11.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALL_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CALL_SCREEN .
CALL SCREEN 100 .
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZFIR_015F02
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form DISP_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISP_EXCEL .
PERFORM FRM_CREATE_BASIC_OBJECT .
PERFORM SELECT_SHEET.
PERFORM FRM_OUTPUT_EXCEL.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_BASIC_OBJECT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_BASIC_OBJECT .
DATA: L_APP_NAME(200).
DATA: LO_BDS_INSTANCE TYPE REF TO CL_BDS_DOCUMENT_SET.
DATA: LT_DOC_SIGNATURE TYPE SBDST_SIGNATURE,
LS_DOC_SIGNATURE LIKE LINE OF LT_DOC_SIGNATURE,
LT_DOC_COMPONENTS TYPE SBDST_COMPONENTS,
LT_DOC_URIS TYPE SBDST_URI,
LS_DOC_URIS LIKE LINE OF LT_DOC_URIS.
STATICS:L_INITIALIZED TYPE C.
* get the SAP DOI interface references.
* this work has just to be done once !
CHECK L_INITIALIZED IS INITIAL.
* first get the SAP DOI i_oi_container_control interface
CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
IMPORTING
CONTROL = GO_CONTROL
ERROR = GO_ERROR.
* check no errors occured
CALL METHOD GO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
L_APP_NAME = SY-REPID.
* initialize the SAP DOI Container, tell it to run in the container
* specified above and tell it to run Excel in-place
CALL METHOD GO_CONTROL->INIT_CONTROL
EXPORTING
R3_APPLICATION_NAME = L_APP_NAME
INPLACE_ENABLED = 'X'
INPLACE_SCROLL_DOCUMENTS = 'X'
PARENT = CL_GUI_CONTAINER=>SCREEN0 "container
REGISTER_ON_CLOSE_EVENT = 'X'
REGISTER_ON_CUSTOM_EVENT = 'X'
NO_FLUSH = 'X'
IMPORTING
ERROR = GO_ERRORS.
* save error object in collection
APPEND GO_ERRORS.
* predefined excel doc. was saved in R/3
* business document service: OAOR
* here we get the URL according to its information.
CLEAR GV_ITEM_URL.
GV_DOCUMENT_TYPE = 'EXCEL.SHEET'.
LS_DOC_SIGNATURE-PROP_NAME = 'BDS_KEYWORD'.
LS_DOC_SIGNATURE-PROP_VALUE = GC_DOCUMENT_NAME .
APPEND LS_DOC_SIGNATURE TO LT_DOC_SIGNATURE.
CREATE OBJECT LO_BDS_INSTANCE.
CALL METHOD LO_BDS_INSTANCE->GET_INFO
EXPORTING
CLASSNAME = GC_DOC_CLASSNAME
CLASSTYPE = GC_DOC_CLASSTYPE
OBJECT_KEY = GC_DOC_OBJECT_KEY
CHANGING
COMPONENTS = LT_DOC_COMPONENTS
SIGNATURE = LT_DOC_SIGNATURE.
CALL METHOD LO_BDS_INSTANCE->GET_WITH_URL
EXPORTING
CLASSNAME = GC_DOC_CLASSNAME
CLASSTYPE = GC_DOC_CLASSTYPE
OBJECT_KEY = GC_DOC_OBJECT_KEY
CHANGING
URIS = LT_DOC_URIS
SIGNATURE = LT_DOC_SIGNATURE.
FREE LO_BDS_INSTANCE.
READ TABLE LT_DOC_URIS INTO LS_DOC_URIS INDEX GC_URL_IND.
GV_ITEM_URL = LS_DOC_URIS-URI.
* ask the SAP DOI container for a i_oi_document_proxy for Excel
CALL METHOD GO_CONTROL->GET_DOCUMENT_PROXY
EXPORTING
DOCUMENT_TYPE = GV_DOCUMENT_TYPE
* REGISTER_CONTAINER = 'X'
IMPORTING
DOCUMENT_PROXY = GO_DOCUMENT
ERROR = GO_ERROR.
APPEND GO_ERRORS.
* open a document saved in business document service.
CALL METHOD GO_DOCUMENT->OPEN_DOCUMENT
EXPORTING
OPEN_INPLACE = GV_INPLACE
DOCUMENT_URL = GV_ITEM_URL.
* check if our document proxy can serve a spreadsheet interface
DATA: HAS TYPE I.
CALL METHOD GO_DOCUMENT->HAS_SPREADSHEET_INTERFACE
IMPORTING
IS_AVAILABLE = HAS.
APPEND GO_ERRORS.
IF NOT HAS IS INITIAL.
CALL METHOD GO_DOCUMENT->GET_SPREADSHEET_INTERFACE
* EXPORTING no_flush = no_flush
IMPORTING
SHEET_INTERFACE = GO_SPREADSHEET.
APPEND GO_ERRORS.
ENDIF.
LOOP AT GO_ERRORS.
CALL METHOD GO_ERRORS->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
ENDLOOP.
FREE GO_ERRORS.
L_INITIALIZED = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SELECT_SHEET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SELECT_SHEET .
CALL METHOD GO_SPREADSHEET->GET_SHEETS
EXPORTING
NO_FLUSH = ''
UPDATING = GV_UPDATING
IMPORTING
SHEETS = GT_SHEETS
ERROR = GO_ERROR
RETCODE = GV_RETCODE.
CALL METHOD GO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
READ TABLE GT_SHEETS INTO GS_SHEET INDEX 1.
CALL METHOD GO_SPREADSHEET->SELECT_SHEET
EXPORTING
NAME = GS_SHEET-SHEET_NAME
NO_FLUSH = ''
IMPORTING
ERROR = GO_ERROR.
CALL METHOD GO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
CALL METHOD GO_SPREADSHEET->GET_ACTIVE_SHEET
EXPORTING
NO_FLUSH = ''
IMPORTING
SHEETNAME = GS_SHEET-SHEET_NAME
ERROR = GO_ERROR
RETCODE = GV_RETCODE.
CALL METHOD GO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
LOOP AT GO_ERRORS.
CALL METHOD GO_ERRORS->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
ENDLOOP.
FREE GO_ERRORS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_OUTPUT_EXCEL .
DATA: LV_BUTXT TYPE C LENGTH 256,
LV_VALUE TYPE C LENGTH 256.
DATA: LV_ROW TYPE I,
LV_COL TYPE I,
LV_COL1 TYPE CHAR2.
DATA: LV_LINES TYPE I.
DATA: LV_FIELD TYPE CHAR30.
FIELD-SYMBOLS <FS_FIELD>.
DATA:LS_RANGE TYPE SOI_RANGE_ITEM,
LT_RANGE TYPE TABLE OF SOI_RANGE_ITEM, "为SET_RANGE_DATA方法标明填充数据的范围名及其行列数
LS_CONTENT TYPE SOI_GENERIC_ITEM,
LT_CONTENT TYPE TABLE OF SOI_GENERIC_ITEM, "为SET_RANGE_DATA方法提供填充数据
LS_FORMATTABLE TYPE SOI_FORMAT_ITEM, "设置范围格式
LT_FORMATTABLE TYPE TABLE OF SOI_FORMAT_ITEM. "设置范围格式
FIELD-SYMBOLS:<FS_FILED>,
<FS_CONTENT_FIELD>.
* DATA: LV_VALUE TYPE SOI_GENERIC_ITEM-VALUE.
SELECT SINGLE BUTXT
INTO LV_BUTXT
FROM T001
WHERE BUKRS IN S_BUKRS .
LV_BUTXT = '编制单位:' && LV_BUTXT.
CONDENSE LV_BUTXT NO-GAPS .
LV_BUTXT = LV_BUTXT && ' 所属期间: ' && S_DATUM-LOW+0(4) &&
'年' && S_DATUM-LOW+4(2) && '月'.
PERFORM FRM_FILL_CELL USING 3 1 LV_BUTXT .
LV_ROW = 4.
* LOOP AT GT_ALV INTO GS_ALV.
* LV_ROW = LV_ROW + 1.
* LV_COL = 1.
* DO 11 TIMES.
* LV_COL = LV_COL + 1.
* CLEAR LV_FIELD.
* LV_FIELD = 'COL' && LV_COL.
* CONDENSE LV_FIELD NO-GAPS.
* ASSIGN COMPONENT LV_FIELD OF STRUCTURE GS_ALV TO <FS_FIELD>.
* CLEAR: LV_VALUE.
* MOVE <FS_FIELD> TO LV_VALUE.
* CONDENSE LV_VALUE NO-GAPS.
* PERFORM FRM_FILL_CELL USING LV_ROW LV_COL LV_VALUE .
* ENDDO.
* CLEAR: GS_ALV,LV_COL.
* UNASSIGN <FS_FIELD>.
* ENDLOOP.
DESCRIBE TABLE GT_ALV LINES LV_LINES."填充数据行数
CALL METHOD GO_SPREADSHEET->INSERT_RANGE_DIM
EXPORTING
NO_FLUSH = 'X'
NAME = 'RANGE1'
LEFT = 2
TOP = 5
ROWS = LV_LINES
COLUMNS = 11.
LT_RANGE = VALUE #( ( NAME = 'RANGE1' ROWS = LV_LINES COLUMNS = '11' ) ).
LOOP AT GT_ALV INTO GS_ALV.
DATA(LV_COUNT_ROW) = SY-TABIX.
DO 14 TIMES.
DATA(LV_COLUMN) = SY-INDEX.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE GS_ALV TO <FS_FILED>.
LS_CONTENT-ROW = LV_COUNT_ROW.
IF SY-INDEX >= 4.
LV_COLUMN = LV_COLUMN - 3.
LS_CONTENT-COLUMN = LV_COLUMN.
LS_CONTENT-VALUE = <FS_FILED>.
APPEND LS_CONTENT TO LT_CONTENT.
ENDIF.
CLEAR LS_CONTENT.
ENDDO.
CLEAR GS_ALV.
ENDLOOP.
"填充数据
CALL METHOD GO_SPREADSHEET->SET_RANGES_DATA
EXPORTING
NO_FLUSH = 'X'
RANGES = LT_RANGE
CONTENTS = LT_CONTENT.
"设置范围字体格式
LT_FORMATTABLE = VALUE #( ( NAME = 'RANGE1' SIZE = 11 ALIGN = 1 ) )."RANGE1字体大小11 水平居中
CALL METHOD GO_SPREADSHEET->SET_RANGES_FORMAT
EXPORTING
FORMATTABLE = LT_FORMATTABLE
NO_FLUSH = 'X'.
"设置范围边框格式
CALL METHOD GO_SPREADSHEET->SET_FRAME
EXPORTING
RANGENAME = 'RANGE1'
TYP = '127'
COLOR = 1.
"设置列自动优化
CALL METHOD GO_SPREADSHEET->FIT_WIDEST
EXPORTING
NO_FLUSH = 'X'
NAME = SPACE.
"更改SHEET名称
CALL METHOD GO_SPREADSHEET->SET_SHEET_NAME
EXPORTING
NEWNAME = '固定资产明细表及折旧表'
OLDNAME = 'Sheet1'
NO_FLUSH = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_CELL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_2
*& --> P_1
*& --> LV_VALUE
*&---------------------------------------------------------------------*
FORM FRM_FILL_CELL USING P_TOP TYPE I
P_LEFT TYPE I
P_VALUE TYPE SOI_GENERIC_ITEM-VALUE.
CHECK P_VALUE IS NOT INITIAL .
DATA: L_COLUMNS_NUMBER TYPE I,
L_ROWS_NUMBER TYPE I.
DATA: LO_ERROR TYPE REF TO I_OI_ERROR.
DATA: LS_RANGEITEM TYPE SOI_RANGE_ITEM.
DATA: LT_RANGES TYPE SOI_RANGE_LIST.
DATA: LT_CONTENTS TYPE SOI_GENERIC_TABLE,
LS_CONTENTS TYPE SOI_GENERIC_ITEM.
L_COLUMNS_NUMBER = 1.
L_ROWS_NUMBER = 1.
CALL METHOD GO_SPREADSHEET->INSERT_RANGE_DIM
EXPORTING
NAME = 'CELL'
NO_FLUSH = ''
TOP = P_TOP
LEFT = P_LEFT
ROWS = L_ROWS_NUMBER
COLUMNS = L_COLUMNS_NUMBER
IMPORTING
ERROR = LO_ERROR.
CALL METHOD LO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
LS_RANGEITEM-NAME = 'CELL'.
LS_RANGEITEM-COLUMNS = L_COLUMNS_NUMBER.
LS_RANGEITEM-ROWS = L_ROWS_NUMBER.
APPEND LS_RANGEITEM TO LT_RANGES.
LS_CONTENTS-COLUMN = L_COLUMNS_NUMBER.
LS_CONTENTS-ROW = L_ROWS_NUMBER.
LS_CONTENTS-VALUE = P_VALUE.
APPEND LS_CONTENTS TO LT_CONTENTS.
CALL METHOD GO_SPREADSHEET->SET_RANGES_DATA
EXPORTING
RANGES = LT_RANGES
CONTENTS = LT_CONTENTS
NO_FLUSH = ''
IMPORTING
ERROR = LO_ERROR.
CALL METHOD LO_ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
ENDFORM.