Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZDOCPROG PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Informativos
Lunes, 07 de Julio de 2003 21:01
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




Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search