CN00 与CN28 区别

做过SAP HR的大都知道,SAP在中国区提供的Payroll schema有两个,一个是CN00,一个是CN28.两者最大的区别是,一个是把计税的结果带到当月,另外一个是把税基带到当月.

我现在碰到了一个客户,它的需求是,如果上月员工有发薪水(存在Payroll result),那么就把税基带到本月,如果上月员工薪水就没有发,那么就把税的结果带到本月:

于是我便仔细研究这两个schema的差别的出结果如下

首先来看看SAP标准的schema处理两种算税模式时候的差别:

1.         CN00:带计税结果到当月

CN28:带税基到当月

2.         CN00中使用的是CNNT

CN28中使用的是CNNG

3.         CNNT中使用的是CNTX

CNNG中使用的是CNTG

4.         CNTX的Source COde如下:

Line   Func. Par1 Par2 Par3 Par4 D Text

000010 BLOCK BEG                   Process individual income tax

000020 PIT   CN15 P67  NOAB        Taxable foreign wage need spec exchange

000030 CNGRO                       Re-convert foreign currency amount

000040 PIT   CNBN P66  NOAB        Process bonus need to caclculate tax sep

000050 PIT   CNSS P70  NOAB        Process special salary related income se

000060 PIT   CNMV      NOAB        Save tax base before gross-up /40X->/44X

000070 CNGRS                       Gross up for the EE tax paid be ER.

000080 CNTAX                       Tax calculation

000090 CNSOT                       Calculate stock options income tax

000100 CNTXR                       Calculation for tax partially paid by ER

000110 BLOCK END                   Process individual income tax

CNTG的Source Code如下:

000010 BLOCK BEG                   Process individual income tax

000020 PIT   CN15 P67  NOAB        Taxable foreign wage need spec exchange

000030 CNGRO                       Re-convert foreign currency amount

000040 PIT   CNBN P66  NOAB        Process bonus need to caclculate tax sep

000050 PIT   CNSS P70  NOAB        Process special salary related income se

000060 PIT   CNMV      NOAB        Save tax base before gross-up /40X->/44X

000070 COPY  CNTL                  Get influx WT from LRT for tax base

000080 IF         O                Original Period

000090 CNGRS                       Gross up for the EE tax paid be ER.

000100 CNTAX                       Tax calculation

000110 CNSOT                       Calculate stock options income tax

000120 CNTXR                       Calculation for tax partially paid by ER

000130 ELSE                        Form Tax base diff and move ORT to RT

000140 COPY  CNTR                  Form diff for tax base

000150 ENDIF                       End of IF form tax base diff.

000160 BLOCK END                   Process individual income tax

5.         CNTR的code如下:

Line   Func. Par1 Par2 Par3 Par4 D Text

000010 BLOCK BEG                   Form diffrence and move ORT to RT

000020 LPBEG      RC               Loop over old results

000030 IMPRT      O                    Import old result (’x’ in ‘y-1′)

000040 PRINT NP   ORT              Print ORT

000050 LPEND                       Endloop

000060 IF         LPRC             If: there is old result

000070 PIT   CNL7      NOAB        Form diff. to influx, TAX base

000080 PORT  CNL8      NOAB        Get retro-relevant wage types

000090 PORT  CNL5      NOAB        Move old Data from ORT to IT

000100 ELSE                        No old results, calculate the tax

000110 PIT   CNLB      NOAB        Form diff. to influx, TAX base

000120 ENDIF                       End of if LPRC

000130 BLOCK END                   Form difference and move ORT to RT

通过观察发现,最重要的差别是,在CNTG这个schema中,会判断计算的是不是当前薪资周期的薪资,如果不是的话,只做税基的加总,如果是的话,则利用之前加总起来的的税基来算税.

最后的解决方式如下,中心思想是:不管是不是当期,只要有旧薪资结果,就计算税基差往当期里面加。只要没有,那就直接在当期算税,算完后再往当前的薪资结果里面加

1:copy CN28到ZCN1

2:将ZCN1中的CNNG改为ZNNG

3:ZNNG为将CNNG中的CNTG改为ZNTG

4:ZNTG如下:

Cmmnd

Line   Func. Par1 Par2 Par3 Par4 D Text

000010 BLOCK BEG                   Process individual income tax

000020 PIT   CN15 P67  NOAB        Taxable foreign wage need spec exchange

000030 CNGRO                       Re-convert foreign currency amount

000040 PIT   CNBN P66  NOAB        Process bonus need to caclculate tax se

000050 PIT   CNSS P70  NOAB        Process special salary related income s

000060 PIT   CNMV      NOAB        Save tax base before gross-up /40X->/44

000070 COPY  CNTL                  Get influx WT from LRT for tax base

000080 IF         O              * Original Period

000090 LPBEG      RC

000100 IMPRT      O

000110 LPEND

000120 IF         LPRC

000130 COPY  CNTR                  Form diff for tax base

000140 ELSE                        Form Tax base diff and move ORT to RT

000150 CNGRS                       Gross up for the EE tax paid be ER.

000160 CNTAX                       Tax calculation

000170 CNSOT                       Calculate stock options income tax

000180 CNTXR                       Calculation for tax partially paid by E

000190 ENDIF                       End of IF form tax base diff.

000200 ELSE                      *

000210 COPY  CNTR                *

000220 ENDIF                     *

000230 BLOCK END                   Process individual income tax

时间: 2024-10-10 12:00:59

CN00 与CN28 区别的相关文章

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

mysql中int、bigint、smallint和tinyint的区别与长度

对比发现 int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int             -------     int(11) bigint       -------     bigint(20) smallint   -------     smallint(6) tinyint     -------     tinyint(4) 下面是这几种类型的取值范围 参考:http://www.2cto.com/d

call和apply和bind的区别

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」. apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组function.apply(thisobj, args) 或者 function.apply(thisobj, args) 1.thisobj

mybatis中"#"和"$"的区别

mybatis中"#"和"$"的区别 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}. 在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别: select * from user where name = #{name}; select * from

mybatis与hibernate的区别

本文转载自:http://blog.csdn.net/wangpeng047/article/details/17038659 以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动. hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调