您的位置:首页 > 编程语言

ABAP实例:一个现金流量表的代码

2012-07-09 23:08 253 查看

ABAP实例:一个现金流量表的代码

* 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: