Listen, die den Lagerbestandswert zum Stichtag ausgeben, haben eines der folgenden Probleme:
Kein Stichtag möglich
Nur Vorperiode
Nur Vorjahr
Keine aktuelle Bewertung
Unvollständig
Nur Summen
Fehler bei Verdichtung
Von SAP bei Verdichtung nicht zugelassen
Das Programm löst all diese Probleme.
Angemerkt sei, dass SAP bei steuerrechtlichen Werten (Hier 2) keine Historie kennt. Wird sie aus dem Stamm genommen, dann handelt es sich um die letzte Speicherung.
Steuerrechtliche Werte können mit MRN2 und MRN9 erzeugt werden.
Zusätzlich wird der Gesamtwert und der Bilanzwert ausgegeben.
Der Bilanzwert nimmt den steuerrechtlichen Wert bzw. den gleitenden Durchschnittspreis.
Der neue Gesamtwert ergibt sich aus Bilanzwert * mal Gesamtbestand.
Um die Differenz sind die Vorratskonten niedriger mit 31.12. zu bewerten, die Bewertung ist mit 1.1. wieder zu stornieren.
REPORT zmm_m5mb.
*Programm zur Anzeige Bestände MBEW und MBEWH und QBEW und QBEWH und EBEW und EBEWH
*Offen
* Abwertung über V_NIW6 und nicht fix programmiert
* Q Bestände nicht abwerten
*Version 006 HST20190802
* Steuerwert neu berechnen
* Korrektur Nachkommastellen bei niedrigen Preisen über Gesamtwert
*Version 005 HST20190801
* Materialtext ergänzt
* SteuerPreis1-3 Bewertungskreis verkleinern
* Bewertungsklasse statt Bewertungskreis in Anzeige
* Bewertungsklasse merken
*Version 004 HST20190730
* Korrektur PEINH
*Version 003 HST20190729
* ABWKZ eingefügt
*Version 002 HST20190717
* Materialklasse Selektion
* Warengruppe Selektion
* Steuerrechtlicher Wert
* Bilanzwert
* Normalbestand Umbau
* Sonderbestand Umbau
*Version 001 HST20190701
* Ausgabe als ALV List
* Analyse Flag
* Auslesen aller Dateien
* ALV Variant
* Umbau auf OO
SELECTION-SCREEN COMMENT 01(80) text-001.
SELECTION-SCREEN SKIP.
TABLES: mseg, mara, mbew, makt.
SELECTION-SCREEN BEGIN OF BLOCK all WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK aus WITH FRAME TITLE text-010.
SELECT-OPTIONS so_matnr FOR mseg-matnr DEFAULT '1050871007'.
"'0010011074'.
"'12-780-071-Z2'. "'7227775030' DEFAULT '800000004*'. " '7277771163-2'.
SELECT-OPTIONS so_mtart FOR mara-mtart. "Materialart
SELECT-OPTIONS so_matkl FOR mara-matkl. "Warengruppe
SELECT-OPTIONS so_bklas FOR mbew-bklas. "Bewertungsklasse
PARAMETERS p_bwkey TYPE mbew-bwkey DEFAULT '1000' NO-DISPLAY. "Bewertungskreis
"SELECT-OPTIONS so_bwart FOR mseg-bwart NO-DISPLAY. "Bewegungsart
SELECT-OPTIONS so_budat FOR mseg-budat_mkpf. " NO-DISPLAY. "Buchungsdatum
"SELECT-OPTIONS so_aufnr FOR mseg-aufnr NO-DISPLAY. "Auftragsnummer
SELECTION-SCREEN SKIP.
"SELECT-OPTIONS so_saknr FOR mseg-sakto NO-DISPLAY. "Sachkonten
SELECTION-SCREEN END OF BLOCK aus.
SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE text-020.
"SELECT-OPTIONS so_buda2 FOR mseg-budat_mkpf. "NO-DISPLAY. "Datum kritisch
PARAMETERS p_date TYPE sydats DEFAULT '20181231'. "sy-datum NO-DISPLAY. "Stichtagsdatum
PARAMETERS p_normal TYPE xfeld AS CHECKBOX DEFAULT abap_true.
PARAMETERS p_sonder TYPE xfeld AS CHECKBOX DEFAULT abap_true. "Nur Sonderbestände
SELECT-OPTIONS so_sobkz FOR mseg-sobkz MATCHCODE OBJECT h_t148. "Sonderbestand
SELECTION-SCREEN SKIP.
PARAMETERS p_analys TYPE xfeld AS CHECKBOX DEFAULT abap_false. "Analyse sichtbar (Keine Datenlöschung)
PARAMETERS p_visibl TYPE xfeld AS CHECKBOX DEFAULT abap_true. "Zusatzinfo sichtbar
SELECTION-SCREEN END OF BLOCK opt.
SELECTION-SCREEN BEGIN OF BLOCK ausg WITH FRAME TITLE text-040.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(75) text-041.
SELECTION-SCREEN END OF LINE.
PARAMETERS p_steuer TYPE c DEFAULT '2'. "Steuerr. Wert Auaswahl 1/2/3
PARAMETERS: p_orig RADIOBUTTON GROUP g2,
p_neuber RADIOBUTTON GROUP g2 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK ausg.
SELECTION-SCREEN BEGIN OF BLOCK alv WITH FRAME TITLE text-015.
SELECTION-SCREEN COMMENT 1(60) text-030 .
PARAMETERS p_var TYPE slis_vari. "rsvar-variant. "slis_vari
SELECTION-SCREEN END OF BLOCK alv.
SELECTION-SCREEN END OF BLOCK all.
TYPES: BEGIN OF ty_alv,
bemer(30) TYPE c, "Bemerkung
origi TYPE c, "Origin
matnr TYPE mbewh-matnr, "Materialnummer
sobkz TYPE mseg-sobkz, "Sonderbestandskennzeichen
pspnr TYPE ps_psp_pnr, "PSP Element
"pspnr type n length 8,
"pspnr type n,
bwkey TYPE mbewh-bwkey, "Bewertungskreis "HST20190801
lbkum TYPE mbewh-lbkum, "Menge
salk3 TYPE mbewh-salk3, "Gesamtwert
vprsv TYPE mbewh-vprsv, "Preissteuerung
peinha TYPE mbewh-peinh, "Preiseinheit Historisch
verpr TYPE mbewh-verpr, "Gleitender Preis
stprs TYPE mbewh-stprs, "Standard Preis
bklas TYPE mbewh-bklas, "Bewertungsklasse
lfgja TYPE mbewh-lfgja, "Jahr
lfmon TYPE mbewh-lfmon, "Monat
lvkey TYPE i, "Jahr Monat zusammen
mtart TYPE mara-mtart, "Materialart
matkl TYPE mara-matkl, "Warengruppe
bwprs TYPE mbew-bwprs, "Steuerrechtlicher Preis 1
bwps1 TYPE mbew-bwps1, "Steuerrechtlicher Preis 2
vjbws TYPE mbew-vjbws, "Steuerrechtlicher Preis 3
bwprsa TYPE mbew-bwprs, "Steuerrechtlicher Preis ausgewählt
bwprsas TYPE mbew-salk3, "Steuerrechtlicher Preis ausgewählt
bwprsad TYPE mbew-salk3, "Differenz zu Steuerr. Wert
bwprsb TYPE mbew-bwprs, "Bilanzwert Preis ausgewählt
bwprsbs TYPE mbew-salk3, "Bilanzwert Preis ausgewählt
bwprsbd TYPE mbew-salk3, "Differenz zu Bilanz Wert
abwkz TYPE mbew-abwkz, "Abwertungskennziffer HST20190729
peinh TYPE mbew-peinh, "Preiseinheit MBEW HST20190730
maktx TYPE makt-maktx, "Kurztext HST20190801
ampel(4) TYPE c, "Ampel
END OF ty_alv.
TYPES: ty_alv_table TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv TYPE ty_alv_table, "Tabelle
gs_alv TYPE ty_alv, "Struktur
gt_alv2 TYPE ty_alv_table. "Zwischentabelle
DATA gv_titel(50) TYPE c. "Auswertungsüberschrift
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_mm03 TABLES gt_alv USING row column.
ENDMETHOD. "on_link_click
ENDCLASS. "cl_event_handler IMPLEMENTATION
CLASS application DEFINITION CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS f4_alv_variant.
CLASS-METHODS init.
CLASS-METHODS run.
CLASS-METHODS collect_alv
CHANGING gt_alv TYPE ty_alv_table.
CLASS-METHODS show_alv
CHANGING gt_alv TYPE ty_alv_table.
ENDCLASS.
CLASS application IMPLEMENTATION.
*&---------------------------------------------------------------------*
*& FORM f4_alv_variant
*&---------------------------------------------------------------------*
* Show all existing variants for alv grid
*----------------------------------------------------------------------*
METHOD f4_alv_variant. "FORM f4_alv_variant CHANGING p_var TYPE rsvar-variant. "LIKE p_alvvar.
DATA:variant TYPE disvariant.
variant-report = sy-repid.
"variant-handle = '0001'.
variant-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variant
i_save = 'A'
IMPORTING
es_variant = variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
CHECK sy-subrc = 0.
p_var = variant-variant.
ENDMETHOD. "ENDFORM. " f4_alv_variant
*&---------------------------------------------------------------------*
*& FORM init
*&---------------------------------------------------------------------*
* Initialization before first screen
*----------------------------------------------------------------------*
METHOD init.
"CLEAR so_matnr[].
"so_matnr-sign = 'I'.
"so_matnr-option = 'CP'.
"so_matnr-low = '40*'.
"APPEND so_matnr TO so_matnr. "apppend so_matnr
APPEND INITIAL LINE TO so_budat ASSIGNING FIELD-SYMBOL(<so_budat>).
<so_budat>-sign = 'I'.
<so_budat>-option = 'BT'.
<so_budat>-low = '20150101'.
<so_budat>-high = '20181231'.
*
* APPEND INITIAL LINE TO so_buda2 ASSIGNING FIELD-SYMBOL(<so_buda2>).
* <so_buda2>-sign = 'I'.
* <so_buda2>-option = 'BT'.
* <so_buda2>-low = '20180101'.
* <so_buda2>-high = '20181231'.
*
* "p_date = sy-datum - 60.
ENDMETHOD.
*&---------------------------------------------------------------------*
*& FORM run
*&---------------------------------------------------------------------*
* Main Programm
*----------------------------------------------------------------------*
METHOD run.
application=>collect_alv( CHANGING gt_alv = gt_alv ).
application=>show_alv( CHANGING gt_alv = gt_alv ).
ENDMETHOD.
*&---------------------------------------------------------------------*
*& FORM collect_alv
*&---------------------------------------------------------------------*
* Collect and sort data for alv
*----------------------------------------------------------------------*
METHOD collect_alv. "FORM collect_alv.
" MBEWH, MBEW, QBEWH, QBEW, EBEWH, EBEW
CLEAR gt_alv2[].
DATA: lv_stich TYPE i.
lv_stich = p_date(4) * 100 + p_date+4(2).
"SELECT SINGLE pspnr FROM prps AS b INTO @DATA(lv_dat).
DATA lv_dat TYPE prps-pspnr VALUE IS INITIAL.
IF p_normal EQ abap_true.
SELECT ' ' AS bemer , 'M' AS origi, a~matnr, 'n' AS sobkz,
@lv_dat AS pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon
, ( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM mbewh AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
SELECT ' ' AS bemer , 'M' AS origi, a~matnr, 'n' AS sobkz,
@lv_dat AS pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon,
( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM mbew AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
ENDIF.
IF p_sonder EQ abap_true.
SELECT ' ' AS bemer , 'Q' AS origi, a~matnr, a~sobkz,
a~pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon,
( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM qbewh AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
SELECT ' ' AS bemer , 'Q' AS origi, a~matnr, a~sobkz,
a~pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon,
( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM qbew AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
SELECT ' ' AS bemer , 'E' AS origi, a~matnr, a~sobkz,
@lv_dat AS pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon,
( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM ebewh AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
SELECT ' ' AS bemer , 'E' AS origi, a~matnr, a~sobkz,
@lv_dat AS pspnr,
a~bwkey, a~lbkum, a~salk3, a~vprsv, a~peinh, a~verpr, a~stprs, a~bklas, a~lfgja , a~lfmon,
( CAST( a~lfgja AS DEC ) * 100 + CAST( a~lfmon AS DEC ) ) AS lvkey
FROM ebew AS a APPENDING TABLE @gt_alv2
WHERE a~matnr IN @so_matnr AND a~bwkey EQ @p_bwkey.
ENDIF.
SORT gt_alv2 BY matnr origi pspnr lfgja DESCENDING lfmon DESCENDING.
IF p_analys EQ abap_false.
DELETE gt_alv2 WHERE lvkey > lv_stich.
"Sortierung absteigend um Maximalwert zu finden
DATA lv_new TYPE boolean.
lv_new = abap_false.
LOOP AT gt_alv2 ASSIGNING FIELD-SYMBOL(<gs_alv>).
AT NEW matnr.
lv_new = abap_true.
ENDAT.
AT NEW origi.
lv_new = abap_true.
ENDAT.
AT NEW pspnr.
lv_new = abap_true.
ENDAT.
IF lv_new = abap_true.
lv_new = abap_false.
ELSE.
DELETE gt_alv2. " FROM <gs_alv>.
"DELETE TABLE gt_alv2 FROM <gs_alv>.
ENDIF.
ENDLOOP.
ENDIF.
DATA:
lv_mtart TYPE mara-mtart,
lv_matkl TYPE mara-matkl,
lv_bwprs TYPE mbew-bwprs,
lv_bwps1 TYPE mbew-bwps1,
lv_vjbws TYPE mbew-vjbws,
lv_peinh TYPE mbew-peinh, "HST20190730
lv_maktx TYPE makt-maktx, "HST20190801
lv_abwkz TYPE mbew-abwkz.
"Anreichern mit Materialart mtart, Warengruppe matkl, Steuerr. Werte 1-3
LOOP AT gt_alv2 ASSIGNING <gs_alv>.
AT NEW matnr.
"SELECT SINGLE mtart, matkl FROM mara INTO ( @lv_mtart, @lv_matkl ) WHERE matnr EQ @<gs_alv>-matnr.
"HST20190801
SELECT SINGLE mtart, matkl, maktx FROM mara AS a INNER JOIN makt AS b ON a~matnr = b~matnr
INTO ( @lv_mtart, @lv_matkl, @lv_maktx ) WHERE b~matnr EQ @<gs_alv>-matnr AND b~spras = 'DE'.
CHECK sy-subrc = 0.
SELECT SINGLE bwprs, bwps1, vjbws, abwkz, peinh FROM mbew INTO ( @lv_bwprs, @lv_bwps1, @lv_vjbws, @lv_abwkz, @lv_peinh )
WHERE matnr EQ @<gs_alv>-matnr.
CHECK sy-subrc = 0.
ENDAT.
"Materialart und Warengruppe anreichern
<gs_alv>-mtart = lv_mtart.
<gs_alv>-matkl = lv_matkl.
"Steuerr. Werte anreichern
<gs_alv>-bwprs = lv_bwprs.
<gs_alv>-bwps1 = lv_bwps1.
<gs_alv>-vjbws = lv_vjbws.
<gs_alv>-peinh = lv_peinh. "HST20190730 Überschreiben des vorher geladenen Wertes
<gs_alv>-abwkz = lv_abwkz.
<gs_alv>-maktx = lv_maktx. "HST20190801
CASE p_steuer.
WHEN '1'.
<gs_alv>-bwprsa = lv_bwprs.
WHEN '2'.
<gs_alv>-bwprsa = lv_bwps1.
WHEN '3'.
<gs_alv>-bwprsa = lv_vjbws.
WHEN OTHERS.
EXIT.
ENDCASE.
"Steuerwert Berechnung
"Bessere Lösung über V_NIW6
IF p_neuber = 'X'.
IF <gs_alv>-salk3 > 0. "HST20190802 Steuerwert neu berechnen, wenn Bestand (Wert) größer als 0.
<gs_alv>-bwprsa = <gs_alv>-salk3 / <gs_alv>-lbkum * <gs_alv>-peinh * 1.
ELSE. "Bei V Preis und S Preis den Einzelpreis nehmen, wenn kein Bestand da ist.
IF <gs_alv>-vprsv = 'V'.
<gs_alv>-bwprsa = <gs_alv>-verpr / 1. "GLD_PREIS.
ELSE.
<gs_alv>-bwprsa = <gs_alv>-stprs / 1. "Standard_PREIS.
ENDIF.
ENDIF.
IF <gs_alv>-sobkz <> 'Q'.
CASE <gs_alv>-abwkz.
WHEN '3' OR '4'. "50% Abwertung
<gs_alv>-bwprsa = <gs_alv>-bwprsa * 5 / 10.
WHEN '5' OR '6'. "80% Abwertung
<gs_alv>-bwprsa = <gs_alv>-bwprsa * 2 / 10.
WHEN '7' OR '8' OR '9' OR '10'. "100% Abwertung
<gs_alv>-bwprsa = 0.
WHEN OTHERS. "Keine Abwertung
"<gs_alv>-bwprsa = <gs_alv>-bwprsa.
ENDCASE.
ENDIF.
ENDIF.
"bwprsa Steuerwert Stück
IF <gs_alv>-vprsv = 'V'.
"Steuerwert Summe
<gs_alv>-bwprsas = <gs_alv>-bwprsa * <gs_alv>-lbkum / <gs_alv>-peinh. "Steuerr. Wert Summe
IF <gs_alv>-verpr = <gs_alv>-bwprsa. "Rundungsdifferenz soweit wie möglich retten
<gs_alv>-bwprsas = <gs_alv>-salk3. "Steuerr. Wert Summe
ENDIF.
"Bilanzwert Berechnung
"Bilanzwert, wegen Rundung keine Rechnung, salk3 ist genauer, kleiner Wert wird für Bilanz genommen
IF <gs_alv>-bwprsa < <gs_alv>-verpr. "Steuer kleiner als Bestand --> Steuer nehmen
<gs_alv>-bwprsb = <gs_alv>-bwprsa. "Bilanzwert Stück
<gs_alv>-bwprsbs = <gs_alv>-bwprsas. "Bilanzwert Summe
ELSE. "Steuer größer als Bestand --> Bestand nehmen
<gs_alv>-bwprsb = <gs_alv>-verpr. "Bilanzwert Stück
<gs_alv>-bwprsbs = <gs_alv>-salk3. "Bilanzwert Summe
ENDIF.
ELSE.
"Steuerwert Summe
<gs_alv>-bwprsas = <gs_alv>-bwprsa * <gs_alv>-lbkum / <gs_alv>-peinh. "Steuerr. Wert Summe
IF <gs_alv>-stprs = <gs_alv>-bwprsa. "Rundungsdifferenz soweit wie möglich retten
<gs_alv>-bwprsas = <gs_alv>-salk3. "Steuerr. Wert Summe
ENDIF.
"Bilanzwert Berechnung
"Bilanzwert, wegen Rundung keine Rechnung, salk3 ist genauer, kleiner Wert wird für Bilanz genommen
IF <gs_alv>-bwprsa < <gs_alv>-stprs. "Steuer kleiner als Bestand --> Steuer nehmen
<gs_alv>-bwprsb = <gs_alv>-bwprsa. "Bilanzwert Stück
<gs_alv>-bwprsbs = <gs_alv>-bwprsas. "Bilanzwert Summe
ELSE. "Steuer größer als Bestand --> Bestand nehmen
<gs_alv>-bwprsb = <gs_alv>-stprs. "Bilanzwert Stück
<gs_alv>-bwprsbs = <gs_alv>-salk3. "Bilanzwert Summe
ENDIF.
ENDIF.
<gs_alv>-bwprsbd = <gs_alv>-bwprsbs - <gs_alv>-salk3 . "Diff. Bilanz - Bestandswert
<gs_alv>-bwprsad = <gs_alv>-bwprsas - <gs_alv>-salk3 . "Diff. Steuer - Bestandswert
APPEND <gs_alv> TO gt_alv.
ENDLOOP.
*letzter eintrag auslesen
" ampel = '@08@'. Grün
" ampel = '@09@'. Gelb
" ampel = '@0A@'. Rot
" ampel = '@EB@'. Kein Licht
*
* LOOP AT gt_alv2 ASSIGNING FIELD-SYMBOL(<gs_alv>).
** IF <gs_alv>-budat < so_buda2-low.
** <gs_alv>-bemer = '1VOR'.
** ELSEIF <gs_alv>-budat > so_buda2-high.
** <gs_alv>-bemer = '3NACH'.
** ELSE.
** <gs_alv>-bemer = '2KRIT'.
** ENDIF.
** <gs_alv>-ampel = '@EB@'.
** IF <gs_alv>-shkzg = 'H'.
** <gs_alv>-beme2 = 'Abgang'.
** <gs_alv>-dmbtr = - <gs_alv>-dmbtr.
** <gs_alv>-menge = - <gs_alv>-menge.
** <gs_alv>-ampel = '@0A@'.
** "MODIFY gt_alv FROM gs_alv.
** ELSE.
** <gs_alv>-beme2 = 'Zugang'.
** ENDIF.
* APPEND <gs_alv> TO gt_alv.
*
* ENDLOOP.
SORT gt_alv BY matnr.
"ENDFORM. "collect_alv
ENDMETHOD.
*&---------------------------------------------------------------------*
*& Form SHOW_ALV
*&---------------------------------------------------------------------*
* Show and filter alv
*----------------------------------------------------------------------*
METHOD show_alv. "FORM show_alv.
"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: lr_display TYPE REF TO cl_salv_display_settings.
* Titel
DATA: lv_titel TYPE lvc_title.
* Sortierung und Aggregation
DATA: lr_sorts TYPE REF TO cl_salv_sorts.
DATA: lr_aggs TYPE REF TO cl_salv_aggregations.
* Feldkatalog ändern
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
"DATA: lf_variant TYPE slis_vari.
DATA: lo_events TYPE REF TO cl_salv_events_table. "HST 20190712
* ALV aufbauen,
* lref_salv zeigt danach auf das Objekt,
* gt_alv 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 .
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
lr_layout->set_initial_layout( value = '/STANGL1' ).
* IF sy-slset = 'CUS&Z_PPMDT_01'.
* lr_layout->set_initial_layout( value = '/Z_PPMDT_TEL' ).
* 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
"Überschrift des Display einstellen
"gv_titel = .
CONCATENATE 'Bestandswerte - Zeitraum: ' so_budat-low ' - ' so_budat-high ': Stichtag ' p_date
INTO lv_titel RESPECTING BLANKS.
lr_display = lref_salv->get_display_settings( ).
lr_display->set_list_header( lv_titel ).
lr_display->set_striped_pattern( abap_true ).
lr_columns = lref_salv->get_columns( ).
lr_columns->set_optimize( abap_true ).
lr_columns->set_key_fixation( ).
TRY.
* "Sort einstellen
lr_sorts = lref_salv->get_sorts( ).
lr_sorts->add_sort( columnname = 'MATNR' subtotal = abap_true ).
**
* "Aggregation einstellen
lr_aggs = lref_salv->get_aggregations( ).
"lr_aggs->add_aggregation( 'DMBTR' ).
"lr_aggs->add_aggregation( 'MENGE' ).
lr_aggs->set_aggregation_before_items( 'X' ).
"lr_column ?= lr_columns->get_column( 'MENGE' ).
"lr_column->set_short_text( 'Menge').
"lr_column->set_medium_text( 'Menge').
"lr_column->set_long_text( 'Menge').
"lr_column->set_output_length( '20' ).
"lr_column->set_sign( abap_true ).
"lr_column ?= lr_columns->get_column( 'DMBTR' ).
"lr_column->set_output_length( '20' ).
"lr_column->set_sign( abap_true ).
* lr_column ?= lr_columns->get_column( 'FAVOR' ).
* lr_column->set_short_text( 'Not.Vorn').
* lr_column->set_medium_text( 'Not.Vorname').
* lr_column->set_long_text( 'Not.Vorname').
* lr_column->set_output_length( '10' ).
*
*
* lr_column ?= lr_columns->get_column( 'WERKS' ).
* lr_column->set_visible( '' ).
*
* lr_column ?= lr_columns->get_column( 'ORGEH' ).
* lr_column->set_visible( '' ).
*
* bwprs type mbew-bwprs, "Steuerrechtlicher Preis 1
* bwps1 type mbew-bwps1, "Steuerrechtlicher Preis 2
* vjbws type mbew-vjbws, "Steuerrechtlicher Preis 3
* bwprsa type mbew-bwprs, "Steuerrechtlicher Preis ausgewählt
* bwprsb type mbew-bwprs, "Bilanzwert Preis ausgewählt
* lr_column ?= lr_columns->get_column( 'BWPRS' ).
* lr_column->set_output_length( '1' ).
*
* lr_column ?= lr_columns->get_column( 'BWPRS' ).
* lr_column->set_output_length( '1' ).
*
* lr_column ?= lr_columns->get_column( 'BWPRS' ).
* lr_column->set_output_length( '1' ).
*
PERFORM visible USING lr_columns 'BWPRS' p_visibl. "
PERFORM visible USING lr_columns 'BWPS1' p_visibl. "
PERFORM visible USING lr_columns 'VJBWS' p_visibl. "
PERFORM visible USING lr_columns 'MAKTX' p_visibl. "
PERFORM visible USING lr_columns 'BWKEY' p_visibl. "
"lr_column ?= lr_columns->get_column( 'BKLAS' ).
lr_column ?= lr_columns->get_column( 'MATNR' ).
lr_column->set_key( ).
lr_column->set_key_presence_required( abap_true ).
lr_column ?= lr_columns->get_column( 'BWPRSA' ).
lr_column->set_short_text( 'Steuerr.W.').
lr_column->set_medium_text( 'Steuerr.Wert').
lr_column->set_long_text( 'Steuerrechtlicher Wert').
lr_column ?= lr_columns->get_column( 'PEINHA' ).
lr_column->set_short_text( '/ Hist.').
lr_column->set_medium_text( 'Preiseinh. Hist.').
lr_column->set_long_text( 'Preiseinheit Hist.').
lr_column ?= lr_columns->get_column( 'BWPRSAD' ).
lr_column->set_short_text( 'Diff.').
lr_column->set_medium_text( 'Differenz').
lr_column->set_long_text( 'Differenz').
lr_column ?= lr_columns->get_column( 'BWPRSB' ).
lr_column->set_short_text( 'Bilanzw.').
lr_column->set_medium_text( 'Bilanzwert').
lr_column->set_long_text( 'Bilanzwert').
lr_column ?= lr_columns->get_column( 'BWPRSBD' ).
lr_column->set_short_text( 'Diff.').
lr_column->set_medium_text( 'Differenz').
lr_column->set_long_text( 'Differenz').
DATA: lv_color TYPE lvc_s_colo.
lv_color-col = 3.
lr_column->set_color( lv_color ).
lr_column ?= lr_columns->get_column( 'AMPEL' ).
lr_column->set_short_text( 'Status').
lr_column->set_medium_text( 'Status').
lr_column->set_long_text( 'aktueller Status').
lr_column->set_icon( abap_true ).
"HST 20190712 Beginn
lr_column ?= lr_columns->get_column( 'MATNR' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
"lr_column ?= lr_columns->get_column( 'BWART' ).
"lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'SOBKZ' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
"HST 20190712 Ende
lr_columns->set_column_position( columnname = 'AMPEL' position = 1 ).
** set initial Layout
"lf_variant = 'DEFAULT'.
lr_layout->set_initial_layout( p_var ).
CATCH cx_salv_not_found.
cl_demo_output=>display('Error' ).
CATCH cx_salv_existing.
cl_demo_output=>display('Error: Existence' ).
CATCH cx_salv_data_error.
cl_demo_output=>display('Error: Data' ).
ENDTRY.
"Filter setzen
DATA:
lr_filters TYPE REF TO cl_salv_filters,
lr_filter TYPE REF TO cl_salv_filter,
lv_low TYPE salv_de_selopt_high,
lv_high TYPE salv_de_selopt_low,
lv_sign TYPE salv_de_selopt_sign,
lv_option TYPE salv_de_selopt_option.
TRY.
*SELECT-OPTIONS so_mtart FOR mara-mtart. "Materialart
*SELECT-OPTIONS so_matkl FOR mara-matkl. "Warengruppe
*SELECT-OPTIONS so_bklas FOR mbew-bklas. "Bewertungsklasse
lr_filters = lref_salv->get_filters( ).
"Filter mtart
IF so_mtart IS NOT INITIAL.
lv_low = so_mtart-low.
lv_high = so_mtart-high.
lv_sign = so_mtart-sign.
lv_option = so_mtart-option.
lr_filter = lr_filters->add_filter(
columnname = 'MTART'
sign = lv_sign
option = lv_option
low = lv_low
high = lv_high ).
ENDIF.
"Filter matkl
IF so_matkl IS NOT INITIAL.
lv_low = so_matkl-low.
lv_high = so_matkl-high.
lv_sign = so_matkl-sign.
lv_option = so_matkl-option.
lr_filter = lr_filters->add_filter(
columnname = 'MATKL'
sign = lv_sign
option = lv_option
low = lv_low
high = lv_high ).
ENDIF.
"Filter bklas
IF so_bklas IS NOT INITIAL.
lv_low = so_bklas-low.
lv_high = so_bklas-high.
lv_sign = so_bklas-sign.
lv_option = so_bklas-option.
lr_filter = lr_filters->add_filter(
columnname = 'BKLAS'
sign = lv_sign
option = lv_option
low = lv_low
high = lv_high ).
ENDIF.
"lr_filter = lr_filters->get_filter( 'SHKZG' ).
"lr_filter->add_selopt( low = 'S' ).
CATCH cx_salv_not_found cx_salv_data_error cx_salv_existing. "#EC NO_HANDLER
cl_demo_output=>display('Error' ).
ENDTRY.
* Ausgabe
lref_salv->display( ).
"ENDFORM. "show_alv
ENDMETHOD.
ENDCLASS.
"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."Zusatzinfo / Spalte sichtbar
lr_column->set_visible( abap_true ).
ENDIF.
CATCH cx_salv_not_found.
cl_demo_output=>display('Error' ).
ENDTRY.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM call_transaction
*&---------------------------------------------------------------------*
* Call standard transactions with authority check and progress indicator
*----------------------------------------------------------------------*
"HST 20190712
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_mm03 TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
TRY.
gs_alv = gt_alv[ row ].
SET PARAMETER ID: 'MAT' FIELD gs_alv-matnr.
PERFORM call_transaction USING 'MM03'.
"BREAK-POINT.
CATCH cx_sy_itab_line_not_found.
cl_demo_output=>display('Einzelzeile MATNR auswählen' ).
"cl_abap_browser=>show_html( html = VALUE #( ( 'Einzelzeile MATNR auswählen' ) ) ).
ENDTRY.
ENDFORM.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
application=>f4_alv_variant( ). "PERFORM f4_alv_variant USING p_var.
INITIALIZATION.
application=>init( ). " PERFORM init.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_DATE'.
" screen-input = 1.
" screen-invisible = 1.
" screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN.
* IF p_steuer NE '0'.
* p_sonder = ' '.
* "modify screen.
* ENDIF.
START-OF-SELECTION.
application=>run( ).
EXIT.