Difference between revisions of "SAP HCM TIME"

From SapWiki
 
(9 intermediate revisions by the same user not shown)
Line 2: Line 2:
  
 
=== Leer Plan de Horario de Trabajo ===
 
=== Leer Plan de Horario de Trabajo ===
Ejemplo: Reporte RPTPSH10
+
Ejemplo: Reporte RPTPSH10
 +
<nowiki>DATA: psp LIKE ptpsp  OCCURS 0 WITH HEADER LINE.
  
  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.
  
  CLEAR:psp.
+
call function 'HR_WORK_SCHEDULE_TIMES'
  REFRESH:psp[].
+
       exporting
  CALL FUNCTION 'HR_PERSONAL_WORK_SCHEDULE'
+
          pernr                  = pernr-pernr
       EXPORTING
+
          begda                  = pn-begda
        pernr                  = pernr-pernr
+
          endda                  = pn-endda
        begda                  = pn-begda
+
      tables
        endda                  = pn-endda
+
          i0001                  = p0001
         switch_activ           = '0'
+
          i0007                  = p0007
         i0001_i0007_error       = '0'
+
          i2003                  = p2003
        read_cluster            = 'X'
+
*         I0049                  =
      TABLES
+
           perws                  = psp
        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.</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
 
     EXCEPTIONS
      error_occured          = 1
+
      no_capacity_available = 1
      abort_occured          = 2
+
      no_integration_activ  = 2
       OTHERS                 = 3.
+
      timeinfo_error       = 3
 +
      OTHERS               = 4.
 +
  IF sy-subrc <> 0.
 +
* Implement suitable error handling here
 +
  ELSE.
 +
  ENDIF.
  
   call function 'HR_WORK_SCHEDULE_TIMES'
+
   READ TABLE lt_persavail INTO ls_persavail WITH KEY datum = i_begda.
      exporting
+
  IF sy-subrc EQ 0.
            pernr                  = pernr-pernr
+
     IF ls_persavail-tprog EQ 'LIBR' OR ls_persavail-tagty EQ '1'.
            begda                  = pn-begda
+
       e_feriado = 'X'.
            endda                  = pn-endda
+
    ENDIF.
      tables
+
  ENDIF.
          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.
 
  
 +
ENDFUNCTION.
 +
</nowiki>
 
=== Leer Cluster de Tiempos ===
 
=== Leer Cluster de Tiempos ===
 
     CALL FUNCTION 'HR_TIME_RESULTS_GET'
 
     CALL FUNCTION 'HR_TIME_RESULTS_GET'
Line 75: Line 116:
 
       OTHERS                      = 6
 
       OTHERS                      = 6
 
               .
 
               .
 +
====Leer cluster B2====
 +
=====ejemplo 1=====
 +
<nowiki>
 +
  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.
 +
</nowiki>
 +
=====ejemplo 2=====
 +
<nowiki>
 +
*-----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.
 +
</nowiki>
 +
 +
====Ejemplo: leer saldo de vacaciones====
 +
<nowiki>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</nowiki>
 +
 +
ejemplo 2
 +
<nowiki>
 +
* 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.
 +
</nowiki>
  
 
====Leer mensajes====
 
====Leer mensajes====
Line 131: Line 306:
 
   ENDLOOP.
 
   ENDLOOP.
 
   columns_entries-hrs1 = l_hora.
 
   columns_entries-hrs1 = l_hora.
 +
 +
==[[SAP_HCM_TRN#Time_Management|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

Latest revision as of 22:43, 29 July 2023

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

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