Enterprise Resource Planning Portal ERPGenie.COM Enterprise Resource Planning Portal

   Advertise | BLOG

Web ERPGenie.COM

Home | Vote for us |

ERPGenie.COM -> SAP Technical -> ABAP -> Example code -> Internal table documentation (Andres Picazo)

REPORT ZWRITEDOC LINE-SIZE 124 NO STANDARD PAGE HEADING.
   TABLES: DD03L, "
           DD04T, "R/3-DD: Textos de los elementos de datos
           DD02T. "R/3-DD: Textos de tablas SAP
* Tabla temporal con las lineas de cada tabla
   DATA: BEGIN OF I_LINEAS OCCURS 100,
            LINEA(80),
         END OF I_LINEAS.
* Tabla con las caracteristicas de la tabla
   DATA: BEGIN OF I_TABLA OCCURS 100,
            CAMPO(12),
            TIPO(4),
            LONG(5) TYPE I,
            REF(20),
            DESCR(40),
         END OF I_TABLA.
   DATA: D_NOMBRE(80),
         D_DESCRIPCION(80).
   DATA :  BEGIN OF SOURCE OCCURS 1000,
        LINE(72),
   END OF SOURCE.
   PARAMETERS: PROGRAM LIKE SY-REPID DEFAULT SY-REPID.
   AT USER-COMMAND.
     CASE SY-UCOMM.
       WHEN 'GRAB'.
         PERFORM GRABAR.
     ENDCASE.
   START-OF-SELECTION.
     SET PF-STATUS  'ZSTATUS1'.
     READ REPORT PROGRAM INTO SOURCE.
     DATA L_GRAB.
     CLEAR L_GRAB.
LOOP AT SOURCE.
*    translate source to upper case.
       IF L_GRAB IS INITIAL.
         D_DESCRIPCION = I_LINEAS-LINEA.
       ENDIF.
       I_LINEAS = SOURCE.
       SEARCH I_LINEAS-LINEA FOR 'BEGIN OF'.
       IF SY-SUBRC = 0.
         SEARCH I_LINEAS-LINEA FOR 'DATA'.
         IF SY-SUBRC = 0.
           L_GRAB = 'X'.
           FREE I_LINEAS.
         ENDIF.
       ENDIF.
       IF L_GRAB = 'X'.
         I_LINEAS = SOURCE.
         APPEND I_LINEAS.
         SEARCH I_LINEAS-LINEA FOR 'END OF'.
         IF SY-SUBRC = 0.
           CLEAR L_GRAB.
           PERFORM PROCESAR_FICHERO.
           PERFORM IMPRIMIR.
           FREE I_LINEAS.
           CLEAR D_DESCRIPCION.
         ENDIF.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR 'WITH HEADER LINE'.
       IF SY-SUBRC = 0.
         APPEND I_LINEAS.
         PERFORM PROCESAR_FICHERO.
         PERFORM IMPRIMIR.
       ENDIF.
     ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  GRABAR
*&---------------------------------------------------------------------*
*       Graba el fichero en c:\temp\p.rtf y lo abre con word.
*----------------------------------------------------------------------*
   FORM GRABAR.
     CALL FUNCTION 'LIST_DOWNLOAD'
         EXPORTING
*         LIST_INDEX = SLIST_INDEX_DEFAULT
              METHOD     = 'RTF'
          EXCEPTIONS
               OTHERS     = 1.

     CALL FUNCTION 'EXECUTE_WINWORD'
          EXPORTING
               I_FILE = 'C:\TEMP\P.RTF'
          EXCEPTIONS
               OTHERS = 1.
   ENDFORM.                               " GRABAR
*&---------------------------------------------------------------------*
*&      Form  PROCESAR_FICHERO
*&---------------------------------------------------------------------*
   FORM PROCESAR_FICHERO.
     DATA: L_AUX1(80),
          L_AUX2(80).

     FREE I_TABLA.
     LOOP AT I_LINEAS.
       CLEAR I_TABLA.
*    translate i_lineas-linea to upper case.
       SEARCH I_LINEAS-LINEA FOR 'BEGIN OF'.
       IF SY-SUBRC = 0.
         SPLIT I_LINEAS-LINEA AT 'BEGIN OF' INTO L_AUX1 D_NOMBRE.
         SPLIT D_NOMBRE AT 'OCCURS' INTO D_NOMBRE L_AUX1.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR '('.
       IF SY-SUBRC = 0.
          SPLIT I_LINEAS-LINEA AT '(' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX1.
         I_TABLA-CAMPO = L_AUX1.
         SPLIT L_AUX2 AT ')' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX1.
         IF L_AUX1 CO '0123456789 '.
           I_TABLA-LONG = L_AUX1.
         ENDIF.
         I_TABLA-TIPO = 'CHAR'.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR 'LIKE'.
       IF SY-SUBRC = 0.
         SPLIT I_LINEAS-LINEA AT 'LIKE' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX1.
         I_TABLA-CAMPO = L_AUX1.
           SPLIT L_AUX2 AT ',' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX1.
         I_TABLA-REF = L_AUX1.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR 'TYPE'.
       IF SY-SUBRC = 0.
         SPLIT I_LINEAS-LINEA AT 'TYPE' INTO L_AUX1 L_AUX2.
         IF I_TABLA-CAMPO IS INITIAL.
           CONDENSE L_AUX1.
           I_TABLA-CAMPO = L_AUX1.
         ENDIF.
             SPLIT L_AUX2 AT ',' INTO L_AUX1 L_AUX2.
        CONDENSE L_AUX1.
         CASE L_AUX1.
           WHEN 'I'.
             I_TABLA-TIPO = 'INT'.
             I_TABLA-LONG = 4.
           WHEN 'C'.
             I_TABLA-TIPO = 'CHAR'.
           WHEN 'N'.
             I_TABLA-TIPO = 'NUMC'.
           WHEN 'T'.
             I_TABLA-TIPO = 'TIME'.
             I_TABLA-LONG = 8.
           WHEN OTHERS.
             I_TABLA-TIPO = L_AUX1.
         ENDCASE.
       ENDIF.

       SEARCH I_LINEAS-LINEA FOR '"'.
       IF SY-SUBRC = 0.
         SPLIT I_LINEAS-LINEA AT '"' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX2.
         I_TABLA-DESCR = L_AUX2.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR 'INCLUDE STRUCTURE'.
       IF SY-SUBRC = 0.
         SPLIT I_LINEAS-LINEA AT 'INCLUDE STRUCTURE' INTO L_AUX1 L_AUX2.
         SPLIT L_AUX2 AT '.' INTO L_AUX1 L_AUX2.
         CONDENSE L_AUX1.
         I_TABLA-CAMPO = 'INCLUDE STR'.
         I_TABLA-REF   = L_AUX1.
       ENDIF.
       SEARCH I_LINEAS-LINEA FOR 'WITH HEADER LINE'.
         IF SY-SUBRC = 0.
           IF NOT I_LINEAS-LINEA CA '"'.
             SPLIT I_LINEAS-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.
                   I_TABLA-CAMPO = '...'.
                   I_TABLA-TIPO  = 'TABI'.
                   I_TABLA-REF   = L_AUX2.
                   SELECT SINGLE * FROM DD02T
                    WHERE TABNAME = L_AUX2
                      AND DDLANGUAGE = SY-LANGU.
                   IF SY-SUBRC = 0.
                   I_TABLA-TIPO  = 'TABE'.
                   I_TABLA-DESCR   = DD02T-DDTEXT.
                   ENDIF.
                   IF L_AUX1 CA ':'.
                     SPLIT L_AUX1 AT 'DATA:' INTO L_AUX1 L_AUX2.
                   ELSE.
                     SPLIT L_AUX1 AT 'DATA' INTO L_AUX1 L_AUX2.
                   ENDIF.
                   D_NOMBRE = L_AUX2.
                 ENDIF.
               ENDIF.
             ENDIF.
           ENDIF.
         ENDIF.
       IF NOT I_TABLA-CAMPO IS INITIAL.
         APPEND I_TABLA.
       ENDIF.
     ENDLOOP.
     LOOP AT I_TABLA WHERE NOT REF IS INITIAL.
        SPLIT I_TABLA-REF AT '-' INTO L_AUX1 L_AUX2.
       SELECT SINGLE * FROM DD03L
        WHERE TABNAME = L_AUX1
          AND FIELDNAME = L_AUX2.
       IF SY-SUBRC = 0.
         I_TABLA-TIPO = DD03L-DATATYPE.
         I_TABLA-LONG = DD03L-INTLEN.
         IF I_TABLA-DESCR IS INITIAL.
           SELECT SINGLE * FROM DD04T
            WHERE ROLLNAME = DD03L-ROLLNAME
              AND DDLANGUAGE = SY-LANGU.
           IF SY-SUBRC = 0.
             I_TABLA-DESCR = DD04T-DDTEXT.
           ENDIF.
         ENDIF.
         MODIFY I_TABLA.
       ENDIF.
     ENDLOOP.
   ENDFORM.                               " PROCESAR_FICHERO
*&---------------------------------------------------------------------*
*&      Form  IMPRIMIR
*&---------------------------------------------------------------------*
   FORM IMPRIMIR.
   DATA L_AUX(80).
     FORMAT COLOR COL_NORMAL INTENSIFIED ON.
     ULINE AT 1(80).
     WRITE: / SY-VLINE,
             (76)     D_NOMBRE CENTERED,
              SY-VLINE.
     SPLIT D_DESCRIPCION AT '*' INTO L_AUX D_DESCRIPCION.
     WRITE: / SY-VLINE,
             (76)     D_DESCRIPCION CENTERED,
              SY-VLINE.
     NEW-LINE.
     ULINE AT 1(80).
     DETAIL.
     FORMAT COLOR OFF.
     WRITE: /
           SY-VLINE,
         (10) 'CAMPO',
           SY-VLINE,
         (4)  'TIPO',
           SY-VLINE,
         (4) 'LONG',
           SY-VLINE,
         (16)  'REFERENCIA',
           SY-VLINE,
         (30)  'DESCRIPCION',
           SY-VLINE.
     NEW-LINE.
     ULINE AT 1(80).
     DETAIL.
     LOOP AT I_TABLA.
       WRITE: /
             SY-VLINE,
          (10)   I_TABLA-CAMPO,
             SY-VLINE,
             I_TABLA-TIPO,
             SY-VLINE,
          (4)   I_TABLA-LONG,
             SY-VLINE,
          (16)   I_TABLA-REF,
             SY-VLINE,
          (30)   I_TABLA-DESCR,
             SY-VLINE.
     ENDLOOP.
     NEW-LINE.
     ULINE AT 1(80).

     SKIP 2.
   ENDFORM.                               " IMPRIMIR

Contact Us | Polls | Add URL | Contribute | About | Privacy | Terms | Feedback | Help!

Message Board | Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job