SAP工资核算Schema的介绍
RuleOperation
我们的一个长期客户曾经创建了一个保存界面的信息叫薪水Rule”!那些有经验的SAP薪水分析者和顾问立刻看成其中的双层含义和幽默。Rule包含SAP薪水中大多基本的逻辑。其中SchemaFunction的集合,RuleOperation的集合。一个Operation是一个非常基本的被用来操作WageType的逻辑。例如,OperationMULTI是乘以WageType中的数字和比率以决定付给员工工资的数目。OperationOUTWP获取一个员工特定的数据并决定如何去处理它。比如,如果工作合同在信息类型1中是UA,那么执行‘x’,如果是UB,执行‘y’,其他的执行‘z’

可以通过t-code PE04PDSY查看Operation,也可以通过PE02编辑OperationFunction对应的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文档将告诉你每个参数的用法。通过PDSYPE04能看到每个FunctionOperation

COPY        这与ABAP和其他编程语言中的‘include’相同。当工资执行时,Copy是插入包含在参数1中的Schema。好的Schema配置风格和好的编程风格是一样的-将公共使用的逻辑放在‘include’中,这样能被用于多个地方,同时也增加可读性。

BLOCK        4.0版中,Schema日志是放在树状结构中的。BLOCK BEG开始一个节点,BLOCK END结束一个节点。在BEGEND之间是包含在节点中。BLOCK BEG/END能被多层嵌套。同时,适当的放置BLOCK BEG/END,使日志更方便读。

IF/ELSE/ENDIF        IFFunction,有2种方法说明真/假条件。SAP有几个内置的条件可以在参数2SchemaU000中的IF NAMC)中使用。你同时也能在参数1中说明一个定制的Rule,并且在Rule中执行你任意想要的逻辑。在Rule中,使用OperationSCONDIFFunction设置真/假转换。

Pxxxx        工资驱动和Schema从许多信息类型中读取数据并处理数据。一般是以P和四位数字命名的信息类型来执行。所以,P0014读取并处理从信息类型14来的数据,P0168从信息类型168处理人生保险计划,P2010从信息类型2010中读取附加工资。许多Function,但并非所有的Function,允许你用工资Rule进一步精练此过程。例如,SchemaUAP0表明P0014RuleU011处理过。FunctionP0168是没有使用RuleFunction之一(在一些老的版本中有使用),而是在参数中说明Operation(见SchemaUBE1)。

有些信息类型在工资中被使用,但没有PxxxFunction。这些包括信息类型207208209210,他们都在主税款FunctionUSTAX中被读取并处理。信息类型0178FunctionWPBP处理。

PIT        PITProcess Input Table的首字母简写,它也是工资中最常用功能最强大的Function之一。当WageTypePxxxFunction读入工资时,他们被保存在称为ITInput Table)的内部表中。PIT通过内部表循环,并应用包含在Rule中的逻辑。所以对于IT中的每个WageType,它都将从Rule中申请一个逻辑。

PIT的目标是将WageTypeIT中移出,移入到RTResult Table)中。大多数情况下,被PIT调用的Rule会改变WageType的一些属性然后把他们从IT中转移到RT中。WageType也能留在IT中并移到其他表中去。在说明Operation是如何工作的时候我们再解释这种可能性。S

PIT的一个例子是在SchemaUAL0中-PIT X023。当工资驱动到达Schema的这点时,PIT将遍历IT中的每个WageTypeRuleX023告诉它做什么事是取决于WageType在过程类20中的值。值为34569B使将把WageType移到RT中,而178是将WageType留在IT中,值2没有任何操作,但本质上其实是将WageTypeIT中清除。

PRT        PRTProcess Results Table的缩写。虽然大多数WageType处理发生在PIT,也有几种情况当你想处理WageType时已经被转移到RT中。PRT工作原理同PIT,通过RT循环,同时从Rule中申请逻辑。

SchemaUTX0中,PRT被用来处理已经在RT中的税款WageTypeFunctionUTX0US 税款Function)直接返回它的WageTypeRT,所以任何一个在税款WageType中的处理都要PRTFunction来完成。

ACTIO        ACTI0 Function处理工资Rule,但是它不通过WageType表来循环,但它在不同
的工作地点/基础工资记录间循环,并挨个处理它们的Rule。例如,假设员工在当前带薪时期有2个信息类型1个记录,ACTI0将有2条记录要循环。

UTX0SchemaACTI0使用RuleUWH1计算带薪时期工作的小时数的一个好的例子。

Function一样,Operation的文档也能通过PDSYPE04到。Operation能被放在2个不同的组-他们分布用来决策和操作WageType。有些Operation刚好适用这2个组。

操作WageType
Rule中使用WageType就好像在ABAP中使用内表。Function通过把表的每一行一次性都放在空间来循环调用RulePITPRTP0014或其他)。在头空间使用WageType,完成以后在把它加回表中。

MULTI, DIVID        这些Operation让你将WageType中的两个字段相乘并将结果保存在第三
个字段中。能使用的字段是AMTRTENUMMULTI RNA将用一个数乘以比率并将结果保存在amount计算机编程工资多少字段。DIVID ANA将用一个数除amount字段并将结果保存回amount字段。

NUM, RTE and AMT        这些是非常基本的也很强大的Operation,它们能操作他们各自字段的内容。很大情况会用到这些OperationF1帮助文档是很有用的。基本情况下,设置值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*100rate字段的内容乘以100并把结果保存会rate字段。
AMT*KZNUMamount字段被常数ZNUM中的值相乘,ZNUM中的值可以是任意数。

ADDWT        至此,我们已经使用MULTI,DIVID,AMT,RTENUM设置我们的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中执行一个PITPIT Z001。在Rule中:
WageType****:ADDWT *(如果它不是OBAS,我们就不改变它)
Rule类型OBASADDWT*, NUM=KZNUM,MULTI ANA, AMT/-100, ADDWT 4XXX(OBAS传到输出表,这样我们就不会丢失它了,设置number域等于常数ZNUM,用amount乘以number,因为我们将百分比作为一个完整的数保存并且我们希望这个扣除数是负数,所以用-100amount,并把结果作为WageType4XXX保存。

决策
很多次我们只需在某种条件存在时执行某个动作-比如,我们只想为某种员工计算扣除数4XXX。在这种情况下,我们必须选择什么时候执行这个动作。

Decisions将结果放入称为变量的键中-这就象一个带有通配符的描述。如果我们把公司代码放在一个变量键只,那么含有1234的行将为公司1234执行,含有2***的行将为任何以2打头的公司执行,而****将为所有任意匹配的公司执行。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。