现金流量表整理及开发

    技术2022-05-19  20

    现金流量表

     

    用户输入:会计年度,会计期间,公司的代码。

    显示现金流量表

     

    程序逻辑:

    1、  根据会计年度,会计期间,公司代码在透明表bkpf选出凭证号放入itab_bkpf 内表里面

    2、  根据会计年度,公司代码在透明表bseg选出凭证号、原因码、会计科目放入itab_bseg内表里面

    3、  循环itab_bseg ,在循环里面以itab_bseg-belnr(凭证号) 查找itab_bkpf 如果没有则在itab_bseg里面删除该行(如果itab_bkpf 没有的凭证号,则在itab_bseg里面删除,因为透明表里面没有会计期间,通过赛选,能完成用户会计期间的限定)。

    4、  通过循环itab_bseg 完成对有原因代码科目的赛选。循环itab_bseg ,如果itab_bseg里面原因代码为空,则删除该行。这时剩下的数据这为用户选定范围内有原因代码的数据了。

    5、  循环itab_bseg ,利用函数将相同原因代码的会计科目的起初余额,与期末余额累加后放入内表itab. 循环结束后itab里面则为有原因代码,原因代码在用户选择范围内的起初与期末余额。

    6、  现金流量表的显示,利用原因码查询itab 然后得出起初与期末余额放入alv现实内表itab_alv. 设置alv显示控制,调用函数reuse_alv_first_display 显示数据。

     

     

    执行效果

     

    程序代码

    *&---------------------------------------------------------------------**& Report  ZFIXIANJINLIULIANG*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*

    REPORT  ZFIXIANJINLIULIANG.TYPE-POOLS: slis.DATA: fieldcates  TYPE slis_t_fieldcat_alv,      fieldcate LIKE LINE OF fieldcates.DATA: gs_layout TYPE slis_layout_alv.data: bapi_tab type table of BAPI3006_4 with header line.TABLES: bseg ,bkpf.data curr_type like BAPI3006_5-CURR_TYPE value '10'.DATA: BEGIN OF itab_bkpf OCCURS 0 ,      bukrs TYPE bseg-bukrs ,      belnr TYPE bseg-belnr ,      gjahr TYPE bseg-gjahr ,      monat TYPE bkpf-monat,      END OF itab_bkpf.DATA: itab_bkpf1 LIKE TABLE OF itab_bkpf.DATA: BEGIN OF itab OCCURS 0 ,      bukrs TYPE bseg-bukrs ,      belnr TYPE bseg-belnr ,      gjahr TYPE bseg-gjahr ,      rstgr TYPE bseg-rstgr ,      txt20 TYPE t053s-txt20 ,      wrbtr TYPE bseg-wrbtr,      shkzg type bseg-SHKZG,      END OF itab.DATA: BEGIN OF itab_alv OCCURS 0,      rstgr TYPE bseg-rstgr ,      wrbtr1 TYPE  c length 13,      wrbtr TYPE   c length 13,      txt20   TYPE t053s-txt20,      row TYPE i VALUE 1,      END OF itab_alv.

    DATA: BEGIN OF itab_lang OCCURS 0,      rstgr   TYPE t053s-rstgr,      txt20   TYPE t053s-txt20,       END OF itab_lang.DATA: itab1  LIKE TABLE OF itab,      gjahrs LIKE bseg-gjahr.

    * 科目计算data:  begin of  itab_saknr  occurs 0 ,        saknr type ska1-saknr,       end of itab_saknr.

    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.PARAMETER  s_bukrs  type bseg-bukrs.SELECT-OPTIONS: s_monat FOR bkpf-monat.PARAMETER  s_gjahr  TYPE  bseg-gjahr.

    SELECTION-SCREEN END OF BLOCK b1.

    START-OF-SELECTION.*获取会计区间数据*  本年数据free: itab_bkpf[],      itab_bkpf1,      itab[],      itab1.  SELECT * FROM bkpf INTO CORRESPONDING FIELDS OF TABLE itab_bkpf          WHERE   bukrs = s_bukrs          AND     gjahr = s_gjahr          AND     monat IN s_monat.  SORT  itab_bkpf.  DELETE ADJACENT DUPLICATES FROM itab_bkpf.*  上年数据  gjahrs = s_gjahr - 1.  SELECT * FROM bkpf INTO CORRESPONDING FIELDS OF TABLE itab_bkpf1          WHERE   bukrs = s_bukrs          AND     gjahr = gjahrs          AND     monat IN s_monat.  SORT  itab_bkpf1 .  DELETE ADJACENT DUPLICATES FROM itab_bkpf1 .

    *获取显示数据* 本年数据  SELECT a~bukrs a~gjahr a~belnr  a~wrbtr a~rstgr a~shkzg  FROM bseg AS a           INTO CORRESPONDING FIELDS OF TABLE itab           WHERE   bukrs = S_bukrs           AND     gjahr = s_gjahr .  .*   上年数据

    SELECT a~bukrs a~gjahr a~belnr  a~wrbtr  a~rstgr a~shkzg FROM bseg AS a         INTO CORRESPONDING FIELDS OF TABLE itab1       WHERE   bukrs = s_bukrs      AND     gjahr = gjahrs .

    * 获取项目描述  SELECT * FROM t053s INTO CORRESPONDING FIELDS OF TABLE itab_lang          FOR ALL ENTRIES IN itab          WHERE rstgr = itab-rstgr          AND bukrs  = itab-bukrs          AND spras = sy-langu.*  对数据进行处理

    *获得科目数据 select saknr from ska1 into corresponding fields of table  itab_saknr           where KTOPL = 'BONK'           and SAKNR like '1001%'           or  saknr like '1002%'           .

    sort itab_saknr.delete adjacent duplicates from itab_saknr.

    SORT: itab .  SORT  itab1.  DELETE ADJACENT DUPLICATES FROM itab1 .  DELETE ADJACENT DUPLICATES FROM itab .

    LOOP AT itab.    READ TABLE itab_lang WITH KEY rstgr = itab-rstgr.    IF sy-subrc = 0 .      itab-txt20 = itab_lang-txt20.      MODIFY itab.    ELSE .      DELETE itab.    ENDIF.    read table itab_bkpf with key belnr = itab-belnr.    if sy-subrc <> 0.    delete itab.    endif.

    ENDLOOP.

    LOOP AT itab1 INTO itab.    READ TABLE itab_lang WITH KEY rstgr = itab-rstgr.    IF sy-subrc = 0 .      itab-txt20 = itab_lang-txt20.      MODIFY itab1 FROM itab.    ELSE .      DELETE itab1 where rstgr = itab-rstgr.    ENDIF.

    read table itab_bkpf with key belnr = itab-belnr.    if sy-subrc <> 0.    delete itab1 where belnr = itab-belnr.    endif.  ENDLOOP.

    *设置插入marco  DEFINE hong1.    clear itab_alv.    itab_alv-wrbtr = &1.    itab_alv-wrbtr1 = &2.    itab_alv-txt20 =  &3 .    itab_alv-row =  &4 .    append itab_alv.  END-OF-DEFINITION.

    * 设置科目  hong1:  '' '' '一、经营活动生产的现金流量'  1 ,           '' '' '二、投资活动产生的现金流量:' 12 ,           '' ''  '三、筹资活动产生的现金流量:' 25 ,           '0' '0' '四、汇率变动对现金的影响'  35 .

    PERFORM  getdata  USING: '   销售商品,提供劳务收到的现金'   'A01',                            收到的税费返还'   'A02',                           '   收到其他与经营活动相关的现金'   'A03',                           '购买商品、接受劳务支付的现金' 6  'A04',                           '支付给职工以及为职工支付的现金' 7 'A05',                           '支付的各项税费' 8 'A06',                           '支付其他与经营活动有关的现金' 9  'A07',                           '收回投资收到的现金' 13 'B01',                           '取得投资收益收到的现金' 14 'B03',                           '处置固定资产、无形资产和其他长期资产收回的现金净额' 15 'B04',                           '处置子公司及其他营业单位收到的现金净额' 16  'B02',                           '收到其他与投资活动有关的现金' 17  'B05',                           '购建固定资产、无形资产和其他长期资产支付的现金' 19 'B06',                           '投资支付的现金' 20 'B07',                           '取得子公司及其他营业单位支付的现金净额' 21 'B08',                           '支付其他与投资活动有关的现金' 22 'B09',

    '取得借款收到的现金' 27  'C03',                           '收到其他与筹资活动有关的现金' 28 'C04',                           '偿还债务支付的现金' 30 'C05',                           '分配股利、利润或偿付利息支付的现金' 31 'C06',                           '支付其他与筹资活动有关的现金' 32 'C08'.

     

     

     

    PERFORM getsum USING:      '经营活动现金入小计'    4 ,

    '经营活动现金流出小计' 10 6 9 ,                            '投资活动现金流入小计' 18 13 17,                           '投资活动现金流出小计' 23  19 22,                            '筹资活动现金流入小计' 29 26 28  ,                            '筹资活动现金流出小计' 33 30 32  .*                            ''  '' ,*                            ''  '' ,*                            ''  '' ,

    perform remove using: '经营活动产生的现金流量净额' 11 5 10 ,                      '投资活动产生的现金流量净额' 24 18 23,                      '筹资活动产生的现金流量净额' 34 29 33.

    *       特殊处理

    *   '吸收投资收到的现金' 26 'C01',perform getc12.perform do36.perform do37.PERFORM getsum USING:      '六、期末现金及现金等价物余额'  38  36  37 .

    *alv书设置    DEFINE hong.  fieldcate-col_pos = &1.  fieldcate-fieldname = &2.  fieldcate-seltext_m = &3.  append fieldcate to fieldcates.END-OF-DEFINITION.hong:   'TXT20'  '项目',        'ROW'  '行次',        'WRBTR'  '本年利润',        'WRBTR1' '上年利润'.

    gs_layout-colwidth_optimize =  'X'.gs_layout-zebra = 'X'.sort itab_alv by row.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'  EXPORTING    it_fieldcat = fieldcates    is_layout   = gs_layout  TABLES    t_outtab    = itab_alv.

    *&---------------------------------------------------------------------**&      Form  getdata*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->FNAME      text*      -->POS        text*      -->F_RSTGR    text*----------------------------------------------------------------------*FORM getdata USING fname TYPE c                   pos    TYPE i                   f_rstgr TYPE bseg-rstgr.

    DATA: wrbtr_j TYPE bseg-wrbtr VALUE 0 ,        wrbtr_d TYPE bseg-wrbtr VALUE 0 ,

    wrbtr1_j TYPE bseg-wrbtr VALUE 0 ,        wrbtr1_d TYPE bseg-wrbtr VALUE 0.  CLEAR itab_alv.

    LOOP AT itab  WHERE rstgr = f_rstgr.   if itab-shkzg = 'S'.    wrbtr_j = wrbtr_j + itab-wrbtr.    elseif itab-shkzg = 'H'.    wrbtr_d = wrbtr_d = itab-wrbtr.   endif.  ENDLOOP.

    LOOP AT itab1 INTO itab  WHERE rstgr = f_rstgr.    if itab-shkzg = 'S'.    wrbtr1_j = wrbtr1_j + itab-wrbtr.    elseif itab-shkzg = 'H'.    wrbtr1_d = wrbtr1_d = itab-wrbtr.   endif.  ENDLOOP.

    itab_alv-wrbtr = wrbtr_j - wrbtr_d .  itab_alv-wrbtr1 = wrbtr1_j - wrbtr1_d.  itab_alv-txt20 = fname.  itab_alv-row = pos.  APPEND itab_alv.ENDFORM.                    "getdata

    *&---------------------------------------------------------------------**&      Form  getsun*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->FNAME      text*      -->POS        text*      -->LOW        text*      -->HIGHT      text*----------------------------------------------------------------------*FORM getsum USING fname TYPE c                 pos TYPE i                 low TYPE i                 hight TYPE i.  DATA: wrbtr TYPE bseg-wrbtr VALUE 0 ,        wrbtr1 TYPE bseg-wrbtr VALUE 0.  data: count type i,        count_loop type i.

    count = hight - low + 1 .  count_loop  = low.  do count times.    read table itab_alv with key row = count_loop.    if sy-subrc = 0 .    wrbtr = wrbtr + itab_alv-wrbtr.    wrbtr1 = wrbtr1 + itab_alv-wrbtr1.    endif.    count_loop = count_loop + 1.  enddo.

    itab_alv-wrbtr = wrbtr.  itab_alv-wrbtr1 = wrbtr1.  itab_alv-txt20 = fname.  itab_alv-row = pos.  APPEND itab_alv.ENDFORM.                    "getsun

    FORM remove USING fname TYPE c                 pos TYPE i                 low TYPE i                 hight TYPE i.   DATA: max TYPE bseg-wrbtr,         max1 TYPE bseg-wrbtr,         min like max,         min1 like max.

    read table itab_alv with key row = low.   if sy-subrc = 0 .     max = itab_alv-wrbtr .     max1 = itab_alv-wrbtr1.   endif.

    read table itab_alv with key row = hight.   if sy-subrc = 0 .     min = itab_alv-wrbtr .     min1 = itab_alv-wrbtr1.   endif.

    itab_alv-wrbtr =  max - min.  itab_alv-wrbtr1 =  max1 - min1.  itab_alv-txt20 = fname.  itab_alv-row = pos.  APPEND itab_alv.endform.

    form getc12. DATA:  wrbtr TYPE bseg-wrbtr VALUE 0 ,        wrbtr1 TYPE bseg-wrbtr VALUE 0.  CLEAR itab_alv.

    LOOP AT itab  WHERE rstgr = 'C01' or rstgr = 'C02'.    wrbtr = wrbtr + itab-wrbtr.  ENDLOOP.

    LOOP AT itab1 INTO itab  WHERE rstgr = 'C01' or rstgr = 'C02'.    wrbtr1 = wrbtr1 + itab-wrbtr.  ENDLOOP.

    itab_alv-wrbtr = wrbtr.  itab_alv-wrbtr1 = wrbtr1.  itab_alv-txt20 = '吸收投资收到的现金'.  itab_alv-row = 26.  APPEND itab_alv.

    endform.

    form do36.

    DATA: sum TYPE bseg-wrbtr,      sum1  TYPE bseg-wrbtr.

       loop at itab_alv where  row = 11 or row = 24 or row = 34 or row = 35.

    *     write: itab_alv-row.     sum =  sum + itab_alv-wrbtr .     sum1 = sum1 + itab_alv-wrbtr1.

    endloop.

     

    itab_alv-wrbtr =  sum .  itab_alv-wrbtr1 =  sum1.  itab_alv-txt20 =  '五、现金及现金等价物净增加额'.  itab_alv-row = 36.  APPEND itab_alv.

    endform.

    form do37. data: yu type bseg-wrbtr,       yu_s like yu,       pos type i,       wa_monat like line of s_monat.  sort s_monat by low descending.

    read table s_monat into wa_monat index 1.  if sy-subrc <> 0.  pos = 1.  else.  pos = wa_monat-low - 1 .  endif. data: t_gjahr  like s_gjahr,       t_gjahr1 like s_gjahr.  t_gjahr = s_gjahr.  if pos = 0.   t_gjahr = t_gjahr - 1.   pos = 16.  endif. t_gjahr1 = t_gjahr - 1.loop at itab_saknr.free bapi_tab[].

    CALL FUNCTION 'BAPI_GL_ACC_GETPERIODBALANCES'    EXPORTING      companycode                    s_bukrs      glacct                         itab_saknr-saknr      fiscalyear                     t_gjahr      currencytype                  = curr_type*   IMPORTING*     BALANCE_CARRIED_FORWARD       =*     RETURN                        =    tables      account_balances              = bapi_tab[]            .

    sort bapi_tab by FIS_PERIOD. read table  bapi_tab with key  FIS_PERIOD = pos. if sy-subrc =  0.  yu = yu +  bapi_tab-PER_SALES. endif.

    free bapi_tab[].   CALL FUNCTION 'BAPI_GL_ACC_GETPERIODBALANCES'    EXPORTING      companycode                   = s_bukrs      glacct                        = itab_saknr-saknr      fiscalyear                    = t_gjahr1      currencytype                  = curr_type*   IMPORTING*     BALANCE_CARRIED_FORWARD       =*     RETURN                        =    tables      account_balances              = bapi_tab[]            .

    read table  bapi_tab with key FIS_PERIOD = pos . if sy-subrc = 0.  yu_s = yu_s +  bapi_tab-PER_SALES. endif.

    endloop.  itab_alv-wrbtr =  yu .  itab_alv-wrbtr1 =  yu_s.  itab_alv-txt20 =  '加:期初现金及现金等价物余额'.  itab_alv-row = 37.  APPEND itab_alv.

    endform.

     

     

     

    *

    *&---------------------------------------------------------------------**&      Form  do38*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*form do38 .

     

    endform.                    " do38


    最新回复(0)