Função - REUSE_ALV_POPUP_TO_SELECT
Autor: Mauro Luiz Junior | Publicado: 2017-06-26T07:59:00-07:00


SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L0S31 {
font-style: italic;
color: #808080;
}
.L0S32 {
color: #3399FF;
}
.L0S33 {
color: #4DA619;
}
.L0S52 {
color: #0000FF;
}
.L0S55 {
color: #800080;
}
.L0S70 {
color: #808080;
}

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

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

*&nbsp;Tabela&nbsp;global.
DATA&nbsp;:
&nbsp;&nbsp;gt_popup&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;TABLE&nbsp;OF&nbsp;ty_popup.

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

*&nbsp;Ranges
DATA&nbsp;:
&nbsp;&nbsp;r_object&nbsp;TYPE&nbsp;RANGE&nbsp;OF&nbsp;char20.

*&nbsp;Inicio&nbsp;do&nbsp;processo.
START-OF-SELECTION.

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

*&nbsp;Tela&nbsp;ALV&nbsp;principal.
&nbsp;&nbsp;CALL&nbsp;SCREEN&nbsp;9001.

*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form&nbsp;&nbsp;POPUP_COM_MULTIPLA_ESCOLHA
*&amp;---------------------------------------------------------------------*
FORM&nbsp;popup_com_multipla_escolha&nbsp;.

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

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

&nbsp;&nbsp;ls_fcat_popup-col_pos&nbsp;&nbsp;&nbsp;=&nbsp;'1'.
&nbsp;&nbsp;ls_fcat_popup-fieldname&nbsp;=&nbsp;'SELECT'.
&nbsp;&nbsp;ls_fcat_popup-seltext_m&nbsp;=&nbsp;'SELECT'.
&nbsp;&nbsp;APPEND&nbsp;ls_fcat_popup&nbsp;TO&nbsp;lt_fcat_popup.

&nbsp;&nbsp;ls_fcat_popup-col_pos&nbsp;&nbsp;&nbsp;=&nbsp;'2'.
&nbsp;&nbsp;ls_fcat_popup-fieldname&nbsp;=&nbsp;'TEXT'.
&nbsp;&nbsp;ls_fcat_popup-seltext_m&nbsp;=&nbsp;'Status'.
&nbsp;&nbsp;ls_fcat_popup-outputlen&nbsp;=&nbsp;50.
&nbsp;&nbsp;APPEND&nbsp;ls_fcat_popup&nbsp;TO&nbsp;lt_fcat_popup.

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

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

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

ENDFORM.


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

*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Module&nbsp;&nbsp;INICIALIZATION_9001&nbsp;&nbsp;OUTPUT
*&amp;---------------------------------------------------------------------*
MODULE&nbsp;inicialization_9001&nbsp;OUTPUT.

&nbsp;&nbsp;IF&nbsp;o_grid&nbsp;IS&nbsp;NOT&nbsp;BOUND.

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

*&nbsp;Popula&nbsp;o&nbsp;range&nbsp;do&nbsp;popup&nbsp;de&nbsp;objetos.
&nbsp;&nbsp;&nbsp;&nbsp;PERFORM&nbsp;popula_range.

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

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

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

&nbsp;&nbsp;&nbsp;&nbsp;gs_layout-zebra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;abap_true.
&nbsp;&nbsp;&nbsp;&nbsp;gs_layout-cwidth_opt&nbsp;&nbsp;=&nbsp;abap_true.

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

&nbsp;&nbsp;ELSE.
&nbsp;&nbsp;&nbsp;&nbsp;o_grid-&gt;refresh_table_display(&nbsp;).

&nbsp;&nbsp;ENDIF.


ENDMODULE.

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

&nbsp;&nbsp;DATA&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls_fieldcat&nbsp;LIKE&nbsp;LINE&nbsp;OF&nbsp;gt_fieldcat.

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

&nbsp;&nbsp;APPEND&nbsp;ls_fieldcat&nbsp;TO&nbsp;gt_fieldcat.

ENDFORM.

*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Module&nbsp;&nbsp;USER_COMMAND_9001&nbsp;&nbsp;INPUT
*&amp;---------------------------------------------------------------------*
MODULE&nbsp;user_command_9001&nbsp;INPUT.

*&nbsp;Atualiza&nbsp;a&nbsp;tabela&nbsp;com&nbsp;as&nbsp;alterações
&nbsp;&nbsp;o_grid-&gt;check_changed_data(&nbsp;).

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

ENDMODULE.
*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form&nbsp;&nbsp;DESMARCAR_TODOS_ALV
*&amp;---------------------------------------------------------------------*
FORM&nbsp;desmarcar_todos_alv&nbsp;.

&nbsp;&nbsp;FIELD-SYMBOLS&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tadir&gt;&nbsp;LIKE&nbsp;LINE&nbsp;OF&nbsp;gt_tadir.

*&nbsp;Atualiza&nbsp;a&nbsp;tabela&nbsp;com&nbsp;as&nbsp;alterações
&nbsp;&nbsp;o_grid-&gt;check_changed_data(&nbsp;).

&nbsp;&nbsp;LOOP&nbsp;AT&nbsp;gt_tadir&nbsp;ASSIGNING&nbsp;&lt;tadir&gt;.
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tadir&gt;-selected&nbsp;=&nbsp;abap_false.
&nbsp;&nbsp;ENDLOOP.

&nbsp;&nbsp;o_grid-&gt;refresh_table_display(&nbsp;).

ENDFORM.

*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form&nbsp;&nbsp;MARCA_TODOS_ALV
*&amp;---------------------------------------------------------------------*
FORM&nbsp;marca_todos_alv&nbsp;.

&nbsp;&nbsp;FIELD-SYMBOLS&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tadir&gt;&nbsp;LIKE&nbsp;LINE&nbsp;OF&nbsp;gt_tadir.
&nbsp;&nbsp;DATA&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;lv_all&nbsp;&nbsp;&nbsp;TYPE&nbsp;i,
&nbsp;&nbsp;&nbsp;&nbsp;lv_count&nbsp;TYPE&nbsp;i.

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

&nbsp;&nbsp;lv_all&nbsp;=&nbsp;lines(&nbsp;gt_tadir&nbsp;).

&nbsp;&nbsp;IF&nbsp;&nbsp;r_object[]&nbsp;IS&nbsp;NOT&nbsp;INITIAL.
&nbsp;&nbsp;&nbsp;&nbsp;LOOP&nbsp;AT&nbsp;gt_tadir&nbsp;ASSIGNING&nbsp;&lt;tadir&gt;.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&lt;tadir&gt;-object&nbsp;IN&nbsp;r_object.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tadir&gt;-selected&nbsp;=&nbsp;abap_true.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;1&nbsp;TO&nbsp;lv_count.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tadir&gt;-selected&nbsp;=&nbsp;abap_false.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF.
&nbsp;&nbsp;&nbsp;&nbsp;ENDLOOP.
&nbsp;&nbsp;&nbsp;&nbsp;gs_layout-grid_title&nbsp;&nbsp;=&nbsp;`Foram&nbsp;selecionadas&nbsp;`&nbsp;&amp;&amp;&nbsp;lv_count&nbsp;&amp;&amp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`/`&nbsp;&amp;&amp;&nbsp;lv_all&nbsp;&amp;&amp;&nbsp;`&nbsp;registros!`.
&nbsp;&nbsp;&nbsp;&nbsp;o_grid-&gt;set_frontend_layout(&nbsp;gs_layout&nbsp;).
&nbsp;&nbsp;&nbsp;&nbsp;o_grid-&gt;refresh_table_display(&nbsp;).
&nbsp;&nbsp;ENDIF.

ENDFORM.

*&amp;---------------------------------------------------------------------*
*&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form&nbsp;&nbsp;POPULA_RANGE
*&amp;---------------------------------------------------------------------*
FORM&nbsp;popula_range&nbsp;.

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

&nbsp;&nbsp;lt_tadir[]&nbsp;=&nbsp;gt_tadir[].

&nbsp;&nbsp;SORT&nbsp;lt_tadir&nbsp;BY&nbsp;object.
&nbsp;&nbsp;DELETE&nbsp;ADJACENT&nbsp;DUPLICATES&nbsp;FROM&nbsp;lt_tadir
&nbsp;&nbsp;&nbsp;&nbsp;COMPARING&nbsp;object.

&nbsp;&nbsp;LOOP&nbsp;AT&nbsp;lt_tadir&nbsp;INTO&nbsp;ls_tadir.
&nbsp;&nbsp;&nbsp;&nbsp;ls_popup-select&nbsp;=&nbsp;abap_true.
&nbsp;&nbsp;&nbsp;&nbsp;ls_popup-text&nbsp;&nbsp;&nbsp;=&nbsp;ls_tadir-object.
&nbsp;&nbsp;&nbsp;&nbsp;COLLECT&nbsp;ls_popup&nbsp;INTO&nbsp;gt_popup.
&nbsp;&nbsp;ENDLOOP.

ENDFORM.






&nbsp;