Conteúdo

Eliminar abas de-ate do Select-Options

Quando você precisa que um parâmetro tenha mais opções, mas que não pode ter a condição DE-ATÉ, ou seja, pode adicionar N opções, mas apenas na parte DE, não basta colocar NO INTERVALS no seu select-options, mas também é necessário restringir as abas DE-ATE quando clicar para adicionar novas opções.
REPORT ZSAPeiros.

* Declarar a tabela do seu Select-Options
* Obs.: Existem outras maneiras, mas esta é a mais prática
TABLES j_1bnfstx.

* Declarar os tipos necessários para eliminar as abas do select-options
TYPE-POOLS: sscr, sedi.

* Declare seu select-options
SELECT-OPTIONS: s_type FOR j_1bnfstx-taxtyp.

* O código deve ficar logo que se inicializa o programa
INITIALIZATION.

* Declarações necessárias para a função SELECT_OPTIONS_RESTRICT
* a qual é responsável pela restrinção do select-options
  DATA:
      ls_opt_list   TYPE sscr_opt_list,   "Option List
      ls_restrict   TYPE sscr_restrict,   "Option Restrict
      ls_ass        TYPE sscr_ass.        "Screen Object

* Limpe a estrutura sempre que for populá-la
  CLEAR ls_opt_list.

* Preencha o Option List
  ls_opt_list-name       = 'OBJECTKEY1'.
  ls_opt_list-options-bt = space.
  ls_opt_list-options-cp = space.
  ls_opt_list-options-eq = 'X'.
  ls_opt_list-options-ge = space.
  ls_opt_list-options-gt = space.
  ls_opt_list-options-le = space.
  ls_opt_list-options-lt = space.
  ls_opt_list-options-nb = space.
  ls_opt_list-options-ne = space.
  ls_opt_list-options-np = space.

* Adicione os dados da estrutura no Option Restrict-opt_list_tab
  APPEND ls_opt_list TO ls_restrict-opt_list_tab.

* Limpe a estrutura sempre que for populá-la
  CLEAR ls_ass.

* Preencha o Screen Object
  ls_ass-kind    = 'S'.
  ls_ass-name    = 'S_TYPE'.
  ls_ass-sg_main = 'I'.
  ls_ass-sg_addy = space.
  ls_ass-op_main = 'OBJECTKEY1'.

* Adicione os dados da estrutura no Option Restrict-ass_tab
  APPEND ls_ass TO ls_restrict-ass_tab.

* Chame a função que faz tal procedimento
  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
      program                = sy-repid
      restriction            = ls_restrict
    EXCEPTIONS
      too_late               = 1
      repeated               = 2
      selopt_without_options = 3
      selopt_without_signs   = 4
      invalid_sign           = 5
      empty_option_list      = 6
      invalid_kind           = 7
      repeated_kind_a        = 8
      OTHERS                 = 9.

  IF sy-subrc IS NOT INITIAL.
    MESSAGE 'Erro ao restringir abas do parâmetro de seleção!' TYPE 'E'.
  ENDIF.