Documentación sobre tablas internas
************************************************************************
* MÓDULO : BC
* TIPO : Utilidad
* TITULO : Comenta programas con definiciones del diccionario dedat
* DESCRIPCION : *
* ... *
* ... *
* AUTOR: Andrés Picazo http://www.sap4.com *
************************************************************************
REPORT ZCOMENTA.
TABLES: DD03L, "Campos de tabla
DD04T, "R/3-DD: Textos de los elementos de datos
DD02T, "R/3-DD: Textos de tablas SAP
T100. "Mensajes
DATA: L_MSGNR LIKE T100-MSGNR, "Número de mensaje
L_ARBGB LIKE T100-ARBGB, "Area funcional
L_MSGID LIKE T100-ARBGB. "Area funcional
DATA: D_LINEA(72).
DATA: BEGIN OF SOURCE OCCURS 1000,
LINE(72),
END OF SOURCE.
DATA: I_CAMBIOS LIKE SOURCE OCCURS 1000 WITH HEADER LINE.
DATA: I_TXT like textpool OCCURS 100 with header line.
* Definición de pool de textos ABAP
DATA: TABTEXT LIKE TEXTPOOL OCCURS 1 WITH HEADER LINE.
PARAMETERS: PROGRAM LIKE SY-REPID DEFAULT SY-REPID,
TABLES AS CHECKBOX DEFAULT 'X',
LIKE AS CHECKBOX DEFAULT 'X',
PARAM AS CHECKBOX DEFAULT 'X',
INCLUDE AS CHECKBOX DEFAULT 'X',
TEXT AS CHECKBOX DEFAULT 'X',
MESSAGE AS CHECKBOX DEFAULT 'X'.
START-OF-SELECTION.
DATA: L_AUX1(80), L_AUX2(80), L_GRAB, L_TABLA(14),
L_LINEA_ANT(72), L_NUM_LINEA_ANT TYPE I.
FREE I_CAMBIOS.
READ REPORT PROGRAM INTO SOURCE.
READ TEXTPOOL PROGRAM INTO I_TXT LANGUAGE SY-LANGU.
CALL FUNCTION 'PRETTY_PRINTER'
EXPORTING
inctoo = space
TABLES
NTEXT = SOURCE
OTEXT = SOURCE
EXCEPTIONS
enqueue_table_full = 1
include_enqueued = 2
include_readerror = 3
include_writeerror = 4
OTHERS = 5.
CLEAR L_GRAB.
LOOP AT SOURCE.
D_LINEA = SOURCE.
IF D_LINEA(1) = '*'.
L_LINEA_ANT = SOURCE.
L_NUM_LINEA_ANT = SY-TABIX.
ENDIF.
CHECK D_LINEA(1) NE '*'.
IF TABLES = 'X'.
CLEAR L_TABLA.
SEARCH D_LINEA FOR 'TABLES'.
IF SY-SUBRC = 0.
TRANSLATE D_LINEA TO UPPER CASE.
SPLIT D_LINEA AT 'TABLES' INTO L_AUX1 L_AUX2.
SPLIT L_AUX2 AT ':' INTO L_AUX1 L_AUX2.
IF L_AUX2 CA '.'.
SPLIT L_AUX2 AT '.' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ELSE.
L_GRAB = 'X'.
SPLIT L_AUX2 AT ',' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
ENDIF.
CHECK NOT D_LINEA CA '"'.
TRANSLATE D_LINEA TO UPPER CASE.
IF L_TABLA IS INITIAL AND L_GRAB = 'X'.
IF D_LINEA CA '.'.
SPLIT D_LINEA AT '.' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
CLEAR L_GRAB.
ELSE.
SPLIT D_LINEA AT ',' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
ENDIF.
IF NOT L_TABLA IS INITIAL.
SELECT SINGLE * FROM DD02T
WHERE TABNAME = L_TABLA
AND DDLANGUAGE = SY-LANGU.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING DD02T-DDTEXT.
ENDIF.
CLEAR L_TABLA.
ENDIF.
ENDIF.
IF PARAM = 'X'.
CLEAR L_TABLA.
SEARCH D_LINEA FOR 'PARAMETERS'.
IF SY-SUBRC = 0.
TRANSLATE D_LINEA TO UPPER CASE.
SPLIT D_LINEA AT 'PARAMETERS' INTO L_AUX1 L_AUX2.
SPLIT L_AUX2 AT ':' INTO L_AUX1 L_AUX2.
IF L_AUX2 CA 'LIKE'.
SPLIT L_AUX2 AT 'LIKE' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
IF L_AUX2 CN '.'.
L_GRAB = 'X'.
ENDIF.
ENDIF.
CHECK NOT D_LINEA CA '"'.
TRANSLATE D_LINEA TO UPPER CASE.
IF L_TABLA IS INITIAL AND L_GRAB = 'X'.
IF D_LINEA CA 'LIKE'.
SPLIT D_LINEA AT 'LIKE' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
IF L_AUX2 CA '.'.
CLEAR L_GRAB.
ENDIF.
ENDIF.
IF NOT L_TABLA IS INITIAL.
LOOP AT I_TXT WHERE entry+1(8) = L_TABLA
AND entry(1) = 'S'.
ENDLOOP.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING I_TXT-entry+17(72).
ENDIF.
CLEAR L_TABLA.
ENDIF.
ENDIF.
IF PARAM = 'X'.
CLEAR L_TABLA.
SEARCH D_LINEA FOR 'SELECT-OPTIONS'.
IF SY-SUBRC = 0.
TRANSLATE D_LINEA TO UPPER CASE.
SPLIT D_LINEA AT 'SELECT-OPTIONS' INTO L_AUX1 L_AUX2.
SPLIT L_AUX2 AT ':' INTO L_AUX1 L_AUX2.
IF L_AUX2 CA 'FOR'.
SPLIT L_AUX2 AT 'FOR' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
IF L_AUX2 CN '.'.
L_GRAB = 'X'.
ENDIF.
ENDIF.
CHECK NOT D_LINEA CA '"'.
TRANSLATE D_LINEA TO UPPER CASE.
IF L_TABLA IS INITIAL AND L_GRAB = 'X'.
IF D_LINEA CA 'FOR'.
SPLIT D_LINEA AT 'FOR' INTO L_AUX1 L_AUX2.
CONDENSE L_AUX1.
L_TABLA = L_AUX1.
ENDIF.
IF L_AUX2 CA '.'.
CLEAR L_GRAB.
ENDIF.
ENDIF.
IF NOT L_TABLA IS INITIAL.
LOOP AT I_TXT WHERE entry+1(8) = L_TABLA
AND entry(1) = 'S'.
ENDLOOP.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING I_TXT+17(72).
ENDIF.
CLEAR L_TABLA.
ENDIF.
ENDIF.
IF LIKE = 'X'.
CHECK NOT D_LINEA CA '"'.
SEARCH D_LINEA FOR 'LIKE'.
IF SY-SUBRC = 0.
SPLIT D_LINEA AT 'LIKE' INTO L_AUX1 L_AUX2.
IF L_AUX2 CA ','.
SPLIT L_AUX2 AT ',' INTO L_AUX1 L_AUX2.
ELSE.
SPLIT L_AUX2 AT '.' INTO L_AUX1 L_AUX2.
ENDIF.
CONDENSE L_AUX1.
SPLIT L_AUX1 AT '-' INTO L_AUX1 L_AUX2.
SELECT SINGLE * FROM DD03L
WHERE TABNAME = L_AUX1
AND FIELDNAME = L_AUX2.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM DD04T
WHERE ROLLNAME = DD03L-ROLLNAME
AND DDLANGUAGE = SY-LANGU.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING DD04T-DDTEXT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF INCLUDE = 'X'.
SEARCH D_LINEA FOR 'INCLUDE'.
IF SY-SUBRC = 0.
SPLIT D_LINEA AT 'INCLUDE' INTO L_AUX1 L_AUX2.
SEARCH L_AUX2 FOR 'STRUCTURE'.
IF SY-SUBRC NE 0.
IF L_AUX2 CA '.'.
SPLIT L_AUX2 AT '.' INTO L_AUX1 L_AUX2.
ELSE.
SPLIT L_AUX2 AT ',' INTO L_AUX1 L_AUX2.
ENDIF.
CONDENSE L_AUX1.
READ TEXTPOOL L_AUX1 INTO TABTEXT LANGUAGE SY-LANGU.
IF SY-SUBRC = 0.
READ TABLE TABTEXT WITH KEY ID = 'R'.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING TABTEXT-ENTRY.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF L_LINEA_ANT(1) NE '*'.
SEARCH D_LINEA FOR 'WITH HEADER LINE'.
IF SY-SUBRC = 0.
IF NOT D_LINEA CA '"'.
SPLIT D_LINEA AT 'OCCURS' INTO L_AUX1 L_AUX2.
IF SY-SUBRC = 0.
SPLIT L_AUX1 AT 'LIKE' INTO L_AUX1 L_AUX2.
IF SY-SUBRC = 0.
CONDENSE L_AUX2.
IF NOT L_AUX2 IS INITIAL.
SELECT SINGLE * FROM DD02T
WHERE TABNAME = L_AUX2
AND DDLANGUAGE = SY-LANGU.
IF SY-SUBRC = 0.
CONCATENATE '*' DD02T-DDTEXT INTO L_AUX1
SEPARATED BY SPACE.
INSERT L_AUX1 INTO SOURCE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF TEXT = 'X'.
SEARCH D_LINEA FOR ' TEXT-'.
IF SY-SUBRC = 0.
SPLIT D_LINEA AT ' TEXT-' INTO L_AUX1 L_AUX2.
L_AUX1 = L_AUX2(3).
LOOP AT I_TXT WHERE entry+1(3) = L_AUX1.
ENDLOOP.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING I_TXT-entry+9(72).
ENDIF.
ENDIF.
ENDIF.
IF MESSAGE = 'X'.
SEARCH D_LINEA FOR 'MESSAGE-ID '.
IF SY-SUBRC = 0.
SPLIT D_LINEA AT 'MESSAGE-ID ' INTO L_AUX1 L_AUX2.
L_MSGID = L_AUX2(2).
ENDIF.
SEARCH D_LINEA FOR ' MESSAGE '.
IF SY-SUBRC = 0.
SPLIT D_LINEA AT ' MESSAGE ' INTO L_AUX1 L_AUX2.
L_AUX2 = L_AUX2+1.
IF L_AUX2 CA '('.
SPLIT L_AUX2 AT '(' INTO L_AUX1 L_AUX2.
L_MSGNR = L_AUX1.
SPLIT L_AUX2 AT ')' INTO L_AUX1 L_AUX2.
L_ARBGB = L_AUX1.
ELSE.
L_ARBGB = L_MSGID.
SEARCH L_AUX2 FOR 'WITH'.
IF SY-SUBRC = 0.
SPLIT L_AUX2 AT 'WITH' INTO L_AUX1 L_AUX2.
ELSE.
SPLIT L_AUX2 AT '.' INTO L_AUX1 L_AUX2.
ENDIF.
L_MSGNR = L_AUX1.
ENDIF.
IF NOT L_MSGNR IS INITIAL.
SELECT SINGLE * FROM T100
WHERE SPRSL = SY-LANGU
AND ARBGB = L_ARBGB
AND MSGNR = L_MSGNR.
IF SY-SUBRC = 0.
PERFORM ANYADE_COMENTARIO USING T100-TEXT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
L_LINEA_ANT = SOURCE.
L_NUM_LINEA_ANT = SY-TABIX.
ENDLOOP.
CALL FUNCTION 'PRETTY_PRINTER'
EXPORTING
inctoo = space
TABLES
NTEXT = SOURCE
OTEXT = SOURCE
EXCEPTIONS
enqueue_table_full = 1
include_enqueued = 2
include_readerror = 3
include_writeerror = 4
OTHERS = 5.
INSERT REPORT PROGRAM FROM SOURCE.
LOOP AT I_CAMBIOS.
WRITE / I_CAMBIOS.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form ANYADE_COMENTARIO
*&---------------------------------------------------------------------*
* Añade comentario a la línea fuente
*&---------------------------------------------------------------------*
FORM ANYADE_COMENTARIO USING PE_COMEN.
CONCATENATE D_LINEA '"' INTO D_LINEA SEPARATED BY SPACE.
CONCATENATE D_LINEA PE_COMEN INTO D_LINEA.
SOURCE = D_LINEA.
MODIFY SOURCE.
I_CAMBIOS = D_LINEA.
APPEND I_CAMBIOS.
ENDFORM. " ANYADE_COMENTARIO
|