Ein kleines Programm um die Tabelle ZT – Kurzarbeitergeld Zeitdaten – aus dem Abrechnungsergebnis zu lesen. Der Report erstellt eine ALV-Ausgabe mit den Tagen und Stunden, an denen Kurzarbeit gemacht wurde, pro Tag und Mitarbeiter.
Der Report muss in den Eigenschaften mit der logischen Datenbank PNP versehen werden.
*&---------------------------------------------------------------------*
*& Report zxxxxy_kug_stunden
*&
*&---------------------------------------------------------------------*
*& Dies ist ein Report von hr-manager.de
*& Fragen hierzu bitte an reports@hr-manager.de
*&---------------------------------------------------------------------*
report zxxxxy_kug_stunden.
tables: pernr.
infotypes: 0002, 0008, 0014, 0015. " Berechtigung
types: begin of lty_rt.
types: pernr type pernr-pernr.
types: vorna type p0002-vorna.
types: nachn type p0002-nachn.
types: period type selperio.
types: begda type begda.
types: tgart type tgart_d.
types: anzkt type p decimals 2. "Kalendertage
types: anzat type p decimals 2. "Arbeitstage
types: anzas type p decimals 2. "Arbeitsstunden
types: end of lty_rt.
data: lt_result type table of lty_rt.
data: wa_result type lty_rt.
data: lv_begp like qppnp-pabrp, "payroll-period PP-YYYY
lv_begj like qppnp-pabrj. "from selection-screen-input
data: lv_endp like qppnp-pabrp, "payroll-period PP-YYYY
lv_endj like qppnp-pabrj. "from selection-screen-input
data: lv_ausgabe(6) type c.
data: lt_py_result type table of payde_result.
data: wa_py_result type payde_result.
data: lt_zt type hrpayde_zt.
data: wa_zt type pc20m.
data: gr_functions type ref to cl_salv_functions. "symbolleiste
data: gr_table type ref to cl_salv_table. "klasse
data: gr_display type ref to cl_salv_display_settings. "displayeinstellungen
data: gr_columns type ref to cl_salv_columns_table."spaltenmanipulation
data: gr_column type ref to cl_salv_column_table.
data: color type lvc_s_colo. "farbe
data: gr_sorts type ref to cl_salv_sorts. "sortierung
data: gr_agg type ref to cl_salv_aggregations. "aggregation
data: gr_filter type ref to cl_salv_filters. "filter
data: gr_layout type ref to cl_salv_layout. "layout
data: key type salv_s_layout_key.
start-of-selection.
get pernr.
lv_ausgabe = sy-datum(6). "immer aktuellstes Ergebnis
lv_begj = pn-begda(4).
lv_begp = pn-begda+4(2).
lv_endj = pn-endda(4).
lv_endp = pn-endda+4(2).
refresh lt_py_result.
call function 'HR_GET_PAYROLL_RESULTS'
exporting
pernr = pernr-pernr
permo = '01'
pabrj = lv_begj
pabrp = lv_begp
pabrj_end = lv_endj
pabrp_end = lv_endp
* INPER_LST = lv_ausgabe
inper_act = lv_ausgabe
actual = 'X'
* WAERS =
* ARCH_TOO =
tables
result_tab = lt_py_result
exceptions
no_results = 1
error_in_currency_conversion = 2
t500l_entry_not_found = 3
period_mismatch_error = 4
t549q_entry_not_found = 5
internal_error = 6
wrong_structure_of_result_tab = 7
others = 8.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
loop at lt_py_result into wa_py_result.
loop at wa_py_result-nat-zt into wa_zt.
rp-provide-from-last p0002 space sy-datum sy-datum.
move: pernr-pernr to wa_result-pernr,
p0002-vorna to wa_result-vorna,
p0002-nachn to wa_result-nachn.
move wa_py_result-evp-fpbeg to wa_result-begda.
wa_result-period = wa_result-begda(6).
move wa_zt-posid to wa_result-begda+6(2).
move-corresponding wa_zt to wa_result.
append wa_result to lt_result.
clear wa_result.
clear wa_zt.
endloop.
clear wa_py_result.
endloop.
end-of-selection.
* Ausgabe
cl_salv_table=>factory( importing r_salv_table = gr_table
changing t_table = lt_result ).
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( abap_true ).
try.
gr_column ?= gr_columns->get_column( 'TGART' ).
gr_column->set_short_text( 'Feiertag' ).
gr_column->set_medium_text( 'Feiertag' ).
gr_column->set_long_text( 'Feiertag' ).
catch cx_salv_not_found. "#EC NO_HANDLER
endtry.
try.
gr_column ?= gr_columns->get_column( 'ANZKT' ).
gr_column->set_short_text( 'Kalendert.' ).
gr_column->set_medium_text( 'Kalendertage' ).
gr_column->set_long_text( 'Kalendertage' ).
catch cx_salv_not_found. "#EC NO_HANDLER
endtry.
try.
gr_column ?= gr_columns->get_column( 'ANZAT' ).
gr_column->set_short_text( 'Arbeitst.' ).
gr_column->set_medium_text( 'Arbeitstage' ).
gr_column->set_long_text( 'Arbeitstage' ).
catch cx_salv_not_found. "#EC NO_HANDLER
endtry.
try.
gr_column ?= gr_columns->get_column( 'ANZAS' ).
gr_column->set_short_text( 'Arbeitsst.' ).
gr_column->set_medium_text( 'Arbeitsstunden' ).
gr_column->set_long_text( 'Arbeitsstunden' ).
catch cx_salv_not_found. "#EC NO_HANDLER
endtry.
try.
gr_column ?= gr_columns->get_column( 'PERIOD' ).
gr_column->set_short_text( 'Abrper.' ).
gr_column->set_medium_text( 'Abrechnungsperiode' ).
gr_column->set_long_text( 'Abrechnungsperiode' ).
catch cx_salv_not_found. "#EC NO_HANDLER
endtry.
* Symbolleiste wird eingeblendet
gr_functions = gr_table->get_functions( ).
gr_functions->set_all( abap_true ).
gr_display = gr_table->get_display_settings( ).
gr_display->set_striped_pattern( cl_salv_display_settings=>true ).
gr_display->set_list_header( 'KUG Stunden/ Tage' ).
* gr_display->set_fit_column_to_table_size( abap_true ).
* Layout (Layoutänderungen abspeicherbar)
gr_layout = gr_table->get_layout( ).
key-report = sy-repid.
gr_layout->set_key( key ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
gr_layout->set_default( abap_true ).
* Anzeige Tabelle *
gr_table->display( ).
Kostenloses Muster ohne Gewährleistung
Sie können diesen Report gerne als Vorlage für Ihren eigenen Report verwenden. Wir übernehmen keine Haftung für die Funktionalität oder die Richtigkeit der Ergebnisse.
Hi Armin,
ich würde dir für die Zukunft empfehlen, ein paar Funktionen zu benutzen. Das tut nicht weh und macht das Programm übersichtlicher. Normal reichen eigentlich 1-3 globale Tabellen zusammen mit den eh schon globalen Selektionsfeldern für einen Report.
Und die Namenskonventionen der einigermaßen aktuellen SAP Programme (da gibt es leider nicht so viel im HR-Umfeld) würden das ganze auch etwas strukturierter machen.
Ich hoffe, dass dir die beiden Tips in der Zukunft auch etwas weiterhelfen – so wie mir auch dein Blog das ein oder andere Mal schon geholfen hat 🙂
LG, Mathias
Hallo Mathias,
danke für Deine Anregung. Ich neige dazu, Bewährtes wiederzuverwenden. Das verstellt bestimmt manchmal den Blick für Verbesserungspotential.
Viele Grüße,
Armin