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 + + +
+
+