Files
SAP-ZBOS/src/zbos_alv_iva_v2.prog.abap
2024-12-18 21:19:39 +00:00

826 lines
20 KiB
ABAP

*&---------------------------------------------------------------------*
*& Report ZBOS_ALV_IVA
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbos_alv_iva_v2.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_column_id
es_row_no.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_hotspot_click.
PERFORM handle_hotspot_click
USING es_row_no-row_id
e_column_id-fieldname.
ENDMETHOD. "handle_hotspot_click
ENDCLASS.
TYPES:
BEGIN OF wy_alv_cima,
regra(15) TYPE c,
campos TYPE string,
tabela(30) TYPE c,
icon_det(4) TYPE c,
END OF wy_alv_cima,
BEGIN OF wy_alv_baixo,
campo TYPE string,
elemento TYPE string,
END OF wy_alv_baixo,
BEGIN OF wy_alv_componente,
tipo(30) TYPE c, ""tipo do objeto
nome(30) TYPE c, ""Nome do objeto
existe(4) TYPE c, ""Se existe no ambiente
icon_criar(4) TYPE c, ""icone de criar
END OF wy_alv_componente,
BEGIN OF wy_tadir,
object TYPE trobjtype,
obj_name TYPE sobj_name,
END OF wy_tadir,
ty_tadir TYPE TABLE OF wy_tadir,
ty_alv_componente TYPE TABLE OF wy_alv_componente,
ty_alv_baixo TYPE TABLE OF wy_alv_baixo,
ty_alv_cima TYPE TABLE OF wy_alv_cima.
DATA: gt_dados_baixo TYPE ty_alv_baixo.
TYPES: BEGIN OF ty_dd03l,
tabname(30) TYPE c,
fieldname(30) TYPE c,
END OF ty_dd03l,
BEGIN OF wy_dados,
regra(15) TYPE c,
campos TYPE string,
tabela(90) TYPE c,
alv_campos LIKE gt_dados_baixo,
END OF wy_dados.
DATA: event_receiver TYPE REF TO lcl_event_handler.
DATA: it_tab TYPE filetable,
wa_tab TYPE LINE OF filetable,
gt_tab TYPE TABLE OF string,
gt_fieldcat TYPE lvc_t_fcat,
ls_tab TYPE string,
lv_pesquisa TYPE string,
ctl_alv_moni_hi TYPE REF TO cl_gui_alv_grid,
ctl_alv_moni_po_eq TYPE REF TO cl_gui_alv_grid,
ctl_alv_moni_po_dr TYPE REF TO cl_gui_alv_grid.
DATA: o_splitter_1 TYPE REF TO cl_gui_splitter_container,
o_splitter_2 TYPE REF TO cl_gui_splitter_container,
attach_container TYPE REF TO cl_gui_container,
o_parent_cima TYPE REF TO cl_gui_container,
o_parent_baixo_dir TYPE REF TO cl_gui_container,
o_parent_baixo_esq TYPE REF TO cl_gui_container.
DATA: gd_subrc TYPE i,
gt_dados TYPE TABLE OF wy_dados, """tabela todos os dados
gt_dados_cima TYPE TABLE OF wy_alv_cima . """tabela alv de cima os dados
DATA: gr_object TYPE RANGE OF tadir-object,
gs_object LIKE LINE OF gr_object.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
*PARAMETERS: p_tab(13) TYPE c NO-DISPLAY. " Nome da tabela
PARAMETERS: p_l_ini TYPE i DEFAULT '1'. " Número de linhas que vai ser ignoradas
PARAMETERS: p_file TYPE string. " File Name DEFAULT 'c:\test.csv',
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN.
* IF p_tab IS INITIAL.
* MESSAGE 'Favor informar o numero da condição' TYPE 'S' DISPLAY LIKE 'E'.
* LEAVE SCREEN .
* IF p_l_ini IS INITIAL.
* MESSAGE 'Favor informar o numero de linhas de cabeçalho' TYPE 'S' DISPLAY LIKE 'E'.
* LEAVE SCREEN .
* ELSEIF p_file IS INITIAL.
* MESSAGE 'Favor informar o arquivo' TYPE 'S' DISPLAY LIKE 'E'.
* LEAVE SCREEN .
* ENDIF.
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*----------------------------------------------------------------------*
* Localizar o diretório com os arquivos XLS
PERFORM f_busca_arquivo CHANGING p_file.
START-OF-SELECTION.
*Busca arquivos excel.
PERFORM cria_range_tadir.
CALL SCREEN 100.
* PERFORM f_upload_excel_file.
END-OF-SELECTION.
* CHECK NOT gt_msg IS INITIAL.
* PERFORM f_alv_msg.
REFRESH gt_tab.
FORM f_busca_arquivo CHANGING p_p_file.
REFRESH: it_tab.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Select File'
default_filename = '*.csv'
multiselection = ' '
CHANGING
file_table = it_tab
rc = gd_subrc.
READ TABLE it_tab INTO wa_tab INDEX 1.
IF sy-subrc IS INITIAL.
p_file = wa_tab-filename.
ENDIF.
ENDFORM.
FORM f_upload_excel_file.
REFRESH gt_tab.
DATA:ls_linha TYPE wy_dados,
ls_dados_cima TYPE wy_alv_cima,
ls_dados_baixo TYPE wy_alv_baixo.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = p_file
filetype = 'ASC'
read_by_line = 'X'
codepage = space
CHANGING
data_tab = gt_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF NOT p_l_ini IS INITIAL.
DO p_l_ini TIMES.
DELETE gt_tab INDEX 1.
ENDDO.
ENDIF.
LOOP AT gt_tab INTO ls_tab.
CLEAR ls_linha.
SPLIT ls_tab AT ';' INTO ls_linha-regra
ls_linha-campos.
PERFORM valida_tabela USING ls_linha.
APPEND ls_linha TO gt_dados.
MOVE-CORRESPONDING ls_linha TO ls_dados_cima.
ls_dados_cima-icon_det = '@90@'.
APPEND ls_dados_cima TO gt_dados_cima.
CLEAR: ls_linha,
ls_dados_cima.
ENDLOOP.
PERFORM monta_alv.
ENDFORM.
FORM valida_tabela USING p_linha TYPE wy_dados.
DATA:lt_campos TYPE TABLE OF string,
lv_campo TYPE string,
lt_campos_tab TYPE TABLE OF string,
lv_campos_tab TYPE wy_alv_baixo,
lt_colunas TYPE TABLE OF string,
lv_coluna TYPE string.
SPLIT p_linha-campos AT '/' INTO TABLE lt_campos.
"converter
LOOP AT lt_campos INTO lv_campo.
*** de/para dos campos
*** Form com case entra nome sai prefixo, campo e elemento
CONDENSE lv_campo NO-GAPS.
PERFORM busca_campo CHANGING lv_campo
lv_campos_tab.
IF lv_campo IS NOT INITIAL.
APPEND lv_campo TO lt_colunas.
APPEND lv_campos_tab TO p_linha-alv_campos.
ENDIF.
ENDLOOP.
DATA: lt_dd03l TYPE TABLE OF ty_dd03l,
ls_dd03l TYPE ty_dd03l,
lt_cond TYPE TABLE OF fieldname,
lt_fields TYPE TABLE OF string,
lt_table_unique TYPE TABLE OF ty_dd03l,
ls_unique TYPE ty_dd03l,
lv_table_name(25) TYPE c. ""tablename.
** CHECK lv_pesquisa IS NOT INITIAL.
* PARAMETERS campos TYPE string DEFAULT 'Exemplo: MATNR,LIFNR,WERKS'.
** SPLIT lv_pesquisa AT ',' INTO TABLE lt_fields.
SELECT tabname fieldname
FROM dd03l
INTO TABLE lt_dd03l
WHERE keyflag = 'X'
AND tabname LIKE '/VTIVA/COND%'
AND fieldname NOT IN ('MANDT', '.INCLUDE', 'VTIVA_DET').
SORT lt_dd03l BY tabname.
lt_table_unique = lt_dd03l.
DELETE ADJACENT DUPLICATES FROM lt_table_unique COMPARING tabname.
SORT lt_table_unique BY tabname.
LOOP AT lt_table_unique INTO ls_unique.
LOOP AT lt_dd03l INTO ls_dd03l WHERE tabname = ls_unique-tabname.
IF ls_dd03l-fieldname+2(1) = '_'.
APPEND ls_dd03l-fieldname+3 TO lt_cond.
ELSE.
APPEND ls_dd03l-fieldname TO lt_cond.
ENDIF.
ENDLOOP.
SORT lt_cond.
SORT lt_colunas. "lt_fields.
**comparar tabelas
IF lt_cond = lt_colunas. "lt_fields.
lv_table_name = ls_unique-tabname.
IF p_linha-tabela IS INITIAL.
p_linha-tabela = lv_table_name.
ELSE.
p_linha-tabela = p_linha-tabela && ` - ` && lv_table_name.
ENDIF.
ENDIF.
CLEAR lt_cond.
ENDLOOP.
*** IF lv_table_name IS INITIAL.
** "Sugestao de tabela
*** WRITE: / 'Nenhuma tabela encontrada com todos os campos necessários.REGRA: ', p_linha-regra .
*** LOOP AT p_linha-alv_campos INTO lv_campos_tab.
*** WRITE: / lv_campos_tab-campo, ' ', lv_campos_tab-elemento.
***
*** ENDLOOP.
*** WRITE: /.
*** WRITE: /.
*** ENDIF.
ENDFORM.
FORM monta_alv.
DATA: lt_fieldcat TYPE lvc_t_fcat.
DATA: lt_exit_events TYPE slis_t_event_exit.
DATA: ls_layout TYPE lvc_s_layo.
* DATA: event_receiver TYPE REF TO lcl_event_handler.
"Geral dividido ao meio cima e baixo
CREATE OBJECT o_splitter_1
EXPORTING
parent = cl_gui_container=>default_screen
rows = 2
columns = 1.
"Cria o conteiner de cima
CALL METHOD o_splitter_1->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = o_parent_cima.
"Conteiner de Baixo
attach_container = o_splitter_1->get_container( row = 2 column = 1 ). "pega a segunda linha
"Splitar o conteiner de baixo.
CREATE OBJECT o_splitter_2
EXPORTING
parent = attach_container "cl_gui_container=>default_screen conteiner de baixo
rows = 1
columns = 2.
CALL METHOD o_splitter_2->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = o_parent_baixo_esq.
CALL METHOD o_splitter_2->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = o_parent_baixo_dir.
* "mesma coisa de cima
* o_parent_baixo_dir = o_splitter_2->get_container( row = 1 column = 2 )
CALL METHOD o_splitter_1->set_row_height
EXPORTING
id = 1
height = 50.
CREATE OBJECT ctl_alv_moni_hi
EXPORTING
i_parent = o_parent_cima.
CREATE OBJECT ctl_alv_moni_po_eq
EXPORTING
i_parent = o_parent_baixo_esq.
CREATE OBJECT ctl_alv_moni_po_dr
EXPORTING
i_parent = o_parent_baixo_dir.
PERFORM get_layout CHANGING lt_fieldcat.
ls_layout-zebra = abap_true.
ls_layout-cwidth_opt = abap_true.
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_hotspot_click FOR ctl_alv_moni_hi.
* Send data to ALV grid
CALL METHOD ctl_alv_moni_hi->set_table_for_first_display
EXPORTING
is_layout = ls_layout ""wa_layout
i_structure_name = 'WY_ALV_CIMA'
* is_variant = wa_variant
* i_save = 'A'
* it_toolbar_excluding = t_exclude_fcode
CHANGING
it_fieldcatalog = lt_fieldcat
it_outtab = gt_dados_cima. "'t_nfe.
ENDFORM.
FORM get_layout CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA: ls_fcat TYPE lvc_s_fcat.
ls_fcat-fieldname = 'REGRA'.
ls_fcat-scrtext_m = 'Regra'.
ls_fcat-col_pos = 1.
APPEND ls_fcat TO pt_fieldcat.
ls_fcat-fieldname = 'CAMPOS'.
ls_fcat-scrtext_m = 'Campos'.
ls_fcat-col_pos = 2.
APPEND ls_fcat TO pt_fieldcat.
ls_fcat-fieldname = 'TABELA'.
ls_fcat-scrtext_m = 'Tabela'.
ls_fcat-col_pos = 3.
APPEND ls_fcat TO pt_fieldcat.
ls_fcat-fieldname = 'ICON_DET'.
ls_fcat-scrtext_m = 'det.'.
ls_fcat-hotspot = 'X'.
ls_fcat-just = 'C'.
ls_fcat-col_pos = 4.
APPEND ls_fcat TO pt_fieldcat.
*** APPEND INITIAL LINE TO pt_fieldcat ASSIGNING <fs_fcat>.
*** <fs_fcat>-fieldname = 'ICON'.
*** ls_fcat-scrtext_m = 'Tabela'.
*** ls_fcat-col_pos = 3.
*** <fs_fcat>-icon = 'X'.
*** <fs_fcat>-outputlen = 3.
*** <fs_fcat>-hotspot = 'X'.
*** <fs_fcat>-just = 'C'.
ENDFORM.
FORM handle_hotspot_click USING p_row_id TYPE lvc_s_roid-row_id
p_fieldname TYPE lvc_s_col-fieldname.
* DATA: lt_dados TYPE ty_alv_baixo.
* DATA: lt_fieldcat TYPE lvc_t_fcat.
* DATA: ls_fcat TYPE lvc_s_fcat.
* DATA: ls_layout TYPE lvc_s_layo.
* DATA: ls_dados TYPE wy_dados.
CASE p_fieldname .
WHEN 'ICON_DET'.
PERFORM display_esquerdo USING p_row_id.
PERFORM display_direito USING p_row_id.
WHEN 'ICON_CRIAR'.
PERFORM criar_objetos USING p_row_id.
WHEN OTHERS.
ENDCASE.
ENDFORM.
FORM display_esquerdo USING p_row_id TYPE lvc_s_roid-row_id.
DATA: lt_fieldcat TYPE lvc_t_fcat.
DATA: ls_fcat TYPE lvc_s_fcat.
DATA: ls_layout TYPE lvc_s_layo.
DATA: ls_dados TYPE wy_dados.
READ TABLE gt_dados INTO ls_dados INDEX p_row_id.
* ls_dados-alv_campos
ls_fcat-fieldname = 'CAMPO'.
ls_fcat-scrtext_m = 'Campo'.
ls_fcat-col_pos = 1.
APPEND ls_fcat TO lt_fieldcat.
ls_fcat-fieldname = 'ELEMENTO'.
ls_fcat-scrtext_m = 'Elemento de dados'.
ls_fcat-col_pos = 2.
APPEND ls_fcat TO lt_fieldcat.
ls_layout-zebra = abap_true.
ls_layout-cwidth_opt = abap_true.
CALL METHOD ctl_alv_moni_po_eq->set_table_for_first_display
EXPORTING
is_layout = ls_layout ""wa_layout
i_structure_name = 'WY_ALV_BAIXO'
* is_variant = wa_variant
* i_save = 'A'
* it_toolbar_excluding = t_exclude_fcode
CHANGING
it_fieldcatalog = lt_fieldcat
it_outtab = ls_dados-alv_campos. "'t_nfe.
ENDFORM.
MODULE status_0100 OUTPUT.
SET PF-STATUS 'S0100'.
SET TITLEBAR 'ALV_EXAMPLES'.
PERFORM f_upload_excel_file.
ENDMODULE.
MODULE display_grid OUTPUT.
PERFORM f_upload_excel_file.
ENDMODULE.
MODULE user_command_0100 INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE sy-ucomm.
WHEN 'BACK'.
CLEAR sy-ucomm.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
CLEAR sy-ucomm.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
FORM busca_campo CHANGING p_campo TYPE string
p_campo_tab TYPE wy_alv_baixo.
CASE p_campo.
WHEN 'Util.Material'.
p_campo = 'J_1BMATUSE'.
p_campo_tab-campo = 'IT_J_1BMATUSE'.
p_campo_tab-elemento = 'J_1BMATUSE '.
WHEN 'Material'.
p_campo = 'MATNR'.
p_campo_tab-campo = 'IT_MATNR'.
p_campo_tab-elemento = 'MATNR'.
WHEN 'Fornecedor'.
p_campo = 'LIFNR'.
p_campo_tab-campo = 'LF_LIFNR'.
p_campo_tab-elemento = 'LIFNR'.
WHEN OTHERS.
""COLOCAR MSG de ERRO
CLEAR p_campo.
ENDCASE.
ENDFORM.
FORM display_direito USING p_row_id TYPE lvc_s_roid-row_id.
** BEGIN OF wy_alv_componentes,
** tipo(30) TYPE c, ""tipo do objeto
** nome(30) TYPE c, ""Nome do objeto
** existe(4) TYPE c, ""Se existe no ambiente
** icon(4) TYPE c, ""icone de criar
** END OF wy_alv_componentes,
**ty_alv_componente TYPE TABLE OF wy_alv_componentes,
DATA: lt_fieldcat TYPE lvc_t_fcat,
lt_componentes TYPE ty_alv_componente.
DATA: ls_layout TYPE lvc_s_layo.
DATA: ls_dados TYPE wy_dados.
READ TABLE gt_dados INTO ls_dados INDEX p_row_id.
PERFORM cria_fieldcat_componentes CHANGING lt_fieldcat.
PERFORM preenche_tab_componentes USING ls_dados-tabela
CHANGING lt_componentes.
ls_layout-zebra = abap_true.
ls_layout-no_toolbar = abap_true.
ls_layout-grid_title = 'Componentes'.
* ls_layout-cwidth_opt = abap_true.
READ TABLE gt_dados INTO ls_dados INDEX p_row_id.
SET HANDLER event_receiver->handle_hotspot_click FOR ctl_alv_moni_po_dr.
CALL METHOD ctl_alv_moni_po_dr->set_table_for_first_display
EXPORTING
is_layout = ls_layout ""wa_layout
i_structure_name = 'WY_ALV_BAIXO'
* is_variant = wa_variant
* i_save = 'A'
* it_toolbar_excluding = t_exclude_fcode
CHANGING
it_fieldcatalog = lt_fieldcat
it_outtab = lt_componentes. "'t_nfe.
* CALL METHOD ctl_alv_moni_po_dr->set_too
ENDFORM.
FORM preenche_tab_componentes USING p_tab TYPE wy_dados-tabela
CHANGING pt_componentes TYPE ty_alv_componente.
DATA: ls_componentes TYPE wy_alv_componente.
DATA: lt_tadir TYPE ty_tadir.
DATA: ls_tadir TYPE wy_tadir.
DATA: lv_objeto(11) TYPE c.
DATA: lv_nuntab(3) TYPE c. "Numero da tabela encontrado
IF p_tab IS NOT INITIAL.
* FIND REGEX '\d{3}' IN p_tab MATCH OFFSET lv_nuntab.
lv_nuntab = p_tab+12.
lv_objeto = '/VTIVA/%' && lv_nuntab.
SELECT object obj_name
FROM tadir
INTO TABLE lt_tadir
WHERE object IN gr_object
AND obj_name LIKE lv_objeto.
ENDIF.
* '@0V@'." OK; Continue; Choose <va
* '@0W@'." Cancel
* '@3J@'." Set status tabela criada
* '@1T@'." Time criar
ls_componentes-tipo = 'Tabela'.
READ TABLE lt_tadir INTO ls_tadir WITH KEY object = 'TABL'.
IF sy-subrc IS INITIAL.
ls_componentes-nome = ls_tadir-obj_name. CLEAR ls_tadir.
ls_componentes-existe = '@0V@'.
ls_componentes-icon_criar = '@3J@'.
ELSE.
ls_componentes-existe = '@0W@'.
ls_componentes-icon_criar = '@1T@'.
ENDIF.
APPEND ls_componentes TO pt_componentes.
CLEAR ls_componentes.
ls_componentes-tipo = 'Transação'.
READ TABLE lt_tadir INTO ls_tadir WITH KEY object = 'TRAN'.
IF sy-subrc IS INITIAL.
ls_componentes-nome = ls_tadir-obj_name. CLEAR ls_tadir.
ls_componentes-existe = '@0V@'.
ls_componentes-icon_criar = '@3J@'.
ELSE.
ls_componentes-existe = '@0W@'.
ls_componentes-icon_criar = '@1T@'.
ENDIF.
APPEND ls_componentes TO pt_componentes.
CLEAR ls_componentes.
ls_componentes-tipo = 'Programa'.
READ TABLE lt_tadir INTO ls_tadir WITH KEY object = 'PROG'.
IF sy-subrc IS INITIAL.
ls_componentes-nome = ls_tadir-obj_name. CLEAR ls_tadir.
ls_componentes-existe = '@0V@'.
ls_componentes-icon_criar = '@3J@'.
ELSE.
ls_componentes-existe = '@0W@'.
ls_componentes-icon_criar = '@1T@'.
ENDIF.
APPEND ls_componentes TO pt_componentes.
CLEAR ls_componentes.
ls_componentes-tipo = 'Classe'.
READ TABLE lt_tadir INTO ls_tadir WITH KEY object = 'CLAS'.
IF sy-subrc IS INITIAL.
ls_componentes-nome = ls_tadir-obj_name. CLEAR ls_tadir.
ls_componentes-existe = '@0V@'.
ls_componentes-icon_criar = '@3J@'.
ELSE.
ls_componentes-existe = '@0W@'.
ls_componentes-icon_criar = '@1T@'.
ENDIF.
APPEND ls_componentes TO pt_componentes.
CLEAR ls_componentes.
ENDFORM.
FORM cria_fieldcat_componentes CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA: ls_fcat TYPE lvc_s_fcat.
ls_fcat-fieldname = 'TIPO'.
ls_fcat-scrtext_m = 'Tipo'.
ls_fcat-col_pos = 1.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'NOME'.
ls_fcat-scrtext_m = 'Nome'.
ls_fcat-edit = abap_true.
ls_fcat-outputlen = 40.
ls_fcat-col_pos = 2.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'EXISTE'.
ls_fcat-scrtext_m = 'Existe'.
ls_fcat-col_pos = 3.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ICON_CRIAR'.
ls_fcat-scrtext_m = 'Criar'.
ls_fcat-hotspot = 'X'.
ls_fcat-just = 'C'.
ls_fcat-col_pos = 4.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ENDFORM.
FORM cria_range_tadir.
gs_object-sign = 'I'.
gs_object-option = 'EQ'.
"Tabela
gs_object-low = 'TABL'.
APPEND gs_object TO gr_object.
"Transação
gs_object-low = 'TRAN'.
APPEND gs_object TO gr_object.
"Programa
gs_object-low = 'PROG'.
APPEND gs_object TO gr_object.
"Classe
gs_object-low = 'CLAS'.
APPEND gs_object TO gr_object.
ENDFORM.
FORM criar_objetos USING p_row_id TYPE lvc_s_roid-row_id.
CASE p_row_id .
WHEN 1. "Tabela
PERFORM gera_tabl.
WHEN 2. "Transaçao
PERFORM gera_tran.
WHEN 3. "Programa
PERFORM gera_prog.
WHEN 4. "Classe
PERFORM gera_clas.
WHEN OTHERS.
ENDCASE.
ENDFORM.
FORM gera_tabl.
* DDIF_TABL_PUT
ENDFORM.
FORM gera_tran.
ENDFORM.
FORM gera_prog.
ENDFORM.
FORM gera_clas.
ENDFORM.