2020 新税法工资计算

用ABAP 写的一个工资税计算程序,按新税法累计计算个税,工资越高越到后面扣的多、。。。。。

举例 8000 和 30000

工资8000:

工资30000

*&---------------------------------------------------------------------*
*& Report Z_CALCULATE_PAYROLL_TAX
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_calculate_payroll_tax.


SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-000.

PARAMETERS: p_year  TYPE char4 , "DEFAULT '2020',
            p_month TYPE char2.

PARAMETERS: p_payr TYPE p DECIMALS 2 MODIF ID pay,
            p_ded1 TYPE i MODIF ID de1,
            p_ded2 TYPE p DECIMALS 2 MODIF ID de2.


SELECTION-SCREEN END OF BLOCK bl1.

TYPES:BEGIN OF ty_tax,

        level     TYPE i,
        low       TYPE i,
        high      TYPE i,
        pecent    TYPE p DECIMALS 2,
        de_amount TYPE i,
      END OF ty_tax.

DATA:gt_tax TYPE STANDARD TABLE OF ty_tax,
     gs_tax TYPE ty_tax.


TYPES:BEGIN OF ty_tax_cal,

        month       TYPE i,
        payroll     TYPE p DECIMALS 2,
        ded1        TYPE p DECIMALS 2,
        ded2        TYPE p DECIMALS 2,
        payroll_cal TYPE p DECIMALS 2,
        tax         TYPE p DECIMALS 2,
      END OF ty_tax_cal.
DATA:gt_month TYPE STANDARD TABLE OF ty_tax_cal,
     gs_month TYPE ty_tax_cal.
DATA:gt_month_tmp TYPE STANDARD TABLE OF ty_tax_cal,
     gs_month_tmp TYPE ty_tax_cal.


INITIALIZATION.

  PERFORM frm_init.

  p_year = sy-datum+0(4).
  p_month = 12.

START-OF-SELECTION.

END-OF-SELECTION.

  PERFORM frm_calculate_tax.

FORM frm_init.

  REFRESH gt_tax.
  CLEAR gs_tax.

  gs_tax-level = 1.
  gs_tax-low = 0.
  gs_tax-high = 36000.
  gs_tax-pecent = '0.03'.
  gs_tax-de_amount = 0.
  APPEND gs_tax TO gt_tax.


  gs_tax-level = 2.
  gs_tax-low = 36000.
  gs_tax-high = 144000.
  gs_tax-pecent = '0.1'.
  gs_tax-de_amount = 2520.
  APPEND gs_tax TO gt_tax.

  gs_tax-level = 3.
  gs_tax-low = 144000.
  gs_tax-high = 300000.
  gs_tax-pecent = '0.2'.
  gs_tax-de_amount = 16920.
  APPEND gs_tax TO gt_tax.

  gs_tax-level = 4.
  gs_tax-low = 300000.
  gs_tax-high = 420000.
  gs_tax-pecent = '0.25'.
  gs_tax-de_amount = 31920.
  APPEND gs_tax TO gt_tax.

  gs_tax-level = 5.
  gs_tax-low = 420000.
  gs_tax-high = 660000.
  gs_tax-pecent = '0.3'.
  gs_tax-de_amount = 52920.
  APPEND gs_tax TO gt_tax.

  gs_tax-level = 6.
  gs_tax-low = 660000.
  gs_tax-high = 960000.
  gs_tax-pecent = '0.35'.
  gs_tax-de_amount = 85920.
  APPEND gs_tax TO gt_tax.

  gs_tax-level = 7.
  gs_tax-low = 960000.
  gs_tax-high = 9960000.
  gs_tax-pecent = '0.45'.
  gs_tax-de_amount = 181920.
  APPEND gs_tax TO gt_tax.


  REFRESH gt_month.
  CLEAR gs_month.



ENDFORM.


FORM frm_calculate_tax.

*按税率计算税额

  DATA lv_month TYPE i.

  DATA lv_time TYPE i.
  lv_month = 0.
  lv_time = p_month.
  DO lv_time TIMES.

    lv_month = lv_month + 1.
    gs_month-month = lv_month."月份
    gs_month-payroll = p_payr * lv_month."累计工资
    gs_month-ded1 = p_ded1 * lv_month. "累计附加扣除
    gs_month-ded2 = p_ded2 * lv_month. "累计扣的五险一金
    gs_month-payroll_cal = gs_month-payroll - gs_month-ded1 - gs_month-ded2 - 5000 * lv_month."总工资扣除总的五险一金和累计附加扣除后用于计算税的部分
    APPEND gs_month TO gt_month.

  ENDDO.


  LOOP AT gt_month INTO gs_month.


    LOOP AT gt_tax INTO gs_tax WHERE low < gs_month-payroll_cal AND high >= gs_month-payroll_cal.

      gs_month-tax = gs_month-payroll_cal * gs_tax-pecent - gs_tax-de_amount.
    ENDLOOP.

    MODIFY gt_month FROM gs_month.

  ENDLOOP.

  REFRESH gt_month_tmp.

  APPEND LINES OF gt_month TO gt_month_tmp.

  SORT gt_month_tmp BY month DESCENDING.


  DATA lv_tax TYPE p DECIMALS 2.
*扣除之前扣掉的税额
  LOOP AT gt_month INTO gs_month.

    LOOP AT gt_month_tmp INTO gs_month_tmp WHERE month < gs_month-month.

      gs_month-tax = gs_month-tax - gs_month_tmp-tax.
      EXIT.
    ENDLOOP.

    MODIFY gt_month FROM gs_month.

    WRITE : / gs_month-month,gs_month-tax.
   " WRITE :'\n'.

    lv_tax = lv_tax + gs_month-tax.
   CLEAR gs_month.

  ENDLOOP.


WRITE:/ '总共' && lv_tax.

ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值