SAP HCM ABAP CLUSTER

From SapWiki

Lectura de datos de Préstamo

*----------------------------------------------------------------------*
*       FORM .......
*----------------------------------------------------------------------*
*       copiado de include MP004541
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_loan_results tables   pt_savp structure gt_savp
                      using    pf_pernr
                               pf_dlart
                               pf_objps
                               pf_dbtcu
                      changing pfx_opelo
                               pfx_paylo
                               pfx_abrdt
                               p_cuota
                               pfx_subrc.

  data: ltx_rgdir             like  pc261 occurs 0 with header line,
        ltx_rgdir_o           like  pc261 occurs 0 with header line,
        lsx_rgdir             like  ltx_rgdir,
        lsx_result            type  pay99_result,
        lsx_v0                like line of lsx_result-inter-v0,
        lsx_rt                like line of lsx_result-inter-rt,
        lfx_relid             like  pcl2-relid,
        lfx_molga             like  t500l-molga,
        lsx_t500l             like  t500l,
        lfx_amount            like  q0045-darbt,
        lfx_line              like  sy-tabix,
        lfx_fday              type  d,
        lfx_lday              type  d,
        lfx_opecu             like  q0045-opecu,
        ls_paper              type  pc2paper,
        lf_payment_value_date type datum,
        ls_loid_33            type  pclo_id.                      "Note 834827
  data wa_prest_ipc type zhr_prest_ipc.
*##--BEGIN--##
  clear: pfx_opelo, pfx_paylo, pfx_abrdt, pfx_subrc.

  call function 'CU_READ_RGDIR_NEW'
    exporting
      persnr               = pf_pernr
      check_read_authority = space
    importing
      molga                = lfx_molga
    tables
      in_rgdir             = ltx_rgdir
    exceptions
      others               = 1.
  if sy-subrc <> 0.
    move sy-subrc to pfx_subrc.
    return.
  endif.

  move sy-subrc to pfx_subrc.

* Limitar directorio de cluster al período seleccionado
  call function 'CD_SELECT_DATE_RANGE'
    exporting
      fpper_begda = g_begda
      fpper_endda = g_endda
    tables
      in_rgdir    = ltx_rgdir
      out_rgdir   = ltx_rgdir_o.

  "take only regular and actual periods
  loop at ltx_rgdir_o transporting no fields
                    where void = abap_true
                       or payty <> space
                       or srtza <> 'A'.
    delete ltx_rgdir_o index sy-tabix.
  endloop.

  ltx_rgdir[] = ltx_rgdir_o[].
  sort ltx_rgdir descending by seqnr.

  data(l_lines) = lines( ltx_rgdir ).
  if l_lines = 0.
    pfx_subrc = 9.
    return.
  endif.

*   get relid
  select single * from   t500l
                  into   lsx_t500l
                  where  molga  = lfx_molga.
  move lsx_t500l-relid to lfx_relid.

  data(lflag_loan_exists) = abap_false.
  data lv_subrc type sy-subrc.

  loop at ltx_rgdir into lsx_rgdir
      where fpend >= p0045-begda.   "for performance

    if lflag_loan_exists = abap_true.
      exit. "stop loop at rgdir, because period was found
    endif.

    call function 'PYXX_READ_PAYROLL_RESULT'
      exporting
        clusterid               = lfx_relid
        employeenumber          = pf_pernr
        sequencenumber          = lsx_rgdir-seqnr
        read_only_international = 'X'
        check_read_authority    = ' '
      changing
        payroll_result          = lsx_result
      exceptions
        others                  = 1.
    if sy-subrc <> 0.
      move sy-subrc to pfx_subrc.
    else.
      move sy-subrc to pfx_subrc.
*     get loan result .....
      loop at lsx_result-inter-v0 into lsx_v0 where v0typ = 'L'.
        if pf_dlart = lsx_v0-vinfo+0(4) and
           pf_objps = lsx_v0-vinfo+4(2).

          lflag_loan_exists = abap_true.
          pfx_abrdt = lsx_rgdir-fpend.

          lv_subrc = 1.
          loop at lsx_result-inter-rt into lsx_rt
                                      where v0typ = 'L'
                                      and v0znr = lsx_v0-v0znr
                                      and lgart = '/LLB'.
            if    lsx_rt-betrg = 0.                   "this is a potential period
              "here the loan is already paid back completely
              lv_subrc = 1. "this is equal to that no /LLB exists
              exit. "the loop and check previous period
            else.
* verificar si ya se actualizo por IPC
              select single * into wa_prest_ipc from zhr_prest_ipc where pernr = pf_pernr and
                                                           seqnr = lsx_rgdir-seqnr.
              if sy-subrc <> 0.
                move: lsx_result-inter-versc-waers to lfx_opecu,
                      lsx_rt-betrg                 to pfx_opelo.
                lv_subrc = 0.
              else.
                lv_subrc = 1.
                pfx_opelo = 0.
                exit.
              endif.
            endif.
          endloop.

          if lv_subrc = 0.
            loop at lsx_result-inter-rt into lsx_rt
                                        where v0typ = 'L'
                                        and v0znr = lsx_v0-v0znr
                                        and lgart = '/LRP'.
              if    lsx_rt-betrg = 0.                   "this is a potential period
                "here the loan is already paid back completely
                lv_subrc = 1. "this is equal to that no /LLB exists
                exit. "the loop and check previous period
              else.
                move lsx_rt-betrg                 to p_cuota.
              endif.
            endloop.

          endif.

        else.                 "this loan is not yet processed in payroll
          move '7' to pfx_subrc.
        endif.
      endloop.

    endif.
  endloop.
endform.                               " GET_LOAN_RESULTS

Modificar Cluster

  • Ejemplo de lectura de cluster con modificacion a tabla BT
 CLEAR   rgdir.
 REFRESH rgdir.

 CALL FUNCTION 'CU_READ_RGDIR_NEW'
   EXPORTING
     persnr                = i_pernr
   TABLES
     in_rgdir              = rgdir
   EXCEPTIONS
     no_record_found       = 1
     import_mismatch_error = 2
     no_read_authority     = 3
     OTHERS                = 4.
  check sy-subrc = 0.

 DELETE rgdir WHERE fpper NE i_fpper.
 DESCRIBE TABLE rgdir LINES sy-tfill.
 check sy-tfill > 0.

  LOOP AT rgdir.
   ld_pernr = i_pernr.
   ld_seqnr = rgdir-seqnr.

   CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
     EXPORTING
       clusterid                    = 'CL'
       employeenumber               = ld_pernr
       sequencenumber               = ld_seqnr
       read_only_buffer             = ' '
     CHANGING
       payroll_result               = ls_result
     EXCEPTIONS
       illegal_isocode_or_clusterid = 1
       error_generating_import      = 2
       import_mismatch_error        = 3
       subpool_dir_full             = 4
       no_read_authority            = 5
       no_record_found              = 6
       versions_do_not_match        = 7
       OTHERS                       = 8.

* procesar bt
   loop at  ls_result-inter-bt into gs_bt.
     add i_monto to gs_bt-betrg.
     modify ls_result-inter-bt from gs_bt.
   ENDLOOP.
   check sy-subrc = 0.   

   CALL FUNCTION 'PYXX_WRITE_PAYROLL_RESULT'
     EXPORTING
       clusterid                    = 'CL'
       employeenumber               = ld_pernr
       sequencenumber               = ld_seqnr
       payroll_result               = ls_result
     EXCEPTIONS
       illegal_isocode_or_clusterid = 1
       error_generating_export      = 2
       export_error                 = 3
       subpool_dir_full             = 4
       no_update_authority          = 5
       incomplete_result_imported   = 6
       OTHERS                       = 7.
   IF sy-subrc <> 0.
* error
     EXIT.
   ENDIF.

   CALL FUNCTION 'HR_FLUSH_BUFFER_UPDATE_PCLX'
     EXPORTING
       test                = ' '
     EXCEPTIONS
       insert_error        = 1
       no_update_authority = 2
       OTHERS              = 3.
   IF sy-subrc <> 0.
* error
     EXIT.
   ENDIF.