Difference between revisions of "SAP HCM ABAP FAQ"
| (45 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
=== Como leer el MOLGA de un EMPLEADO === | === Como leer el MOLGA de un EMPLEADO === | ||
| − | |||
CALL FUNCTION 'HR_COUNTRYGROUPING_GET' | CALL FUNCTION 'HR_COUNTRYGROUPING_GET' | ||
EXPORTING | EXPORTING | ||
| Line 12: | Line 11: | ||
OTHERS = 2 | OTHERS = 2 | ||
. | . | ||
| − | |||
=== Detalle compañia ( campo BUKRS ) === | === Detalle compañia ( campo BUKRS ) === | ||
| − | |||
call function 'FI_COMPANYCODE_GETDETAIL' | call function 'FI_COMPANYCODE_GETDETAIL' | ||
exporting | exporting | ||
| Line 29: | Line 26: | ||
=== Nombres de MES ( util en formularios ) === | === Nombres de MES ( util en formularios ) === | ||
| − | |||
call function 'MONTH_NAMES_GET' | call function 'MONTH_NAMES_GET' | ||
* EXPORTING | * EXPORTING | ||
| Line 40: | Line 36: | ||
month_names_not_found = 1 | month_names_not_found = 1 | ||
others = 2. | others = 2. | ||
| − | |||
=== Sumar / Restar meses a fecha === | === Sumar / Restar meses a fecha === | ||
| − | |||
call function 'HR_BR_ADD_MONTH_TO_DATE' | call function 'HR_BR_ADD_MONTH_TO_DATE' | ||
exporting | exporting | ||
| Line 51: | Line 45: | ||
importing | importing | ||
dmm_daout = aux_date. | dmm_daout = aux_date. | ||
| − | |||
=== Ultimo dia del mes === | === Ultimo dia del mes === | ||
| Line 62: | Line 55: | ||
day_in_no_date = 1 | day_in_no_date = 1 | ||
others = 2. | others = 2. | ||
| − | |||
=== Leer Horario de trabajo de empleado === | === Leer Horario de trabajo de empleado === | ||
| − | + | <nowiki>wa_pernr-pernr = p_pernr. | |
| − | wa_pernr-pernr = p_pernr. | ||
append wa_pernr to tb_pernr. | append wa_pernr to tb_pernr. | ||
| Line 73: | Line 64: | ||
begin_date = p_begda | begin_date = p_begda | ||
end_date = p_endda | end_date = p_endda | ||
| − | |||
| − | |||
| − | |||
| − | |||
tables | tables | ||
pernr_tab = tb_pernr | pernr_tab = tb_pernr | ||
| Line 85: | Line 72: | ||
others = 2 | others = 2 | ||
. | . | ||
| + | |||
| + | form validar_dia_libre USING iv_pernr type pernr_d | ||
| + | iv_begda type d | ||
| + | iv_endda type d | ||
| + | CHANGING es_return type bapiret2. | ||
| + | data: lt_psp type TABLE OF PDPSP. | ||
| + | |||
| + | clear es_return. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_TIMEDATA_PSP' | ||
| + | EXPORTING | ||
| + | begin_date = iv_begda | ||
| + | end_date = iv_endda | ||
| + | person_id = iv_pernr | ||
| + | person_typ = 'P' | ||
| + | TABLES | ||
| + | pers_avail = lt_psp | ||
| + | EXCEPTIONS | ||
| + | OTHERS = 4. | ||
| + | |||
| + | loop at lt_psp into data(ls_psp). | ||
| + | if ls_psp-tprog = 'LIBR'. | ||
| + | es_return-type = 'E'. | ||
| + | es_return-message = |Para empleado día { ls_psp-datum date = user } es libre|. | ||
| + | exit. | ||
| + | endif. | ||
| + | ENDLOOP. | ||
| + | |||
| + | ENDFORM.</nowiki> | ||
| + | |||
| + | ===Obtener día laboral=== | ||
| + | <nowiki> CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE' | ||
| + | EXPORTING | ||
| + | correct_option = '+' | ||
| + | date = lv_fecha_ent | ||
| + | factory_calendar_id = 'CL' | ||
| + | IMPORTING | ||
| + | date = lv_fecha_sal | ||
| + | EXCEPTIONS | ||
| + | calendar_buffer_not_loadable = 1 | ||
| + | correct_option_invalid = 2 | ||
| + | date_after_range = 3 | ||
| + | date_before_range = 4 | ||
| + | date_invalid = 5 | ||
| + | factory_calendar_not_found = 6 | ||
| + | OTHERS = 7. | ||
| + | |||
| + | IF lv_fecha_ent NE lv_fecha_sal. | ||
| + | lv_feriado = lv_feriado + 1. | ||
| + | ENDIF.</nowiki> | ||
| + | |||
| + | ===FM Day_Attributes_Get=== | ||
| + | <nowiki> | ||
| + | DATA: l_tab_day_attributes TYPE gle_tab_ecs_acp_day_attributes. | ||
| + | DATA: l_str_day_attributes TYPE casdayattr. | ||
| + | |||
| + | CLEAR: e_flg_true, e_flg_failed. | ||
| + | |||
| + | CHECK NOT i_bldat IS INITIAL. | ||
| + | |||
| + | REFRESH l_tab_day_attributes. | ||
| + | CLEAR l_str_day_attributes. | ||
| + | l_str_day_attributes-date = i_bldat. | ||
| + | APPEND l_str_day_attributes TO l_tab_day_attributes. | ||
| + | |||
| + | CALL FUNCTION 'DAY_ATTRIBUTES_GET' | ||
| + | EXPORTING | ||
| + | factory_calendar = i_calid | ||
| + | date_from = i_bldat | ||
| + | date_to = i_bldat | ||
| + | TABLES | ||
| + | day_attributes = l_tab_day_attributes[] | ||
| + | EXCEPTIONS | ||
| + | factory_calendar_not_found = 1 | ||
| + | holiday_calendar_not_found = 2 | ||
| + | date_has_invalid_format = 3 | ||
| + | date_inconsistency = 4 | ||
| + | OTHERS = 5. | ||
| + | IF sy-subrc <> 0. | ||
| + | e_flg_failed = abap_true. | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | READ TABLE l_tab_day_attributes INTO l_str_day_attributes | ||
| + | WITH KEY date = i_bldat. | ||
| + | IF sy-subrc = 0. | ||
| + | IF NOT ( l_str_day_attributes-freeday IS INITIAL AND | ||
| + | l_str_day_attributes-holiday IS INITIAL ). | ||
| + | e_flg_failed = abap_true. | ||
| + | ELSE. | ||
| + | e_flg_true = abap_true. | ||
| + | ENDIF. | ||
| + | ELSE. | ||
| + | e_flg_failed = abap_true. | ||
| + | ENDIF. | ||
| + | |||
| + | DATE F H HOL TXT_SHORT TXT_LONG W WE WEEKDAY_L DAY_STRING | ||
| + | 27.06.2026 X 6 SA Sábado Sábado, 27. Junio 2026 | ||
| + | 28.06.2026 X 7 DO Domingo Domingo, 28. Junio 2026 | ||
| + | 29.06.2026 X X 466 San P&P San Pedro y San Pablo (CL) 1 LU Lunes Lunes, 29. Junio 2026 | ||
| + | 30.06.2026 2 MA Martes Martes, 30. Junio 2026 | ||
| + | |||
| + | </nowiki> | ||
| + | ===Obtener N° de día de la semana de fecha: cl_rs_time_service=>get_weekday=== | ||
| + | <nowiki> | ||
| + | IF cl_rs_time_service=>get_weekday( i_date = i_begda ) > 4. | ||
| + | e_mensaje = 'Permiso solo aplica de lunes a jueves'. | ||
| + | ENDIF. | ||
| + | </nowiki> | ||
===Obtener fecha de retorno de un absentismo(P2001)=== | ===Obtener fecha de retorno de un absentismo(P2001)=== | ||
<nowiki>p2001-endda = p2001-endda + 1. | <nowiki>p2001-endda = p2001-endda + 1. | ||
| Line 175: | Line 271: | ||
endif. | endif. | ||
| + | ===Verificar empleado=== | ||
| + | <nowiki> | ||
| + | FORM check_pernr USING p_app_pernr TYPE p_pernr. "#EC CALLED | ||
| + | CALL FUNCTION 'RP_CHECK_PERNR' | ||
| + | EXPORTING | ||
| + | beg = sy-datum " Date | ||
| + | pnr = p_app_pernr " Personnel number | ||
| + | EXCEPTIONS | ||
| + | data_fault = 1 | ||
| + | person_not_active = 2 | ||
| + | person_unknown = 3 | ||
| + | pernr_missing = 4 | ||
| + | OTHERS = 5. | ||
| + | CASE sy-subrc. | ||
| + | WHEN 0. "OK | ||
| + | WHEN 1 OR 3. | ||
| + | MESSAGE i136(72) WITH p_app_pernr. | ||
| + | CLEAR p_app_pernr. | ||
| + | WHEN 2. | ||
| + | MESSAGE i273(72). | ||
| + | CLEAR p_app_pernr. | ||
| + | WHEN 4. | ||
| + | MESSAGE i271(72). | ||
| + | WHEN OTHERS. | ||
| + | CLEAR p_app_pernr. | ||
| + | ENDCASE. | ||
| + | ENDFORM. " CHECK_PERNR</nowiki> | ||
=== Verificar NIF ( RUT ) === | === Verificar NIF ( RUT ) === | ||
| − | |||
call function 'TAX_NUMBER_CHECK' | call function 'TAX_NUMBER_CHECK' | ||
exporting | exporting | ||
| Line 182: | Line 304: | ||
tax_code_1 = p_stcd1 | tax_code_1 = p_stcd1 | ||
. | . | ||
| − | |||
=== Leer clase de fecha de infotipo P0041 === | === Leer clase de fecha de infotipo P0041 === | ||
FORM get_fecha USING VALUE(p0041) TYPE p0041 | FORM get_fecha USING VALUE(p0041) TYPE p0041 | ||
| Line 199: | Line 320: | ||
ENDDO. | ENDDO. | ||
ENDFORM. | ENDFORM. | ||
| + | |||
| + | <nowiki> | ||
| + | DATA: message_handler TYPE REF TO if_hrpa_message_handler. | ||
| + | |||
| + | CALL FUNCTION 'HR_ECM_GET_DATETYP_FROM_IT0041' | ||
| + | EXPORTING | ||
| + | pernr = pernr | ||
| + | keydt = p_date | ||
| + | datar = 'ZZ' | ||
| + | message_handler = message_handler | ||
| + | IMPORTING | ||
| + | date = lv_fechai | ||
| + | is_ok = lv_is_ok. </nowiki> | ||
=== Leer valor clase de tratamiento CC-Nomina === | === Leer valor clase de tratamiento CC-Nomina === | ||
| − | |||
*&---------------------------------------------------------------------* | *&---------------------------------------------------------------------* | ||
*& Form VWTCL | *& Form VWTCL | ||
| Line 331: | Line 464: | ||
WHERE pernr EQ it_pernr_plan-pernr | WHERE pernr EQ it_pernr_plan-pernr | ||
AND ldate EQ fec_ev | AND ldate EQ fec_ev | ||
| − | AND stokz EQ space. | + | AND stokz EQ space ORDER BY pernr ldate ltime erdat ertim pdsnr. |
A su vez, para borrar un registro se debe utilizar un codigo como el siguiente | A su vez, para borrar un registro se debe utilizar un codigo como el siguiente | ||
| Line 416: | Line 549: | ||
== Ejemplo leer datos dinamicos empleado y exportar a MS WORD == | == Ejemplo leer datos dinamicos empleado y exportar a MS WORD == | ||
| − | + | Ver programa RPLICO10 | |
| − | |||
== Como leer codigo de empleado (PERNR) via usuario SAP (SY-UNAME)== | == Como leer codigo de empleado (PERNR) via usuario SAP (SY-UNAME)== | ||
| − | + | Funciónes BAPI_USR01DOHR_GETEMPLOYEE - RP_GET_PERNR_FROM_USERID con usrty = '0001' | |
| − | |||
== Como leer textos de infotipo == | == Como leer textos de infotipo == | ||
| Line 530: | Line 661: | ||
==Como leer Modificaciones registradas en log en los datos de los infotipos== | ==Como leer Modificaciones registradas en log en los datos de los infotipos== | ||
| − | + | Reporte RPUAUD00 para leer modificaciones en los infotipos | |
==Como Leer Acumuladores== | ==Como Leer Acumuladores== | ||
| Line 602: | Line 733: | ||
endform. "get_kumul | endform. "get_kumul | ||
| − | == | + | ==Lectura IT0008== |
| − | + | ===FM BAPI_BASICPAY_GETDETAIL=== | |
| − | + | Ojo que esta BAPI calcula los conceptos indirectos :-) | |
FORM get_p0008_detail tables gt_bapi_wagetypes structure bapip0008p | FORM get_p0008_detail tables gt_bapi_wagetypes structure bapip0008p | ||
| Line 628: | Line 759: | ||
endform. | endform. | ||
| + | ===Ejemplo lectura de cc-nóminas desde P0008=== | ||
| + | <nowiki> | ||
| + | data: lv_betrg TYPE pad_amt7s, | ||
| + | lv_lgart TYPE lgart, | ||
| + | lv_indbw TYPE indbw. | ||
| + | |||
| + | DO 40 TIMES | ||
| + | VARYING lv_lgart FROM p0008-lga01 NEXT p0008-lga02 | ||
| + | VARYING lv_betrg FROM p0008-bet01 NEXT p0008-bet02 | ||
| + | VARYING lv_indbw FROM p0008-ind01 NEXT p0008-ind02. | ||
| + | IF lv_lgart IS NOT INITIAL. | ||
| + | ENDIF. | ||
| + | ENDDO.</nowiki> | ||
| + | ===clase CL_HRPA_INFOTYPE_0008 === | ||
| + | esta clase posee código en los métodos que se pueden utilizar | ||
==Ejemplos estructura organizacional== | ==Ejemplos estructura organizacional== | ||
| Line 648: | Line 794: | ||
OTHERS = 3. | OTHERS = 3. | ||
| − | + | el reporte RHSTRU00, hace lo mismo, pero usando base de datos. | |
===Organizaciones desde y hacia arriba de una persona=== | ===Organizaciones desde y hacia arriba de una persona=== | ||
| Line 688: | Line 834: | ||
l_gerencia = ls_result-stext. | l_gerencia = ls_result-stext. | ||
ENDIF. | ENDIF. | ||
| + | |||
| + | ===Organizaciones hacia Abajo con posiciones(S) y personal(P)=== | ||
| + | <nowiki>* buscar organizaciones hacia abajo | ||
| + | |||
| + | CALL FUNCTION 'RH_STRUC_GET' | ||
| + | EXPORTING | ||
| + | act_otype = 'O' | ||
| + | act_objid = l_org | ||
| + | act_wegid = 'O-S-P' | ||
| + | authority_check = ' ' | ||
| + | TABLES | ||
| + | result_struc = lt_result_struc | ||
| + | result_objec = lt_result_objec | ||
| + | EXCEPTIONS | ||
| + | no_plvar_found = 1 | ||
| + | no_entry_found = 2 | ||
| + | OTHERS = 3.</nowiki> | ||
| + | |||
| + | ===O-O_DOWN (Estructura organizativa (descendente)=== | ||
| + | <nowiki>* O-O_DOWN (Estructura organizativa (descendente) | ||
| + | CALL FUNCTION 'RH_STRUC_GET' | ||
| + | EXPORTING | ||
| + | act_otype = 'O' | ||
| + | act_objid = ls_p0001-orgeh | ||
| + | act_wegid = 'O-O_DOWN' | ||
| + | authority_check = ' ' | ||
| + | TABLES | ||
| + | result_struc = lt_result_struc | ||
| + | EXCEPTIONS | ||
| + | no_plvar_found = 1 | ||
| + | no_entry_found = 2 | ||
| + | OTHERS = 3.</nowiki> | ||
| + | |||
| + | ===posición de empleado=== | ||
| + | usar act_otype = 'P' act_wegid = 'P_S_S_C' | ||
==Lectura de Datos Maestros (Grupo Funciones HRWPC_GENERAL_TEXTS)== | ==Lectura de Datos Maestros (Grupo Funciones HRWPC_GENERAL_TEXTS)== | ||
| Line 755: | Line 936: | ||
ENDFORM. " TEXTDATA | ENDFORM. " TEXTDATA | ||
| + | |||
| + | ===Clase CL_EAIN_GET_TEXT=== | ||
==Edad de empleado== | ==Edad de empleado== | ||
| Line 802: | Line 985: | ||
ENDFORM. " CALCULO_EDAD | ENDFORM. " CALCULO_EDAD | ||
| − | ==Crear Absentismo== | + | ==Crear Absentismo IT2001== |
| − | <nowiki>FORM crear_abs USING p_pernr p_subty p_begda p_endda p_beguz p_enduz p_simulate CHANGING p_retorno TYPE bapiret2_tab | + | <nowiki>FORM crear_abs USING p_pernr |
| − | + | p_subty | |
| − | + | p_begda | |
| + | p_endda | ||
| + | p_beguz | ||
| + | p_enduz | ||
| + | p_simulate | ||
| + | CHANGING p_retorno TYPE bapiret2_tab | ||
| + | p_hrabsatt_out TYPE bapihrabsatt_out | ||
| + | p_text. | ||
DATA: lt_retorno LIKE bapiret2 OCCURS 0 WITH HEADER LINE, | DATA: lt_retorno LIKE bapiret2 OCCURS 0 WITH HEADER LINE, | ||
ls_key TYPE bapihrtimeskey, " Campos clave BAPI p.entradas tiempos personal (HR) | ls_key TYPE bapihrtimeskey, " Campos clave BAPI p.entradas tiempos personal (HR) | ||
ls_abs TYPE bapihrabsatt_in. " Campos presencia/absentismo, entrada sin datos adicionale. | ls_abs TYPE bapihrabsatt_in. " Campos presencia/absentismo, entrada sin datos adicionale. | ||
| + | |||
| + | * Lock the employee record | ||
| + | CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE' | ||
| + | EXPORTING | ||
| + | number = p_pernr | ||
| + | IMPORTING | ||
| + | return = ls_return | ||
| + | EXCEPTIONS | ||
| + | OTHERS = 1. | ||
| + | if ls_return is NOT INITIAL . | ||
| + | MOVE-CORRESPONDING ls_return to p_retorno. | ||
| + | return. | ||
| + | endif. | ||
CLEAR: ls_abs. | CLEAR: ls_abs. | ||
| Line 839: | Line 1,042: | ||
return = p_retorno. " Retorno | return = p_retorno. " Retorno | ||
| + | CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE' | ||
| + | EXPORTING | ||
| + | number = p_pernr | ||
| + | . | ||
| + | |||
| + | loop at p_retorno into data(ls_retorno) where type = 'E' or type = 'A'. | ||
| + | endloop | ||
| + | if sy-subrc <> 0. | ||
| + | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. | ||
| + | * CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'. | ||
| + | ELSE. | ||
| + | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. | ||
| + | * CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'. | ||
| + | endif. | ||
ENDFORM.</nowiki> | ENDFORM.</nowiki> | ||
| Line 987: | Line 1,204: | ||
ENDFUNCTION.</nowiki> | ENDFUNCTION.</nowiki> | ||
| − | ==Ejemplo | + | La función anterior es equivalente al siguiente método: |
| + | <nowiki> | ||
| + | DATA lt_p0001 TYPE p0001_tab. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = i_pernr | ||
| + | infty = '0001' | ||
| + | begda = i_begda | ||
| + | endda = i_endda | ||
| + | TABLES | ||
| + | infty_tab = lt_p0001 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | CALL METHOD cl_hrpaybr_absence_quotas=>get_quota_type_tab | ||
| + | EXPORTING | ||
| + | iv_pernr = i_pernr | ||
| + | iv_begda = i_begda | ||
| + | iv_endda = i_endda | ||
| + | it_p0001 = lt_p0001 | ||
| + | iv_subty = i_subty | ||
| + | IMPORTING | ||
| + | et_quota_type_tab = ra_ktart. | ||
| + | </nowiki> | ||
| + | |||
| + | Tabla Contingentes: T556R - Reglamentación secuencia liquidación p.contingentes absent. | ||
| + | |||
| + | ==HR_INFOTYPE_OPERATION== | ||
| + | ===Ejemplo 1=== | ||
<nowiki>PERFORM infotype_operation USING c_create | <nowiki>PERFORM infotype_operation USING c_create | ||
p0014 | p0014 | ||
| Line 1,051: | Line 1,301: | ||
ENDFORM.</nowiki> | ENDFORM.</nowiki> | ||
| + | |||
| + | ==PA40 - FM HR_PAD_HIRE_EMPLOYEE== | ||
| + | Ver nota SAP 1913529 - Function module HR_MAINTAIN_MASTERDATA does not work as expected when hiring an employee | ||
| + | <nowiki> | ||
| + | * Create new employee for user | ||
| + | |||
| + | * Organizational assignment | ||
| + | MOVE-CORRESPONDING p_p0001 TO ls_p0001. | ||
| + | ls_p0001-infty = '0001'. | ||
| + | ls_p0001-endda = ls_p0000-endda. | ||
| + | ls_p0001-begda = ls_p0000-begda. | ||
| + | ls_p0001-persg = p_p0000-persg. | ||
| + | ls_p0001-persk = p_p0000-persk. | ||
| + | ls_p0001-werks = p_p0000-werks. | ||
| + | |||
| + | ASSIGN ls_p0001 TO <pnnnn>. | ||
| + | CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp | ||
| + | EXPORTING | ||
| + | pnnnn = <pnnnn> | ||
| + | IMPORTING | ||
| + | prelp = ls_prelp. | ||
| + | APPEND ls_prelp TO lt_prelp. | ||
| + | CLEAR ls_prelp. | ||
| + | |||
| + | CALL FUNCTION 'HR_PAD_HIRE_EMPLOYEE' | ||
| + | EXPORTING | ||
| + | hiringdate = ls_p0000-begda | ||
| + | actiontype = ls_p0000-massn | ||
| + | reasonforaction = ls_p0000-massg | ||
| + | pnnnn_tab = lt_prelp | ||
| + | nocommit = p_test | ||
| + | IMPORTING | ||
| + | return_tab = lt_return | ||
| + | bapipakey_tab = lt_key. | ||
| + | </nowiki> | ||
| + | |||
| + | ==Uso de FM HR_ABS_ATT_TIMES_AT_ENTRY== | ||
| + | <nowiki>FORM get_abs_times USING p_pernr p_subty p_begda p_endda | ||
| + | CHANGING p_alldf. | ||
| + | DATA tpd TYPE TABLE OF ptm_times_per_day. | ||
| + | |||
| + | DATA: " p_ABWTG LIKE P2001-ABWTG, | ||
| + | p_abrtg LIKE p2001-abrtg, | ||
| + | p_abrst LIKE p2001-abrst, | ||
| + | " p_KALTG LIKE P2001-KALTG, | ||
| + | p_hrsif LIKE p2001-hrsif, | ||
| + | * p_ALLDF LIKE P2001-ALLDF, | ||
| + | error_wo_exception TYPE c. | ||
| + | |||
| + | DATA: p_beguz LIKE p2001-beguz, | ||
| + | p_enduz LIKE p2001-enduz, | ||
| + | p_vtken LIKE p2001-vtken, | ||
| + | p_stdaz LIKE p2001-stdaz, | ||
| + | p_breaks TYPE hrtim_att_breaks, | ||
| + | p_abwtg LIKE p2001-abwtg, | ||
| + | p_kaltg LIKE p2001-kaltg. | ||
| + | |||
| + | DATA errors LIKE hrerror OCCURS 0 WITH HEADER LINE. | ||
| + | |||
| + | DATA: p0000 TYPE TABLE OF p0000 WITH HEADER LINE, | ||
| + | p0001 TYPE TABLE OF p0001 WITH HEADER LINE, | ||
| + | p0002 TYPE TABLE OF p0002 WITH HEADER LINE, | ||
| + | p0007 TYPE TABLE OF p0007 WITH HEADER LINE, | ||
| + | p2001 TYPE TABLE OF p2001 WITH HEADER LINE, | ||
| + | p2002 TYPE TABLE OF p2002 WITH HEADER LINE, | ||
| + | p2003 TYPE TABLE OF p2003 WITH HEADER LINE. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '0000' | ||
| + | TABLES | ||
| + | infty_tab = p0000 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '0001' | ||
| + | TABLES | ||
| + | infty_tab = p0001 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '0002' | ||
| + | TABLES | ||
| + | infty_tab = p0002 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '0007' | ||
| + | TABLES | ||
| + | infty_tab = p0007 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | *CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | * EXPORTING | ||
| + | * pernr = p_pernr | ||
| + | * infty = '2001' | ||
| + | * TABLES | ||
| + | * infty_tab = p2001 | ||
| + | * EXCEPTIONS | ||
| + | * INFTY_NOT_FOUND = 1 | ||
| + | * OTHERS = 2 | ||
| + | * . | ||
| + | *IF sy-subrc <> 0. | ||
| + | ** Implement suitable error handling here | ||
| + | *ENDIF. | ||
| + | * | ||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '2002' | ||
| + | TABLES | ||
| + | infty_tab = p2002 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | *CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | * EXPORTING | ||
| + | * pernr = p_pernr | ||
| + | * infty = '2003' | ||
| + | * TABLES | ||
| + | * infty_tab = p2003 | ||
| + | * EXCEPTIONS | ||
| + | * INFTY_NOT_FOUND = 1 | ||
| + | * OTHERS = 2 | ||
| + | * . | ||
| + | *IF sy-subrc <> 0. | ||
| + | ** Implement suitable error handling here | ||
| + | *ENDIF. | ||
| + | |||
| + | DATA c_6(6) VALUE ' '. | ||
| + | |||
| + | p_beguz = c_6. | ||
| + | p_enduz = c_6. | ||
| + | CALL FUNCTION 'HR_ABS_ATT_TIMES_AT_ENTRY' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | awart = p_subty | ||
| + | begda = p_begda | ||
| + | endda = p_endda | ||
| + | IMPORTING | ||
| + | abwtg = p_abwtg | ||
| + | abrtg = p_abrtg "Días de Nómina | ||
| + | abrst = p_abrst | ||
| + | kaltg = p_kaltg | ||
| + | hrsif = p_hrsif | ||
| + | alldf = p_alldf | ||
| + | error_wo_exception = error_wo_exception | ||
| + | TABLES | ||
| + | m0000 = p0000 | ||
| + | m0001 = p0001 | ||
| + | m0002 = p0002 | ||
| + | m0007 = p0007 | ||
| + | m2001 = p2001 | ||
| + | m2002 = p2002 | ||
| + | m2003 = p2003 | ||
| + | times_per_day = tpd | ||
| + | CHANGING | ||
| + | beguz = p_beguz | ||
| + | enduz = p_enduz | ||
| + | vtken = p_vtken | ||
| + | stdaz = p_stdaz | ||
| + | breaks = p_breaks "YMMPH0K000026 | ||
| + | EXCEPTIONS ##FM_SUBRC_OK | ||
| + | it0001_missing = 1 | ||
| + | customizing_error = 2 | ||
| + | error_occurred = 3 "YAYP40K054237 | ||
| + | end_before_begin = 4. "YAYP40K054237 | ||
| + | * others = 5. | ||
| + | IF sy-subrc <> 0. | ||
| + | |||
| + | ENDIF. | ||
| + | |||
| + | ENDFORM.</nowiki> | ||
| + | |||
| + | ==Obtener foto de empleado(binario)== | ||
| + | <nowiki>form get_employee_photo USING iv_pernr type p0000-pernr | ||
| + | CHANGING p_photo type xstring | ||
| + | p_mime_type type W3CONTTYPE | ||
| + | p_subrc type sy-subrc. | ||
| + | |||
| + | DATA: ls_connect_info TYPE toav0, | ||
| + | lt_content TYPE TABLE OF sdokcntbin, | ||
| + | lv_len TYPE i, " #EC NEEDED | ||
| + | lt_acinf TYPE TABLE OF scms_acinf. | ||
| + | |||
| + | FIELD-SYMBOLS: <ls_acinf> TYPE scms_acinf. | ||
| + | |||
| + | CLEAR: p_photo. | ||
| + | |||
| + | IF iv_pernr IS NOT INITIAL. | ||
| + | CALL FUNCTION 'HR_IMAGE_EXISTS' | ||
| + | EXPORTING | ||
| + | p_pernr = iv_pernr | ||
| + | p_begda = sy-datlo | ||
| + | p_endda = sy-datlo | ||
| + | IMPORTING | ||
| + | p_connect_info = ls_connect_info | ||
| + | EXCEPTIONS | ||
| + | error_connectiontable = 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. | ||
| + | p_subrc = 1. | ||
| + | return. | ||
| + | ENDIF. | ||
| + | |||
| + | IF ls_connect_info IS NOT INITIAL. | ||
| + | |||
| + | CALL FUNCTION 'SCMS_DOC_READ' | ||
| + | EXPORTING | ||
| + | stor_cat = ' ' | ||
| + | crep_id = ls_connect_info-archiv_id | ||
| + | doc_id = ls_connect_info-arc_doc_id | ||
| + | TABLES | ||
| + | access_info = lt_acinf | ||
| + | content_bin = lt_content | ||
| + | EXCEPTIONS | ||
| + | bad_storage_type = 1 | ||
| + | bad_request = 2 | ||
| + | unauthorized = 3 | ||
| + | comp_not_found = 4 | ||
| + | not_found = 5 | ||
| + | forbidden = 6 | ||
| + | conflict = 7 | ||
| + | internal_server_error = 8 | ||
| + | error_http = 9 | ||
| + | error_signature = 10 | ||
| + | error_config = 11 | ||
| + | error_format = 12 | ||
| + | error_parameter = 13 | ||
| + | error = 14 | ||
| + | OTHERS = 15. | ||
| + | |||
| + | IF sy-subrc <> 0. | ||
| + | * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO | ||
| + | * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. | ||
| + | ENDIF. | ||
| + | |||
| + | READ TABLE lt_acinf ASSIGNING <ls_acinf> INDEX 1. | ||
| + | IF sy-subrc EQ 0. | ||
| + | p_mime_type = <ls_acinf>-mimetype. | ||
| + | lv_len = <ls_acinf>-comp_size. | ||
| + | ENDIF. | ||
| + | |||
| + | CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' | ||
| + | EXPORTING | ||
| + | input_length = lv_len | ||
| + | IMPORTING | ||
| + | buffer = p_photo | ||
| + | TABLES | ||
| + | binary_tab = lt_content | ||
| + | EXCEPTIONS | ||
| + | failed = 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. | ||
| + | |||
| + | ENDIF. | ||
| + | |||
| + | ENDIF. | ||
| + | |||
| + | ENDform. "get_employee_photo</nowiki> | ||
| + | |||
| + | ===obtener URL foto de empleado=== | ||
| + | |||
| + | <nowiki>FORM obtiene_foto USING i_pernr | ||
| + | CHANGING e_foto. "copiado de FM HRXSS_COD_GET_DETAILS | ||
| + | DATA: connect TYPE TABLE OF toav0 WITH HEADER LINE, | ||
| + | url(4096) TYPE c, | ||
| + | pernr_char(50) TYPE c. | ||
| + | |||
| + | DATA: lv_pernr TYPE persno. | ||
| + | |||
| + | lv_pernr = i_pernr. | ||
| + | |||
| + | CONCATENATE lv_pernr '*' INTO pernr_char. "note 996882 | ||
| + | |||
| + | CALL FUNCTION 'ARCHIV_GET_CONNECTIONS' | ||
| + | EXPORTING | ||
| + | objecttype = 'PREL' | ||
| + | object_id = pernr_char | ||
| + | documenttype = 'HRICOLFOTO' | ||
| + | until_ar_date = sy-datum | ||
| + | TABLES | ||
| + | connections = connect | ||
| + | EXCEPTIONS | ||
| + | nothing_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | ENDIF. | ||
| + | |||
| + | CLEAR connect. | ||
| + | |||
| + | LOOP AT connect. | ||
| + | CALL FUNCTION 'SCMS_AO_URL_READ' | ||
| + | EXPORTING | ||
| + | arc_id = connect-archiv_id | ||
| + | doc_id = connect-arc_doc_id | ||
| + | document_type = connect-reserve | ||
| + | http_url_only = 'X' | ||
| + | loc_info = 'W' | ||
| + | IMPORTING | ||
| + | url = url | ||
| + | EXCEPTIONS | ||
| + | error = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | ENDIF. | ||
| + | EXIT. | ||
| + | ENDLOOP. | ||
| + | e_foto = url. | ||
| + | |||
| + | ENDFORM. "obtiene_foto"obtiene_foto</nowiki> | ||
| + | |||
| + | ==Buscar jefe de empleado (lógica basada en lider de organización)== | ||
| + | <nowiki>FORM busca_jefe USING p_pernr TYPE persno | ||
| + | CHANGING p_idjefe TYPE persno | ||
| + | p_nombrejefe TYPE pad_cname. | ||
| + | |||
| + | DATA: lt_result LIKE objec OCCURS 0 WITH HEADER LINE, | ||
| + | lt_result2 LIKE objec OCCURS 0 WITH HEADER LINE, | ||
| + | lt_p0001 TYPE TABLE OF p0001 WITH HEADER LINE. | ||
| + | DATA: l_objid TYPE objec-objid. | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_INFOTYPE' | ||
| + | EXPORTING | ||
| + | pernr = p_pernr | ||
| + | infty = '0001' | ||
| + | begda = sy-datum | ||
| + | endda = sy-datum | ||
| + | TABLES | ||
| + | infty_tab = lt_p0001 | ||
| + | EXCEPTIONS | ||
| + | infty_not_found = 1 | ||
| + | OTHERS = 2. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ENDIF. | ||
| + | |||
| + | LOOP AT lt_p0001. | ||
| + | ENDLOOP. | ||
| + | IF sy-subrc <> 0. | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | CALL FUNCTION 'RH_STRUC_GET' | ||
| + | EXPORTING | ||
| + | act_otype = 'P' | ||
| + | act_objid = p_pernr | ||
| + | act_wegid = 'P-S-O-O' | ||
| + | authority_check = ' ' | ||
| + | TABLES | ||
| + | result_objec = lt_result | ||
| + | EXCEPTIONS | ||
| + | no_plvar_found = 1 | ||
| + | no_entry_found = 2 | ||
| + | OTHERS = 3. | ||
| + | |||
| + | IF sy-subrc <> 0. | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | LOOP AT lt_result WHERE otype EQ 'O'. | ||
| + | |||
| + | CALL FUNCTION 'RH_STRUC_GET' | ||
| + | EXPORTING | ||
| + | act_otype = 'O' | ||
| + | act_objid = lt_result-objid | ||
| + | act_wegid = 'B012' | ||
| + | authority_check = ' ' | ||
| + | TABLES | ||
| + | result_objec = lt_result2 | ||
| + | EXCEPTIONS | ||
| + | no_plvar_found = 1 | ||
| + | no_entry_found = 2 | ||
| + | OTHERS = 3. | ||
| + | |||
| + | IF sy-subrc <> 0. | ||
| + | CONTINUE. | ||
| + | ENDIF. | ||
| + | |||
| + | READ TABLE lt_result2 WITH KEY otype = 'S'. | ||
| + | CHECK sy-subrc = 0 AND lt_p0001-plans <> lt_result2-objid. | ||
| + | |||
| + | l_objid = lt_result2-objid. | ||
| + | REFRESH lt_result2. | ||
| + | |||
| + | CALL FUNCTION 'RH_STRUC_GET' | ||
| + | EXPORTING | ||
| + | act_otype = 'S' | ||
| + | act_objid = l_objid | ||
| + | act_wegid = 'SAP_ORG' | ||
| + | authority_check = ' ' | ||
| + | TABLES | ||
| + | result_objec = lt_result2 | ||
| + | EXCEPTIONS | ||
| + | no_plvar_found = 1 | ||
| + | no_entry_found = 2 | ||
| + | OTHERS = 3. | ||
| + | |||
| + | IF sy-subrc <> 0. | ||
| + | CONTINUE. | ||
| + | ENDIF. | ||
| + | |||
| + | READ TABLE lt_result2 WITH KEY otype = 'P'. | ||
| + | CHECK sy-subrc = 0. | ||
| + | |||
| + | p_idjefe = lt_result2-objid. | ||
| + | p_nombrejefe = lt_result2-stext. | ||
| + | |||
| + | EXIT. | ||
| + | |||
| + | ENDLOOP. | ||
| + | |||
| + | ENDFORM. " BUSCA_JEFE</nowiki> | ||
| + | |||
| + | ==Obtener fecha de termino ( leaving date )== | ||
| + | <nowiki> | ||
| + | clear p_leaving_date. "WRH L9CK045673 | ||
| + | refresh leaving_date_tab. "WRH L9CK045673 | ||
| + | |||
| + | CALL FUNCTION 'HR_LEAVING_DATE' | ||
| + | EXPORTING | ||
| + | PERSNR = P_PERNR | ||
| + | IMPORTING | ||
| + | LEAVINGDATE = P_LEAVING_DATE | ||
| + | TABLES | ||
| + | LEAVING_DATES = LEAVING_DATE_TAB | ||
| + | EXCEPTIONS | ||
| + | LEAVING_DATE_NOT_FOUND = 1 | ||
| + | PERNR_NOT_ASSIGNED = 2 | ||
| + | OTHERS = 3.</nowiki> | ||
| + | ==CC-nómina : valoración indirecta== | ||
| + | <nowiki> | ||
| + | FORM lee_valoracion_indirecta_0014. | ||
| + | CLEAR lt_ptbindbw[]. | ||
| + | |||
| + | CHECK p0014-indbw = 'I'. "Indicador para valoración indirecta | ||
| + | MOVE-CORRESPONDING p0014 TO lt_ptbindbw. | ||
| + | APPEND lt_ptbindbw. | ||
| + | |||
| + | CALL FUNCTION 'RP_EVALUATE_INDIRECTLY_P0014' | ||
| + | EXPORTING | ||
| + | pbegda = p0014-begda | ||
| + | pmolga = '39' | ||
| + | ppernr = p0014-pernr | ||
| + | TABLES | ||
| + | ptbindbw = lt_ptbindbw | ||
| + | EXCEPTIONS | ||
| + | bad_parameters = 1 | ||
| + | error_at_indirect_evaluation = 2 | ||
| + | OTHERS = 3. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ELSE. | ||
| + | MOVE lt_ptbindbw-betrg TO p0014-betrg. | ||
| + | MOVE lt_ptbindbw-anzhl TO p0014-anzhl. | ||
| + | ENDIF. | ||
| + | |||
| + | ENDFORM. "lee_valoracion_indirecta_0014 | ||
| + | |||
| + | FORM lee_valoracion_indirecta_0015. | ||
| + | CLEAR lt_ptbindbw[]. | ||
| + | |||
| + | CHECK p0015-indbw = 'I'. "Indicador para valoración indirecta | ||
| + | MOVE-CORRESPONDING p0015 TO lt_ptbindbw. | ||
| + | APPEND lt_ptbindbw. | ||
| + | |||
| + | CALL FUNCTION 'RP_EVALUATE_INDIRECTLY_P0015' | ||
| + | EXPORTING | ||
| + | pbegda = p0015-begda | ||
| + | pmolga = '39' | ||
| + | ppernr = p0015-pernr | ||
| + | TABLES | ||
| + | ptbindbw = lt_ptbindbw | ||
| + | EXCEPTIONS | ||
| + | bad_parameters = 1 | ||
| + | error_at_indirect_evaluation = 2 | ||
| + | OTHERS = 3. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | ELSE. | ||
| + | MOVE lt_ptbindbw-betrg TO p0015-betrg. | ||
| + | MOVE lt_ptbindbw-anzhl TO p0015-anzhl. | ||
| + | ENDIF. | ||
| + | |||
| + | |||
| + | ENDFORM. "lee_valoracion_indirecta_0014 | ||
| + | ******************** | ||
| + | CALL METHOD cl_hrpad_wagetype=>process_indirect_valuation | ||
| + | EXPORTING | ||
| + | tclas = tclas | ||
| + | pernr = p0014-pernr | ||
| + | infty = p0014-infty | ||
| + | begda = p0014-begda | ||
| + | wagetype = p0014-lgart | ||
| + | read_infotype = a_read_infotype | ||
| + | message_handler = remapper | ||
| + | IMPORTING | ||
| + | indval_indicator = p0014-indbw | ||
| + | endda = dummy_endda | ||
| + | amount = betrg | ||
| + | is_ok = is_ok | ||
| + | CHANGING | ||
| + | currency = p0014-waers | ||
| + | number = p0014-anzhl. | ||
| + | IF is_ok = true. | ||
| + | p0014-betrg = betrg. | ||
| + | ENDIF. | ||
| + | ******************** | ||
| + | *** call indirect valuation | ||
| + | CALL FUNCTION 'RP_EVALUATE_INDIRECTLY' | ||
| + | EXPORTING | ||
| + | appli = 'E' "MELN1228169 | ||
| + | pbegda = begda | ||
| + | pinfty = '0008' | ||
| + | pmolga = molga | ||
| + | ptclas = tclas | ||
| + | ppernr = p0008-pernr | ||
| + | PP0001 = p0001 "***!!!*** ONLY TEMP | ||
| + | pp0007 = p0007 "***!!!*** ONLY TEMP | ||
| + | pp0008 = p0008 | ||
| + | pp0230 = p0230 "MELN1636872 | ||
| + | * MSGFLG = '' | ||
| + | * CONV_CURR = 'X' | ||
| + | IMPORTING | ||
| + | pendda = endda | ||
| + | TABLES | ||
| + | ptbindbw = ptbindbw | ||
| + | EXCEPTIONS | ||
| + | bad_parameters = 1 | ||
| + | error_at_indirect_evaluation = 2 | ||
| + | error_message = 3 | ||
| + | OTHERS = 4. | ||
| + | </nowiki> | ||
Latest revision as of 21:00, 18 August 2026
Contents
- 1 Como leer el MOLGA de un EMPLEADO
- 2 Detalle compañia ( campo BUKRS )
- 3 Nombres de MES ( util en formularios )
- 4 Sumar / Restar meses a fecha
- 5 Ultimo dia del mes
- 6 Leer Horario de trabajo de empleado
- 7 Obtener día laboral
- 8 FM Day_Attributes_Get
- 9 Obtener N° de día de la semana de fecha: cl_rs_time_service=>get_weekday
- 10 Obtener fecha de retorno de un absentismo(P2001)
- 11 Leer caracteristica ( feature ) HR , transaccion PE03
- 12 Verificar empleado
- 13 Verificar NIF ( RUT )
- 14 Leer clase de fecha de infotipo P0041
- 15 Leer valor clase de tratamiento CC-Nomina
- 16 Leer valor clase de evaluacion CC-Nomina
- 17 Como leer texto centro de costo de empleado P0001-KOSTL
- 18 Tratamiento Infotipo 2011
- 19 Uso de CALL DIALOG para tratamiento de Infotipos
- 20 Ejemplo leer datos dinamicos empleado y exportar a MS WORD
- 21 Como leer codigo de empleado (PERNR) via usuario SAP (SY-UNAME)
- 22 Como leer textos de infotipo
- 23 Como leer datos de payroll dado un RUNID de un posting a FI
- 24 Como leer Modificaciones registradas en log en los datos de los infotipos
- 25 Como Leer Acumuladores
- 26 Lectura IT0008
- 27 Ejemplos estructura organizacional
- 27.1 Mostrar todos los empleados hacia abajo de una organización
- 27.2 Organizaciones desde y hacia arriba de una persona
- 27.3 Leer Gerencia de empleado(caso particular)
- 27.4 Organizaciones hacia Abajo con posiciones(S) y personal(P)
- 27.5 O-O_DOWN (Estructura organizativa (descendente)
- 27.6 posición de empleado
- 28 Lectura de Datos Maestros (Grupo Funciones HRWPC_GENERAL_TEXTS)
- 29 Edad de empleado
- 30 Crear Absentismo IT2001
- 31 Rutinas para leer contingente
- 32 HR_INFOTYPE_OPERATION
- 33 PA40 - FM HR_PAD_HIRE_EMPLOYEE
- 34 Uso de FM HR_ABS_ATT_TIMES_AT_ENTRY
- 35 Obtener foto de empleado(binario)
- 36 Buscar jefe de empleado (lógica basada en lider de organización)
- 37 Obtener fecha de termino ( leaving date )
- 38 CC-nómina : valoración indirecta
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
.
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.
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.
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.
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.
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
tables
pernr_tab = tb_pernr
psp = tb_psp
day_psp = tb_day_psp
exceptions
error_in_build_psp = 1
others = 2
.
form validar_dia_libre USING iv_pernr type pernr_d
iv_begda type d
iv_endda type d
CHANGING es_return type bapiret2.
data: lt_psp type TABLE OF PDPSP.
clear es_return.
CALL FUNCTION 'HR_READ_TIMEDATA_PSP'
EXPORTING
begin_date = iv_begda
end_date = iv_endda
person_id = iv_pernr
person_typ = 'P'
TABLES
pers_avail = lt_psp
EXCEPTIONS
OTHERS = 4.
loop at lt_psp into data(ls_psp).
if ls_psp-tprog = 'LIBR'.
es_return-type = 'E'.
es_return-message = |Para empleado día { ls_psp-datum date = user } es libre|.
exit.
endif.
ENDLOOP.
ENDFORM.
Obtener día laboral
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
correct_option = '+'
date = lv_fecha_ent
factory_calendar_id = 'CL'
IMPORTING
date = lv_fecha_sal
EXCEPTIONS
calendar_buffer_not_loadable = 1
correct_option_invalid = 2
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
OTHERS = 7.
IF lv_fecha_ent NE lv_fecha_sal.
lv_feriado = lv_feriado + 1.
ENDIF.
FM Day_Attributes_Get
DATA: l_tab_day_attributes TYPE gle_tab_ecs_acp_day_attributes.
DATA: l_str_day_attributes TYPE casdayattr.
CLEAR: e_flg_true, e_flg_failed.
CHECK NOT i_bldat IS INITIAL.
REFRESH l_tab_day_attributes.
CLEAR l_str_day_attributes.
l_str_day_attributes-date = i_bldat.
APPEND l_str_day_attributes TO l_tab_day_attributes.
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
factory_calendar = i_calid
date_from = i_bldat
date_to = i_bldat
TABLES
day_attributes = l_tab_day_attributes[]
EXCEPTIONS
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
date_has_invalid_format = 3
date_inconsistency = 4
OTHERS = 5.
IF sy-subrc <> 0.
e_flg_failed = abap_true.
RETURN.
ENDIF.
READ TABLE l_tab_day_attributes INTO l_str_day_attributes
WITH KEY date = i_bldat.
IF sy-subrc = 0.
IF NOT ( l_str_day_attributes-freeday IS INITIAL AND
l_str_day_attributes-holiday IS INITIAL ).
e_flg_failed = abap_true.
ELSE.
e_flg_true = abap_true.
ENDIF.
ELSE.
e_flg_failed = abap_true.
ENDIF.
DATE F H HOL TXT_SHORT TXT_LONG W WE WEEKDAY_L DAY_STRING
27.06.2026 X 6 SA Sábado Sábado, 27. Junio 2026
28.06.2026 X 7 DO Domingo Domingo, 28. Junio 2026
29.06.2026 X X 466 San P&P San Pedro y San Pablo (CL) 1 LU Lunes Lunes, 29. Junio 2026
30.06.2026 2 MA Martes Martes, 30. Junio 2026
Obtener N° de día de la semana de fecha: cl_rs_time_service=>get_weekday
IF cl_rs_time_service=>get_weekday( i_date = i_begda ) > 4.
e_mensaje = 'Permiso solo aplica de lunes a jueves'.
ENDIF.
Obtener fecha de retorno de un absentismo(P2001)
p2001-endda = p2001-endda + 1.
perform fecha_retorno using p2001-pernr
changing p2001-endda.
form fecha_retorno using p_pernr type p2001-pernr
changing p_fch_retorno type p2001-begda.
data l_feriado type flag.
do 10 times.
clear l_feriado.
PERFORM es_dia_libre USING p_pernr
p_fch_retorno
CHANGING l_feriado.
if l_feriado = 'X'.
add 1 to p_fch_retorno.
else.
return.
endif.
enddo.
endform.
FORM es_dia_libre USING p_pernr TYPE p2001-pernr
p_begda TYPE p2001-begda
CHANGING p_libre TYPE xfeld.
DATA: lt_persavail TYPE STANDARD TABLE OF pdpsp.
CALL FUNCTION 'HR_READ_TIMEDATA_PSP'
EXPORTING
begin_date = p_begda
end_date = p_begda
person_id = p_pernr
TABLES
pers_avail = lt_persavail
EXCEPTIONS
no_capacity_available = 1
no_integration_activ = 2
timeinfo_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
ENDIF.
READ TABLE lt_persavail INTO DATA(ls_persavail) WITH KEY datum = p_begda.
IF sy-subrc EQ 0.
IF ls_persavail-tprog EQ 'LIBR' OR ls_persavail-tagty EQ '1'.
p_libre = abap_true.
ENDIF.
ENDIF.
ENDFORM.
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.
Verificar empleado
FORM check_pernr USING p_app_pernr TYPE p_pernr. "#EC CALLED
CALL FUNCTION 'RP_CHECK_PERNR'
EXPORTING
beg = sy-datum " Date
pnr = p_app_pernr " Personnel number
EXCEPTIONS
data_fault = 1
person_not_active = 2
person_unknown = 3
pernr_missing = 4
OTHERS = 5.
CASE sy-subrc.
WHEN 0. "OK
WHEN 1 OR 3.
MESSAGE i136(72) WITH p_app_pernr.
CLEAR p_app_pernr.
WHEN 2.
MESSAGE i273(72).
CLEAR p_app_pernr.
WHEN 4.
MESSAGE i271(72).
WHEN OTHERS.
CLEAR p_app_pernr.
ENDCASE.
ENDFORM. " CHECK_PERNR
Verificar NIF ( RUT )
call function 'TAX_NUMBER_CHECK' exporting country = p_land1 tax_code_1 = p_stcd1 .
Leer clase de fecha de infotipo P0041
FORM get_fecha USING VALUE(p0041) TYPE p0041
p_dar TYPE p0041-dar01
CHANGING p_fecha TYPE p0041-dat01.
DATA l_dat LIKE p0041-dat01.
DATA l_dar LIKE p0041-dar01.
CLEAR p_fecha.
DO 12 TIMES VARYING l_dat FROM p0041-dat01 NEXT p0041-dat02
VARYING l_dar FROM p0041-dar01 NEXT p0041-dar02.
IF l_dar = p_dar.
p_fecha = l_dat.
ENDIF.
ENDDO.
ENDFORM.
DATA: message_handler TYPE REF TO if_hrpa_message_handler.
CALL FUNCTION 'HR_ECM_GET_DATETYP_FROM_IT0041'
EXPORTING
pernr = pernr
keydt = p_date
datar = 'ZZ'
message_handler = message_handler
IMPORTING
date = lv_fechai
is_ok = lv_is_ok.
Leer valor clase de tratamiento CC-Nomina
*&---------------------------------------------------------------------*
*& Form VWTCL
*&---------------------------------------------------------------------*
* Rescata valor de clase de tratamiento
*----------------------------------------------------------------------*
* -->p_LGART : ccnómina *
* -->p_CLTRAT : clase de tratamiento *
* <--p_V_CLTRAT : valor clase de tratamiento *
*----------------------------------------------------------------------*
form vwtcl using i_lgart type lgart
i_cltrat type c
i_date type d
changing o_v_cltrat type c.
data pack type i.
data char100(100).
perform read_t512w using i_lgart
i_date
changing gst_t512w.
pack = i_cltrat - 1.
char100 = gst_t512w-vklas.
shift char100 by pack places.
o_v_cltrat(1) = char100(1).
endform. "vwtcl
*---------------------------------------------------------------------*
* FORM read_t512w *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
form read_t512w using
i_lgart
i_date type d
changing o_t512w like t512w.
clear o_t512w.
loop at gtb_t512w into o_t512w
where lgart = i_lgart
and molga = '99'
and endda >= i_date
and begda <= i_date.
endloop.
if sy-subrc ne 0.
select single * into o_t512w from t512w
where molga = '99'
and lgart = i_lgart
and endda >= i_date
and begda <= i_date.
if sy-subrc eq 0.
append o_t512w to gtb_t512w.
endif.
endif.
endform. "read_t512w
Leer valor clase de evaluacion CC-Nomina
*&---------------------------------------------------------------------*
*& Form VWECL
*&---------------------------------------------------------------------*
* Rescata valor de clase de evaluación
*----------------------------------------------------------------------*
* -->TEV_LGART : ccnómina *
* -->TEV_CLEVAL : clase de evaluación *
* <--TEV_V_CLEVAL : valor clase de evaluación *
*----------------------------------------------------------------------*
form vwecl using tev_lgart like it-lgart
tev_cleval type c
changing tev_v_cleval type c.
cdatum = aper-endda.
clgart = tev_lgart.
perform re512w.
pack = ( tev_cleval - 1 ) * 2. "vklas-kl - 1.
char100 = t512w-aklas.
shift char100 by pack places.
tev_v_cleval = char100(2).
endform. "vwecl
Como leer texto centro de costo de empleado P0001-KOSTL
*&---------------------------------------------------------------------*
*& Form get_costcenter_text
*&---------------------------------------------------------------------*
form get_costcenter_text using pp_bukrs type bukrs
pp_kokrs type kokrs
p_inform_tab_kostl
changing p_inform_tab_kname.
data: l_kostl like hrca_costc-costcenter,
l_kname like hrca_costc-name,
l_kokrs like hrca_costc-contrlarea.
l_kostl = p_inform_tab_kostl.
if pp_kokrs is initial.
call function 'HRCA_CONTROLLINGAREA_FIND'
exporting
companycode = pp_bukrs
importing
contrlarea = l_kokrs
exceptions
not_found = 1
others = 2.
else.
l_kokrs = pp_kokrs.
endif.
call function 'HR_READ_FOREIGN_OBJECT_TEXT'
exporting
otype = 'K'
costcenter = l_kostl
controllingarea = l_kokrs
importing
costcenter_name = l_kname
exceptions
nothing_found = 1
wrong_objecttype = 2
missing_costcenter_data = 3
missing_object_id = 4
others = 5.
p_inform_tab_kname = l_kname. endform. " get_costcenter_text
Tratamiento Infotipo 2011
Los registros del IT2011 no se almacenan en una tabla tipo PANNNN, con NNNN = Nº Infotipo, sino en la tabla TEVEN, por lo que funciones como HR_READ_INFOTYPE, no sirven para leer los datos del IT2011, entonces un ejemplo de lectura del IT2011 es como el siguiente
SELECT * FROM teven
APPENDING TABLE it_teven
WHERE pernr EQ it_pernr_plan-pernr
AND ldate EQ fec_ev
AND stokz EQ space ORDER BY pernr ldate ltime erdat ertim pdsnr.
A su vez, para borrar un registro se debe utilizar un codigo como el siguiente
teven = i_teven.
IF teven-stokz EQ space. "PH9K012236
teven-stokz = 'X'.
* IF teven-origf EQ space.
* Bei Original-Zeitereignissen wird protokolliert, wer gelöscht hat.
teven-uname = sy-uname.
teven-aedtm = sy-datum.
* ENDIF.
UPDATE teven.
ENDIF.
se observa que se marca a el flag STOKZ con una 'X'
Uso de CALL DIALOG para tratamiento de Infotipos
DATA: dialog_name TYPE dialg.
DATA: BEGIN OF ps OCCURS 20.
INCLUDE STRUCTURE prelp.
DATA: opera, "'U'=Update,'D'=Delete,'I'=Insert
auth. "qice5338
DATA: END OF ps.
DATA: BEGIN OF preftab OCCURS 5.
INCLUDE STRUCTURE pref.
DATA: opera(1).
DATA: END OF preftab.
DATA: wt TYPE STANDARD TABLE OF p0001.
DATA: BEGIN OF i582a OCCURS 20.
INCLUDE STRUCTURE t582a.
DATA: END OF i582a.
dialog_name = 'RP_2012'.
pspar-pernr = wa_gt_outtab-pernr.
pspar-infty = '2012'.
pspar-ittxt = 'Val.prefijados transfer.tmpo.'.
pspar-tclas = 'A'.
pspar-aktyp = 'P'.
pspar-begda = fec_ev.
pspar-endda = fec_ev.
pspar-actio = 'FAST'.
pspar-enque = 1.
pspar-msgst = '1'.
CALL DIALOG dialog_name
EXPORTING pspar FROM pspar
psinfo FROM psinfo
ps FROM ps
preftab FROM preftab
wt FROM wt
i582a FROM i582a
dynmeas FROM dynmeas
initial_values FROM initial_values.
ejemplo 2
FORM ver_pa51 USING p_row. DATA: pspar_2051 LIKE pspar.
CLEAR: pspar.
READ TABLE gt_outtab INDEX p_row.
pspar_2051-pernr = gt_outtab-pernr.
pspar_2051-infty = '2051'.
* pspar_0006-ittxt = 'Direcciones'.
pspar_2051-tclas = 'A'.
pspar_2051-aktyp = 'A'.
pspar_2051-actio = 'DIS'.
pspar_2051-repna = 'MP205100'.
pspar_2051-msgst = '1'.
CONCATENATE fec_ev+0(6) '01' INTO pspar_2051-begda.
pspar-endda = fec_ev.
CALL DIALOG 'RP_2051'
EXPORTING
pspar FROM pspar_2051.
ENDFORM. " ver_pa51
Ejemplo leer datos dinamicos empleado y exportar a MS WORD
Ver programa RPLICO10
Como leer codigo de empleado (PERNR) via usuario SAP (SY-UNAME)
Funciónes BAPI_USR01DOHR_GETEMPLOYEE - RP_GET_PERNR_FROM_USERID con usrty = '0001'
Como leer textos de infotipo
ejemplo I0035
data : pskey type pskey. data : mytext TYPE HRPAD_TEXT_TAB .
loop at p0035. e_salida-begda_0035 = p0035-begda. e_salida-dat35 = p0035-dat35. e_salida-blehr = p0035-blehr.
pskey-pernr = p0035-pernr.
pskey-infty = '0035'.
pskey-subty = p0035-subty.
pskey-endda = p0035-endda.
pskey-begda = p0035-begda.
*TRY.
CALL METHOD CL_HRPA_TEXT_CLUSTER=>READ
EXPORTING
TCLAS = 'A'
PSKEY = pskey
NO_AUTH_CHECK =
IMPORTING
TEXT_TAB = mytext.
DATA : ABC LIKE line of MYTEXT.
LOOP AT MYTEXT INTO ABC.
endloop.
Como leer datos de payroll dado un RUNID de un posting a FI
*&---------------------------------------------------------------------*
*& Form get_seqnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_PERNR text
* -->I_RUNID text
* -->O_SEQNO text
*----------------------------------------------------------------------*
FORM get_seqnr USING i_pernr
i_runid
CHANGING o_seqno.
DATA ld_runid LIKE pcalac-runid.
SELECT runid seqno INTO (ld_runid,o_seqno) FROM pcalac UP TO 1 ROWS
WHERE pernr = i_pernr
AND runid = i_runid
ORDER BY runid DESCENDING.
ENDSELECT.
ENDFORM. "get_seqnr
*&---------------------------------------------------------------------*
*& Form get_rgdir
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_PERNR text
* -->I_SEQNO text
* -->O_INOCR text
* -->O_DATE text
*----------------------------------------------------------------------*
FORM get_rgdir USING i_pernr
i_seqno
CHANGING o_inocr
o_date.
SELECT SINGLE inocr fpend INTO (o_inocr,o_date)
FROM hrpy_rgdir
WHERE pernr = i_pernr
AND seqnr = i_seqno.
IF sy-subrc NE 0.
CLEAR o_inocr.
CLEAR o_date.
ENDIF.
ENDFORM. "get_rgdir
*&---------------------------------------------------------------------*
*& Form get_payroll_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_PERNR text
* -->I_RUNID text
* -->O_INOCR text
* -->O_FPEND text
*----------------------------------------------------------------------*
FORM get_payroll_data USING i_pernr
i_runid
CHANGING o_inocr
o_fpend.
DATA ld_seqno LIKE pcalac-seqno.
PERFORM get_seqnr USING i_pernr
i_runid
CHANGING ld_seqno.
PERFORM get_rgdir USING i_pernr
ld_seqno
CHANGING o_inocr
o_fpend.
ENDFORM. "get_payroll_data
Como leer Modificaciones registradas en log en los datos de los infotipos
Reporte RPUAUD00 para leer modificaciones en los infotipos
Como 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.
endform. "get_kumul
Lectura IT0008
FM BAPI_BASICPAY_GETDETAIL
Ojo que esta BAPI calcula los conceptos indirectos :-)
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.
Ejemplo lectura de cc-nóminas desde P0008
data: lv_betrg TYPE pad_amt7s,
lv_lgart TYPE lgart,
lv_indbw TYPE indbw.
DO 40 TIMES
VARYING lv_lgart FROM p0008-lga01 NEXT p0008-lga02
VARYING lv_betrg FROM p0008-bet01 NEXT p0008-bet02
VARYING lv_indbw FROM p0008-ind01 NEXT p0008-ind02.
IF lv_lgart IS NOT INITIAL.
ENDIF.
ENDDO.
clase CL_HRPA_INFOTYPE_0008
esta clase posee código en los métodos que se pueden utilizar
Ejemplos estructura organizacional
Mostrar todos los empleados hacia abajo de una organización
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = p_objid
act_wegid = 'PERS-O'
act_begda = '19000101'
act_endda = '99991231'
authority_check = ' '
TABLES
result_objec = ti_result2
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
el reporte RHSTRU00, hace lo mismo, pero usando base de datos.
Organizaciones desde y hacia arriba de una persona
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'P'
act_objid = p_pernr
act_wegid = 'P-S-O-O'
authority_check = ' '
TABLES
result_objec = lt_result
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
Leer Gerencia de empleado(caso particular)
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'P'
act_objid = l_pernr
act_wegid = 'P-S-O-O'
authority_check = ' '
TABLES
result_objec = lt_result
EXCEPTIONS ##FM_SUBRC_OK
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
LOOP AT lt_result INTO DATA(ls_result)
WHERE otype EQ 'O' AND istat = '1'
AND begda <= sy-datum
AND endda >= sy-datum
AND ( stext CP 'GERENCIA*' ).
EXIT.
ENDLOOP.
IF sy-subrc = 0.
l_gerencia = ls_result-stext.
ENDIF.
Organizaciones hacia Abajo con posiciones(S) y personal(P)
* buscar organizaciones hacia abajo
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = l_org
act_wegid = 'O-S-P'
authority_check = ' '
TABLES
result_struc = lt_result_struc
result_objec = lt_result_objec
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
O-O_DOWN (Estructura organizativa (descendente)
* O-O_DOWN (Estructura organizativa (descendente)
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = ls_p0001-orgeh
act_wegid = 'O-O_DOWN'
authority_check = ' '
TABLES
result_struc = lt_result_struc
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
posición de empleado
usar act_otype = 'P' act_wegid = 'P_S_S_C'
Lectura de Datos Maestros (Grupo Funciones HRWPC_GENERAL_TEXTS)
FORM textdata USING p_bukrs TYPE bukrs
p_werks TYPE persa
p_kostl TYPE kostl
p_kokrs TYPE kokrs
p_plans TYPE plans
p_infty TYPE infty
p_subty TYPE p2001-subty
p_estado
CHANGING p_butxt TYPE butxt
p_werkt TYPE pbtxt
p_ktext TYPE ktext
p_stext TYPE stext
p_stext_subty TYPE stext
p_itext TYPE t582s-itext
p_stext_estado.
IF p_bukrs IS NOT INITIAL.
CALL FUNCTION 'HRWPC_RFC_BUKRS_TEXT_GET'
EXPORTING
bukrs = p_bukrs
IMPORTING
bukrs_text = p_butxt.
ENDIF.
IF p_werks IS NOT INITIAL.
CALL FUNCTION 'HRWPC_RFC_WERKS_TEXT_GET'
EXPORTING
werks = p_werks
IMPORTING
werks_text = p_werkt.
ENDIF.
IF p_kostl IS NOT INITIAL.
CALL FUNCTION 'HRWPC_RFC_KOSTL_TEXT_GET'
EXPORTING
kokrs = p_kokrs
kostl = p_kostl
begda = sy-datum
endda = sy-datum
IMPORTING
kostl_text = p_ktext
.
ENDIF.
IF p_plans IS NOT INITIAL.
CALL FUNCTION 'HRWPC_RFC_PLANS_TEXT_GET'
EXPORTING
plans = p_plans
begda = sy-datum
endda = sy-datum
IMPORTING
plans_text2 = p_stext.
ENDIF.
IF p_subty IS NOT INITIAL.
CALL FUNCTION 'HRXSS_PER_GET_ESS_SUBTYPE_TEXT'
EXPORTING
infty = p_infty
subty = p_subty
molga = c_molga
IMPORTING
stext = p_stext_subty.
ENDIF.
ENDFORM. " TEXTDATA
Clase CL_EAIN_GET_TEXT
Edad de empleado
FORM calculo_edad USING p_pernr
CHANGING p_edad.
DATA: lt_p0002 TYPE TABLE OF p0002 WITH HEADER LINE.
DATA: l_pernr TYPE p0000-pernr,
l_agnos TYPE p,
l_meses TYPE p,
l_dias TYPE p.
MOVE p_pernr TO l_pernr.
CLEAR p_edad.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = l_pernr
infty = '0002'
begda = sy-datum
endda = sy-datum
TABLES
infty_tab = lt_p0002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
LOOP AT lt_p0002 WHERE begda <= sy-datum
AND endda >= sy-datum.
ENDLOOP.
CHECK sy-subrc = 0.
CALL FUNCTION 'HRVE_GET_TIME_BETWEEN_DATES'
EXPORTING
beg_date = lt_p0002-gbdat
end_date = sy-datum
IMPORTING
days = l_dias
months = l_meses
years = l_agnos
EXCEPTIONS
invalid_period = 1
OTHERS = 2.
p_edad = l_agnos.
ENDFORM. " CALCULO_EDAD
Crear Absentismo IT2001
FORM crear_abs USING p_pernr
p_subty
p_begda
p_endda
p_beguz
p_enduz
p_simulate
CHANGING p_retorno TYPE bapiret2_tab
p_hrabsatt_out TYPE bapihrabsatt_out
p_text.
DATA: lt_retorno LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
ls_key TYPE bapihrtimeskey, " Campos clave BAPI p.entradas tiempos personal (HR)
ls_abs TYPE bapihrabsatt_in. " Campos presencia/absentismo, entrada sin datos adicionale.
* Lock the employee record
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = p_pernr
IMPORTING
return = ls_return
EXCEPTIONS
OTHERS = 1.
if ls_return is NOT INITIAL .
MOVE-CORRESPONDING ls_return to p_retorno.
return.
endif.
CLEAR: ls_abs.
ls_abs-from_date = p_begda. " Inicio de la validez
ls_abs-to_date = p_endda. " Fin de la validez
ls_abs-start_time = p_beguz. " Hora de inicio
ls_abs-end_time = p_enduz. " Hora final
ls_abs-abs_att_hours = ''. " Horas de presencia/absentismo
ls_abs-previous_day = ''. " Indicador de día anterior
IF p_beguz IS NOT INITIAL AND p_enduz IS NOT INITIAL.
* ----> Logica de Horas para el dia
ls_abs-all_day_flag = space.
ELSE.
* ----> Logica Considera
ls_abs-all_day_flag = 'X'.
ENDIF.
CALL FUNCTION 'BAPI_PTMGRATTABS_MNGCREATION'
EXPORTING
employeenumber = p_pernr " Nro. Personal
abs_att_type = p_subty " Clase de Absentismos
hrabsatt_in = ls_abs " Campos presencia/absentismo, entrada sin datos adicionales
simulate = p_simulate
IMPORTING
hrabsatt_out = p_hrabsatt_out
hrabsattext = p_text
TABLES
return = p_retorno. " Retorno
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = p_pernr
.
loop at p_retorno into data(ls_retorno) where type = 'E' or type = 'A'.
endloop
if sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
* CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.
endif.
ENDFORM.
Rutinas para leer contingente
method GET_SALDO_DIAS.
*--------------------------------------------------------------------*
* Calculo de saldo días
*--------------------------------------------------------------------*
DATA: lt_abs_quota TYPE TABLE OF bapihrquota,
lt_ktart TYPE tim_quota_type_tab,
ra_ktart TYPE RANGE OF p2006-ktart,
wa_ktart LIKE LINE OF ra_ktart.
DATA lv_saldodias TYPE anzhl.
*--------------------------------------------------------------------*
* Calculo de saldo días
*--------------------------------------------------------------------*
CALL FUNCTION 'BAPI_TIMEQUOTA_GETDETAILEDLIST'
EXPORTING
employeenumber = i_solicitud-pernr
* QUOTASELECTIONMOD = '1' "absentismos
TABLES
absencequotareturntable = lt_abs_quota.
CALL FUNCTION 'Z_HCM_CONTINGENTE_FROM_ABS'
EXPORTING
i_pernr = i_solicitud-pernr
i_begda = i_solicitud-begda
i_endda = i_solicitud-endda
i_subty = i_solicitud-subty
IMPORTING
e_ktart = lt_ktart.
LOOP AT lt_ktart INTO DATA(ls_ktart).
wa_ktart-low = ls_ktart.
wa_ktart-sign = 'I'.
wa_ktart-option = 'EQ'.
APPEND wa_ktart TO ra_ktart.
CLEAR wa_ktart.
ENDLOOP.
lv_saldodias = 0.
IF ra_ktart[] IS NOT INITIAL.
LOOP AT lt_abs_quota INTO DATA(ls_abs_quota) WHERE quotatype IN ra_ktart.
lv_saldodias = lv_saldodias + ls_abs_quota-rest_free.
ENDLOOP.
ENDIF.
lv_saldodias = lv_saldodias - i_solicitud-quota_deduction.
IF lv_saldodias < 0.
lv_saldodias = 0.
ENDIF.
r_saldo = lv_saldodias. "type anzhl
endmethod.
FUNCTION z_hcm_contingente_from_abs.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_PERNR) TYPE PERNR_D
*" REFERENCE(I_BEGDA) TYPE BEGDA DEFAULT SY-DATUM
*" REFERENCE(I_ENDDA) TYPE ENDDA DEFAULT SY-DATUM
*" REFERENCE(I_SUBTY) TYPE T554S-SUBTY
*" EXPORTING
*" REFERENCE(E_KTART) TYPE TIM_QUOTA_TYPE_TAB
*"----------------------------------------------------------------------
DATA lt_p0001 TYPE TABLE OF p0001.
DATA ls_t503 TYPE t503.
DATA ls_t001p TYPE t001p.
DATA ls_t554s TYPE t554s.
DATA ls_t556c TYPE t556c.
DATA ls_t556r TYPE t556r.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = i_pernr
infty = '0001'
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_p0001 INTO DATA(ls_p0001) WHERE begda <= i_endda AND
endda >= i_begda.
ENDLOOP.
IF sy-subrc <> 0.
RETURN.
ENDIF.
SELECT SINGLE * INTO ls_t503 FROM t503
WHERE persg = ls_p0001-persg
AND persk = ls_p0001-persk.
SELECT SINGLE * INTO ls_t001p FROM t001p
WHERE werks = ls_p0001-werks
AND btrtl = ls_p0001-btrtl.
SELECT SINGLE * INTO ls_t554s FROM t554s
WHERE moabw = ls_t001p-moabw
AND subty = i_subty
AND endda >= i_begda
AND begda <= i_endda.
SELECT SINGLE * INTO ls_t556c FROM t556c
WHERE mopgk = ls_t503-konty
AND mozko = ls_t001p-mozko
AND crule = ls_t554s-crule
AND ctype = 'Q'.
SELECT SINGLE * INTO ls_t556r FROM t556r
WHERE "
mopgk = ls_t503-konty
AND mozko = ls_t001p-mozko
AND qtype = 'A'
AND dedrg = ls_t556c-deabp
AND endda >= i_begda
AND begda <= i_endda.
* copiado de LHRTIM00QUOTADEDUCTIONF01 #986
CONSTANTS: QSTEP TYPE I VALUE 2.
DATA: BEGIN OF selqtypes OCCURS 0,
cktart(2) TYPE c,
END OF selqtypes.
DATA:qttps TYPE qttps.
qttps = ls_t556r-qttps.
DO 100 TIMES.
selqtypes-cktart = qttps.
IF selqtypes-cktart IS INITIAL. "' '"
EXIT. "end-of-sequence was found
ENDIF.
APPEND selqtypes.
SHIFT qttps BY qstep PLACES LEFT.
ENDDO.
loop at selqtypes.
APPEND selqtypes-cktart to E_KTART.
endloop.
ENDFUNCTION.
La función anterior es equivalente al siguiente método:
DATA lt_p0001 TYPE p0001_tab.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = i_pernr
infty = '0001'
begda = i_begda
endda = i_endda
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD cl_hrpaybr_absence_quotas=>get_quota_type_tab
EXPORTING
iv_pernr = i_pernr
iv_begda = i_begda
iv_endda = i_endda
it_p0001 = lt_p0001
iv_subty = i_subty
IMPORTING
et_quota_type_tab = ra_ktart.
Tabla Contingentes: T556R - Reglamentación secuencia liquidación p.contingentes absent.
HR_INFOTYPE_OPERATION
Ejemplo 1
PERFORM infotype_operation USING c_create
p0014
p_test
CHANGING l_subrc.
FORM infotype_operation USING p_actio TYPE pspar-actio
p_infty TYPE any
p_test TYPE xfeld
CHANGING p_subrc.
DATA: ls_bapireturn TYPE bapiret1,
ls_key TYPE bapipakey,
wa TYPE p0002,
l_dialog_mode(1).
MOVE-CORRESPONDING p_infty TO wa.
* enqueue the employye
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = wa-pernr
IMPORTING
return = ls_bapireturn.
IF ls_bapireturn IS NOT INITIAL.
p_subrc = 2.
RETURN.
ENDIF.
l_dialog_mode = '0'.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = wa-infty
number = wa-pernr
subtype = wa-subty
validityend = wa-endda
validitybegin = wa-begda
record = p_infty "p9032
operation = p_actio
nocommit = 'X'
dialog_mode = l_dialog_mode
IMPORTING
return = ls_bapireturn
key = ls_key
EXCEPTIONS
OTHERS = 0.
IF NOT ls_bapireturn IS INITIAL.
* error
p_subrc = 1.
ELSE.
p_subrc = 0.
IF p_test <> abap_true.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = wa-pernr
IMPORTING
return = ls_bapireturn.
ENDFORM.
PA40 - FM HR_PAD_HIRE_EMPLOYEE
Ver nota SAP 1913529 - Function module HR_MAINTAIN_MASTERDATA does not work as expected when hiring an employee
* Create new employee for user
* Organizational assignment
MOVE-CORRESPONDING p_p0001 TO ls_p0001.
ls_p0001-infty = '0001'.
ls_p0001-endda = ls_p0000-endda.
ls_p0001-begda = ls_p0000-begda.
ls_p0001-persg = p_p0000-persg.
ls_p0001-persk = p_p0000-persk.
ls_p0001-werks = p_p0000-werks.
ASSIGN ls_p0001 TO <pnnnn>.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = <pnnnn>
IMPORTING
prelp = ls_prelp.
APPEND ls_prelp TO lt_prelp.
CLEAR ls_prelp.
CALL FUNCTION 'HR_PAD_HIRE_EMPLOYEE'
EXPORTING
hiringdate = ls_p0000-begda
actiontype = ls_p0000-massn
reasonforaction = ls_p0000-massg
pnnnn_tab = lt_prelp
nocommit = p_test
IMPORTING
return_tab = lt_return
bapipakey_tab = lt_key.
Uso de FM HR_ABS_ATT_TIMES_AT_ENTRY
FORM get_abs_times USING p_pernr p_subty p_begda p_endda
CHANGING p_alldf.
DATA tpd TYPE TABLE OF ptm_times_per_day.
DATA: " p_ABWTG LIKE P2001-ABWTG,
p_abrtg LIKE p2001-abrtg,
p_abrst LIKE p2001-abrst,
" p_KALTG LIKE P2001-KALTG,
p_hrsif LIKE p2001-hrsif,
* p_ALLDF LIKE P2001-ALLDF,
error_wo_exception TYPE c.
DATA: p_beguz LIKE p2001-beguz,
p_enduz LIKE p2001-enduz,
p_vtken LIKE p2001-vtken,
p_stdaz LIKE p2001-stdaz,
p_breaks TYPE hrtim_att_breaks,
p_abwtg LIKE p2001-abwtg,
p_kaltg LIKE p2001-kaltg.
DATA errors LIKE hrerror OCCURS 0 WITH HEADER LINE.
DATA: p0000 TYPE TABLE OF p0000 WITH HEADER LINE,
p0001 TYPE TABLE OF p0001 WITH HEADER LINE,
p0002 TYPE TABLE OF p0002 WITH HEADER LINE,
p0007 TYPE TABLE OF p0007 WITH HEADER LINE,
p2001 TYPE TABLE OF p2001 WITH HEADER LINE,
p2002 TYPE TABLE OF p2002 WITH HEADER LINE,
p2003 TYPE TABLE OF p2003 WITH HEADER LINE.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '0000'
TABLES
infty_tab = p0000
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '0001'
TABLES
infty_tab = p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '0002'
TABLES
infty_tab = p0002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '0007'
TABLES
infty_tab = p0007
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*CALL FUNCTION 'HR_READ_INFOTYPE'
* EXPORTING
* pernr = p_pernr
* infty = '2001'
* TABLES
* infty_tab = p2001
* EXCEPTIONS
* INFTY_NOT_FOUND = 1
* OTHERS = 2
* .
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.
*
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '2002'
TABLES
infty_tab = p2002
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*CALL FUNCTION 'HR_READ_INFOTYPE'
* EXPORTING
* pernr = p_pernr
* infty = '2003'
* TABLES
* infty_tab = p2003
* EXCEPTIONS
* INFTY_NOT_FOUND = 1
* OTHERS = 2
* .
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.
DATA c_6(6) VALUE ' '.
p_beguz = c_6.
p_enduz = c_6.
CALL FUNCTION 'HR_ABS_ATT_TIMES_AT_ENTRY'
EXPORTING
pernr = p_pernr
awart = p_subty
begda = p_begda
endda = p_endda
IMPORTING
abwtg = p_abwtg
abrtg = p_abrtg "Días de Nómina
abrst = p_abrst
kaltg = p_kaltg
hrsif = p_hrsif
alldf = p_alldf
error_wo_exception = error_wo_exception
TABLES
m0000 = p0000
m0001 = p0001
m0002 = p0002
m0007 = p0007
m2001 = p2001
m2002 = p2002
m2003 = p2003
times_per_day = tpd
CHANGING
beguz = p_beguz
enduz = p_enduz
vtken = p_vtken
stdaz = p_stdaz
breaks = p_breaks "YMMPH0K000026
EXCEPTIONS ##FM_SUBRC_OK
it0001_missing = 1
customizing_error = 2
error_occurred = 3 "YAYP40K054237
end_before_begin = 4. "YAYP40K054237
* others = 5.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
Obtener foto de empleado(binario)
form get_employee_photo USING iv_pernr type p0000-pernr
CHANGING p_photo type xstring
p_mime_type type W3CONTTYPE
p_subrc type sy-subrc.
DATA: ls_connect_info TYPE toav0,
lt_content TYPE TABLE OF sdokcntbin,
lv_len TYPE i, " #EC NEEDED
lt_acinf TYPE TABLE OF scms_acinf.
FIELD-SYMBOLS: <ls_acinf> TYPE scms_acinf.
CLEAR: p_photo.
IF iv_pernr IS NOT INITIAL.
CALL FUNCTION 'HR_IMAGE_EXISTS'
EXPORTING
p_pernr = iv_pernr
p_begda = sy-datlo
p_endda = sy-datlo
IMPORTING
p_connect_info = ls_connect_info
EXCEPTIONS
error_connectiontable = 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.
p_subrc = 1.
return.
ENDIF.
IF ls_connect_info IS NOT INITIAL.
CALL FUNCTION 'SCMS_DOC_READ'
EXPORTING
stor_cat = ' '
crep_id = ls_connect_info-archiv_id
doc_id = ls_connect_info-arc_doc_id
TABLES
access_info = lt_acinf
content_bin = lt_content
EXCEPTIONS
bad_storage_type = 1
bad_request = 2
unauthorized = 3
comp_not_found = 4
not_found = 5
forbidden = 6
conflict = 7
internal_server_error = 8
error_http = 9
error_signature = 10
error_config = 11
error_format = 12
error_parameter = 13
error = 14
OTHERS = 15.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE lt_acinf ASSIGNING <ls_acinf> INDEX 1.
IF sy-subrc EQ 0.
p_mime_type = <ls_acinf>-mimetype.
lv_len = <ls_acinf>-comp_size.
ENDIF.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_len
IMPORTING
buffer = p_photo
TABLES
binary_tab = lt_content
EXCEPTIONS
failed = 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.
ENDIF.
ENDIF.
ENDform. "get_employee_photo
obtener URL foto de empleado
FORM obtiene_foto USING i_pernr
CHANGING e_foto. "copiado de FM HRXSS_COD_GET_DETAILS
DATA: connect TYPE TABLE OF toav0 WITH HEADER LINE,
url(4096) TYPE c,
pernr_char(50) TYPE c.
DATA: lv_pernr TYPE persno.
lv_pernr = i_pernr.
CONCATENATE lv_pernr '*' INTO pernr_char. "note 996882
CALL FUNCTION 'ARCHIV_GET_CONNECTIONS'
EXPORTING
objecttype = 'PREL'
object_id = pernr_char
documenttype = 'HRICOLFOTO'
until_ar_date = sy-datum
TABLES
connections = connect
EXCEPTIONS
nothing_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
CLEAR connect.
LOOP AT connect.
CALL FUNCTION 'SCMS_AO_URL_READ'
EXPORTING
arc_id = connect-archiv_id
doc_id = connect-arc_doc_id
document_type = connect-reserve
http_url_only = 'X'
loc_info = 'W'
IMPORTING
url = url
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
EXIT.
ENDLOOP.
e_foto = url.
ENDFORM. "obtiene_foto"obtiene_foto
Buscar jefe de empleado (lógica basada en lider de organización)
FORM busca_jefe USING p_pernr TYPE persno
CHANGING p_idjefe TYPE persno
p_nombrejefe TYPE pad_cname.
DATA: lt_result LIKE objec OCCURS 0 WITH HEADER LINE,
lt_result2 LIKE objec OCCURS 0 WITH HEADER LINE,
lt_p0001 TYPE TABLE OF p0001 WITH HEADER LINE.
DATA: l_objid TYPE objec-objid.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = p_pernr
infty = '0001'
begda = sy-datum
endda = sy-datum
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_p0001.
ENDLOOP.
IF sy-subrc <> 0.
RETURN.
ENDIF.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'P'
act_objid = p_pernr
act_wegid = 'P-S-O-O'
authority_check = ' '
TABLES
result_objec = lt_result
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
RETURN.
ENDIF.
LOOP AT lt_result WHERE otype EQ 'O'.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = lt_result-objid
act_wegid = 'B012'
authority_check = ' '
TABLES
result_objec = lt_result2
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
READ TABLE lt_result2 WITH KEY otype = 'S'.
CHECK sy-subrc = 0 AND lt_p0001-plans <> lt_result2-objid.
l_objid = lt_result2-objid.
REFRESH lt_result2.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'S'
act_objid = l_objid
act_wegid = 'SAP_ORG'
authority_check = ' '
TABLES
result_objec = lt_result2
EXCEPTIONS
no_plvar_found = 1
no_entry_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
READ TABLE lt_result2 WITH KEY otype = 'P'.
CHECK sy-subrc = 0.
p_idjefe = lt_result2-objid.
p_nombrejefe = lt_result2-stext.
EXIT.
ENDLOOP.
ENDFORM. " BUSCA_JEFE
Obtener fecha de termino ( leaving date )
clear p_leaving_date. "WRH L9CK045673
refresh leaving_date_tab. "WRH L9CK045673
CALL FUNCTION 'HR_LEAVING_DATE'
EXPORTING
PERSNR = P_PERNR
IMPORTING
LEAVINGDATE = P_LEAVING_DATE
TABLES
LEAVING_DATES = LEAVING_DATE_TAB
EXCEPTIONS
LEAVING_DATE_NOT_FOUND = 1
PERNR_NOT_ASSIGNED = 2
OTHERS = 3.
CC-nómina : valoración indirecta
FORM lee_valoracion_indirecta_0014.
CLEAR lt_ptbindbw[].
CHECK p0014-indbw = 'I'. "Indicador para valoración indirecta
MOVE-CORRESPONDING p0014 TO lt_ptbindbw.
APPEND lt_ptbindbw.
CALL FUNCTION 'RP_EVALUATE_INDIRECTLY_P0014'
EXPORTING
pbegda = p0014-begda
pmolga = '39'
ppernr = p0014-pernr
TABLES
ptbindbw = lt_ptbindbw
EXCEPTIONS
bad_parameters = 1
error_at_indirect_evaluation = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
MOVE lt_ptbindbw-betrg TO p0014-betrg.
MOVE lt_ptbindbw-anzhl TO p0014-anzhl.
ENDIF.
ENDFORM. "lee_valoracion_indirecta_0014
FORM lee_valoracion_indirecta_0015.
CLEAR lt_ptbindbw[].
CHECK p0015-indbw = 'I'. "Indicador para valoración indirecta
MOVE-CORRESPONDING p0015 TO lt_ptbindbw.
APPEND lt_ptbindbw.
CALL FUNCTION 'RP_EVALUATE_INDIRECTLY_P0015'
EXPORTING
pbegda = p0015-begda
pmolga = '39'
ppernr = p0015-pernr
TABLES
ptbindbw = lt_ptbindbw
EXCEPTIONS
bad_parameters = 1
error_at_indirect_evaluation = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
MOVE lt_ptbindbw-betrg TO p0015-betrg.
MOVE lt_ptbindbw-anzhl TO p0015-anzhl.
ENDIF.
ENDFORM. "lee_valoracion_indirecta_0014
********************
CALL METHOD cl_hrpad_wagetype=>process_indirect_valuation
EXPORTING
tclas = tclas
pernr = p0014-pernr
infty = p0014-infty
begda = p0014-begda
wagetype = p0014-lgart
read_infotype = a_read_infotype
message_handler = remapper
IMPORTING
indval_indicator = p0014-indbw
endda = dummy_endda
amount = betrg
is_ok = is_ok
CHANGING
currency = p0014-waers
number = p0014-anzhl.
IF is_ok = true.
p0014-betrg = betrg.
ENDIF.
********************
*** call indirect valuation
CALL FUNCTION 'RP_EVALUATE_INDIRECTLY'
EXPORTING
appli = 'E' "MELN1228169
pbegda = begda
pinfty = '0008'
pmolga = molga
ptclas = tclas
ppernr = p0008-pernr
PP0001 = p0001 "***!!!*** ONLY TEMP
pp0007 = p0007 "***!!!*** ONLY TEMP
pp0008 = p0008
pp0230 = p0230 "MELN1636872
* MSGFLG = ''
* CONV_CURR = 'X'
IMPORTING
pendda = endda
TABLES
ptbindbw = ptbindbw
EXCEPTIONS
bad_parameters = 1
error_at_indirect_evaluation = 2
error_message = 3
OTHERS = 4.