1. Programación en
Modulo HR
• Transacciones HR (Pag 2)
• Programación 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
1
2. Transacciones en HR
Master Data
PA10 Personnel File
PA20 Display HR Master Data
PA30 Maintain HR Master Data
PA40 Personnel Events
PA41 Change Hiring Data
PA42 Fast Data Entry for Events
PRMD Maintain HR Master Data
PRMF Travel Expenses: Feature TRVFD
PRML Set Country Grouping via Popup
PRMM Personnel Events
PRMO Travel Expenses: Feature TRVCO
PRMP Travel Expenses: Feature TRVPA
PRMS Display HR Master Data
PRMT Update Matchcode
PSO3 Infotype overview
PSO4 Individual maintenance of infotypes
Time Management
PA51 Display Time Data
PA53 Display Time Data
PA61 Maintain Time Data
PA62 List Entry of Additional Data
PA63 Maintain Time Data
PA64 Calendar Entry
PA70 Fast Data Entry
PA71 Fast Entry of Time Data
PBAB Maintain vacancy assignments
PT01 Create Work Schedule
PT02 Change Work Schedule
PT03 Display Work Schedules
Payroll
PC_PAYRESULT visualizar resultados de nómina
PC00 Run Payroll
PC10 Payroll menu USA
PE00 Starts Transactions PE01,PE02,PE03
PE01 Schemas
PE02 Calculation Rules
PE03 Features
PE04 Create functions and operations
PE51 HR form editor
PRCA Payroll calendar
PRCT Current Settings
PRCU Printing Checks USA
PRD1 Create DME
SM31 Maintain Tables
SM12 Locked Secessions
TSTC Table lookup
SPR0 IMG
SE16 Data Browser (Table reports)
2
3. PP03 PD Tables
PP0M Change Org Unit
P013 Maintain Positions
PO03 Maintain Jobs
Benefits
PA85 Benefits - Call RPLBEN11
PA86 Benefits - Call RPLBEN07
PA87 Benefits - Call RPLBEN09
PA89 COBRA Administration
PA90 Benefits Enrollment – Individual
PA91 Benefits - Forms
PA92 Benefits Tables - Maintain
PA93 Benefits Tables - Display
PA94 Benefits - Access Reporting Tree
PA95 Benefits IMG - Jump to Views
PA96 Benefits reporting
PA97 Salary Administration - Matrix
PA98 Salary Administration
PA99 Compensation Admin. - rel.changes
PACP HR-CH: Pension fund, interface
General/Reporting
PM00 Menu for HR Reports
PM01 Dialogs in HR - Create custom infotypes
PRF0 Standard Form
PSVT Dynamic Tools Menu
PAR1 Flexible employee data
PAR2 Employee list
H99CWTR0 : Reporte de CCNominas
H99_DISPLAY_PAYRESULT : Ver resultados nomina
PD - Organizational Management
PP0M Change Org Unit
PO03 Maintain Jobs
PO13 Maintain Position
PO10 Maintain Organizational Unit
PP01 Maintain Plan Data (menu-guided)
PP02 Maintain Plan Data (Open)
PP03 Maintain Plan Data (event-guided)
PP05 Number Ranges
PP06 Number Range Maintenance: HRADATA
PP07 Tasks/Descriptions
PP69 Choose Text for Organizational Unit
PP90 Set Up Organization
PPO1 Change Cost Center Assignment
PPO2 Display Cost Center Assignment
PPO3 Change Reporting Structure
PPO4 Display Reporting Structure
PPO5 Change Object Indicators (O/S)
PPO6 Change Object Indicators O/S
PPOA Display Menu Interface (with dyn.)
PPOC Create Organizational Unit
PPOM Maintain Organizational Plan
PPOS Display Organizational Plan
3
4. PQ01 Events for Work Center
PQ02 Events for Training Program
PQ03 Events for Job
PQ04 Events for Business Event Type
PQ06 Location Events
PQ07 Resource Events
PQ08 Events for External Person
PQ09 Events for Business Event Group
PQ10 Events for Organizational Unit
PQ11 Events for Qualification
PQ12 Resource Type Events
PQ13 Events for Position
PQ14 Events for Task
PQ15 Events for Company
PSO5 PD: Administration Tools
PSOA Work Center Reporting
PSOC Job Reporting
PSOG OrgManagement General Reporting
PSOI Tools Integration PA-PD
PSOO Organizational Unit Reporting
PSOS Position Reporting
PSOT Task Reporting
Recruitment
PB10 Init.entry of applicant master data
PB20 Display applicant master data
PB30 Maintain applicant master data
PB40 Applicant events
PB50 Display applicant actions
PB60 Maintain applicant actions
PB80 Evaluate vacancies
PBA0 Evaluate advertisements
PBA1 Applicant index
PBA2 List of applications
PBA3 Applicant vacancy assignment list
PBA4 Receipt of application
4
5. SAP HR HR INFOTYPE OPERATION
Funcion para crear modificar borrar infotipos
REPORT zprueba_vmg3.
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-pernr
IMPORTING
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.
ELSE.
r_p0014-begda = wa_bonus-begda.
ENDIF.
IF flag_flag <> 'X'.
IF pa_rbp1 = 'X'.
PERFORM months_between_dates USING so_febon-low
so_febon-high
5
8. 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 BY
space.
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 ).
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.
ENDDO.
* Use 'BAPI_EMPLOYEE_DEQUEUE' to un-lock the employee before updating
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = wa_bonus-pernr
IMPORTING
return = l_bapireturn.
ENDLOOP.
Carga Infotipo 0171
DATA: BEGIN OF entry_dates OCCURS 5.
INCLUDE STRUCTURE hida.
DATA: END OF entry_dates.
DATA:
lv_barea TYPE p0171-barea,
lv_bengr TYPE p0171-bengr,
lv_bstat TYPE p0171-bstat,
ld_begda TYPE d.
8
9. DATA: ls_p0171 LIKE p0171.
DATA: ls_bapireturn LIKE bapireturn1.
DATA: lt_bapipakey_tab LIKE bapipakey OCCURS 0 WITH HEADER LINE.
* 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.
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'
EXPORTING
persnr = current_sapno
IMPORTING
entrydate = ld_begda
TABLES
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
USING
current_sapno
ld_begda
CHANGING
lv_barea
lv_bengr
lv_bstat.
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'
EXPORTING
infty = ls_p0171-infty
number = ls_p0171-pernr
subtype = ls_p0171-subty
validityend = ls_p0171-endda
validitybegin = ls_p0171-begda
9
10. record = ls_p0171
operation = 'INS'
nocommit = testrun
IMPORTING
return = ls_bapireturn
key = lt_bapipakey_tab
EXCEPTIONS
OTHERS = 0.
IF NOT ls_bapireturn IS INITIAL.
WRITE:/ ls_p0171-pernr,
'Error crear IT0171'(004),
ls_bapireturn-message+0(120).
ELSE.
WRITE:/ ls_p0171-pernr, 'Registro creado con exito'(001).
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = current_sapno
IMPORTING
return = ls_bapireturn.
10
11. SAP HR ABAP LECTURA CLUSTER
Ejemplo 1 lectura de estructura ARRS
DATA: ld_msg(100).
DATA: ld_relid LIKE t500l-relid.
DATA: BEGIN OF it_rgdir OCCURS 0.
INCLUDE STRUCTURE pc261.
DATA: END OF it_rgdir.
DATA: ls_arrrs LIKE pc22z.
CLEAR gt_rgdir[].
CALL FUNCTION 'CA_CU_READ_RGDIR_NEW'
EXPORTING
persnr = pernr-pernr
IMPORTING
molga = gd_molga
TABLES
cu_ca_rgdir = gt_rgdir
EXCEPTIONS
import_mismatch_error_cu = 1
import_mismatch_error_ca = 2
no_read_authority_ca = 3
no_read_authority_cu = 4
error_reading_cu = 5
error_reading_ca = 6
no_record_found = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ld_msg.
p_subrc = 4.
EXIT.
ENDIF.
DELETE gt_rgdir WHERE
NOT ( fpend BETWEEN pn-begda AND pn-endda ).
PERFORM read_relid USING gd_molga ld_relid.
LOOP AT gt_rgdir INTO gs_rgdir WHERE srtza = 'A'.
CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = ld_relid
employeenumber = pernr-pernr
sequencenumber = gs_rgdir-seqnr
read_only_international = 'X'
CHANGING
payroll_result = gt_result
EXCEPTIONS
illegal_isocode_or_clusterid = 1
error_generating_import = 2
import_mismatch_error = 3
subpool_dir_full = 4
no_read_authority = 5
11
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.
12
13. SAP HR ABAP BAPI BASICPAY
GETDETAIL
Ejemplo de BAPI 'BAPI_BASICPAY_GETDETAIL'
para leer el IT0008
Ojo que esta BAPI calcula los conceptos indirectos :-)
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'
EXPORTING
employeenumber = p0008-pernr
subtype = p0008-subty
objectid = p0008-objps
lockindicator = p0008-sprps
validitybegin = p0008-begda
validityend = p0008-endda
recordnumber = p0008-seqnr
IMPORTING
return = lt_return
TABLES
wagetypes = gt_bapi_wagetypes.
Ejemplo 2, Aca soluciona problema con
autorizacion en IT0008
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.
DATA: fname LIKE pprop-fname.
FIELD-SYMBOLS <field_value>.
DATA: molga LIKE t001p-molga,
* WAGETYPENO LIKE T539S-LGANR,
wagetypeno(2) TYPE n,
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,
currencyexpstring LIKE sy-msgv1.
CLEAR gt_bapi_wagetypes[].
CLEAR p_sumbb.
CHECK p0008 IS NOT INITIAL.
13
14. CALL FUNCTION 'RP_NUMBER_OF_WAGETYPES_0008'
IMPORTING wt_count = ld_number_of_lgart_in_p0008.
REFRESH gt_bapi_wagetypes.
* DO 20 TIMES.
DO number_of_lgart_in_p0008 TIMES.
CLEAR gt_bapi_wagetypes.
MOVE sy-index TO wagetypeno.
CONCATENATE 'P0008-LGA' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
MOVE <field_value> TO gt_bapi_wagetypes-wagetype.
CONCATENATE 'P0008-IND' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
MOVE <field_value> TO gt_bapi_wagetypes-indvaluat.
CONCATENATE 'P0008-BET' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = p0008-waers
amount_internal = <field_value>
IMPORTING
amount_external = gt_bapi_wagetypes-amount
EXCEPTIONS
OTHERS = 0.
IF sy-subrc NE 0.
ENDIF.
CONCATENATE 'P0008-ANZ' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
MOVE <field_value> TO gt_bapi_wagetypes-number.
CONCATENATE 'P0008-EIN' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
MOVE <field_value> TO gt_bapi_wagetypes-timeunit.
CONCATENATE 'P0008-OPK' wagetypeno INTO fname.
ASSIGN (fname) TO <field_value>.
MOVE <field_value> TO gt_bapi_wagetypes-operindic.
PERFORM 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'
14
15. payscaletype = p0008-trfar
payscalearea = p0008-trfgb
payscalegroup = p0008-trfgr
payscalelevel = p0008-trfst
currencyimp = p0008-waers
capacityutilization = p0008-bsgrd
hoursworked = p0008-divgv
IMPORTING
return = lt_return
TABLES
wagetypes = gt_bapi_wagetypes
EXCEPTIONS
OTHERS = 0.
IF NOT lt_return IS INITIAL.
IF lt_return-type = 'S'.
CLEAR lt_return.
ENDIF.
ENDIF.
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'
EXPORTING
currency = p0008-waers
amount_external = ld_amount_external
max_number_of_digits = 15
IMPORTING
amount_internal = p_sumbb
.
15
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
IMPORTING
subrc = ld_subrc
TABLES
16
17. infty_tab = lt_0001.
LOOP AT lt_0001.
ENDLOOP.
IF sy-subrc = 0.
SELECT SINGLE butxt INTO e_perdata-butxt FROM t001
WHERE bukrs = lt_0001-bukrs.
SELECT SINGLE ptext INTO e_perdata-ptext
FROM 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_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_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. "Nombres
e_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_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_tab = lt_0041.
17
18. LOOP AT lt_0041.
ENDLOOP.
IF sy-subrc EQ 0.
* leer fecha de contratacion
PERFORM 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_begda
endda = 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 AND
endda >= ld_begda AND
begda <= ld_endda.
IF sy-subrc = 0.
e_perdata-porafp = ld_f_pens + ld_seg_inval .
ENDIF.
ENDIF.
*--------------------------------------------------------------------*
* leer datos isapre
*--------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
pernr = pernr
infty = '9007'
begda = ld_begda
endda = ld_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_tab = lt_9007.
LOOP AT lt_9007.
ENDLOOP.
IF sy-subrc = 0.
SELECT SINGLE molga INTO ld_molga
FROM t500p WHERE persa = lt_0001-werks.
SELECT SINGLE isapre porcentaje INTO
(e_perdata-isapre,e_perdata-porisa)
FROM z7cl_isa0
WHERE codigo = lt_9007-codigo AND
zplan = lt_9007-zplan AND
molga = ld_molga AND
hasta >= ld_begda AND
desde <= ld_endda.
18
19. ENDIF.
*--------------------------------------------------------------------*
* leer datos de infotipo 0008
*--------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
pernr = pernr
infty = '0008'
begda = ld_begda
endda = ld_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_tab = lt_0008.
LOOP AT lt_0008.
ENDLOOP.
IF sy-subrc = 0.
PERFORM get_p0008_detail TABLES gt_bapi_wagetypes
USING lt_0008 .
LOOP AT gt_bapi_wagetypes.
IF NOT gt_bapi_wagetypes-wagetype IN ra_lgart_0008.
DELETE gt_bapi_wagetypes.
ELSE.
IF gt_bapi_wagetypes-amount < 0.
gt_bapi_wagetypes-amount = gt_bapi_wagetypes-amount * -1.
MODIFY gt_bapi_wagetypes.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
*----------------------------------------------------------------------*
* Leer datos Infotipo 0014
*----------------------------------------------------------------------*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
pernr = pernr
infty = '0014'
begda = ld_begda
endda = ld_endda
IMPORTING
subrc = ld_subrc
TABLES
infty_tab = lt_0014.
LOOP AT lt_0014.
ld_auxtabix = sy-tabix.
IF NOT lt_0014-lgart IN ra_lgart_0014.
DELETE lt_0014 INDEX ld_auxtabix.
ELSE.
CLEAR gt_bapi_wagetypes.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = lt_0014-waers
amount_internal = lt_0014-betrg
IMPORTING
amount_external = gt_bapi_wagetypes-amount.
gt_bapi_wagetypes-wagetype = lt_0014-lgart.
*gt_bapi_wagetypes-NAMEOFWAGETYPE
* Texto CC Nómina
SELECT SINGLE lgtxt INTO gt_bapi_wagetypes-nameofwagetype
FROM t512t
WHERE sprsl = sy-langu
AND molga = ld_molga
AND lgart = lt_0014-lgart.
APPEND gt_bapi_wagetypes.
ENDIF.
19
20. 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
* <--date output date
*----------------------------------------------------------------------*
FORM leer_fecha_i0041 USING p0041 LIKE p0041
value(id_date) TYPE datar
CHANGING date.
FIELD-SYMBOLS <f>.
DATA cont(2) TYPE n.
DATA campo1(11) VALUE 'P0041-DARXX'.
DATA campo2(11) VALUE 'P0041-DATXX'.
cont = 1.
* search from the fields p0041-darxx one who have a value
* of id_date, then the date is the corresponding P0041-datxx field
DO 12 TIMES.
campo1+9(2) = cont.
campo2+9(2) = cont.
ASSIGN (campo1) TO <f>.
IF <f> = id_date.
ASSIGN (campo2) TO <f>.
date = <f>.
EXIT.
ENDIF.
ADD 1 TO cont.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_p0008_detail
*&---------------------------------------------------------------------*
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'
EXPORTING
employeenumber = p0008-pernr
subtype = p0008-subty
objectid = p0008-objps
lockindicator = p0008-sprps
validitybegin = p0008-begda
validityend = p0008-endda
recordnumber = p0008-seqnr
IMPORTING
return = lt_return
TABLES
wagetypes = gt_bapi_wagetypes.
ENDFORM.
20
21. 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_orgid
0.
*&---------------------------------------------------------------------*
*& Form get_org
*&---------------------------------------------------------------------*
FORM get_org USING p_orgid_sup
p_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-datum
AND 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_orgid
ld_objid
p_pos.
ENDLOOP.
ENDIF.
ENDFORM. "get_org
21
22. 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 in
macros
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 year
b2-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_bono
AND 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
22
23. 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_end
TABLES
int_time_results = time_results
EXCEPTIONS
wrong_cluster_version = 1
no_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.
23
24. SAP HR ABAP LEER ACUMULADORES
DATA:
char96(96), "char-feld fuer 96 char 0/1
hexin(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-kumul
CHANGING 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. MAX
do 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 char
hextm = 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 lgart
p_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.
ENDIF.
24
26. 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
EXPORTING
p0045 = p0045
RECEIVING
loan_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_id
26
28. SAP HR TABLAS INFOTIPOS
CATSCO Cross-Application Time Sheet (CATS)- Transfer
to CO
CATSDB CATS- Database Table for Time Sheet
CATSHR Cross-Application Time Sheet (CATS)- Transfer
to HR
CATSMM Cross-Application Time Sheet (CATS)- Transfer
to MM
CATSPM Cross-Application Time Sheet (CATS)- Transfer
to PM/CS
CATSPS Cross-Application Time Sheet (CATS)- Transfer
to PS
CSKS Cost Center Master Data
CSKT Cost Center Texts
PCL1 HR Cluster 1
PCL2 HR Cluster 2
T001P Personnel Area/Subarea
T001T Company code-dependent texts
T500L Personnel Country Grouping
T500P Personnel Areas
T502T Marital Status Designators
T503 Employee Group/Subgroup
T503T Employee Subgroup Names
T508A Work Schedule Rules
T510 Pay Scale Groups
T510A Pay Scale Types
T510F Assign Pay Scale --- Currency
T510W Pay Scale - Period Parameter Assignment
T511 Wage Types
T512T Wage Type Texts
T512W Wage Type Valuation
T512Z Permissibility of Wage Types per Infotype
T527X Organizational Units
T528T Position Texts
T529T Personnel Action Texts
T529U Status Values
T530 Reasons for Actions
T530T Reason for Action Texts
T549A Payroll Accounting Areas
T549Q Payroll Periods
T550A Daily Work Schedule
T550S Daily Work Schedule Texts
T551S Period Work Schedule Texts
T552A Monthly Work Schedule
T554C Absence Valuation
T554S Attendance and Absence Types
T554T Attendance and Absence Texts
T558B Payroll Account Transfer- Payroll Periods
T569V Control Records
T5K8C Transfer ext. payroll results into Canadian
specific tables
T74FA Benefit insurance plan
T74FC Benefits Insurance Coverage Rule
HRP1000 Infotype 1000 DB Table (Objects)
HRP1001 Infotype 1001 DB Table (Relationships)
HRP1002 Infotype 1002 DB Table
HRP1003 Infotype 1003 DB Table
HRP1004 Infotype 1004 DB table
HRP1005 DB Table for Infotype 1005 (Planned
Compensation)
HRP1006 Infotype 1006 DB table
HRP1007 Infotype 1007 DB Table
HRP1008 Infotype 1008 DB Table
HRP1009 Infotype 1009 DB table
HRP1010 Infotype 1010 DB table
HRP1011 Infotype 1011 DB Table
HRP1013 Infotype 1013 DB Table
HRP1014 Infotype 1014 DB Table
HRP1015 Infotype 1015 DB table
HRP1016 Infotype 1016 DB Table
HRP1017 Infotype 1016 DB Table
HRP1018 DB Table for Infotype 1018 Cost Distribution
HRP1019 DB Table for Infotype 1019 Required Positions
HRP1020 Infotype 1020 DB table
HRP1021 INFOTYPE 1021 DB TABLE
HRP1023 Infotype 1023 DB table
HRP1024 INFOTYPE 1024 DB TABLE
HRP1025 INFOTYPE 1025 DB TABLE
HRP1026 Infotype 1026 DB table
HRP1027 Infotype 1027 DB table
HRP1028 Infotype 1028 DB Table
HRP1029 Infotype 1029 DB table
HRP1030 Infotype 1030 DB table
HRP1031 Infotype 1031 DB table
HRP1032 Infotype 1032 DB Table
HRP1033 DB table for infotype 1033
HRP1034 Infotype 1034 DB table
HRP1035 Infotype 1035 DB Table
HRP1036 Infotype 1036 DB table
HRP1037 Infotype 1037 DB Table
HRP1038 Infotype 1038 DB table
28
29. HRP1039 Database Table for Infotype 1039
HRP1040 Database Table for Infotype 1040
HRP1041 DB Table for Infotype 1041
HRP1042 Infotype 1042 DB Table
HRP1043 DB Table for Infotype 1043
HRP1044 DB Table for Infotype 1044
HRP1045 DB Table for Infotype 1045
HRP1046 Database Table for Infotype 1046
HRP1047 DB Table for Infotype 1047
HRP1048 DB Table for Infotype 1048
HRP1049 Database Tables for Infotype 1049
HRP1050 DB Table for Infotype 1050 (Job Evaluation
Results)
HRP1051 DB Table for Infotype 1051 (Survey Results)
HRP1060 DB Table for Infotype 1060
HRP1061 DB Table for Infotype 1061
HRP1062 DB Table for Infotype 1062
HRP1063 DB Table for Infotype 1063
HRP1201 Infotype 1201 DB Table
HRP1205 Infotype 1205 DB Table
HRP1206 Infotype 1206 DB Table
HRP1208 Infotype 1208 DB Table
HRP1209 Infotype 1209 DB Table
HRP1210 Infotype 1210 DB Table
HRP1211 Infotype 1211 DB Table
HRP1212 Infotype 1212 DB Table
HRP1213 Infotype 1213 DB Table
HRP1214 Infotype 1214 DB Table
HRP1215 Infotype 1215 DB Table
HRP1216 Infotype 1216 DB Table
HRP1217 Infotype 1217 DB Table
HRP1218 DB Table for Infotype 1218
HRP1220 DB Table for Infotype 1220 Activity Profile
HRP1221 DB Table for Infotype 1221 Excluded Activities
HRP1222 Infotype 1222- General attribute maintenance
HRP1230 DB Table for Infotype 1230
HRP1240 DB Table for Infotype 1240
HRP1250 DB table for infotype 1250
HRP1251 DB table for infotype 1251
HRP1252 DB table for infotype 1252
HRP1253 DB table for infotype 1253
HRP1254 DB Table for Infotype 1254
HRP1260 DB Table for Infotype 1260
HRP1270 DB Table for Info Type 1270
HRP1403 DB table for infotype 1403
HRP1404 DB table for infotype 1404
HRP1500 DB Table for Infotype 1500
HRP1501 DB Table for Infotype 1501
HRP1502 DB Table for Infotype 1502
HRP1503 DB Table for Infotype 1503
HRP1504 DB Table for Infotype 1504
HRP1505 DB Table for Infotype 1505
HRP1506 DB Table for Infotype 1506
HRP1507 DB Table for Infotype 1507
HRP1518 DB Table for Infotype 1518
HRP1519 DB Table for Infotype 1519
HRP1520 DB Table for Infotype 1520
HRP1600 Database Table for Infotype 1600
HRP1601 Database Table for Infotype 1601
HRPAD21 Additional data PAD21
HRPAD22 Additional data PAD22
HRPAD23 Additional data PAD23
HRPAD25 Additional data PAD25
HRPAD27 Additional data PAD27
HRPAD31 Additional data PAD31
HRPAD34 Additional Data for Relationship 'has attended'
HRPAD44 PAD44 Additional Data
HRPAD47 PAD47 Additional Data
HRPAD48 Additional Data PAD48
HRPAD50 Additional Data PAD50
HRPAD51 Additional data PAD51
HRPAD53 Additional Data PAD53
HRPAD63 PAD63 Additional Data
HRPAD77 Additional data for PAD77
HRPADBLIST Additional Data Databases
HRPADD2 Additional Data PADD2
HRPADD3 Additional Data PADD3
HRPADIC Additional Data PADD2
HRPADNLIST Additional Data Number List
HRPADNN General Additional Data Table
HRPADP1 Additional Data PADP1
HRPADP2 Additional Data PADP2
HRPADPM Additional Data PADPM
HRPADTI PADTI Additional Data
HRPADUZ PADUZ Additional Data- Requirements
Assignment of Persons
HRPADXN Additional Data PADXN
HRPS_T012K For Decoupled Access to T012K (House
Bank and Account)
HRPVAC List of vacant positions
HRPXXXX DB Table for Infotype XXXX
HRPYYYY DB Table for Infotype YYYY
PA2001 HR Time Record- Infotype 2001 (Absences)
PA2001_UGR Generated Table for View PA2001_UGR
PA2002 HR Time Record- Infotype 2002 (Attendances)
PA2002_UGR Generated Table for View PA2002_UGR
PA2003 HR Time Record- Infotype 2003 (Substitutions)
PA2004 HR Time Record- Infotype 2004 (Availability)
PA2005 HR Time Record- Infotype 2005 (Overtime)
PA2006 HR Time Record- Infotype 2006 (Absence
Quotas)
PA2006_UGR Generated Table for View PA2006_UGR
29
38. 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
EXCEPTIONS
nothing_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_plvar
otype = 'S'
objid = i_pos
istat = '1'
subty = 'B007'
begda = p0001-begda
endda = p0001-endda
TABLES
i1001 = gtb_1001
EXCEPTIONS
38
39. nothing_found = 1
wrong_condition = 2
wrong_parameters = 3
OTHERS = 4.
LOOP AT gtb_1001 TRANSPORTING NO FIELDS
WHERE sclas = '1S'.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'RH_READ_INFTY_1000'
EXPORTING
plvar = 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 = 2
wrong_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.
39
40. • 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.
40
41. 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 iprel
CALL 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-abkrs
WITH 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 "M29
WITH payty eq fired_employees_line-payty
41
42. * WITH bondt EQ fired_employees_line-bondt "M29
* WITH ocrsn EQ fired_employees_line-ocrsn "M29
WITH bondt eq gd_bondt "M29
WITH ocrsn eq gd_ocrsn "M29
* 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 payslip
WITH 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 memory
PERFORM 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 p9902
p9902-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 rpchrt09
get pernr.
IF ecalled = 'X'. "XAIAHRK001447
* read infotypes from memory (for infotype simulation)
42
44. 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 the old master
data framework. To apply this note manually, follow the instructions listed in the next
section.
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"
44
45. SAP HR FAQ
*1) como leer el molga de un empleado
CALL FUNCTION 'HR_COUNTRYGROUPING_GET'
EXPORTING
pernr = gd_pernr
begda = datum
endda = datum
IMPORTING
molga = gd_molga
EXCEPTIONS
not_found = 1
OTHERS = 2.
*2) detalle compañia ( campo bukrs )
CALL FUNCTION 'FI_COMPANYCODE_GETDETAIL'
EXPORTING
bukrs_int = pnpbukrs-low
authority_check = space
IMPORTING
t001_int = comp_det
TABLES
t001z_int = appendix
EXCEPTIONS
bukrs_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'
EXPORTING
dmm_datin = first_day
dmm_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 = pnpbegda
IMPORTING
last_day_of_month = pnpendda
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
45
46. *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'
EXPORTING
begin_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 structure
CLEAR 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
IMPORTING
back = l_back
EXCEPTIONS
dummy = 1
error_operation = 2
no_backvalue = 3
feature_not_generated = 4
invalid_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
FORM get_fecha USING p0041 LIKE p0041
p_dar LIKE p0041-dar01
46
47. 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.
47