Difference between revisions of "SAP HCM TIME"
From SapWiki
| Line 55: | Line 55: | ||
OTHERS = 4.</nowiki> | OTHERS = 4.</nowiki> | ||
| + | ===Leer feriado=== | ||
| + | <nowiki> | ||
| + | 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. | ||
| + | </nowiki> | ||
=== Leer Cluster de Tiempos === | === Leer Cluster de Tiempos === | ||
CALL FUNCTION 'HR_TIME_RESULTS_GET' | CALL FUNCTION 'HR_TIME_RESULTS_GET' | ||
Revision as of 00:42, 12 June 2021
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.
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
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: 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
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.