diff --git a/.abapgit.xml b/.abapgit.xml
new file mode 100644
index 0000000..7c0506a
--- /dev/null
+++ b/.abapgit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ E
+ /src/
+ PREFIX
+
+
+
diff --git a/src/package.devc.xml b/src/package.devc.xml
new file mode 100644
index 0000000..ea46bb8
--- /dev/null
+++ b/src/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ Pacote Bruno O. Santos
+
+
+
+
diff --git a/src/zbos_alv_iva.prog.abap b/src/zbos_alv_iva.prog.abap
new file mode 100644
index 0000000..328d1f3
--- /dev/null
+++ b/src/zbos_alv_iva.prog.abap
@@ -0,0 +1,590 @@
+*&---------------------------------------------------------------------*
+*& Report ZBOS_ALV_IVA
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+REPORT zbos_alv_iva.
+
+***CLASS lcl_event_receiver DEFINITION.
+***CLASS lcl_event_receiver IMPLEMENTATION.
+*** METHOD handle_double_click.
+*** DATA: l_lines TYPE i.
+*** DATA: lt_fieldcat_baixo TYPE lvc_t_fcat.
+***
+*** DESCRIBE TABLE gt_dados_cima LINES l_lines.
+***
+***
+*** ENDMETHOD. "handle_double_click
+***ENDCLASS.
+
+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(4) TYPE c,
+ END OF wy_alv_cima,
+
+ BEGIN OF wy_alv_baixo,
+ campo TYPE string,
+ elemento TYPE string,
+ END OF wy_alv_baixo,
+ 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 TYPE REF TO cl_gui_alv_grid.
+
+
+*DATA:it_tab TYPE filetable,
+* wa_tab TYPE LINE OF filetable,
+* gt_tab TYPE TABLE OF string,
+* ls_tab TYPE string,
+* lv_pesquisa TYPE string.
+DATA: o_splitter TYPE REF TO cl_gui_splitter_container,
+ o_parent_cima TYPE REF TO cl_gui_container,
+ o_parent_baixo 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 gt_alv.
+
+
+
+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.
+
+ 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 = '@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.
+
+
+ CREATE OBJECT o_splitter
+ EXPORTING
+ parent = cl_gui_container=>default_screen
+ rows = 2
+ columns = 1.
+
+
+ CALL METHOD o_splitter->get_container
+ EXPORTING
+ row = 1
+ column = 1
+ RECEIVING
+ container = o_parent_cima.
+
+ CALL METHOD o_splitter->get_container
+ EXPORTING
+ row = 1
+ column = 2
+ RECEIVING
+ container = o_parent_baixo.
+
+ CALL METHOD o_splitter->set_row_height
+ EXPORTING
+ id = 1
+ height = 70.
+
+
+ CREATE OBJECT ctl_alv_moni_hi
+ EXPORTING
+ i_parent = o_parent_cima.
+
+
+ CREATE OBJECT ctl_alv_moni_po
+ EXPORTING
+ i_parent = o_parent_baixo.
+
+
+ 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'.
+ 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 .
+*** -fieldname = 'ICON'.
+*** ls_fcat-scrtext_m = 'Tabela'.
+*** ls_fcat-col_pos = 3.
+*** -icon = 'X'.
+*** -outputlen = 3.
+*** -hotspot = 'X'.
+*** -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.
+
+ IF p_fieldname = 'ICON' .
+
+ 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->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.
+
+ ENDIF.
+
+
+ENDFORM.
+
+
+MODULE status_0100 OUTPUT.
+ SET PF-STATUS 'S0100'.
+ SET TITLEBAR 'ALV_EXAMPLES'.
+ PERFORM f_upload_excel_file.
+
+ENDMODULE.
+
+MODULE display_grid OUTPUT.
+* PERFORM read_data.
+ PERFORM f_upload_excel_file.
+
+ENDMODULE.
+
+**MODULE exit_command INPUT.
+**
+** 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.
+
+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.
+
+
+
+
+
+
+
+*** CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
+*** EXPORTING
+*** i_program_name = sy-repid
+*** i_internal_tabname = 'TY_LINHA'
+**** i_inclname = 'ZVTIVA_BUSCA_TAB'
+*** I_INCLNAME = sy-repid
+*** CHANGING
+*** ct_fieldcat = lt_fieldcat
+*** EXCEPTIONS
+*** inconsistent_interface = 1
+*** program_error = 2
+*** OTHERS = 3.
+*** IF sy-subrc <> 0.
+*** MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
+*** WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
+*** ENDIF.
+***
+***
+*** CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
+*** EXPORTING
+*** i_callback_program = sy-cprog
+*** i_callback_user_command = 'F_USER_COMMAND'
+*** is_layout = lt_fieldcat
+*** it_fieldcat = lt_fieldcat
+*** i_save = 'A'
+*** TABLES
+*** t_outtab = gt_alv
+*** EXCEPTIONS
+*** program_error = 1
+*** OTHERS = 2.
diff --git a/src/zbos_alv_iva.prog.xml b/src/zbos_alv_iva.prog.xml
new file mode 100644
index 0000000..d453f87
--- /dev/null
+++ b/src/zbos_alv_iva.prog.xml
@@ -0,0 +1,165 @@
+
+
+
+
+
+ ZBOS_ALV_IVA
+ 1
+ E
+ X
+ X
+
+
+ -
+
+ ZBOS_ALV_IVA
+ 0100
+ E
+ tela 100
+ N
+ 0100
+ 027
+ 120
+
+
+
+ SCREEN
+ SCREEN
+
+
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE STATUS_0100.
+
+
+
+ PROCESS AFTER INPUT.
+
+
+ *MODULE exit_command AT EXIT-COMMAND.
+
+
+ MODULE USER_COMMAND_0100.
+
+
+
+
+
+
+ 000001
+ 000001
+
+
+
+ S0100
+ D
+ 000001
+ 000001
+ 0001
+ status
+
+
+
+
+ BACK
+ 001
+ S
+ Back
+
+
+ CANCEL
+ 001
+ S
+ ICON_CANCEL
+ @0W@
+ Cancel
+
+
+ EXIT
+ 001
+ S
+ Exit
+
+
+
+
+ 000001
+ 03
+ BACK
+ 001
+
+
+ 000001
+ 12
+ CANCEL
+ 001
+
+
+ 000001
+ 15
+ EXIT
+ 001
+
+
+
+
+ S0100
+ BACK
+
+
+ S0100
+ CANCEL
+
+
+ S0100
+ EXIT
+
+
+
+
+ A
+ 000001
+ D
+ status
+
+
+ P
+ 000001
+ D
+ status
+
+
+ B
+ 000001
+ 0001
+ D
+ status
+
+
+
+
+ -
+ R
+ Programa de Alv usado no VTIVA
+ 30
+
+
+
+
+
diff --git a/src/zbos_alv_iva_v2.prog.abap b/src/zbos_alv_iva_v2.prog.abap
new file mode 100644
index 0000000..814b471
--- /dev/null
+++ b/src/zbos_alv_iva_v2.prog.abap
@@ -0,0 +1,825 @@
+*&---------------------------------------------------------------------*
+*& 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 .
+*** -fieldname = 'ICON'.
+*** ls_fcat-scrtext_m = 'Tabela'.
+*** ls_fcat-col_pos = 3.
+*** -icon = 'X'.
+*** -outputlen = 3.
+*** -hotspot = 'X'.
+*** -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
+
+
+
+
+ ZBOS_ALV_IVA_V2
+ 1
+ E
+ X
+ X
+
+
+ -
+
+ ZBOS_ALV_IVA_V2
+ 0100
+ E
+ tela
+ N
+ 0100
+ 027
+ 120
+
+
+
+ SCREEN
+ SCREEN
+
+
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE STATUS_0100.
+
+
+
+ PROCESS AFTER INPUT.
+
+
+ *MODULE exit_command AT EXIT-COMMAND.
+
+
+ MODULE USER_COMMAND_0100.
+
+
+
+
+
+
+ 000001
+ 000001
+
+
+
+ S0100
+ D
+ 000001
+ 000001
+ 0001
+ status gui
+
+
+
+
+ BACK
+ 001
+ S
+ Back
+
+
+ CANCEL
+ 001
+ S
+ ICON_CANCEL
+ @0W@
+ Cancel
+
+
+ EXIT
+ 001
+ S
+ Exit
+
+
+
+
+ 000001
+ 03
+ BACK
+ 001
+
+
+ 000001
+ 12
+ CANCEL
+ 001
+
+
+ 000001
+ 15
+ EXIT
+ 001
+
+
+
+
+ S0100
+ BACK
+
+
+ S0100
+ CANCEL
+
+
+ S0100
+ EXIT
+
+
+
+
+ A
+ 000001
+ D
+ status gui
+
+
+ P
+ 000001
+ D
+ status gui
+
+
+ B
+ 000001
+ 0001
+ D
+ status gui
+
+
+
+
+ -
+ R
+ Programa de Alv usado no VTIVA
+ 30
+
+
+
+
+
diff --git a/src/zbos_teste.prog.abap b/src/zbos_teste.prog.abap
new file mode 100644
index 0000000..10ac9e8
--- /dev/null
+++ b/src/zbos_teste.prog.abap
@@ -0,0 +1,79 @@
+*&---------------------------------------------------------------------*
+*& Report ZBOS_TESTE
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+REPORT zbos_teste.
+
+
+DATA :op(1) TYPE c,
+ valor1 TYPE f,
+ valor2 TYPE f,
+ resultado TYPE f.
+
+
+op = '*'.
+
+valor1 = 12.
+valor2 = ( '2' ) .
+
+
+resultado = valor1 * valor2.
+
+BREAK-POINT.
+
+
+
+
+
+*
+*DATA:
+* gt_data TYPE TABLE OF sflight,
+* g_grid TYPE REF TO cl_gui_alv_grid.
+*
+*CONSTANTS:
+* c_max_rows TYPE i VALUE 100.
+*
+*CALL SCREEN 100.
+*
+**&---------------------------------------------------------------------*
+**& Form read_data
+**&---------------------------------------------------------------------*
+*FORM read_data.
+* SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_data
+* FROM sflight
+* UP TO c_max_rows ROWS.
+*ENDFORM.
+*
+**&---------------------------------------------------------------------*
+**& Form display_grid
+**&---------------------------------------------------------------------*
+*FORM display_grid.
+* CREATE OBJECT g_grid
+* EXPORTING
+* i_parent = cl_gui_container=>default_screen.
+*
+* CALL METHOD g_grid->set_table_for_first_display
+* EXPORTING
+* i_structure_name = 'SFLIGHT'
+* CHANGING
+* it_outtab = gt_data
+* EXCEPTIONS
+* invalid_parameter_combination = 1
+* program_error = 2
+* too_many_lines = 3
+* OTHERS = 4.
+* IF sy-subrc <> 0.
+* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
+* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
+* ENDIF.
+*ENDFORM.
+**&---------------------------------------------------------------------*
+**& Module STATUS_0100 OUTPUT
+**&---------------------------------------------------------------------*
+**&
+**&---------------------------------------------------------------------*
+*MODULE status_0100 OUTPUT.
+* PERFORM read_data.
+* PERFORM display_grid.
+*ENDMODULE.
diff --git a/src/zbos_teste.prog.xml b/src/zbos_teste.prog.xml
new file mode 100644
index 0000000..3b67c67
--- /dev/null
+++ b/src/zbos_teste.prog.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ ZBOS_TESTE
+ 1
+ E
+ X
+ X
+
+
+ -
+
+ ZBOS_TESTE
+ 0100
+ E
+ tela 100
+ N
+ 0100
+ 027
+ 120
+
+
+
+ SCREEN
+ SCREEN
+
+
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE STATUS_0100.
+
+
+
+ PROCESS AFTER INPUT.
+
+
+ * MODULE USER_COMMAND_0100.
+
+
+
+
+
+ -
+ R
+ teste
+ 5
+
+
+
+
+