技术开发 频道

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

【IT168 技术文章】

    * 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
0
相关文章