财务凭证的替代

业务背景:

在SAP中,供应商主数据的科目只有一个比如通常设置的是应付帐款,在SAP中,科目和中

国传统会计不一样,其科目是不强调层级的,比如应付帐款,国内ERP可能会带供应商项目

等几个核算项目,SAP采用另一种方式,它将供应商直接看成明细科目,从其主数据自动带

出应付帐款,如果还需要区分是什么项目的应付,则可采用统计内部订单或特殊总帐标志,

但是,在后勤发票校验(Tcode:MIRO)时却不能使用特殊总帐标志。这样,比如企业从同

一供应商购买生产用材料(对应普通应付帐款)和项目材料(对应应付项目款)且需要从会

计科目上就直接区分时两种应付时就有点小麻烦。

一般的思路有这么些:

I.因为同一供应商主数据中只能有一个科目又不能特殊总帐标志,建议拆分成多个虚拟供应商来对应不同科目,此法严重违反编码唯一性原则,贼笨。

II.会计科目还是使用同一个应付帐款科目,附加一个字段比如文本/参考字段来区分同一供应商的不同应付,假设供应商还承包了你的在建项目有涉及应付劳务,如果仅用一个文本区分不严谨,也没有从科目上直接区分那样直观。

III.使用科目替代方式解决,直接从科目上区分不同应付款。

参考步骤如下:

a.SE16:V_T053定义行文本标志,其中ZNOR:MIRO 普通应付和ZPSC:MIRO 项目应付。

b.建立特殊总帐标志9表示应付项目款,并设置好应付项目款会计科目。

c.使用Only exit 出口替代,这样使用替代就直接从科目上就区分出了应付帐款类型,

参考代码如下表(参考使用,责任自负):

FORM U100 .

DATA: IWA_T074 LIKE T074 ,

I_ANS(1) Type C .

Check ( SY-Tcode = 'MIRO' OR SY-Tcode = 'MR8M' )

and BSEG-KOART = 'K' . “检查是否为发票校验事务

condense bseg-sgtxt .

*判断用户必须输入文本摘要而且MIRO/MR8M时只能是ZNOR和ZPSC

if bseg-sgtxt <> 'MIRO 普通应付' and bseg-sgtxt <>'MIRO 项目应付'.

message E001(00) with 'Choose ZNOR or ZPSC ' .

endif.

*如果文本输入应付项目款则从特殊总帐配置中读取应付项目款项目替代应付帐款

if bseg-sgtxt = 'MIRO 项目应付' .

I_ANS = '9' . "特殊总帐标志9表示应付项目款

SELECT SINGLE * INTO IWA_T074 FROM T074

WHERE KTOPL = 'INT'

AND KOART = 'K'

AND UMSKZ = I_ANS

AND HKONT = BSEG-HKONT .

IF IWA_T074-HKONT NE SPACE.

BSEG-HKONT = IWA_T074-HKONT. "特殊总帐科目

BSEG-UMSKZ = I_ANS . "特别总帐标示

BSEG-UMSKS = 'A' . "特别总帐事务类型,A,W,O

*SAP高度集成替代必须考虑其它模块影响,替代同时也替代特殊总帐的计划层次。

BSEG-FDLEV = IWA_T074-EBENE . "特殊总帐计划层次,如果启动CBM

BSEG-BSCHL+1(1) = '9' . "记账码的第一码

ENDIF.

endif .

endform.

为什么你的替代不起作用?

替代不起作用通常有两个原因:

一.系统默认不允许你替代该字段内容。

SAP将所有的允许字段退代关系维护在GB01表中,如果该表中没有出现你的替代字段,你是不能替代的,比如会计科目BSEG-HKONT通常是不允许替代的,你就需要在此表增加。

二.替代程序需要重新自动编译。

在一些特殊情况下,你发现你的Validaton和Substitution都不起作用了,SE38运行程

RGUGBR00| RGUGBR00, 将能选的项目全选上手工重新编译就行。

替代如何工作?

相关表格:

GB01|T001Q|T80D|GB03|GB03T|GB31|GB31T||GB907|GB90|GB92|GB922|GB901

|OXT_GENOBJDTL|。

相关函数和程序:

FI_SUBSTITUTION_ACTIVE|FI_SUBSTITUTION_DOC||FI_SUBSTITUTION_HEADER|FI_SUBSTITUTION_ITEM| GBTDMFI0| GBTDMFIJ|RGUGBR00|RGUGBR00|GBTDMFIJ|GBTDMFIG|MF05AIENJ


在会计凭证的主程序SAPMF05A的子例程MF05AIENJ中,Module document_merge INPUT是检查和替代的处理入口,

简单理解, 系统将用户自屏幕上输入的信息首先保存在一些临时内表中,当通过所有的业务检查时最后保存到数据库,替代则是根据用户设置的条件去退换掉内表的一些临时内容从而保存到一些字段内容最终保存到数据库时是用户替换的内容。在叙述SAP增强时会详细描述这个机制。

TCODE : GCX2   视图名称:V_T80D

用来配置财务替代和确认程序名称。

复制标准程序RGGBS000 创建程序 ZRGGBS000.(名称Z开头任意)

然后在GCX2中进行关联。

应用区域  退出程序      应用程序区域

GBLR      ZRGGBR000     验证/替代:规则的出口
GBLS      ZRGGBS000     验证/替代:替代的出口

故替代逻辑将要写在 ZRGGBS000 中.

  FORM GET_EXIT_TITLES TABLES ETAB.

在其中添加新的

   EXITS-NAME  'UXXX'. "U911
  EXITS-PARAM C_EXIT_PARAM_NONE.   "适用于各种情况
  EXITS-TITLE TEXT-992           “替代的文本
  APPEND EXITS.

  ENDFORM  

 

然后在 ZRGGBS000中写FORM  UXXX.ENDFORM.

实例代码

   CONSTANTS:C_MSEG(85 VALUE '(SAPMM07M)YMSEG[]',
            C_ACCIT(85VALUE '(SAPLFACI)ACCIT_FI-LOGVO'.

  
  FIELD-SYMBOLS: <FS_MSEG> TYPE STANDARD TABLE,
                 <FS_INDEX> TYPE ANY.

   ASSIGN (C_ACCIT) TO <FS_INDEX>.

   ASSIGN (C_MSEG) TO <FS_MSEG>[].

........


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值