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
相关文章推荐
- 从零开始的代码重定位--一个小实例
- 一个典型的PHP分页实例代码
- 一个现金流量表的代码
- 一个PHP并发访问实例代码
- 一个实例学习Kotlin 开发 Android App 的全过程(内有代码)
- 一个Win32 API实例类(代码收集)
- 致java初学者:理解每一句java代码,给出一个简单实例。
- ABAP--一个读取EXCEL单元格的内容超过256个字符的代码样例(from Jack)
- HTML5 实现的一个俄罗斯方块实例代码
- 在看官方的例子时候由一个grid实例,在每一行之前有个加号,展开可以显示内容,在实际应用中还是非常有用的,照搬例子的代码,发现老是提示对象不存在,查阅资料后发现是没有加载插件,这里和大家分享下Ext.grid.RowExpander插件的使用,
- AngularJS创建一个上传照片的指令实例代码
- 记入cookie一个ip一天只弹一次的弹窗代码-JavaScript实例教程
- C#代码实现,确保windows程序只有一个实例(instance)
- vuejs手把手教你写一个完整的购物车实例代码
- javascript原生封装一个淡入淡出效果的函数测试实例代码
- php和数据库结合的一个 简单的web实例 代码分析 (php初学者)
- 整理文档,搜刮出一个vue2.0的contextmenu右键弹出菜单的实例代码
- 关于支持向量机(SVM)的一个简单应用实例及matlab代码
- 一个简单的Ext.XTemplate的实例代码
- Python+tkinter使用80行代码实现一个计算器实例