一个现金流量表的代码

来源:互联网 发布:硅藻泥 知乎 编辑:程序博客网 时间:2024/05/04 13:05

* program SOURCE HEADER  : 现金流量表
* Program Name:
* Description:
* Date/Author:
* Table Update:
* Special Logic:
* Include:
*-----------------------------------------------------------------------
MODIFICATION LOG : 程序修改更新记录
*-----------------------------------------------------------------------
* ChangeDateProgrammer   Request     Description
* ========== ============= ============================================
*-----------------------------------------------------------------------
* REPORT NAME : 宣告程序名称及报表格式,
*-----------------------------------------------------------------------
REPORT ZFI003
    NO STANDARD PAGE HEADING
       MESSAGE-ID 00   "所使用的MESSAGE
       LINE-COUNT800    "每页报表行数
       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 LIKEBKPF-BELNR,        "表头-凭证号
   END OF  ITAB_BKPF.

DATA:  BEGIN  OF  ITAB_TT OCCURS 0,
       BELNR LIKEBSEG-BELNR,        "凭证号
       HKONT LIKEBSEG-HKONT,        "表体-总分类帐目
       RSTGR LIKEBSEG-RSTGR,        "REASON CODE
       SHKZG LIKEBSEG-SHKZG,        "debit and credit
       DMBTR LIKEBSEG-DMBTR,        "本位币金额
   END OF  ITAB_TT.

DATA:   D01 LIKEBSEG-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 TITLETEXT-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 DEFAULTSY-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 TITLETEXT-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.
   MESSAGEE398 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 <> 0OR L_EXIST <> 'X'. "SY-SUBRC返回代码值0 表示操作成功
    MESSAGEI398(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 TABLEITAB_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 TABLEITAB_BKPF WITH KEY BELNR = ITAB_TT-BELNR.
    IF SY-SUBRC<> 0.
     DELETE ITAB_TT.
    ENDIF.
  ENDLOOP.
  FREE ITAB_BKPF.
  LOOP AT ITAB_TT.
    CASEITAB_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' = SHEETEXPORTING #1 = 1.
  CALL METHOD OF SHEET 'ACTIVATE'.
  CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1= 1 #2 = 1.

  PERFORM FILL_CELL USING  63   D01.
  PERFORM FILL_CELL USING  73   D02.
  PERFORM FILL_CELL USING  83   D03.
  PERFORM FILL_CELL USING  93   D04.
  PERFORM FILL_CELL USING 103   D05.
  PERFORM FILL_CELL USING 113   D06.
  PERFORM FILL_CELL USING 123   D07.
  PERFORM FILL_CELL USING 133   D08.
  PERFORM FILL_CELL USING 143   D09.
  PERFORM FILL_CELL USING 153   D10.
  PERFORM FILL_CELL USING 173   D11.
  PERFORM FILL_CELL USING 183   D12.
  PERFORM FILL_CELL USING 193   D13.
  PERFORM FILL_CELL USING 203   D14.
  PERFORM FILL_CELL USING 213   D15.
  PERFORM FILL_CELL USING 223   D16.
  PERFORM FILL_CELL USING 233   D17.
  PERFORM FILL_CELL USING 243   D18.
  PERFORM FILL_CELL USING 253   D19.
  PERFORM FILL_CELL USING 263   D20.
  PERFORM FILL_CELL USING 283   D21.
  PERFORM FILL_CELL USING 293   D22.
  PERFORM FILL_CELL USING 303   D23.
  PERFORM FILL_CELL USING 313   D24.
  PERFORM FILL_CELL USING 323   D25.
  PERFORM FILL_CELL USING 333   D26.
  PERFORM FILL_CELL USING 343   D27.
  PERFORM FILL_CELL USING 353   D28.
  PERFORM FILL_CELL USING 363   D29.
  PERFORM FILL_CELL USING 373   D30.
  PERFORM FILL_CELL USING 383   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_CELLUSING   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


原创粉丝点击