Tem algumas formas de acessar o cluster, uma delas é pela classe de folha de pagamento abaixo:
data(lo_payroll) = new cl_hr_br_read_payroll( iv_pernr = pernr-pernr ).
lo_payroll->get_rgdir(
exporting
iv_begda = pn-begda
iv_endda = pn-endda
iv_srtza = 'A'
importing
et_rgdir = data(lt_rgdir)
).
try.
data(ls_rgdir) = lt_rgdir[ 1 ].
catch cx_sy_itab_line_not_found.
endtry.
lo_payroll->get_pay_result(
exporting
is_rgdir = ls_rgdir
importing
es_paybr_result = data(ls_pay_result)
).
* Aqui você já tem basicamente o cluster preenchido e basta acessar a tabela que quiser
read table ls_pay_result-inter-rt into data(lt_rt) with key lgart = '9SAL'.
st_saida-betrg = abs( lt_rt-betrg ).
Outra forma é a função abaixo:
CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = 'BR'
employeenumber = lv_employeenumber
sequencenumber = rgdir-seqnr
CHANGING
payroll_result = wa_payresult
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
error_reading_archive = 8
error_reading_relid = 9
OTHERS = 10.
CHECK sy-subrc EQ 0.
LOOP AT wa_payresult-inter-rt ASSIGNING FIELD-SYMBOL(<rt>).
" aqui dentro você também já tem acesso à tabela RT
ENDLOOP.
A que mais utilizo é esta pois já pega retro cálculo também:
data: lt_lgart type table of sel_lgart,
lt_retro type table of hr99lret_s_month_diff,
lt_offcycles type table of sel_ocrsn,
lv_month type month,
lv_year type gjahr.
lv_month = '12'.
lv_year = '2018'.
lt_offcycles = value #( ( sign = 'I' option = 'EQ' low = '1313' ) ).
call function 'HR_BR_GET_RETRO_MONTH_DIFF'
exporting
pernr = pernr-pernr
sel_date = 'P'
month = lv_month
year = lv_year
tables
lgart = lt_lgart
retro_month_diff = lt_retro
offcycles = lt_offcycles.
"Double check por conta da função. Registros em branco (Folha) não
"são filtrados corretamente (I EQ Space), então caso venha a trazer
"mais valores do que os filtrados, os mesmos serão deletados
delete lt_retro where ocrsn not in lt_offcycles.