Tabla de diccionario necesaria
Programa que contiene los forms principales
REPORT Z_I_BREAK_ME_PLUS.
*--[ Rutinas de soporte para el include Z_I_BREAK_ME
FORM INSERT_BKP USING P_CPROG TYPE SYCPROG
P_REPID TYPE SYREPID.
DATA: L_IG_TB_BRK TYPE Z_TB_BRK,
l_motivo type TEXT50.
IF SY-LISEL+0(1) = '@'.
*--[ Buscamos por TAG
SELECT SINGLE motivo INTO l_motivo FROM Z_TB_BRK
WHERE TAG = SY-LISEL.
ELSE.
*--[ Buscamos por programa
SELECT MOTIVO INTO SY-LISEL FROM Z_TB_BRK
WHERE CPROG = P_CPROG
AND REPID = P_REPID
ORDER BY PRIMARY KEY.
EXIT.
ENDSELECT.
ENDIF.
IF SY-SUBRC NE 0.
CLEAR L_Z_TB_BRK.
IF SY-LISEL+0(1) = '@'.
L_Z_TB_BRK-TAG = SY-LISEL.
if sy-msgv1 is INITIAL.
L_Z_TB_BRK-MOTIVO = '## AUTOMATIC TAG BREAK ##'.
else.
L_Z_TB_BRK-MOTIVO = sy-msgv1.
endif.
ELSE.
L_Z_TB_BRK-MOTIVO = '## AUTOMATIC SOURCE BREAK ##'.
ENDIF.
L_Z_TB_BRK-CPROG = P_CPROG.
L_Z_TB_BRK-REPID = P_REPID.
L_Z_TB_BRK-UNAME = sy-uname.
L_Z_TB_BRK-DATBI = '99991231'.
L_Z_TB_BRK-DATAB = sy-datum.
INSERT Z_TB_BRK FROM L_Z_TB_BRK.
ENDIF.
ENDFORM. "insert_BKP
FORM CHECK_BKP USING P_CPROG TYPE SYCPROG
P_REPID TYPE SYREPID
CHANGING P_SUBRC.
IF SY-LISEL+0(1) = '@'.
SELECT BUCLE INTO SY-LISEL FROM Z_TB_BRK
WHERE TAG = SY-LISEL
AND ( UNAME = SY-UNAME OR UNAME = '*' )
AND DATBI >= SY-DATUM
AND DATAB <= SY-DATUM
AND ACTIV = 'X'
ORDER BY PRIMARY KEY.
EXIT.
ENDSELECT.
ELSE.
SELECT BUCLE INTO SY-LISEL FROM Z_TB_BRK
WHERE CPROG = P_CPROG
AND REPID = P_REPID
AND ( UNAME = SY-UNAME OR UNAME = '*' )
AND DATBI >= SY-DATUM
AND DATAB <= SY-DATUM
AND ACTIV = 'X'
ORDER BY PRIMARY KEY.
EXIT.
ENDSELECT.
ENDIF.
if sy-subrc eq 0.
P_SUBRC = 100.
if SY-lisel = 'X'.
*--[ Bucle infinito activo
add 1 to P_SUBRC.
endif.
endif.
ENDFORM. "CHECK_BKP
Include Z_I_BREAK_ME
*--[ Gestor de Break-Points
*--[
*--[ V.1.01 20150715 - Se añade gestión de bucles infinitos
*--[
*--[ USA A VARIABLE SY-LISEL PARA PASAR EL PARAMETRO DEL TAG
*--[ EL TAG SIEMPRE DEBE COMENZAR POR @
*--[
*--[ Añadimos el break a la tabla, por si no está
PERFORM INSERT_BKP IN PROGRAM Z_I_BREAK_ME_PLUS IF FOUND
USING SY-CPROG
SY-REPID.
*--[ Comprobamos si existe completamente el BKP
PERFORM CHECK_BKP IN PROGRAM Z_I_BREAK_ME_PLUS IF FOUND
USING sy-cprog
sy-repid
CHANGING SY-SUBRC.
*--[ Si estás leyendo esto es porque hay un BREAK-POINT configurado
*--[ en la tabla Z_TB_BRK.
*--[ En la variable SY-LISEL podrás ver el motivo
*--[ Desactivalo si ya no lo necesitas
case sy-subrc.
when 100. BREAK-POINT.
when 101.
do.
if sy-subrc eq 69.
exit.
endif.
enddo.
endcase.
*--[ IECI:FIN 20150428