SAP中的现金流量表
在SAP中用承诺项目出现金流量表(报表开发源代码)(

在SAP中用承诺项目出现金流量表(报表开发源代码)可能使用到的外部数据 或 SAP数据表数据的格式、字段等: fkrs 财务管理范围主记录表 fops 承诺项目主记录表 fmmp 现金预算管理行项目表 lfa1 供应商主记录表 kna1 客户主记录表 bsis 总帐未清项表 t001 公司代码主记录表 usr21 用户主记录表 adrp 用户地址表 bkpf 财务凭证抬头表 bseg 财务凭证行项目表 glt0 总帐科目期间余额表 直接法通过分析凭证的承诺项目来取数,SAP为该项功能定义了一个逻辑数据库C1F. 本程序 开始部分的逻辑数据库取数部分是SAP的标准程序,其功能是将与现金流量相关的数据装入内部表 G_T_FMMP, 这部分程序禁止修改。
直接法: 1、装入金流量表定义参数(FORM fill_item_direct) 该子程序将的现金流量表项和其对应的承诺项目装入内部表INT_CASHFLOW. 2、装入与现金流量相关的数据 这部分是逻辑数据库装入,属于SAP标准程序,数据关系比较复杂,建议不要做任何改动。
3、计算现金流量 计算的基本思路是对表G_T_FMMP进行循环,查找其中每条记录的承诺项目属于INT_CASHFLOW的 表项后,把其金额累计到相应表项。
REPORT zcmrp001 NO STANDARD PAGE HEADING LINE-SIZE 220. TABLES: fkrs, fpos, fmmp, lfa1, kna1 ,bsis, t001, usr21, adrp, bkpf, bseg, glt0. DATA: BEGIN OF g_t_fmmp OCCURS 300, fikrs LIKE fmmp-fikrs, bukrs LIKE fmmp-bukrs, fipos LIKE fmmp-fipos, wrttp LIKE fmmp-wrttp, gjahr LIKE fmmp-gjahr, perio LIKE fmmp-perio, zhldt LIKE fmmp-zhldt, budat LIKE fmmp-budat, gsber LIKE fmmp-gsber, vo_saknr LIKE fmmp-vo_saknr, lifnr LIKE fmmp-lifnr, kunnr LIKE fmmp-kunnr, fwaer LIKE fmmp-fwaer, fkbtr LIKE fmsu-btr001, zbelnr LIKE cooi-refbn, zbuzei LIKE cooi-rfpos, vo_bukrs LIKE fmmp-vo_bukrs, vo_gjahr LIKE fmmp-vo_gjahr, fitxt LIKE fkrs-fitxt, fname LIKE ffnd-fname, cname LIKE fctr-cname, pname LIKE fpos-pname, wtext LIKE fmmp-wtext, END OF g_t_fmmp. DATA: BEGIN OF g_t_fkrs OCCURS 20, fikrs LIKE fkrs-fikrs, fitxt LIKE fkrs-fitxt, END OF g_t_fkrs. DATA: BEGIN OF g_t_fpos OCCURS 200, fipos LIKE fpos-fipos, pname LIKE fpos-pname, END OF g_t_fpos. DATA: BEGIN OF g_t_lfa1 OCCURS 200, lifnr LIKE lfa1-lifnr, sortl LIKE lfa1-sortl, END OF g_t_lfa1. DATA: BEGIN OF g_t_kna1 OCCURS 200, kunnr LIKE kna1-kunnr, sortl LIKE kna1-sortl, END OF g_t_kna1. RANGES: r_kunnr FOR kna1-kunnr, r_lifnr FOR lfa1-lifnr, r_fipos FOR fmmp-fipos. DATA: BEGIN OF int_cashflow OCCURS 100, desc(66) TYPE c, r_fipos(66) TYPE c, com_fkbtr LIKE fmmp-fkbtr, fi_fkbtr LIKE fmmp-fkbtr, fi_fwaer LIKE fmmp-fwaer, END OF int_cashflow. DATA: BEGIN OF g_t_t001 OCCURS 300, bukrs LIKE t001-bukrs, butxt LIKE t001-butxt, END OF g_t_t001. DATA: pos TYPE i VALUE 0, num_of_bukrs TYPE i VALUE 0. DATA cashflow_detail. DATA : min_budat LIKE fmmp-budat, max_budat LIKE fmmp-budat, z_min_budat LIKE sy-datum, z_max_budat LIKE sy-datum, z_bukrs LIKE fmmp-bukrs, z_profit LIKE bseg-dmbtr, "净利润 z_bad_debit LIKE bseg-dmbtr, "坏帐准备及计提的资产减值准备 z_asset_dep LIKE bseg-dmbtr, "固定资产折旧 z_intang_dep LIKE bseg-dmbtr, "无形资产摊销 z_longpaid_dep LIKE bseg-dmbtr, "长期待摊费用摊销 z_paid_dec LIKE bseg-dmbtr, "待摊费用减少 z_accrul_inc LIKE bseg-dmbtr, "预提费用增加 z_asset_pro LIKE bseg-dmbtr, "固定资产,长期资产处置损失 z_asset_scr LIKE bseg-dmbtr, "固定资产报废损失 z_fi_expen LIKE bseg-dmbtr, "财务费用 z_invest_loss LIKE bseg-dmbtr, "投资损失 z_defer_tax LIKE bseg-dmbtr, "递延税款贷项 z_stock LIKE bseg-dmbtr, "存货减少 z_ar LIKE bseg-dmbtr, "经营性应收减少 z_ap LIKE bseg-dmbtr, "经营性应付增加 z_other LIKE bseg-dmbtr, "其他 z_production LIKE bseg-dmbtr, "经营活动产生的现金净额 z_loss LIKE bseg-dmbtr, "总公司下拨弥补亏损 z_asset_debit LIKE bseg-dmbtr, "以固定资产偿还债务 z_invest_debit LIKE bseg-dmbtr, "以投资偿还债务 z_asset_invest LIKE bseg-dmbtr, "以固定资产投资 z_stock_debit LIKE bseg-dmbtr, "以存货偿还债务 z_asset_rented LIKE bseg-dmbtr, "融资租赁固定资产 z_donation LIKE bseg-dmbtr, "接受捐赠非现金资产 z_debit_short LIKE bseg-dmbtr, "偿还的经营性债务 z_debit_equit LIKE bseg-dmbtr, "债务转为资本 z_bond_due LIKE bseg-dmbtr, "一年内到期的可转换公司债券 z_money_init LIKE bseg-dmbtr, "货币资金期初余额 z_money_end LIKE bseg-dmbtr, "货币资金期末余额 z_cashs_init LIKE bseg-dmbtr, "现金等价物期初余额 z_cashs_end LIKE bseg-dmbtr, "现金等价物期末余额 z_all_money LIKE bseg-dmbtr. "货币资金及现金等价物净变动 DATA: BEGIN OF itb0 OCCURS 0, txt(70) TYPE c, num LIKE bseg-dmbtr, END OF itb0, mtxt(70) TYPE c. **INITIALIZATION. PERFORM fill_item_direct. *START-OF-SELECTION. GET fkrs. g_t_fkrs-fikrs = fkrs-fikrs. g_t_fkrs-fitxt = fkrs-fitxt. APPEND g_t_fkrs. GET fpos. g_t_fpos-fipos = fpos-fipos. g_t_fpos-pname = fpos-pname. COLLECT g_t_fpos. GET fmmp. MOVE-CORRESPONDING fmmp TO g_t_fmmp. CASE fmmp-wrttp. WHEN '50' OR '51'. " purchase order g_t_fmmp-zbelnr = fmmp-ebeln. g_t_fmmp-zbuzei = fmmp-ebelp. WHEN '64'. " payment transfer g_t_fmmp-zbelnr = fmmp-kblnr. g_t_fmmp-zbuzei = fmmp-kblpos. WHEN '65'. " funds commitments g_t_fmmp-zbelnr = fmmp-kblnr. g_t_fmmp-zbuzei = fmmp-kblpos. WHEN OTHERS. " Fi documents g_t_fmmp-zbelnr = fmmp-vo_belnr. g_t_fmmp-zbuzei = fmmp-vo_buzei. ENDCASE. APPEND g_t_fmmp. IF NOT fmmp-kunnr IS INITIAL. r_kunnr-sign = 'I'. r_kunnr-option = 'EQ'. r_kunnr-low = fmmp-kunnr. COLLECT r_kunnr. ENDIF. IF NOT fmmp-lifnr IS INITIAL. r_lifnr-sign = 'I'. r_lifnr-option = 'EQ'. r_lifnr-low = fmmp-lifnr. COLLECT r_lifnr. ENDIF. END-OF-SELECTION. SORT g_t_fmmp BY fikrs bukrs fipos wrttp gjahr perio zhldt zbelnr zbuzei bukrs vo_saknr. RANGES: lr_lifnr FOR lfa1-lifnr, lr_kunnr FOR kna1-kunnr. DATA: l_cnt_from LIKE sy-tabix VALUE 1, l_cnt_to LIKE sy-tabix VALUE 50, l_cnt_lines LIKE sy-tabix. * "/ Lesen Kreditoren-Texte aus Stammdaten-Tabelle IF NOT r_lifnr IS INITIAL. LOOP AT r_lifnr WHERE low = '*'. DELETE r_lifnr. ENDLOOP. DESCRIBE TABLE r_lifnr LINES l_cnt_lines. "<- insert IF l_cnt_lines <= 50. "<- insert * "/ Lieferanten-Kurztexte auf einmal einlesen "<- insert SELECT lifnr sortl FROM lfa1 INTO CORRESPONDING FIELDS OF TABLE g_t_lfa1 WHERE lifnr IN r_lifnr. ELSE. "<- insert * "/ Lieferanten-Kurztexte in Bloecken einlesen "<- insert DO. "<- insert * "/ Bloecke zu je 50 Leferanten bilden "<- insert REFRESH lr_lifnr. "<- insert LOOP AT r_lifnr FROM l_cnt_from TO l_cnt_to. "<- insert lr_lifnr = r_lifnr. "<- insert APPEND lr_lifnr. "<- insert ENDLOOP. "<- insert IF sy-subrc NE 0. "<- insert EXIT. "<- insert ENDIF. "<- insert l_cnt_from = l_cnt_to + 1. "<- insert l_cnt_to = l_cnt_from + 50. "<- insert * "/ Lieferanten-Kurztexte lesen "<- insert SELECT lifnr sortl FROM lfa1 "<- insert APPENDING CORRESPONDING FIELDS "<- insert OF TABLE g_t_lfa1 "<- insert WHERE lifnr IN lr_lifnr. "<- insert ENDDO. "<- insert ENDIF. "<- insert ENDIF. * "/ Lesen Debitoren-Texte aus Stammdaten-Tabelle IF NOT r_kunnr IS INITIAL. LOOP AT r_kunnr WHERE low = '*'. DELETE r_kunnr. ENDLOOP. DESCRIBE TABLE r_kunnr LINES l_cnt_lines. "<- insert IF l_cnt_lines <= 50. "<- insert * "/ Kunden-Kurztexte auf einmal einlesen "<- insert SELECT kunnr sortl FROM kna1 INTO CORRESPONDING FIELDS OF TABLE g_t_kna1 WHERE kunnr IN r_kunnr. ELSE. "<- insert * "/ Kunden-Kurztexte in Bloecken einlesen "<- insert DO. "<- insert * "/ Bloecke zu je 50 Kunden bilden "<- insert REFRESH lr_kunnr. "<- insert LOOP AT r_kunnr FROM l_cnt_from TO l_cnt_to. "<- insert lr_kunnr = r_kunnr. "<- insert APPEND lr_kunnr. "<- insert ENDLOOP. "<- insert IF sy-subrc NE 0. "<- insert EXIT. "<- insert ENDIF. "<- insert l_cnt_from = l_cnt_to + 1. "<- insert l_cnt_to = l_cnt_from + 50. "<- insert * "/ Kunden-Kurztexte lesen "<- insert SELECT kunnr sortl FROM kna1 "<- insert APPENDING CORRESPONDING FIELDS "<- insert OF TABLE g_t_kna1 "<- insert WHERE kunnr IN lr_kunnr. "<- insert ENDDO. "<- insert ENDIF. "<- insert ENDIF. SELECT bukrs butxt FROM t001 INTO CORRESPONDING FIELDS OF TABLE g_t_t001. DATA: l_sav_wrttp_text(30), l_sav_fwaer LIKE fmmp-fwaer, l_sav_butxt LIKE t001-butxt, l_sav_hide_row_type(4). num_of_bukrs = 0. max_budat = 0. min_budat = '99991231' . LOOP AT g_t_fmmp. IF min_budat > g_t_fmmp-budat . min_budat = g_t_fmmp-budat . ENDIF. IF max_budat < g_t_fmmp-budat . max_budat = g_t_fmmp-budat . ENDIF. l_sav_fwaer = g_t_fmmp-fwaer. AT NEW fikrs. LOOP AT int_cashflow. CLEAR int_cashflow-fi_fkbtr. MODIFY TABLE int_cashflow. CLEAR int_cashflow. ENDLOOP. ENDAT. AT NEW bukrs. PERFORM read_bukrs_text USING g_t_fmmp-bukrs CHANGING g_t_t001-butxt. l_sav_butxt = g_t_t001-butxt. LOOP AT int_cashflow. CLEAR int_cashflow-com_fkbtr. MODIFY TABLE int_cashflow. CLEAR int_cashflow. ENDLOOP. ENDAT. LOOP AT int_cashflow. PERFORM input_range USING int_cashflow-r_fipos. LOOP AT r_fipos. IF r_fipos-option = 'EQ'. IF r_fipos-low = g_t_fmmp-fipos. int_cashflow-fi_fkbtr = int_cashflow-fi_fkbtr + g_t_fmmp-fkbtr. int_cashflow-com_fkbtr = int_cashflow-com_fkbtr + g_t_fmmp-fkbtr. ENDIF. ENDIF. IF r_fipos-option = 'BT'. IF g_t_fmmp-fipos >= r_fipos-low AND g_t_fmmp-fipos <= r_fipos-high. int_cashflow-fi_fkbtr = int_cashflow-fi_fkbtr + g_t_fmmp-fkbtr. int_cashflow-com_fkbtr = int_cashflow-com_fkbtr + g_t_fmmp-fkbtr. ENDIF. ENDIF. ENDLOOP. MODIFY TABLE int_cashflow. CLEAR int_cashflow. CLEAR r_fipos. REFRESH r_fipos. ENDLOOP . AT END OF bukrs. PERFORM cal_indirect USING g_t_fmmp-bukrs. PERFORM output_info USING 'COM'. num_of_bukrs = num_of_bukrs + 1. ENDAT. AT END OF fikrs. IF num_of_bukrs NE 1. CLEAR l_sav_butxt. PERFORM output_info USING 'FI'. ENDIF. WRITE : / text-103. ENDAT. ENDLOOP.TOP-OF-PAGE. IF NOT ( s_budat-low IS INITIAL ). min_budat = s_budat-low. ENDIF. IF NOT ( s_budat-high IS INITIAL ). max_budat = s_budat-high. ENDIF. SKIP 2. WRITE: /100 '现 金 流 量 表'. WRITE: /. WRITE: /210 '会年企03表'. * IF min_budat(6) = max_budat(6). * WRITE: /104 min_budat(4), '年', min_budat+4(2), '月', * 202 '报表编号: 会商03表'. * ELSE. * WRITE: /097 '日期:', * 103 min_budat, 113 '-' , 115 max_budat, * 202 '报表编号: 会商03表'. * ENDIF. * WRITE: /012 '编制单位: ', l_sav_butxt, 100 max_budat(4), '年', max_budat+4(2), '月', max_budat+6(2), '日', 212 '单位: 元'. WRITE: /011 sy-uline. WRITE : /011 sy-vline, 040 ' 项 目', 085 sy-vline, 087 '行次', 093 sy-vline, 095 ' 金 额 ', 116 sy-vline, 148 '补充资料', 190 sy-vline, 192 '行次', 198 sy-vline, ' 金 额', 220 sy-vline. WRITE: /011 sy-uline. *********************************************************************** * AT LINE-SELECTION. CHECK l_sav_hide_row_type = 'EPOS'. CALL FUNCTION 'FM_DOCUMENT_DISPLAY' EXPORTING i_wrttp = g_t_fmmp-wrttp i_belnr = g_t_fmmp-zbelnr i_blpos = g_t_fmmp-zbuzei i_bukrs = g_t_fmmp-vo_bukrs i_gjahr = g_t_fmmp-vo_gjahr. *********************************************************************** * AT USER-COMMAND. WHEN 'SELE'. SET PF-STATUS 'SELE'. CALL FUNCTION 'FM_SELECTION_CRITERIA_PRINT' EXPORTING i_report_name = 'RFFMIEP5' EXCEPTIONS OTHERS = 1. ENDCASE. *&--------------------------------------------------------------------- * *& Form READ_FIKRS_TEXT *&--------------------------------------------------------------------- * FORM read_fikrs_text USING u_fikrs CHANGING c_fitxt. g_t_fkrs = space. g_t_fkrs-fikrs = u_fikrs. READ TABLE g_t_fkrs. IF sy-subrc = 0. c_fitxt = g_t_fkrs-fitxt. ENDIF. ENDFORM. " READ_FIKRS_TEXT *&--------------------------------------------------------------------- * *& Form READ_FIPOS_TEXT *&--------------------------------------------------------------------- * FORM read_fipos_text USING u_fipos CHANGING c_pname. g_t_fpos = space. g_t_fpos-fipos = u_fipos. READ TABLE g_t_fpos. IF sy-subrc = 0. c_pname = g_t_fpos-pname. ENDIF. ENDFORM. " READ_FIPOS_TEXT *&--------------------------------------------------------------------- * *& Form READ_BUKRS_TEXT *&--------------------------------------------------------------------- * FORM read_bukrs_text USING u_bukrs CHANGING c_butxt. g_t_t001 = space. g_t_t001-bukrs = u_bukrs. READ TABLE g_t_t001. c_butxt = g_t_t001-butxt. ENDIF. ENDFORM. " READ_FIPOS_TEXT *&--------------------------------------------------------------------- * *& Form GET_KUNNR_LIFNR_TEXT *&--------------------------------------------------------------------- * FORM get_kunnr_lifnr_text USING value(u_kunnr) value(u_lifnr) CHANGING c_text. CLEAR c_text. IF NOT u_kunnr IS INITIAL. IF u_kunnr = '*'. c_text = '*'. ELSE. * "/ Lesen Debitor-Text aus interner Tabelle g_t_kna1 = space. g_t_kna1-kunnr = u_kunnr. READ TABLE g_t_kna1. IF sy-subrc = 0. c_text = g_t_kna1-sortl. ENDIF. ENDIF. ENDIF. IF NOT u_lifnr IS INITIAL. IF u_lifnr = '*'. c_text = '*'. ELSE. * "/ Lesen Kreditor-Text aus interner Tabelle g_t_lfa1 = space. g_t_lfa1-lifnr = u_lifnr. READ TABLE g_t_lfa1. IF sy-subrc = 0. c_text = g_t_lfa1-sortl. ENDIF. ENDIF. ENDIF. ENDFORM. " GET_KUNNR_LIFNR_TEXT *********************************************************** FORM input_range USING value(rfipos). DATA: off TYPE i, offset TYPE i, doing TYPE i. DATA: item(20), str(10). off = 0. offset = 0. doing = 1. WHILE doing <> 0. SHIFT rfipos BY offset PLACES. SEARCH rfipos FOR ','. IF sy-subrc = 0. offset = sy-fdpos. MOVE rfipos(offset) TO item. offset = offset + 1. ELSE. MOVE rfipos TO item. doing = 0. ENDIF. SEARCH item FOR '-'. IF sy-subrc = 0. off = sy-fdpos. MOVE item(off) TO str. off = off + 1. r_fipos-sign = 'I'. r_fipos-option = 'BT'. r_fipos-low = str. SHIFT item BY off PLACES. MOVE item TO str. r_fipos-high = str. ELSE. MOVE item TO str. r_fipos-sign = 'I'. r_fipos-option = 'EQ'. r_fipos-low = str. ENDIF. APPEND r_fipos. ENDWHILE. ENDFORM. ******* FORM output_info USING fi_value. DATA zcashflow LIKE fmmp-fkbtr. DATA: i LIKE sy-tabix, j LIKE sy-tabix, k LIKE sy-tabix, l LIKE sy-tabix. i = 0. j = 0. k = 32. LOOP AT int_cashflow FROM 1 TO 32. IF fi_value = 'COM'. zcashflow = int_cashflow-com_fkbtr. ELSEIF fi_value = 'FI'. ENDIF. i = i + 1. j = j + 1. k = k + 1. WRITE : /011 sy-vline, 014 int_cashflow-desc, 085 sy-vline, 088(2) i,093 sy-vline. IF zcashflow <> 0. WRITE: 099 zcashflow CURRENCY g_t_fmmp-fwaer. ENDIF. IF i < 3. l = i + 32. READ TABLE int_cashflow INDEX l. IF fi_value = 'COM'. zcashflow = int_cashflow-com_fkbtr. ELSEIF fi_value = 'FI'. zcashflow = int_cashflow-fi_fkbtr. ENDIF. WRITE: 116 sy-vline, 118(60) int_cashflow-desc, 190 sy-vline, 193(2) k, 198 sy-vline. IF zcashflow <> 0. WRITE: 204 zcashflow CURRENCY g_t_fmmp-fwaer. ENDIF. ELSE. l = i - 2. READ TABLE itb0 INDEX l. IF sy-subrc <> 0. CLEAR itb0. ENDIF. WRITE: 116 sy-vline, 118(60) itb0-txt, 190 sy-vline, 193(2) k, 198 sy-vline. IF itb0-num <> 0. WRITE: 204 itb0-num CURRENCY g_t_fmmp-fwaer. ENDIF. ENDIF. WRITE: 220 sy-vline. WRITE: /011 sy-uline. IF j >= 25. j = 0. PERFORM out_footer. NEW-PAGE. ENDIF. ENDLOOP. PERFORM out_footer. ENDFORM. *---------------------------------------------------------------------* *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM out_footer. DATA: usrname(80) TYPE c. SELECT SINGLE * FROM usr21 WHERE bname = sy-uname. SELECT SINGLE * FROM adrp WHERE persnumber = usr21-persnumber AND date_from <= sy-datum AND date_to >= sy-datum. CONCATENATE adrp-name_last adrp-name_first INTO usrname. CONDENSE usrname NO-GAPS. WRITE: /012 '制表人员:', (12) usrname, 110 '打印日期:', sy-datum, 202 '打印时间:', sy-uzeit. ENDFORM. *********************************************************************** ******************* 计算科目段在指定日期的起始余额 ******************** *********************************************************************** ***** ***** ***** 参数:mdate1 开始日期(含此天) ***** ***** mdate2 结束日期(不含此天) ***** ***** mstrin 科目编号的匹配模式字符串 ***** ***** 结果:znum ***** ***** 算法:某日余额 = 年初余额 + 一月余额 + ...+ ***** ***** 上月余额 + 本月到mdate2余额 ***** ***** ***** *********************************************************************** FORM cal_dates_amount USING mdate1 mdate2 mstring CHANGING znum. DATA: BEGIN OF iglt0 OCCURS 0. INCLUDE STRUCTURE glt0. DATA: END OF iglt0. DATA: BEGIN OF itmp OCCURS 0, num LIKE bseg-dmbtr, END OF itmp. DATA: i LIKE sy-tabix. SELECT * FROM glt0 INTO TABLE iglt0 WHERE bukrs = z_bukrs AND ryear = mdate1(4) AND racct LIKE mstring. LOOP AT iglt0. REFRESH itmp. itmp-num = iglt0-hslvt. APPEND itmp. itmp-num = iglt0-hsl01. APPEND itmp. itmp-num = iglt0-hsl02. APPEND itmp. itmp-num = iglt0-hsl03. APPEND itmp. itmp-num = iglt0-hsl05. APPEND itmp. itmp-num = iglt0-hsl06. APPEND itmp. itmp-num = iglt0-hsl07. APPEND itmp. itmp-num = iglt0-hsl08. APPEND itmp. itmp-num = iglt0-hsl09. APPEND itmp. itmp-num = iglt0-hsl10. APPEND itmp. itmp-num = iglt0-hsl11. APPEND itmp. LOOP AT itmp FROM 1 TO mdate1+4(2). znum = znum + itmp-num. ENDLOOP. ENDLOOP. SELECT * FROM bkpf WHERE bukrs = z_bukrs AND budat >= mdate1 AND budat < mdate2. SELECT * FROM bsis WHERE gjahr = bkpf-gjahr AND belnr = bkpf-belnr AND hkont LIKE mstring. IF bsis-shkzg = 'S'. znum = znum + bsis-dmbtr. ELSE. znum = znum - bsis-dmbtr. ENDIF. ENDSELECT. ENDSELECT. ENDFORM. DEFINE cal_data. types: begin of datatype, dnum like bseg-dmbtr, "借方金额 cnum like bseg-dmbtr, "贷方金额 end of datatype. data: masset type datatype, "固定资产数据 minvest type datatype, "投资数据 mlib type datatype, "短期负债数据 mstock type datatype, "库存数据 mllib type datatype, "长期负债数据 mequit type datatype. "权益数据 loop at tab2. case tab2-hkont(4). when '1501' or '1701'. "固定资产和无形资产 if tab2-shkzg = 'S'. add tab2-dmbtr to masset-dnum. else. add tab2-dmbtr to masset-cnum. endif. when '1101' or '1401' or '1402'. "短期投资与长期投资 if tab2-shkzg = 'S'. add tab2-dmbtr to minvest-dnum. add tab2-dmbtr to minvest-cnum. endif. when '1221' or '1231' or '1243'. "库存科目 if tab2-shkzg = 'S'. add tab2-dmbtr to mstock-dnum. else. add tab2-dmbtr to mstock-cnum. endif. when '2111' or '2121' or '2181'. "经营性负债 if tab2-shkzg = 'S'. add tab2-dmbtr to mlib-dnum. else. add tab2-dmbtr to mlib-cnum. endif. when '2321'. "长期负债 if tab2-shkzg = 'S'. add tab2-dmbtr to mllib-dnum. else. add tab2-dmbtr to mllib-cnum. endif. when '3105' or '3111'. "所有者权益 if tab2-shkzg = 'S'. add tab2-dmbtr to mequit-dnum. else. add tab2-dmbtr to mequit-cnum. endif. endcase. endloop. if masset-dnum > 0. "固定资产增加 if mllib-cnum > 0. "融资租赁固定资产 if masset-dnum < mllib-cnum. z_asset_rented = z_asset_rented + masset-dnum. mllib-cnum = mllib-cnum - masset-dnum. masset-dnum = 0. else. z_asset_rented = z_asset_rented + mllib-cnum. masset-dnum = masset-dnum - mllib-cnum. mllib-cnum = 0. endif. endif. endif. if masset-cnum > 0. "固定资产减少 if mlib-dnum > 0. "固定资产偿还债务(经营性) if masset-cnum > mlib-dnum. z_asset_debit = z_asset_debit + mlib-dnum. z_debit_short = z_debit_short + mlib-dnum. masset-cnum = masset-cnum - mlib-dnum. mlib-dnum = 0. z_asset_debit = z_asset_debit + masset-cnum. z_debit_short = z_debit_short + masset-cnum. mlib-dnum = mlib-dnum - masset-cnum. masset-cnum = 0. endif. endif. if mllib-dnum > 0. "固定资产偿还债务(长期) if masset-cnum > mllib-dnum. z_asset_debit = z_asset_debit + mllib-dnum. masset-cnum = masset-cnum - mllib-dnum. mllib-dnum = 0. else. z_asset_debit = z_asset_debit + masset-cnum. mllib-dnum = mllib-dnum - masset-cnum. masset-cnum = 0. endif. endif. if minvest-dnum > 0. "以固定资产投资 if masset-cnum > minvest-dnum. z_asset_invest = z_asset_invest + minvest-dnum. masset-cnum = masset-cnum - minvest-dnum. minvest-dnum = 0. else. z_asset_invest = z_asset_invest + masset-cnum. minvest-dnum = minvest-dnum - masset-cnum. masset-cnum = 0. endif. endif. endif. if minvest-dnum > 0. "投资增加 if masset-cnum > 0. "以固定资产投资 if masset-cnum > minvest-dnum. z_asset_invest = z_asset_invest + minvest-dnum. masset-cnum = masset-cnum - minvest-dnum. minvest = 0. else. z_asset_invest = z_asset_invest + masset-cnum. minvest-dnum = minvest-dnum - masset-cnum. masset-cnum = 0. endif. endif. endif. if minvest-cnum > 0. "投资减少 if mlib-dnum > 0. "以投资偿还债务(经营性) if mlib-dnum > minvest-cnum. z_invest_debit = z_invest_debit + minvest-cnum. z_debit_short = z_debit_short + minvest-cnum. minvest-cnum = 0. else. z_invest_debit = z_invest_debit + mlib-dnum. z_debit_short = z_debit_short + mlib-dnum. minvest-cnum = minvest-cnum - mlib-dnum. mlib-dnum = 0. endif. endif. if mllib-dnum > 0. "以投资偿还债务(长期) if mllib-dnum > minvest-cnum. z_invest_debit = z_invest_debit + minvest-cnum. mllib-dnum = mllib-dnum - minvest-cnum. minvest-cnum = 0. else. z_invest_debit = z_invest_debit + mllib-dnum. minvest-cnum = minvest-cnum - mllib-dnum. mllib-dnum = 0. endif. endif. endif. if mstock-cnum > 0. "存货减少 if mlib-dnum > 0. "以存货偿还债务(经营性) if mlib-dnum > mstock-cnum. z_stock_debit = z_stock_debit + mstock-cnum. z_debit_short = z_debit_short + mstock-cnum. mlib-dnum = mlib-dnum - mstock-cnum. mstock-cnum = 0. else. z_stock_debit = z_stock_debit + mlib-dnum. z_debit_short = z_debit_short + mlib-dnum. mstock-cnum = mstock-cnum - mlib-dnum. mlib-dnum = 0. endif. endif. if mllib-dnum > 0. "以存货偿还债务(长期) if mllib-dnum > mstock-cnum. z_stock_debit = z_stock_debit + mstock-cnum. mllib-dnum = mllib-dnum - mstock-cnum. mstock-cnum = 0. else. z_stock_debit = z_stock_debit + mllib-dnum. mstock-cnum = mstock-cnum - mllib-dnum. mllib-dnum = 0. endif. endif. endif. if mequit-cnum > 0. "资本增加 if mlib-dnum > mequit-cnum. z_debit_equit = z_debit_equit + mequit-cnum. z_debit_short = z_debit_short + mequit-cnum. mlib-dnum = mlib-dnum - mequit-cnum. mequit-cnum = 0. else. z_debit_equit = z_debit_equit + mlib-dnum. z_debit_short = z_debit_short + mlib-dnum. mequit-cnum = mequit-cnum - mlib-dnum. mlib-dnum = 0. endif. endif. if mllib-dnum > 0. if mllib-dnum > mequit-cnum. z_debit_equit = z_debit_equit + mequit-cnum. mllib-dnum = mllib-dnum - mequit-cnum. mequit-cnum = 0. else. z_debit_equit = z_debit_equit + mllib-dnum. mequit-cnum = mequit-cnum - mllib-dnum. mlib-dnum = 0. endif. endif. endif. END-OF-DEFINITION.*---------------------------------------------------------------------* * FORM cal_indirect * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> pbukrs * *---------------------------------------------------------------------* FORM cal_indirect USING pbukrs LIKE fmmp-bukrs. DATA: BEGIN OF tab1 OCCURS 0, gjahr LIKE bkpf-gjahr, belnr LIKE bkpf-belnr, END OF tab1, BEGIN OF tab2 OCCURS 0, gjahr LIKE bseg-gjahr, belnr LIKE bseg-belnr, hkont LIKE bseg-hkont, shkzg LIKE bseg-shkzg, dmbtr LIKE bseg-dmbtr, END OF tab2, BEGIN OF tab3 OCCURS 0, gjahr LIKE bseg-gjahr, belnr LIKE bseg-belnr, hkont LIKE bseg-hkont, dmbtr LIKE bseg-dmbtr, END OF tab3. IF NOT ( s_budat-low IS INITIAL ). z_min_budat = s_budat-low. ELSE. z_min_budat = min_budat. ENDIF. IF NOT ( s_budat-high IS INITIAL ). z_max_budat = s_budat-high. ELSE. z_max_budat = max_budat. ENDIF. z_bukrs = pbukrs. SELECT gjahr belnr FROM bkpf INTO CORRESPONDING FIELDS OF TABLE tab1 WHERE bukrs = z_bukrs AND budat >= z_min_budat AND budat <= z_max_budat. LOOP AT tab1. SELECT hkont shkzg dmbtr FROM bseg INTO CORRESPONDING FIELDS OF tab2 WHERE gjahr = tab1-gjahr AND belnr = tab1-belnr. tab2-gjahr = tab1-gjahr. tab2-belnr = tab1-belnr. APPEND tab2. ENDSELECT. ENDLOOP. REFRESH tab1. LOOP AT tab2. "挑出与补充资料相关的凭证号 IF tab2-hkont(4) = '1501' OR "固定资产原值科目 tab2-hkont(4) = '1701' OR "固定资产清理 tab2-hkont(4) = '1101' OR "短期投资 tab2-hkont(4) = '1401' OR "长期股权投资 tab2-hkont(4) = '1402' OR "长期债权投资 tab2-hkont(4) = '1221' OR "包装物 tab2-hkont(4) = '1231' OR "低值易耗品 tab2-hkont(4) = '1243' OR "库存商品 tab2-hkont(4) = '3105' OR "上级拨入 tab2-hkont(4) = '3111'. "资本公积 tab1-gjahr = tab2-gjahr. tab1-belnr = tab2-belnr. APPEND tab1. ENDIF. IF tab2-shkzg = 'H'. tab2-dmbtr = 0 - tab2-dmbtr. ENDIF. IF tab2-hkont(1) = '5'. "净利润 ADD tab2-dmbtr TO z_profit. ENDIF. IF tab2-hkont = '5501037000'. "管理费用-坏帐损失 ADD tab2-dmbtr TO z_bad_debit. ENDIF. IF tab2-hkont = '1102000000' OR "短期投资减值准备 tab2-hkont = '1281000000' OR "存 货跌价准备 tab2-hkont = '1421000000' OR "长期投资减值准备 tab2-hkont = '1505000000' OR "固定资产减值准备 tab2-hkont = '1605000000' OR "在建工程减值准备 tab2-hkont = '1281000000'. "无形资产减值准备 z_bad_debit = z_bad_debit - tab2-dmbtr. ENDIF. IF tab2-hkont(7) = '5501020'. "固定资产折旧 ADD tab2-dmbtr TO z_asset_dep. ENDIF. IF tab2-hkont(7) = '5501043'. "无形资产摊销 ADD tab2-dmbtr TO z_intang_dep. ENDIF. IF tab2-hkont(4) = '1301'. "待摊费用 ADD tab2-dmbtr TO z_paid_dec. ENDIF. IF tab2-hkont(4) = '2191'. "预提费用 ADD tab2-dmbtr TO z_accrul_inc. ENDIF. IF tab2-hkont = '5301001000' OR "营业外收入-处置长期资产净收入 tab2-hkont = '5301002000' OR "营业外收入-固定资产盘盈 tab2-hkont = '5601001000' OR "营业外支出-处置长期资产净损失 tab2-hkont = '5601002000'. "营业外支出-固定资产盘亏 ADD tab2-dmbtr TO z_asset_pro. ENDIF. IF tab2-hkont(4) = '5503'. "财务费用 ADD tab2-dmbtr TO z_fi_expen. ENDIF. IF tab2-hkont(4) = '1221' OR "包装物 tab2-hkont(4) = '1231' OR "低值易耗品 tab2-hkont(4) = '1243'. "库存商品 ADD tab2-dmbtr TO z_stock. ENDIF. tab2-hkont(4) = '1131' OR "应收帐款 tab2-hkont(4) = '1133' OR "其他应收帐款 tab2-hkont(4) = '1141'. "坏帐准备 ADD tab2-dmbtr TO z_ar. ENDIF. IF tab2-hkont(4) = '2111' OR "应付票据 tab2-hkont(4) = '2121' OR "应付帐款 tab2-hkont(4) = '2151' OR "应付工资 tab2-hkont(4) = '2153' OR "应付福利费 tab2-hkont(4) = '2171' OR "应交税金 tab2-hkont(4) = '2176' OR "其他应缴款 tab2-hkont(4) = '2181'. "其他应付款 ADD tab2-dmbtr TO z_ap. ENDIF. ENDLOOP. SORT tab1 BY gjahr belnr. DELETE ADJACENT DUPLICATES FROM tab1 COMPARING gjahr belnr. LOOP AT tab2. READ TABLE tab1 WITH KEY gjahr = tab2-gjahr belnr = tab2-belnr BINARY SEARCH. IF sy-subrc = 0. tab3 = tab2. APPEND tab3. ENDIF. ENDLOOP. REFRESH tab2. SORT tab3 BY gjahr belnr. LOOP AT tab3. tab2 = tab3. APPEND tab2. AT END OF belnr. cal_data. "计算每张凭证中的补充资料 REFRESH tab2. ENDAT. ENDLOOP. z_stock = z_stock + z_stock_debit. z_ap = z_ap - z_debit_short. LOOP AT int_cashflow. IF int_cashflow-desc CP '*经营活动产生的现金流量净额*'. z_other = z_profit - z_bad_debit - z_asset_dep - z_intang_dep - z_longpaid_dep + z_paid_dec + z_accrul_inc - z_asset_pro - z_asset_scr - z_fi_expen - z_invest_loss + z_defer_tax + z_stock + z_ar + z_ap. z_production = int_cashflow-com_fkbtr. z_other = int_cashflow-com_fkbtr + z_other. 。
SAP中的现金流量表

在简单会计软件环境下,编制现金流量表是一件非常麻烦的事。
然而,借助ERP,利用其集成特性,就可以通过上期谈到的资金管理模块,自动生成实时的现金流量表。
ERP中的现金流量表王纹孙健现金流量表的编制我国自1998年1月1日起施行《企业会计准则-现金流量表》以来,企业界和会计界对于该报表的编制方法进行了广泛的探讨。
和国际上其他国家的现金流量表相比,我国的现金流量表同时要求使用直接法和间接法编制。
而且一般国家作为选择补充资料的直接法更是作为正式表项。
这当然有利于报表阅读者的理解。
但在会计实务中大大增加了该表的编制难度,从而使该报表的准确程度和作用受到影响。
这种难度也导致后来表中增值税项目的简化。
在一般手工记账或简单会计软件的环境下,企业一般使用《准则指南》中的工作底稿法或T 形账户法编制,其实质是使用间接法计算表中的直接法表项。
而一些会计软件的处理方法是在输入会计分录时,增加现金和现金等价物科目的输入内容——即指明每笔现金收支是属于哪一个表项。
这一方面增加了会计工作量,另一方面由于在每笔收付款时必须人工查找该笔往来最初产生的原因,使得输入的准确性大受影响。
特别当一笔收付款对应多个表项时,如给供应商付款时包括了货款和增值税两个表项,这种方法要求将分录中现金行手工计算并拆分成几行,造成不必要的麻烦和错误。
在ERP集成环境下,我们通过资金管理模块可以自动生成实时的现金流量表。
首先让我们回顾一下上期《ERP中的资金管理》一文谈到的,在资金管理中,会计科目被置于三个层次之上。
现金层包含货币资金和短期投资等科目,它相当于我国《企业会计准则-现金流量表》文中对于现金和现金等价物的定义。
收入支出层包含的科目代表了企业现金流量的起源。
譬如,所有的权益类和损益类科目以及存货、固定资产等科目都应包含在这一层。
这一层对应于《现金流量表》中现金流量的分类或者说直接反映了《现金流量表》表项一至四。
应收应付层虽然称为应收应付层,但它不仅包含应收账款和应付账款,而且还包含预收和预付账款、其他应收和应付款、应收和应付票据等科目。
SAP财务知识-现金流量表的编制

财务知识-现金流量表的编制一、现金流量表主表项目(一)经营活动产生的现金流量1、销售商品、提供劳务收到的现金 =主营业务收入+其他业务收入 +应交税金(应交增值税- 销项税额) +(应收帐款期初数-应收帐款期末数) +(应收票据期初数应收票据期末数) +(预收帐款期末数-预收帐款期初数) -当期计提的坏帐准备 -支付的应收票据贴现利息 -库存商品改变用途应支付的销项额±特殊调整事项特殊调整事项的处理(不含三个帐户内部转帐业务),如果借:应收帐款、应收票据、预收帐款等,贷方不是“收入及销项税额”则加上,如果:贷应收帐款、应收票据、预收帐款等,借方不是“现金类”科目,则减去。
※①与收回坏帐无关②客户用商品抵债的进项税不在此反映。
2、收到的税费返还=返还的(增值税+消费费+营业税+关税+所得税+教育费附加)等3、收到的其他与经营活动有关的现金 =除上述经营活动以外的其他经营活动有关的现金4、购买商品、接受劳务支付的现金 =[主营业务成本(或其他支出支出) +存货期末价值-存货期初价值)] +应交税金(应交增值税-进项税额) +(应付帐款期初数-应付帐款期末数) +(应付票据期初数-应付票据期末数) +(预付帐款期末数-预付帐款期初数) +库存商品改变用途价值(如工程领用) +库存商品盘亏损失 -当期列入生产成本、制造费用的工资及福利费 -当期列入生产成本、制造费用的折旧费和摊销的大修理费 -库存商品增加额中包含的分配进入的制造费用、生产工人工资±特殊调整事项特殊调整事项的处理,如果借:应付帐款、应付票据、预付帐款等(存贷类),贷方不是“现金类”科目,则减去,如果贷:应付帐款数、应付票据、预付帐款等,借方不是“销售成本或进项税”科目,则加上。
5、支付给职工及为职工支付的现金 =生产成本、制造费用、管理费用的工资,福利费 +(应付工资期初数-期末数)+(应付福利费期初数-期末数)附:当存在“在建工程”人员的工资、福利费时,注意期初、期末及计提数中是否包含“在建工程”的情况,按下式计算考虑计算关系。
09SAP现金流量表ABAP

zdmbtr08 like bseg-dmbtr,
zdmbtr09 like bseg-dmbtr,
zdmbtr10 like bseg-dmbtr,
zdmbtr11 like bseg-dmbtr,
LFA1, "供应商主数据 (一般地区)
* SKAT, "总帐科目主记录(科目表:说明)
SKB1, "总帐科目主记录 (公司代码)SAKNR ??
SKA1, "总帐科目表
FIS_PERIOD type MONAT, "会计期间
DEBITS_PER type BAPISOLL, "期间借方发生额
CREDIT_PER type BAPIHABEN, "期间贷方发生额
PER_SALES type BAPIUMSATZ, "月销售额
** COMPANYCODE SH10
** GLACCT 10010100
** FISCALYEAR 2008
** CURRENCYTYPE 10
zdmbtr17 like bseg-dmbtr,
zdmbtr18 like bseg-dmbtr,
zdmbtr19 like bseg-dmbtr,
zdmbtr20 like bseg-dmbtr,
zdmbtr21 like bseg-dmbtr,
MESSAGE-ID ZDXMESS.
* TABLE 宣告程序会使用的TABLE
TABLES: BSEG, "会计核算凭证段
BKPF, "会计核算凭证标题
SAP基本概念

1.1SAP基本概念1)SAP完整项目的三个环境:开发环境,测试环境,生产环境2)区分数据是不是跨client:看table表结构(cell)是否含有MANDT(集团编号)字段,如包含该字段,则不跨client3)FI有哪几个模块:GL总账AR应收AP应付AA固定资产管理SL特殊类目4)SAP的基本操作:/i注销/nsm04注销用户列表/i关闭当前/oxxxx保留并新开/nex关闭所有/nxxxx关闭,新开5)分录:BS表(Balance sheet资产负债表)PL表(profit and loss sheet)损益表CF表(cash flow)现金流量表6)记账原则:有借必有贷,借贷必相等7)CO有那些模块:CCA cost elements accounting 成本要素会计CCC cost center accounting 成本呢中心会计IO internal order 内部订单ABC activity-based costing 基于作业的成本核算PCC products cost control 产品成本控制PA profitability analysis 获利能力分析PCA profit center accounting 利润中心会计8)SAP系统实施过程:要件定义; Definiction of elements基本定义:The basic design详细涉及:The specific design实施:Implementation单体测试:Single testing结合测试; Intergration testing数据转移; Data migration上线支持; Go-live supporting9)新会计总则:账户开头表示的类目1xxxxx 资金2xxxxx负债3xxxxx共同类4xxxxx所有者权益5xxxx成本类6xxxx损益类10)会计六要素:资产负债所有者权益费用收入利润11)科目表分类:资产负债类,损益类,统驭类。
承诺项目和原因码出具现金流量表

承诺项目是SAP 基金管理模块(FI-FM)中非常重要的一个概念与主数据。
从我们实际业务上来讲,SAP系统的承诺项目可以理解我们在预算管理业务中的预算指标。通过将承诺项目与会计科目之间建立对应关系,会计人员在做与资金相关的会计凭证时,相关交易金额即可通过会计科目而自动归集到承诺项目上,通过与承诺项目所设定的预算数据进行比对,以达到对企业资金流出的预算控制功能。
在SAP中实现现金流量表有几种方法,
1.利用TR模块的承诺项目来做,但不能输出间接法的现金流量表。
2.激活 CashManagement,对应所有总帐科目都要创建Commitment Item,在做业务时,FM 会对任何和现金流相关的业务做记录,这样既可以反映实际现金流量,也可以做现金流量预测。
**********************************************************************************
如果为了实现现金流量表直接法:
我们一般通过原因代码实现,在凭证输入的时候,我们对于涉及到与货币资金相关的凭证时候,
通过字段状态组(field status)和记帐码(posting key)实现原因代码 的必须输入
设定原因代码
01 销售收到的现金 ( }
02 收到其他与经营活动有关的现金
03 。。。。。。
最后我们在通过抓取凭证中的含有原因代码的行项目就实现啦
。。。。。。
其中这第二种方法,如果客户SAP系统没上FM承诺事项管理,有一种代替方法,就是在凭证Line Item上启用一个叫做Reason code的字段,这个字段中的赋值是可以在IMG中自定义的,基本可以依据直接法的现金流入、流出的分类创建Reason code。对于现金、银行科目,将此字段设为必输字段。
SAP财务知识-现金流量表的编制

财务知识-现金流量表的编制一、现金流量表主表项目(一)经营活动产生的现金流量1、销售商品、提供劳务收到的现金 =主营业务收入+其他业务收入 +应交税金(应交增值税- 销项税额) +(应收帐款期初数-应收帐款期末数) +(应收票据期初数应收票据期末数) +(预收帐款期末数-预收帐款期初数) -当期计提的坏帐准备 -支付的应收票据贴现利息 -库存商品改变用途应支付的销项额±特殊调整事项特殊调整事项的处理(不含三个帐户内部转帐业务),如果借:应收帐款、应收票据、预收帐款等,贷方不是“收入及销项税额”则加上,如果:贷应收帐款、应收票据、预收帐款等,借方不是“现金类”科目,则减去。
※①与收回坏帐无关②客户用商品抵债的进项税不在此反映。
2、收到的税费返还=返还的(增值税+消费费+营业税+关税+所得税+教育费附加)等3、收到的其他与经营活动有关的现金 =除上述经营活动以外的其他经营活动有关的现金4、购买商品、接受劳务支付的现金 =[主营业务成本(或其他支出支出) +存货期末价值-存货期初价值)] +应交税金(应交增值税-进项税额) +(应付帐款期初数-应付帐款期末数) +(应付票据期初数-应付票据期末数) +(预付帐款期末数-预付帐款期初数) +库存商品改变用途价值(如工程领用) +库存商品盘亏损失 -当期列入生产成本、制造费用的工资及福利费 -当期列入生产成本、制造费用的折旧费和摊销的大修理费 -库存商品增加额中包含的分配进入的制造费用、生产工人工资±特殊调整事项特殊调整事项的处理,如果借:应付帐款、应付票据、预付帐款等(存贷类),贷方不是“现金类”科目,则减去,如果贷:应付帐款数、应付票据、预付帐款等,借方不是“销售成本或进项税”科目,则加上。
5、支付给职工及为职工支付的现金 =生产成本、制造费用、管理费用的工资,福利费 +(应付工资期初数-期末数)+(应付福利费期初数-期末数)附:当存在“在建工程”人员的工资、福利费时,注意期初、期末及计提数中是否包含“在建工程”的情况,按下式计算考虑计算关系。
SAP中国本地化报表解决方案

➢相关政策法规背景➢SAP中国本地化报表解决方案•资产负债表/利润表•现金流量表•客户汇总报表•供应商汇总报表➢相关政策法规背景•政策法规要求•三大报表的勾稽关系➢SAP中国本地化报表解决方案•资产负债表/利润表•现金流量表•客户汇总报表•供应商汇总报表相关法规与背景根据我国会计准则体系中《企业会计准则第30号:财务报表列报》《企业会计准则第31号:现金流量表》等相关规定,企业财务报表至少就当包括资产负债表、利润表、现金流量表、所有者权益(或股东权益)增减变动表和附注。
根据我国会计基础工作的惯例和会计电算化的相关要求,企业应该对财务凭证的编号、打印,会计科目的变动等有相应的规范管理和记录。
三大财务报表之间的勾稽关系示意图资产负债表(期初)资产货币资金其他流动资产非流动资产负债流动负债非流动负债所有者权益除未分配利润外的所有者权益未分配利润资产负债表(期末)资产货币资金其他流动资产非流动资产负债流动负债非流动负债所有者权益除未分配利润外的所有者权益未分配利润减减加减加加加减加减减主营业务收入主营业务成本税金及附加其他业务利润期间费用投资收益补贴收入营业外收入营业外支出以前年度损益调整所得税少数股东权益净利润利润表(当期)现金流量表(当期)经营活动产生的现金流量表净额投资活动产生的现金流量表净额筹资活动产生的现金流量表净额货币资金期初余额货币资金期末余额净利润盈余公积当期分红用现金流量表(间接法)将净利润调整为经营活动现金流量净额相关法规与背景为了帮助SAP客户更好的在系统中遵照中国会计法规处理数据、提供报表,SAP提供了基于准则规定的报表和产品增强,为客户在自身配置条件下的报表出具和会计处理提供标准化的模板。
SAP提供了财务模块创新及本地化功能增强,满足中国化的账簿及总账报表格式的要求,账簿信息可追溯至会计凭证。
S/4HANA为客户提供了如下报表:⚫中国会计凭证的集中打印⚫中国会计科目明细报表打印⚫新准则企业资产负债表⚫新准则企业利润表⚫新准则企业现金流量表⚫客户汇总报表⚫供应商汇总报表⚫... ...内容提要➢相关政策法规背景➢SAP中国本地化报表解决方案•资产负债表/利润表•现金流量表•客户汇总报表•供应商汇总报表功能与特点概述功能特点:⚫灵活的过滤条件及结果列设置⚫可按功能范围出具报表⚫可在报表里查看到科目级别明细数据⚫支持明细数据的下钻,报表间便捷的跳转⚫灵活的报表期间比较期间选择⚫符合中国会计准则要求的打印格式基本功能:此APP 提供了按照中国本地化资产负债表的结构来展现的资产负债表、利润表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在简单会计软件环境下,编制现金流量表是一件非常麻烦的事。
然而,借助ERP,利用其集成特性,就可以通过上期谈到的资金管理模块,自动生成实时的现金流量表。
ERP中的现金流量表王纹孙健现金流量表的编制我国自1998年1月1日起施行《企业会计准则-现金流量表》以来,企业界和会计界对于该报表的编制方法进行了广泛的探讨。
和国际上其他国家的现金流量表相比,我国的现金流量表同时要求使用直接法和间接法编制。
而且一般国家作为选择补充资料的直接法更是作为正式表项。
这当然有利于报表阅读者的理解。
但在会计实务中大大增加了该表的编制难度,从而使该报表的准确程度和作用受到影响。
这种难度也导致后来表中增值税项目的简化。
在一般手工记账或简单会计软件的环境下,企业一般使用《准则指南》中的工作底稿法或T 形账户法编制,其实质是使用间接法计算表中的直接法表项。
而一些会计软件的处理方法是在输入会计分录时,增加现金和现金等价物科目的输入内容——即指明每笔现金收支是属于哪一个表项。
这一方面增加了会计工作量,另一方面由于在每笔收付款时必须人工查找该笔往来最初产生的原因,使得输入的准确性大受影响。
特别当一笔收付款对应多个表项时,如给供应商付款时包括了货款和增值税两个表项,这种方法要求将分录中现金行手工计算并拆分成几行,造成不必要的麻烦和错误。
在ERP集成环境下,我们通过资金管理模块可以自动生成实时的现金流量表。
首先让我们回顾一下上期《ERP中的资金管理》一文谈到的,在资金管理中,会计科目被置于三个层次之上。
现金层包含货币资金和短期投资等科目,它相当于我国《企业会计准则-现金流量表》文中对于现金和现金等价物的定义。
收入支出层包含的科目代表了企业现金流量的起源。
譬如,所有的权益类和损益类科目以及存货、固定资产等科目都应包含在这一层。
这一层对应于《现金流量表》中现金流量的分类或者说直接反映了《现金流量表》表项一至四。
应收应付层虽然称为应收应付层,但它不仅包含应收账款和应付账款,而且还包含预收和预付账款、其他应收和应付款、应收和应付票据等科目。
这一层的科目反映了收入和支出在形成现金流量之前以短期债权债务存在的临时状态。
它对应《现金流量表指南》中计算各表项时的调整项。
现在让我们看两个在ERP的会计和资金管理中非常重要的概念:现金流量状态当系统通过集成或人工产生一笔会计分录时,资金管理模块会判断这笔业务是否会对现金流量产生影响。
同时系统会自动对它的状态作出判断:是已经生成现金流量了,还是仅仅作为债权或债务。
已经生成现金流量的,系统将它的状态设成“A收付款”,如图1,凡是一笔分录中有一行属于现金层而至少存在另一行属于应收应付层或收入支出层时,它的现金流量状态就是“A收付款”。
对于仍处于应收应付阶段的,系统将它的状态设成“B 发票”,如图1,凡是一笔分录中存在两行分别属于收入支出层和应收应付层时,它的现金流量状态就是“B发票”。
我们在《ERP中的资金管理》一文提到的销售开发票业务(借:应收账款贷:产品销售收入贷:应交税金)在资金管理中就反映为现金流量状态B,而收到货款业务(借:银行存款贷:应收账款)则属于现金流量状态A。
虽然ERP不鼓励多借多贷的会计分录,但是对于这种分录系统会自动计算各种现金管理状态的金额,计算的规则本文就不再赘述了。
未清项管理在ERP的财务会计中,对于应收账款和应付账款的明细账管理使用了未清项管理的概念——在某一个客户或供应商的明细账下,各笔发票和收付款不仅反映借贷和金额,同时还记录了它们之间的相互清账关系。
上例中,财务在处理从客户收款的业务时,可以在输入银行科目后,直接从系统提示的该客户尚未收款的发票清单中选择一笔或多笔进行清账。
系统会自动生成会计分录,同时将该笔收款和那几笔发票设为已清项状态,剩下的发票仍保持未清项状态。
ERP系统除了提供上述人工逐笔清账的功能外,还提供了一些自动逐笔清账的功能。
图1我们以应收应付层中相互指向的箭头表示这种清账的关系。
未清项管理虽然是财务会计的概念,但是它对于资金管理却有重要意义。
图1中红色的箭头表示这样一个过程:当一笔收款或付款发生时,通过逐笔清账系统找到了当初的各笔发票,通过这些发票系统再自动向收入支出层追索,从而找到了该笔现金流量的源头。
两笔业务(收款和发票)此时在资金管理中连成了一笔完整的现金流量。
现实中,一笔收付款往往会有不止一个的源头,比如货款和增值税,此时系统会自动计算出它们各自的金额。
抛开技术上的处理手段,我们可以将上述两个概念简单地看作是ERP系统将来自企业各方的信息转换成了资金管理的语言。
附注:在实际ERP中,为了增加系统的灵活性,资金管理模块主要不是按会计科目进行分析,而是按“现金流量项目”分析和进行数据库存储的。
“现金流量项目”以一对多的形式定义在会计科目中(即几个科目对应一个“现金流量项目”)。
在财务记账时系统自动确定“现金流量项目”。
在输入会计分录时,可以手工更改系统缺省的“现金流量项目”。
比如和长期投资这个科目有关的表项在《现金流量表》中不止一处,像“收回投资所收到的现金”和“权益性投资所支付的现金”等,这时需要在输入会计分录中长期投资那一行时输入相应的“现金流量项目”。
实时的现金流量表有了上述的这些概念,我们就很容易理解ERP中的现金流量表是如何生成的:当我们运行现金流量表时,系统分析指定时间段内的收付款,将这些收付款按它们发生的源头分门别类地归入现金流量表项中。
从而生成了实时的现金流量表。
管理会计和部门现金流量表管理会计在ERP中承担了重要的角色。
管理会计本身是为企业的内部管理提供会计信息的会计分支。
ERP系统利用其集成的优势,将当代管理会计的各种理论付诸实践,比如责任中心的绩效考评,企业级的预算体系,市场获利分析,生产成本控制,项目控制等等。
很多管理会计的理论存在已经有很多年了,比如标准成本和差异分析法、量本利分析法、预算、利润中心和投资中心分析等等。
但是我们都非常清楚一旦将这些理论在纷繁复杂的现实中运用时会遇到很多问题。
很多方法在动用了大量的时间和精力之后,仍然只能得到较粗糙的分析结果,有时这些结果甚至是自相矛盾的。
ERP在这方面的优势在于它是一个重视细节的系统,而这些细节来源于无数企业的经验和教训,同时它的数据建立在集成的基础之上,ERP反对重复和自相矛盾的信息。
限于篇幅,本文仅就管理会计中和资金管理相关的内容加以介绍。
通过将资金管理和管理会计中的各种主体结合起来,可以实现对企业内部资金使用的分析和考核。
现金流量表的实时生成和我们在下期将介绍的“内部银行”都是这方面的应用。
利润中心利润中心是管理导向的组织结构,主要用于企业内部控制的目的。
将公司按照利润中心分割,可以实现对于责任区域的分析和对于分散组织的授权,从而将它们视作“公司中的公司”。
利润中心可大可小,从组织结构的角度,将所有利润中心按树状层次有序地组织起来,构成了利润中心层次。
图2左上方就是一个简化的利润中心层次。
利润中心在企业界有着广泛的应用。
比如一家大型的家电生产企业会按产品线在其内部划分出不同的利润中心,像空调部、冰箱部、洗衣机部等等,而空调部的利润中心下可能更细分出家用空调和中央空调等小利润中心。
又如一家大型的进出口公司会按照贸易商品种类划分类似橡胶部、焦碳部、精细化工品部、农用化工品部等等利润中心。
主合同与利润中心类似,主合同也是管理会计考核的对象。
主合同的意义主要是对商贸企业而言的,这类企业不进行生产,一批货物从采购、储运到销售形态不发生变化。
若干个相关的销售和采购合同按照管理会计的概念将被归总到同一个主合同中,每票主合同都有专门的利润中心负责。
主合同的管理必须经过事先预算和事后决算。
图2右上方代表了某个利润中心目前执行中的所有主合同。
在某些企业中主合同又被称作“预算单”。
但事实上主合同和利润中心都是一种成本对象,它们从不同的角度汇总了成本和收入,预算只是其中的一个功能。
举例来说,上文中的大型进出口公司,其橡胶部利润中心以自营进口的形式购进一批天然乳胶,作为敞口货陆续销售给国内六家企业。
这种情况下主合同以采购合同为主,包含了一单采购和六单销售。
又如该公司精细化工品部利润中心按自营出口的形式对外签定销售一批染料的合同,随后以销定购,分别向国内两家供应商采购,货物备齐后一起发运。
这种情况下主合同以销售合同为主,包含一单销售和两单采购。
利润中心和主合同的现金流量表从内部管理的角度来看,光有整个公司的现金流量表显然是不够的。
通过管理会计和资金管理的集成,我们可以从公司整体的现金流量表一直向下分析到各利润中心甚至主合同的现金流量表。
通过业务(Logistics)和管理会计的集成,ERP系统将所有收入和支出都认定到产生它们的管理会计主体上。
当一笔现金流量通过第一节中的分析,找到源头(收入支出层)时,同时也被归结到了相应的管理会计主体上。
请参见图2红色箭头。
例如上述进出口公司橡胶利润中心,业务员和国内客户签定天然乳胶销售合同时,将这票销售合同归结到本利润中心的一单主合同项下。
当销售开票时,销售收入被自动地记录到该利润中心及其主合同下。
最后该客户一次支付了公司多笔发票金额,其中包括这张发票,系统通过清账过程自动将其中对应于这张发票的现金流记入了该利润中心和该主合同。
同时分离出货款和增值税各自的现金流入。
又如ERP固定资产模块中每项固定资产的卡片都指明使用该固定资产的利润中心,所以固定资产采购的现金流出最终也会被认定到该利润中心。
管理会计和资金管理紧密集成,就可以得到ERP系统每一个利润中心和主合同的现金流量表了。
事实上,除了现金流量外,我们还可以进行每笔主合同的往来款到期分析等等。
但是到目前为止,我们还无法用货币的形式量化每笔主合同和每个利润中心的资金占压成本。
因此,我们将在下一期的文章中引入内部银行的概念。
作者联系:gordonwangwen@cindysunjian@。