做过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