Difference between revisions of "SAP HCM BADI"
From SapWiki
| (23 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | == | + | ==<nowiki>BADI HRPAD00INFTY (Tarea actualiz./Actualiz.infotipo)</nowiki> == |
===ejemplo de IN_UPDATE === | ===ejemplo de IN_UPDATE === | ||
| + | * enviar datos a sistema externo al crear, modificar o borrar registros de IT2001 y IT2002 | ||
| + | <nowiki>METHOD if_ex_hrpad00infty~in_update. | ||
| + | DATA: lt_p0001 TYPE TABLE OF p0001, | ||
| + | ls_p0001 TYPE p0001. | ||
| + | |||
| + | DATA: lt_oper TYPE TABLE OF psoper, | ||
| + | ls_oper TYPE psoper, | ||
| + | ls_prel TYPE prelp, | ||
| + | ls_prel_old TYPE prelp. | ||
| + | |||
| + | DATA: ls_t503 TYPE t503, | ||
| + | ls_t001p TYPE t001p. | ||
| + | |||
| + | DATA l_f(1). | ||
| − | + | CHECK ipspar-infty = '2001' OR ipspar-infty = '2002'. | |
| − | + | ||
| − | + | CLEAR: ls_oper. | |
| − | + | LOOP AT new_image INTO ls_oper WHERE infty = '2001' or infty = '2002'. | |
| − | + | APPEND ls_oper TO lt_oper. | |
| − | + | ENDLOOP. | |
| − | + | ||
| − | + | sort lt_oper by opera. "primero borrar 'D' => después insertar 'I' | |
| − | + | ||
| − | + | CLEAR: ls_oper. | |
| − | + | LOOP AT old_image INTO ls_oper WHERE infty = '2001' or infty = '2002'. | |
| − | + | MOVE-CORRESPONDING ls_oper TO ls_prel_old. | |
| − | + | EXIT. | |
| − | + | ENDLOOP. | |
| − | + | ||
| − | + | CALL FUNCTION 'HR_READ_INFOTYPE' | |
| − | + | EXPORTING | |
| − | + | pernr = ipspar-pernr | |
| − | + | infty = '0001' | |
| − | + | TABLES | |
| − | + | infty_tab = lt_p0001 | |
| − | + | 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. | |
| − | + | ||
| − | + | LOOP AT lt_p0001 INTO ls_p0001 WHERE begda <= ipspar-endda AND | |
| − | + | endda >= ipspar-begda. | |
| − | + | ENDLOOP. | |
| − | + | ||
| − | + | 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. | ||
| + | |||
| + | LOOP AT lt_oper INTO ls_oper. | ||
| + | MOVE-CORRESPONDING ls_oper TO ls_prel. | ||
| + | |||
| + | CALL FUNCTION 'Z_HCM_ENVIA_DATA' | ||
| + | EXPORTING | ||
| + | tclas = ipspar-tclas | ||
| + | innnn = ls_prel | ||
| + | i001p = ls_t001p | ||
| + | i_opera = ls_oper-opera | ||
EXCEPTIONS | EXCEPTIONS | ||
| − | + | error_occured = 1 | |
| − | OTHERS | + | 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. | |
| − | + | ENDLOOP. | |
| − | + | ||
| − | + | ENDMETHOD.</nowiki> | |
| − | + | ||
| − | + | ===ejemplo de AFTER_INPUT=== | |
| − | + | * validar fechas al actualizar IT0041 | |
| − | + | <nowiki>method IF_EX_HRPAD00INFTY~AFTER_INPUT. | |
| − | + | ||
| − | + | DATA: ls_p0041 TYPE p0041, | |
| − | + | lv_date TYPE begda, | |
| − | + | lv_date2 TYPE begda, | |
| − | + | lv_date3 TYPE begda, | |
| − | + | lv_years(4) type n. | |
| − | + | ||
| + | DATA: datar_0041 TYPE datar, | ||
| + | date_0041 TYPE datum. | ||
| + | ** Check country code | ||
| + | CHECK i001p-molga EQ '39'. "CL Chile | ||
| + | ** Check infotype | ||
| + | CHECK new_innnn-infty EQ '0041'. | ||
| + | ** No check for Delete operation | ||
| + | CHECK NOT ipsyst-ioper = 'DEL'. | ||
| + | ** Convert to structure | ||
| + | CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn | ||
| + | EXPORTING | ||
| + | prelp = new_innnn | ||
| + | IMPORTING | ||
| + | pnnnn = ls_p0041. | ||
| + | |||
| + | DO 12 TIMES VARYING datar_0041 FROM ls_p0041-dar01 NEXT ls_p0041-dar02 | ||
| + | VARYING date_0041 FROM ls_p0041-dat01 NEXT ls_p0041-dat02. | ||
| + | IF datar_0041 = '07'. "vacaciones legales | ||
| + | lv_date = date_0041. | ||
| + | ELSEIF datar_0041 = '02'. "antiguedad | ||
| + | lv_date2 = date_0041. | ||
| + | ELSEIF datar_0041 = '04'. "progresivos | ||
| + | lv_date3 = date_0041. | ||
| + | * ELSEIF date_0041 IS INITIAL. | ||
| + | * EXIT. | ||
| + | ENDIF. | ||
| + | ENDDO. | ||
| + | |||
| + | if lv_date <> lv_date2. | ||
| + | MESSAGE e016(RP) WITH 'Fecha Vac. Legales' lv_date 'distinto a Fecha Antigüedad' lv_date2. | ||
| + | endif. | ||
| + | |||
| + | if lv_date3(4) < lv_date2(4). | ||
| + | lv_years = lv_date2(4) - lv_date3(4). | ||
| + | |||
| + | if lv_years > 10. | ||
| + | message e016(RP) WITH 'Fecha Progresivos' | ||
| + | 'permite el reconocimiento máximo de 10 años' | ||
| + | 'respecto a Fecha Antigüedad' lv_date2. | ||
| + | ELSEIF lv_date3+4(4) NE lv_date2+4(4). | ||
| + | message e016(RP) WITH 'Mes y día de progresivos deben ser' | ||
| + | 'igual al de antigüedad legal'. | ||
| + | endif. | ||
| + | endif. | ||
| + | |||
| + | endmethod.</nowiki> | ||
| + | |||
| + | ==BADI HRFORM_HRF02== | ||
| + | Como obtener el PDF de un recibo de sueldo creado vía trn. HRFORMS y formulario definido como Smartform: | ||
| − | CALL FUNCTION ' | + | *Implementar badi HRFORM_HRF02 método GET_FDATA |
| + | method IF_EX_HRFORM_HRF02~GET_FDATA. | ||
| + | CALL FUNCTION 'Z_GET_FDATA' | ||
EXPORTING | EXPORTING | ||
| − | + | i_fdata = fdata | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
. | . | ||
| − | + | endmethod. | |
| − | + | ||
| − | * | + | *Crear grupo de Función ZHCM_PAYSLIP y crear la función |
| − | + | <nowiki>FUNCTION z_get_fdata. | |
| − | + | *"---------------------------------------------------------------------- | |
| + | *"*"Interfase local | ||
| + | *" IMPORTING | ||
| + | *" REFERENCE(I_FDATA) TYPE ANY | ||
| + | *"---------------------------------------------------------------------- | ||
| + | * ver BADI HRFORM_HRF02_CL method get_data | ||
| + | DATA ls_fdata TYPE /1pyxxfo/zpayslip_cl. | ||
| + | |||
| + | MOVE i_fdata TO ls_fdata. | ||
| + | |||
| + | *gt_data definido como global en el grupo de función | ||
| + | *data gt_fdata type TABLE OF /1PYXXFO/ZPAYSLIP_CL. | ||
| + | |||
| + | APPEND ls_fdata TO gt_fdata. | ||
| + | EXPORT gt_fdata TO MEMORY ID 'ZPAYSLIP_CL'. | ||
| + | |||
| + | ENDFUNCTION.</nowiki> | ||
| + | |||
| + | *Copiar programa HINU_HRFORMS_MAIL (ver nota 2004408 - HR-IN: HRForms Payslip via e-mail), al final del proceso(después de los SUBMIT (gv_report) ) obtener el fdata y obtener PDF del smartform, algo equivalente a: | ||
| − | + | <nowiki>* ver BADI HRFORM_HRF02_CL method get_data | |
| + | * obtiene datos de la impresión del recibo de sueldo | ||
| + | IMPORT gt_fdata TO gt_fdata FROM MEMORY ID 'ZPAYSLIP_CL'. | ||
| + | |||
| + | loop at gt_fdata into data(wa). | ||
| + | .... | ||
| + | .... | ||
| + | .... | ||
| + | CALL FUNCTION ld_func_module_name | ||
| + | EXPORTING | ||
| + | control_parameters = ls_control_parameters | ||
| + | output_options = ls_output_options | ||
| + | user_settings = space | ||
| + | hrdata = wa | ||
| + | IMPORTING | ||
| + | job_output_info = ls_output | ||
| + | EXCEPTIONS | ||
| + | formatting_error = 1 | ||
| + | internal_error = 2 | ||
| + | send_error = 3 | ||
| + | user_canceled = 4 | ||
| + | OTHERS = 5. | ||
| + | ... | ||
| + | ... | ||
| + | ... | ||
| + | endloop.</nowiki> | ||
| + | |||
| + | ==Enhancement Spot PT_ABS_REQ== | ||
| + | Este add-in empresarial (BAdI) se utiliza en el componente PT-RC-AA (Presencias/Absentismos). Se utiliza para las aplicaciones Web siguientes: | ||
| + | |||
| + | *solicitud de absentismo: Control del procesamiento de solicitudes de absentismo. Encontrará más información en la guía de implementación (IMG) bajo Gestión de personal -> Employee Self-Service. | ||
| + | *calendario de equipo: Configuración del calendario de equipo en el Manager Self-Service (MSS) y en el Employee Self-Service (ESS) | ||
| + | *cuentas de tiempos (ESS): Determinación de las cuentas de tiempos | ||
| + | *resumen de presencias (MSS): Ajustar leyenda | ||
| − | === | + | ejemplo: |
| − | + | ||
| − | + | <nowiki>METHOD if_ex_pt_abs_req~simulate_via_blop. | |
| − | + | DATA message_handler TYPE REF TO if_pt_req_message_handler. | |
| − | + | IF 1 = 2. | |
| − | + | CALL METHOD cl_pt_req_message_handler=>instance_get | |
| − | + | RECEIVING | |
| − | + | result = message_handler. | |
| − | + | ||
| − | + | CALL METHOD message_handler->add_message | |
| − | + | EXPORTING | |
| − | + | im_type = 'E' "Type of Message | |
| − | + | im_cl = '0K' "Message class that you created | |
| − | + | im_number = '000' "Message no | |
| − | + | im_par1 = 'SIMULATE_VIA_BLOP' | |
| − | + | im_par2 = 'IF_EX_PT_ABS_REQ~SIMULATE_VIA_BLOP' "Method name as in your impl. | |
| − | + | im_par3 = 'BLOP' | |
| − | + | im_context = '' | |
| − | + | im_subcontext = '' | |
| − | + | im_classname = 'CL_PT_ARQ_BLOP_ADAPTER' | |
| − | + | im_methodname = 'MESSAGE'. | |
| − | + | ENDIF. | |
| − | + | ENDMETHOD.</nowiki> | |
| − | + | ||
| − | + | ==HRPAY99_CURR_CONV - Implementación Cálculo de nómina: Conversión de moneda== | |
| − | + | Ejecutada desde FM HR_CONVERT_TO_LOCAL_CURRENCY | |
| − | + | <nowiki> | |
| − | + | METHOD if_ex_hrpay99_curr_conv~set_conv_date_type. | |
| − | + | ||
| − | + | * Some of the input data can be derived (compare with function | |
| − | + | * PCLO_COMPUTE_REPAYMENT_PLAN): | |
| − | + | * | |
| − | + | * EMPLOYEENUMBER -> PT_P0001 | |
| − | + | * EMPLOYEENUMBER, PT_P0001 -> FLT_VAL (= MOLGA), lt_abkrs_from_p0001 | |
| − | + | * some date, lt_abkrs_from_p0001 -> PAYROLL_AREA, PERIOD_MODIFIER | |
| − | + | * some date, PAYROLL_AREA, lt_abkrs_from_p0001 | |
| − | + | * -> PAYROLL_PERIOD, PERIOD_BEGIN, PERIOD_END | |
| − | + | * | |
| − | + | * Notice, that in case of splitted periods (WPBP split, partial | |
| − | + | * periods), the estimated PEIROD_BEGIN and PERIOD_END could differ | |
| − | + | * from the ones given as parameter (APER-BEGDA, APER-ENDDA). | |
| − | + | * | |
| − | + | * Think on retrocalculation differences. | |
| − | + | * | |
| − | + | * Be carfull when using an other date than proposed_convdate, | |
| − | + | * because this may be set due to legal requirements; especially | |
| − | + | * when proposed_convdate differs from period begin. | |
| − | + | ||
| − | + | pfx_type_of_rate = proposed_type_of_rate. | |
| − | + | pfx_conversion_date = proposed_convdate. | |
| − | + | ||
| − | + | IF sy-cprog <> 'HCLCALC0'. "Programa de nómina Chile | |
| − | + | RETURN. | |
| − | + | ENDIF. | |
| − | + | ||
| + | DATA ls_t511p TYPE t511p. | ||
| + | DATA: lw_var(40) TYPE c. | ||
| + | FIELD-SYMBOLS <fs> TYPE any. | ||
| + | |||
| + | lw_var = '(HCLCALC0)T511P'. | ||
| + | ASSIGN (lw_var) TO <fs>. | ||
| + | IF sy-subrc = 0 AND <fs> IS ASSIGNED. | ||
| + | MOVE <fs> TO ls_t511p. | ||
| + | ELSE. | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | IF ps_currconv_data-foreign_currency = 'UF' AND | ||
| + | ps_currconv_data-countryhr = '39' AND | ||
| + | ls_t511p-konst = 'ZBSC1' AND | ||
| + | proposed_type_of_rate = 'M'. | ||
| + | |||
| + | CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS' | ||
| + | EXPORTING | ||
| + | day_in = proposed_convdate | ||
| + | IMPORTING | ||
| + | last_day_of_month = pfx_conversion_date | ||
| + | EXCEPTIONS | ||
| + | day_in_no_date = 1 | ||
| + | OTHERS = 2. | ||
| + | ENDIF. | ||
| + | |||
| + | ENDMETHOD. | ||
| + | </nowiki> | ||
| + | |||
| + | == Ampliación PBAS0001 , exits EXIT_SAPFP50M_001 EXIT_SAPFP50M_002 (trn CMOD/SMOD)== | ||
| + | ejemplo EXIT_SAPFP50M_002 | ||
| + | <nowiki> | ||
| + | data ls_p0021 type p0021. | ||
| + | data l_result_date type d. | ||
| + | |||
| + | case innnn-infty. | ||
| + | when '0021'. | ||
| + | check ipsyst-ioper = modify or | ||
| + | ipsyst-ioper = insert or | ||
| + | ipsyst-ioper = copy. | ||
| + | |||
| + | clear: ls_p0021. | ||
| + | call method cl_hr_pnnnn_type_cast=>prelp_to_pnnnn | ||
| + | exporting | ||
| + | prelp = innnn | ||
| + | importing | ||
| + | pnnnn = ls_p0021. | ||
| + | |||
| + | if ls_p0021-famsa = '2'. "hijo. | ||
| + | |||
| + | *sumar 18 años a fecha de nacimiento y limitar | ||
| + | call function 'CALCULATE_DATE' | ||
| + | exporting | ||
| + | days = '0' | ||
| + | months = '216' "18 años | ||
| + | start_date = ls_p0021-fgbdt | ||
| + | importing | ||
| + | result_date = l_result_date. | ||
| + | |||
| + | l_result_date+4 = '1231'. | ||
| + | |||
| + | if l_result_date >= innnn-begda. | ||
| + | innnn-endda = l_result_date. | ||
| + | endif. | ||
| + | |||
| + | endif. | ||
| + | |||
| + | endcase.</nowiki> | ||
| + | |||
| + | ==badi BADI_HR_PENSION_PLAN_CONTR para función P3213 (nómina chilena)== | ||
| + | Métodos: | ||
| + | *GET_PP_CONTRIBUTION - Pension Contribution Calculation | ||
| + | *GET_PP_METHOD_LIMIT - Pension Calculation Method Limit | ||
| + | *GET_PP_ELIGIBILITY - Employee Eligibility for Pension | ||
| + | |||
| + | include RPCMAS19_FUP3213, form execute_badi | ||
| + | <nowiki> | ||
| + | CASE p_calc_type . | ||
| + | WHEN 0. " Eligibility | ||
| + | CALL BADI l_badi_instance->get_pp_eligibility | ||
| + | EXPORTING | ||
| + | pernr = pernr-pernr | ||
| + | p_date = p_date | ||
| + | IMPORTING | ||
| + | eligible = p_amount. | ||
| + | |||
| + | WHEN 1. " Pension plan contribution | ||
| + | CHECK <fs_t799bpp04> IS ASSIGNED. | ||
| + | CLEAR p_amount. | ||
| + | CALL BADI l_badi_instance->get_pp_contribution | ||
| + | EXPORTING | ||
| + | pernr = pernr-pernr | ||
| + | p_date = p_date | ||
| + | wa_t799bpp04 = <fs_t799bpp04> | ||
| + | result_table = it[] | ||
| + | IMPORTING | ||
| + | RESULT = p_amount. | ||
| + | WHEN 2. " Contribution limit | ||
| + | CHECK <fs_t799bpp04> IS ASSIGNED. | ||
| + | CLEAR p_amount. | ||
| + | CALL BADI l_badi_instance->get_pp_method_limit | ||
| + | EXPORTING | ||
| + | pernr = pernr-pernr | ||
| + | p_date = p_date | ||
| + | wa_t799bpp04 = <fs_t799bpp04> | ||
| + | result_table = it[] | ||
| + | IMPORTING | ||
| + | RESULT = p_amount. | ||
| + | WHEN OTHERS. | ||
| + | ENDCASE. | ||
| + | ENDFORM. "execute_badi</nowiki> | ||
| + | |||
| + | |||
| + | [[Category:Chile]] | ||
| + | |||
| + | ==enhancement spot HRSFEC_CE_MASTER_DATA_REPL para modificar datos asignados en infotipos== | ||
| + | ejemplo HRSFEC_B_CE_CHANGE_IT0009 - Modificar datos asignados del infotipo 0009 | ||
| + | |||
| + | ejemplo HRSFEC_CE_CHANGE_IT0002 | ||
| + | <nowiki> | ||
| + | METHOD IF_HRSFEC_CE_CHANGE_IT0002~CHANGE_INFO_TYPE_DATA. | ||
| + | LOOP AT ct_infty_0002 ASSIGNING FIELD-SYMBOL(<fs_p0002>). | ||
| + | IF <fs_p0002>-GESCH EQ '2'. "Si es Genero Femenino, entonces tratamiento Sra. | ||
| + | <fs_p0002>-ANRED = '2'. | ||
| + | ELSE. "Si es cualquier otro genero, entonces tratamiento Sr. | ||
| + | <fs_p0002>-ANRED = '1'. | ||
| + | ENDIF. | ||
| + | ENDLOOP. | ||
| + | ENDMETHOD.</nowiki> | ||
| + | |||
| + | ==[[SAP HCM ESS#Enhancement_Spot_HRESS_PAYSLIP_-_HRESS_PAYSLIP_BADI_IMPL|Enhancement Spot ESS]]== | ||
| + | [[Category:BADI]] | ||
Latest revision as of 21:57, 18 August 2026
Contents
- 1 BADI HRPAD00INFTY (Tarea actualiz./Actualiz.infotipo)
- 2 BADI HRFORM_HRF02
- 3 Enhancement Spot PT_ABS_REQ
- 4 HRPAY99_CURR_CONV - Implementación Cálculo de nómina: Conversión de moneda
- 5 Ampliación PBAS0001 , exits EXIT_SAPFP50M_001 EXIT_SAPFP50M_002 (trn CMOD/SMOD)
- 6 badi BADI_HR_PENSION_PLAN_CONTR para función P3213 (nómina chilena)
- 7 enhancement spot HRSFEC_CE_MASTER_DATA_REPL para modificar datos asignados en infotipos
- 8 Enhancement Spot ESS
BADI HRPAD00INFTY (Tarea actualiz./Actualiz.infotipo)
ejemplo de IN_UPDATE
- enviar datos a sistema externo al crear, modificar o borrar registros de IT2001 y IT2002
METHOD if_ex_hrpad00infty~in_update.
DATA: lt_p0001 TYPE TABLE OF p0001,
ls_p0001 TYPE p0001.
DATA: lt_oper TYPE TABLE OF psoper,
ls_oper TYPE psoper,
ls_prel TYPE prelp,
ls_prel_old TYPE prelp.
DATA: ls_t503 TYPE t503,
ls_t001p TYPE t001p.
DATA l_f(1).
CHECK ipspar-infty = '2001' OR ipspar-infty = '2002'.
CLEAR: ls_oper.
LOOP AT new_image INTO ls_oper WHERE infty = '2001' or infty = '2002'.
APPEND ls_oper TO lt_oper.
ENDLOOP.
sort lt_oper by opera. "primero borrar 'D' => después insertar 'I'
CLEAR: ls_oper.
LOOP AT old_image INTO ls_oper WHERE infty = '2001' or infty = '2002'.
MOVE-CORRESPONDING ls_oper TO ls_prel_old.
EXIT.
ENDLOOP.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = ipspar-pernr
infty = '0001'
TABLES
infty_tab = lt_p0001
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.
LOOP AT lt_p0001 INTO ls_p0001 WHERE begda <= ipspar-endda AND
endda >= ipspar-begda.
ENDLOOP.
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.
LOOP AT lt_oper INTO ls_oper.
MOVE-CORRESPONDING ls_oper TO ls_prel.
CALL FUNCTION 'Z_HCM_ENVIA_DATA'
EXPORTING
tclas = ipspar-tclas
innnn = ls_prel
i001p = ls_t001p
i_opera = ls_oper-opera
EXCEPTIONS
error_occured = 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.
ENDLOOP.
ENDMETHOD.
ejemplo de AFTER_INPUT
- validar fechas al actualizar IT0041
method IF_EX_HRPAD00INFTY~AFTER_INPUT.
DATA: ls_p0041 TYPE p0041,
lv_date TYPE begda,
lv_date2 TYPE begda,
lv_date3 TYPE begda,
lv_years(4) type n.
DATA: datar_0041 TYPE datar,
date_0041 TYPE datum.
** Check country code
CHECK i001p-molga EQ '39'. "CL Chile
** Check infotype
CHECK new_innnn-infty EQ '0041'.
** No check for Delete operation
CHECK NOT ipsyst-ioper = 'DEL'.
** Convert to structure
CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = new_innnn
IMPORTING
pnnnn = ls_p0041.
DO 12 TIMES VARYING datar_0041 FROM ls_p0041-dar01 NEXT ls_p0041-dar02
VARYING date_0041 FROM ls_p0041-dat01 NEXT ls_p0041-dat02.
IF datar_0041 = '07'. "vacaciones legales
lv_date = date_0041.
ELSEIF datar_0041 = '02'. "antiguedad
lv_date2 = date_0041.
ELSEIF datar_0041 = '04'. "progresivos
lv_date3 = date_0041.
* ELSEIF date_0041 IS INITIAL.
* EXIT.
ENDIF.
ENDDO.
if lv_date <> lv_date2.
MESSAGE e016(RP) WITH 'Fecha Vac. Legales' lv_date 'distinto a Fecha Antigüedad' lv_date2.
endif.
if lv_date3(4) < lv_date2(4).
lv_years = lv_date2(4) - lv_date3(4).
if lv_years > 10.
message e016(RP) WITH 'Fecha Progresivos'
'permite el reconocimiento máximo de 10 años'
'respecto a Fecha Antigüedad' lv_date2.
ELSEIF lv_date3+4(4) NE lv_date2+4(4).
message e016(RP) WITH 'Mes y día de progresivos deben ser'
'igual al de antigüedad legal'.
endif.
endif.
endmethod.
BADI HRFORM_HRF02
Como obtener el PDF de un recibo de sueldo creado vía trn. HRFORMS y formulario definido como Smartform:
- Implementar badi HRFORM_HRF02 método GET_FDATA
method IF_EX_HRFORM_HRF02~GET_FDATA.
CALL FUNCTION 'Z_GET_FDATA'
EXPORTING
i_fdata = fdata
.
endmethod.
- Crear grupo de Función ZHCM_PAYSLIP y crear la función
FUNCTION z_get_fdata. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(I_FDATA) TYPE ANY *"---------------------------------------------------------------------- * ver BADI HRFORM_HRF02_CL method get_data DATA ls_fdata TYPE /1pyxxfo/zpayslip_cl. MOVE i_fdata TO ls_fdata. *gt_data definido como global en el grupo de función *data gt_fdata type TABLE OF /1PYXXFO/ZPAYSLIP_CL. APPEND ls_fdata TO gt_fdata. EXPORT gt_fdata TO MEMORY ID 'ZPAYSLIP_CL'. ENDFUNCTION.
- Copiar programa HINU_HRFORMS_MAIL (ver nota 2004408 - HR-IN: HRForms Payslip via e-mail), al final del proceso(después de los SUBMIT (gv_report) ) obtener el fdata y obtener PDF del smartform, algo equivalente a:
* ver BADI HRFORM_HRF02_CL method get_data
* obtiene datos de la impresión del recibo de sueldo
IMPORT gt_fdata TO gt_fdata FROM MEMORY ID 'ZPAYSLIP_CL'.
loop at gt_fdata into data(wa).
....
....
....
CALL FUNCTION ld_func_module_name
EXPORTING
control_parameters = ls_control_parameters
output_options = ls_output_options
user_settings = space
hrdata = wa
IMPORTING
job_output_info = ls_output
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
...
...
...
endloop.
Enhancement Spot PT_ABS_REQ
Este add-in empresarial (BAdI) se utiliza en el componente PT-RC-AA (Presencias/Absentismos). Se utiliza para las aplicaciones Web siguientes:
- solicitud de absentismo: Control del procesamiento de solicitudes de absentismo. Encontrará más información en la guía de implementación (IMG) bajo Gestión de personal -> Employee Self-Service.
- calendario de equipo: Configuración del calendario de equipo en el Manager Self-Service (MSS) y en el Employee Self-Service (ESS)
- cuentas de tiempos (ESS): Determinación de las cuentas de tiempos
- resumen de presencias (MSS): Ajustar leyenda
ejemplo:
METHOD if_ex_pt_abs_req~simulate_via_blop.
DATA message_handler TYPE REF TO if_pt_req_message_handler.
IF 1 = 2.
CALL METHOD cl_pt_req_message_handler=>instance_get
RECEIVING
result = message_handler.
CALL METHOD message_handler->add_message
EXPORTING
im_type = 'E' "Type of Message
im_cl = '0K' "Message class that you created
im_number = '000' "Message no
im_par1 = 'SIMULATE_VIA_BLOP'
im_par2 = 'IF_EX_PT_ABS_REQ~SIMULATE_VIA_BLOP' "Method name as in your impl.
im_par3 = 'BLOP'
im_context = ''
im_subcontext = ''
im_classname = 'CL_PT_ARQ_BLOP_ADAPTER'
im_methodname = 'MESSAGE'.
ENDIF.
ENDMETHOD.
HRPAY99_CURR_CONV - Implementación Cálculo de nómina: Conversión de moneda
Ejecutada desde FM HR_CONVERT_TO_LOCAL_CURRENCY
METHOD if_ex_hrpay99_curr_conv~set_conv_date_type.
* Some of the input data can be derived (compare with function
* PCLO_COMPUTE_REPAYMENT_PLAN):
*
* EMPLOYEENUMBER -> PT_P0001
* EMPLOYEENUMBER, PT_P0001 -> FLT_VAL (= MOLGA), lt_abkrs_from_p0001
* some date, lt_abkrs_from_p0001 -> PAYROLL_AREA, PERIOD_MODIFIER
* some date, PAYROLL_AREA, lt_abkrs_from_p0001
* -> PAYROLL_PERIOD, PERIOD_BEGIN, PERIOD_END
*
* Notice, that in case of splitted periods (WPBP split, partial
* periods), the estimated PEIROD_BEGIN and PERIOD_END could differ
* from the ones given as parameter (APER-BEGDA, APER-ENDDA).
*
* Think on retrocalculation differences.
*
* Be carfull when using an other date than proposed_convdate,
* because this may be set due to legal requirements; especially
* when proposed_convdate differs from period begin.
pfx_type_of_rate = proposed_type_of_rate.
pfx_conversion_date = proposed_convdate.
IF sy-cprog <> 'HCLCALC0'. "Programa de nómina Chile
RETURN.
ENDIF.
DATA ls_t511p TYPE t511p.
DATA: lw_var(40) TYPE c.
FIELD-SYMBOLS <fs> TYPE any.
lw_var = '(HCLCALC0)T511P'.
ASSIGN (lw_var) TO <fs>.
IF sy-subrc = 0 AND <fs> IS ASSIGNED.
MOVE <fs> TO ls_t511p.
ELSE.
RETURN.
ENDIF.
IF ps_currconv_data-foreign_currency = 'UF' AND
ps_currconv_data-countryhr = '39' AND
ls_t511p-konst = 'ZBSC1' AND
proposed_type_of_rate = 'M'.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = proposed_convdate
IMPORTING
last_day_of_month = pfx_conversion_date
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
ENDIF.
ENDMETHOD.
Ampliación PBAS0001 , exits EXIT_SAPFP50M_001 EXIT_SAPFP50M_002 (trn CMOD/SMOD)
ejemplo EXIT_SAPFP50M_002
data ls_p0021 type p0021.
data l_result_date type d.
case innnn-infty.
when '0021'.
check ipsyst-ioper = modify or
ipsyst-ioper = insert or
ipsyst-ioper = copy.
clear: ls_p0021.
call method cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
exporting
prelp = innnn
importing
pnnnn = ls_p0021.
if ls_p0021-famsa = '2'. "hijo.
*sumar 18 años a fecha de nacimiento y limitar
call function 'CALCULATE_DATE'
exporting
days = '0'
months = '216' "18 años
start_date = ls_p0021-fgbdt
importing
result_date = l_result_date.
l_result_date+4 = '1231'.
if l_result_date >= innnn-begda.
innnn-endda = l_result_date.
endif.
endif.
endcase.
badi BADI_HR_PENSION_PLAN_CONTR para función P3213 (nómina chilena)
Métodos:
- GET_PP_CONTRIBUTION - Pension Contribution Calculation
- GET_PP_METHOD_LIMIT - Pension Calculation Method Limit
- GET_PP_ELIGIBILITY - Employee Eligibility for Pension
include RPCMAS19_FUP3213, form execute_badi
CASE p_calc_type .
WHEN 0. " Eligibility
CALL BADI l_badi_instance->get_pp_eligibility
EXPORTING
pernr = pernr-pernr
p_date = p_date
IMPORTING
eligible = p_amount.
WHEN 1. " Pension plan contribution
CHECK <fs_t799bpp04> IS ASSIGNED.
CLEAR p_amount.
CALL BADI l_badi_instance->get_pp_contribution
EXPORTING
pernr = pernr-pernr
p_date = p_date
wa_t799bpp04 = <fs_t799bpp04>
result_table = it[]
IMPORTING
RESULT = p_amount.
WHEN 2. " Contribution limit
CHECK <fs_t799bpp04> IS ASSIGNED.
CLEAR p_amount.
CALL BADI l_badi_instance->get_pp_method_limit
EXPORTING
pernr = pernr-pernr
p_date = p_date
wa_t799bpp04 = <fs_t799bpp04>
result_table = it[]
IMPORTING
RESULT = p_amount.
WHEN OTHERS.
ENDCASE.
ENDFORM. "execute_badi
enhancement spot HRSFEC_CE_MASTER_DATA_REPL para modificar datos asignados en infotipos
ejemplo HRSFEC_B_CE_CHANGE_IT0009 - Modificar datos asignados del infotipo 0009
ejemplo HRSFEC_CE_CHANGE_IT0002
METHOD IF_HRSFEC_CE_CHANGE_IT0002~CHANGE_INFO_TYPE_DATA.
LOOP AT ct_infty_0002 ASSIGNING FIELD-SYMBOL(<fs_p0002>).
IF <fs_p0002>-GESCH EQ '2'. "Si es Genero Femenino, entonces tratamiento Sra.
<fs_p0002>-ANRED = '2'.
ELSE. "Si es cualquier otro genero, entonces tratamiento Sr.
<fs_p0002>-ANRED = '1'.
ENDIF.
ENDLOOP.
ENDMETHOD.