FI凭证的有效检查Validation/Substitution

 

转:

凭证的有效检查

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,结果会如何?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javax.validation.ValueExtraction.ValueExtractorDeclarationException是JavaX Validation库中的一个异常类。当尝试声明一个自定义的ValueExtractor时,如果出现错误或者该ValueExtractor的声明有问题,就会抛出这个异常。 该异常一般是由于以下原因引起的: 1. 注解参数不正确:在声明自定义ValueExtractor时,参数的类型或数量可能不正确,导致声明异常。需要检查参数类型是否匹配,确保使用正确的参数。 2. 忘记实现必要的方法:在自定义ValueExtractor中,必须实现ValueExtractor接口的extractValues方法来提取值。如果忘记实现该方法或者方法的签名不正确,就会抛出该异常。 3. 不正确的类型参数:当声明ValueExtractor时,必须指定该ValueExtractor适用的类型参数。如果指定的类型参数不正确或者不与提取的值匹配,就会抛出异常。 解决该异常的方法包括: 1. 检查参数的正确性:仔细检查声明ValueExtractor时使用的参数类型和数量是否正确,确保参数的匹配性。 2. 实现必要的方法:确保在自定义的ValueExtractor类中正确实现ValueExtractor接口的extractValues方法,并确保方法的签名正确。 3. 检查类型参数:确保声明的ValueExtractor中的类型参数与要提取的值的类型匹配,避免类型参数错误导致异常。 总之,javax.validation.ValueExtraction.ValueExtractorDeclarationException是JavaX Validation库中的异常类,用于指示自定义ValueExtractor的声明存在问题。通过检查参数的正确性、实现必要的方法和检查类型参数,可以解决这个异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值