segunda-feira, 26 de junho de 2017

Função - REUSE_ALV_POPUP_TO_SELECT

REPORT zreuse_alv_popup_to_select.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
*  Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
*  Segue no final do código os prints do processo.
* Valeo.

* Tipos.
TYPES :
  BEGIN OF ty_tadir,
    selected.
        INCLUDE TYPE tadir.
TYPES :
  END OF ty_tadir.
TYPES :
  BEGIN OF ty_popup,
    select,
    text(50),
  END OF   ty_popup.

* Tabela global.
DATA :
  gt_popup    TYPE TABLE OF ty_popup.

* Variaveis referente ao ALVV
DATA :
* Objetos
  o_docking   TYPE REF TO cl_gui_docking_container,
  o_grid      TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
  gt_tadir    TYPE TABLE OF ty_tadir,
  gt_fieldcat TYPE TABLE OF lvc_s_fcat,
  gt_exclude  TYPE TABLE OF ui_func,
* Estruturas
  gs_layout   TYPE lvc_s_layo.

* Ranges
DATA :
  r_object TYPE RANGE OF char20.

* Inicio do processo.
START-OF-SELECTION.

* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
*  MODULE :
*    status_9001,
*    inicialization_9001.
*
*PROCESS AFTER INPUT.
*  MODULE :
*    user_command_9001.
*--------------------------------------------------------------------*

* Tela ALV principal.
  CALL SCREEN 9001.

*&---------------------------------------------------------------------*
*&      Form  POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .

  DATA :
    ls_popup      LIKE LINE OF gt_popup,
    lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
    ls_fcat_popup LIKE LINE OF lt_fcat_popup,
    lt_excl       TYPE slis_t_extab,
    ls_excl       TYPE slis_extab,
    ls_object     LIKE LINE OF r_object.

* Catalogo de campos do PopUp de opções.
  ls_fcat_popup-tabname   'LT_POPUP'.

  ls_fcat_popup-col_pos   '1'.
  ls_fcat_popup-fieldname 'SELECT'.
  ls_fcat_popup-seltext_m 'SELECT'.
  APPEND ls_fcat_popup TO lt_fcat_popup.

  ls_fcat_popup-col_pos   '2'.
  ls_fcat_popup-fieldname 'TEXT'.
  ls_fcat_popup-seltext_m 'Status'.
  ls_fcat_popup-outputlen 50.
  APPEND ls_fcat_popup TO lt_fcat_popup.

* Exclusão dos botões padrões do ALV.
  ls_excl-fcode '&ETA'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC'.  APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC+'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OUP'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ODN'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ILT'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OL0'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRB'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRR'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRE'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ALL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&SAL'APPEND ls_excl TO lt_excl.

  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_title               'Tipos de Objetos'
      i_zebra               abap_true
      i_screen_start_column 1
      i_screen_start_line   1
      i_checkbox_fieldname  'SELECT'
      i_tabname             'LT_POPUP'
      it_fieldcat           lt_fcat_popup
      it_excluding          lt_excl
    TABLES
      t_outtab              gt_popup
    EXCEPTIONS
      program_error         1
      OTHERS                2.

  FREE r_object.
  IF gt_popup[] IS NOT INITIAL.
    LOOP AT gt_popup INTO ls_popup.
      IF ls_popup-select abap_true..
        ls_object-sign   'I'.
        ls_object-option 'EQ'.
        ls_object-low    ls_popup-text.
        APPEND ls_object TO r_object.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.