primeiro commit

This commit is contained in:
2024-12-18 21:19:39 +00:00
committed by Bruno Santos
parent 6a6fb2b1d3
commit d2c633ebf9
8 changed files with 1913 additions and 0 deletions

10
.abapgit.xml Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
</DATA>
</asx:values>
</asx:abap>

10
src/package.devc.xml Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>Pacote Bruno O. Santos</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

590
src/zbos_alv_iva.prog.abap Normal file
View File

@@ -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 <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.
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.

165
src/zbos_alv_iva.prog.xml Normal file
View File

@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZBOS_ALV_IVA</NAME>
<SUBC>1</SUBC>
<RLOAD>E</RLOAD>
<FIXPT>X</FIXPT>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<DYNPROS>
<item>
<HEADER>
<PROGRAM>ZBOS_ALV_IVA</PROGRAM>
<SCREEN>0100</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>tela 100</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>0100</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>120</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_0100.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE>*MODULE exit_command AT EXIT-COMMAND.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE>MODULE USER_COMMAND_0100.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
</DYNPROS>
<CUA>
<ADM>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
</ADM>
<STA>
<RSMPE_STAT>
<CODE>S0100</CODE>
<MODAL>D</MODAL>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>status</INT_NOTE>
</RSMPE_STAT>
</STA>
<FUN>
<RSMPE_FUNT>
<CODE>BACK</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Back</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>CANCEL</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<TEXT_NAME>ICON_CANCEL</TEXT_NAME>
<ICON_ID>@0W@</ICON_ID>
<FUN_TEXT>Cancel</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>EXIT</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Exit</FUN_TEXT>
</RSMPE_FUNT>
</FUN>
<PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>03</PFNO>
<FUNCODE>BACK</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>12</PFNO>
<FUNCODE>CANCEL</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>15</PFNO>
<FUNCODE>EXIT</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
</PFK>
<SET>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>BACK</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>CANCEL</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>EXIT</FUNCTION>
</RSMPE_STAF>
</SET>
<DOC>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status</INT_NOTE>
</RSMPE_ATRT>
</DOC>
</CUA>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>Programa de Alv usado no VTIVA</ENTRY>
<LENGTH>30</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -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 <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.

View File

@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZBOS_ALV_IVA_V2</NAME>
<SUBC>1</SUBC>
<RLOAD>E</RLOAD>
<FIXPT>X</FIXPT>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<DYNPROS>
<item>
<HEADER>
<PROGRAM>ZBOS_ALV_IVA_V2</PROGRAM>
<SCREEN>0100</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>tela</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>0100</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>120</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_0100.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE>*MODULE exit_command AT EXIT-COMMAND.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE>MODULE USER_COMMAND_0100.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
</DYNPROS>
<CUA>
<ADM>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
</ADM>
<STA>
<RSMPE_STAT>
<CODE>S0100</CODE>
<MODAL>D</MODAL>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>status gui</INT_NOTE>
</RSMPE_STAT>
</STA>
<FUN>
<RSMPE_FUNT>
<CODE>BACK</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Back</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>CANCEL</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<TEXT_NAME>ICON_CANCEL</TEXT_NAME>
<ICON_ID>@0W@</ICON_ID>
<FUN_TEXT>Cancel</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>EXIT</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Exit</FUN_TEXT>
</RSMPE_FUNT>
</FUN>
<PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>03</PFNO>
<FUNCODE>BACK</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>12</PFNO>
<FUNCODE>CANCEL</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>15</PFNO>
<FUNCODE>EXIT</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
</PFK>
<SET>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>BACK</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>CANCEL</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>S0100</STATUS>
<FUNCTION>EXIT</FUNCTION>
</RSMPE_STAF>
</SET>
<DOC>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status gui</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status gui</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>status gui</INT_NOTE>
</RSMPE_ATRT>
</DOC>
</CUA>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>Programa de Alv usado no VTIVA</ENTRY>
<LENGTH>30</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

79
src/zbos_teste.prog.abap Normal file
View File

@@ -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.

69
src/zbos_teste.prog.xml Normal file
View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZBOS_TESTE</NAME>
<SUBC>1</SUBC>
<RLOAD>E</RLOAD>
<FIXPT>X</FIXPT>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<DYNPROS>
<item>
<HEADER>
<PROGRAM>ZBOS_TESTE</PROGRAM>
<SCREEN>0100</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>tela 100</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>0100</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>120</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_0100.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE>* MODULE USER_COMMAND_0100.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
</DYNPROS>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>teste</ENTRY>
<LENGTH>5</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>