REPORT ztestautoselectoption.
************************************************************************
* DATA DECLARATIONS *
************************************************************************
*Tables:
TABLES:
vbap.
*Internal tables:
DATA:
gt_vbap TYPE STANDARD TABLE OF vbap,
gt_vari TYPE STANDARD TABLE OF rsparams.
*Field Symbols:
FIELD-SYMBOLS:
<fs_vbap> TYPE vbap.
*Structures:
DATA:
gst_vari TYPE rsparams,
gst_varidesc TYPE varid.
*Variables:
DATA:
gv_subrc TYPE sy-subrc.
*Constants:
CONSTANTS:
gc_write TYPE c VALUE 'W',
gc_selmat TYPE rsparams-selname VALUE 'S_MATNR',
gc_kind TYPE rsparams-kind VALUE 'S',
gc_sign TYPE rsparams-sign VALUE 'I',
gc_option TYPE rsparams-low VALUE 'EQ'.
************************************************************************
* SELECTION SCREEN *
************************************************************************
SELECT-OPTIONS:
* Material Number.
s_matnr FOR vbap-matnr OBLIGATORY.
************************************************************************
* CODE LOGIC *
************************************************************************
*Check if the variant used to run the program exists.
CALL FUNCTION 'RS_VARIANT_EXISTS'
EXPORTING
report = sy-repid "Program Name
variant = sy-slset "Variant Name
IMPORTING
r_c = gv_subrc
EXCEPTIONS
not_authorized = 01
no_report = 02
report_not_existent = 03
report_not_supplied = 04.
IF gv_subrc EQ 0.
* Select sales order data from table VBAP.
SELECT * UP TO 10 ROWS
FROM vbap
INTO TABLE gt_vbap.
IF sy-subrc EQ 0.
* Retrieve the contents of the variant to the internal table 'GT_VARI'.
CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
report = sy-repid "Program Name
variant = sy-slset "Variant Name
move_or_write = gc_write
TABLES
valutab = gt_vari "Variant Contents
EXCEPTIONS
variant_non_existent = 1
variant_obsolete = 2
OTHERS = 3.
IF sy-subrc EQ 0.
* Delete the current content of select option 'S_MATNR' from the variant. This is
* done by deleting all 'S_MATNR' selname entries from material select option(GT_VARI).
* We will then populate it with fresh new data later on.
DELETE gt_vari WHERE selname EQ gc_selmat.
* Building up and assigning new material numbers to
* the table variant(GT_VARI).
LOOP AT gt_vbap ASSIGNING <fs_vbap>.
* Assigning the necessary values and parameters
* to the select options via the table LT_VARI.
gst_vari-selname = gc_selmat.
gst_vari-kind = gc_kind.
gst_vari-option = gc_option.
gst_vari-sign = gc_sign.
gst_vari-low = <fs_vbap>-matnr.
* Appending the material number to the select option.
APPEND gst_vari TO gt_vari.
ENDLOOP.
* Re-populating the variant description.
gst_varidesc-mandt = sy-mandt.
gst_varidesc-aename = sy-uname.
gst_varidesc-aedat = sy-datum.
gst_varidesc-aetime = sy-uzeit.
* Creating a new variant with the new values.
CALL FUNCTION 'RS_CHANGE_CREATED_VARIANT'
EXPORTING
curr_report = sy-repid "Program Name
curr_variant = sy-slset "Variant Name
vari_desc = gst_varidesc "Variant Description
TABLES
vari_contents = gt_vari "Variant Contents
EXCEPTIONS
illegal_report_or_variant = 1
illegal_variantname = 2
not_authorized = 3
not_executed = 4
report_not_existent = 5
report_not_supplied = 6
variant_doesnt_exist = 7
variant_locked = 8
selections_no_match = 9
OTHERS = 10.
IF sy-subrc EQ 0.
* Variant has been populated with new data successfully.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Serkan AKKAVAK
Computer Engineer
ABAP Developer & SAP S/4 HANA Logistics Consultant
Contact : serkurumsal@yandex.com
Social Plugin