作业需求编写FI模块应收应付的报表.docx

上传人:b****3 文档编号:26742180 上传时间:2023-06-22 格式:DOCX 页数:28 大小:332.98KB
下载 相关 举报
作业需求编写FI模块应收应付的报表.docx_第1页
第1页 / 共28页
作业需求编写FI模块应收应付的报表.docx_第2页
第2页 / 共28页
作业需求编写FI模块应收应付的报表.docx_第3页
第3页 / 共28页
作业需求编写FI模块应收应付的报表.docx_第4页
第4页 / 共28页
作业需求编写FI模块应收应付的报表.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

作业需求编写FI模块应收应付的报表.docx

《作业需求编写FI模块应收应付的报表.docx》由会员分享,可在线阅读,更多相关《作业需求编写FI模块应收应付的报表.docx(28页珍藏版)》请在冰豆网上搜索。

作业需求编写FI模块应收应付的报表.docx

作业需求编写FI模块应收应付的报表

作业需求:

编写FI模块应收应付的报表

目录:

1.作业目的和安排

本作业的目的是:

1.为了进一步熟悉ABAP的编程技巧;

2.更主要的目标的:

熟悉sapfi模块的应收和应付业务场景;

3.熟悉相关的表;

2.作业简单需求

开发一个FI模块的报表:

输入的条件是:

供应商(但是可以多选),公司代码(必输)账龄计算日:

报表输出字段包括:

公司代码、供应商(客户),年度销售总额、应付(收)账款总额、<0天金额

1-30天,31-60天,61-90天,91-150天,150天以上

数据结果需要和这个表进行比对。

3.作业要求

时间要求:

1.郭裕的要求

2天左右开发完成报表;

2.一般的项目要求

给予4天左右。

3.最低要求

4.作业过程

1.充分分析需求;

2.对于复杂程序在编写之前要画流程图;

为了方便和加深对要编写程序的理解,我们一般:

步骤一:

编写字段来源

输入的条件是:

公司代码(必输),供应商(但是可以多选),账龄计算日(默认今天)

报表输出字段包括:

公司代码、供应商,年度采购总额、应付账款总额、<=0天金额,1-30天,31-60天,61-90天,91-150天,150天以上

需要的表字段:

(具体见步骤2)

BSIK(会计核算:

供应商的第二次索引(未结算项目)):

公司代码(bukrs),供应商(lifnr),清帐日期(AUGDT)用于到期日计算的基准日期(ZFBDT)

BSAK(会计核算:

供应商的第二个索引(已结算项目)):

公司代码(bukrs),供应商(lifnr),清帐日期(AUGDT)用于到期日计算的基准日期(ZFBDT)

 

要知道年度采购总额,必须知道年度已付账款总额+年度应付账款总额,采购成立与否,是由收到发票与否来判断的。

每张发票都对应一个会计凭证,此凭证分别在bsik和bsak中都可找到。

经se16n检查,bsik中清算单据的单据号码(AUGBL)全部为空,bsak中清算单据的单据号码(AUGBL)全部不为空。

这个字段表示对会计凭证编号(BELNR)的清算单据号,blart代表凭证类型。

例子:

用f-53实验了2笔清帐凭证,2笔都是完全清帐了1个会计凭证,部分清帐了1个会计凭证。

第1笔清帐凭证号是1500000005,我填的开始总清帐金额为1234元,完全清帐了5100000673的696元,部分清帐了1500000005的538元,一共就是1234元。

第2笔清帐凭证号为1500000006,开始清帐总金额为2345元,完全清帐了5100000004的367.72元,部分清帐了1500000006的1977.28元,共2345元。

在se11中查看bsak,可以分别看到2笔清帐凭证已经完成的清帐,注意SHKZG是借贷标记,DMBTR(按本位币计的金额)和WRBTR(凭证货币金额),

同样在se11中查看bsik,可以分别看到2笔清帐凭证部分完成的清帐:

年度采购总额可以通过发票金额总额来判断,也就是bsik和bsak中凭证类型为RE的。

应付账款总额,即bsik中所有凭证金额之和(正负冲销,原因见下面)。

上图其实是已清的,为何在未清中呢?

这很令人混淆,其实答案很简单,它是正值!

写到那里就是为了冲销用的,所有应付的实质是欠款,因此显示都是负值,因此,它们还是显示原来的值(负值),不管冲销多少,只要没冲销完,就显示原来的,比如下图:

已经被冲销了很多次了,可是没有完,所以值不变。

正负冲销的判断是借方或贷方科目,在字段借贷标识(SHKZG)中。

 

步骤二:

画数据来源表的逻辑关系

本次表关系比较简单,难在1.业务的理解和数据的寻找2.程序的统计功能上。

还在艰难摸索中。

 

步骤三:

具体完整程序流程

  "在bsik中累加得到发票总金额

  select bukrs lifnr sum( dmbtr )

    into table git_bsik_sum

    from bsik

    where bukrs = s_bukrs

      and lifnr in s_lifnr

      and blart = 'RE'

    group by bukrs lifnr.

  "在bsak中累加得到发票总金额

  select bukrs lifnr sum( dmbtr )

    into table git_bsak_sum

    from bsak

    where bukrs = s_bukrs

      and lifnr in s_lifnr

      and blart = 'RE'

     group by bukrs lifnr.

  "合并未结算发票总额表git_bsik_sum与已结算发票总额表git_bsak_sum,结果

  "得到销售总额表git_sum

  git_sum[] = git_bsak_sum[].

    "sort git_sum by lifnr.

  loop at git_bsik_sum.

    loop at git_bsak_sum.

      first_index = SY-TABIX.

      check = 0.

      if git_bsik_sum-lifnr = git_bsak_sum-lifnr.

        clear wa_sum.

        wa_sum-bukrs = git_bsak_sum-bukrs.

        wa_sum-lifnr = git_bsak_sum-lifnr.

        wa_sum-dmbtr_sum = git_bsik_sum-dmbtr_sum + git_bsak_sum-dmbtr_sum.

        modify git_sum from wa_sum index first_index.

        check = 1.

        exit.

      endif.

    endloop.

    if check = 0.

      clear wa_sum.

      wa_sum-bukrs = git_bsik_sum-bukrs.

      wa_sum-lifnr = git_bsik_sum-lifnr.

      wa_sum-dmbtr_sum = git_bsik_sum-dmbtr_sum.

      append wa_sum to git_sum.

    endif.

  endloop.

  "对销售总额表按公司与供应商进行排序

  sort git_sum by bukrs lifnr.

  "程序设计中的检查功能

*  write:

/ '销售总额表git_sum'.

*  write:

/ '#############################################'.

*  loop at git_sum.

*    write:

 / git_sum-bukrs, git_sum-lifnr, git_sum-dmbtr_sum.

*  endloop.

  "在bsik中以公司供应商与借贷标识累加得到应付账款总额的分别借贷方

  "得到处理前的应付账款总额表

  select bukrs lifnr SHKZG sum( dmbtr )

    into table git_bsik_yfze

    from bsik

    where bukrs = s_bukrs

      and lifnr in s_lifnr

    group by bukrs lifnr shkzg.

(难点)计算应付账款总额:

思路:

设置check为s,开始循环,done=0,检查是否H,

一.是上体是否h(由check判断),1.是则上体写入git,本体写入wa,check设为h;

2.否则本体写入wa,check设为h。

二.否本体减额写入wa,写入git,done=1,check设为s。

三.判断是否到了表尾,是则判断done是否为0,是则本体写入git,最后一次清空wa。

  "对此处理前应付总额表分别借贷方进行升序排序,'S'在前,'H'在后

  sort git_bsik_yfze by bukrs lifnr SHKZG.

*  loop at git_bsik_yfze. "程序设计中的检查功能

*    write:

 / git_bsik_yfze-bukrs, git_bsik_yfze-lifnr, git_bsik_yfze-SHKZG, git_bsik_yfze-dmbtr_sum.

*  endloop.

 "得到合并借贷方后的处理后应付账款总额表git_bsik_yfzep  p代表process”已经处理过的“

  clear git_bsik_yfzep[].

  check_p = 's'.

  loop at git_bsik_yfze.

    if git_bsik_yfze-SHKZG = 'H'.

      if check_p = 'h'.

        append wa_bsik_yfzep to git_bsik_yfzep.

        clear wa_bsik_yfzep.

        wa_bsik_yfzep-bukrs = git_bsik_yfze-bukrs.

        wa_bsik_yfzep-lifnr = git_bsik_yfze-lifnr.

        wa_bsik_yfzep-dmbtr_sum = git_bsik_yfze-dmbtr_sum.

        check_p = 'h'.

      else.

        clear wa_bsik_yfzep.

        wa_bsik_yfzep-bukrs = git_bsik_yfze-bukrs.

        wa_bsik_yfzep-lifnr = git_bsik_yfze-lifnr.

        wa_bsik_yfzep-dmbtr_sum = git_bsik_yfze-dmbtr_sum.

        check_p = 'h'.

      endif.

    else.

      wa_bsik_yfzep-bukrs = git_bsik_yfze-bukrs.

      wa_bsik_yfzep-lifnr = git_bsik_yfze-lifnr.

      wa_bsik_yfzep-dmbtr_sum = wa_bsik_yfzep-dmbtr_sum - git_bsik_yfze-dmbtr_sum.

      if wa_bsik_yfzep-dmbtr_sum <> 0.

        append wa_bsik_yfzep to git_bsik_yfzep.

      endif.

      check_p = 's'.

      "initial_yingfu = initial_yingfu + git_bsik_yfze-dmbtr.

    endif.

  endloop.

  "对处理后应付账款总额表进行排序

  sort git_bsik_yfzep by bukrs lifnr.

*  write:

/ '处理后应付账款总额表git_bsik_yfzep'.

*  write:

/ '#############################################'.

*  loop at git_bsik_yfzep. "程序设计中的检查功能

*    write:

 / git_bsik_yfzep-bukrs, git_bsik_yfzep-lifnr, git_bsik_yfzep-dmbtr_sum.

*  endloop.

(难点)合并年度采购总额和应付账款总额表:

思路:

Loop年度采购总额表,在应付账款总额表中找公司号与供应商号相同记录,找到则将应付账款总额加入,否则为0。

写入git。

Loop应付账款总额表,在年度采购总额表中找公司号与供应商号不同记录(因为上一步已经找了相同记录),如果是则将采购总额加入,否则为0。

写入git。

  "合并销售总额表git_sum与应付账款总额表git_bsik_yfzep 第一步

  refresh git_sumyfzep[].

  loop at git_sum.

    read table git_bsik_yfzep

      with key bukrs = git_sum-bukrs

               lifnr = git_sum-lifnr

        binary search.

    if sy-subrc = 0.

      clear wa_sumyfzep.

      wa_sumyfzep-bukrs = git_sum-bukrs.

      wa_sumyfzep-lifnr = git_sum-lifnr.

      wa_sumyfzep-dmbtr_gsum = git_sum-dmbtr_sum.

      wa_sumyfzep-dmbtr_yfzep = git_bsik_yfzep-dmbtr_sum.

      append wa_sumyfzep to git_sumyfzep.

    else.

      clear wa_sumyfzep.

      wa_sumyfzep-bukrs = git_sum-bukrs.

      wa_sumyfzep-lifnr = git_sum-lifnr.

      wa_sumyfzep-dmbtr_gsum = git_sum-dmbtr_sum.

      wa_sumyfzep-dmbtr_yfzep = 0.

      append wa_sumyfzep to git_sumyfzep.

    endif.

  endloop.

  "sort git_sum by bukrs lifnr. 前面已经sort过了,且没有改动表

  "合并销售总额表git_sum与应付账款总额表git_bsik_yfzep 第二步

  loop at git_bsik_yfzep.

    read table git_sum

      with key bukrs = git_bsik_yfzep-bukrs

               lifnr = git_bsik_yfzep-lifnr

        binary search.

    if sy-subrc <> 0.

      clear wa_sumyfzep.

      wa_sumyfzep-bukrs = git_bsik_yfzep-bukrs.

      wa_sumyfzep-lifnr = git_bsik_yfzep-lifnr.

      wa_sumyfzep-dmbtr_gsum = 0.

      wa_sumyfzep-dmbtr_yfzep = git_bsik_yfzep-dmbtr_sum.

      append wa_sumyfzep to git_sumyfzep.

    endif.

  endloop.

  "将得到的销售总额与应付账款总额表git_sumyfzep排序

  sort git_sumyfzep by bukrs lifnr.

  "程序设计中的检查功能

*  write:

/ '销售总额与应付账款总额表git_sumyfzep'.

*  write:

/ '#############################################'.

*  loop at git_sumyfzep.

*    write:

 / git_sumyfzep-bukrs, git_sumyfzep-lifnr, git_sumyfzep-dmbtr_gsum, git_sumyfzep-dmbtr_yfzep.

*  endloop.

  "内表无法inner join

*  select

*      a~bukrs

*      a~lifnr

*      a~dmbtr_sum

*      b~dmbtr_sum

*    into table git_sumyfzep

*    from git_sum as a left join git_bsik_yfzep as b

*    on a~bukrs = b~bukrs

*    and a~lifnr = b~lifnr.

*  loop at git_bsik_yfze. "程序设计中的检查功能

*    write:

 / git_bsik_yfze-bukrs, git_bsik_yfze-lifnr, git_bsik_yfze-SHKZG, git_bsik_yfze-dmbtr_sum.

*  endloop.

(难点)统计不同时间段的应付账款总额:

Loopgit_bsik表,

-1.赋值tmax_git_bsik=SY-TMAXL。

0.如果为借方,则直接重新循环。

(原因见4)

1.如果SY-TABIX=1,记录此供应商号入wa,readme=1,check=0,然后进入2;

否则与上一供应商号比,相等且check=0则重新循环。

若不等且check=0则记录此供应商号入wa,readme=1,进入下一步。

若相等且check=1,进入下一步。

若不等且check=1,则通过wa直接根据tabix_sumyfzep来modifygit_sumyfzep表,清空wa,记录供应商号入wa,check=0,readme=1,进入下一步。

2.如果readme=0,直接进入3;

如果readme=1,读表git_sumyfzep看有无记录的供应商号且应付总额不为0,

无则check=0,重新循环。

有则check=1,readme=0,并记录读此表的sy-tabix(tabix_sumyfzep=sy-tabix)进入下一步。

3.判断是否为贷方(原因见4),是则按账龄计算日与付款基准日ZFBDT对比,归类于不同时间段来累加金额,重新循环。

4.判断是否到达表尾(此为最后一条记录),也就是最外层sy-tabix是否等于tmax_git_bsik,是则通过wa直接根据tabix_sumyfzep来modifygit_sumyfzep表,最后一次清空wa,跳出。

5.由于业务理解阻碍,程序无法完美实现,因此只能做出半成品,可以知道应付账款各二阶汇总原始总额(贷方数据),而无法知道其现实总额(被借方冲销后剩余的贷方数据)

  "按公司与供应商把所有借贷方金额与付款基准日期选出,以备二阶汇总

  select bukrs lifnr SHKZG dmbtr ZFBDT

    into corresponding fields of table git_bsik

    from bsik

    where bukrs = s_bukrs

      and lifnr in s_lifnr.

  "将二阶汇总备用表git_bsik按公司与供应商排序

  sort git_bsik by bukrs lifnr.

  "将二阶汇总应付数据写入销售与应付总额表,得到最终git_sumyfzep表

  clear wa_sumyfzep. "重要!

我很容易就搞忘了

  loop at git_bsik.

    if git_bsik-shkzg = 'S'.

      continue.

    endif.

    if sy-tabix = 1.

      wa_sumyfzep-bukrs = git_bsik-bukrs.

      wa_sumyfzep-lifnr = git_bsik-lifnr.

      readme = 1.

      check = 0.

    else.

      if ( git_bsik-lifnr = wa_sumyfzep-lifnr and check = 0 ).

        continue.

      endif.

      if ( git_bsik-lifnr <> wa_sumyfzep-lifnr and check = 0 ).

        wa_sumyfzep-bukrs = git_bsik-bukrs.

        wa_sumyfzep-lifnr = git_bsik-lifnr.

        readme = 1.

      endif.

      if ( git_bsik-lifnr = wa_sumyfzep-lifnr and check = 1 ).

        "直接往下走

      endif.

      if ( git_bsik-lifnr <> wa_sumyfzep-lifnr and check = 1 ).

        modify git_sumyfzep from wa_sumyfzep index tabix_sumyfzep.

        clear wa_sumyfzep.

        wa_sumyfzep-bukrs = git_bsik-bukrs.

        wa_sumyfzep-lifnr = git_bsik-lifnr.

        check = 0.

        readme = 1.

      endif.

    endif.

    if readme = 0.

      "直接往下走

    endif.

    if readme = 1.

      "看此公司供应商是否有应付账款,有的话肯定在git_sumyfzep中有记录

      read table git_sumyfzep

        with key lifnr = wa_sumyfzep-lifnr

          binary search.

      if sy-subrc <> 0.

        continue.

      else.

        if git_sumyfzep-dmbtr_yfzep = 0.

          continue.

        endif.

      endif.

      check = 1.

      readme = 0.

      tabix_sumyfzep = sy-tabix.

      wa_sumyfzep-dmbtr_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 电大

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1