Você está na página 1de 14

********** AS AMPLIAES ESTO NA TABELA 'MODSAP' **********

*----------------------------------------------------------------------*
* PROGRAMADOR: FBIO ALESSANDRO COMASSETTO
*----------------------------------------------------------------------*
* PROGRAMA...: ZKBB_PROCURA_EXIT
*----------------------------------------------------------------------*
* DATA.......: 15/02/2001
*----------------------------------------------------------------------*
* OBJETIVO...: PESQUISAR USER-EXITS EM UMA DETERMINADA TRANSAO
OU
*
PROGRAMA.
*
*----------------------------------------------------------------------*
* PARMETROS.: P_PROG = NOME DO PROGRAMA A SER PESQUISADO
*
P_TCODE = NOME DA TRANSAO A SER PESQUISADA
*
OBS.: UM DOS DOIS PARMETROS ACIMA DEVE SER ESPECIFICADO
*
*
P_INCL = DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO OS INCLUDES.
*
P_FUNC = DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO AS FUNES.
*
P_SUBMIT= DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO DEMAIS PROGRAMAS CHAMADOS
POR
*
SUBMIT.
*
*
P_NIVEL = DETERMINA EM AT QUAL NVEL A PESQUISA SER
*
FEITA DENTRO DOS INCLUDES, FUNES E DEMAIS
*
PROGRAMAS. NO NVEL 1 SOMENTE SERO LEVADOS
*
EM CONSIDERAO O PROGRAMA RAIZ. NO NVEL 2
*
SER FEITA UMA PESQUISA NOS INCLUDES, FUNES
*
OS QUAIS ESTO NOS INCLUDES, FUNES DO NVEL
*
1 E ASSIM SUCESSIVAMENTE.
*
*
OBS.: NO PARMETRO P_NIVEL INFORMAR VALORES BAIXO, POIS
*
QUANTO MAIOR O NMERO, MAIOR A QUANTIDADE DE
CDIGO
*
A SER ANALIZADA
*----------------------------------------------------------------------*
*
*======================================================================*
REPORT ZKBB_PROCURA_EXIT LINE-SIZE 140 NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS: c_user_exit(22) TYPE c VALUE 'CALL CUSTOMER-FUNCTION',
c_funcao_1(13) TYPE c VALUE 'CALLFUNCTION''',
c_funcao_2(13) TYPE c VALUE 'CALL FUNCTION',
c_include(07) TYPE c VALUE 'INCLUDE',
c_submit(06)
TYPE c VALUE 'SUBMIT',
c_comentario
TYPE c VALUE '*',
c_ponto
TYPE c VALUE '.',
c_aspa
TYPE c VALUE '''',
c_x
TYPE c VALUE 'X'.
*----------------------------------------------------------------------*
* TABELAS INTERNAS
*----------------------------------------------------------------------*
DATA: BEGIN OF ti_programa OCCURS 0,

END

codigo_fonte LIKE rssource-line,


OF ti_programa.

DATA: BEGIN OF ti_includes OCCURS 0,


nome
LIKE sy-repid,
nivel(2) TYPE n,
END OF ti_includes.
DATA: BEGIN OF ti_user_exit OCCURS 0,
programa
LIKE sy-repid,
linha(10)
TYPE n,
codigo_fonte LIKE rssource-line,
nivel(2)
TYPE n,
END OF ti_user_exit.
DATA bdcdata LIKE bdcdata
OCCURS 0 WITH HEADER LINE.
DATA messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
*----------------------------------------------------------------------*
* VARIVEIS GLOBAIS
*----------------------------------------------------------------------*
DATA: vg_caracter
TYPE c,
vg_palavra(50) TYPE c,
vg_inicial
LIKE sy-index,
vg_conta_aspa
TYPE n,
vg_pname LIKE
tfdir-pname,
vg_mensagem(132) TYPE c,
vg_texto(50)
TYPE c,
vg_mode
TYPE c VALUE 'N',
vg_contador
LIKE sy-tfill,
vg_nivel(2)
TYPE n,
vg_ini_contagem TYPE c, " INDICA QUE DEVE SER INICIADA A CONTAGEM
vg_conta_espaco TYPE n.
" TOTAL DE ESPAOS ( MXIMO 2 )
*----------------------------------------------------------------------*
* PARAMETERS
*----------------------------------------------------------------------*
*- DADOS OBRIGATRIOS.
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE text-001 .
PARAMETERS: p_prog
p_tcode

LIKE sy-repid,
LIKE sy-tcode.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK bl01b WITH FRAME TITLE text-003.
PARAMETERS p_texto(072) TYPE c.
SELECTION-SCREEN END OF BLOCK bl01b.
SELECTION-SCREEN BEGIN OF BLOCK bl01c WITH FRAME TITLE text-004.
PARAMETERS: p_incl AS CHECKBOX.
PARAMETERS: p_func AS CHECKBOX.
PARAMETERS: p_submit AS CHECKBOX.
PARAMETERS: p_nivel(2) .
SELECTION-SCREEN END OF BLOCK bl01c.
SELECTION-SCREEN END

OF BLOCK bl01.

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE text-005 .

PARAMETERS: p_break AS CHECKBOX,


p_moden RADIOBUTTON GROUP gr1 DEFAULT 'X',
p_modee RADIOBUTTON GROUP gr1,
p_modea RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK bl02.
*----------------------------------------------------------------------*
* INCIO
*----------------------------------------------------------------------*
START-OF-SELECTION.
*- CONSISTNCIAS DOS PARMETROS.
PERFORM consisti_parametros.
*- INICIALIZA TABELA.
PERFORM inicializa_tabela.
*- VERIFICA SE NO PROGRAMA EXISTE ALGUM INCLUDE,FUNO OU SUBMIT.
PERFORM verifica_include_funcao_submit.
IF p_texto IS INITIAL.
*- ANALISA OS INCLUDES E PROCURA POR USER EXIT.
PERFORM procura_user_exit.
ELSE.
*- ANALISA OS INCLUDES E PROCURA PELO TEXTO INFORMADO
PERFORM procura_string.
ENDIF.
*- Estabelece os break-point se desejado
IF p_break EQ 'X'.
PERFORM estabelece_break_point.
ENDIF.
*- EXIBE TODAS USER EXIT ENCONTRADAS.
PERFORM exibe_user_exit.
*----------------------------------------------------------------------*
* FIM
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&
Form PROCURA_USER_EXIT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM procura_user_exit.
*- VERIFICA SE NOS INCLUDES SELECIONADOS EXISTEM USER EXITS.
LOOP AT ti_includes.
PERFORM evitar_time_out USING '' 'Procurando user-exit...'.
*- ESVAZIA TABELA INTERNA.
REFRESH ti_programa.

*- REALIZA LEITURA DO INCLUDE ARMAZENANDO-O EM TABELA INTERNA


READ REPORT ti_includes-nome INTO ti_programa.
LOOP AT ti_programa.
*- VERIFICA SE NA LINHA DO PROGRAMA EXISTE ALGUM INCLUDE.
SEARCH ti_programa-codigo_fonte FOR c_user_exit.
*- SE ENCONTROU INCLUDE E SE A LINHA NO EST COMENTADA...
IF sy-subrc EQ 0
AND ti_programa-codigo_fonte+0(1) NE c_comentario.
CLEAR ti_user_exit.
*- REMOVE ESPAOS NO INCIO DA STRING.
SHIFT ti_programa-codigo_fonte LEFT DELETING LEADING space.
MOVE: ti_includes-nome
TO ti_user_exit-programa,
sy-tabix
TO ti_user_exit-linha,
ti_programa-codigo_fonte TO ti_user_exit-codigo_fonte,
ti_includes-nivel
TO ti_user_exit-nivel.
APPEND ti_user_exit.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.

" PROCURA_USER_EXIT

*&---------------------------------------------------------------------*
*&
Form EXIBE_USER_EXIT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM exibe_user_exit.
PERFORM cabecalho.
PERFORM user_exit_nao_encontrada.
PERFORM lista_user_exit_encontrada.
PERFORM rodape.
ENDFORM.
" EXIBE_USER_EXIT
*&---------------------------------------------------------------------*
*&
Form PROCURA_INCLUDE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM procura_include.
CLEAR vg_palavra.
*- VERIFICA SE NA LINHA DO PROGRAMA EXISTE ALGUM INCLUDE.
SEARCH ti_programa-codigo_fonte FOR c_include.
*- SE ENCONTROU INCLUDE E SE A LINHA NO EST COMENTADA...
IF sy-subrc EQ 0
AND ti_programa-codigo_fonte+0(1) NE c_comentario.
*- VERIFICA TODOS OS 72 CARACTERES DA LINHA PARA MONTAR NOME DO INCLUDE
DO 72 TIMES.
vg_inicial = sy-index - 1.

*-

MOVE ti_programa-codigo_fonte+vg_inicial(1) TO vg_caracter.


IF NOT vg_caracter IS INITIAL.
VERIFICA SE NO FIM DO COMANDO.
IF vg_caracter EQ c_ponto.
EXIT.
ENDIF.
MONTA PALAVRA.
CONCATENATE vg_palavra vg_caracter INTO vg_palavra.
CONVERTE PARA MAUSCULA PARA FUTURA COMPARAO.
TRANSLATE vg_palavra TO UPPER CASE.
SE ENCONTROU ALGUM INCLUDE
IF vg_palavra EQ c_include.
CLEAR vg_palavra.
ENDIF.
ENDIF.
ENDDO.
SALVA NOME DO INCLUDE PARA FUTURA PESQUISA POR USER EXIT.
READ TABLE ti_includes WITH KEY nome = vg_palavra.
IF NOT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MOVE: vg_palavra TO ti_includes-nome,
vg_nivel TO ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.

***-

*-

ENDIF.
ENDFORM.

" PROCURA_INCLUDE

*&---------------------------------------------------------------------*
*&
Form PROCURA_FUNCAO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM procura_funcao.
CLEAR: vg_conta_aspa,
vg_palavra.
*- VERIFICA SE NA LINHA DO PROGRAMA EXISTE ALGUM INCLUDE.
SEARCH ti_programa-codigo_fonte FOR c_funcao_2.
*- SE ENCONTROU INCLUDE E SE A LINHA NO EST COMENTADA...
IF sy-subrc EQ 0
AND ti_programa-codigo_fonte+0(1) NE c_comentario.
*- VERIFICA TODOS OS 72 CARACTERES DA LINHA PARA MONTAR NOME DO INCLUDE
DO 72 TIMES.
vg_inicial = sy-index - 1.
MOVE ti_programa-codigo_fonte+vg_inicial(1) TO vg_caracter.
IF NOT vg_caracter IS INITIAL.
*- VERIFICA SE NO FIM DO COMANDO.
IF vg_caracter EQ c_aspa.
ADD 1 TO vg_conta_aspa.
IF vg_conta_aspa EQ 2.
EXIT.
ENDIF.
ENDIF.

*- MONTA PALAVRA.
CONCATENATE vg_palavra vg_caracter INTO vg_palavra.
*- CONVERTE PARA MAUSCULA PARA FUTURA COMPARAO.
TRANSLATE vg_palavra TO UPPER CASE.
*- SE ENCONTROU ALGUM INCLUDE
IF vg_palavra EQ c_funcao_1.
CLEAR vg_palavra.
ENDIF.
ENDIF.
ENDDO.
*- PESQUISA NOME DA FUNO PARA FUTURA PESQUISA POR USER EXIT.
CLEAR vg_pname.
SELECT SINGLE pname
INTO vg_pname
FROM tfdir
WHERE funcname EQ vg_palavra.
IF sy-subrc EQ 0.
READ TABLE ti_includes WITH KEY nome = vg_pname.
IF NOT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MOVE: vg_pname TO ti_includes-nome,
vg_nivel TO ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.

" PROCURA_FUNCAO

*&---------------------------------------------------------------------*
*&
Form VERIFICA_INCLUDE_FUNCAO_SUBMIT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM verifica_include_funcao_submit.
LOOP AT ti_includes.
ADD 1 TO vg_contador.
DESCRIBE TABLE ti_includes.
PERFORM evitar_time_out USING sy-tfill ''.
MOVE ti_includes-nivel TO vg_nivel.
ADD 1 TO vg_nivel.
*- ESVAZIA TABELA INTERNA.
REFRESH ti_programa.
*- REALIZA LEITURA DO INCLUDE/FUNO ARMAZENANDO EM TABELA INTERNA
READ REPORT ti_includes-nome INTO ti_programa.
LOOP AT ti_programa.
*- PROCURA POR INCLUDES.
IF p_incl EQ c_x.

PERFORM procura_include.
ENDIF.
*- PROCURA POR FUNO.
IF p_func EQ c_x.
PERFORM procura_funcao.
ENDIF.
*- PROCURA POR SUBMIT.
IF p_submit EQ c_x.
PERFORM procura_submit.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.

" VERIFICA_INCLUDE_FUNCAO_SUBMIT

*&---------------------------------------------------------------------*
*&
Form EVITAR_TIME_OUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_SY_TFILL text
*
-->P_SY_SUBRC text
*----------------------------------------------------------------------*
FORM evitar_time_out USING p_tfill
p_texto.
DATA: vl_total(10) TYPE n,
vl_atual(10) TYPE n.
IF p_tfill IS INITIAL.
vg_texto = p_texto.
ELSE.
MOVE: p_tfill
TO vl_total,
vg_contador TO vl_atual.
CONCATENATE 'Total:' vl_total '-' 'Atual:' vl_atual
INTO vg_texto
SEPARATED BY space.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = vg_texto.
ENDFORM.

" EVITAR_TIME_OUT

*&---------------------------------------------------------------------*
*&
Form PROCURA_SUBMIT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM procura_submit.
CLEAR: vg_conta_espaco, vg_palavra, vg_ini_contagem.

*- VERIFICA SE NA LINHA DO PROGRAMA EXISTE ALGUM INCLUDE.


SEARCH ti_programa-codigo_fonte FOR c_submit.
*- SE ENCONTROU INCLUDE E SE A LINHA NO EST COMENTADA...
IF sy-subrc EQ 0
AND ti_programa-codigo_fonte+0(1) NE c_comentario.
*- VERIFICA TODOS OS 72 CARACTERES DA LINHA PARA MONTAR NOME DO INCLUDE
DO 72 TIMES.
vg_inicial = sy-index - 1.
MOVE ti_programa-codigo_fonte+vg_inicial(1) TO vg_caracter.
IF vg_ini_contagem EQ c_x AND vg_caracter IS INITIAL.
ADD 1 TO vg_conta_espaco.
ENDIF.
IF NOT vg_caracter IS INITIAL.
MOVE c_x TO vg_ini_contagem.
IF vg_caracter EQ c_ponto.
EXIT.
ENDIF.
*- MONTA PALAVRA.
IF vg_conta_espaco LT 2.
CONCATENATE vg_palavra vg_caracter INTO vg_palavra.
*- CONVERTE PARA MAUSCULA PARA FUTURA COMPARAO.
TRANSLATE vg_palavra TO UPPER CASE.
*- SE ENCONTROU ALGUM INCLUDE
IF vg_palavra EQ c_submit.
CLEAR vg_palavra.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDDO.
*- PESQUISA NOME DA FUNO PARA FUTURA PESQUISA POR USER EXIT.
READ TABLE ti_includes WITH KEY nome = vg_palavra.
IF NOT sy-subrc IS INITIAL.
IF vg_nivel LE p_nivel.
MOVE: vg_palavra TO ti_includes-nome,
vg_nivel TO ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.

" PROCURA_SUBMIT

*&---------------------------------------------------------------------*
*&
Form CONSISTI_PARAMETROS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM consisti_parametros.
IF p_nivel IS INITIAL.
MOVE 1 TO p_nivel.
ENDIF.

IF p_prog IS INITIAL AND p_tcode IS INITIAL.


*- NOME DO PROGRAMA E NOME DA TRANSAO NO PODEM SER NULOS. UM DELES
*- DEVE SER INFORMADO.
MESSAGE ID 'ZF' TYPE 'I' NUMBER '000' WITH text-003.
STOP.
ENDIF.
IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL.
*- SOLICITA AO USURIO PARA INFORMAR O NOME DO PROGRAMA OU DA TRANSAO.
MESSAGE ID 'ZF' TYPE 'I' NUMBER '000' WITH text-004.
STOP.
ENDIF.
ENDFORM.

" CONSISTI_PARAMETROS

*&---------------------------------------------------------------------*
*&
Form INICIALIZA_TABELA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM inicializa_tabela.
DATA vl_pgmna LIKE tstc-pgmna.
REFRESH ti_includes.
IF NOT p_prog IS INITIAL.
MOVE: p_prog TO ti_includes-nome,
'0'
TO ti_includes-nivel.
APPEND ti_includes.
ELSEIF NOT p_tcode IS INITIAL.
SELECT SINGLE pgmna
FROM tstc
INTO vl_pgmna
WHERE tcode EQ p_tcode.
IF sy-subrc EQ 0.
MOVE: vl_pgmna TO ti_includes-nome,
'0'
TO ti_includes-nivel.
APPEND ti_includes.
ENDIF.
ENDIF.
ENDFORM.

" INICIALIZA_TABELA

*&---------------------------------------------------------------------*
*&
Form CABECALHO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM cabecalho.
DATA vl_complemento(50) TYPE c.
IF p_tcode IS INITIAL.
CONCATENATE 'NO PROGRAMA' p_prog
INTO vl_complemento

SEPARATED BY space.
ELSE.
CONCATENATE 'NA TRANSAAO' p_tcode
INTO vl_complemento
SEPARATED BY space.
ENDIF.
FORMAT COLOR COL_KEY.
WRITE: /001 sy-uline,
/001 sy-vline,
040 'RELAO DAS USER-EXITS ENCONTRADAS', vl_complemento,
140 sy-vline,
/001 sy-uline.
WRITE: /001 sy-vline,
003 'NOME DO PROGRAMA',
044 sy-vline,
046 'NVEL',
052 sy-vline,
054 'LINHA',
065 sy-vline,
067 'TEXTO',
140 sy-vline,
/001 sy-uline.
ENDFORM.

" CABECALHO

*&---------------------------------------------------------------------*
*&
Form USER_EXIT_NAO_ENCONTRADA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM user_exit_nao_encontrada.
DESCRIBE TABLE ti_user_exit.
CHECK sy-tfill IS INITIAL.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
WRITE: /003 'NENHUMA USER-EXIT/TEXTO FOI LOCALIZADO!',
139 ' '.
FORMAT RESET.
ENDFORM.
" USER_EXIT_NAO_ENCONTRADA
*&---------------------------------------------------------------------*
*&
Form LISTA_USER_EXIT_ENCONTRADA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM lista_user_exit_encontrada.
DATA vl_cor TYPE c.
LOOP AT ti_user_exit.
IF vl_cor EQ c_x.
CLEAR vl_cor.
ELSE.

MOVE c_x TO vl_cor.


ENDIF.
*- AJUSTA COR NA TELA.
IF vl_cor EQ c_x.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
ENDIF.
*- INCIO DA IMPRESSO.
WRITE: /003 ti_user_exit-programa,
046 ti_user_exit-nivel,
054 ti_user_exit-linha,
067 ti_user_exit-codigo_fonte,
139 ' '.
ENDLOOP.
ENDFORM.
" LISTA_USER_EXIT_ENCONTRADA
*&---------------------------------------------------------------------*
*&
Form RODAPE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM rodape.
DESCRIBE TABLE ti_includes.
FORMAT COLOR COL_TOTAL.
WRITE: /001 sy-uline,
/001 sy-vline,
003 'TOTAL DE PROGRAMAS ANALIZADOS:', sy-tfill,
' - NVEL:', p_nivel,
140 sy-vline,
/001 sy-uline.
ENDFORM.
" RODAPE
*&---------------------------------------------------------------------*
*&
Form PROCURA_STRING
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM procura_string.
*- VERIFICA SE NOS INCLUDES SELECIONADOS EXISTEM USER EXITS.
LOOP AT ti_includes.
PERFORM evitar_time_out USING '' 'Procurando string...'.
*- ESVAZIA TABELA INTERNA.
REFRESH ti_programa.
*- REALIZA LEITURA DO INCLUDE ARMAZENANDO-O EM TABELA INTERNA
READ REPORT ti_includes-nome INTO ti_programa.
LOOP AT ti_programa.
*- VERIFICA SE NA LINHA DO PROGRAMA EXISTE ALGUM INCLUDE.

SEARCH ti_programa-codigo_fonte FOR p_texto.


*- SE ENCONTROU INCLUDE E SE A LINHA NO EST COMENTADA...
IF sy-subrc EQ 0
AND ti_programa-codigo_fonte+0(1) NE c_comentario.
CLEAR ti_user_exit.
*- REMOVE ESPAOS NO INCIO DA STRING.
SHIFT ti_programa-codigo_fonte LEFT DELETING LEADING space.
MOVE: ti_includes-nome
TO ti_user_exit-programa,
sy-tabix
TO ti_user_exit-linha,
ti_programa-codigo_fonte TO ti_user_exit-codigo_fonte,
ti_includes-nivel
TO ti_user_exit-nivel.
APPEND ti_user_exit.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.
" PROCURA_STRING
*&---------------------------------------------------------------------*
*&
Form ESTABELECE_BREAK_POINT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM estabelece_break_point.
IF
p_modea EQ 'X'.
vg_mode = 'A'.
ELSEIF p_moden EQ 'X'.
vg_mode = 'N'.
ELSEIF p_modee EQ 'X'.
vg_mode = 'E'.
ENDIF.
LOOP AT ti_user_exit.
PERFORM evitar_time_out
USING '' 'Estabelecendo break-point...'.
CLEAR: bdcdata[], messtab[].
PERFORM preenche_bdcdata USING:
'X' 'SAPMS38E'
'0100',
' ' 'RS38M-PROGRAMM' ti_user_exit-programa,
' ' 'RS38M-FUNC_EDIT' 'X',
' ' 'RS38M-FUNC_SSET' ' ',
' ' 'RS38M-FUNC_HEAD' ' ',
' ' 'RS38M-FUNC_DOCU' ' ',
' ' 'RS38M-FUNC_TEXT' ' ',
' ' 'BDC_OKCODE'
'=SHOP',
'X' 'SAPLEDITOR_START' '2420',
' ' 'RSTXP-TDFIRST'
ti_user_exit-linha+6(4),
' ' 'BDC_OKCODE'
'=ACTL',
'X' 'SAPLEDITOR_START' '2420',
' ' 'BDC_CURSOR'
'RSTXP-TDLINE(01)',
' ' 'BDC_OKCODE'
'=ACMK',

'X' 'SAPLEDITOR_START' '2420',


' ' 'BDC_CURSOR'
'RSTXP-TDLINE(01)',
' ' 'BDC_OKCODE'
'=PGSB',
'X' 'SAPLEDITOR_START' '2420',
' ' 'BDC_OKCODE'
'=PGBA',
'X' 'SAPMS38E'
' ' 'BDC_OKCODE'

'0100',
'=BACK'.

CALL TRANSACTION 'SE38' USING


bdcdata
MODE
vg_mode
MESSAGES INTO messtab
UPDATE 'S'.
IF NOT sy-subrc IS INITIAL.
LOOP AT messtab.
ENDLOOP.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id
= messtab-msgid
lang
= 'P'
no
= messtab-msgnr
v1
= messtab-msgv1
v2
= messtab-msgv2
v3
= messtab-msgv3
v4
= messtab-msgv4
IMPORTING
msg
= vg_mensagem
EXCEPTIONS
not_found = 1
OTHERS
= 2.
MESSAGE ID 'ZMESS' TYPE 'I' NUMBER '030' WITH vg_mensagem.
ENDIF.
ENDLOOP.
ENDFORM.
" ESTABELECE_BREAK_POINT
*&---------------------------------------------------------------------*
*&
Form PREENCHE_BDCDATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_1145 text
*
-->P_1146 text
*
-->P_1147 text
*----------------------------------------------------------------------*
FORM preenche_bdcdata USING p_tela
p_campo
p_valor.
CLEAR bdcdata.
IF p_tela IS INITIAL.
bdcdata-fnam = p_campo.
bdcdata-fval = p_valor.
ELSE.
bdcdata-program = p_campo.
bdcdata-dynpro = p_valor.
bdcdata-dynbegin = p_tela.
ENDIF.
APPEND bdcdata.
ENDFORM.
" PREENCHE_BDCDATA

********** AS AMPLIAES ESTO NA TABELA 'MODSAP' **********

*----------------------------------------------------------------------*
* PROGRAMADOR: FBIO ALESSANDRO COMASSETTO
*----------------------------------------------------------------------*
* PROGRAMA...: ZKBB_PROCURA_EXIT
*----------------------------------------------------------------------*
* DATA.......: 15/02/2001
*----------------------------------------------------------------------*
* OBJETIVO...: PESQUISAR USER-EXITS EM UMA DETERMINADA TRANSAO
OU
*
PROGRAMA.
*
*----------------------------------------------------------------------*
* PARMETROS.: P_PROG = NOME DO PROGRAMA A SER PESQUISADO
*
P_TCODE = NOME DA TRANSAO A SER PESQUISADA
*
OBS.: UM DOS DOIS PARMETROS ACIMA DEVE SER ESPECIFICADO
*
*
P_INCL = DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO OS INCLUDES.
*
P_FUNC = DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO AS FUNES.
*
P_SUBMIT= DETERMINA SE A PESQUISA DEVE LEVAR
EM
*
CONSIDERAO DEMAIS PROGRAMAS CHAMADOS
POR
*
SUBMIT.
*
*
P_NIVEL = DETERMINA EM AT QUAL NVEL A PESQUISA SER
*
FEITA DENTRO DOS INCLUDES, FUNES E DEMAIS
*
PROGRAMAS. NO NVEL 1 SOMENTE SERO LEVADOS
*
EM CONSIDERAO O PROGRAMA RAIZ. NO NVEL 2
*
SER FEITA UMA PESQUISA NOS INCLUDES, FUNES
*
OS QUAIS ESTO NOS INCLUDES, FUNES DO NVEL
*
1 E ASSIM SUCESSIVAMENTE.
*
*
OBS.: NO PARMETRO P_NIVEL INFORMAR VALORES BAIXO, POIS
*
QUANTO MAIOR O NMERO, MAIOR A QUANTIDADE DE
CDIGO
*
A SER ANALIZADA
*----------------------------------------------------------------------*
*
*======================================================================*

Você também pode gostar