SAP工资核算Schema的介绍
Rule和Operation
我们的一个长期客户曾经创建了一个保存界面的信息叫“薪水Rule”!那些有经验的SAP薪水分析者和顾问立刻看成其中的双层含义和幽默。Rule包含SAP薪水中大多基本的逻辑。其中Schema是Function的集合,Rule是Operation的集合。一个Operation是一个非常基本的被用来操作WageType的逻辑。例如,OperationMULTI是乘以WageType中的数字和比率以决定付给员工工资的数目。OperationOUTWP获取一个员工特定的数据并决定如何去处理它。比如,如果工作合同在信息类型1中是UA,那么执行‘x’,如果是UB,执行‘y’,其他的执行‘z’。
我们的一个长期客户曾经创建了一个保存界面的信息叫“薪水Rule”!那些有经验的SAP薪水分析者和顾问立刻看成其中的双层含义和幽默。Rule包含SAP薪水中大多基本的逻辑。其中Schema是Function的集合,Rule是Operation的集合。一个Operation是一个非常基本的被用来操作WageType的逻辑。例如,OperationMULTI是乘以WageType中的数字和比率以决定付给员工工资的数目。OperationOUTWP获取一个员工特定的数据并决定如何去处理它。比如,如果工作合同在信息类型1中是UA,那么执行‘x’,如果是UB,执行‘y’,其他的执行‘z’。
可以通过t-code PE04和PDSY查看Operation,也可以通过PE02编辑Operation。Function对应的ABAP form是以‘fu’开始,Operation对应的ABAP form是以‘op’开始。比如,OperationMULTI,将有ABAP form ‘opmulti’。同Schema一样,Rule保存在表中,Rule被保存在表T52C5中。
有多年计算机系统工作经验的SAP高级顾问们常在发现工资Rule和编程大型机汇编语言的类似性。然而当Operation被正确使用时功能强大,但这没有什么好神奇的。
希望我们这个简短的介绍是有意义的。下一篇SAP工资技术文档中我们将更深入探讨用在SAP的工资Schema中的公共Function。
Function最多能有4个参数,SAP文档将告诉你每个参数的用法。通过PDSY和PE04能看到每个Function和Operation。
COPY 这与ABAP和其他编程语言中的‘include’相同。当工资执行时,Copy是插入包含在参数1中的Schema。好的Schema配置风格和好的编程风格是一样的-将公共使用的逻辑放在‘include’中,这样能被用于多个地方,同时也增加可读性。
BLOCK 在4.0版中,Schema日志是放在树状结构中的。BLOCK BEG开始一个节点,BLOCK END结束一个节点。在BEG和END之间是包含在节点中。BLOCK BEG/END能被多层嵌套。同时,适当的放置BLOCK BEG/END,使日志更方便读。
IF/ELSE/ENDIF 对IFFunction,有2种方法说明真/假条件。SAP有几个内置的条件可以在参数2(SchemaU000中的IF NAMC)中使用。你同时也能在参数1中说明一个定制的Rule,并且在Rule中执行你任意想要的逻辑。在Rule中,使用OperationSCOND为IFFunction设置真/假转换。
Pxxxx 工资驱动和Schema从许多信息类型中读取数据并处理数据。一般是以P和四位数字命名的信息类型来执行。所以,P0014读取并处理从信息类型14来的数据,P0168从信息类型168处理人生保险计划,P2010从信息类型2010中读取附加工资。许多Function,但并非所有的Function,允许你用工资Rule进一步精练此过程。例如,SchemaUAP0表明P0014被RuleU011处理过。FunctionP0168是没有使用Rule的Function之一(在一些老的版本中有使用),而是在参数中说明Operation(见SchemaUBE1)。
有些信息类型在工资中被使用,但没有PxxxFunction。这些包括信息类型207,208,209和210,他们都在主税款FunctionUSTAX中被读取并处理。信息类型0,1,7和8被FunctionWPBP处理。
PIT PIT是Process Input Table的首字母简写,它也是工资中最常用功能最强大的Function之一。当WageType被PxxxFunction读入工资时,他们被保存在称为IT(Input Table)的内部表中。PIT通过内部表循环,并应用包含在Rule中的逻辑。所以对于IT中的每个WageType,它都将从Rule中申请一个逻辑。
PIT的目标是将WageType从IT中移出,移入到RT(Result Table)中。大多数情况下,被PIT调用的Rule会改变WageType的一些属性然后把他们从IT中转移到RT中。WageType也能留在IT中并移到其他表中去。在说明Operation是如何工作的时候我们再解释这种可能性。S
PIT的一个例子是在SchemaUAL0中-PIT X023。当工资驱动到达Schema的这点时,PIT将遍历IT中的每个WageType,RuleX023告诉它做什么事是取决于WageType在过程类20中的值。值为3,4,5,6,9和B使将把WageType移到RT中,而1,7和8是将WageType留在IT中,值2没有任何操作,但本质上其实是将WageType从IT中清除。
PRT PRT是Process Results Table的缩写。虽然大多数WageType处理发生在PIT,也有几种情况当你想处理WageType时已经被转移到RT中。PRT工作原理同PIT,通过RT循环,同时从Rule中申请逻辑。
在SchemaUTX0中,PRT被用来处理已经在RT中的税款WageType。FunctionUTX0(US 税款Function)直接返回它的WageType给RT,所以任何一个在税款WageType中的处理都要PRTFunction来完成。
ACTIO ACTI0 Function处理工资Rule,但是它不通过WageType表来循环,但它在不同
的工作地点/基础工资记录间循环,并挨个处理它们的Rule。例如,假设员工在当前带薪时期有2个信息类型1个记录,ACTI0将有2条记录要循环。
UTX0Schema是ACTI0使用RuleUWH1计算带薪时期工作的小时数的一个好的例子。
象Function一样,Operation的文档也能通过PDSY和PE04到。Operation能被放在2个不同的组-他们分布用来决策和操作WageType。有些Operation刚好适用这2个组。
操作WageType
在Rule中使用WageType就好像在ABAP中使用内表。Function通过把表的每一行一次性都放在‘头’空间来循环调用Rule(PIT,PRT,P0014或其他)。在头空间使用WageType,完成以后在把它加回表中。
MULTI, DIVID 这些Operation让你将WageType中的两个字段相乘并将结果保存在第三
个字段中。能使用的字段是AMT,RTE和NUM。MULTI RNA将用一个数乘以比率并将结果保存在amount计算机编程工资多少字段。DIVID ANA将用一个数除amount字段并将结果保存回amount字段。
NUM, RTE and AMT 这些是非常基本的也很强大的Operation,它们能操作他们各自字段的内容。很大情况会用到这些Operation,F1帮助文档是很有用的。基本情况下,设置值NUM=1 或者AMT=2.50,但这不是一个好的实践方法。而使用常数-在表T511K中创建名叫ZNUM的常数,并使NUM=KZNUM(把number字段的值赋给常数ZNUM)。因为常数是根据日期有效的,而Rule不是,这样当数值需要改变时使你更灵活地改变。
你可以设置WageType的头的字段等于另外一个WageType中对应的字段-AMT=E9XXX是使amount等于RTWageType9XXX中的amount字段。当且仅当IT中的9XXX小于amount域的值时,AMT<9XXX 将amount域设置为IT中的9XXX(取两个值中的较小者)
最后,你可以使用值上的算法。RTE*100是rate字段的内容乘以100并把结果保存会rate字段。
AMT*KZNUM是amount字段被常数ZNUM中的值相乘,ZNUM中的值可以是任意数。
ADDWT 至此,我们已经使用MULTI,DIVID,AMT,RTE和NUM设置我们的WageType的值。ADDWT将头中的WageType转不改变值或改变值后移到其他的表。ADDWTE*是不改变WageType的数值加到RT中。ADDWTE9XXX将它重命名为9XXX然后转移到RT中。用F1帮助文档将告诉你所有这些你能转移到的表。
ELIMI and RESET 裂片是用于将WageType连接到工资中其他表的属性。有时你在做某个Rule时不得不移除某个裂片-这就是ELIMI做的(ELIMInate 裂片)。在删除一个WageType的裂片后,你可以使用RESET重新保存他们。一般来说,你应该避免删除裂片-因为这可能导致比率和报表出错。所以使用和测试时要小心。
FILLF 这个简单的Operation能重置wagetype域的值。例如,FILLF A是在Rule第一次被调用时将amount重置回原来的值。
这里你将把把所有这些Operation集合在一起在基本工资的基础上计算固定比例的扣除数(有几种方法计算,这里仅介绍一种)。假设基础工资在IT值,比率作为一个完整的数保存在常数ZNUM中,你制定了一个Rule包含了WageType****和基础工资,在这个例子中用‘OBAS’。扣除的部分将是4XXX。所以,在这个Schema中我们将在RuleZ001中执行一个PIT:PIT Z001。在Rule中:
WageType****:ADDWT *(如果它不是OBAS,我们就不改变它)。
Rule类型OBAS:ADDWT*, NUM=KZNUM,MULTI ANA, AMT/-100, ADDWT 4XXX(将OBAS传到输出表,这样我们就不会丢失它了,设置number域等于常数ZNUM,用amount乘以number,因为我们将百分比作为一个完整的数保存并且我们希望这个扣除数是负数,所以用-100除amount,并把结果作为WageType4XXX保存。
决策
很多次我们只需在某种条件存在时执行某个动作-比如,我们只想为某种员工计算扣除数4XXX。在这种情况下,我们必须选择什么时候执行这个动作。
Decisions将结果放入称为变量的键中-这就象一个带有通配符的描述。如果我们把公司代码放在一个变量键只,那么含有1234的行将为公司1234执行,含有2***的行将为任何以2打头的公司执行,而****将为所有任意匹配的公司执行。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论