Google Search - Blog...........

Showing posts with label sample hrabap report program. Show all posts
Showing posts with label sample hrabap report program. Show all posts

SAP ABAP - Sample Programs On HR ABAP.



Here is a list of sample program on HR ABAP:-

-.....Back To MAIN INDEX.

- HR TABLES.

- HR Tables & Infotypes.

- HR T-Codes.

- Sample HR Report Program On Macros.

- Get The Manager Of The Employee.

- Creating An HR Infotype Step By Step.

- Creating HR Report Category In PNP Logical Database.

- Fetching The Entry Or Joining Date For Employees.

-.....Back To MAIN INDEX.

- Fetching HR Data In Different Ways.

- Get Managers List For All The Organization Units.

- Get Employees List Working Under An Organization Unit.

- Retrieve Manager For An Employee.

- Generate Compensation Statement Report.

- Fetch HR Data Or Records From HR Database Tables.

- Using Macros In HR ABAP Report Program.

- Get The List Of Employees With Experience.

- BADI HRECM00_BDG0001 - Upload Initial Budgets From Excel Sheet.

- Get Employee Picture In Selection Screen.

- Unified Access to All HR Infotypes.

- F4(Value On Request) For Organization Unit In HR Report Program.

- Employee Pay Scale Report Program.

- Finding Job Code For Position.

- Ordering (Descending ) Org. Unit For An Organization.

- Display Details about Organization unit, Position or Job In HR ABAP.

-.....Back To MAIN INDEX.


- First & Last Working Date Of An Employee.

- Get All The Existing Organization Units.

- Obtain All The Sub Org Units Under An Organization Unit.

- Display Texts For Personnel Subarea, Employee Group, Employee Subgroup, Cost Center & Organizational Unit.

- Minimum & Maximum Salaries For The Employees.

- Handling User Exits In HR ABAP.

- Termination Workbench Report In HR ABAP.

- Service Calculation Report In HR ABAP.

- Use Of BAPI HR_MAINTAIN_MASTERDATA For Updating HR DATA.

- Upload The Over Time Report In HR ABAP.

-.....Back To MAIN INDEX.

- Displaying Off-Cycle Report In HR ABAP.

- Loans Detail Report In HR ABAP.

- Gosi Calculation Report In HR ABAP.

- Employee Pay Details Report In HR ABAP.

- Employee Existence Check Report.

- Send Employee Payslip As An E-Mail Attachment.

- Time Quota For An Employee In HR ABAP.

-.....Back To MAIN INDEX.

- Employee Deduction Report In HR ABAP.

- Comparison Report For The Employee Salaries In HR ABAP.

- Cash Payment Report In HR ABAP.

- Bank Report For Employees In HR ABAP.

- BDC For Uploading Absence Data Into PA30 Transaction.

- HR Master Data Update Using T-Code CAT2 With BAPI.

- Upload Job & Position Relations Through PO03.

- BDC To Upload The OM Relations Through T-code PO13.

- Function Modules To Read Benefits Data In HR ABAP.

- Sample Code For Do Varying In HR ABAP.

- Get Family Data In HR ABAP.

- Net Salary Report In HR ABAP.

-.....Back To MAIN INDEX.

- Cumulative Amount Report in HR ABAP.

- Use Of Time Macro rp-read-all-time-ity in HR ABAP.

- Cumulative List Of Absences For Company Code, Personnel Area & Personnel Subarea.

- Employee Data Using Function Module In HR ABAP.

- BDC For The Action Transfer Of Location In HR ABAP.

-.....Back To MAIN INDEX.

BDC For The Action Transfer Of Location In HR ABAP



*---If u want to perform the transfer action you just need to change the personnel subarea, it is not possible for us to change the personnel subarea through BDC or using BAPI for the action info type 0000, as it is already grade out in that infotype even you are in change mode.

So you must enter through the tcode PA40 and tehre is another case we can do it. Fisrt change the personnel subarea in Org Management 0001 and then perform the action transfer in Actions infotype 0000.

refresh : bdcdata.

perform bdc_dynpro using 'SAPMP50A' '2000'.
perform bdc_field using 'BDC_CURSOR'
'RP50G-EINDA'.
perform bdc_field using 'BDC_OKCODE'
'=PICK'.
perform bdc_field using 'RP50G-PERNR'
it_pa0001-pernr.
perform bdc_field using 'RP50G-EINDA'
sy-datum.
perform bdc_field using 'RP50G-SELEC(03)'
'X'.
perform bdc_dynpro using 'MP000000' '2000'.
perform bdc_field using 'BDC_CURSOR'
'PSPAR-WERKS'.
perform bdc_field using 'BDC_OKCODE'
'UPD'.
perform bdc_field using 'P0000-BEGDA'
v_date.
perform bdc_field using 'P0000-MASSG'
'03'.
perform bdc_field using 'PSPAR-PLANS'
it_pa0001-plans.
perform bdc_field using 'PSPAR-WERKS'
v_werks.
perform bdc_field using 'PSPAR-PERSG'
it_pa0001-persg.
perform bdc_field using 'PSPAR-PERSK'
it_pa0001-persk.
perform bdc_dynpro using 'MP000100' '2000'.
perform bdc_field using 'BDC_OKCODE'
'/EBCK'.
perform bdc_field using 'BDC_CURSOR'
'P0001-BEGDA'.
perform bdc_dynpro using 'SAPLSPO1' '0200'.
perform bdc_field using 'BDC_OKCODE'
'=YES'.
perform bdc_dynpro using 'SAPMP50A' '2000'.
perform bdc_field using 'BDC_OKCODE'
'/EBCK'.
perform bdc_field using 'BDC_CURSOR'
'RP50G-PERNR'.

CALL TRANSACTION 'PA40' USING BDCDATA
MODE 'N'
UPDATE 'S'
MESSAGES INTO MESSTAB.


ALSO READ:

- HR TABLES.

- HR Tables & Infotypes.

- HR T-Codes.

- Sample HR Report Program On Macros.

- Get The Manager Of The Employee.

- HR ABAP - BDC For Uploading Absence Data Into PA30 Transaction.

- HR ABAP - BDC To Upload The OM Relations Through T-code PO13.

- HR ABAP - BDC Upload For The Org Unit Relationship Through T-Code PO10.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.

Employee Data Using Function Module In HR ABAP

*--instead of reading many infotypes 0000,00001,0002,0006,0105
* we can use this function module to read the complete data of
* an employee

REPORT ztest.

parameters: p_pernr type pa0001-pernr.

start-of-selection.

data: l_pernr LIKE OBJEC-OBJID,
wa_data LIKE PERSON.

l_pernr = p_pernr.

CALL FUNCTION 'HR_GET_EMPLOYEE_DATA'
EXPORTING
person_id = l_pernr
SELECTION_BEGIN = SY-DATUM
SELECTION_END = SY-DATUM
IMPORTING
PERSONAL_DATA = wa_data
EXCEPTIONS
PERSON_NOT_FOUND = 1
NO_ACTIVE_INTEGRATION = 2
OTHERS = 3
.

end-of-selection.

write:/ 'Employee Name : ' , wa_data-pernr.
write:/ 'Start Date : ' , wa_data-begda.
write:/ 'End Date : ' , wa_data-endda.
write:/ 'Organization : ' , wa_data-Orgeh.
write:/ 'Cost Center : ' , wa_data-kostl.
write:/ 'Pisition : ' , wa_data-PLANS.
write:/ 'Job : ' , wa_data-stell.
write:/ 'First Name : ' , wa_data-vorna.
write:/ 'Last Name : ' , wa_data-nachn.


ALSO READ:

- HR TABLES.

- HR Tables & Infotypes.

- HR T-Codes.

- Sample HR Report Program On Macros.

- BDC For The Action Transfer Of Location In HR ABAP.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.


Get Family Data In HR ABAP

REPORT ZBEN.
tables:t591a,pa0021,pa0002.

DATA:BEGIN OF IT_PA0002 OCCURS 0,
PERNR LIKE PA0002-PERNR,
BEGDA LIKE PA0002-BEGDA,
ENDDA LIKE PA0002-ENDDA,
END OF IT_PA0002.

DATA:BEGIN OF IT_PA0021 OCCURS 0,
PERNR LIKE PA0021-PERNR,
subty like pa0021-subty,
BEGDA LIKE PA0021-BEGDA,
ENDDA LIKE PA0021-ENDDA,
FAMSA LIKE PA0021-FAMSA,
OBJPS LIKE PA0021-OBJPS,
FAVOR LIKE PA0021-FAVOR,
FANAM LIKE PA0021-FANAM,
KDSVH LIKE PA0021-KDSVH,
KDART LIKE PA0021-KDART,
END OF IT_PA0021.

data:it_t591a type t591a occurs 0 with header line.

data:it_t591s type t591s occurs 0 with header line.

PARAMETERS:P_PERNR LIKE PA0021-PERNR.

START-OF-SELECTION.

SELECT PERNR
BEGDA
ENDDA
FROM PA0021
INTO TABLE IT_PA0002
WHERE PERNR = P_PERNR.

IF SY-SUBRC = 0.

SELECT PERNR
subty
BEGDA
ENDDA
FAMSA
FAVOR
OBJPS
FANAM
KDSVH
KDART
FROM PA0021
INTO CORRESPONDING FIELDS OF TABLE IT_PA0021
FOR ALL ENTRIES IN IT_PA0002
WHERE PERNR = IT_PA0002-PERNR.

if sy-subrc = 0.

SELECT * FROM T591A
INTO table it_t591a
for all entries in it_pa0021
where infty = '0021'
and subty = it_pa0021-subty.
if sy-subrc = 0.

select * from t591s into table it_t591s where sprsl = 'EN'
and infty = '0021'
and subty = it_t591a-subty.
IF SY-SUBRC = 0.
LOOP AT IT_PA0021.
WRITE:/ IT_PA0021-PERNR,
IT_PA0021-BEGDA,
IT_PA0021-ENDDA,
IT_PA0021-FAMSA,
IT_PA0021-OBJPS,
it_t591s-stext,
IT_PA0021-FAVOR,
IT_PA0021-FANAM,
IT_PA0021-KDSVH,
IT_PA0021-KDART.
ENDLOOP.
ENDIF.
endif.
ENDIF.
endif.


ALSO READ:

- Net Salary Report In HR ABAP.

- Cumulative Amount Report in HR ABAP.

- Use Of Time Macro rp-read-all-time-ity in HR ABAP.

- Cumulative List Of Absences For Company Code, Personnel Area & Personnel Subarea.

- Employee Data Using Function Module In HR ABAP.

- BDC For The Action Transfer Of Location In HR ABAP.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.


Sample Code For Do Varying In HR ABAP

*---This is a common thing in HRABAP where there is a necessisity to read the data
*---from wage types from info type 0008, info type 0025, info type 0041. I am giving
*---a simple example for one of them

data : it_pa0008 like pa0008 occurs 0 with header line.

data : begin of it_temp occurs 0,

lga01 like pa0008-lga01,

bet01 like pa0008-bet01,

end of it_temp.

do 20 times

varying it_temp-lga01 from it_pa0008-lga01 next it_pa0008-lga02

varying it_temp-bet01 from it_pa0008-bet01 next it_pa0008-bet02.

enddo.


ALSO READ:

- Get Family Data In HR ABAP.

- Net Salary Report In HR ABAP.

- Cumulative Amount Report in HR ABAP.

- Use Of Time Macro rp-read-all-time-ity in HR ABAP.

- Cumulative List Of Absences For Company Code, Personnel Area & Personnel Subarea.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.


Function Modules To Read Benefits Data In HR ABAP

---Get employee benefit data

call function 'HR_BEN_READ_EE_BENEFIT_DATA'
exporting
pernr = persn-pernr
datum = persn-date
reaction = no_msg
importing
ee_benefit_data = ee_benefit_data
subrc = subrc
tables
error_table = error_table.

*----Read Credit plans

call function 'HR_BEN_READ_CREDIT_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_cred_plans = credit_display
error_table = error_table.

*--Read health Plans

call function 'HR_BEN_READ_HEALTH_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_heal_plans = health_display
error_table = error_table.


*---Get the benifit dependendants of the employee

call function 'HR_BEN_READ_DEPENDENTS'
exporting
ee_benefit_data = ee_benefit_data
bpcat = health
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
existing_dep = depend_display_h
error_table = error_table.


*---Read insurance plans

call function 'HR_BEN_READ_INSURANCE_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_insu_plans = insure_display
error_table = error_table.


*---Read benificiaries for the employee

call function 'HR_BEN_READ_BENEFICIARIES'
exporting
ee_benefit_data = ee_benefit_data
bpcat = insurance
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
existing_ben = benefi_display_i
error_table = error_table.


*---Read saving plans

call function 'HR_BEN_READ_SAVINGS_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_save_plans = saving_display
error_table = error_table.


*---Read investiments

call function 'HR_BEN_READ_INVESTMENTS'
exporting
ee_benefit_data = ee_benefit_data
bpcat = savings
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
existing_inv = invest_display_s
error_table = error_table.

*---Read spending plans


call function 'HR_BEN_READ_SPENDING_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_spen_plans = spenda_display
error_table = error_table.

*---Read miscellaneous plans

call function 'HR_BEN_READ_MISCEL_PLANS'
exporting
pernr = persn-pernr
begda = persn-date
endda = persn-date
reaction = no_msg
importing
subrc = subrc
tables
ex_misc_plans = miscel_display
error_table = error_table.


ALSO READ:

- Sample Code For Do Varying In HR ABAP.

- Get Family Data In HR ABAP.

- Net Salary Report In HR ABAP.

- Cumulative Amount Report in HR ABAP.

- Use Of Time Macro rp-read-all-time-ity in HR ABAP.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.


HR ABAP - BDC Upload For The Org Unit Relationship Through T-Code PO10

REPORT ZHR_ORG_REL
NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE BDCRECX1.

*---Create internal tables

DATA : BEGIN OF RECORD OCCURS 0,
SEARK(12) TYPE C,
STEXT(45) TYPE C,
END OF RECORD.

START-OF-SELECTION.

*---upload data into internal table
PERFORM UPLOAD_FILE.

*--Create a session
PERFORM OPEN_GROUP.

*---process and post the records
LOOP AT RECORD.
PERFORM BDC_DYNPRO USING 'SAPMH5A0' '5100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'PM0D1-SEARK'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'PPHDR-PLVAR'
'01'.
PERFORM BDC_FIELD USING 'PM0D1-SEARK'
RECORD-SEARK.
PERFORM BDC_FIELD USING 'PM0D1-TIMR6'
'X'.
PERFORM BDC_FIELD USING 'PPHDR-BEGDA'
'01.08.2009'.
PERFORM BDC_FIELD USING 'PPHDR-ENDDA'
'31.12.9999'.
PERFORM BDC_DYNPRO USING 'SAPMH5A0' '5100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=INSE'.
PERFORM BDC_FIELD USING 'PPHDR-PLVAR'
'01'.
PERFORM BDC_FIELD USING 'PM0D1-SEARK'
RECORD-SEARK.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'TT_T777T-ITEXT(02)'.
PERFORM BDC_FIELD USING 'PM0D1-TIMR6'
'X'.
PERFORM BDC_FIELD USING 'PPHDR-BEGDA'
'01.08.2009'.
PERFORM BDC_FIELD USING 'PPHDR-ENDDA'
'31.12.9999'.
PERFORM BDC_FIELD USING 'MARKFELD(02)'
'X'.
PERFORM BDC_DYNPRO USING 'MP100100' '2000'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'P1001-RELAT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'P1001-BEGDA'
'01.08.2009'.
PERFORM BDC_FIELD USING 'P1001-ENDDA'
'31.12.9999'.
PERFORM BDC_FIELD USING 'P1001-RSIGN'
'A'.
PERFORM BDC_FIELD USING 'P1001-RELAT'
'002'.
PERFORM BDC_DYNPRO USING 'MP100100' '2000'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'P1001-SOBID'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'P1001-BEGDA'
'01.08.2009'.
PERFORM BDC_FIELD USING 'P1001-ENDDA'
'31.12.9999'.
PERFORM BDC_FIELD USING 'P1001-RSIGN'
'A'.
PERFORM BDC_FIELD USING 'P1001-RELAT'
'002'.
PERFORM BDC_FIELD USING 'P1001-SCLAS'
'O'.
PERFORM BDC_FIELD USING 'P1001-SOBID'
RECORD-STEXT.
PERFORM BDC_DYNPRO USING 'MP100100' '2000'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'P1001-BEGDA'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=UPD'.
PERFORM BDC_FIELD USING 'P1001-BEGDA'
'01.08.2009'.
PERFORM BDC_FIELD USING 'P1001-ENDDA'
'31.12.9999'.
PERFORM BDC_FIELD USING 'P1001-RSIGN'
'A'.
PERFORM BDC_FIELD USING 'P1001-RELAT'
'002'.
PERFORM BDC_FIELD USING 'P1001-SCLAS'
'O'.
PERFORM BDC_FIELD USING 'P1001-SOBID'
RECORD-STEXT.
PERFORM BDC_DYNPRO USING 'SAPMH5A0' '5100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
PERFORM BDC_FIELD USING 'PPHDR-PLVAR'
'01'.
PERFORM BDC_FIELD USING 'PM0D1-SEARK'
RECORD-SEARK.

PERFORM BDC_TRANSACTION USING 'PO10'.

ENDLOOP.
PERFORM CLOSE_GROUP.
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*----------------------------------------------------------------------*
FORM UPLOAD_FILE .

CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = 'C:\'
FILETYPE = 'DAT'
TABLES
DATA_TAB = RECORD
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.


ENDFORM. " UPLOAD_FILE


ALSO READ:

- Function Modules To Read Benefits Data In HR ABAP.

- Sample Code For Do Varying In HR ABAP.

- Get Family Data In HR ABAP.

- Net Salary Report In HR ABAP.

- Cumulative Amount Report in HR ABAP.

- HR ABAP - BDC For The Action Transfer Of Location.

- HR ABAP - BDC For Uploading Absence Data Into PA30 Transaction.

- HR ABAP - BDC To Upload The OM Relations Through T-code PO13.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.

HR ABAP - BDC To Upload The OM Relations Through T-code PO13

report ZHR_OM_REL
no standard page heading line-size 255.

include bdcrecx1.
*--Create an internal tables
DATA : BEGIN OF RECORD OCCURS 0,
SEARK(12),
SOBID(45),
END OF RECORD.

start-of-selection.

*---upload the data into the internal table
Perform upload_file.

*---Create a session
perform open_group.

*---Process and post the data into the transaction

loop at record.
perform bdc_dynpro using 'SAPMH5A0' '5100'.
perform bdc_field using 'BDC_CURSOR'
'PM0D1-SEARK'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'PPHDR-PLVAR'
'01'.
perform bdc_field using 'PM0D1-SEARK'
record-seark.
perform bdc_field using 'PM0D1-TIMR6'
'X'.
perform bdc_field using 'PPHDR-BEGDA'
'01.08.2009'.
perform bdc_field using 'PPHDR-ENDDA'
'31.12.9999'.
perform bdc_dynpro using 'SAPMH5A0' '5100'.
perform bdc_field using 'BDC_OKCODE'
'=INSE'.
perform bdc_field using 'PPHDR-PLVAR'
'01'.
perform bdc_field using 'PM0D1-SEARK'
record-seark.
perform bdc_field using 'BDC_CURSOR'
'TT_T777T-ITEXT(02)'.
perform bdc_field using 'PM0D1-TIMR6'
'X'.
perform bdc_field using 'PPHDR-BEGDA'
'01.08.2009'.
perform bdc_field using 'PPHDR-ENDDA'
'31.12.9999'.
perform bdc_field using 'MARKFELD(02)'
'X'.
perform bdc_dynpro using 'MP100100' '2000'.
perform bdc_field using 'BDC_CURSOR'
'P1001-SOBID'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'P1001-BEGDA'
'01.08.2009'.
perform bdc_field using 'P1001-ENDDA'
'31.12.9999'.
perform bdc_field using 'P1001-RSIGN'
'A'.
perform bdc_field using 'P1001-RELAT'
'003'.
perform bdc_field using 'P1001-SCLAS'
'O'.
perform bdc_field using 'P1001-SOBID'
record-sobid.
perform bdc_dynpro using 'MP100100' '2000'.
perform bdc_field using 'BDC_CURSOR'
'P1001-BEGDA'.
perform bdc_field using 'BDC_OKCODE'
'=UPD'.
perform bdc_field using 'P1001-BEGDA'
'01.08.2009'.
perform bdc_field using 'P1001-ENDDA'
'31.12.9999'.
perform bdc_field using 'P1001-RSIGN'
'A'.
perform bdc_field using 'P1001-RELAT'
'003'.
perform bdc_field using 'P1001-SCLAS'
'O'.
perform bdc_field using 'P1001-SOBID'
record-sobid.
perform bdc_dynpro using 'SAPMH5A0' '5100'.
perform bdc_field using 'BDC_OKCODE'
'=BACK'.
perform bdc_field using 'PPHDR-PLVAR'
'01'.
perform bdc_field using 'PM0D1-SEARK'
record-seark.

perform bdc_transaction using 'PO13'.


endloop.
perform close_group.
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*----------------------------------------------------------------------*
FORM UPLOAD_FILE .

CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = 'C:\'
FILETYPE = 'DAT'
TABLES
DATA_TAB = RECORD
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7
.

ENDFORM. " UPLOAD_FILE


ALSO READ:

- Function Modules To Read Benefits Data In HR ABAP.

- Sample Code For Do Varying In HR ABAP.

- Get Family Data In HR ABAP.

- Net Salary Report In HR ABAP.

- Cumulative Amount Report in HR ABAP.

- HR ABAP - BDC Upload For The Org Unit Relationship Through T-Code PO10.

- HR ABAP - BDC For The Action Transfer Of Location.

- HR ABAP - BDC For Uploading Absence Data Into PA30 Transaction.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.

HR ABAP - HR Master Data Update Using T-Code CAT2 With BAPI

*---------------------------------------------------------------*
* This is to update the data to the cat2 transaction to update the
* absence and attendances data. Please use the date in upload as
* the start date of the month, as it is written for upload the whole
* data for the month.
*---------------------------------------------------------------*

report ZHR_CAT2_UPLOAD
no standard page heading line-size 255.

type-pools : TRUXS.

types: begin of ty_final,
profile type TCATST-VARIANT,
keydate type char10,
pernr type CATSFIELDS-PERNR,
SKOSTL TYPE CATSD-SKOSTL,
LSTAR TYPE CATSD-LSTAR,
RPROJ(24) TYPE c,
AWART TYPE CATSD-AWART,
LGART TYPE CATSD-LGART,
day1 TYPE CATSD-DAY1 ,
day2 TYPE CATSD-DAY2,
day3 TYPE CATSD-DAY3,
day4 TYPE CATSD-DAY4,
day5 TYPE CATSD-DAY5,
day6 TYPE CATSD-DAY6,
day7 TYPE CATSD-DAY7,
day8 TYPE CATSD-DAY8,
day9 TYPE CATSD-DAY9,
day10 TYPE CATSD-DAY10,
day11 TYPE CATSD-DAY11,
day12 TYPE CATSD-DAY12,
day13 TYPE CATSD-DAY13,
day14 TYPE CATSD-DAY14,
day15 TYPE CATSD-DAY15,
day16 TYPE CATSD-DAY16,
day17 TYPE CATSD-DAY17,
day18 TYPE CATSD-DAY18,
day19 TYPE CATSD-DAY19,
day20 TYPE CATSD-DAY20,
day21 TYPE CATSD-DAY21,
day22 TYPE CATSD-DAY22,
day23 TYPE CATSD-DAY23,
day24 TYPE CATSD-DAY24,
day25 TYPE CATSD-DAY25,
day26 TYPE CATSD-DAY26,
day27 TYPE CATSD-DAY27,
day28 TYPE CATSD-DAY28,
day29 TYPE CATSD-DAY29,
day30 TYPE CATSD-DAY30,
day31 TYPE CATSD-DAY31,
end of ty_final.

TYPES :
BEGIN OF TYPE_DATA,
EMPLOYEENUMBER TYPE BAPICATS1-EMPLOYEENUMBER , "EMPLOYEE NO.
WORKDATE TYPE BAPICATS1-WORKDATE, "DATE
SEND_CCTR TYPE BAPICATS1-SEND_CCTR, "SENDING COST CENTER
ACTTYPE TYPE BAPICATS1-ACTTYPE , "ACTIVITY TYPE
WBS_ELEMENT TYPE BAPICATS1-WBS_ELEMENT, "WBS ELEMENT
CO_AREA TYPE BAPICATS1-CO_AREA, "CONTROLLING AREA
ABS_ATT_TYPE TYPE BAPICATS1-ABS_ATT_TYPE, "ATTENDANCE OR ABSENCE TYPE
CATSHOURS TYPE BAPICATS1-CATSHOURS, "CATS HOURS
UNIT TYPE BAPICATS1-UNIT, "UNIT OF MEASURE
END OF TYPE_DATA.

types: begin of ty_message,
msg type char100,
end of ty_message.
************************************************************************
*INTERNAL TABLE DECLARATION *
************************************************************************
DATA :
I_DATA TYPE STANDARD TABLE OF TYPE_DATA,
I_MESSTAB TYPE STANDARD TABLE OF BDCMSGCOLL,
I_BAPI TYPE STANDARD TABLE OF BAPICATS1,"INTERNAL TABLE FOR TIMESHEET DATA.
I_RESULT TYPE STANDARD TABLE OF BAPICATS2,"INTERNAL TABLE FOR POSTED RECORDS
I_RET TYPE STANDARD TABLE OF BAPIRET2,
I_INPUT TYPE STANDARD TABLE OF BAPICATS1. "INTERNAL TABLE FOR RETURN MESSAGE.
************************************************************************
*WORK AREA DECLARATION *
************************************************************************
DATA :
WA_DATA TYPE TYPE_DATA,
WA_MESSTAB TYPE BDCMSGCOLL,
WA_RAW TYPE TRUXS_T_TEXT_DATA,
WA_BAPI LIKE LINE OF I_BAPI,
WA_RESULT LIKE LINE OF I_RESULT,
WA_RET LIKE LINE OF I_RET,
WA_INPUT LIKE LINE OF I_INPUT.

************************************************************************
*DATA DECLARATION *
************************************************************************
DATA: WF_MESSAGE(100),
PROFILE TYPE BAPICATS6-PROFILE,
COST_CENTER(10),
COUNTER TYPE I.


data: it_data type table of ALSMEX_TABLINE with header line,
wa_data1 like line of it_data,
IT_FINAL Type table of ty_final with header line.


*include bdcrecx1.

parameters:: p_file LIKE IBIPPARMS-PATH.

at selection-screen on value-request for p_file.

perform get_f4_for_file.

start-of-selection.

perform get_filedata.
perform get_excel_data. " get the excel data into internal table

perform post_cats_data. " post the cats data into CAT2 transaction


*&---------------------------------------------------------------------*
*& Form GET_EXCEL_DATA
*----------------------------------------------------------------------*
FORM GET_EXCEL_DATA .

sort it_data by row col.

loop at it_data.

case : it_data-col.

when '1'.

it_final-profile = it_data-value.

when '2'.

it_final-keydate = it_data-value.

when '3'.

it_final-pernr = it_data-value.

when '4'.

it_final-SKOSTL = it_data-value.

when '5'.

it_final-LSTAR = it_data-value.

when '6'.

it_final-RPROJ = it_data-value.

when '7'.

it_final-AWART = it_data-value.

when '8'.

it_final-LGART = it_data-value.

when '9'.

it_final-day1 = it_data-value.

when '10'.

it_final-day2 = it_data-value.

when '11'.

it_final-day3 = it_data-value.

when '12'.

it_final-day4 = it_data-value.

when '13'.

it_final-day5 = it_data-value.

when '14'.

it_final-day6 = it_data-value.

when '15'.

it_final-day7 = it_data-value.

when '16'.

it_final-day8 = it_data-value.

when '17'.

it_final-day9 = it_data-value.

when '18'.

it_final-day10 = it_data-value.

when '19'.

it_final-day11 = it_data-value.

when '20'.

it_final-day12 = it_data-value.

when '21'.

it_final-day13 = it_data-value.

when '22'.

it_final-day14 = it_data-value.

when '23'.

it_final-day15 = it_data-value.

when '24'.

it_final-day16 = it_data-value.

when '25'.

it_final-day17 = it_data-value.

when '26'.

it_final-day18 = it_data-value.

when '27'.

it_final-day19 = it_data-value.

when '28'.

it_final-day20 = it_data-value.

when '29'.

it_final-day21 = it_data-value.

when '30'.

it_final-day22 = it_data-value.

when '31'.

it_final-day23 = it_data-value.

when '32'.

it_final-day24 = it_data-value.

when '33'.

it_final-day25 = it_data-value.

when '34'.

it_final-day26 = it_data-value.

when '35'.

it_final-day27 = it_data-value.

when '36'.

it_final-day28 = it_data-value.

when '37'.

it_final-day29 = it_data-value.

when '38'.

it_final-day30 = it_data-value.

when '39'.

it_final-day31 = it_data-value.

endcase.

at end of row.

append it_final.
clear it_final.
endat.


endloop.


ENDFORM. " GET_EXCEL_DATA
*&---------------------------------------------------------------------*
*& Form POST_CATS_DATA
*----------------------------------------------------------------------*
FORM POST_CATS_DATA .

*" VALUE(PROFILE) LIKE BAPICATS6-PROFILE OPTIONAL
data: TESTRUN LIKE BAPICATS6-TESTRUN,
RELEASE_DATA LIKE BAPICATS6-RELEASE_DATA,
AGENT LIKE SWHACTOR,
TEXT_FORMAT_IMP LIKE BAPICATS6-TEXT_FORMAT_IMP ,

it_CATSRECORDS_IN type table of BAPICATS1,
it_CATSRECORDS_OUT type table of BAPICATS2,
wa_CATSRECORDS_IN like line of it_CATSRECORDS_IN,
wa_CATSRECORDS_OUT like line of it_CATSRECORDS_OUT,
RETURN type table of BAPIRET2.


field-symbols : type any.

data: v_name type char30,
v_count type char2,
v_len type i.


loop at it_final.

do 31 times.

clear : v_count.

v_count = sy-index.

concatenate 'IT_FINAL-DAY' v_count into v_name.
condense v_name.
assign (v_name) to .
if is assigned.
* condense it_final-keydate.
v_len = strlen( it_final-keydate ) .

if v_len = '7'.
concatenate it_final-keydate '0' into it_final-keydate .
endif.

v_len = strlen( v_count ) .
if v_len = '1'.
it_final-keydate+7(1) = v_count.
else.
it_final-keydate+6(2) = v_count.
endif.

* it_final-keydate = it_final-keydate + v_count - 1 .
wa_catsrecords_in-workdate = it_final-keydate.
wa_catsrecords_in-SEND_CCTR = it_final-SKOSTL.
wa_catsrecords_in-ACTTYPE = it_final-LSTAR.
wa_catsrecords_in-WBS_ELEMENT = it_final-RPROJ.
wa_catsrecords_in-ABS_ATT_TYPE = it_final-AWART.
wa_catsrecords_in-WAGETYPE = it_final-lgart.
wa_catsrecords_in-UNIT = 'H'.
WA_BAPI-SPLIT = '0'.
wa_catsrecords_in-employeenumber = it_final-pernr.
wa_catsrecords_in-abs_att_type = it_final-awart.
wa_catsrecords_in-catshours = .

if = '8'.
wa_catsrecords_in-all_day_flag = 'X'.
endif.

APPEND wa_catsrecords_in to it_catsrecords_in.
CLEAR wa_catsrecords_in.
endif.

enddo.

**---> CATS: Insert Data Records
CALL FUNCTION 'BAPI_CATIMESHEETMGR_INSERT'
EXPORTING
profile = it_final-profile
text_format_imp = 'ITF'
TESTRUN = ''
RELEASE_DATA = 'X'
TABLES
catsrecords_in = it_catsrecords_in
catsrecords_out = it_catsrecords_out
return = return.

refresh :it_catsrecords_in.

read table return into wa_ret with key type = 'E'.
if sy-subrc = 0.
write:/ 'Error in uploading data for the pernr ' color 6, it_final-pernr color 6.
else.
write:/ 'Successfully uploaded data to the pernr ', it_final-pernr.
endif.
Endloop.



ENDFORM. " POST_CATS_DATA
*&---------------------------------------------------------------------*
*& Form GET_F4_FOR_FILE
*----------------------------------------------------------------------*
FORM GET_F4_FOR_FILE .


CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_FILE'
IMPORTING
FILE_NAME = p_file.

ENDFORM. " GET_F4_FOR_FILE
*&---------------------------------------------------------------------*
*& Form GET_FILEDATA
*----------------------------------------------------------------------*
FORM GET_FILEDATA .

data : FILENAME LIKE RLGRAP-FILENAME .

FILENAME = p_file.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = FILENAME
I_BEGIN_COL = '1'
I_BEGIN_ROW = '1'
I_END_COL = '50'
I_END_ROW = '30000'
TABLES
INTERN = it_data
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.

delete it_data where row = '001'.

ENDFORM. " GET_FILEDATA



ALSO READ:

- Upload Job & Position Relations Through PO03.

- BDC To Upload The OM Relations Through T-code PO13.

- Function Modules To Read Benefits Data In HR ABAP.

- Sample Code For Do Varying In HR ABAP.

- Get Family Data In HR ABAP.

.....Back To Index On HR ABAP.

.....Back To MAIN INDEX.


Time Quota For An Employee In HR ABAP

DATA : cumulatedvalues TYPE TABLE OF bapihrquotacv WITH HEADER LINE.

CALL FUNCTION 'BAPI_TIMEQUOTA_GETDETAILEDLIST'
EXPORTING
employeenumber = pernr-pernr
quotaselectionmod = '1'
wayofcalculation = 'D'
validitybegin = '18000101'
validityend = '99991231'
TABLES
cumulatedvalues = cumulatedvalues.

IF NOT cumulatedvalues[] IS INITIAL.

READ TABLE cumulatedvalues INDEX 1.
IF sy-subrc = 0.
* it_final-lent = cumulatedvalues-entitle.
* it_final-bal = cumulatedvalues-rest.
ENDIF.
ENDIF.


ENDFORM. " GET_TIME_QUOTA


ALSO READ:

- Employee Deduction Report In HR ABAP.

- Comparison Report For The Employee Salaries In HR ABAP.

- Cash Payment Report In HR ABAP.

- Bank Report For Employees In HR ABAP.

- BDC For Uploading Absence Data Into PA30 Transaction.

.....Back To Sub-Index On HR ABAP.

.....Back To MAIN INDEX.


HR ABAP - Send Employee Payslip As An E-Mail Attachment.

REPORT zhr_email_emp_payslip.

TABLES: pernr.


INFOTYPES: 0000,
0001,
0002,
0008.


TYPES: BEGIN OF ty_pa0000,
pernr LIKE pa0000-pernr,
begda LIKE pa0000-begda,
endda LIKE pa0000-endda,
END OF ty_pa0000.

TYPES: BEGIN OF ty_final,
pernr LIKE pa0001-pernr,
END OF ty_final.


DATA: it_pa0000 TYPE TABLE OF p0000 WITH HEADER LINE,
it_pa0001 TYPE TABLE OF p0001 WITH HEADER LINE,
it_pa0002 TYPE TABLE OF p0002 WITH HEADER LINE,
it_pa0008 TYPE TABLE OF p0008 WITH HEADER LINE.

* SSF Decleration
DATA: l_form TYPE tdsfname VALUE 'ZHR_PAYSILP_EMPLOYEE',
lf_fm_name TYPE rs38l_fnam.



GET pernr.

rp-provide-from-last p0000 space pn-begda pn-endda.
IF pnp-sw-found = '1'.
IF p0000-stat2 = '3'.
MOVE p0000-pernr TO it_pa0000-pernr.
MOVE pn-begda TO it_pa0000-begda.
MOVE pn-endda TO it_pa0000-endda.
APPEND it_pa0000.
CLEAR it_pa0000.
ENDIF.
ENDIF.

END-OF-SELECTION.


PERFORM get_time_quota.

PERFORM call_smartform.

*&---------------------------------------------------------------------*
*& Form CALL_SMARTFORM
*----------------------------------------------------------------------*
FORM call_smartform .

*data:
* Data declaration for mail
DATA: i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
i_objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_tline TYPE TABLE OF tline WITH HEADER LINE,
i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,
wa_doc_chng LIKE sodocchgi1,
l_lines TYPE sy-tabix.

DATA: it_otfdata TYPE TABLE OF itcoo WITH HEADER LINE.

DATA : output_options TYPE ssfcompop.

DATA: control_parameters TYPE ssfctrlop,
job_output_info TYPE ssfcrescl.

DATA: v_pabrp TYPE pabrp,
v_pabrj TYPE pabrj.

IF pnptimr9 = 'X'.
v_pabrp = pnpdispp.
v_pabrj = pnpdispj.
ELSE.
v_pabrp = pnppabrp.
v_pabrj = pnppabrj.
ENDIF.


output_options-tddest = 'LOCL'.
output_options-tdarmod = '1'.
output_options-tdnoprev = 'X'.
output_options-tdnoprint = 'X'.
*OUTPUT_OPTIONS-TDPRINTER = 'PRINTER'.

control_parameters-getotf = 'X'.
control_parameters-no_dialog = 'X'.
control_parameters-device = 'PRINTER'.
control_parameters-preview = ''.


CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = l_form
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.

LOOP AT it_pa0000.


CALL FUNCTION lf_fm_name "'/1BCDWB/SF00000062'
EXPORTING
control_parameters = control_parameters
output_options = output_options
pernr = it_pa0000-pernr
abkrs = pnpabkrs-low
pabrp = v_pabrp
pabrj = v_pabrj
IMPORTING
* DOCUMENT_OUTPUT_INFO =
job_output_info = job_output_info
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5
.

REFRESH : it_otfdata[],
i_objtxt,
i_objpack,
it_otfdata,
i_tline,
i_record,
i_reclist.

it_otfdata[] = job_output_info-otfdata[].

CLEAR : i_objbin, i_reclist, i_objtxt.
REFRESH : i_objbin, i_reclist, i_objtxt.

*Populate values for mail text.
i_objtxt = 'Employee Payslip'.
APPEND i_objtxt.

DESCRIBE TABLE i_objtxt LINES l_lines.
READ TABLE i_objtxt INDEX l_lines.
wa_doc_chng-doc_size = l_lines * 255.
wa_doc_chng-obj_name = 'EMAIL'.
wa_doc_chng-obj_descr = 'Employee Payslip'.

* Main Text
CLEAR : i_objpack.
i_objpack-head_start = 1.
i_objpack-head_num = 0.
i_objpack-body_start = 1.
i_objpack-doc_type = 'RAW'.
i_objpack-body_num = l_lines.
APPEND i_objpack.
CLEAR i_objpack.

*Convert output of script to OTF data
CLEAR: i_tline, l_lines.
REFRESH i_tline.

* Convert OTF to PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 132
IMPORTING
bin_filesize = l_lines
TABLES
otf = it_otfdata
lines = i_tline
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.

IF sy-subrc <> 0 OR
l_lines IS INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

REFRESH : i_record.

*Format OTF data
CALL FUNCTION 'QCE1_CONVERT'
TABLES
t_source_tab = i_tline
t_target_tab = i_record
EXCEPTIONS
convert_not_possible = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE : / 'Error in conversion of pdf lines'(015).
ENDIF.

APPEND LINES OF i_record TO i_objbin.
*Creation of the entry for the compressed attachment
DESCRIBE TABLE i_objbin LINES l_lines.
CLEAR i_objpack.
i_objpack-transf_bin = 'X'.
i_objpack-head_start = 1.
i_objpack-head_num = 1.
i_objpack-body_start = 1.
i_objpack-body_num = l_lines.
i_objpack-obj_name = 'Employee Payslip'.
i_objpack-obj_descr = 'Employee Payslip'.
i_objpack-doc_size = l_lines * 255 .
i_objpack-doc_type = 'PDF'.
APPEND i_objpack.

CLEAR i_objpack.

DATA: l_usrid_long TYPE pa0105-usrid_long.

CLEAR : l_usrid_long.

SELECT SINGLE usrid_long
FROM pa0105
INTO l_usrid_long
WHERE pernr = it_pa0000-pernr
AND subty = '0010'.

IF sy-subrc EQ 0.
i_reclist-receiver = l_usrid_long. "'ravi.me1231@gmail.com'.
i_reclist-rec_type = 'U'.
i_reclist-com_type = 'INT'.
APPEND i_reclist.
ELSE.
WRITE:/ 'No email id is maintained for this personnel number' , it_pa0000-pernr.
ENDIF.

IF NOT i_reclist[] IS INITIAL.
*sending report output and script output as mail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = wa_doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = i_objpack
object_header = i_objhead
contents_bin = i_objbin
contents_txt = i_objtxt
receivers = i_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.

ENDIF.

ENDLOOP.


ENDFORM. " CALL_SMARTFORM


ALSO READ:

- Time Quota For An Employee In HR ABAP.

- Employee Deduction Report In HR ABAP.

- Comparison Report For The Employee Salaries In HR ABAP.

- Cash Payment Report In HR ABAP.

- Bank Report For Employees In HR ABAP.

.....Back To Sub-Index On HR ABAP.

.....Back To MAIN INDEX.


Gosi Calculation Report In HR ABAP

REPORT zhr_gosi_calculation MESSAGE-ID zmsg.

*----------------------------------------------------------------*
* TABLES *
*----------------------------------------------------------------*
TABLES: pa0001,
t569v,
t549a,
t549q.

*-----------------------------------------------------------------*
* T Y P E P O O L S *
*-----------------------------------------------------------------*
TYPE-POOLS : slis.

************************************************************************
* DECLARATION OF INTERNAL TABLES *
************************************************************************


TYPES: BEGIN OF ty_pa0001,
pernr TYPE pa0001-pernr,
bukrs TYPE pa0001-bukrs,
werks TYPE pa0001-werks,
persg TYPE pa0001-persg,
persk TYPE pa0001-persk,
btrtl TYPE pa0001-btrtl,
abkrs TYPE pa0001-abkrs,
ename TYPE char80,
END OF ty_pa0001.

TYPES: BEGIN OF ty_pa0002,
pernr TYPE pa0002-pernr,
vorna TYPE pa0002-vorna,
nachn TYPE pa0002-nachn,
natio TYPE pa0002-natio,
END OF ty_pa0002.

TYPES: BEGIN OF ty_pa0008.
INCLUDE STRUCTURE p0008.
TYPES: END OF ty_pa0008.

DATA: BEGIN OF wagetypes,
lga LIKE p0008-lga01,
bet LIKE p0008-bet01,
END OF wagetypes.

DATA: BEGIN OF dates,
dar LIKE p0041-dar01,
dat LIKE p0041-dat01,
END OF dates.

TYPES: BEGIN OF ty_pa0000,
pernr TYPE pa0000-pernr,
begda TYPE pa0000-begda,
endda TYPE pa0000-endda,
massn TYPE pa0000-massn,
stat2 TYPE p0000-stat2,
END OF ty_pa0000.

TYPES: BEGIN OF ty_t005t,
land1 TYPE t005t-land1,
natio TYPE t005t-natio,
END OF ty_t005t.

DATA: lfs_0008 LIKE p0008.

TYPES: BEGIN OF ty_pa0041.
INCLUDE STRUCTURE p0041.
TYPES: END OF ty_pa0041.

TYPES: BEGIN OF ty_final,
sno type i,
pernr TYPE pa0001-pernr,
ename TYPE pa0001-ename,
begda TYPE pa0001-begda,
endda TYPE pa0001-endda,
bukrs TYPE pa0001-bukrs,
natio TYPE pa0002-natio,
ntext TYPE t005t-natio,
bsal TYPE pa0008-bet01,
hra TYPE pa0008-bet01,
bsal_9 TYPE pa0008-bet01,
bsal_11 TYPE pa0008-bet01,
bsal_2 TYPE pa0008-bet01,
total TYPE pa0008-bet01,
END OF ty_final.


* Work area and Internal tables declaration
DATA: it_pa0000 TYPE TABLE OF ty_pa0000 WITH HEADER LINE,
it_pa0001 TYPE TABLE OF ty_pa0001 WITH HEADER LINE,
it_pa0002 TYPE TABLE OF ty_pa0002 WITH HEADER LINE,
it_pa0008 TYPE TABLE OF ty_pa0008 WITH HEADER LINE,
it_pa0041 TYPE STANDARD TABLE OF ty_pa0041 WITH HEADER LINE,
it_t005t TYPE TABLE OF ty_t005t WITH HEADER LINE,
it_final TYPE TABLE OF ty_final WITH HEADER LINE.

DATA : v_permo TYPE t549a-permo.

DATA: v_pernr TYPE pa0001-pernr,
v_werks TYPE pa0001-werks,
v_btrtl TYPE pa0001-btrtl,
v_persg TYPE pa0001-persg,
v_persk TYPE pa0001-persk,
v_abkrs TYPE pa0001-abkrs.

data: sno type i.

*For ALV fieldcatlog
DATA : it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_layout TYPE slis_layout_alv,
it_events TYPE slis_t_event,
wa_events TYPE slis_alv_event,
it_list TYPE slis_t_listheader WITH HEADER LINE.

RANGES: r_stat2 FOR pa0000-stat2.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

select-options: s_abkrs for pa0001-abkrs no intervals obligatory.

*PARAMETERS:p_abkrs TYPE pa0001-abkrs .

PARAMETERS: p_pabrp TYPE t569v-pabrp,
p_pabrj TYPE t569v-pabrj,
p_begda TYPE pa0001-begda,
p_endda TYPE pa0001-endda.

PARAMETERS: r1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND aaa,
r2 RADIOBUTTON GROUP g1.

SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_pernr FOR pa0001-pernr,
s_werks FOR pa0001-werks, "Personnel Area
s_btrtl FOR pa0001-btrtl, "Personnel Subarea
s_persg FOR pa0001-persg, "Employee Group
s_persk FOR pa0001-persk. "Employee Subgroup
SELECTION-SCREEN END OF BLOCK b2 .
SELECTION-SCREEN END OF BLOCK b1 .

************************************************************************
* AT SELECTION SCREEN *
************************************************************************
AT SELECTION-SCREEN.

IF NOT s_pernr[] IS INITIAL.
SELECT pernr
FROM pa0001
INTO v_pernr
WHERE pernr IN s_pernr.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Enter a valid Personnel Number'.
ENDIF.
ENDSELECT.
ENDIF.

IF NOT s_werks[] IS INITIAL.
SELECT werks
FROM pa0001
INTO v_werks
WHERE pernr IN s_werks.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Enter a valid Personnel Area'.
ENDIF.
ENDSELECT.
ENDIF.

IF NOT s_btrtl[] IS INITIAL.
SELECT btrtl
FROM pa0001
INTO v_btrtl
WHERE pernr IN s_btrtl.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Enter a valid Personnel Subarea'.
ENDIF.
ENDSELECT.
ENDIF.

IF NOT s_persg[] IS INITIAL.
SELECT persg
FROM pa0001
INTO v_persg
WHERE pernr IN s_persg.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Enter a valid Employee Group'.
ENDIF.
ENDSELECT.
ENDIF.

IF NOT s_persk[] IS INITIAL.
SELECT persk
FROM pa0001
INTO v_persk
WHERE pernr IN s_persk.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Enter a valid Employee Subgroup'.
ENDIF.
ENDSELECT.
ENDIF.


AT SELECTION-SCREEN OUTPUT.

IF r1 = 'X'.

PERFORM get_data_from_current_period.

LOOP AT SCREEN.

IF screen-name = 'P_PABRP'
OR screen-name = 'P_PABRJ'
OR screen-name = 'P_BEGDA'
OR screen-name = 'P_ENDDA'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.

ENDLOOP.

ELSEIF r2 = 'X'.


PERFORM get_data_from_period.


LOOP AT SCREEN.
IF screen-name = 'P_BEGDA'
OR screen-name = 'P_ENDDA'.
screen-input = 0.
ENDIF.

MODIFY SCREEN.

ENDLOOP.

ENDIF.

START-OF-SELECTION.

PERFORM get_pa0000_data.

PERFORM get_pa0001_data.

PERFORM get_pa0002_data.

PERFORM get_pa0008_data.

PERFORM get_pa0041_data.

END-OF-SELECTION.

PERFORM process_data.

PERFORM display_alv.
*&---------------------------------------------------------------------*
*& Form GET_PA0001_DATA
*----------------------------------------------------------------------*
FORM get_pa0001_data .

SELECT pernr
bukrs
werks
persg
persk
btrtl
abkrs
FROM pa0001
INTO TABLE it_pa0001
FOR ALL ENTRIES IN it_pa0000
WHERE pernr = it_pa0000-pernr
AND werks IN s_werks
AND btrtl IN s_btrtl
AND persg IN s_persg
AND persk IN s_persk
and abkrs in s_abkrs
AND begda LE p_endda
AND endda GE p_begda.

IF sy-subrc = 0.
SORT it_pa0001 BY pernr.
delete adjacent duplicates from it_pa0001 comparing pernr.
ENDIF.

ENDFORM. " GET_PA0001_DATA
*&---------------------------------------------------------------------*
*& Form GET_PA0002_DATA
*----------------------------------------------------------------------*
FORM get_pa0002_data .

SELECT pernr
vorna
nachn
natio
FROM pa0002
INTO TABLE it_pa0002
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda.


IF sy-subrc = 0.
SORT it_pa0002 BY pernr.
ENDIF.

SELECT land1
natio
FROM t005t
INTO TABLE it_t005t
FOR ALL ENTRIES IN it_pa0002
WHERE land1 = it_pa0002-natio
AND spras = 'E'.

IF sy-subrc = 0.
SORT it_t005t BY natio.
ENDIF.

ENDFORM. " GET_PA0002_DATA
*&---------------------------------------------------------------------*
*& Form GET_PA0008_DATA
*----------------------------------------------------------------------*
FORM get_pa0008_data .

SELECT *
FROM pa0008
INTO CORRESPONDING FIELDS OF TABLE it_pa0008
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda.


IF sy-subrc = 0.
SORT it_pa0008 BY pernr.
ENDIF.

ENDFORM. " GET_PA0008_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*----------------------------------------------------------------------*
FORM process_data .

LOOP AT it_pa0001.

it_final-pernr = it_pa0001-pernr.
it_final-bukrs = it_pa0001-bukrs.

READ TABLE it_pa0002 WITH KEY pernr = it_pa0001-pernr.
IF sy-subrc = 0.
it_final-natio = it_pa0002-natio.
CONCATENATE it_pa0002-vorna it_pa0002-nachn INTO it_final-ename.

READ TABLE it_t005t WITH KEY land1 = it_pa0002-natio.
IF sy-subrc = 0.
it_final-ntext = it_t005t-natio.
ENDIF.

ENDIF.

READ TABLE it_pa0008 WITH KEY pernr = it_pa0001-pernr.
IF sy-subrc = 0.
CLEAR : lfs_0008.

MOVE-CORRESPONDING it_pa0008 TO lfs_0008.

DO 40 TIMES VARYING wagetypes-lga FROM lfs_0008-lga01 NEXT lfs_0008-lga02
VARYING wagetypes-bet FROM lfs_0008-bet01 NEXT lfs_0008-bet02.

CHECK wagetypes-lga IS NOT INITIAL.

CASE wagetypes-lga.

WHEN '1000'.
it_final-bsal = wagetypes-bet . " Basic
WHEN '1010'.
it_final-hra = wagetypes-bet . " HRA
ENDCASE.
ENDDO.
ENDIF.

READ TABLE it_pa0041 WITH KEY pernr = it_pa0001-pernr.
IF sy-subrc = 0.

DO 12 TIMES VARYING dates-dar FROM it_pa0041-dar01 NEXT it_pa0041-dar02
VARYING dates-dat FROM it_pa0041-dat01 NEXT it_pa0041-dat02.

CHECK dates-dar IS NOT INITIAL.

IF dates-dar = '01'.
it_final-begda = dates-dat.
ENDIF.
ENDDO.
ENDIF.

LOOP AT it_pa0000 WHERE pernr = it_pa0001-pernr.
IF it_pa0000-massn = 'Z6' OR it_pa0000-massn = 'Z7' OR it_pa0000-massn = '10'.
it_final-endda = it_pa0000-begda.
EXIT.
ENDIF.
ENDLOOP.

IF it_pa0001-persg = 'S'.
it_final-bsal_9 = ( it_final-bsal + it_final-hra ) * 9 / 100 .
it_final-bsal_11 = ( it_final-bsal + it_final-hra ) * 11 / 100 .
ELSEIF it_pa0001-persg = 'E'.
it_final-bsal_2 = ( it_final-bsal + it_final-hra ) * 2 / 100 .
ENDIF.

it_final-total = it_final-bsal_9 + it_final-bsal_11 + it_final-bsal_2.

sno = sno + 1.

it_final-sno = sno.

APPEND it_final.
CLEAR it_final.
ENDLOOP.


ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*----------------------------------------------------------------------*
FORM display_alv .

wa_fieldcat-fieldname = 'SNO'.
wa_fieldcat-reptext_ddic = 'Serial No'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'ENAME'.
wa_fieldcat-reptext_ddic = 'Employee Name'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BUKRS'.
wa_fieldcat-just = 'C'.
wa_fieldcat-reptext_ddic = 'Company Code'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'PERNR'.
wa_fieldcat-reptext_ddic = 'Personnel Number'.
wa_fieldcat-just = 'C'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BEGDA'.
wa_fieldcat-reptext_ddic = 'Joining Date'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'NTEXT'.
wa_fieldcat-reptext_ddic = 'Nationality'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BSAL'.
wa_fieldcat-reptext_ddic = 'Basic Salary'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'HRA'.
wa_fieldcat-reptext_ddic = 'Housing'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BSAL_9'.
wa_fieldcat-reptext_ddic = 'Gosi Amount 9%'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BSAL_11'.
wa_fieldcat-reptext_ddic = 'Gosi Amount 11%'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BSAL_2'.
wa_fieldcat-reptext_ddic = 'Gosi Amount 2%'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'TOTAL'.
wa_fieldcat-reptext_ddic = 'Total Gosi Amount'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

it_layout-colwidth_optimize = 'X'.
it_layout-zebra = 'X'.

*---top of page for the first block
wa_events-name = 'TOP_OF_PAGE'.
wa_events-form = 'TOP_OF_PAGE'.
APPEND wa_events TO it_events.
CLEAR wa_events.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = it_layout
it_fieldcat = it_fieldcat
it_events = it_events
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDFORM. " DISPLAY_ALV

*&---------------------------------------------------------------------*
*& Form top_of_page
*----------------------------------------------------------------------*
FORM top_of_page. "#EC CALLED

*------form header

REFRESH it_list.
CLEAR it_list.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info = 'Employees Gosi Calculations Report'.
APPEND it_list TO it_list.

****** REPORT PROGRAM NAME AND CLIENT ****************
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Report...:' sy-repid INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

****** USER NAME *************************************
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'User.....:' sy-uname INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

****** DATE / TIME STAMP *****************************
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Date/Time:' sy-datum+6(2) '/'
sy-datum+4(2) '/'
sy-datum+0(4) ' '
sy-uzeit+0(2) ':'
sy-uzeit+2(2) ':'
sy-uzeit+4(2)
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

clear it_list.
it_list-typ = 'S'.
it_list-key = space.
concatenate 'Payroll Area:' s_abkrs-low into it_list-info separated by space.
append it_list to it_list.

it_list-typ = 'S'.
it_list-key = space.
concatenate 'Payroll Period:' p_begda+4(2) '.' p_begda+6(2) '.' p_begda+0(4) ' ' '-' ' '
p_endda+4(2) '.' p_endda+6(2) '.' p_endda+0(4) into it_list-info.
append it_list to it_list.

*--- Get the comments on the top of page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_list[].

ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form GET_PA0000_DATA
*----------------------------------------------------------------------*
FORM get_pa0000_data .

SELECT pernr
begda
endda
massn
stat2
FROM pa0000
INTO TABLE it_pa0000
WHERE pernr IN s_pernr
AND begda LE p_endda
AND endda GE p_begda
and stat2 = '3'.

IF sy-subrc = 0.
SORT it_pa0000 BY pernr.
ENDIF.

ENDFORM. " GET_PA0000_DATA
*&---------------------------------------------------------------------*
*& Form GET_PA0041_DATA
*----------------------------------------------------------------------*
FORM get_pa0041_data .

SELECT *
FROM pa0041
INTO CORRESPONDING FIELDS OF TABLE it_pa0041
FOR ALL ENTRIES IN it_pa0000
WHERE pernr = it_pa0000-pernr
AND begda LE p_endda
AND endda GE p_begda.


IF NOT it_pa0041[] IS INITIAL.
SORT it_pa0041 BY pernr.
ENDIF.
ENDFORM. " GET_PA0041_DATA
*&---------------------------------------------------------------------*
*& Form GET_DATA_FROM_CURRENT_PERIOD
*----------------------------------------------------------------------*
FORM get_data_from_current_period .

SELECT SINGLE * FROM t569v
WHERE abkrs = s_abkrs-low
AND vwsaz = '01'.
IF sy-subrc = 0.
p_pabrp = t569v-pabrp.
p_pabrj = t569v-pabrj.
ENDIF.

SELECT SINGLE * FROM t549a WHERE abkrs = s_abkrs-low.
IF sy-subrc = 0.
v_permo = t549a-permo.
ELSE.
IF r2 = 'X'.
MESSAGE e000 WITH 'Enter a valid Payroll Period'.
ENDIF.

ENDIF.

SELECT SINGLE * FROM t549q WHERE permo = v_permo
AND pabrj = t569v-pabrj
AND pabrp = t569v-pabrp.
IF sy-subrc = 0.
p_begda = t549q-begda.
p_endda = t549q-endda.
ENDIF.

ENDFORM. " GET_DATA_FROM_CURRENT_PERIOD
*&---------------------------------------------------------------------*
*& Form GET_DATA_FROM_PERIOD
*----------------------------------------------------------------------*
FORM get_data_from_period .

SELECT SINGLE * FROM t549a WHERE abkrs = s_abkrs-low.
v_permo = t549a-permo.

SELECT SINGLE * FROM t549q WHERE permo = v_permo
AND pabrj = p_pabrj
AND pabrp = p_pabrp.


IF sy-subrc = 0.
p_begda = t549q-begda.
p_endda = t549q-endda.
ENDIF.

ENDFORM. " GET_DATA_FROM_PERIOD


ALSO READ:

- Employee Pay Details Report In HR ABAP.

- Employee Existence Check Report.

- Send Employee Payslip As An E-Mail Attachment.

- Time Quota For An Employee In HR ABAP.

- Employee Deduction Report In HR ABAP.

.....Back To Sub-Index On HR ABAP.

.....Back To MAIN INDEX.


Loans Detail Report In HR ABAP

REPORT zhr_loans_detail_report MESSAGE-ID zmsg.
.

TYPE-POOLS:slis.

*----------------------------------------------------------------*
* TABLES *
*----------------------------------------------------------------*
TABLES:pa0001,
t569v,
t549a,
t549q.

DATA : v_permo TYPE t549a-permo.

DATA: v_col TYPE i.

TYPES: BEGIN OF ty_pa0000,
pernr TYPE pa0001-pernr,
begda TYPE pa0001-begda,
endda TYPE pa0001-endda,
massn TYPE pa0000-massn,
massg TYPE pa0000-massg,
stat2 TYPE pa0000-stat2,
END OF ty_pa0000.

TYPES: BEGIN OF ty_pa0002,
pernr TYPE pa0001-pernr,
vorna TYPE pa0002-vorna,
nachn TYPE pa0002-nachn,
END OF ty_pa0002.

TYPES: BEGIN OF ty_pa0001,
pernr TYPE pa0001-pernr,
bukrs TYPE pa0001-bukrs,
werks TYPE pa0001-werks,
persg TYPE pa0001-persg,
persk TYPE pa0001-persk,
btrtl TYPE pa0001-btrtl,
abkrs TYPE pa0001-abkrs,
kostl TYPE pa0001-kostl,
orgeh TYPE pa0001-orgeh,
plans TYPE pa0001-plans,
stell TYPE pa0001-stell,
END OF ty_pa0001.

TYPES : BEGIN OF ty_final,
sno TYPE i,
pernr TYPE p0001-pernr, "Personnel Number
vorna TYPE p0002-vorna, "Emp Name
nachn TYPE p0002-nachn,
jdate TYPE pa0001-begda,
kostl TYPE pa0001-kostl,
amount1 TYPE pa0008-bet01,
amount2 TYPE pa0008-bet01,
amount3 TYPE pa0008-bet01,
amount4 TYPE pa0008-bet01,
amount5 TYPE pa0008-bet01,
amount6 TYPE pa0008-bet01,
amount7 TYPE pa0008-bet01,
amount8 TYPE pa0008-bet01,
amount9 TYPE pa0008-bet01,
total TYPE pa0008-bet01,
total1 TYPE pa0008-bet01,
total2 TYPE pa0008-bet01,
END OF ty_final.

TYPES: BEGIN OF ty_pa0041.
INCLUDE STRUCTURE p0041.
TYPES: END OF ty_pa0041.

TYPES: BEGIN OF ty_pa0045.
INCLUDE STRUCTURE p0045.
TYPES: END OF ty_pa0045.

DATA: v_date TYPE sy-datum VALUE '20100101'.

DATA: BEGIN OF dates,
dar LIKE p0041-dar01,
dat LIKE p0041-dat01,
END OF dates.

DATA : sno TYPE i.

DATA: it_pa0000 TYPE TABLE OF ty_pa0000 WITH HEADER LINE,
it_pa0001 TYPE TABLE OF ty_pa0001 WITH HEADER LINE,
it_pa0002 TYPE TABLE OF ty_pa0002 WITH HEADER LINE,
it_pa0041 TYPE TABLE OF ty_pa0041 WITH HEADER LINE,
it_pa0045 TYPE TABLE OF ty_pa0045 WITH HEADER LINE,
it_final TYPE TABLE OF ty_final WITH HEADER LINE,
it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_layout TYPE slis_layout_alv,
it_events TYPE slis_t_event,
wa_events TYPE slis_alv_event,
it_list TYPE slis_t_listheader WITH HEADER LINE,
it_rgdir TYPE TABLE OF pc261 WITH HEADER LINE,
it_result TYPE pay99_result ,
wa_itrgdir TYPE pc261,
wa_rt TYPE pc207,
w_molga TYPE t500l-molga,
w_seqnr TYPE cdseq,
w_relid TYPE relid_pcl2,
wagetype TYPE char15.

*************************************************************************
** SELECTION-SCREEN *
*************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

PARAMETERS:p_abkrs TYPE pa0001-abkrs .

PARAMETERS: p_pabrp TYPE t569v-pabrp,
p_pabrj TYPE t569v-pabrj,
p_begda TYPE pa0001-begda,
p_endda TYPE pa0001-endda.

PARAMETERS: r1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND aaa,
r2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b3 .

SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-004.
PARAMETERS: r3 RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND aaa,
r4 RADIOBUTTON GROUP g2,
r5 RADIOBUTTON GROUP g2.

SELECTION-SCREEN END OF BLOCK b5 .

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_pernr FOR pa0001-pernr,
s_werks FOR pa0001-werks, "Personnel Area
s_btrtl FOR pa0001-btrtl, "Personnel Subarea
s_persg FOR pa0001-persg, "Employee Group
s_persk FOR pa0001-persk. "Employee Subgroup
SELECTION-SCREEN END OF BLOCK b4 .


SELECTION-SCREEN END OF BLOCK b1 .

AT SELECTION-SCREEN OUTPUT.

IF r1 = 'X'.

PERFORM get_data_from_current_period.

LOOP AT SCREEN.

IF screen-name = 'P_PABRP'
OR screen-name = 'P_PABRJ'
OR screen-name = 'P_BEGDA'
OR screen-name = 'P_ENDDA'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.

ENDLOOP.

ELSEIF r2 = 'X'.


PERFORM get_data_from_period.


LOOP AT SCREEN.
IF screen-name = 'P_BEGDA'
OR screen-name = 'P_ENDDA'.
screen-input = 0.
ENDIF.

MODIFY SCREEN.

ENDLOOP.

ENDIF.


START-OF-SELECTION.

PERFORM get_data.


END-OF-SELECTION.

PERFORM process_data.

PERFORM build_alv.
perform get_events.

perform top_of_page.

PERFORM display_alv.
*&---------------------------------------------------------------------*
*& Form BUILD_ALV
*----------------------------------------------------------------------*
FORM build_alv .

REFRESH : it_fieldcat.

PERFORM fill_cat USING 'SNO' 'Serial No'.
PERFORM fill_cat USING 'PERNR' 'Personnel No'.
PERFORM fill_cat USING 'VORNA' 'First Name'.
PERFORM fill_cat USING 'NACHN' 'Last Name'.
PERFORM fill_cat USING 'JDATE' 'Joining Date'.
PERFORM fill_cat USING 'KOSTL' 'Cost Center'.

IF r3 = 'X'.

PERFORM fill_cat USING 'AMOUNT1' 'HRA Approved'.
PERFORM fill_cat USING 'AMOUNT2' 'HRA Repayed'.
PERFORM fill_cat USING 'AMOUNT3' 'HRA Balance'.
ELSEIF r4 = 'X'.

PERFORM fill_cat USING 'AMOUNT4' 'Staff Adv Approved'.
PERFORM fill_cat USING 'AMOUNT5' 'Staff Adv Repayed'.
PERFORM fill_cat USING 'AMOUNT6' 'Staff Adv Balance'.
ELSEIF r5 = 'X'.

PERFORM fill_cat USING 'AMOUNT7' 'Staff Loan Approved'.
PERFORM fill_cat USING 'AMOUNT8' 'Staff Loan Repayed'.
PERFORM fill_cat USING 'AMOUNT8' 'Staff Loan Balance'.

ENDIF.

ENDFORM. " BUILD_ALV
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*----------------------------------------------------------------------*
FORM process_data .


DELETE ADJACENT DUPLICATES FROM it_pa0001 COMPARING pernr.

LOOP AT it_pa0001.

it_final-pernr = it_pa0001-pernr.
it_final-kostl = it_pa0001-kostl.

READ TABLE it_pa0002 WITH KEY pernr = it_pa0001-pernr.
IF sy-subrc = 0.
it_final-vorna = it_pa0002-vorna.
it_final-nachn = it_pa0002-nachn.
ENDIF.

READ TABLE it_pa0041 WITH KEY pernr = it_pa0001-pernr.
IF sy-subrc = 0.

DO 12 TIMES VARYING dates-dar FROM it_pa0041-dar01 NEXT it_pa0041-dar02
VARYING dates-dat FROM it_pa0041-dat01 NEXT it_pa0041-dat02.

CHECK dates-dar IS NOT INITIAL.

IF dates-dar = '01'.
it_final-jdate = dates-dat.
ENDIF.
ENDDO.
ENDIF.

READ TABLE it_pa0045 WITH KEY pernr = it_pa0001-pernr
dlart = '0300'.
IF sy-subrc = 0.
it_final-amount1 = it_pa0045-darbt.
ENDIF.

READ TABLE it_pa0045 WITH KEY pernr = it_pa0001-pernr
dlart = '0400'.
IF sy-subrc = 0.
it_final-amount4 = it_pa0045-darbt.
ENDIF.

READ TABLE it_pa0045 WITH KEY pernr = it_pa0001-pernr
dlart = '0500'.
IF sy-subrc = 0.
it_final-amount7 = it_pa0045-darbt.
ENDIF.

PERFORM get_rt_data.

it_final-total = it_final-amount1 + it_final-amount4 + it_final-amount7.
it_final-total1 = it_final-amount2 + it_final-amount5 + it_final-amount8.
it_final-total2 = it_final-amount3 + it_final-amount6 + it_final-amount9.

sno = sno + 1.

it_final-sno = sno.

APPEND it_final .
CLEAR it_final .
ENDLOOP.


ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*----------------------------------------------------------------------*
FORM display_alv .

DATA: wa_layout TYPE slis_layout_alv.

wa_layout-colwidth_optimize = 'X'.
wa_layout-zebra = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = wa_layout
it_fieldcat = it_fieldcat
it_events = it_events
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDFORM. " DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form GET_DATA
*----------------------------------------------------------------------*
FORM get_data .

SELECT pernr
begda
endda
massn
massg
stat2
FROM pa0000
INTO TABLE it_pa0000
WHERE pernr IN s_pernr
AND stat2 = '3'
AND begda LE p_endda
AND endda GE p_begda.

IF sy-subrc = 0.
DELETE ADJACENT DUPLICATES FROM it_pa0000 COMPARING pernr.

SELECT pernr
bukrs
werks
persg
persk
btrtl
abkrs
kostl
orgeh
plans
stell
FROM pa0001
INTO TABLE it_pa0001
FOR ALL ENTRIES IN it_pa0000
WHERE pernr = it_pa0000-pernr
AND abkrs = p_abkrs
AND begda LE p_endda
AND endda GE p_begda
AND werks IN s_werks
AND btrtl IN s_btrtl
AND persg IN s_persg
AND persk IN s_persk.

IF sy-subrc = 0.

SELECT pernr
vorna
nachn
FROM pa0002
INTO TABLE it_pa0002
FOR ALL ENTRIES IN it_pa0000
WHERE pernr = it_pa0000-pernr
AND begda LE p_endda
AND endda GE p_begda.


SELECT *
FROM pa0041
INTO CORRESPONDING FIELDS OF TABLE it_pa0041
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda.


IF r3 = 'X'.
SELECT *
FROM pa0045
INTO CORRESPONDING FIELDS OF TABLE it_pa0045
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda
AND dlart = '0300' .


ELSEIF r4 = 'X'.

SELECT *
FROM pa0045
INTO CORRESPONDING FIELDS OF TABLE it_pa0045
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda
AND dlart = '0400' .

ELSE.

SELECT *
FROM pa0045
INTO CORRESPONDING FIELDS OF TABLE it_pa0045
FOR ALL ENTRIES IN it_pa0001
WHERE pernr = it_pa0001-pernr
AND begda LE p_endda
AND endda GE p_begda
AND dlart = '0500'.

ENDIF.
ENDIF.
ENDIF.

CALL FUNCTION 'HR_HCP_ADD_MONTH_TO_DATE'
EXPORTING
im_monthcount = '03'
im_date = v_date
IMPORTING
ex_date = v_date.

CALL FUNCTION 'OIL_LAST_DAY_OF_MONTH'
EXPORTING
i_date = v_date
IMPORTING
e_last_day = v_date.


ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_DATA_FROM_CURRENT_PERIOD
*----------------------------------------------------------ι-----------*
FORM get_data_from_current_period .

SELECT SINGLE * FROM t569v
WHERE abkrs = p_abkrs
AND vwsaz = '01'.
IF sy-subrc = 0.
p_pabrp = t569v-pabrp.
p_pabrj = t569v-pabrj.
ENDIF.

SELECT SINGLE * FROM t549a WHERE abkrs = p_abkrs.
IF sy-subrc = 0.
v_permo = t549a-permo.
ELSE.
IF r2 = 'X'.
MESSAGE e000 WITH 'Enter a valid Payroll Period'.
ENDIF.

ENDIF.

SELECT SINGLE * FROM t549q WHERE permo = v_permo
AND pabrj = t569v-pabrj
AND pabrp = t569v-pabrp.
IF sy-subrc = 0.
p_begda = t549q-begda.
p_endda = t549q-endda.
ENDIF.

ENDFORM. " GET_DATA_FROM_CURRENT_PERIOD
*&---------------------------------------------------------------------*
*& Form GET_DATA_FROM_PERIOD
*----------------------------------------------------------------------*
FORM get_data_from_period .

SELECT SINGLE * FROM t549a WHERE abkrs = p_abkrs.
v_permo = t549a-permo.

SELECT SINGLE * FROM t549q WHERE permo = v_permo
AND pabrj = p_pabrj
AND pabrp = p_pabrp.


IF sy-subrc = 0.
p_begda = t549q-begda.
p_endda = t549q-endda.
ENDIF.

ENDFORM. " GET_DATA_FROM_PERIOD
*&---------------------------------------------------------------------*
*& Form FILL_CAT
*----------------------------------------------------------------------*
FORM fill_cat USING value(p_0151)
value(p_0152).

v_col = v_col + 1.
wa_fieldcat-col_pos = v_col.
wa_fieldcat-fieldname = p_0151.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-reptext_ddic = p_0152.

IF wa_fieldcat-fieldname = 'AMOUNT1' OR
wa_fieldcat-fieldname = 'AMOUNT2' OR
wa_fieldcat-fieldname = 'AMOUNT3' OR
wa_fieldcat-fieldname = 'AMOUNT4' OR
wa_fieldcat-fieldname = 'AMOUNT5' OR
wa_fieldcat-fieldname = 'AMOUNT6' OR
wa_fieldcat-fieldname = 'AMOUNT7' OR
wa_fieldcat-fieldname = 'AMOUNT8' OR
wa_fieldcat-fieldname = 'AMOUNT9' .
wa_fieldcat-do_sum = 'X'.
ENDIF.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

ENDFORM. " FILL_CAT
*&---------------------------------------------------------------------*
*& Form GET_RT_DATA
*----------------------------------------------------------------------*
FORM get_rt_data .

DATA: l_pernr LIKE pa0001-pernr.

CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = it_final-pernr
IMPORTING
molga = w_molga
TABLES
in_rgdir = it_rgdir
EXCEPTIONS
no_record_found = 1
OTHERS = 2.

IF r1 = 'X'.

IF NOT w_molga IS INITIAL.
CALL FUNCTION 'CD_READ_LAST'
EXPORTING
begin_date = p_begda
end_date = p_endda
IMPORTING
out_seqnr = w_seqnr
TABLES
rgdir = it_rgdir
EXCEPTIONS
no_record_found = 1
OTHERS = 2.
ENDIF.

SORT it_rgdir BY fpend DESCENDING.

READ TABLE it_rgdir INTO wa_itrgdir WITH KEY fpbeg = p_begda
fpend = p_endda.
IF sy-subrc = 0.
w_seqnr = wa_itrgdir-seqnr.
ENDIF.

SELECT SINGLE
relid
FROM t500l
INTO w_relid
WHERE molga = w_molga.

l_pernr = it_final-pernr .

CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = w_relid
employeenumber = l_pernr
sequencenumber = w_seqnr
read_only_international = 'X'
CHANGING
payroll_result = it_result
EXCEPTIONS
illegal_isocode_or_clusterid = 1
error_generating_import = 2
import_mismatch_error = 3
subpool_dir_full = 4
no_read_authority = 5
no_record_found = 6
versions_do_not_match = 7
error_reading_archive = 8
error_reading_relid = 9
OTHERS = 10.

ELSEIF r2 = 'X'.

IF NOT w_molga IS INITIAL.
CALL FUNCTION 'CD_READ_LAST'
EXPORTING
begin_date = p_begda
end_date = p_endda
IMPORTING
out_seqnr = w_seqnr
TABLES
rgdir = it_rgdir
EXCEPTIONS
no_record_found = 1
OTHERS = 2.
ENDIF.

SORT it_rgdir BY fpend DESCENDING.

* For Offcycle Payyroll
READ TABLE it_rgdir INTO wa_itrgdir WITH KEY fpbeg = p_begda
fpend = p_endda.
IF sy-subrc = 0.
w_seqnr = wa_itrgdir-seqnr.
ENDIF.
SELECT SINGLE relid FROM t500l INTO w_relid WHERE molga = w_molga.

l_pernr = it_final-pernr .

CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = w_relid
employeenumber = l_pernr
sequencenumber = w_seqnr
read_only_international = 'X'
CHANGING
payroll_result = it_result
EXCEPTIONS
illegal_isocode_or_clusterid = 1
error_generating_import = 2
import_mismatch_error = 3
subpool_dir_full = 4
no_read_authority = 5
no_record_found = 6
versions_do_not_match = 7
error_reading_archive = 8
error_reading_relid = 9
OTHERS = 10.
ENDIF.

IF p_begda LE v_date.

LOOP AT it_result-inter-rt INTO wa_rt.
wagetype = wa_rt-lgart.
CASE wagetype.

WHEN '1LRP'.
it_final-amount2 = wa_rt-betrg.
WHEN '/LRP'.
it_final-amount3 = wa_rt-betrg.
WHEN '2LRP'.
it_final-amount5 = wa_rt-betrg.
WHEN '/LLB'.
it_final-amount6 = wa_rt-betrg.
WHEN '3LRP'.
it_final-amount8 = wa_rt-betrg.
WHEN '930B'.
it_final-amount9 = wa_rt-betrg.
ENDCASE.

ENDLOOP.
ELSE.

LOOP AT it_result-inter-rt INTO wa_rt.
wagetype = wa_rt-lgart.
CASE wagetype.

WHEN '9100'.
it_final-amount2 = wa_rt-betrg.
WHEN '910B'.
it_final-amount3 = wa_rt-betrg.
WHEN '9200'.
it_final-amount5 = wa_rt-betrg.
WHEN '920B'.
it_final-amount6 = wa_rt-betrg.
WHEN '9300'.
it_final-amount8 = wa_rt-betrg.
WHEN '930B'.
it_final-amount9 = wa_rt-betrg.
ENDCASE.
ENDLOOP.

ENDIF.


ENDFORM. " GET_RT_DATA
*&---------------------------------------------------------------------*
*& Form get_events
*----------------------------------------------------------------------*
form get_events .

*---top of page for the first block
wa_events-name = 'TOP_OF_PAGE'.
wa_events-form = 'TOP_OF_PAGE'.
append wa_events to it_events.
clear wa_events.

endform. " get_events
*&---------------------------------------------------------------------*
*& Form top_of_page
*----------------------------------------------------------------------*
form top_of_page .

perform write_header.

*--- Get the comments on the top of page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = it_list[].

endform. " top_of_page
*&---------------------------------------------------------------------*
*& Form write_header
*----------------------------------------------------------------------*
form write_header .

refresh it_list.
clear it_list.

clear it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info = 'Loans Detail Report'.
append it_list to it_list.

****** REPORT PROGRAM NAME AND CLIENT ****************
it_list-typ = 'S'.
it_list-key = space.
concatenate 'Report...:' sy-repid into it_list-info separated by space.
append it_list to it_list.

****** USER NAME *************************************
clear it_list.
it_list-typ = 'S'.
it_list-key = space.
concatenate 'User.....:' sy-uname into it_list-info separated by space.
append it_list to it_list.

****** DATE / TIME STAMP *****************************
clear it_list.
it_list-typ = 'S'.
it_list-key = space.
concatenate 'Date/Time:' ' ' sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum+0(4)
' ' '/' ' ' sy-uzeit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2)
into it_list-info.
append it_list to it_list.


clear it_list.
it_list-typ = 'S'.
it_list-key = space.
concatenate 'Payroll Area:' p_abkrs into it_list-info separated by space.
append it_list to it_list.

it_list-typ = 'S'.
it_list-key = space.
concatenate 'Payroll Period:' p_begda+4(2) '.' p_begda+6(2) '.' p_begda+0(4) ' ' '-' ' '
p_endda+4(2) '.' p_endda+6(2) '.' p_endda+0(4) into it_list-info.
append it_list to it_list.

endform. " write_header


ALSO READ:

- Gosi Calculation Report In HR ABAP.

- Employee Pay Details Report In HR ABAP.

- Employee Existence Check Report.

- Send Employee Payslip As An E-Mail Attachment.

- Time Quota For An Employee In HR ABAP.

.....Back To Sub-Index On HR ABAP.

.....Back To MAIN INDEX.