20240226
20240216
Regras de Validação e Substituição
GGB0 e OB28 PROGRAMA RGGBR000
Regra de Substituição
GGB1 e OBBH PROGRAMA RGGBS000
20240205
20240203
Programa para pesquisar textos em tabelas
*&---------------------------------------------------------------------*
*& Report Z
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZF NO STANDARD PAGE HEADING LINE-SIZE 1023.
TABLES: dd02l.
TYPE-POOLS: icon.
types: begin of ty_tab,
name type tabname,
campo type tabname,
record type sytabix,
conteudo type char255,
end of ty_tab.
data: gt_tabelas type table of ty_tab,
gt_tab type table of ty_tab,
wa_tabelas type ty_tab.
* Definições
*-------------------------------------------------------------
* Definições: Tabelas, Estruturas e Variáveis
*-------------------------------------------------------------
DATA: t_out_tab TYPE REF TO data.
DATA: wa_out_tab TYPE REF TO data.
FIELD-SYMBOLS: <fs_out_tab> TYPE STANDARD TABLE,
<fsw_out_tab> TYPE any.
Data: l_tabname TYPE tabname.
FIELD-SYMBOLS: <ft_dyntable> TYPE STANDARD TABLE,
<fw_dyntable> type any,
<fw_fldval> TYPE ANY,
<fw_struct>.
FIELD-SYMBOLS: <conteudo> TYPE ANY.
DATA: t_newtable TYPE REF TO data,
t_newline TYPE REF TO data,
t_fldcat TYPE lvc_t_fcat.
data: gt_dd02l type table of dd02l,
wa_dd02l type dd02l.
data: definition type table of DD03P,
wa_def type DD03P.
data: lv_tabname type DDOBJNAME,
gotstate LIKE dcobjif-gotstate.
data: gv_ini type syuzeit.
data: gv_fim type syuzeit.
* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
select-options: s_table for dd02l-tabname OBLIGATORY.
PARAMETERS: p_txt type ZDEFI_TXTMIN_50 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
* Processamento
START-OF-SELECTION.
perform: f_busca_tabelas,
f_pesquisa_tabelas,
f_lista_dados.
*&---------------------------------------------------------------------*
*& Form F_BUSCA_TABELAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_BUSCA_TABELAS .
GET TIME FIELD gv_ini.
SELECT tabname as4local as4vers tabclass
FROM dd02l
INTO table gt_dd02l
WHERE tabname IN s_table
AND tabclass <> 'CLUSTER'
AND tabclass <> 'POOL'
AND tabclass <> 'VIEW'
AND as4local = 'A'.
DELETE gt_dd02l where tabclass <> 'TRANSP'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_PESQUISA_TABELAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_PESQUISA_TABELAS .
data: lv_idx type sytabix.
data: lv_lines type i.
data: lv_pos type sytabix.
data: lv_perc type i.
data: lv_qtd type p LENGTH 12 DECIMALS 0.
lv_lines = lines( gt_dd02l ).
clear lv_pos.
LOOP AT gt_dd02l into wa_dd02l.
add 1 to lv_pos .
lv_perc = lv_pos * 100 / lv_lines.
perform f_msg_rodape using lv_perc lv_pos lv_lines.
* Nome da tabela
l_tabname = wa_dd02l-TABNAME.
* Tabela dinâmica
CREATE DATA t_out_tab TYPE TABLE OF (l_tabname).
ASSIGN t_out_tab->* TO <fs_out_tab>.
* Estrutura da tabela dinâmica
CREATE DATA wa_out_tab TYPE (l_tabname).
ASSIGN wa_out_tab->* TO <fsw_out_tab>.
* Ignora tabelas com mais de 1 milhão de registros
*& Report Z
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZF NO STANDARD PAGE HEADING LINE-SIZE 1023.
TABLES: dd02l.
TYPE-POOLS: icon.
types: begin of ty_tab,
name type tabname,
campo type tabname,
record type sytabix,
conteudo type char255,
end of ty_tab.
data: gt_tabelas type table of ty_tab,
gt_tab type table of ty_tab,
wa_tabelas type ty_tab.
* Definições
*-------------------------------------------------------------
* Definições: Tabelas, Estruturas e Variáveis
*-------------------------------------------------------------
DATA: t_out_tab TYPE REF TO data.
DATA: wa_out_tab TYPE REF TO data.
FIELD-SYMBOLS: <fs_out_tab> TYPE STANDARD TABLE,
<fsw_out_tab> TYPE any.
Data: l_tabname TYPE tabname.
FIELD-SYMBOLS: <ft_dyntable> TYPE STANDARD TABLE,
<fw_dyntable> type any,
<fw_fldval> TYPE ANY,
<fw_struct>.
FIELD-SYMBOLS: <conteudo> TYPE ANY.
DATA: t_newtable TYPE REF TO data,
t_newline TYPE REF TO data,
t_fldcat TYPE lvc_t_fcat.
data: gt_dd02l type table of dd02l,
wa_dd02l type dd02l.
data: definition type table of DD03P,
wa_def type DD03P.
data: lv_tabname type DDOBJNAME,
gotstate LIKE dcobjif-gotstate.
data: gv_ini type syuzeit.
data: gv_fim type syuzeit.
* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
select-options: s_table for dd02l-tabname OBLIGATORY.
PARAMETERS: p_txt type ZDEFI_TXTMIN_50 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
* Processamento
START-OF-SELECTION.
perform: f_busca_tabelas,
f_pesquisa_tabelas,
f_lista_dados.
*&---------------------------------------------------------------------*
*& Form F_BUSCA_TABELAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_BUSCA_TABELAS .
GET TIME FIELD gv_ini.
SELECT tabname as4local as4vers tabclass
FROM dd02l
INTO table gt_dd02l
WHERE tabname IN s_table
AND tabclass <> 'CLUSTER'
AND tabclass <> 'POOL'
AND tabclass <> 'VIEW'
AND as4local = 'A'.
DELETE gt_dd02l where tabclass <> 'TRANSP'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_PESQUISA_TABELAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_PESQUISA_TABELAS .
data: lv_idx type sytabix.
data: lv_lines type i.
data: lv_pos type sytabix.
data: lv_perc type i.
data: lv_qtd type p LENGTH 12 DECIMALS 0.
lv_lines = lines( gt_dd02l ).
clear lv_pos.
LOOP AT gt_dd02l into wa_dd02l.
add 1 to lv_pos .
lv_perc = lv_pos * 100 / lv_lines.
perform f_msg_rodape using lv_perc lv_pos lv_lines.
* Nome da tabela
l_tabname = wa_dd02l-TABNAME.
* Tabela dinâmica
CREATE DATA t_out_tab TYPE TABLE OF (l_tabname).
ASSIGN t_out_tab->* TO <fs_out_tab>.
* Estrutura da tabela dinâmica
CREATE DATA wa_out_tab TYPE (l_tabname).
ASSIGN wa_out_tab->* TO <fsw_out_tab>.
* Ignora tabelas com mais de 1 milhão de registros
clear lv_qtd.
select count(*)
from (l_tabname)
into lv_qtd.
if lv_qtd > 999999 .
clear wa_tabelas.
wa_tabelas-name = l_tabname.
wa_tabelas-campo = '*'.
wa_tabelas-conteudo = 'Mais de 1Mi Reg.'.
wa_tabelas-RECORD = '1'.
append wa_tabelas TO gt_tabelas.
continue.
endif.
* Informa o nme da tabela em processamento no LOG do JOB
message s398(00) with 'Tab.' l_tabname.
* Seleção de dados
select *
from (l_tabname)
into table <fs_out_tab>.
lv_tabname = l_tabname .
* busca os campos da tabela
CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
NAME = lv_tabname
* STATE = 'A'
LANGU = sy-langu
IMPORTING
GOTSTATE = gotstate
TABLES
DD03P_TAB = definition
EXCEPTIONS
ILLEGAL_INPUT = 1
OTHERS = 2 .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
clear lv_idx.
LOOP AT <fs_out_tab> ASSIGNING <fsw_out_tab>.
lv_idx = sy-tabix.
LOOP AT definition into wa_def.
* Processa apenas os campos textos com mais de 40 posições
if wa_def-inttype = 'C' and wa_def-intlen >= 40.
UNASSIGN <conteudo>.
ASSIGN COMPONENT wa_def-fieldname OF STRUCTURE <fsw_out_tab> TO <conteudo>.
if <conteudo> is ASSIGNED.
if <conteudo> CS p_txt.
clear wa_tabelas.
wa_tabelas-name = l_tabname.
wa_tabelas-campo = wa_def-fieldname.
wa_tabelas-conteudo = <conteudo>.
wa_tabelas-RECORD = lv_idx.
append wa_tabelas TO gt_tabelas.
endif.
endif.
endif.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_LISTA_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_LISTA_DADOS .
if gt_tabelas[] is not initial.
gt_tab[] = gt_tabelas[].
sort gt_tab by name.
DELETE ADJACENT DUPLICATES FROM gt_tab COMPARING name.
GET TIME FIELD gv_fim.
write:/ ' Início:', gv_ini.
write:/ ' Fim:', gv_fim.
write:/ 'Texto procurado:', p_txt.
uline.
write:/ 'Lista de tabelas identificadas'.
write:/ '------------------------------'.
LOOP AT gt_tab into wa_tabelas.
write:/10 wa_tabelas-name.
ENDLOOP.
uline.
write:/ 'Dados encontrados'.
write:/ '-----------------'.
LOOP AT gt_tabelas into wa_tabelas.
write:/ wa_tabelas-NAME, wa_tabelas-CAMPO, wa_tabelas-RECORD, wa_tabelas-conteudo.
ENDLOOP.
uline.
endif.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_MSG_RODAPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_PERC text
*----------------------------------------------------------------------*
FORM F_MSG_RODAPE USING P_PERC p_pos p_lin.
data: lv_txt type c LENGTH 50.
data: lv_perc type i.
data: lv_resto type i.
data: lv_txt1 type c LENGTH 5,
lv_txt2 type c LENGTH 5.
lv_perc = p_perc.
lv_resto = lv_perc mod 5 .
if lv_resto = 0 .
write lv_perc to lv_txt LEFT-JUSTIFIED.
write p_pos to lv_txt1 LEFT-JUSTIFIED.
write p_lin to lv_txt2 LEFT-JUSTIFIED.
concatenate lv_txt '% processado' '-' lv_txt1 '/' lv_txt2 '-' wa_dd02l-TABNAME
into lv_txt SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = lv_perc
TEXT = lv_txt . "'% processado' .
else.
exit.
endif .
ENDFORM.
select count(*)
from (l_tabname)
into lv_qtd.
if lv_qtd > 999999 .
clear wa_tabelas.
wa_tabelas-name = l_tabname.
wa_tabelas-campo = '*'.
wa_tabelas-conteudo = 'Mais de 1Mi Reg.'.
wa_tabelas-RECORD = '1'.
append wa_tabelas TO gt_tabelas.
continue.
endif.
* Informa o nme da tabela em processamento no LOG do JOB
message s398(00) with 'Tab.' l_tabname.
* Seleção de dados
select *
from (l_tabname)
into table <fs_out_tab>.
lv_tabname = l_tabname .
* busca os campos da tabela
CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
NAME = lv_tabname
* STATE = 'A'
LANGU = sy-langu
IMPORTING
GOTSTATE = gotstate
TABLES
DD03P_TAB = definition
EXCEPTIONS
ILLEGAL_INPUT = 1
OTHERS = 2 .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
clear lv_idx.
LOOP AT <fs_out_tab> ASSIGNING <fsw_out_tab>.
lv_idx = sy-tabix.
LOOP AT definition into wa_def.
* Processa apenas os campos textos com mais de 40 posições
if wa_def-inttype = 'C' and wa_def-intlen >= 40.
UNASSIGN <conteudo>.
ASSIGN COMPONENT wa_def-fieldname OF STRUCTURE <fsw_out_tab> TO <conteudo>.
if <conteudo> is ASSIGNED.
if <conteudo> CS p_txt.
clear wa_tabelas.
wa_tabelas-name = l_tabname.
wa_tabelas-campo = wa_def-fieldname.
wa_tabelas-conteudo = <conteudo>.
wa_tabelas-RECORD = lv_idx.
append wa_tabelas TO gt_tabelas.
endif.
endif.
endif.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_LISTA_DADOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_LISTA_DADOS .
if gt_tabelas[] is not initial.
gt_tab[] = gt_tabelas[].
sort gt_tab by name.
DELETE ADJACENT DUPLICATES FROM gt_tab COMPARING name.
GET TIME FIELD gv_fim.
write:/ ' Início:', gv_ini.
write:/ ' Fim:', gv_fim.
write:/ 'Texto procurado:', p_txt.
uline.
write:/ 'Lista de tabelas identificadas'.
write:/ '------------------------------'.
LOOP AT gt_tab into wa_tabelas.
write:/10 wa_tabelas-name.
ENDLOOP.
uline.
write:/ 'Dados encontrados'.
write:/ '-----------------'.
LOOP AT gt_tabelas into wa_tabelas.
write:/ wa_tabelas-NAME, wa_tabelas-CAMPO, wa_tabelas-RECORD, wa_tabelas-conteudo.
ENDLOOP.
uline.
endif.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_MSG_RODAPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_PERC text
*----------------------------------------------------------------------*
FORM F_MSG_RODAPE USING P_PERC p_pos p_lin.
data: lv_txt type c LENGTH 50.
data: lv_perc type i.
data: lv_resto type i.
data: lv_txt1 type c LENGTH 5,
lv_txt2 type c LENGTH 5.
lv_perc = p_perc.
lv_resto = lv_perc mod 5 .
if lv_resto = 0 .
write lv_perc to lv_txt LEFT-JUSTIFIED.
write p_pos to lv_txt1 LEFT-JUSTIFIED.
write p_lin to lv_txt2 LEFT-JUSTIFIED.
concatenate lv_txt '% processado' '-' lv_txt1 '/' lv_txt2 '-' wa_dd02l-TABNAME
into lv_txt SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = lv_perc
TEXT = lv_txt . "'% processado' .
else.
exit.
endif .
ENDFORM.
Assinar:
Postagens (Atom)