1、推荐原创SAP HR Schema 详解(一)一、Payroll schema 基础1、Schema 和 Function在 SAP 薪酬中, Function 为薪酬计算提供了逻辑公式。Function 执行一般的过程如在给定的薪资方法上计算薪酬税,从特定的信息类型中读取工资类型,计算奖金,并保存薪酬计算的结果。SAP 薪酬系统中有几十个 Function,有些是与国家相关的而有些不是。每个 Function 在 PE04 中定义并有文档;在 4.5 版本以上可以通过 PDSY 查看 Function 文档,在早期的版本可以通过 RPDSYS00 查看。在 SAP HR 术语中,一个薪酬 F
2、unction 与一个 ABAP Function 是不一样的。薪酬 Function 也包含 ABAP 代码,但它不像 ABAP Function 那样执行。薪酬 Function 在 Schema 中被薪酬驱动程序(假定为 PRCALCUO)所执行。Schema 是一系列 Function 以某种顺序执行的集合每个 Function 执行后把结果传给下一个 Function。Schema 可以通过 PE01 被创建和编辑,但是被保存在表 T52C0(SAP 标准 Schema )和表 T52C1(用户创建的 Schema 和修改 SAP 标准 Schema )。薪酬驱动读取 T52C0/T
3、52C1 表中的行并依次执行 Function。我们如何跳过保存在表中的薪酬 Function 而执行 ABAP 代码来完成工作呢?在 t-code PE04 中可以看到 ABPA 代码对应的每个 Function。在 Schema 中 Function 名与 ABAP Form 有关联,如薪酬 Function WPBP 映射到 ABAP form fuwpbp;Function USTAX 映射到 form fuustax。所以当薪酬驱动执行 Schema 时,它从 Schema 中取得 Function 名,然后在名称前加上FU,然后执行 perform 语句。这是一个很简单巧妙的设计。
4、2、工资类型(wage type)即工资项在很大程度上,工资类型只是包含一些数据比率,数字 和/或数量。但是更详细的,一个工资类型有几十个属性用来控制它是如何被操作和处理的。但是在最后,它在薪酬结果数据库中作为一个对象保存成比率,数字和/或数量。工资类型大多情况下用来保存一个员工薪水中收入的数量、扣除的数额和税收数额。员工的基本工资保存在一个工资类型中,作为一般用途扣除的费用保存在一个工资类型中,他们应征税的工资和税保存在工资类型中。作为员工工资的基本数据元素工资类型,也同样映射到 FI/CO 账户以记录工资上的借贷,并报告在 W-2 和税务表格上。工资类型也保存统计数据如带薪时期内工作的小时
5、数,在过去的六个月平均的周工资,或分红计算的工资的数量。工资类型保存在几个表中,但是主要是 T512W。将有更多的时间花在 T512W 表的各个方面。(重要的视图包括:V_512W_D,V_512W_O,V_512W_B 等。)工资类型有三类:模型、技术和用户。1)模型工资类型是 SAP 给客户用来作为向导创建他们自己的工资类型的。他们常常以一个字母开始,SAP 可能在系统升级或 HRSP 中添加、删除或更新他们。2)技术工资类型经常由 SAP 产生,以/ 开始。他们一般用在薪酬的特定的标准过程中,但你也可以修改他们,SAP 可能在升级的过程中或在 HRSP 中更新他们。所以,如果你曾经修改过
6、一个技术工资类型,那么要在每次升级以后或 HRSP 以后检查他们,以保证他们还有你需要的属性。并且不要删除任何技术工资类型。3)用户工资类型一般以数字开始,SAP 在升级或 HRSP 中是不会改变这些工资类型的。或 SAP 很少在升级或 HRSP 中改变这些工资类型。用户工资类型是为所有公司特定的工资支付制定的。3、Rule 和 Operation我们的一个长期客户曾经创建了一个保存界面的信息叫“薪水 Rule”!那些有经验的 SAP 薪水分析者和顾问立刻看成其中的双层含义和幽默。Rule 包含 SAP 薪水中大多基本的逻辑。其中 Schema 是 Function 的集合,Rule 是 Op
7、eration 的集合。一个 Operation 是一个非常基本的被用来操作工资类型的逻辑。例如,Operation MULTI 是乘以工资类型中的数字和比率以决定付给员工工资的数目。Operation OUTWP 获取一个员工特定的数据并决定如何去处理它。比如,如果工作合同在信息类型 1 中是 UA,那么执行x ,如果是 UB,执行y ,可以通过 t-code PE04 和 PDSY 查看 Operation,也可以通过 PE02 编辑 Operation。Function 对应的 ABAP form 是以fu开始,Operation 对应的 ABAP form 是以op开始。比如,Oper
8、ationMULTI ,将有 ABAP form opmulti。同 Schema 一样,Rule 保存在表中, Rule 被保存在表 T52C5 中。有多年计算机系统工作经验的 SAP 高级顾问们常在发现工资 Rule 和编程大型机汇编语言的类似性。然而当 Operation 被正确使用时功能强大,但这没有什么好神奇的。希望我们这个简短的介绍是有意义的。下一篇 SAP 工资技术文档中我们将更深入探讨用在 SAP 的工资 Schema 中的公共 Function。Function 最多能有 4 个参数,SAP 文档将告诉你每个参数的用法。通过 PDSY 和 PE04 能看到每个Function
9、 和 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对IF
10、Function,有 2 种方法说明真/假条件。SAP 有几个内置的条件可以在参数 2(Schema U000 中的 IF NAMC)中使用。你同时也能在参数 1 中说明一个定制的 Rule,并且在 Rule 中执行你任意想要的逻辑。在 Rule 中,使用 Operation SCOND 为 IF Function 设置真 /假转换。Pxxxx 工资驱动和 Schema 从许多信息类型中读取数据并处理数据。一般是以 P 和四位数字命名的信息类型来执行。所以,P0014 读取并处理从信息类型 14 来的数据,P0168 从信息类型 168 处理人生保险计划,P2010 从信息类型 2010 中读
11、取附加工资。许多 Function,但并非所有的 Function,允许你用工资 Rule 进一步精练此过程。例如,Schema UAP0 表明 P0014 被 RuleU011 处理过。Function P0168 是没有使用 Rule 的 Function 之一(在一些老的版本中有使用),而是在参数中说明 Operation(见 Schema UBE1)。有些信息类型在工资中被使用,但没有 Pxxx Function。这些包括信息类型 207,208,209 和 210,他们都在主税款 Function USTAX 中被读取并处理。信息类型 0,1,7 和 8 被 Function WPB
12、P 处理。PITPIT 是 Process Input Table 的首字母简写,它也是工资中最常用功能最强大的 Function 之一。当工资类型被 Pxxx Function 读入工资时,他们被保存在称为 IT(Input Table)的内部表中。PIT 通过内部表循环,并应用包含 Rule 中的逻辑。所以对于 IT 中的每个工资类型,它都将从 Rule 中申请一个逻辑。PIT 的目标是将工资类型从 IT 中移出,移入到 RT(Result Table)中。大多数情况下,被 PIT 调用的 Rule 会改变工资类型的一些属性然后把他们从 IT 中转移到 RT 中。工资类型也能留在 IT 中
13、并移到表中去。在说明 Operation 是如何工作的时候我们再解释这种可能性。PIT 的一个例子是在 Schema UAL0 中PIT X023。当工资驱动到达 Schema 的这点时,PIT 将遍历 IT 中的每个工资类型,RuleX023 告诉它做什么事是取决于工资类型在过程类 20 中的值。值为 3,4,5, 6, 9 和 B 使将把工资类型移到 RT 中,而 1,7 和 8 是将工资类型留在 IT 中,值 2 没有任何操作,但本质上其实是将工资类型从 IT 中清除。PRTPRT 是 Process Results Table 的缩写。虽然大多数工资类型处理发生在 PIT,也有几种情况
14、当你想处理工资类型时已经被转移到 RT 中。 PRT 工作原理同 PIT,通过 RT 循环,同时从 Rule 中申请逻辑。在 Schema UTX0 中,PRT 被用来处理已经在 RT 中的税款工资类型。Function UTX0(US 税款Function)直接返回它的工资类型给 RT,所以任何一个在税款工资类型中的处理都要 PRT Function 来完成。ACTIOACTI0Function 处理工资 Rule,但是它不通过工资类型表来循环,但它在不同的工作地点/基础工资记录间循环,并挨个处理它们的 Rule。例如,假设员工在当前带薪时期有 2 个信息类型 1 个记录,ACTI0 将有
15、2 条记录要循环。UTX0 Schema 是 ACTI0 使用 RuleUWH1 计算带薪时期工作的小时数的一个好的例子。像 Function 一样,Operation 的帮助文档也能通过 PDSY 和 PE04 找到。Operation 能被放在 2 个不同的组他们分布用来决策和操作工资类型。有些 Operation 刚好适用这 2 个组。操作工资类型在 Rule 中使用工资类型就好像在 ABAP 中使用内表。Function 通过把表的每一行一次性都放在 头空间来循环调用 Rule(PIT,PRT,P0014 或)。在头空间使用工资类型,完成以后在把它加回表中。MULTI, DIVID这些
16、 Operation 让你将工资类型中的两个字段相乘并将结果保存在第三个字段中。能使用的字段是 AMT,RTE 和 NUM。 MULTI RNA 将用一个数乘以比率并将结果保存在 amount 字段。DIVID ANA 将用一个数除 amount 字段并将结果保存回 amount 字段。NUM, RTE and AMT这些是非常基本的也很强大的 Operation,它们能操作他们各自字段的内容。很大情况会用到这些 Operation,F1 帮助文档是很有用的。基本情况下,设置值 NUM=1 或者 AMT=2.50,但这不是一个好的实践方法。而使用常数在表 T511K 中创建名叫 ZNUM 的常
17、数,并使 NUM=KZNUM(把 number 字段的值赋给常数 ZNUM)。因为常数是根据日期有效的,而 Rule 不是,这样当数值需要改变时使你更灵活地改变。你可以设置工资类型的头的字段等于另外一个工资类型中对应的字段AMT=E9XXX 是使 amount 等于 RT 工资类型 9XXX 中的 amount 字段。当且仅当 IT 中的 9XXX 小于 amount 域的值时,AMT,或=.你也可以用上面提到的概念将它与一个常量或另外一个工资类型进行比较。VWTCL这个 Operation 为当前的工资类型返回某个处理类的值。例如,VWTCL 93 将处理类 93 的值放在变量键里。Rule
18、X023 是如何使用处理类值的一个好例子。在前面的例子中,我们给每个基本工资类型 OBAS 的员工计算扣除数 4XXX。使用 OUTWP 你可以决定只计算在某个人事范围/子范围或员工子组的员工。假设你想计算在信息类型 14 或 15 已经进入工资类型 4XXX 的员工。假设已经进入工资类型,信息类型的 number 域也有要求的数据,你需要做以下步骤:工资类型 OBAS:ADDWT *, NUM=4XXX, 在 NUM?0 做选择,IF:如果是(等于),就什么也不做,ELSE:否则(_*条件)执行 NUM=KZNUM,MULTI ANA, AMT/-100, ADDWT 4XXX.这取决于在这
19、点你的工资类型裂片是如何组织的,你可能想在 NUM=4XXX 之前 ELIMI R,在 ADDWT 4XXX 之前 RESET R。正如前面提到的,这仅仅是隔靴搔痒。当配置薪酬时你不能仅关注某个问题,而应该理解所有的部分并力求最好的配置。你有许多的方法组合 Function,Operation,处理类和常数等。SAP 已经为薪酬创建了灵活的功能强大的配置模型。当使用正确时,许多工作就已经完成好了,当使用不正确时,发现它会引起困惑并且导致不稳定。所以要好好的测试你的配置并以文档形式记录你的配置。下面是对 Schema CN28 的部分简单阐述:BLOCK BEG *Payroll schema:
20、CHINACOM 工资 Schema :中国标准COPY XIN0 初始化工资COPY CNBD 编辑基本数据(中国)IF SPRN 特别处理运行?非周期性支付?RERSH IT 删除 IT(删除内表)ENDIF 到:特别处理运行?COPY XLR0 导入上一期工资结果COPY CNT0 工资总额( 读入时间数据)COPY CNAP 导入扣减(0014、0015 导入)COPY CNAL 确定每个月的扣减因子COPY CNNG 净支付(净工资)计算( 中国)COPY XNA0 累计净支付的值COPY XRR0 回溯(反算)COPY XNN0 净支付/扣减 和 传输COPY CNEN 最后处理B
21、LOCK END *中国 工资核算Function(Function)BLOCK描述:BLOCK Function 允许你构造一个工资核算过程日志。在开始和结束标记点中把工资 Function按语义顺序聚集在一起,且他们出现在日志中的一个普通节点。语法:Function 参数 1 参数 2 参数 3 参数 4FUNCTION BLOCK Function 名称参数 1 BEG 开始一个语义块END 结束一个语义块参数 2 目前无该参数参数 3 目前无该参数参数 4 目前无该参数说明:BLOCK Function 可以被嵌套,在一个子 Schema 中,一个结束块必须对应一个开始块Schema
22、XIN0 初始化工资数据(国际)人员计算 Schema 重要的信息/事件(开关),哪一些有关工资核算的进一步过程,工资运行开始在这个子 Schema 中指定。结构:子 Schema 由下述步骤组成:1、 指定程序类型(工资核算或评估)2、 设置数据库更新开关(YES/NO)3、 必需的信息类型(导入仅仅是 schema 所需的主数据信息类型)4、 导入所有时间信息类型5、 指定检查控制记录 PA03(测试或激活生产)参数 1 参数 2 参数 3 参数 4 COM 注释 :工资发放核算初始化BLOCK BEG 块开始:PGM ABR 工资发放的程序类型UPD YES 更新数据库(是/否)OPT INFT 只使用信息类型的读取