ZMM_PREIS3 – Analyse Programm für Preis 0 Probleme

Dieses Programm analysiert die Preis 0 Materialien.

Somit ist eine tägliche Bearbeitung und damit Vermeidung von Bewegungen von Materialien mit Preis 0 möglich.

Per Ampelsystem werden die Ergebnisse der Plausiblitätsprüfungen ausgegeben.

  • Bestand bei fraglichen Preis
  • Fraglicher Preis
  • Suboptimale Preiseinheit
  • Preissteuerung (V oder S)
  • ABC Kategorisierung
  • Abwertung

REPORT zmm_preis3.
*Programm zur raschen Auswertung von Materialien mit Preis 0
* Version XXX
*  Warengruppentext
*  Materialarttext
*  Dispo
* Version 002 20190826 Erste Version über SALV
*  Kennzeichen Alter
* Version 001 20180630 Variante über Query
*
*
*Ausgabe als ALV List

TABLES: mara, mbew, marc, makt.

SELECTION-SCREEN COMMENT 01(80) text-001.
SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK all WITH FRAME.

SELECTION-SCREEN BEGIN OF BLOCK aus WITH FRAME TITLE text-011.
SELECT-OPTIONS so_matnr FOR mara-matnr. "DEFAULT '12-780-071-Z2'. "'7227775030' DEFAULT '800000004*'. " '7277771163-2'.
SELECT-OPTIONS so_maktx FOR makt-maktx. "DEFAULT '12-780-071-Z2'. "'7227775030' DEFAULT '800000004*'. " '7277771163-2'.
SELECT-OPTIONS so_lbkum FOR mbew-lbkum. "Gesamtbestand
SELECT-OPTIONS so_salk3 FOR mbew-salk3. "Gesamtbestandwert
SELECT-OPTIONS so_vprsv FOR mbew-vprsv. "Gleitender Durchschnittspreis / Standardpreis Kennzeichen
SELECT-OPTIONS so_verpr FOR mbew-verpr. "DEFAULT 0. "Gleiternder Durchschnittspreis
SELECT-OPTIONS so_stprs FOR mbew-stprs. "Standardpreis
SELECT-OPTIONS so_peinh FOR mbew-peinh. "Preiseinheit
SELECT-OPTIONS so_bklas FOR mbew-bklas. "Bewertungsklasse
SELECT-OPTIONS so_mtart FOR mara-mtart. "Materialart
SELECT-OPTIONS so_matkl FOR mara-matkl. "Warengruppe.
SELECT-OPTIONS so_maabc FOR marc-maabc. "ABC Kennzeichen Dispo1
SELECT-OPTIONS so_abwkz FOR mbew-abwkz. "Abwertungskennziffer
SELECTION-SCREEN END OF BLOCK aus.


SELECTION-SCREEN BEGIN OF BLOCK alv WITH FRAME TITLE text-015.
SELECTION-SCREEN COMMENT 1(60)  text-016 .
PARAMETERS p_var TYPE  rsvar-variant. "LIKE p_alvvar.
SELECTION-SCREEN END OF BLOCK alv.

SELECTION-SCREEN END OF BLOCK all.

TYPES: BEGIN OF ty_alv,
         matnr     TYPE matnr,
         maktx     TYPE maktx,
         lbkum     TYPE lbkum,
         meins     TYPE meins,
         salk3     TYPE salk3,
         vprsv     TYPE vprsv,
         verpr     TYPE verpr,
         stprs     TYPE stprs,
         peinh     TYPE peinh,
         bklas     TYPE bklas, "Bewertungsklasse
         mtart     TYPE mtart,
         matkl     TYPE matkl,
         maabc     TYPE maabc,
         abwkz     TYPE abwkz,
         bemer(30) TYPE c,
         ampel1(4) TYPE c,
         ampel2(4) TYPE c,
         ampel3(4) TYPE c,
         ampel4(4) TYPE c,
         ampel5(4) TYPE c,
         ampel6(4) TYPE c,
       END OF ty_alv.
TYPES:        ty_alv_table TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv  TYPE ty_alv_table,
      gt_alv2 TYPE ty_alv_table,
      gs_alv  TYPE ty_alv.

DATA gv_titel(50) TYPE c.

*----------------------------------------------------------------------*
*       CLASS cl_event_handler DEFINITION
*----------------------------------------------------------------------*
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 action TABLES gt_alv USING row column.
  ENDMETHOD.                    "on_double_click

  METHOD on_link_click.
    PERFORM action TABLES gt_alv USING row column.
  ENDMETHOD.                    "on_link_click
ENDCLASS.                    "cl_event_handler IMPLEMENTATION


*----------------------------------------------------------------------*
*       CLASS application DEFINITION
*----------------------------------------------------------------------*
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
*----------------------------------------------------------------------*
CLASS application IMPLEMENTATION.

*----------------------------------------------------------------------*
*       METHOD f4_alv_variant
*----------------------------------------------------------------------*
  METHOD 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.                    " f4_alv_variant
*----------------------------------------------------------------------*
*       METHOD init
*----------------------------------------------------------------------*
  METHOD init.

*  CLEAR so_matnr.
*  so_matnr-sign = 'I'.
*  so_matnr-option = 'CP'.
*  so_matnr-low = '800000004*'.
    APPEND INITIAL LINE TO so_lbkum ASSIGNING FIELD-SYMBOL(<so_lbkum>).
    <so_lbkum>-sign = 'I'.
    <so_lbkum>-option = 'GT'.
    <so_lbkum>-low = 0.
    APPEND INITIAL LINE TO so_vprsv ASSIGNING FIELD-SYMBOL(<so_vprsv>).
    <so_vprsv>-sign = 'I'.
    <so_vprsv>-option = 'EQ'.
    <so_vprsv>-low = 'V'.
    APPEND INITIAL LINE TO so_verpr ASSIGNING FIELD-SYMBOL(<so_verpr>).
    <so_verpr>-sign = 'I'.
    <so_verpr>-option = 'BT'.
    <so_verpr>-low = 0.
    <so_verpr>-high = 1.

  ENDMETHOD.
*----------------------------------------------------------------------*
*       METHOD run
*----------------------------------------------------------------------*
  METHOD run.
    "break-point.
    application=>collect_alv( CHANGING gt_alv = gt_alv ).
    application=>show_alv( CHANGING gt_alv = gt_alv ).
  ENDMETHOD.

*----------------------------------------------------------------------*
*       METHOD collect_alv
*----------------------------------------------------------------------*
  METHOD collect_alv.

    SELECT a~matnr, maktx, lbkum, meins, salk3,  vprsv, verpr, stprs, peinh, bklas, mtart, matkl, maabc, abwkz
*         matnr     TYPE matnr,
*         lbkum     TYPE lbkum,
*         salk3     TYPE salk3,
*         vprsv     TYPE vprsv,
*         verpr     TYPE verpr,
*         stprs     TYPE stprs,
*         peinh     TYPE peinh,
*         bklas     TYPE bklas, "Bewertungsklasse
*         mtart     TYPE mtart,
*         matkl     TYPE matkl,
*         bemer(30) TYPE c,
*         ampel(4)  TYPE c,
    FROM ( ( mara AS a INNER JOIN mbew AS b ON a~matnr = b~matnr )  INNER JOIN marc AS c ON b~matnr = c~matnr ) INNER JOIN makt AS d ON a~matnr = d~matnr
    INTO CORRESPONDING FIELDS OF TABLE @gt_alv2
    WHERE a~matnr IN @so_matnr
   AND lbkum IN @so_lbkum
   AND salk3 IN @so_salk3
   AND vprsv IN @so_vprsv
   AND verpr IN @so_verpr
   AND stprs IN @so_stprs
   AND peinh IN @so_peinh
   AND bklas IN @so_bklas
   AND mtart IN @so_mtart
   AND matkl IN @so_matkl
   and maktx in @so_maktx
   AND spras EQ 'DE'
   .


*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>).
      "<gs_alv>-ampel = '@EB@'. "Kein Licht
      IF <gs_alv>-lbkum > 0.
        <gs_alv>-ampel1 = '@0A@'. "Rot: Bestand
      ELSE.
        <gs_alv>-ampel1 = '@EB@'. "Kein Licht: Kein Bestand
      ENDIF.
      <gs_alv>-ampel2 = '@0A@'. "Rot Preis
      IF <gs_alv>-peinh EQ 1.
        <gs_alv>-ampel3 = '@0A@'. "Rot: Preiseinheit 1
      ELSE.
        <gs_alv>-ampel3 = '@EB@'.  "Kein Licht: Preiseinheit 1000
      ENDIF.
      IF <gs_alv>-vprsv EQ 'V'.
        <gs_alv>-ampel4 = '@0A@'. "Rot: Gleitender Preis
      ELSE.
        <gs_alv>-ampel4 = '@EB@'.  "Kein Licht: Standardpreis
      ENDIF.
      IF <gs_alv>-maabc EQ 'L'.
        <gs_alv>-ampel5 = '@08@'. "Grün: Ladenhüter
      ELSEIF <gs_alv>-maabc EQ 'C'.
        <gs_alv>-ampel5 = '@09@'. "Gelb: Material geringe Bedeutung
      ELSE.
        <gs_alv>-ampel5 = '@0A@'.  "Rot: A/B
      ENDIF.
      IF <gs_alv>-abwkz GT 6.
        <gs_alv>-ampel6 = '@08@'. "Grün: Hohe Abwertung
      ELSEIF <gs_alv>-abwkz GT 1.
        <gs_alv>-ampel6 = '@09@'. "Gelb: Abwertung läuft
      ELSE.
        <gs_alv>-ampel6 = '@0A@'.  "Rot: Keine Abwertung
      ENDIF.

      APPEND <gs_alv> TO gt_alv.

    ENDLOOP.



    SORT gt_alv BY matnr mtart matkl bklas . "Materialart, Warengruppe, Bewertungsklasse.



  ENDMETHOD.

*----------------------------------------------------------------------*
*       METHOD show_alv
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
  METHOD 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 = 'Nullpreis:'.
    CONCATENATE gv_titel ' Keine Projektbestände ' INTO lv_titel.
    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 ).

    TRY.

*    "Sort einstellen
*    lr_sorts = lref_salv->get_sorts( ).
*    lr_sorts->add_sort( columnname = 'NACHN' subtotal = abap_true ).
**
*    "Aggregation einstellen
*    lr_aggs = lref_salv->get_aggregations( ).
*    lr_aggs->add_aggregation( 'ZTAGE' ).
*    lr_aggs->add_aggregation( 'ZSTUN' ).

        lr_column ?= lr_columns->get_column( 'BEMER' ).
        lr_column->set_visible( abap_false ).

        lr_column ?= lr_columns->get_column( 'AMPEL1' ).
        lr_column->set_short_text( 'Bestand').
        lr_column->set_medium_text( 'Bestand Status').
        lr_column->set_long_text( 'Bestand Status').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'AMPEL2' ).
        lr_column->set_short_text( 'Preis').
        lr_column->set_medium_text( 'Preis Status').
        lr_column->set_long_text( 'Preis Status').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'AMPEL3' ).
        lr_column->set_short_text( 'Preiseinh.').
        lr_column->set_medium_text( 'Preiseinheit Status').
        lr_column->set_long_text( 'Preiseinheit Status').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'AMPEL4' ).
        lr_column->set_short_text( 'V/S').
        lr_column->set_medium_text( 'Gleit. / Standard').
        lr_column->set_long_text( 'Gleit.Pr. / Standardpr.').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'AMPEL5' ).
        lr_column->set_short_text( 'A/B/C/L').
        lr_column->set_medium_text( 'ABC Kat.').
        lr_column->set_long_text( 'ABC Kategorie').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'AMPEL6' ).
        lr_column->set_short_text( 'Abw.').
        lr_column->set_medium_text( 'Abwertung').
        lr_column->set_long_text( 'Abwertung').
        lr_column->set_icon( abap_true ).

        lr_column ?= lr_columns->get_column( 'MATNR' ).
        lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

        "lr_columns->set_column_position( columnname = 'AMPEL1' position = 1 ).

**   set initial Layout

        "lf_variant = 'DEFAULT'.
        "lr_layout->set_initial_layout( lf_variant ).

* Ausgabe
        lref_salv->display( ).


      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.
  ENDMETHOD.


ENDCLASS.


*&---------------------------------------------------------------------*
*&      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 action
*----------------------------------------------------------------------*
FORM action TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
  IF column EQ 'MATNR' or 1 = 1.
    "FIELD-SYMBOLS: <lv_sobkz> TYPE mseg-sobkz.
    "ASSIGN COMPONENT column OF STRUCTURE gt_alv[ row ] TO <lv_sobkz>.
    PERFORM display_mm03 TABLES gt_alv USING row column.
  ENDIF.

ENDFORM.
*----------------------------------------------------------------------*
*       FORM display_MM03
*----------------------------------------------------------------------*
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.
*----------------------------------------------------------------------*
*       FORM display_document_div
*----------------------------------------------------------------------*
FORM display_document_div USING transaction TYPE ckmi1-awtyp
                            document TYPE ckmi1-awref
                            year TYPE ckmi1-aworg.
  DATA: lv_mblnr    TYPE mblnr,
        lv_mjahr    TYPE mjahr,
        lv_belnr    TYPE ck_belnr,
        lv_kjahr    TYPE ck_kjahr,
        lv_belnr_iv TYPE re_belnr, "invoice
        lv_belnr_am TYPE ko_belnr, "account maintenance
        lv_gjahr    TYPE gjahr,
        lv_belnr_s  TYPE aa_belnr. "settlement

  CASE transaction.
    WHEN 'MKPF'. "Material document
      "Progress bar for opening MIGO
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          text = 'Opening transaction MIGO...'.             "#EC NOTEXT
      "Call MIGO in display mode; this contains the authorization checks
      lv_mblnr = document. "to avoid type mismatch
      lv_mjahr = year. "automatic cast here
      CALL FUNCTION 'MIGO_DIALOG'
        EXPORTING
          i_action            = 'A04'
          i_refdoc            = 'R02'
          i_notree            = 'X'
          i_no_auth_check     = ' '
          i_deadend           = 'X'
          i_skip_first_screen = 'X'
          i_okcode            = 'OK_GO'
          i_mblnr             = lv_mblnr
          i_mjahr             = lv_mjahr.
    WHEN 'RMRP'. "Invoice document
      DATA: lv_vgart TYPE vgart.
      lv_belnr_iv = document. "to avoid type mismatch
      lv_gjahr = year. "automatic cast here
      "Check the document type of the Invoice-Document
      SELECT SINGLE vgart FROM rbkp INTO lv_vgart
       WHERE belnr = lv_belnr_iv
         AND gjahr = lv_gjahr.
      IF sy-subrc <> 0. "Document has been archived
        MESSAGE e184(m8) WITH lv_belnr_iv lv_gjahr.
      ENDIF.
      "KP =	Account maintenance
      "KS = Account maintenance Reversal >> can be opened in MR11SHOW
      IF lv_vgart EQ 'KP' OR lv_vgart EQ 'KS'.
        lv_belnr_am = document.
        SET PARAMETER ID: 'KBN' FIELD lv_belnr_am,
                          'GJR' FIELD lv_gjahr.
        PERFORM call_transaction USING 'MR11SHOW'.
        "RS = credit memo
        "RD = logistisc invoice  >> can be opened in MR11SHOW
      ELSE.
        SET PARAMETER ID: 'RBN' FIELD lv_belnr_iv,
                          'GJR' FIELD lv_gjahr.
        PERFORM call_transaction USING 'MIR4'.
      ENDIF.
    WHEN 'PRCHG'. "Price change document
      lv_belnr = document. "to avoid type mismatch
      lv_kjahr = year. "automatic cast here
      SET PARAMETER ID: 'MLN' FIELD lv_belnr,
                        'MLJ' FIELD lv_kjahr.
      PERFORM call_transaction USING 'CKMPCD'.
    WHEN 'MLHD'. "Material ledger document
      lv_belnr = document. "to avoid type mismatch
      lv_kjahr = year. "automatic cast here
      SET PARAMETER ID: 'MLN' FIELD lv_belnr,
                        'MLJ' FIELD lv_kjahr.
      PERFORM call_transaction USING 'CKMB'.
    WHEN 'AUAK'. "Settlement document
      lv_belnr_s = document. "to avoid type mismatch
      SET PARAMETER ID: 'BLN' FIELD lv_belnr_s.
      PERFORM call_transaction USING 'KO8B'.
  ENDCASE.
ENDFORM.            "display_document


*----------------------------------------------------------------------*
*       Events
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
  application=>f4_alv_variant( ). "p_var.

INITIALIZATION.
  application=>init( ).

AT SELECTION-SCREEN OUTPUT.

*  LOOP AT SCREEN.
*    IF screen-name = 'P_DATE'.
*      screen-input = 0.
*      screen-invisible = abap_false.
*      MODIFY SCREEN.
*    ENDIF.
*  ENDLOOP.

AT SELECTION-SCREEN.
  EXIT.

START-OF-SELECTION.
  application=>run( ).
  EXIT.