一个现金流量表的代码,感谢琛(290911233)提供。
* program SOURCE HEADER : 现金流量表
* Program Name:
* Description:
* Date/Author:
* Table Update:
* Special Logic:
* Include:
*-----------------------------------------------------------------------
* MODIFICATION LOG : 程序修改更新记录
*-----------------------------------------------------------------------
* ChangeDate Programmer Request Description
* ========== ============= ============ ================================
*-----------------------------------------------------------------------
* REPORT NAME : 宣告程序名称及报表格式,
*-----------------------------------------------------------------------
REPORT ZFI003
NO STANDARD PAGE HEADING
MESSAGE-ID 00 "所使用的MESSAGE
LINE-COUNT 800 " 每页报表行数
LINE-SIZE 180. " 每页报表宽度
*-----------------------------------------------------------------------
* TABLE DESCRIPTION : 宣告程序会使用的TABLE
*-----------------------------------------------------------------------
TABLES: BSEG,BKPF,GLT0.
*-----------------------------------------------------------------------
* DATA : 宣告程序所使用的变量及自定型态
INCLUDE OLE2INCL. " FOR OLE
DATA: EXCEL TYPE OLE2_OBJECT,
BOOKS TYPE OLE2_OBJECT,
SHEET TYPE OLE2_OBJECT,
CELL TYPE OLE2_OBJECT.
*-----------------------------------------------------------------------
DATA: BEGIN OF ITAB_BKPF OCCURS 0 ,
BELNR LIKE BKPF-BELNR, "表头-凭证号
END OF ITAB_BKPF.
DATA: BEGIN OF ITAB_TT OCCURS 0 ,
BELNR LIKE BSEG-BELNR, "凭证号
HKONT LIKE BSEG-HKONT, "表体-总分类帐目
RSTGR LIKE BSEG-RSTGR, "REASON CODE
SHKZG LIKE BSEG-SHKZG, "debit and credit
DMBTR LIKE BSEG-DMBTR, "本位币金额
END OF ITAB_TT.
DATA: D01 LIKE BSEG-DMBTR,
D02 LIKE BSEG-DMBTR,
D03 LIKE BSEG-DMBTR,
D04 LIKE BSEG-DMBTR,
D05 LIKE BSEG-DMBTR,
D06 LIKE BSEG-DMBTR,
D07 LIKE BSEG-DMBTR,
D08 LIKE BSEG-DMBTR,
D09 LIKE BSEG-DMBTR,
D10 LIKE BSEG-DMBTR,
D11 LIKE BSEG-DMBTR,
D12 LIKE BSEG-DMBTR,
D13 LIKE BSEG-DMBTR,
D14 LIKE BSEG-DMBTR,
D15 LIKE BSEG-DMBTR,
D16 LIKE BSEG-DMBTR,
D17 LIKE BSEG-DMBTR,
D18 LIKE BSEG-DMBTR,
D19 LIKE BSEG-DMBTR,
D20 LIKE BSEG-DMBTR,
D21 LIKE BSEG-DMBTR,
D22 LIKE BSEG-DMBTR,
D23 LIKE BSEG-DMBTR,
D24 LIKE BSEG-DMBTR,
D25 LIKE BSEG-DMBTR,
D26 LIKE BSEG-DMBTR,
D27 LIKE BSEG-DMBTR,
D28 LIKE BSEG-DMBTR,
D29 LIKE BSEG-DMBTR,
D30 LIKE BSEG-DMBTR,
D31 LIKE BSEG-DMBTR.
**----------------------------------------------------------------------
** SELECTION SCREEN / OPTION / PARAMETER :
*屏幕输入报表筛选条件
**----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-001.
*PARAMETERS: p_bukrs LIKE glt0-bukrs OBLIGATORY DEFAULT '1000'.
SELECT-OPTIONS: P_BUKRS FOR GLT0-BUKRS OBLIGATORY DEFAULT '1000'.
SELECT-OPTIONS: S_GJAHR FOR BKPF-GJAHR OBLIGATORY DEFAULT SY-DATUM(4),
S_MONAT FOR BKPF-MONAT DEFAULT SY-DATUM+4(2).
SELECTION-SCREEN END OF BLOCK BL01.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_FNAME(60) DEFAULT 'C:/SAP/CASH.XLS'.
SELECTION-SCREEN END OF BLOCK BLK2.
*----------------------------------------------------------------------
* AT SELECTION-SCREEN :
*将要离开选择屏幕的时候执行的事件,可以检查输入
*----------------------------------------------------------------------
*AT SELECTION-SCREEN.
* IF S_MONAT-HIGH IS INITIAL.
* MESSAGE E398 WITH '请输入过帐期间的上限!'.
* ENDIF.
*----------------------------------------------------------------------
* AT START SELECTION : 输入结束后启动的区块,
*如按下<F8>
*----------------------------------------------------------------------
START-OF-SELECTION.
DATA: L_EXIST.
CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
EXPORTING
FNAME = P_FNAME
IMPORTING
EXIST = L_EXIST
* ISDIR =
* FILESIZE =
EXCEPTIONS
FILEINFO_ERROR = 1
OTHERS = 2 .
IF SY-SUBRC <> 0 OR L_EXIST <> 'X'. "SY-SUBRC返回代码值0 表示操作成功
MESSAGE I398(00) WITH '打开模版文件' P_FNAME '时出错!'.
EXIT.
ENDIF.
PERFORM READ_DATA.
*----------------------------------------------------------------------
* END OF SELECTION : 在结束打印数据后启动,
*如可用来印出USER输入的条件
*-----------------------------------------------------------------------
END-OF-SELECTION.
PERFORM WRITE_BS.
* FORM : 撰写程序中所使用到的子程序
*-----------------------------------------------------------------------
* Read Data : 自TABLE读取数据放入Internal Table
*-----------------------------------------------------------------------
FORM READ_DATA.
SELECT
BELNR "表头-凭证号
INTO CORRESPONDING FIELDS OF TABLE ITAB_BKPF
FROM BKPF
WHERE GJAHR IN S_GJAHR
AND MONAT IN S_MONAT
AND BUKRS IN P_BUKRS.
SELECT
HKONT "表体-总分类帐目
RSTGR "REASON CODE
SHKZG "debit and credit
BELNR "表头-凭证号
DMBTR "本位币金额
INTO CORRESPONDING FIELDS OF TABLE ITAB_TT
FROM BSEG
WHERE GJAHR IN S_GJAHR
AND BUKRS IN P_BUKRS
AND HKONT <= '0010090600'.
LOOP AT ITAB_TT.
READ TABLE ITAB_BKPF WITH KEY BELNR = ITAB_TT-BELNR.
IF SY-SUBRC <> 0.
DELETE ITAB_TT.
ENDIF.
ENDLOOP.
FREE ITAB_BKPF.
LOOP AT ITAB_TT.
CASE ITAB_TT-RSTGR.
WHEN '01'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D01 = D01 + ITAB_TT-DMBTR.
WHEN '02'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D02 = D02 + ITAB_TT-DMBTR.
WHEN '03'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D03 = D03 + ITAB_TT-DMBTR.
WHEN '04'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D05 = D05 + ITAB_TT-DMBTR.
WHEN '05'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D06 = D06 + ITAB_TT-DMBTR.
WHEN '06'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D07 = D07 + ITAB_TT-DMBTR.
WHEN '07'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D08 = D08 + ITAB_TT-DMBTR.
WHEN '08'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D11 = D11 + ITAB_TT-DMBTR.
WHEN '09'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D12 = D12 + ITAB_TT-DMBTR.
WHEN '10'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D13 = D13 + ITAB_TT-DMBTR.
WHEN '11'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D14 = D14 + ITAB_TT-DMBTR.
WHEN '12'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D16 = D16 + ITAB_TT-DMBTR.
WHEN '13'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D17 = D17 + ITAB_TT-DMBTR.
WHEN '14'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D18 = D18 + ITAB_TT-DMBTR.
WHEN '15'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D21 = D21 + ITAB_TT-DMBTR.
WHEN '16'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D22 = D22 + ITAB_TT-DMBTR.
WHEN '17'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D23 = D23 + ITAB_TT-DMBTR.
WHEN '18'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D25 = D25 + ITAB_TT-DMBTR.
WHEN '19'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D26 = D26 + ITAB_TT-DMBTR.
WHEN '20'.
IF ITAB_TT-SHKZG = 'S'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D27 = D27 + ITAB_TT-DMBTR.
WHEN '21'.
IF ITAB_TT-SHKZG = 'H'.
ITAB_TT-DMBTR = 0 - ITAB_TT-DMBTR.
ENDIF.
D30 = D30 + ITAB_TT-DMBTR.
ENDCASE.
ENDLOOP.
* D05 = ABS( D05 ).
* D06 = ABS( D06 ).
* D07 = ABS( D07 ).
* D08 = ABS( D08 ).
* D16 = ABS( D16 ).
* D17 = ABS( D17 ).
* D18 = ABS( D18 ).
* D25 = ABS( D25 ).
* D26 = ABS( D26 ).
* D27 = ABS( D27 ).
D04 = D01 + D02 + D03.
D09 = D05 + D06 + D07 + D08.
D10 = D04 - D09.
D15 = D11 + D12 + D13 + D14.
D19 = D16 + D17 + D18.
D20 = D15 - D19.
D24 = D21 + D22 + D23.
D28 = D25 + D26 + D27.
D29 = D24 - D28.
D31 = D10 + D20 + D29 + D30.
ENDFORM. "READ_DATA
*&---------------------------------------------------------------------*
*& Form write_bs
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM WRITE_BS.
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.
CALL METHOD OF EXCEL 'WORKBOOKS' = BOOKS.
CALL METHOD OF BOOKS 'OPEN'
EXPORTING #1 = P_FNAME . "'C:/CASH.XLS'.
CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.
CALL METHOD OF SHEET 'ACTIVATE'.
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = 1 #2 = 1.
PERFORM FILL_CELL USING 6 3 D01.
PERFORM FILL_CELL USING 7 3 D02.
PERFORM FILL_CELL USING 8 3 D03.
PERFORM FILL_CELL USING 9 3 D04.
PERFORM FILL_CELL USING 10 3 D05.
PERFORM FILL_CELL USING 11 3 D06.
PERFORM FILL_CELL USING 12 3 D07.
PERFORM FILL_CELL USING 13 3 D08.
PERFORM FILL_CELL USING 14 3 D09.
PERFORM FILL_CELL USING 15 3 D10.
PERFORM FILL_CELL USING 17 3 D11.
PERFORM FILL_CELL USING 18 3 D12.
PERFORM FILL_CELL USING 19 3 D13.
PERFORM FILL_CELL USING 20 3 D14.
PERFORM FILL_CELL USING 21 3 D15.
PERFORM FILL_CELL USING 22 3 D16.
PERFORM FILL_CELL USING 23 3 D17.
PERFORM FILL_CELL USING 24 3 D18.
PERFORM FILL_CELL USING 25 3 D19.
PERFORM FILL_CELL USING 26 3 D20.
PERFORM FILL_CELL USING 28 3 D21.
PERFORM FILL_CELL USING 29 3 D22.
PERFORM FILL_CELL USING 30 3 D23.
PERFORM FILL_CELL USING 31 3 D24.
PERFORM FILL_CELL USING 32 3 D25.
PERFORM FILL_CELL USING 33 3 D26.
PERFORM FILL_CELL USING 34 3 D27.
PERFORM FILL_CELL USING 35 3 D28.
PERFORM FILL_CELL USING 36 3 D29.
PERFORM FILL_CELL USING 37 3 D30.
PERFORM FILL_CELL USING 38 3 D31.
PERFORM FILL_CELL USING 39 3 S_MONAT.
SET PROPERTY OF EXCEL 'Visible' = 1.
ENDFORM. "fill_cell
*&---------------------------------------------------------------------*
*& Form fill_cell
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I text
* -->P_J text
* -->P_VAL text
*----------------------------------------------------------------------*
FORM FILL_CELL USING P_I
P_J
P_VAL.
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = P_I #2 = P_J.
SET PROPERTY OF CELL 'VALUE' = P_VAL.
ENDFORM. " FILL_CELL