FI凭证的有效检查Validation/Substitution

来源:互联网 发布:淘宝花呗买充值卡 编辑:程序博客网 时间:2024/06/04 17:52

 

转:

凭证的有效检查

HR,AP,AP,GL,Consolidation,Real Estate,Special Purpose Ledger等多模快都能发现有效性检查(Validation)配置,所谓Validation不过是在凭证保存前根据设置条件判断此凭证是否有效,再根据Validation设置的消息类型(关于消息请参考第例消息控制)决定凭证是否允许保存(顺利保存的),对稍微了解ABAP开发基础的用户是很容易理解的.

凭证Validation,SubstitutionUser Exit的使用保证了凭证能成功通过某些企业实际的自订复杂业务检测最后保存在数据库.

***可使用Validation检测在记帐时某些cost center只能对应到具体某Functional Area(如上了Functional Area的话),某些费用类科目只能记到某具体

Cost center.

比较实用的Validation IMG T-code:OB28:AP/AR/GL Doc.|OAZ1:AM Posting|

GCVW:Global Validation(In SPL,Company Level)|GCVV:Local Validation(In SPL,

Company code Level).

下面以OB28为例,详细说明Validation的用法.(IMG Path如图7-1标号1)

[1]定义记帐有效检查.

[2]定义会计凭证退代.

 

建立Validation步骤:

下面以Line Validation STLINE只允许用户STONEF5100(本位币HKD)记帐时本位货币金额不超过1000HKD为例子,详细介绍Validation的配置步骤.

***当然使用其他配置也能达到相同效果.

 

1.选择Callup Point建立Validation Name(如图7-2).

 [1]1.在凭证抬头触发 2.凭证行项目触发 3.整个凭证触发,触发通常发生在用户按Enter键和保存之时.

 [2]新建Validation时按F2进入详细画面(如图7-3)

 [3]1表示激活,只有选择激活后Validation才真正起作用.

2.Validation建立步骤详解(如图7-3).

 

[1]新建Validation,如在此新建Validation要回到图7-2New entries然后激活.

[2]新建Step,一个Step包含先决条件,检查和消息.7-3 Step001表示的是在

   Company code 5100(Local Currency HKD)下如果UserSTONEF,如记帐本位币超过1000HKD,就弹出错误消息ZFIMSG 017(关于消息剖析请参考第例消息控制).   

  ***Validation触发的条件是满足先决条件但是不满足检查条件.

[3]Rule可用在Validation,Substitution,Report Write Selection甚至ATP check,简单理解,经常用到的一些判断条件可建立成Rule,Prerequisitecheck建立俩Rule-ZRULE1(7-4)ZRULE2(图略.BSEG-DMBTR <= '1000.00'),和图7-2效果一样,不同的是此俩rule还可用在Substitution等中(请看8例凭证的退代),可重复使用.

  重复性的好处还表现在你只要修改rule(比如现在STONEF允许最大记帐金额是

2000),所有用到此ruleValidation,Substitution全部生效.

   

 7-5使用Rule和图7-2直接使用ABAP code效果一样.

 

Rule做为一个条件可用在定义其它Rule,比如ZRULE3包含ZRULE1 and其他条件.

[4]Header Validation只可选BKPF字段和只在凭证头回车或保存凭证触发.

[5]既然Item Validation先决条件可选BKPFBSEG,但是Check只能选BSEG字段,否则不被触发.

***比如先决条件条件是BKPF-BUKRS,CheckBKPF-USNAM,很明显这是无效的Validation.

另一个问题是如有多个行项目满足了条件会弹出多条消息.

[6]整个凭证有效,就是在Doc Header,Item回车和保存都触发.

[7]先决条件条件(参照[2]).

[8]检查(参照[2]).

[9]SAP消息使用在多种地方,比如想打印传真PO需要建立一个相应消息,另外消息还用在处理程序例外上,在这里是指后者(更详细请参考第例消息控制).

 

如上图7-6.

1.E表示消息定义为错误类别,此时不可保证凭证,I,W类别只是给出信息和警告,允许凭证保存,如选A,则会退出当前Tcode操作.

2.就是Tcode:SE91定义的Message Class(7-7).

 

3.在此选择了消息号017使用了俩参数(&),&表示在实际弹出消息时能使用实际值取代&.

4.消息变量.

  7-8表示用户STONEF在使用FB50手工记帐时,Local currency amount>1000

  时出现的错误(使用ZSTLINEValidation),出现的错误消息,由于凭证有俩行,此消息将弹出俩次.

1.ZSTLINE显然对USER STONEF操作所产生的任何会计凭证都有效,比如只想限制STONE在使用FB50记帐但是F-53付款时却允许超过1000HKD,请在先决条件上再加上Tcode FB50Validationi就只对FB50有效.

2.想用Tcode比如FB50测试新建Validation,起码要求退出当前操作再进入,否则SAP会从缓冲中读数据认为还是上次的配置,结果拥护却认为配置失败,最保证的方法是从Validation IMG窗口使用/O FB50(或其它Tcode).

3.这种方法同样适用于任何其它相同情况的测试.

 

 

 

3.再谈建立Validation操作.(7-9)

 

[1]删除PrerequisiteCheck代码.

[2]合并字符字段

[3]比如对line Validation,BKFF,BSEG,SYST(如想By TcodeSYST-TCODE做条件)三对象可使用.

[4]选择rulePrerequisiteCheck(参考图7-5).

[5]可使用User ExitPrerequisiteCheck.(参考8例凭证的退代).

[6]一些常用逻辑表达式.

[7]通常使用的是Constant(常量).

1.读者也许有这样的疑问,Validation究竟是怎么工作的?很好,使用SE37Function

FI_VALIDATION_HEADERFI_VALIDATION_ITEM合适位置设置断点,就可知道更详细的程序逻辑.

另外,相关Table T001D|和相关程序GBTDMFI0|RGUGBR00,有兴趣的读者不妨研究一下.

2.另一个留给读者的疑问是,一个Validation可有多个Steps,不妨假设一Line Validation有俩Steps-STEP1Step2,它们的Prerequisite都是:BKPF-BUKRS = 5100,但是Check却不同甚至是矛盾的,Step1 checkBSEG-DMBTR <=1000.Step2-check却是BSEG-DMBTR > 1000,结果会如何?

原创粉丝点击