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