Vous êtes sur la page 1sur 11

* Internal Tables

DATA:
lt_rgdir_all TYPE STANDARD TABLE OF pc261,
lt_results TYPE payin_result,
lt_wagetxt TYPE STANDARD TABLE OF t512t.

* Strectures
DATA:
ls_pa0185 TYPE pa0185,
ls_t005u TYPE t005u,
ls_pa0001 TYPE pa0001,
ls_dy_wages TYPE zst_tax_form.

* Variables
DATA:
lv_srtza TYPE srtza,
lv_pc261 TYPE pc261a,
lv_year TYPE char4,
lv_year1 TYPE char4,
lv_month TYPE fcltx,
lv_pay_begin TYPE begda,
lv_cluster TYPE relid_pcl,
lv_leaex TYPE pin_leaex,
lv_gryex TYPE pin_leaex,
lv_vrsex TYPE pin_leaex,
lv_projected_month TYPE char2,
lv_pay_end TYPE endda.

FIELD-SYMBOLS:
<fs_forperiod> LIKE LINE OF hrdata-dim_forperiod,
<fs_emp_sgroup> LIKE LINE OF hrdata-dim_employee_sgroup,
<fs_pers_area> LIKE LINE OF hrdata-dim_pers_area,
<fs_pay_result> LIKE LINE OF hrdata-star_pay_result,
<fs_rgdir> TYPE pc261,
<fs_crt> TYPE pc208,
<fs_ccode> LIKE LINE OF hrdata-dim_company_code,
<fs_employee> LIKE LINE OF hrdata-dim_employee.

*********************************************************************

*BREAK-POINT. "--santosh

SELECT SINGLE relid


FROM t500l
INTO lv_cluster
WHERE molga EQ '40'.

SELECT mandt
sprsl
molga
lgart
lgtxt
kztxt
FROM t512t
INTO TABLE lt_wagetxt
WHERE sprsl = 'E' AND
molga = '40'.

SORT lt_wagetxt BY lgart.


DATA lv_index TYPE i.

DESCRIBE TABLE hrdata-dim_forperiod LINES lv_index.


READ TABLE hrdata-dim_forperiod
ASSIGNING <fs_forperiod> INDEX lv_index.
IF sy-subrc EQ 0.
lv_pay_begin = <fs_forperiod>-key-begin_date.
lv_pay_end = <fs_forperiod>-key-end_date.

* Selecting Month Text


SELECT ltx
FROM t247
INTO lv_month
WHERE spras EQ 'E'
AND mnr EQ <fs_forperiod>-key-begin_date+4(2).
ENDSELECT.

* Assigning Year
lv_year = <fs_forperiod>-key-begin_date+0(4).

* Concatenation for period


CONCATENATE lv_month '-' lv_year INTO gv_period
SEPARATED BY space.

* Financial Year
IF lv_pay_begin+4(2) LT '04'.
CLEAR lv_year1.

lv_year1 = lv_year - 1.
CONCATENATE lv_year1 '-' lv_year INTO gv_financial_year.

ELSE.
CLEAR lv_year1.

lv_year1 = lv_year + 1.
CONCATENATE lv_year '-' lv_year1 INTO gv_financial_year.

ENDIF.

* Assessment Year
CLEAR lv_year1.
lv_year1 = ( gv_financial_year+5(4) + 1 ).
CONCATENATE gv_financial_year+5(4) '-' lv_year1 INTO gv_assessment_year.

* Projected Years
IF lv_pay_begin+4(2) EQ '04'.
lv_projected_month = '11'.
ELSEIF lv_pay_begin+4(2) EQ '05'.
lv_projected_month = '10'.
ELSEIF lv_pay_begin+4(2) EQ '06'.
lv_projected_month = '09'.
ELSEIF lv_pay_begin+4(2) EQ '07'.
lv_projected_month = '08'.
ELSEIF lv_pay_begin+4(2) EQ '08'.
lv_projected_month = '07'.
ELSEIF lv_pay_begin+4(2) EQ '09'.
lv_projected_month = '06'.
ELSEIF lv_pay_begin+4(2) EQ '10'.
lv_projected_month = '05'.
ELSEIF lv_pay_begin+4(2) EQ '11'.
lv_projected_month = '04'.
ELSEIF lv_pay_begin+4(2) EQ '12'.
lv_projected_month = '03'.
ELSEIF lv_pay_begin+4(2) EQ '01'.
lv_projected_month = '02'.
ELSEIF lv_pay_begin+4(2) EQ '02'.
lv_projected_month = '01'.

ENDIF.

ENDIF.

* Read
READ TABLE hrdata-dim_employee
ASSIGNING <fs_employee> INDEX 1.
IF sy-subrc EQ 0.

* Select
SELECT SINGLE *
FROM pa0185
INTO ls_pa0185
WHERE pernr EQ <fs_employee>-key-personnel_number
AND subty EQ '02'
AND endda GE lv_pay_end
AND begda LE lv_pay_begin.

* PAN Number
IF ls_pa0185-icnum IS NOT INITIAL.
gv_pan_num = ls_pa0185-icnum.
ENDIF.

* Select personnel Area and Subarea.


SELECT SINGLE *
FROM pa0001
INTO ls_pa0001
WHERE pernr EQ <fs_employee>-key-personnel_number
AND endda GE lv_pay_end
AND begda LE lv_pay_begin.

IF ls_pa0001 IS NOT INITIAL.

* Sort
SORT hrdata-dim_employee_sgroup.

* Employee Sub-Group Text


READ TABLE hrdata-dim_employee_sgroup
ASSIGNING <fs_emp_sgroup>
WITH KEY key = ls_pa0001-persk
BINARY SEARCH.
IF sy-subrc EQ 0.

gv_emp_sgroup = <fs_emp_sgroup>-text.

ENDIF.
ENDIF.

* Sort
SORT hrdata-star_ity_pers_struct.
BREAK-POINT.
* Personnel Area Text
READ TABLE hrdata-dim_pers_area
ASSIGNING <fs_pers_area>
WITH KEY key-pers_area = ls_pa0001-werks
BINARY SEARCH.
IF sy-subrc EQ 0.

gv_pers_area = <fs_pers_area>-text.

ENDIF.

*--

* Reading RT table values


LOOP AT hrdata-star_pay_result ASSIGNING <fs_pay_result>.
**********************************************************************
IF <fs_pay_result>-wagetype_key-wagetype IS NOT INITIAL AND
<fs_pay_result>-pay_amount NE '0.00'.

ls_dy_wages-zwagetype = <fs_pay_result>-wagetype_key-wagetype.
ls_dy_wages-zcurrent = <fs_pay_result>-pay_amount.
ls_dy_wages-zprojected = ls_dy_wages-zcurrent * lv_projected_month.

READ TABLE lt_wagetxt


ASSIGNING FIELD-SYMBOL(<fs_wtxt>)
WITH KEY lgart = <fs_pay_result>-wagetype_key-wagetype.
IF sy-subrc EQ 0.

ls_dy_wages-zwagetxt = <fs_wtxt>-lgtxt.

ENDIF.

APPEND ls_dy_wages TO gt_dy_wages.


CLEAR:ls_dy_wages.
ENDIF.

**********************************************************************
****---------------------------------------------------------------------
*** Case <fs_pay_result>-wagetype_key-wagetype.
***
*** when '1010'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1010 = <fs_pay_result>-pay_amount. "Basic
*** gv_p1010 = gv_1010 * lv_projected_month.
***
*** endif.
*** when '1020'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1020 = <fs_pay_result>-pay_amount. "HRA
*** gv_p1020 = gv_1020 * lv_projected_month.
*** endif.
*** when '1030'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1030 = <fs_pay_result>-pay_amount. "Conveyance
*** gv_p1030 = gv_1030 * lv_projected_month.
*** endif.
*** when '1040'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1040 = <fs_pay_result>-pay_amount. "Medical
Reimbursement
*** gv_p1040 = gv_1040 * lv_projected_month.
*** endif.
*** when '1050'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1050 = <fs_pay_result>-pay_amount. "Leave Travel
Allowance
*** gv_p1050 = gv_1050 * lv_projected_month.
*** endif.
*** when '1060'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_1060 = <fs_pay_result>-pay_amount. "Adhoc Allowance
*** gv_p1060 = gv_1060 * lv_projected_month.
*** endif.
*** when '2010'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_2010 = <fs_pay_result>-pay_amount. "Location Allowance
*** endif.
*** when '2080'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_2080 = <fs_pay_result>-pay_amount. "Leave Encashment
*** endif.
*** when '2200'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_2200 = <fs_pay_result>-pay_amount. "Snacks - Out of
Payroll
*** endif.
*** when '2210'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_2210 = <fs_pay_result>-pay_amount. "Conveyance - Out of
Payroll
*** endif.
*** when '2240'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_2240 = <fs_pay_result>-pay_amount. "Performance Reward
*** endif.
*** when '/560'.
*** IF <fs_pay_result>-pay_amount NE '0.00'.
*** gv_0560 = <fs_pay_result>-pay_amount. "Total
*** endif.
***
*** ENDCASE.
****-------------------------------------------------------------------------------
---
ENDLOOP.

* Values from CRT Table


* Clear.
CLEAR: lt_rgdir_all, lv_cluster.

* Read RGDIR of cluster CU


CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = <fs_employee>-key-personnel_number
TABLES
in_rgdir = lt_rgdir_all
EXCEPTIONS
OTHERS = 0.

* Delete
* DELETE lt_rgdir_all WHERE srtza NE 'A' OR ----Pruthvi(18.2.2019)
* ( fpbeg NOT BETWEEN lv_pay_begin AND lv_pay_end AND
* fpend NOT BETWEEN lv_pay_begin AND lv_pay_end ). -----END.
**Getting Exact sequence noo**
IF lt_rgdir_all IS NOT INITIAL. "+++Pruthvi.

CLEAR : lv_srtza.
DO 3 TIMES.
IF sy-index EQ '1'.
lv_srtza = 'O'.
ELSEIF sy-index EQ '2'.
lv_srtza = 'P'.
ELSE.
lv_srtza = 'A'.
ENDIF.
CLEAR lv_pc261.

READ TABLE lt_rgdir_all INTO lv_pc261


WITH KEY srtza = lv_srtza
fpbeg = lv_pay_begin
fpend = lv_pay_end.

ENDDO.

ENdif. "++++END

* Payroll record
* LOOP AT lt_rgdir_all ASSIGNING <fs_rgdir>.

CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'


EXPORTING
clusterid = lv_cluster
employeenumber = <fs_employee>-key-personnel_number
* sequencenumber = <fs_rgdir>-seqnr
sequencenumber = lv_pc261-seqnr
CHANGING
payroll_result = lt_results
EXCEPTIONS
OTHERS = 0.

IF lt_results-inter-crt IS NOT INITIAL.

SORT lt_results-inter-crt BY lgart.


SORT lt_results-inter-rt BY lgart.
**********************************************************************
BREAK-POINT.
LOOP AT lt_results-inter-rt ASSIGNING FIELD-SYMBOL(<fs_rt>).
ls_dy_wages-zwagetype = <fs_rt>-lgart.

CASE <fs_rt>-lgart.
WHEN '/416' .
"gross salary
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/418'. "Balance
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/420'. "Std Deduction
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/422'. "Empmnt tax (Prof Tax)
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/424'. "Aggrg deduction
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/426'. " Incm under Hd Salary
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/430'. "Gross Tot Income
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/432'. " Agg of Chapter VI
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/434'. " Total Income
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/436'. "Tax on total Income
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/446'. "Tax payable
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/450'. "Tax payable and surcharge
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/456'. "Tax deducted so far
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/460'. "Income Tax
ls_dy_wages-ztotal = <fs_rt>-betrg.
WHEN '/470'. "Total Tax deductible
ls_dy_wages-ztotal = <fs_rt>-betrg.

WHEN OTHERS.
CONTINUE.
ENDCASE.

IF ls_dy_wages-zwagetype IS NOT INITIAL AND ls_dy_wages-ztotal IS NOT


INITIAL.
READ TABLE lt_wagetxt
ASSIGNING <fs_wtxt>
WITH KEY lgart = <fs_rt>-lgart.
IF sy-subrc EQ 0.

ls_dy_wages-zwagetxt = <fs_wtxt>-lgtxt.

ENDIF.
APPEND ls_dy_wages TO gt_dy_wages.
CLEAR:ls_dy_wages.
ENDIF.

ENDLOOP.

**********************************************************************

LOOP AT lt_results-inter-crt ASSIGNING <fs_crt>.

**********************************************************************

READ TABLE gt_dy_wages


ASSIGNING FIELD-SYMBOL(<fs_dy_crt>)
WITH KEY zwagetype = <fs_crt>-lgart.
IF sy-subrc EQ 0 AND <fs_dy_crt> IS ASSIGNED AND <fs_crt>-cumty EQ 'Y'.
* ls_dy_wages-zwagetype = <fs_crt>-lgart.
<fs_dy_crt>-zytd = <fs_crt>-betrg.

<fs_dy_crt>-ztotal = <fs_dy_crt>-zytd + <fs_dy_crt>-zprojected.

READ TABLE lt_wagetxt


ASSIGNING <fs_wtxt>
WITH KEY lgart = <fs_pay_result>-wagetype_key-wagetype.
IF sy-subrc EQ 0.

ls_dy_wages-zwagetxt = <fs_wtxt>-lgtxt.

ENDIF.

APPEND ls_dy_wages TO gt_dy_wages.


CLEAR:ls_dy_wages.

CASE <fs_crt>-lgart.
WHEN '/4E1' OR '/4E2' OR '/4E3' OR '/4E4' OR '/4E5' OR '/4E6' OR
'/4E7' OR '/4E8'
OR '9200' OR '9220' OR '9210' OR '9230'.

gv_salary_10_excemption = gv_salary_10_excemption + <fs_crt>-betrg.


"Salary After Section 10 Exemption

ENDCASE.

ENDIF.

**********************************************************************

* ENDIF.

** Case <fs_crt>-lgart. "--santosh


**
** when '1010'.
** gv_C1010 = <fs_crt>-betrg. "Basic
** when '1020'.
** gv_C1020 = <fs_crt>-betrg. "HRA
** when '1030'.
** gv_C1030 = <fs_crt>-betrg. "Conveyance
** when '1040'.
** gv_C1040 = <fs_crt>-betrg. "Medical Reimbursemen
** when '1050'.
** gv_C1050 = <fs_crt>-betrg. "Leave Travel Allowance
** when '1060'.
** gv_C1060 = <fs_crt>-betrg. "Adhoc Allowance
** when '2240'.
** gv_C2240 = <fs_crt>-betrg. "Performance Reward
** when '2080'.
** gv_C2080 = <fs_crt>-betrg. "Leave Encashment
** WHEN '2010'.
** gv_c2010 = <fs_crt>-betrg. "Location Allowance
** when '/560'.
** gv_C560 = <fs_crt>-betrg. "Total
** when '3040'.
** gv_c3040 = <fs_crt>-betrg. "Loan Perk
** when '/413'.
** gv_c413 = <fs_crt>-betrg. "Total Perk
** when '/430'.
** gv_c430 = <fs_crt>-betrg. "Gross Income
** when '/130'.
** gv_c0130 = <fs_crt>-betrg.
** when '/4E1' OR '/4E2' OR '/4E3' OR '/4E4' OR '/4E5' OR '/4E6' OR '/4E7'
OR '/4E8'.
** gv_salary_10_excemption =
** gv_salary_10_excemption +
** <fs_crt>-betrg. "Salary After Section 10
Exemption
** when '/118'.
** gv_c0118 = <fs_crt>-betrg. "Profession Tax
** when '/4V3'.
** gv_c4v3 = <fs_crt>-betrg. "Previous Employment Prof. Tax
** when '/4V4'.
** gv_c4v4 = <fs_crt>-betrg. "Previous Employment Provident
Fund
** when '/434'.
** gv_c0434 = <fs_crt>-betrg. "Total Taxable Income
** when '/436'.
** gv_c0436 = <fs_crt>-betrg. "Tax on Taxable Income
** when '/448'.
** gv_c0448 = <fs_crt>-betrg. "Surcharge
** when '/449'.
** gv_c0449 = <fs_crt>-betrg. "Education Cess
** when '/458'.
** gv_c0458 = <fs_crt>-betrg. "Gross tax payable
** when '/456'.
** gv_co456 = <fs_crt>-betrg. "Tax Deducted Till Date
** when '/4PT'.
** gv_co4PT = <fs_crt>-betrg. "Previous Employment Deducted
Income Tax
** when '/418'.
** gv_co418 = <fs_crt>-betrg. "Balance Tax Payable / (Refund)
**
** ENDCASE.

ENDLOOP.
ENDIF.
* ENDLOOP.

* Select
SELECT SUM( leaex )
SUM( gryex )
SUM( vrsex )
INTO ( lv_leaex, lv_gryex, lv_vrsex )
FROM pa0580
WHERE pernr EQ <fs_employee>-key-personnel_number
AND endda GE lv_pay_end
AND begda LE lv_pay_begin.

* IF lv_LEAEX is not INITIAL OR


* lv_GRYEX is not INITIAL OR
* lv_VRSEX is not INITIAL.
* Previous Employment Income
IF sy-subrc EQ 0.
gv_prev_empincome = lv_leaex + lv_gryex + lv_vrsex.
ENDIF.
* Salary Before Deduction Under 16
gv_salary_bdeduction16 = gv_prev_empincome + gv_salary_10_excemption.

* Salary After Deduction Under 16


gv_salary_adeduction16 = ( gv_salary_bdeduction16 - gv_c0118 - gv_c4v3 ).

* Totals
gv_tbasic = gv_c1010 + gv_p1010.
gv_thra = gv_c1020 + gv_p1020.
gv_tconveyance = gv_c1030 + gv_p1030.
gv_tmedical = gv_c1040 + gv_p1040.
gv_tleave_travel = gv_c1050 + gv_p1050.
gv_tadhoc = gv_c1060 + gv_p1060.

DELETE gt_dy_wages WHERE zwagetype = ''.

ENDIF.

**Getting company text.


READ TABLE hrdata-dim_company_code
ASSIGNING <fs_ccode>
INDEX 1.

gv_string = 'image/bmp'.

DATA: lv_logoname TYPE tdobname.

IF <fs_ccode> IS ASSIGNED.
CASE <fs_ccode>-key.
WHEN '1000'." Kalyani Developers

lv_logoname = '1000_KD'.

WHEN '3000'. " Kalyani Techpark Pvt Ltd.

lv_logoname = '3000_ktpl'.

WHEN '4000'. " ROHAN SOLAR POWER PVT LTD

lv_logoname = '4000 RSP'.

ENDCASE.

IF <fs_ccode>-key = '2000'.

gv_mohan = 'MOHAN ENTERPRISES'.

ENDIF.

CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp


EXPORTING
p_object = 'GRAPHICS'
p_name = lv_logoname
p_id = 'BMAP'
p_btype = 'BCOL'
RECEIVING
p_bmp = gv_xstring
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.

ENDIF.

Vous aimerez peut-être aussi