Difference between revisions of "SAP HCM TIME"
From SapWiki
| Line 54: | Line 54: | ||
timeinfo_error = 3 | timeinfo_error = 3 | ||
OTHERS = 4.</nowiki> | OTHERS = 4.</nowiki> | ||
| + | |||
| + | <nowiki> | ||
| + | FORM get_hini_hfin USING iv_pernr TYPE pernr_d | ||
| + | iv_begda TYPE begda | ||
| + | iv_am TYPE abap_bool | ||
| + | CHANGING ev_beguz | ||
| + | ev_enduz. | ||
| + | DATA lt_pers_avail TYPE STANDARD TABLE OF pdpsp. | ||
| + | DATA: lv_hora_inicio TYPE t, " Horario te rico inicio (SOBEG) | ||
| + | lv_horas_total TYPE p DECIMALS 2, " Horas trabajo te r. (SOLLZ) | ||
| + | lv_mitad_segs TYPE i, " Segundos a sumar | ||
| + | lv_hora_corte TYPE t. " El resultado final (El medio d a) | ||
| + | |||
| + | CALL FUNCTION 'HR_READ_TIMEDATA_PSP' | ||
| + | EXPORTING | ||
| + | begin_date = iv_begda | ||
| + | end_date = iv_begda | ||
| + | person_id = iv_pernr | ||
| + | * PERSON_TYP = 'P' | ||
| + | * RP_BUILD_PSP_ERROR = ' ' | ||
| + | TABLES | ||
| + | pers_avail = lt_pers_avail | ||
| + | EXCEPTIONS | ||
| + | no_capacity_available = 1 | ||
| + | no_integration_activ = 2 | ||
| + | timeinfo_error = 3 | ||
| + | OTHERS = 4. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | READ TABLE lt_pers_avail INTO DATA(ls_pers_avail) INDEX 1. | ||
| + | IF sy-subrc <> 0. | ||
| + | * Implement suitable error handling here | ||
| + | RETURN. | ||
| + | ENDIF. | ||
| + | |||
| + | lv_hora_inicio = ls_pers_avail-begzt. | ||
| + | lv_horas_total = ls_pers_avail-dauer. | ||
| + | |||
| + | " 2. Calculamos la mitad en segundos | ||
| + | " Dividimos las horas a la mitad (4.415) y multiplicamos por 3600 (segundos en una hora) | ||
| + | " 4.415 * 3600 = 15894 segundos. | ||
| + | lv_mitad_segs = ( lv_horas_total / 2 ) * 3600. | ||
| + | |||
| + | |||
| + | " 3. Sumamos los segundos a la hora de inicio | ||
| + | " En ABAP, sumar un n mero entero a un tipo 'T' autom ticamente suma segundos. | ||
| + | lv_hora_corte = lv_hora_inicio + lv_mitad_segs. | ||
| + | |||
| + | IF iv_am = abap_true. | ||
| + | ev_beguz = ls_pers_avail-begzt. | ||
| + | ev_enduz = lv_hora_corte. | ||
| + | ELSE. | ||
| + | ev_beguz = lv_hora_corte. | ||
| + | ev_enduz = ls_pers_avail-endzt. | ||
| + | ENDIF. | ||
| + | |||
| + | ENDFORM.</nowiki> | ||
===Leer feriado=== | ===Leer feriado=== | ||
Latest revision as of 22:58, 14 April 2026
Contents
Codigos
Leer Plan de Horario de Trabajo
Ejemplo: Reporte RPTPSH10
DATA: psp LIKE ptpsp OCCURS 0 WITH HEADER LINE.
CLEAR:psp.
REFRESH:psp[].
CALL FUNCTION 'HR_PERSONAL_WORK_SCHEDULE'
EXPORTING
pernr = pernr-pernr
begda = pn-begda
endda = pn-endda
switch_activ = '0'
i0001_i0007_error = '0'
read_cluster = 'X'
TABLES
perws = psp
EXCEPTIONS
error_occured = 1
abort_occured = 2
OTHERS = 3.
call function 'HR_WORK_SCHEDULE_TIMES'
exporting
pernr = pernr-pernr
begda = pn-begda
endda = pn-endda
tables
i0001 = p0001
i0007 = p0007
i2003 = p2003
* I0049 =
perws = psp
daygen = daygen
dayint = dayint
exceptions
error_occured = 1
perws_error = 2
others = 3
.
* horario teórico
CALL FUNCTION 'HR_READ_TIMEDATA_PSP'
EXPORTING
begin_date = p_begda
end_date = p_endda
person_id = p_pernr
TABLES
pers_avail = lt_psp
EXCEPTIONS
no_capacity_available = 1
no_integration_activ = 2
timeinfo_error = 3
OTHERS = 4.
FORM get_hini_hfin USING iv_pernr TYPE pernr_d
iv_begda TYPE begda
iv_am TYPE abap_bool
CHANGING ev_beguz
ev_enduz.
DATA lt_pers_avail TYPE STANDARD TABLE OF pdpsp.
DATA: lv_hora_inicio TYPE t, " Horario te rico inicio (SOBEG)
lv_horas_total TYPE p DECIMALS 2, " Horas trabajo te r. (SOLLZ)
lv_mitad_segs TYPE i, " Segundos a sumar
lv_hora_corte TYPE t. " El resultado final (El medio d a)
CALL FUNCTION 'HR_READ_TIMEDATA_PSP'
EXPORTING
begin_date = iv_begda
end_date = iv_begda
person_id = iv_pernr
* PERSON_TYP = 'P'
* RP_BUILD_PSP_ERROR = ' '
TABLES
pers_avail = lt_pers_avail
EXCEPTIONS
no_capacity_available = 1
no_integration_activ = 2
timeinfo_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
RETURN.
ENDIF.
READ TABLE lt_pers_avail INTO DATA(ls_pers_avail) INDEX 1.
IF sy-subrc <> 0.
* Implement suitable error handling here
RETURN.
ENDIF.
lv_hora_inicio = ls_pers_avail-begzt.
lv_horas_total = ls_pers_avail-dauer.
" 2. Calculamos la mitad en segundos
" Dividimos las horas a la mitad (4.415) y multiplicamos por 3600 (segundos en una hora)
" 4.415 * 3600 = 15894 segundos.
lv_mitad_segs = ( lv_horas_total / 2 ) * 3600.
" 3. Sumamos los segundos a la hora de inicio
" En ABAP, sumar un n mero entero a un tipo 'T' autom ticamente suma segundos.
lv_hora_corte = lv_hora_inicio + lv_mitad_segs.
IF iv_am = abap_true.
ev_beguz = ls_pers_avail-begzt.
ev_enduz = lv_hora_corte.
ELSE.
ev_beguz = lv_hora_corte.
ev_enduz = ls_pers_avail-endzt.
ENDIF.
ENDFORM.
Leer feriado
FUNCTION Z_HCM_FERIADO.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_PERNR) TYPE PERNR_D
*" REFERENCE(I_BEGDA) TYPE BEGDA
*" EXPORTING
*" REFERENCE(E_FERIADO) TYPE FLAG
*"----------------------------------------------------------------------
DATA: lt_persavail TYPE STANDARD TABLE OF pdpsp,
ls_persavail TYPE pdpsp.
CALL FUNCTION 'HR_READ_TIMEDATA_PSP'
EXPORTING
begin_date = i_begda
end_date = i_begda
person_id = i_pernr
* PERSON_TYP = 'P'
* RP_BUILD_PSP_ERROR = ' '
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 ls_persavail WITH KEY datum = i_begda.
IF sy-subrc EQ 0.
IF ls_persavail-tprog EQ 'LIBR' OR ls_persavail-tagty EQ '1'.
e_feriado = 'X'.
ENDIF.
ENDIF.
ENDFUNCTION.
Leer Cluster de Tiempos
CALL FUNCTION 'HR_TIME_RESULTS_GET'
EXPORTING
get_pernr = l_pernr
get_pabrj = l_pabrj "año
get_pabrp = l_pabrp "periodo
TABLES
get_zes = gt_zes
get_pt = gt_pt
get_vert = gt_vert
get_ab = gt_ab
EXCEPTIONS
no_period_specified = 1
wrong_cluster_version = 2
no_read_authority = 3
cluster_archived = 4
technical_error = 5
OTHERS = 6
.
Leer cluster B2
ejemplo 1
DATA: gt_cluster TYPE table of hrf_tim_b2.
CALL FUNCTION 'HR_FORMS_TIM_GET_B2_RESULTS'
EXPORTING
pernr = ls_pernr-pernr
begda = gv_begda
endda = gv_endda
IMPORTING
tim_b2 = gt_cluster
EXCEPTIONS
wrong_cluster_version = 1
no_read_authority = 2
cluster_archived = 3
technical_error = 4
OTHERS = 5.
LOOP AT gt_cluster-ft_zl INTO wa_zl
* do something
endloop.
ejemplo 2
*-----Import der Tabellen ZES, SALDO und ZL aus Cluster B2
CALL FUNCTION 'HR_TIME_RESULTS_IN_INTERVAL'
EXPORTING
int_pernr = pernr-pernr
int_begda = begda
int_endda = endda
TABLES
int_time_results = time_results
EXCEPTIONS
wrong_cluster_version = 1
no_read_authority = 2
cluster_archived = 3
technical_error = 4
OTHERS = 5.
clear: zl[], saldo[], zes[].
clear: zl, saldo, zes.
loop at time_results into time_results_wa.
append lines of time_results_wa-zes to zes.
append lines of time_results_wa-saldo to saldo.
append lines of time_results_wa-zl to zl.
endloop.
Ejemplo: leer saldo de vacaciones
FORM get_saldo_vaca USING p_pernr TYPE p0000-pernr
CHANGING p_saldo TYPE pc2bf-anzhl
p_begda type p2001-begda.
DATA: lt_zes TYPE STANDARD TABLE OF pc2b6 WITH HEADER LINE,
lt_ab TYPE STANDARD TABLE OF pc20i WITH HEADER LINE,
lt_zl TYPE STANDARD TABLE OF pc2bf WITH HEADER LINE.
DATA: ls_b2_key TYPE pc2b0,
ls_keytable TYPE ptm_clst_perview.
DATA lt_pcl2 TYPE TABLE OF pcl2.
DATA ls_pcl2 LIKE LINE OF lt_pcl2.
DATA l_srtfdlow TYPE pcl2-srtfd.
DATA l_srtfdhigh TYPE pcl2-srtfd.
CONCATENATE p_pernr '18000101' INTO l_srtfdlow.
CONCATENATE p_pernr '99991231' INTO l_srtfdhigh.
SELECT * FROM pcl2 INTO TABLE lt_pcl2 WHERE relid EQ 'B2'
AND srtfd BETWEEN l_srtfdlow AND l_srtfdhigh
AND srtf2 EQ '00'
ORDER BY PRIMARY KEY. "#EC PORTABLE
IF sy-subrc = 0.
* leer ultimo
LOOP AT lt_pcl2 INTO ls_pcl2.
ENDLOOP.
ls_b2_key = ls_pcl2-srtfd.
MOVE-CORRESPONDING ls_pcl2 TO ls_keytable.
MOVE-CORRESPONDING ls_b2_key TO ls_keytable.
CALL FUNCTION 'HR_TIME_RESULTS_GET'
EXPORTING
get_pernr = p_pernr
get_pabrj = ls_keytable-pabrj
get_pabrp = ls_keytable-pabrp
TABLES
get_zes = lt_zes
get_ab = lt_ab
get_zl = lt_zl.
LOOP AT lt_zl WHERE lgart = '5T12'.
ADD lt_zl-anzhl TO p_saldo.
ENDLOOP.
p_begda = ls_pcl2-aedtm.
ENDIF.
ENDFORM. "get_saldo_vaca
ejemplo 2
* buscar saldo de vacaciones
CALL FUNCTION 'HR_TIME_RESULTS_IN_INTERVAL'
EXPORTING
int_pernr = ls_p2001-pernr
int_begda = l_begda
int_endda = l_endda
TABLES
int_time_results = time_results
EXCEPTIONS
wrong_cluster_version = 1
no_read_authority = 2
cluster_archived = 3
technical_error = 4
OTHERS = 5.
loop at time_results into time_results_wa.
append lines of time_results_wa-zl to zl.
endloop.
* leer ultimo saldo, Dìas devengados de vacaci, ver tran. PT66
sort zl by datum.
loop at zl into ls_zl where lgart = '5T12'.
ENDLOOP.
if sy-subrc = 0.
l_saldo = ls_zl-anzhl.
endif.
if l_saldo < 0.
l_saldo = 0.
endif.
Leer mensajes
CALL FUNCTION 'HR_FORMS_TIM_GET_B2_RESULTS'
EXPORTING
pernr = l_pernr
begda = l_begda
endda = l_endda
IMPORTING
tim_b2 = ls_b2
EXCEPTIONS
wrong_cluster_version = 1
no_read_authority = 2
cluster_archived = 3
technical_error = 4
OTHERS = 5.
LOOP AT ls_b2-ft_fehler INTO ls_fehler .
* do whatever
select single * from t555f WHERE error = ls_fehler-error
and errty = ls_fehler-errty.
.
.
.
ENDLOOP.
Ampliaciones (SMOD/CMOD)
PTIMTMW : Campos específicos del cliente en table controls del TMW (transaccion PTMW)
ejemplo EXIT_SAPLHRTIM00DVEXIT_001 asignar nombre a columna HRS1 COLUMNS_TITLES-HRS1_TITLE = 'Mi columna'.
ejemplo EXIT_SAPLHRTIM00DVEXIT_002 calcular valor para columna HRS1
CALL FUNCTION 'HR_TIME_RESULTS_GET'
EXPORTING
get_pernr = im_pernr
get_pabrj = im_date+0(4)
get_pabrp = im_date+4(2)
TABLES
get_pt = gt_pt
EXCEPTIONS
no_period_specified = 1
wrong_cluster_version = 2
no_read_authority = 3
cluster_archived = 4
technical_error = 5
OTHERS = 6
.
LOOP AT gt_pt WHERE ldate EQ im_date. * do whatever ... ... ENDLOOP. columns_entries-hrs1 = l_hora.
Transacciones gestión de tiempos
Definir tipos de absentismo/presencia
You configure absence types using the following menu path: Time Management > Time Data Recording and Administration > Absences > Absence Catalog > Define Absence Types. You can also configure absence types using configuration Table/view: V_T554S