发票校验替换 Recon. Account 解决方案

应付账款中,供应商的 Recon. account 是从主数据中带过来的。如果需要对不同的业务使用不同的 Recon. account 科目,比如某笔业务是 “应付票据”,而不是 “应付账款”,则通过界面上的 SGI (Special G/L indicator) 选择 W (表示应付票据业务),将科目调整为 “应付票据”。原理就是后台配置了 Recon. account 针对 SGI (比如 W) 的调整科目。

FI 模块手工编制的会计凭证都可以这样做。 但采购发票校验 (LIV, T-code: MIRO ) 时,SAP 并没有提供特殊总账标记。这样应付账款科目就只能从供应商主数据带过来,而不能根据业务类型进行区分。

这么多 SAP 的客户,自然有些客户有个性化的需求。比如要求根据购买的物资不同,计入到不同的科目。购买一般物料,要计入 “应付账款-物资” 科目;购买固定资产的时候,要计入 “应付账款-项目” 科目。这个时候,应该怎么解决呢?

首先想到的自然是替代 (substitution) 技术。但这个需求,替代却不容易实现?为什么呢?

供应商的行项目没有物料编码 (MATNR)信息,是空的。因为 SAP
中一张发票校验可以包含多个收货行,集成到 FI 的会计凭证有多个 GR/IR 行,如下所示 (省略应交税金):

DR: GR/IR (material #1)
DR: GR/IR (material #2)
DR: ...
CR: 供应商

因为一对多的关系,供应商的行项目没有物料编码数据。那么进行替代的话,要用完全凭证替代 (Complete document substitution),从凭证的其他行项目 (Line item) 获取信息,比如 GR/IR 行,再根据业务规则对供应商的总账科目进行替代。

但是,对 MM / SD 这种外部模块与 FI 的接口凭证, 完全凭证替代却不会被调用(参见 OSS Note: 386696)。也就是说用不到了。而行项目 (Line item)替代,则没有做够的信息对会计科目进行区分。所以想用替代作为解决方案,存在限制。

解决方案概述

基于以上分析,以及查找相关资料,大致有如下解决方案有:

  • 会计凭证行项目替代,用户给出其他判断条件,比如通过屏幕增强,用户输入他想让应付账款这行用的会计科目;或在摘要中给出判断条件,行项目替代时候可用到这个条件,从而替换成其他科目
  • BTE: Process 1120
  • BADI: AC_Document

BTE 解决方案示例

BSEG_SUBST 结构添加字段

Process 1120 event 在 MIRO 的时候能被触发,但这个 event 能被修改字段只能是 T_BKPFSUBT_BSEGSUB

样本函数 SAMPLE_PROCESS_00001120 的帮助文档有如下说明:

The current document headers (there will be more than one for cross-company code transactions, for example), the corresponding line items and the recurring entry data for the document header and the one-time account data are transferred to the additional component, for information purposes only. You must not edit this data. Instead, two additional tables (T_BKPFSUB and T_BSEGSUB) and the structure BKDF_SUBST are also transferred. The contents of the fields that can be substituted are entered in these tables. Field TABIX contains a line number which shows from which line in T_BSEG or T_BKPF the field contents originate.

简单地说,就是 T_BKPF, T_BSEGT_BSEG 三个 table 参数的作用是提供信息,但不能被修改。能修改的只有 T_BKPFSUBT_BSEGSUB 。OSS Note 996552 对此亦有说明。

T_BSEGSUB 对应的数据类型是结构 BSEG_SUBST,只有下面这些字段:

总账科目并没有包含在其中。所以,要向 BSEG_SUBST 添加 HKONT 这个字段。使用事务码 SE11 显示结构 BSEG_SUBST,然后通过菜单 【Goto】-> 【Append structure】,创建一个名为 ZHKONT 的 append。并向 ZHKONT 添加 HKONT 字段:

维护 Enhancement category,然后激活。

拷贝 SAMPLE_PROCESS_00001120 并编写代码

Process 1120 的样本函数是 SAMPLE_PROCESS_00001120。用事务码 SE37 将函数拷贝一个函数,命名为 ZSAMPLE_PROCESS_00001120。注意拷贝的时候使用另外的函数组,函数组需要激活。在 ZSAMPLE_PROCESS_00001120 中编写如下代码:

function zsample_process_00001120.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_BKDF) TYPE  BKDF OPTIONAL
*"  TABLES
*"      T_BKPF STRUCTURE  BKPF
*"      T_BSEG STRUCTURE  BSEG
*"      T_BKPFSUB STRUCTURE  BKPF_SUBST
*"      T_BSEGSUB STRUCTURE  BSEG_SUBST
*"      T_BSEC STRUCTURE  BSEC OPTIONAL
*"  CHANGING
*"     REFERENCE(I_BKDFSUB) TYPE  BKDF_SUBST OPTIONAL
*"----------------------------------------------------------------------

  data: l_flag(1) type c. " type: 材料采购还是非材料采购

  check ( sy-tcode = 'MIRO' or sy-tcode = 'MR8M' ).

  read table t_bkpf index 1.
  check t_bkpf-bukrs = 'Z900'.

* 代码并未严格考虑实际业务,仅作为示例
  loop at t_bseg.
    if t_bseg-hkont = '0019800000'. " GR/IR account
      if t_bseg-matnr <> ''.        " 物料编码不为空
        l_flag = 'X'.               " 是材料采购
      else.
        l_flag = ''.                " 不是材料采购
      endif.
    endif.
  endloop.

  check l_flag = ''.
  loop at t_bseg.
    if t_bseg-hkont = '0021210100'.    " 应付账款
      read table t_bsegsub with key tabix = sy-tabix.
      t_bsegsub-hkont = '0021210101'.  " 应付项目款
      modify t_bsegsub index sy-tabix.
    endif .
  endloop.

endfunction.

配置 BTE

通过事务码 FIBF, 配置一个 Product, 并且激活 (菜单 Settings -> of a customer )

然后将事件 (event) 1120 ,ZSAMPLE_PROCESS_00001120 与 ZMIRO product 关联 (菜单 Settings -> Processes moduls -> of a customer)。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容