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.


*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
  SET PF-STATUS 'PF_9001'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  INICIALIZATION_9001  OUTPUT
*&---------------------------------------------------------------------*
MODULE inicialization_9001 OUTPUT.

  IF o_grid IS NOT BOUND.

* seleção dos objetos do usuário que está processando o programa.
    SELECT FROM tadir
      INTO CORRESPONDING FIELDS OF TABLE gt_tadir
      WHERE author  sy-uname.

* Popula o range do popup de objetos.
    PERFORM popula_range.

* Criação de do Objeto docking que vai a tela alv
    CREATE OBJECT o_docking
      EXPORTING
        repid                       sy-repid
        dynnr                       '9001'
        extension                   9999
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.

* ALV
    CREATE OBJECT o_grid
      EXPORTING
        i_parent          o_docking    " Parent Container
      EXCEPTIONS
        error_cntl_create 1
        error_cntl_init   2
        error_cntl_link   3
        error_dp_create   4
        OTHERS            5.

    PERFORM add_fieldcatalog_alv_9001 USING :
*      Col  fname       tabname    texto     "Edit      "No_out    "CheckBox
       '1'  'SELECTED'  'GT_TADIR' 'Seleção' abap_true  abap_false abap_true,
       '2'  'OBJECT'    'GT_TADIR' 'Tipo'    abap_false abap_false abap_false,
       '3'  'OBJ_NAME'  'GT_TADIR' 'Nome'    abap_false abap_false abap_false,
       '4'  'KORRNUM'   'GT_TADIR' 'Ordem'   abap_false abap_false abap_false,
       '5'  'SRCSYSTEM' 'GT_TADIR' 'Sistema' abap_false abap_false abap_false,
       '6'  'DEVCLASS'  'GT_TADIR' 'Pacote'  abap_false abap_false abap_false.

    gs_layout-zebra       abap_true.
    gs_layout-cwidth_opt  abap_true.

* Exibe alv
    o_grid->set_table_for_first_display(
      EXPORTING
        is_layout                     gs_layout   " Layout
        it_toolbar_excluding          gt_exclude  " Excluded Toolbar Standard Functions
      CHANGING
        it_outtab                     gt_tadir     " Output Table
        it_fieldcatalog               gt_fieldcat " Field Catalog
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4
    ).

  ELSE.
    o_grid->refresh_table_display).

  ENDIF.


ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  ADD_FIELDCATALOG_ALV_9001
*&---------------------------------------------------------------------*
FORM add_fieldcatalog_alv_9001 USING
      col_pos    TYPE lvc_s_fcat-col_pos
      fieldname  TYPE lvc_s_fcat-fieldname
      tabname    TYPE lvc_s_fcat-tabname
      descricao  TYPE lvc_s_fcat-scrtext_s
      edit       TYPE lvc_s_fcat-edit
      no_out     TYPE lvc_s_fcat-no_out
      checkbox   TYPE lvc_s_fcat-checkbox.

  DATA :
     ls_fieldcat LIKE LINE OF gt_fieldcat.

  ls_fieldcat-col_pos   col_pos.
  ls_fieldcat-fieldname fieldname.
  ls_fieldcat-tabname   tabname.
  ls_fieldcat-scrtext_s ls_fieldcat-scrtext_m ls_fieldcat-scrtext_l =
    descricao.
  ls_fieldcat-edit      edit.
  ls_fieldcat-no_out    no_out.
  ls_fieldcat-checkbox  checkbox.

  APPEND ls_fieldcat TO gt_fieldcat.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

* Atualiza a tabela com as alterações
  o_grid->check_changed_data).

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN 'MALL'" Marca todos
      PERFORM marca_todos_alv.
    WHEN 'DALL'" Desmarca Todos.
      PERFORM desmarcar_todos_alv.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  DESMARCAR_TODOS_ALV
*&---------------------------------------------------------------------*
FORM desmarcar_todos_alv .

  FIELD-SYMBOLS :
      <tadir> LIKE LINE OF gt_tadir.

* Atualiza a tabela com as alterações
  o_grid->check_changed_data).

  LOOP AT gt_tadir ASSIGNING <tadir>.
    <tadir>-selected abap_false.
  ENDLOOP.

  o_grid->refresh_table_display).

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  MARCA_TODOS_ALV
*&---------------------------------------------------------------------*
FORM marca_todos_alv .

  FIELD-SYMBOLS :
    <tadir> LIKE LINE OF gt_tadir.
  DATA :
    lv_all   TYPE i,
    lv_count TYPE i.

* PopUp com todas as opções de status para identificar quais selecionar
  PERFORM :
    popup_com_multipla_escolha.

  lv_all linesgt_tadir ).

  IF  r_object[] IS NOT INITIAL.
    LOOP AT gt_tadir ASSIGNING <tadir>.
      IF <tadir>-object IN r_object.
        <tadir>-selected abap_true.
        ADD TO lv_count.
      ELSE.
        <tadir>-selected abap_false.
      ENDIF.
    ENDLOOP.
    gs_layout-grid_title  `Foram selecionadas ` && lv_count &&
          `/` && lv_all && ` registros!`.
    o_grid->set_frontend_layoutgs_layout ).
    o_grid->refresh_table_display).
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  POPULA_RANGE
*&---------------------------------------------------------------------*
FORM popula_range .

  DATA :
    lt_tadir TYPE TABLE OF ty_tadir,
    ls_tadir LIKE LINE OF lt_tadir,
    ls_popup LIKE LINE OF gt_popup.

  lt_tadir[] gt_tadir[].

  SORT lt_tadir BY object.
  DELETE ADJACENT DUPLICATES FROM lt_tadir
    COMPARING object.

  LOOP AT lt_tadir INTO ls_tadir.
    ls_popup-select abap_true.
    ls_popup-text   ls_tadir-object.
    COLLECT ls_popup INTO gt_popup.
  ENDLOOP.

ENDFORM.


 
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário