Upload
jdloza
View
454
Download
8
Embed Size (px)
Citation preview
8/10/2019 Ejemplos desarrollo HR-SAP
1/37
1
Programacin
en
Modulo HR
Transacciones HR (Pag 2)
Programacin en HR
o Ejemplo HR_INFOTYPE_OPERATION (Pag 5)
o Ejemplo de lectura de cluster (Pag 10)
o Ejemplo Lectura IT0008 (Pag 12)
o Ejemplo lectura de infotipo con funcion HR_READ_INFOTYPE (Pag
15)
o Ejemplos Estructura Organizacional (Pag 20)
o Como leer cluster de tiempos (Pag 21)
o Como leer Acumuladores (Pag 23)
Funciones utiles ABAP HR Prestamos (Pag 24)
Tablas e Infotipos en HR (Pag 26)
Ejemplos de Performance (Pag 33)
Simulacion en driver de nomina (Pag 37)
HR NOTAS (Pag 38)
HR FAQ (Pag 39)
WebSite:http://globalsap.cl/globalwiki/index.php/HR
http://globalsap.cl/globalwiki/index.php/HR#Programaci.C3.B3n_en_HR#Programaci.C3.B3n_en_HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HR#Programaci.C3.B3n_en_HR#Programaci.C3.B3n_en_HR8/10/2019 Ejemplos desarrollo HR-SAP
2/37
2
Transacciones en HR
Master Data
PA10 Personnel FilePA20 Display HR Master DataPA30 Maintain HR Master DataPA40 Personnel EventsPA41 Change Hiring DataPA42 Fast Data Entry for EventsPRMD Maintain HR Master DataPRMF Travel Expenses: Feature TRVFDPRML Set Country Grouping via PopupPRMM Personnel EventsPRMO Travel Expenses: Feature TRVCOPRMP Travel Expenses: Feature TRVPAPRMS Display HR Master Data
PRMT Update MatchcodePSO3 Infotype overviewPSO4 Individual maintenance of infotypes
Time Management
PA51 Display Time DataPA53 Display Time DataPA61 Maintain Time DataPA62 List Entry of Additional DataPA63 Maintain Time DataPA64 Calendar EntryPA70 Fast Data Entry
PA71 Fast Entry of Time DataPBAB Maintain vacancy assignmentsPT01 Create Work SchedulePT02 Change Work SchedulePT03 Display Work Schedules
Payroll
PC_PAYRESULT visualizar resultados de nminaPC00 Run PayrollPC10 Payroll menu USAPE00 Starts Transactions PE01,PE02,PE03
PE01 SchemasPE02 Calculation RulesPE03 FeaturesPE04 Create functions and operationsPE51 HR form editorPRCA Payroll calendarPRCT Current SettingsPRCU Printing Checks USAPRD1 Create DMESM31 Maintain TablesSM12 Locked SecessionsTSTC Table lookupSPR0 IMG
SE16 Data Browser (Table reports)PP03 PD TablesPP0M Change Org Unit
8/10/2019 Ejemplos desarrollo HR-SAP
3/37
3
P013 Maintain PositionsPO03 Maintain Jobs
Benefits
PA85 Benefits - Call RPLBEN11PA86 Benefits - Call RPLBEN07PA87 Benefits - Call RPLBEN09PA89 COBRA AdministrationPA90 Benefits Enrollment IndividualPA91 Benefits - FormsPA92 Benefits Tables - MaintainPA93 Benefits Tables - DisplayPA94 Benefits - Access Reporting TreePA95 Benefits IMG - Jump to ViewsPA96 Benefits reportingPA97 Salary Administration - MatrixPA98 Salary AdministrationPA99 Compensation Admin. - rel.changes
PACP HR-CH: Pension fund, interface
General/Reporting
PM00 Menu for HR ReportsPM01 Dialogs in HR - Create custom infotypesPRF0 Standard FormPSVT Dynamic Tools MenuPAR1 Flexible employee dataPAR2 Employee listH99CWTR0: Reporte de CCNominash99_display_payresult: Ver resultados nomina
PD - Organizational Management
PP0M Change Org UnitPO03 Maintain JobsPO13 Maintain PositionPO10 Maintain Organizational UnitPP01 Maintain Plan Data (menu-guided)PP02 Maintain Plan Data (Open)PP03 Maintain Plan Data (event-guided)PP05 Number RangesPP06 Number Range Maintenance: HRADATAPP07 Tasks/DescriptionsPP69 Choose Text for Organizational UnitPP90 Set Up OrganizationPPO1 Change Cost Center AssignmentPPO2 Display Cost Center AssignmentPPO3 Change Reporting StructurePPO4 Display Reporting StructurePPO5 Change Object Indicators (O/S)PPO6 Change Object Indicators O/SPPOA Display Menu Interface (with dyn.)PPOC Create Organizational UnitPPOM Maintain Organizational PlanPPOS Display Organizational PlanPQ01 Events for Work Center
PQ02 Events for Training ProgramPQ03 Events for Job
8/10/2019 Ejemplos desarrollo HR-SAP
4/37
4
PQ04 Events for Business Event TypePQ06 Location EventsPQ07 Resource EventsPQ08 Events for External PersonPQ09 Events for Business Event GroupPQ10 Events for Organizational Unit
PQ11 Events for QualificationPQ12 Resource Type EventsPQ13 Events for PositionPQ14 Events for TaskPQ15 Events for CompanyPSO5 PD: Administration ToolsPSOA Work Center ReportingPSOC Job ReportingPSOG OrgManagement General ReportingPSOI Tools Integration PA-PDPSOO Organizational Unit ReportingPSOS Position ReportingPSOT Task Reporting
Recruitment
PB10 Init.entry of applicant master dataPB20 Display applicant master dataPB30 Maintain applicant master dataPB40 Applicant eventsPB50 Display applicant actionsPB60 Maintain applicant actionsPB80 Evaluate vacanciesPBA0 Evaluate advertisementsPBA1 Applicant indexPBA2 List of applications
PBA3 Applicant vacancy assignment listPBA4 Receipt of application
8/10/2019 Ejemplos desarrollo HR-SAP
5/37
5
SAP HR HR INFOTYPE OPERATION
Funcion para crear modificar borrar infotipos
*---------------------------------------------------------------------*
* FORM insert_0014 *
*---------------------------------------------------------------------** ........ *
*---------------------------------------------------------------------*
FORM insert_0014.
DATA r_p0014 LIKE p0014.
DATA l_bapireturn LIKE bapireturn1.DATA: bapipakey_tab LIKE bapipakey OCCURS 0 WITH HEADER LINE.
DATA : s_importe(20) TYPE c.
DATA: m_text LIKE l_bapireturn-message_v1.
DATA: m_text2 LIKE l_bapireturn-message_v1.
DATA m_len TYPE i.DATA: importe_avo LIKE p0014-betrg.DATA importe_avo_e LIKE bapicurr-bapicurr.
DATA importe_avo2 LIKE p0014-betrg.
DATA: num_meses(2) TYPE n.
DATA aux_date_begda TYPE d.
DATA aux_date_endda TYPE d.* Create the IT0014 records
LOOP AT tb_bonus INTO wa_bonus.
* enqueue the employye
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = wa_bonus-pernrIMPORTING
return = l_bapireturn.
IF l_bapireturn-id NE space.
WRITE: / wa_bonus-pernr, 'Enqueue failed'(003).
PERFORM applog_msg_add USING '1'wa_bonus-pernr
'E'
'5A'
'198'
wa_bonus-pernr
.
CONTINUE.
ENDIF.
IF wa_bonus-fecha_alta > wa_bonus-begda.* si fecha alta > inicio de IT0014, se asume begda = fecha de alta
* empleado
r_p0014-begda = wa_bonus-fecha_alta.
* wa_bonus-begda = wa_bonus-fecha_alta.
ELSE.r_p0014-begda = wa_bonus-begda.
ENDIF.
IF flag_flag 'X'.
IF pa_rbp1 = 'X'.
* num_meses = wa_bonus-endda+4(2) - wa_bonus-begda+4(2) + 1.* num_meses = so_febon-high+4(2) - so_febon-low+4(2) + 1.
PERFORM months_between_dates USING so_febon-low
so_febon-high
CHANGING num_meses.ELSE.
8/10/2019 Ejemplos desarrollo HR-SAP
6/37
6
* if wa_bonus-fecha_alta > wa_bonus-begda.
* num_meses = wa_bonus-endda+4(2) - wa_bonus-fecha_alta+4(2) + 1.
* else.
* num_meses = wa_bonus-endda+4(2) - wa_bonus-begda+4(2) + 1.
* endif.
IF wa_bonus-fecha_alta > so_febon-low.* num_meses = so_febon-high+4(2) -
* wa_bonus-fecha_alta+4(2) + 1.PERFORM months_between_dates USING wa_bonus-fecha_alta
so_febon-high
CHANGING num_meses.ELSE.
* num_meses = so_febon-high+4(2) - so_febon-low+4(2) + 1.
PERFORM months_between_dates USING so_febon-low
so_febon-high
CHANGING num_meses.
ENDIF.
ENDIF.
IF num_meses = 0.
num_meses = 1.
ENDIF.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'EXPORTING
currency = wa_bonus-waers
amount_internal = wa_bonus-betrg
IMPORTING
amount_external = importe_avo_e.importe_avo_e = importe_avo_e / num_meses.
importe_avo_e = floor( importe_avo_e ).
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTING
currency = wa_bonus-waers
amount_external = importe_avo_emax_number_of_digits = '17'
IMPORTING
amount_internal = importe_avo* RETURN =
.importe_avo2 = wa_bonus-betrg - ( importe_avo * num_meses ).
wa_bonus-betrg = importe_avo.
ENDIF.
IF importe_avo2 > 0.
aux_date_endda = wa_bonus-endda.
PERFORM add_month_to_date USING wa_bonus-endda'-'
'1'
CHANGING aux_date_begda.
r_p0014-endda = aux_date_begda.
wa_bonus-endda = aux_date_begda.
importe_avo2 = importe_avo2 + importe_avo.ENDIF.
DO.
IF sy-index > 2.
EXIT.
ENDIF.
CHECK wa_bonus-betrg > 0
OR flag_flag = 'X'
OR NOT pa_infty IS INITIAL.
* fill the IT0014 dataIF flag_flag = 'X'.
* tratamiento special
r_p0014-infty = '0014'.
r_p0014-pernr = wa_bonus-pernr.r_p0014-subty = wa_bonus-lgart.
r_p0014-anzhl = '1'.
8/10/2019 Ejemplos desarrollo HR-SAP
7/37
7
r_p0014-zeinh = cod_unidad_flag.
r_p0014-endda = wa_bonus-endda.
r_p0014-lgart = wa_bonus-lgart.
ELSEIF NOT pa_infty IS INITIAL.
r_p0014-infty = '0014'.
r_p0014-pernr = wa_bonus-pernr.r_p0014-subty = pa_lgart.
r_p0014-endda = wa_bonus-endda.r_p0014-anzhl = wa_bonus-anzhl.
r_p0014-zeinh = wa_bonus-zeinh.
r_p0014-betrg = wa_bonus-betrg.r_p0014-waers = wa_bonus-waers.
ELSE.
r_p0014-infty = '0014'.
r_p0014-pernr = wa_bonus-pernr.
r_p0014-subty = wa_bonus-lgart.
* r_p0014-begda = wa_bonus-begda.
* r_p0014-begda = wa_bonus-fecha_alta.
r_p0014-endda = wa_bonus-endda.
r_p0014-lgart = wa_bonus-lgart.
r_p0014-betrg = wa_bonus-betrg.
r_p0014-waers = wa_bonus-waers.ENDIF.
* create the IT0014 record
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = r_p0014-inftynumber = r_p0014-pernr
subtype = r_p0014-subty
* OBJECTID = OBJECTID
* LOCKINDICATOR = LOCKINDICATOR
validityend = r_p0014-endda
validitybegin = r_p0014-begda* RECORDNUMBER = RECORDNUMBER
record = r_p0014
operation = 'INS'nocommit = pa_test
IMPORTINGreturn = l_bapireturn
key = bapipakey_tab
EXCEPTIONS
OTHERS = 0.
IF NOT l_bapireturn IS INITIAL.
* errorWRITE:/ wa_bonus-pernr,
'Error crear IT0014'(004),
l_bapireturn-message+0(120).
PERFORM applog_msg_add USING '1'
wa_bonus-pernr
l_bapireturn-typel_bapireturn-id
l_bapireturn-number
l_bapireturn-message_v1
l_bapireturn-message_v2
l_bapireturn-message_v3
l_bapireturn-message_v4.
ELSE.
WRITE wa_bonus-betrg TO s_importe CURRENCY wa_bonus-waers.
CONDENSE s_importe NO-GAPS.
CONCATENATE s_importe wa_bonus-waers INTO s_importe SEPARATED BYspace.
m_text = 'IT0014 creado con exito.'.
m_text2 = 'CCNom: &1 Monto: &2'.
REPLACE '&1' WITH pa_lgart INTO m_text2.REPLACE '&2' WITH s_importe INTO m_text2.
m_len = strlen( m_text ).
8/10/2019 Ejemplos desarrollo HR-SAP
8/37
8
WRITE:/ wa_bonus-pernr,
m_text(m_len),
m_text2.
PERFORM applog_msg_add USING '4'
wa_bonus-pernr
'S''ZPPY_INT'
'000'wa_bonus-pernr
m_text
m_text2.
ENDIF.
IF flag_flag = 'X'
OR NOT pa_infty IS INITIAL.
EXIT.
ENDIF.
* asignamos importe 2 para siguiente "vuelta" del Do
wa_bonus-betrg = importe_avo2.
r_p0014-begda = aux_date_begda + 1.
wa_bonus-endda = aux_date_endda.
* wa_bonus-begda = wa_bonus-endda.* wa_bonus-begda+6(2) = '01'.
ENDDO.
* Use 'BAPI_EMPLOYEE_DEQUEUE' to un-lock the employee before updating
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTINGnumber = wa_bonus-pernr
IMPORTING
return = l_bapireturn.
ENDLOOP.
ENDFORM.
Ejemplo 2 carga Infotipo 0171
*---------------------------------------------------------------------*
* FORM carga_it0171 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*FORM carga_it0171.
DATA: BEGIN OF entry_dates OCCURS 5.
INCLUDE STRUCTURE hida.
DATA: END OF entry_dates.
DATA: "JPMSSL0K002845
lv_barea TYPE p0171-barea, "JPMSSL0K002845lv_bengr TYPE p0171-bengr, "JPMSSL0K002845
lv_bstat TYPE p0171-bstat, "JPMSSL0K002845
ld_begda TYPE d.
DATA ls_p0171 LIKE p0171.
DATA ls_bapireturn LIKE bapireturn1.
DATA:lt_bapipakey_tab LIKE bapipakey OCCURS 0 WITH HEADER LINE.
* REFRESH bdcdata.
* CLEAR bdcdata.
* enqueue the employye
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'EXPORTING
number = current_sapno
IMPORTING
return = ls_bapireturn.
IF ls_bapireturn-id NE space.
WRITE: / current_sapno, 'Enqueue failed'(003).EXIT.
8/10/2019 Ejemplos desarrollo HR-SAP
9/37
9
ENDIF.
ld_begda(4) = data_in-from_date+6(4).
ld_begda+4(2) = data_in-from_date+3(2).
ld_begda+6(2) = data_in-from_date(2).
CALL FUNCTION 'HR_ENTRY_DATE'
EXPORTINGpersnr = current_sapno
IMPORTING
entrydate = ld_begdaTABLES
entry_dates = entry_dates
EXCEPTIONS
entry_date_not_found = 1
pernr_not_assigned = 2.
IF sy-subrc 0.
MESSAGE i016(pn) WITH text-028 current_sapno text-026.
EXIT.
ENDIF.
PERFORM get_default_values_for_p0171 "JPMSSL0K002845
USING "JPMSSL0K002845current_sapno "JPMSSL0K002845
ld_begda "JPMSSL0K002845
CHANGING "JPMSSL0K002845
lv_barea "JPMSSL0K002845
lv_bengr "JPMSSL0K002845lv_bstat. "JPMSSL0K002845
ls_p0171-infty = '0171'.
ls_p0171-pernr = current_sapno.
ls_p0171-begda = ld_begda.
ls_p0171-endda = '99991231'.ls_p0171-barea = lv_barea.
ls_p0171-bengr = lv_bengr.
ls_p0171-bstat = lv_bstat.CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTINGinfty = ls_p0171-infty
number = ls_p0171-pernr
subtype = ls_p0171-subty
* OBJECTID = OBJECTID
* LOCKINDICATOR = LOCKINDICATOR
validityend = ls_p0171-enddavaliditybegin = ls_p0171-begda
* RECORDNUMBER = RECORDNUMBER
record = ls_p0171
operation = 'INS'
nocommit = testrun
IMPORTINGreturn = ls_bapireturn
key = lt_bapipakey_tab
EXCEPTIONS
OTHERS = 0.
IF NOT ls_bapireturn IS INITIAL.
* error
WRITE:/ ls_p0171-pernr,
'Error crear IT0171'(004),
ls_bapireturn-message+0(120).
ELSE.WRITE:/ ls_p0171-pernr, 'Registro creado con exito'(001).
ENDIF.
* Use 'BAPI_EMPLOYEE_DEQUEUE' to un-lock the employee before updating
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'EXPORTING
number = current_sapno
8/10/2019 Ejemplos desarrollo HR-SAP
10/37
10
IMPORTING
return = ls_bapireturn.
ENDFORM.
8/10/2019 Ejemplos desarrollo HR-SAP
11/37
11
SAP HR ABAP LECTURA CLUSTER
Ejemplo 1 lectura de estructura ARRS
*&---------------------------------------------------------------------*
*& Form get_pay_data
*&---------------------------------------------------------------------** text
*----------------------------------------------------------------------*
* --> p1 text
*
8/10/2019 Ejemplos desarrollo HR-SAP
12/37
12
no_record_found = 6
versions_do_not_match = 7
OTHERS = 8.
IF sy-subrc 0.
IF sy-subrc = 5.
p_subrc = 4.ENDIF.
EXIT.ENDIF.
gt_alv_data-fpper = gs_rgdir-fpper.
gt_alv_data-waers = gt_result-inter-versc-waers.LOOP AT gt_result-inter-arrrs INTO ls_arrrs.
MOVE-CORRESPONDING ls_arrrs TO gt_alv_data.
APPEND gt_alv_data.
ENDLOOP.
ENDLOOP.
ENDFORM. " get_pay_data
8/10/2019 Ejemplos desarrollo HR-SAP
13/37
13
SAP HR ABAP BAPI BASICPAY GETDETAIL
Ejemplo de BAPI 'BAPI_BASICPAY_GETDETAIL' para leerel IT0008
Ojo que esta BAPI calcula los conceptos indirectos :-)
*---------------------------------------------------------------------*
* FORM get_p0008_detail *
*---------------------------------------------------------------------*
* ........ **---------------------------------------------------------------------*
* --> GT_BAPI_WAGETYPES *
* --> P0008 *
*---------------------------------------------------------------------*FORM get_p0008_detail TABLES gt_bapi_wagetypes STRUCTURE bapip0008p
USING p0008 LIKE p0008.DATA ld_amount_external LIKE bapicurr-bapicurr.
DATA lt_return LIKE TABLE OF bapireturn1 WITH HEADER LINE.
CLEAR gt_bapi_wagetypes[].
CALL FUNCTION 'BAPI_BASICPAY_GETDETAIL'
EXPORTINGemployeenumber = p0008-pernr
subtype = p0008-subty
objectid = p0008-objps
lockindicator = p0008-sprps
validitybegin = p0008-begda
validityend = p0008-endda
recordnumber = p0008-seqnrIMPORTING
return = lt_return
TABLES
wagetypes = gt_bapi_wagetypes.ENDFORM.
Ejemplo 2, Aca soluciona problema con autorizacion en IT0008
*&---------------------------------------------------------------------*
*& Form get_basicpay_detail
*&---------------------------------------------------------------------** copied from BAPI_BASICPAY_GETDETAIL
*----------------------------------------------------------------------*
* -->GT_BAPI_WAGETYPES text
* -->VALUE(P0008) text
* -->P_SUMBB text*----------------------------------------------------------------------*
FORM get_basicpay_detail TABLES gt_bapi_wagetypes STRUCTURE bapip0008p
USING value(p0008) LIKE p0008
CHANGING p_sumbb.
DATA ld_amount_external LIKE bapicurr-bapicurr.
DATA lt_return LIKE TABLE OF bapireturn1 WITH HEADER LINE.DATA lt_p0008 LIKE TABLE OF p0008 WITH HEADER LINE.
DATA ld_number_of_lgart_in_p0008 TYPE i.
8/10/2019 Ejemplos desarrollo HR-SAP
14/37
14
DATA fname LIKE pprop-fname.
FIELD-SYMBOLS .
DATA: molga LIKE t001p-molga,
* WAGETYPENO LIKE T539S-LGANR, "N0334353
wagetypeno(2) TYPE n, "N0334353
amount LIKE gt_bapi_wagetypes-amount,number LIKE gt_bapi_wagetypes-number,
indvaluation LIKE gt_bapi_wagetypes-indvaluat,addtotalamount LIKE gt_bapi_wagetypes-addtotamnt,
number_of_lgart_in_p0008 TYPE i VALUE 20, "HCMOPS2737
currencyexpstring LIKE sy-msgv1.CLEAR gt_bapi_wagetypes[].
CLEAR p_sumbb.
CHECK p0008 IS NOT INITIAL.
CALL FUNCTION 'RP_NUMBER_OF_WAGETYPES_0008' "HCMOPS2737
IMPORTING wt_count = ld_number_of_lgart_in_p0008. "HCMOPS2737
REFRESH gt_bapi_wagetypes.
* DO 20 TIMES. "HCMOPS2737
DO number_of_lgart_in_p0008 TIMES. "HCMOPS2737
CLEAR gt_bapi_wagetypes.
MOVE sy-index TO wagetypeno.
CONCATENATE 'P0008-LGA' wagetypeno INTO fname.ASSIGN (fname) TO .
MOVE TO gt_bapi_wagetypes-wagetype.
CONCATENATE 'P0008-IND' wagetypeno INTO fname.
ASSIGN (fname) TO .
MOVE TO gt_bapi_wagetypes-indvaluat.CONCATENATE 'P0008-BET' wagetypeno INTO fname.
ASSIGN (fname) TO .
* move to wagetypes-amount.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = p0008-waersamount_internal =
IMPORTING
amount_external = gt_bapi_wagetypes-amountEXCEPTIONS
OTHERS = 0.IF sy-subrc NE 0.
* write p0008-waers to currencyexpstring.
* call function 'BALW_BAPIRETURN_GET1'
* exporting
* type = 'E'
* cl = 'RP'* number = '042'
* par1 = currencyexpstring
** par2 = ' '
** PAR3 = ' '
** PAR4 = ' '
** LOG_NO = ' '** LOG_MSG_NO = ' '
* importing
* bapireturn = return
* exceptions
* others = 0.
** EXIT.
ENDIF.
CONCATENATE 'P0008-ANZ' wagetypeno INTO fname.
ASSIGN (fname) TO .
MOVE TO gt_bapi_wagetypes-number.CONCATENATE 'P0008-EIN' wagetypeno INTO fname.
ASSIGN (fname) TO .
MOVE TO gt_bapi_wagetypes-timeunit.
CONCATENATE 'P0008-OPK' wagetypeno INTO fname.ASSIGN (fname) TO .
MOVE TO gt_bapi_wagetypes-operindic.
8/10/2019 Ejemplos desarrollo HR-SAP
15/37
15
* PERFORM get_addtotalamount USING molga
* wagetypes-wagetype
* validityend
* CHANGING wagetypes-addtotamnt
* return.
*** wird in BAPI_BASICPAYEVALUATEWAGETYPES geflltPERFORM re512t USING gt_bapi_wagetypes-wagetype
'99'CHANGING gt_bapi_wagetypes-nameofwagetype.
IF NOT gt_bapi_wagetypes-wagetype IS INITIAL. "no wagetype, no entry
APPEND gt_bapi_wagetypes.ENDIF.
ENDDO.
CALL FUNCTION 'HR_READ_INFOTYPE_AUTHC_DISABLE'
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'BAPI_BASICPAYEVALUATEWAGETYPES'
EXPORTING
employeenumber = pernr-pernr
startindvaluation = pn-endda
countrygrouping = '99'payscaletype = p0008-trfar
payscalearea = p0008-trfgb
payscalegroup = p0008-trfgr
payscalelevel = p0008-trfst
currencyimp = p0008-waerscapacityutilization = p0008-bsgrd
hoursworked = p0008-divgv
IMPORTING
* CURRENCYEXP =
return = lt_return
TABLESwagetypes = gt_bapi_wagetypes
EXCEPTIONS
OTHERS = 0.IF NOT lt_return IS INITIAL.
IF lt_return-type = 'S'. "SuccessCLEAR lt_return.
ENDIF.
ENDIF.
* calculate agreed salary
LOOP AT gt_bapi_wagetypes WHERE addtotamnt = 'X'.
ADD gt_bapi_wagetypes-amount TO ld_amount_external.ENDLOOP.
IF p0008-waers IS INITIAL.
p0008-waers = 'CLP'.
ENDIF.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTINGcurrency = p0008-waers
amount_external = ld_amount_external
max_number_of_digits = 15
IMPORTING
amount_internal = p_sumbb
* RETURN =
.
ENDFORM. "get_basicpay_detail
8/10/2019 Ejemplos desarrollo HR-SAP
16/37
16
SAP HR ABAP HR READ INFOTYPE
FUNCION HR_READ_INFOTYPE PARA LEER DATOS
INFOTIPO
FUNCTION z_rfc_zhrcbbrp051.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(PERNR) TYPE PERNR-PERNR*" VALUE(FPPER) TYPE FPPER
*" EXPORTING
*" VALUE(E_PERDATA) LIKE ZST_CERT_RENTA STRUCTURE ZST_CERT_RENTA
*" VALUE(RETORNO1) LIKE SY-MSGTY
*" VALUE(RETORNO2) LIKE T100-TEXT
*" VALUE(RETORNO3) LIKE SY-MSGV1
*" TABLES
*" WAGETYPES STRUCTURE BAPIP0008P
*"----------------------------------------------------------------------
DATA ld_subrc LIKE sy-subrc.
DATA lt_0001 LIKE TABLE OF p0001 WITH HEADER LINE.DATA lt_0002 LIKE TABLE OF p0002 WITH HEADER LINE.
DATA lt_0041 LIKE TABLE OF p0041 WITH HEADER LINE.
DATA lt_9003 LIKE TABLE OF p9003 WITH HEADER LINE.
DATA lt_9007 LIKE TABLE OF p9007 WITH HEADER LINE.
DATA lt_0008 LIKE TABLE OF p0008 WITH HEADER LINE.
DATA lt_0014 LIKE TABLE OF p0014 WITH HEADER LINE.DATA ld_fec_con TYPE d.
DATA ld_molga LIKE t500p-molga.
DATA ld_auxtabix LIKE sy-tabix.
DATA: ld_begda TYPE d,
ld_endda TYPE d.* cc nominas de infotipo 0008
PERFORM init_lgart_0008.
*
* cc nominas de infotipo 0014
PERFORM init_lgart_0014.
** fecha de certificado
* perform spell_fecha using fecha
* changing e_perdata-FECer_TXT.
e_perdata-pernr = pernr.
e_perdata-fecer = sy-datlo.*CALL FUNCTION 'HR_READ_INFOTYPE_AUTHC_DISABLE'
ld_begda = fpper.ld_begda+6(2) = '01'.
PERFORM last_day_in_month(sapfp500) USING ld_begda
ld_endda.
*----------------------------------------------------------------------*
* leer datos infotipo 0001
*----------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'pernr = pernr
infty = '0001'
begda = ld_begda
endda = ld_endda
IMPORTINGsubrc = ld_subrc
8/10/2019 Ejemplos desarrollo HR-SAP
17/37
17
TABLES
infty_tab = lt_0001.
LOOP AT lt_0001.
ENDLOOP.
IF sy-subrc = 0.
SELECT SINGLE butxt INTO e_perdata-butxt FROM t001WHERE bukrs = lt_0001-bukrs.
SELECT SINGLE ptext INTO e_perdata-ptextFROM t501t WHERE sprsl = sy-langu AND
persg = lt_0001-persg .
IF sy-subrc NE 0.SELECT SINGLE ptext INTO e_perdata-ptext
FROM t501t WHERE sprsl = 'S' AND
persg = lt_0001-persg .
ENDIF.
ELSE.
* sin datos
MOVE:
'E' TO retorno1,
'SIN DATOS' TO retorno2,
TO retorno3.
EXIT.ENDIF.
*----------------------------------------------------------------------*
* Leer datos Infotipo 0002
*----------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'EXPORTING
* TCLAS = 'A'
pernr = pernr
infty = '0002'
begda = ld_begda
endda = ld_enddaIMPORTING
subrc = ld_subrc
TABLESinfty_tab = lt_0002.
LOOP AT lt_0002.ENDLOOP.
IF sy-subrc = 0.
* tratamiento
SELECT SINGLE atext INTO e_perdata-atext FROM t522t
WHERE sprsl = sy-langu
AND anred = lt_0002-anred.IF sy-subrc NE 0.
SELECT SINGLE atext INTO e_perdata-atext FROM t522t
WHERE sprsl = 'S'
AND anred = lt_0002-anred.
ENDIF.
e_perdata-vorna = lt_0002-vorna. "Nombrese_perdata-nachn = lt_0002-nachn. "1er apellido
e_perdata-name2 = lt_0002-name2. "2do apellido
e_perdata-zzhr_rut = lt_0002-zzhr_rut. "rut
ENDIF.
*----------------------------------------------------------------------*
* Leer datos Infotipo 0041
*----------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'pernr = pernr
infty = '0041'
begda = ld_begda
endda = ld_enddaIMPORTING
subrc = ld_subrc
8/10/2019 Ejemplos desarrollo HR-SAP
18/37
18
TABLES
infty_tab = lt_0041.
LOOP AT lt_0041.
ENDLOOP.
IF sy-subrc EQ 0.
* leer fecha de contratacionPERFORM leer_fecha_i0041 USING lt_0041
'02'CHANGING ld_fec_con.
e_perdata-fecon = ld_fec_con.
* perform spell_fecha using ld_fec_con* changing e_perdata-FECON_TXT.
ENDIF.
*--------------------------------------------------------------------*
* leer datos afp
*--------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
pernr = pernr
infty = '9003'
begda = ld_begdaendda = ld_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_tab = lt_9003.LOOP AT lt_9003.
ENDLOOP.
IF sy-subrc = 0.
DATA ld_f_pens LIKE z7cl_afp0-f_pens.
DATA ld_seg_inval LIKE z7cl_afp0-seg_inval.
SELECT SINGLE glosa_afp f_pens seg_inval INTO(e_perdata-glosa_afp,ld_f_pens, ld_seg_inval)
FROM z7cl_afp0
WHERE cod_afp = lt_9003-cod_afp ANDendda >= ld_begda AND
begda
8/10/2019 Ejemplos desarrollo HR-SAP
19/37
19
molga = ld_molga AND
hasta >= ld_begda AND
desde
8/10/2019 Ejemplos desarrollo HR-SAP
20/37
20
AND molga = ld_molga
AND lgart = lt_0014-lgart.
APPEND gt_bapi_wagetypes.
ENDIF.
ENDLOOP.
LOOP AT gt_bapi_wagetypes.IF gt_bapi_wagetypes-amount = 0.
DELETE gt_bapi_wagetypes.ELSE.
ADD gt_bapi_wagetypes-amount TO e_perdata-total_bruto.
ENDIF.ENDLOOP.
wagetypes[] = gt_bapi_wagetypes[].
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form leer_fecha_i0041
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* -->P0041 I0041 record
* -->id_date class of date*
8/10/2019 Ejemplos desarrollo HR-SAP
21/37
21
TABLES
wagetypes = gt_bapi_wagetypes.
ENDFORM.
8/10/2019 Ejemplos desarrollo HR-SAP
22/37
22
SAP HR ABAP ORG
Ejemplo 1
Obtiene estructura organizacional de "arriba hacia abajo", dado un codigo de organizacion inicial. Ojo
que es recursiva.
REPORT ytes_hr_org.
TABLES hrp1001.DATA: BEGIN OF gt_org OCCURS 0,
orgid_sup LIKE hrp1001-objid, "Org superior
orgid LIKE hrp1001-objid, "Org
pos TYPE i, "jerarquia dentro de Org.
END OF gt_org.
PARAMETERS p_orgid LIKE hrp1001-objid.
START-OF-SELECTION.PERFORM get_org USING space
p_orgid0.
*&---------------------------------------------------------------------*
*& Form get_org
*&---------------------------------------------------------------------*
FORM get_org USING p_orgid_supp_orgid
value(p_pos).
DATA: BEGIN OF lt_org OCCURS 0,
sobid LIKE hrp1001-sobid,
END OF lt_org.
DATA ld_objid LIKE hrp1001-objid.gt_org-orgid_sup = p_orgid_sup.
gt_org-orgid = p_orgid.
gt_org-pos = p_pos.
APPEND gt_org.
ADD 1 TO p_pos.SELECT sobid INTO TABLE lt_org FROM hrp1001
WHERE otype = 'O'
AND objid = p_orgid
AND plvar = '01'
AND rsign = 'B'AND relat = '002'
AND sclas = 'O'
AND istat EQ '1'
AND begda LE sy-datumAND endda GE sy-datum.
IF sy-subrc NE 0.EXIT.
ELSE.
LOOP AT lt_org.
MOVE lt_org-sobid TO ld_objid.
PERFORM get_org USING p_orgidld_objid
p_pos.
ENDLOOP.
ENDIF.
ENDFORM. "get_org
8/10/2019 Ejemplos desarrollo HR-SAP
23/37
23
SAP HR ABAP CLUSTER TIEMPO
Ejemplo 1
OJO usar base de datos PNP
TABLES: pernr.
INFOTYPES : 0001,
0002,0007,
0008,
2001.
*&---------------------------------------------------------------------*
* time managment related
*&---------------------------------------------------------------------*
TABLES: pcl1,
pcl2.
INCLUDE rpppxd00. "data for PCL1/2 buffer*include rpppxm00. "standard routines for buffering the data inmacros
data: begin of common part buffer.
INCLUDE rpppxd10.
DATA: END OF COMMON PART.
INCLUDE rpc2b200.
START-OF-SELECTION.
GET pernr.
PERFORM read_time.
END-OF-SELECTION.
INCLUDE rpppxm00.*&---------------------------------------------------------------------*
*& Form read_time
*&---------------------------------------------------------------------*
* text*----------------------------------------------------------------------*
FORM read_time.
b2-key-pernr = pernr-pernr. "Personnel number
b2-key-pabrp = pn-begda+4(2). "payroll period
b2-key-pabrj = pn-begda(4). "payroll yearb2-key-cltyp = '1'. "original
rp-imp-c2-b2.
IF sy-subrc = 0.
* theorically bonus by time concept
LOOP AT zl WHERE lgart IN rt_lgart_bonoAND lgart IN so_lgart.ADD zl-anzhl TO gs_rec-ntubo.
ENDLOOP.
LOOP AT so_lgart.
LOOP AT zl WHERE lgart = so_lgart-low.
gs_rec-cctpo = zl-lgart.ADD 1 TO gs_rec-nutpo.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDFORM. "read_time
Ejemplo 2
8/10/2019 Ejemplos desarrollo HR-SAP
24/37
24
usar funcion 'HR_TIME_RESULTS_IN_INTERVAL' ejemplo
CALL FUNCTION 'HR_TIME_RESULTS_IN_INTERVAL'
EXPORTING
int_pernr = work_pernr
int_begda = levp-fpbeg
int_endda = in_period_endTABLES
int_time_results = time_results
EXCEPTIONS
wrong_cluster_version = 1no_read_authority = 2
cluster_archived = 3
technical_error = 4
OTHERS = 5.
REFRESH complete_zl.
REFRESH summary_zl.LOOP AT time_results INTO time_result.
APPEND LINES OF time_result-zl TO complete_zl.
APPEND LINES OF time_result-qtacc TO qtacctab.
APPEND LINES OF time_result-psp TO psptab.APPEND LINES OF time_result-qttrans TO qttranstab.* Build up a ZL table that is based on the date and wagetype
* Everything else is cleared. This will achieve a hour total
* on a day by day basis per wagetype.
LOOP AT time_result-zl INTO zl.
CLEAR zl-beguz.
CLEAR zl-enduz.CLEAR zl-alznr.
CLEAR zl-c1znr.
CLEAR zl-abznr.
CLEAR zl-iftyp.
CLEAR zl-prznr.COLLECT zl INTO summary_zl.
ENDLOOP.
ENDLOOP.
8/10/2019 Ejemplos desarrollo HR-SAP
25/37
25
SAP HR ABAP LEER ACUMULADORES
DATA:
char96(96), "char-feld fuer 96 char 0/1hexin(12) TYPE x, "hex feld fuer 96 bit 0/1
x128 TYPE x VALUE '80',
hex TYPE x, hextm TYPE x,
ps TYPE p, pc TYPE p.
DATA: pack TYPE p,pack1 TYPE p,pack2 TYPE p.DATA gd_num TYPE i.
DATA gd_res(1) TYPE c.
gd_num = '85'. "acummulates in /185
PERFORM get_kumul USING gd_num
gs_t512w-lgart
gs_t512w-kumulCHANGING gd_res.
IF gd_res EQ 'X'.
* acumula => do something
ENDIF.
*---------------------------------------------------------------------*
* FORM HEXINCHAR *
*---------------------------------------------------------------------*
FORM hexinchar USING anzahl. "und Feld HEXIN.
IF NOT hexin IS INITIAL.
* maximale Laenge HEXINPUT ist 12 = L'HEXIN bzw. L'CHAR96/8 s. a. MAXdo anzahl times
varying hex from hexin(1) next hexin+1(1) range hexin."UC XMS
SHIFT char96 BY 8 PLACES.
ps = 0. "set sum
pc = 10000000. "set charhextm = x128. "set hex
DO 8 TIMES.IF hex O hextm. ps = ps + pc. ENDIF.
hextm = hextm / 2. pc = pc / 10.
ENDDO.
UNPACK ps TO char96+88(8).ENDDO.
ps = ( 12 - anzahl ) * 8. "MAX = 12, maximale Laenge HEXINPUT
SHIFT char96 BY ps PLACES. "linksbuendig nach CHAR96
ENDIF.
ENDFORM. "END OF HEXINCHAR*---------------------------------------------------------------------*
* FORM GET_KUMUL *
*---------------------------------------------------------------------*
FORM get_kumul USING gc_num TYPE i
gc_lgart TYPE lgartp_kumul
CHANGING gc_acum TYPE c.
DATA gc_kumula LIKE char96.
CLEAR: char96, hexin.
CLEAR gc_acum.
hexin = p_kumul.PERFORM hexinchar USING 12.
gc_kumula = char96.
IF gc_kumula IS NOT INITIAL.
pack = gc_num - 1. "vklas-kl - 1.
SHIFT gc_kumula BY pack PLACES.
IF gc_kumula(1) EQ '1'.gc_acum = 'X'.
ELSE.gc_acum = space.
ENDIF.
8/10/2019 Ejemplos desarrollo HR-SAP
26/37
26
ENDIF.
ENDFORM. "get_kumul
8/10/2019 Ejemplos desarrollo HR-SAP
27/37
27
SAP HR PRESTAMOS ABAP
FUNCIONES UTILES MODULO PRESTAMOS
cl_hrpa_loan_computations=>compute_estimated_end_of_loan
cl_hrpa_loan_computations=>read_payments_for_loan_id
cl_hrpa_loan_computations=>compute_repayment_plan
EJEMPLO
*&---------------------------------------------------------------------*
*& Report Y_TEST_LOAN*&
*&---------------------------------------------------------------------**&
*&
*&---------------------------------------------------------------------*
REPORT y_test_loan.
TABLES pernr.
INFOTYPES: 0045.
DATA instance TYPE REF TO cl_hrpa_loan_computations.
DATA gd_pclo_id TYPE pclo_id.
DATA gd_estimated_end_of_loan TYPE d.DATA data_ref TYPE REF TO data.
DATA gd_message_handler TYPE REF TO if_hrpa_message_handler.
DATA gt_pagos TYPE pclo_payments_tab.
DATA gt_p0078_tab TYPE p0078_tab.
DATA: gt_pclo_repay_tab TYPE pclo_repay_tab,gt_pclo_loan_changes_tab TYPE pclo_loan_changes_tab.
* create dummy message handler
DATA dummy_handler TYPE REF TO cl_hrpa_dummy_message_handler.
CREATE OBJECT dummy_handler.
message_handler = dummy_handler.
START-OF-SELECTION.
GET pernr.
PROVIDE * FROM p0045 BETWEEN pn-begda AND pn-endda.
CALL METHOD cl_hrpa_loan_computations=>get_loan_id_from_p0045
EXPORTINGp0045 = p0045
RECEIVINGloan_id = gd_pclo_id.
* CALCULO DE FECHA FINAL PRESTAMO
try.CALL METHOD cl_hrpa_loan_computations=>compute_estimated_end_of_loan
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
message_handler = dummy_handler
RECEIVING
estimated_end_of_loan = gd_estimated_end_of_loan.
endtry.
* PAGOS DE PRESTAMO
try.
CALL METHOD cl_hrpa_loan_computations=>read_payments_for_loan_idEXPORTING
tclas = 'A'
8/10/2019 Ejemplos desarrollo HR-SAP
28/37
28
loan_id = gd_pclo_id
* ZAHLA = '*'
* SPRPS = '*'
* BEGDA = LOW_DATE
* ENDDA = HIGH_DATE
* NO_AUTH_CHECK = FALSEIMPORTING
payments_tab = gt_pagos* DATA_EXISTS =
* MISSING_AUTH =
.catch cx_hrpa_violated_assertion .
endtry.
try.
CALL METHOD cl_hrpa_loan_computations=>read_p0078_for_loan_id
EXPORTING
tclas = 'A'
loan_id = gd_pclo_id
* ZAHLA = '*'
* SPRPS = '*'
* BEGDA = LOW_DATE* ENDDA = HIGH_DATE
* NO_AUTH_CHECK = FALSE
IMPORTING
p0078_tab = gt_p0078_tab
* DATA_EXISTS =* MISSING_AUTH =
.
catch cx_hrpa_violated_assertion .
endtry.
* GENERAR PLAN DE AMORTIZACION
try.CALL METHOD cl_hrpa_loan_computations=>compute_repayment_plan
EXPORTING
tclas = 'A'loan_id = gd_pclo_id
* NEW_CURRENCY =message_handler = dummy_handler
IMPORTING
repayment_plan = gt_pclo_repay_tab
loan_changes = gt_pclo_loan_changes_tab
* IS_OK =
.catch cx_hrpa_violated_assertion .
endtry.
ENDPROVIDE.
END-OF-SELECTION.
8/10/2019 Ejemplos desarrollo HR-SAP
29/37
29
SAP HR ABAP PERFORMANCE
Ejemplo lectura tablas HRP1001 y HRP1000
En vez de utilizar select * from HRP1001, etc., usar funcion 'RH_READ_INFTY_1001' ,
ejemplo
CALL FUNCTION 'RH_READ_INFTY_1001'EXPORTING
plvar = cc_plvar
otype = 'O'
objid = i_orgid
istat = '1'subty = 'B002'
begda = pn-begda
endda = pn-endda
TABLES
i1001 = gtb_1001
EXCEPTIONSnothing_found = 1
wrong_condition = 2
wrong_parameters = 3
OTHERS = 4.
LOOP AT gtb_1001 WHERE sclas = 'O'.ltb_org-sobid = gtb_1001-sobid.
APPEND ltb_org.
ENDLOOP.
IF sy-subrc NE 0.
ENDIF.
PARA HRP1000 usar 'RH_READ_INFTY_1000'
*---------------------------------------------------------------------*
* FORM is_tech *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------** --> I_POS *
* --> I_ORG *
* --> O_TECH **---------------------------------------------------------------------*
FORM is_tech USING i_pos
i_org
CHANGING o_tech.
CLEAR o_tech.
CALL FUNCTION 'RH_READ_INFTY_1001'
EXPORTING
plvar = cc_plvarotype = 'S'
objid = i_pos
istat = '1'
subty = 'B007'
begda = p0001-begda
endda = p0001-enddaTABLES
i1001 = gtb_1001
8/10/2019 Ejemplos desarrollo HR-SAP
30/37
30
EXCEPTIONS
nothing_found = 1
wrong_condition = 2
wrong_parameters = 3
OTHERS = 4.
LOOP AT gtb_1001 TRANSPORTING NO FIELDSWHERE sclas = '1S'.
ENDLOOP.IF sy-subrc = 0.
CALL FUNCTION 'RH_READ_INFTY_1000'
EXPORTINGplvar = cc_plvar
otype = '1S'
objid = gtb_1001-objid
istat = '1'
begda = gtb_1001-begda
endda = gtb_1001-endda
TABLES
i1000 = gtb_1000
EXCEPTIONS
nothing_found = 1
wrong_condition = 2wrong_parameters = 3
OTHERS = 4.
IF sy-subrc = 0.
LOOP AT gtb_1000 WHERE langu = sy-langu.
ENDLOOP.IF sy-subrc NE 0.
LOOP AT gtb_1000.
ENDLOOP.
ENDIF.
IF gtb_1000-short = 'PT US TECHNI'.
o_tech = 'T'.ELSEIF gtb_1000-short = 'PT US NON-TE'.
o_tech = 'N'.
ELSE.o_tech = space.
ENDIF.ENDIF.
ENDIF.
ENDFORM. "read_p1051
EJEMPLO HR_READ_INFOTYPE
si tenemos el siguiente reporte HR
INFOTYPES: 0001,
0008,2001.
START-OF-SELECTION.
GET pernr.
* basic pay data
rp_provide_from_last p0008 space pn-begda pn-endda.
CHECK p0008-trfar IN so_trfar .
CHECK p0008-trfgb IN so_trfgb .CHECK p0008-trfgr IN so_trfgr .
CHECK p0008-trfst IN so_trfst .
LOOP AT p2001.
PERFORM do_something.
ENDLOOP.
END-OF-SELECTION.
8/10/2019 Ejemplos desarrollo HR-SAP
31/37
31
es mas optimo de la siguiente forma
INFOTYPES: 0001,0008,
2001 MODE n.
START-OF-SELECTION.
GET pernr.
* Basic Pay Data
rp_provide_from_last p0008 space pn-begda pn-endda.
CHECK p0008-trfar IN so_trfar .
CHECK p0008-trfgb IN so_trfgb .
CHECK p0008-trfgr IN so_trfgr .CHECK p0008-trfst IN so_trfst .
PERFORM leer_2001.
LOOP AT p2001.
PERFORM do_something.
ENDLOOP.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* FORM leer_2001 *
*---------------------------------------------------------------------** ........ *
*---------------------------------------------------------------------*
FORM leer_2001.
CLEAR p2001.
REFRESH p2001.CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'pernr = pernr-pernr
infty = '2001'
TABLES
infty_tab = p2001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2
.IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
8/10/2019 Ejemplos desarrollo HR-SAP
32/37
32
SAP HR DRIVER SIMULACION
Simular existencia de Infotipos en driver nomina RPCALCX0
* Tables for intermediate memory mngmt.
TYPES: BEGIN OF hroct_iprel,
pernr LIKE p0001-pernr,
infty LIKE p0001-infty,
idata LIKE prelp OCCURS 0,
END OF hroct_iprel.
DATA: BEGIN OF mem_id_iprel, "Memory ID for infotypes
pernr LIKE p0001-pernr,
value(5) VALUE 'IPREL',END OF mem_id_iprel.
DATA: obj_iprel TYPE REF TO cl_hrpay99_fill_infotypes.
* objects for infotype simulation
DATA: send_it TYPE REF TO cl_hrpay99_send_infotypes,iprel TYPE hrpay99_iprel_table.
*............
*............
*............
IF p_flag = 'X'.
* read & send infotype 0014 to memory for the process of simulation* of the payroll driver RPCALCX0
PERFORM fill_iperl_i0014.
ELSE. "M19
CLEAR retro_date. "M19
ENDIF.IF NOT obj_iprel IS INITIAL.
* create object for infotype simulation
CREATE OBJECT send_it.* fill iprel from importing parameter
iprel = obj_iprel->get_iprel( ).
* fill send_it from table iprelCALL METHOD send_it->set_iprel( iprel ).
* send infotype object to memory
CALL METHOD send_it->send_all.
ENDIF.
*...*...
*...
SUBMIT rpcalcx0
USING SELECTION-SET variant_calc
* using selection-sets of program 'HARCALC0'* using selection-sets of program 'RPCALCX0'
USING SELECTION-SETS OF PROGRAM 'ZPPY_INT_RPCALCX0'
WITH pnppernr eq fired_employees_line-pernr
WITH pnpxabkr eq fired_employees_line-abkrs
WITH pnpabkrs eq fired_employees_line-abkrsWITH pnptimr9 eq space
WITH pnptimra eq 'X'
* WITH pnppabrp EQ fired_employees_line-pabrp "M29
* WITH pnppabrj EQ fired_employees_line-pabrj "M29
WITH pnppabrp eq gd_pabrp "M29
WITH pnppabrj eq gd_pabrj "M29WITH payty eq fired_employees_line-payty
* WITH bondt EQ fired_employees_line-bondt "M29
* WITH ocrsn EQ fired_employees_line-ocrsn "M29WITH bondt eq gd_bondt "M29
WITH ocrsn eq gd_ocrsn "M29
8/10/2019 Ejemplos desarrollo HR-SAP
33/37
33
* with test_on eq ' '
WITH tst_on eq 'X'
WITH prt_prot eq 'X'
WITH sw_spool eq space " Print to spool
* with edt_vari eq variant_cedt " Show payslip
WITH edt_vari eq variant_cedt " Show payslipWITH ecalled eq 'X'
WITH set_nib eq 'X'WITH set_odc eq 'X'
WITH upd_ps eq space
WITH exp_buff eq 'X'WITH imp_buff eq space
* with brk_on eq ' '
* with brk_sc eq ' '
* with brk_off eq 'X'
WITH plgmemky eq memo_key
WITH rueck-ab = retro_date "M19
EXPORTING LIST TO MEMORY AND RETURN.
*---------------------------------------------------------------------*
* FORM fill_iperl_i0014 **---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM fill_iperl_i0014.
DATA: BEGIN OF help_i0014 OCCURS 5.INCLUDE STRUCTURE p0014.
DATA: END OF help_i0014.
* fill iprel with all infotypes
CLEAR iprel.
* refresh iprel.
IF p9902-zzbasetri > 0.****************************************
* RP-READ-INFOTYPE *
***************************************** PARAMETERS: *
* PERNR REQUESTED PERSONALNUMBER** INFTY REQUESTED INFOTYPNUMBER *
* INFTY-TABLE OUTPUT-TABLE LIKE PNNNN*
* BEGDA REQUESTED INTERVAL-BEGIN*
* ENDDA REQUESTED INTERVAL-END *
****************************************
* read all the 0014 records for put in memoryPERFORM read-infotype(sapdbpnp)
TABLES help_i0014
USING p9902-pernr '0014' '18000101' '99991231'.
* distribution of the p9902-zzbasetri ammount in IT0014 records
PERFORM create_i0014 TABLES help_i0014
USING p9902p9902-zzbasetri
p9902-waers.
* Put the IT0014 records in internal object for send it
* to memory
CALL METHOD obj_iprel->insert( help_i0014[] ).
ENDIF.
ENDFORM. "fill_iperl_i0014
ojo en driver rpcalcx0 los infotipos simulados se procesan en
include rpchrt09get pernr.
IF ecalled = 'X'. "XAIAHRK001447
* read infotypes from memory (for infotype simulation)
PERFORM get_iprel USING pernr-pernr. "XAIAHRK001447
8/10/2019 Ejemplos desarrollo HR-SAP
34/37
34
HR NOTAS
DUMP CX_HRPA_INVALID_PARAMETER
Si se topan con este dump(>= 4.7), aca va nota ad-hoc
Solution consists in calling the subroutine DO_NOTHING in order to initialize theold masterdata framework. To apply this note manually, follow the instructions listed in thenextsection.
Ejemplo,
*--- load-of-program -------------------------------------------------*
* The load-of-program event is useful for the time of transition
* from the old to the new master data frame work.LOAD-OF-PROGRAM.* to initialise the old master data framework
PERFORM do_nothing(sapfp50p). "
INITIALIZATION.
* select only active employees
rp-sel-ein-aus-init.
Weird!!!, pero me paso un par de veces.
Obtenido de
"http://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMP"
http://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMP8/10/2019 Ejemplos desarrollo HR-SAP
35/37
35
SAP HR FAQ
*1) como leer el molga de un empleado
CALL FUNCTION 'HR_COUNTRYGROUPING_GET'
EXPORTING
pernr = gd_pernr
begda = datum
endda = datumIMPORTING
molga = gd_molga
EXCEPTIONS
not_found = 1
OTHERS = 2.
*2) detalle compaia ( campo bukrs )
CALL FUNCTION 'FI_COMPANYCODE_GETDETAIL'
EXPORTINGbukrs_int = pnpbukrs-lowauthority_check = space
IMPORTING
t001_int = comp_det
TABLES
t001z_int = appendix
EXCEPTIONSbukrs_not_found = 1
no_authority_display_bukrs = 2
OTHERS = 3.
*3) nombres de mes ( util en formularios )
CALL FUNCTION 'MONTH_NAMES_GET'* EXPORTING
* LANGUAGE = SY-LANGU
* IMPORTING
* RETURN_CODE =TABLES
month_names = names
EXCEPTIONS
month_names_not_found = 1
OTHERS = 2.
*4) sumar / restar meses a fecha
CALL FUNCTION 'HR_BR_ADD_MONTH_TO_DATE'
EXPORTINGdmm_datin = first_daydmm_count = '1'
dmm_oper = '-'
dmm_pos = ' '
IMPORTING
dmm_daout = aux_date.
*5) ultimo dia del mes
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = pnpbegdaIMPORTING
last_day_of_month = pnpenddaEXCEPTIONS
day_in_no_date = 1
8/10/2019 Ejemplos desarrollo HR-SAP
36/37
36
OTHERS = 2.
*6) leer horario de trabajo de empleado
wa_pernr-pernr = p_pernr.
APPEND wa_pernr TO tb_pernr.CALL FUNCTION 'HR_PERSON_READ_WORK_SCHEDULE'
EXPORTINGbegin_date = p_begda
end_date = p_endda
* GROUPING_DWS =* GROUPING_ATTENDENCE =
* GROUPING_SUBSTITUTE =
* READ_FROM_DATABASE = ' '
TABLES
pernr_tab = tb_pernr
psp = tb_psp
day_psp = tb_day_psp
EXCEPTIONS
error_in_build_psp = 1
OTHERS = 2
.*7) leer caracteristica ( feature ) hr , transaccion pe03
DATA pben0 LIKE zben0.
DATA l_back(5).
* fill feature structureCLEAR pben0.
pben0-barea = p_barea.
pben0-bplan = p_bplan.
pben0-depcv = 'DEP0'. "Dummy
CLEAR p_val.
* get value of from feature (PE03 transaction)CALL FUNCTION 'HR_FEATURE_BACKFIELD'
EXPORTING
feature = 'ZBEN0'struc_content = pben0
IMPORTINGback = l_back
EXCEPTIONS
dummy = 1
error_operation = 2
no_backvalue = 3
feature_not_generated = 4invalid_sign_in_funid = 5
field_in_report_tab_in_pe03 = 6
OTHERS = 7.
IF sy-subrc NE 0.
p_val = space.
ELSE.IF l_back space.
p_val = 'X'.
ELSE.
p_val = space.
ENDIF.
ENDIF.
*8) verificar nif ( rut )
CALL FUNCTION 'TAX_NUMBER_CHECK'EXPORTING
country = p_land1
tax_code_1 = p_stcd1.
*9) leer clase de fecha de infotipo p0041
8/10/2019 Ejemplos desarrollo HR-SAP
37/37
FORM get_fecha USING p0041 LIKE p0041
p_dar LIKE p0041-dar01
CHANGING p_fecha.
DATA ld_dat LIKE p0041-dat01.
DATA ld_dar LIKE p0041-dar01.
CLEAR p_fecha.DO 12 TIMES VARYING ld_dat FROM p0041-dat01 NEXT p0041-dat02
VARYING ld_dar FROM p0041-dar01 NEXT p0041-dar02.IF ld_dar = p_dar.
p_fecha = ld_dat.
ENDIF.ENDDO.
ENDFORM.