Typischerweise wird im FI/AP bei Skontobuchungen von Lieferanten auf das Skontokonto gebucht.
Bei aktiver Anlagenbuchhaltung wird der Skonto aber nicht auf das Skontokonto, sondern auf das Anlagenkonto gebucht und vermindert den Anschaffungswert der Anlage.
Ähnlicher Effekt wird durch das Nettoverfahren erzielt, die bei der Belegart hinterlegt wird.
Für das Nettoverfahren sind neben der eigenen Belegart auch ein Konto für die Skontoverrechnung und ein Konto für Skontoverluste einzutragen und das System entsprechend zu konfigurieren.
Um herauszubekommen, welche Skontobeträge auf das Skonto beim Bruttoverfahren geflossen sind, muss die Zahlung der Rechnung auf das Konto des Skontos untersucht werden.
Untiges Analyseprogramm erledigt diese Aufgabe.
Mit Detail können die Detailinformationen angezeigt werden.
Mit Summe wird eine Summe pro Konto erzeugt und eine Gesamtsumme.
Mit Alle werden alle Belege eines Kontos angeführt, und angezeigt, bei welchen ein Skonto erfolgte. Ohne Alle werden nur die Belege eines Kontos angeführt, bei denen tatsächlich ein Skonto bei der Zahlung abgezogen wurde.
REPORT zfi_checkskonto.
CONSTANTS p_debug VALUE 0. "0 Kein Debug 1 Debug
************************************************************************
* Dipl.Ing.J.Stangl
************************************************************************
* Version 002: 20191107 Grid
* Version 001: 20191030 First Version
* Anzeige aller Belege, die Anlagenkonten betreffen und mit Skonto gezahlt wurden.
* p_summe Nur bei ALV List
* p_detail Nur bei ALV List
* p_alle Alle Daten egal ob mit Skonto oder ohne
* p_grid ALV Grid / ALV List
TABLES: bseg, bkpf.
TYPES: BEGIN OF ty_alv,
bukrs TYPE bseg-bukrs,
gjahr TYPE bseg-gjahr,
hkont TYPE bseg-hkont,
belnr TYPE bseg-belnr,
buzei TYPE bseg-buzei,
budat TYPE bkpf-budat,
blart TYPE bkpf-blart,
dmbtr TYPE bseg-dmbtr,
shkzg TYPE bseg-shkzg,
mwskz TYPE bseg-mwskz, "MWSKZ Konto
zbd1p TYPE bseg-zbd1p,
lifnr TYPE bseg-lifnr,
augdt TYPE bseg-augdt, "Ausgleichsdatum
augbl TYPE bseg-augbl, "Ausgleichsbeleg
gjahrz TYPE bseg-gjahr,
belnrz TYPE bseg-belnr, "Zahlungsbeleg
dmbtrz TYPE bseg-dmbtr, "Kreditorsumme Brutto
hkonts TYPE bseg-hkont,
shkzgs TYPE bseg-shkzg,
dmbtrs TYPE bseg-dmbtr, "Skonto gesamt Netto
mwskzs TYPE bseg-mwskz, "MWSKZ Zahlung
dmbtra TYPE bseg-dmbtr, "Skonto anteilig Netto
bemer(40) TYPE c,
END OF ty_alv.
TYPES: ty_alv_t TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv TYPE ty_alv_t.
DATA: gs_alv TYPE ty_alv.
"DATA: gref_salv TYPE REF TO cl_salv_table.
PARAMETERS: p_bukrs LIKE bseg-bukrs DEFAULT '1000'.
SELECT-OPTIONS: so_budat FOR bkpf-budat. "DEFAULT '20180101'.
SELECT-OPTIONS: so_hkont FOR bseg-hkont.
SELECT-OPTIONS: so_gjahr FOR bseg-gjahr. "DEFAULT '2018'.
"PARAMETERS: p_gjahr LIKE bseg-gjahr DEFAULT '2018'.
SELECT-OPTIONS: so_hkon2 FOR bseg-hkont DEFAULT '5800'. "Skontokonto
PARAMETERS: p_grid AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_alle AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN SKIP.
PARAMETERS: p_detail AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_summe AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN SKIP.
PARAMETERS p_var TYPE slis_vari DEFAULT '/DEFAULT'. "rsvar-variant. "slis_vari
CLASS cl_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS on_before_salv_function " BEFORE_SALV_FUNCTION
FOR EVENT if_salv_events_functions~before_salv_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_after_salv_function " AFTER_SALV_FUNCTION
FOR EVENT if_salv_events_functions~before_salv_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_added_function " ADDED_FUNCTION
FOR EVENT if_salv_events_functions~added_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_top_of_page " TOP_OF_PAGE
FOR EVENT if_salv_events_list~top_of_page
OF cl_salv_events_table
IMPORTING r_top_of_page
page
table_index.
CLASS-METHODS on_end_of_page " END_OF_PAGE
FOR EVENT if_salv_events_list~end_of_page
OF cl_salv_events_table
IMPORTING r_end_of_page
page.
CLASS-METHODS on_double_click " DOUBLE_CLICK
FOR EVENT if_salv_events_actions_table~double_click
OF cl_salv_events_table
IMPORTING row
column.
CLASS-METHODS on_link_click " LINK_CLICK
FOR EVENT if_salv_events_actions_table~link_click
OF cl_salv_events_table
IMPORTING row
column.
ENDCLASS. "cl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_event_handler IMPLEMENTATION.
METHOD on_before_salv_function.
"BREAK-POINT.
ENDMETHOD. "on_before_salv_function
METHOD on_after_salv_function.
"BREAK-POINT.
ENDMETHOD. "on_after_salv_function
METHOD on_added_function.
"BREAK-POINT.
ENDMETHOD. "on_added_function
METHOD on_top_of_page.
"BREAK-POINT.
ENDMETHOD. "on_top_of_page
METHOD on_end_of_page.
"BREAK-POINT.
ENDMETHOD. "on_end_of_page
METHOD on_double_click.
"PERFORM display_mm03 TABLES gt_alv USING row column.
ENDMETHOD. "on_double_click
METHOD on_link_click.
PERFORM display_document TABLES gt_alv USING row column.
ENDMETHOD. "on_link_click
ENDCLASS. "cl_event_handler IMPLEMENTATION
INITIALIZATION.
so_hkont-sign = 'I'.
so_hkont-option = 'BT'.
so_hkont-low = '1'.
so_hkont-high = '699'.
APPEND so_hkont.
so_hkont-sign = 'I'.
so_hkont-option = 'BT'.
so_hkont-low = '701'.
so_hkont-high = '999'.
APPEND so_hkont.
so_budat-sign = 'I'.
so_budat-option = 'BT'.
so_budat-low = '20150101'.
so_budat-high = '20191231'.
APPEND so_budat.
so_gjahr-sign = 'I'.
so_gjahr-option = 'BT'.
so_gjahr-low = '2015'.
so_gjahr-high = '2019'.
APPEND so_gjahr.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM collect_data.
PERFORM show_data.
EXIT.
FORM collect_data.
"1 Suchen der passenden Sachkontenzeilen betreffend Anlagen (ausgegl. und nicht ausgeglichen)
"2 Suchen der passenden Kreditorenzeilen über Belegnummer (hier sind die ausgeglichenen von Belang)
"3 Suchen der passenden Sachkontenzeilen über Ausgleichsbelegnummer (hier sind die ausgeglichenen Kreditoren wichtig)
"4 Suchen der passenden Hauptbuchzahlung über Belegnummer (hier sind die Skonto nicht ausgeglichenen von Belang)
"1
SELECT a~belnr, a~buzei, a~gjahr, a~bukrs, a~hkont, a~budat, a~shkzg, a~dmbtr, a~blart, a~mwskz FROM bsis AS a INNER JOIN
bkpf AS b
ON
a~belnr = b~belnr AND
a~gjahr = b~gjahr AND
a~bukrs = b~bukrs
INTO CORRESPONDING FIELDS OF TABLE @gt_alv WHERE
a~bukrs = @p_bukrs AND
a~gjahr IN @so_gjahr AND
a~hkont IN @so_hkont AND
a~budat IN @so_budat
"and exists ( select 1 from bkpf as b where a~belnr = b~belnr and a~gjahr = b~gjahr )
.
SELECT a~belnr, a~buzei, a~gjahr, a~bukrs, a~hkont, a~budat, a~shkzg, a~dmbtr FROM bsas AS a INNER JOIN
bkpf AS b
ON
a~belnr = b~belnr AND
a~gjahr = b~gjahr AND
a~bukrs = b~bukrs
APPENDING CORRESPONDING FIELDS OF TABLE @gt_alv WHERE
a~bukrs = @p_bukrs AND
a~gjahr IN @so_gjahr AND
a~hkont IN @so_hkont AND
a~budat IN @so_budat
.
DATA: lv_lifnr LIKE bsak-lifnr,
lv_augbl LIKE bsak-augbl.
"2
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<wa_alv>).
SELECT SINGLE lifnr, augbl, augdt, zbd1p FROM bsak "Ausgeglichene Kreditoren
INTO ( @<wa_alv>-lifnr, @<wa_alv>-augbl, @<wa_alv>-augdt, @<wa_alv>-zbd1p )
WHERE
gjahr = @<wa_alv>-gjahr AND
belnr = @<wa_alv>-belnr AND
bukrs = @<wa_alv>-bukrs.
ENDLOOP.
IF p_debug EQ 1.
WRITE: 'GJ BELNR BUDAT HKONT HW LIFNR AUSGLBELNR ZAHL BELNR'.
LOOP AT gt_alv ASSIGNING <wa_alv>.
WRITE : / <wa_alv>-gjahr, <wa_alv>-belnr, <wa_alv>-budat, <wa_alv>-hkont, <wa_alv>-dmbtr, <wa_alv>-shkzg(1), <wa_alv>-lifnr, <wa_alv>-augbl.
ENDLOOP.
WRITE: /.
ENDIF.
"3
LOOP AT gt_alv ASSIGNING <wa_alv> WHERE augbl IS NOT INITIAL.
SELECT SINGLE belnr, gjahr, dmbtr FROM bsas "Zahlungen
INTO ( @<wa_alv>-belnrz, @<wa_alv>-gjahrz, @<wa_alv>-dmbtrz )
WHERE
"gjahr = @<wa_alv>-gjahr AND
augbl = @<wa_alv>-augbl AND
augdt = @<wa_alv>-augdt AND
bukrs = @<wa_alv>-bukrs AND
belnr NE @<wa_alv>-belnr. "Zahlungsbeleg, nicht den zu zahlenden Beleg
* CHECK sy-subrc EQ 4.
* SELECT SINGLE hkont, dmbtr, shkzg FROM bsas "Zahlungen
* INTO ( @<wa_alv>-hkonts, @<wa_alv>-dmbtrs, @<wa_alv>-shkzgs )
* WHERE
* "gjahr = @<wa_alv>-gjahr AND
* augbl = @<wa_alv>-augbl AND
* augdt = @<wa_alv>-augdt and
* bukrs = @<wa_alv>-bukrs AND
* hkont IN @so_hkon2.
ENDLOOP.
"4
LOOP AT gt_alv ASSIGNING <wa_alv> WHERE augbl IS NOT INITIAL.
SELECT SINGLE hkont, dmbtr, shkzg, mwskz FROM bsis "Zahlungen
INTO ( @<wa_alv>-hkonts, @<wa_alv>-dmbtrs, @<wa_alv>-shkzgs, @<wa_alv>-mwskzs )
WHERE
"gjahr = @<wa_alv>-gjahr AND
belnr = @<wa_alv>-belnrz AND
gjahr = @<wa_alv>-gjahrz AND
bukrs = @<wa_alv>-bukrs AND
hkont IN @so_hkon2.
* CHECK sy-subrc EQ 4.
* SELECT SINGLE hkont, dmbtr, shkzg FROM bsas "Zahlungen
* INTO ( @<wa_alv>-hkonts, @<wa_alv>-dmbtrs, @<wa_alv>-shkzgs )
* WHERE
* "gjahr = @<wa_alv>-gjahr AND
* augbl = @<wa_alv>-augbl AND
* augdt = @<wa_alv>-augdt AND
* bukrs = @<wa_alv>-bukrs AND
* hkont IN @so_hkon2.
IF sy-subrc EQ 0.
CASE <wa_alv>-mwskzs.
WHEN 'V0' OR 'E2' OR 'E1' OR 'E0'.
<wa_alv>-dmbtra = <wa_alv>-dmbtr / <wa_alv>-dmbtrz * <wa_alv>-dmbtrs.
WHEN 'V9' OR 'R2'.
<wa_alv>-dmbtra = <wa_alv>-dmbtr / <wa_alv>-dmbtrz * <wa_alv>-dmbtrs.
<wa_alv>-bemer = 'Kontrollieren'.
WHEN 'V1'.
<wa_alv>-dmbtra = <wa_alv>-dmbtr / <wa_alv>-dmbtrz * <wa_alv>-dmbtrs * '1.1' .
WHEN 'V2'.
<wa_alv>-dmbtra = <wa_alv>-dmbtr / <wa_alv>-dmbtrz * <wa_alv>-dmbtrs * '1.2'.
WHEN OTHERS.
<wa_alv>-dmbtra = 0.
<wa_alv>-bemer = 'Kontrollieren'. "dmbtr / <wa_alv>-dmbtrz * <wa_alv>-dmbtrs.
ENDCASE.
ENDIF.
"Haben Buchungen mit Minus versehen
IF <wa_alv>-shkzg = 'H'.
<wa_alv>-dmbtr = - <wa_alv>-dmbtr.
<wa_alv>-dmbtrz = - <wa_alv>-dmbtrz.
ENDIF.
IF <wa_alv>-shkzgs = 'H'.
<wa_alv>-dmbtrs = - <wa_alv>-dmbtrs.
<wa_alv>-dmbtra = - <wa_alv>-dmbtra.
ENDIF.
ENDLOOP.
"Sort / Filter / Delete
SORT gt_alv BY gjahr hkont belnr buzei.
DELETE gt_alv WHERE augbl IS INITIAL.
IF p_alle IS INITIAL.
DELETE gt_alv WHERE hkonts IS INITIAL.
ENDIF.
ENDFORM.
FORM show_list. "ALV List
"DATA: lv_summe TYPE decfloat34.
"DATA: lv_summe2 TYPE decfloat34.
DATA: lv_summe TYPE p DECIMALS 2.
DATA: lv_summe2 TYPE p DECIMALS 2.
DATA: lv_summe3 TYPE p DECIMALS 2.
DATA: lv_summe4 TYPE p DECIMALS 2.
lv_summe = 0.
lv_summe2 = 0.
lv_summe3 = 0.
lv_summe4 = 0.
IF p_detail EQ 'X'.
WRITE: 'GJ BELNR POS BUDAT BL HKONT HW LIFNR BELNRA DATUM GJZ BELNRZ HW HKONT HW HW '.
ENDIF.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<wa_alv>). " WHERE augbl IS NOT INITIAL.
"IF ( <wa_alv>-hkont IS NOT INITIAL OR p_alle = 'X' ).
IF p_detail = 'X'.
WRITE : / <wa_alv>-gjahr, <wa_alv>-belnr, <wa_alv>-buzei, <wa_alv>-budat, (2) <wa_alv>-blart,
(5) <wa_alv>-hkont, <wa_alv>-dmbtr, <wa_alv>-shkzg(1), (2) <wa_alv>-mwskz, <wa_alv>-zbd1p,
(5) <wa_alv>-lifnr, <wa_alv>-augbl, <wa_alv>-augdt, <wa_alv>-gjahrz, <wa_alv>-belnrz, <wa_alv>-dmbtrz,
<wa_alv>-hkonts, <wa_alv>-dmbtrs, <wa_alv>-shkzgs(1), <wa_alv>-mwskzs, <wa_alv>-dmbtra, (30) <wa_alv>-bemer.
ENDIF.
IF <wa_alv>-shkzg = 'S'.
lv_summe = lv_summe + <wa_alv>-dmbtr.
ELSE.
lv_summe = lv_summe - <wa_alv>-dmbtr.
ENDIF.
"ENDIF.
AT END OF belnr.
"IF ( <wa_alv>-hkont IS NOT INITIAL OR p_alle = 'X' ).
IF <wa_alv>-shkzgs = 'S'.
lv_summe2 = lv_summe2 + <wa_alv>-dmbtra.
ELSE.
lv_summe2 = lv_summe2 - <wa_alv>-dmbtra.
ENDIF.
"ENDIF.
AT END OF hkont.
"IF ( lv_summe2 NE 0 ).
IF p_summe = 'X'.
WRITE: /' Summe: ', <wa_alv>-hkont, (11) lv_summe, (122) lv_summe2.
lv_summe3 = lv_summe3 + lv_summe.
lv_summe4 = lv_summe4 + lv_summe2.
lv_summe = 0.
lv_summe2 = 0.
ENDIF.
"ENDIF.
ENDAT.
ENDAT.
ENDLOOP.
IF p_summe = 'X'.
WRITE: /' Summe: ', (21) lv_summe3, (122) lv_summe4.
ENDIF.
ENDFORM.
FORM show_grid. "ALV Grid
"Initialisierung
DATA: lref_salv TYPE REF TO cl_salv_table,
lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key.
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
DATA: lo_events TYPE REF TO cl_salv_events_table. "HST 20190712
* Sortierung und Aggregation
DATA: lr_sorts TYPE REF TO cl_salv_sorts.
DATA: lr_aggs TYPE REF TO cl_salv_aggregations.
* ALV aufbauen,
* lref_salv zeigt danach auf das Objekt,
* gt_alv_pers ist die Tabelle, die als Info mitgegeben wird, wo die Daten zukünftig gespeichert werden.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lref_salv
CHANGING
t_table = gt_alv.
"HST 20190712 Beginn
lo_events = lref_salv->get_event( ).
SET HANDLER cl_event_handler=>on_before_salv_function FOR lo_events.
SET HANDLER cl_event_handler=>on_after_salv_function FOR lo_events.
SET HANDLER cl_event_handler=>on_added_function FOR lo_events.
SET HANDLER cl_event_handler=>on_top_of_page FOR lo_events.
SET HANDLER cl_event_handler=>on_end_of_page FOR lo_events.
SET HANDLER cl_event_handler=>on_double_click FOR lo_events.
SET HANDLER cl_event_handler=>on_link_click FOR lo_events.
"HST 20190712 Ende
CATCH cx_salv_msg .
cl_demo_output=>display('Error' ).
ENDTRY.
"Die Keydaten werden gefüllt
ls_key-report = sy-repid.
"lr_layout zeigt auf das Layout des ALV
lr_layout = lref_salv->get_layout( ).
"Layout erhält Keydaten: Program Name
lr_layout->set_key( ls_key ).
"Layout Speichern erlaubt (3 Werte möglich) User can save
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
* Layout auf Kundenspezifisches Layout einstellen
* IF sy-slset = 'CUS&Z_PPMDT_01'.
lr_layout->set_initial_layout( value = p_var )."Kein Zusammenziehen und Optimierung über Layoutvariante
* ENDIF.
"lr_functions zeigt auf die Funktionen des ALV
lr_functions = lref_salv->get_functions( ).
"lr_functions einschalten
" lr_functions->set_default( ). "minimal
lr_functions->set_all( abap_true ). "Standard
* Feldkatalog ändern
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
lr_columns = lref_salv->get_columns( ).
"lr_columns->set_optimize( abap_true )."Nicht in Kombination mit Outputlength
TRY.
* bukrs TYPE bseg-bukrs,
* gjahr TYPE bseg-gjahr,
* hkont TYPE bseg-hkont,
* belnr TYPE bseg-belnr,
* buzei TYPE bseg-buzei,
* budat TYPE bkpf-budat,
* blart type bkpf-blart,
* dmbtr TYPE bseg-dmbtr,
* shkzg TYPE bseg-shkzg,
* mwskz TYPE bseg-mwskz, "MWSKZ Konto
* zbd1p type bseg-zbd1p,
* lifnr TYPE bseg-lifnr,
* augdt TYPE bseg-augdt, "Ausgleichsdatum
* augbl TYPE bseg-augbl, "Ausgleichsbeleg
* gjahrz TYPE bseg-gjahr,
* belnrz TYPE bseg-belnr, "Zahlungsbeleg
* dmbtrz TYPE bseg-dmbtr, "Kreditorsumme Brutto
* hkonts TYPE bseg-hkont,
* shkzgs TYPE bseg-shkzg,
* dmbtrs TYPE bseg-dmbtr, "Skonto gesamt Netto
* mwskzs TYPE bseg-mwskz, "MWSKZ Zahlung
* dmbtra TYPE bseg-dmbtr, "Skonto anteilig Netto
* bemer(40) TYPE c,
* "Sort einstellen
lr_sorts = lref_salv->get_sorts( ).
lr_sorts->add_sort( columnname = 'HKONT' subtotal = abap_true ).
lr_sorts->add_sort( columnname = 'BELNR' subtotal = abap_true ).
**
* "Aggregation einstellen
lr_aggs = lref_salv->get_aggregations( ).
lr_aggs->add_aggregation( 'DMBTR' ).
lr_aggs->add_aggregation( 'DMBTRA' ).
lr_aggs->set_aggregation_before_items( 'X' ).
lr_column ?= lr_columns->get_column( 'BUKRS' ).
lr_column->set_short_text( 'BU').
lr_column->set_output_length('04').
lr_column ?= lr_columns->get_column( 'BELNR' ).
lr_column->set_short_text( 'BELNR').
lr_column->set_output_length('05').
lr_column ?= lr_columns->get_column( 'GJAHR' ).
lr_column->set_short_text( 'GJ').
lr_column->set_output_length('04').
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'HKONT' ).
lr_column->set_short_text( 'KTO').
lr_column->set_output_length('04').
lr_column ?= lr_columns->get_column( 'BELNR' ).
lr_column->set_short_text( 'BELNR').
lr_column->set_output_length('10').
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'BUZEI' ).
lr_column->set_short_text( 'P').
lr_column->set_output_length('01').
lr_column ?= lr_columns->get_column( 'BLART' ).
lr_column->set_short_text( 'BA').
lr_column->set_output_length('02').
lr_column ?= lr_columns->get_column( 'SHKZG' ).
lr_column->set_short_text( 'V').
lr_column->set_output_length('01').
lr_column ?= lr_columns->get_column( 'MWSKZ' ).
lr_column->set_short_text( 'MW').
lr_column->set_output_length('02').
lr_column ?= lr_columns->get_column( 'MWSKZS' ).
lr_column->set_short_text( 'MW').
lr_column->set_output_length('02').
lr_column ?= lr_columns->get_column( 'AUGBL' ).
lr_column->set_short_text( 'BEL.A').
lr_column->set_output_length('10').
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'AUGDT' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'LIFNR' ).
lr_column->set_short_text( 'LIFNR').
lr_column->set_medium_text( 'Lieferant').
lr_column->set_long_text( 'Lieferant').
lr_column->set_output_length('3').
lr_column->set_alignment( if_salv_c_alignment=>right ). "salv_de_alignment->right ).
lr_column ?= lr_columns->get_column( 'BELNRZ' ).
lr_column->set_short_text( 'BEL.Z').
lr_column->set_medium_text( 'Belegnr.Zahlung').
lr_column->set_long_text( 'Belegnummer Zahlung').
lr_column->set_output_length('10').
lr_column ?= lr_columns->get_column( 'GJAHRZ' ).
lr_column->set_short_text( 'GJ').
lr_column->set_output_length('04').
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'BELNRZ' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'DMBTRZ' ).
lr_column->set_short_text( 'Betr.HW.Z.').
lr_column->set_medium_text( 'Betrag HW Zahlung').
lr_column->set_long_text( 'Betrag Hauswährung Zahlung').
lr_column->set_sign( abap_true ).
lr_column ?= lr_columns->get_column( 'HKONTS' ).
lr_column->set_short_text( 'KTO').
lr_column->set_output_length('4').
lr_column ?= lr_columns->get_column( 'SHKZGS' ).
lr_column->set_short_text( 'V').
lr_column->set_output_length('1').
lr_column ?= lr_columns->get_column( 'DMBTRS' ).
lr_column->set_short_text( 'Betr.HW.S.').
lr_column->set_medium_text( 'Betrag HW Skonto').
lr_column->set_long_text( 'Betrag Hauswährung Skonto').
lr_column->set_sign( abap_true ).
lr_column ?= lr_columns->get_column( 'DMBTRA' ).
lr_column->set_short_text( 'Betr.HW.A.').
lr_column->set_medium_text( 'Betrag HW Anteilig').
lr_column->set_long_text( 'Betrag Hauswährung Anteilig').
lr_column->set_sign( abap_true ).
"lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
"lr_column->set_icon( abap_true ).
lr_columns->set_column_position( columnname = 'MWSKZS' position = 12 ).
lr_columns->set_column_position( columnname = 'DMBTRA' position = 13 ).
"PERFORM visible USING lr_columns 'PERSK' p_visibl. "Personenkreis/Mitarbeitergruppe
"PERFORM visible USING lr_columns 'PERSG' p_visibl. "Personengruppe/Mitarbeitergruppe
"PERFORM visible USING lr_columns 'ABKRS' p_visibl. "Abrechnungskreis
"PERFORM visible USING lr_columns 'BTRTL' p_visibl. "Teilbereich
"PERFORM visible USING lr_columns 'TEILK' p_visibl. "Teilzeitkennzeichen
CATCH cx_salv_not_found cx_salv_data_error cx_salv_existing. "#EC NO_HANDLER
cl_demo_output=>display('Error' ).
* CATCH cx_salv_not_found.
* cl_demo_output=>display('Error' ).
ENDTRY.
* Ausgabe
lref_salv->display( ).
ENDFORM.
"Unterprogramm von show_alv
FORM visible
USING
lr_columns TYPE REF TO cl_salv_columns_table
lv_column
lv_visibl .
DATA lr_column TYPE REF TO cl_salv_column_table.
TRY.
lr_column ?= lr_columns->get_column( lv_column ).
IF lv_visibl IS INITIAL.
lr_column->set_visible( '' ).
ELSE.
lr_column->set_visible( abap_true ).
ENDIF.
CATCH cx_salv_not_found.
cl_demo_output=>display('Error' ).
ENDTRY.
ENDFORM.
FORM show_data.
IF p_grid = 'X'. "Dialog Output
PERFORM show_grid.
ELSE. "ALV Output
PERFORM show_list.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM call_transaction
*&---------------------------------------------------------------------*
* Call standard transactions with authority check and progress indicator
*----------------------------------------------------------------------*
FORM call_transaction USING trx TYPE tcode.
DATA: lv_message TYPE string.
CONCATENATE 'Opening transaction' trx '...' INTO lv_message SEPARATED BY space. "#EC NOTEXT
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
tcode = trx
EXCEPTIONS
ok = 0
not_ok = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE e172(00) WITH trx.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = lv_message.
CALL TRANSACTION trx AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM. "call transaction
FORM display_document TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
TRY.
gs_alv = gt_alv[ row ].
* IF p_zusatz EQ abap_true.
*
* cl_abap_browser=>show_html( html = VALUE cl_abap_browser=>html_table(
* ( '<html><body><basefont face="arial">' )
* ( |Belegnummer: | && gs_alv-belnr && | </br>| )
*
* ( |Geschäftsjahr: | && gs_alv-gjahr )
* ( '</body></html>' )
* )
* title = 'Ausgewählte Belegnummer'
* printing = abap_true
* size = cl_abap_browser=>small
* "check_html = abap_true
* "modal = abap_true
* ).
* ENDIF.
CATCH cx_sy_itab_line_not_found.
BREAK-POINT.
"Error message goes here
ENDTRY.
IF column EQ 'BELNR' OR column EQ 'GJAHR'.
"gt_alv
SET PARAMETER ID: 'BLN' FIELD gs_alv-belnr.
SET PARAMETER ID: 'GJR' FIELD gs_alv-gjahr.
PERFORM call_transaction USING 'FB03'.
ELSEIF column EQ 'BELNRZ' OR column EQ 'GJAHRZ'.
SET PARAMETER ID: 'BLN' FIELD gs_alv-belnrz.
SET PARAMETER ID: 'GJR' FIELD gs_alv-gjahrz.
PERFORM call_transaction USING 'FB03'.
ELSEIF column EQ 'AUGBL' OR column EQ 'AUGDT'.
SET PARAMETER ID: 'BLN' FIELD gs_alv-augbl.
SET PARAMETER ID: 'GJR' FIELD gs_alv-augdt(4).
SET PARAMETER ID: 'BUK' FIELD gs_alv-bukrs.
PERFORM call_transaction USING 'FBRA'.
ENDIF.
ENDFORM.