Tips and Tricks for the ABAP® Programming Language

Y9030015: A table browser (for TRANSP’, ‘POOL’ and ‘CLUSTERS’)

To support the testing work it is quite useful to have a utility which quickly displays some lines from an external table in an prepared format. The display area consists of 255 Bytes, tables are read up to a line length of 8000 bytes. The table types ‘INTAB’, ‘VIEW’ and ‘APPEND’ remain unconsidered, in the case of ‘VIEW’ for example because considerable run times can be the result.

Parameters:

P_TABNAM = name of the desired external table
P_NUMBER = number of the table lines which have to be output
P_SKIP   = number of the table lines which have to be skipped at the beginning of the table

ABAP-Source-Code

You can cut and paste the source code directly into the ABAP-Workbench.

REPORT Y9030015 LINE-SIZE 1023.    "Release 3.1G, 4.5A
************************************************************************
* Copyright (c) 1998 by CT-Team, 33415 Verl, http://www.ct-software.com
*
*     You can use or modify this report for your own work as long
*               as you don't try to sell or republish it.
*      In no event will the author be liable for indirect, special,
*        Incidental, or consequental damages (if any) arising out of
*                       the use of this report.
*
************************************************************************
*//////////////////////////////////////////////////////////////////////*
 MOVE: 'Read and display variable external tables (max. 1023 bytes) '
        TO SY-TITLE.
*//////////////////////////////////////////////////////////////////////
 PARAMETERS: P_TABNAM LIKE DD02L-TABNAME DEFAULT 'DD01L             ',
             P_NUMBER(4) TYPE N DEFAULT '0125',
             P_SKIP(4) TYPE N DEFAULT '0'.
***************         External tables           **********************
 TABLES  DD02L.
*
***************         Variables                 **********************
 DATA: ZX030L LIKE X030L.
 DATA: FUN_OK(1) TYPE N.
 DATA: OFF TYPE I.
 DATA: ZLEN TYPE I.
 DATA: WORK(8000) TYPE C.
 DATA: WORK1(8000) TYPE C.
 DATA: TABLEN TYPE I.
 DATA  TAB_OK(1) TYPE N.
*
***************         internal tables           **********************
DATA BEGIN OF ZDFIES OCCURS 1000.
       INCLUDE STRUCTURE DFIES.
DATA END OF ZDFIES.

***************         Field symbols             **********************
  FIELD-SYMBOLS: <FS1>, <FS2>.
***************         Macro definition          **********************
 DEFINE HEAD1.
*
   ZLEN = ZLEN + ZDFIES-LENG.
   IF OFF EQ 0.
      MOVE '|' TO WORK+OFF(1).
      ADD 1 TO OFF.
   ENDIF.
   IF ZLEN LE TABLEN.
      MOVE &1 TO WORK+OFF(&2).
      ADD &2 TO OFF.
      MOVE '|' TO WORK+OFF(1).
      ADD 1 TO OFF.
   ENDIF.
*
 END-OF-DEFINITION.
*//////////////////////////////////////////////////////////////////////*
*************               Main Section             *******************
*//////////////////////////////////////////////////////////////////////*
*
 PERFORM CHECK-TABLE-CLASS.
 PERFORM READ-DIRECT-TABLE.
*
*//////////////////////////////////////////////////////////////////////*
*************                Subroutines             *******************
*//////////////////////////////////////////////////////////////////////*
************************************************************************
*                   Check tablename and tableclass
************************************************************************
 FORM CHECK-TABLE-CLASS.
*
  CLEAR TAB_OK.
*.......................................................................
   SELECT * FROM DD02L
          WHERE TABNAME EQ P_TABNAM.
          TAB_OK = 1.
          IF DD02L-TABCLASS CS 'TRANSP' OR
             DD02L-TABCLASS CS 'POOL' OR
             DD02L-TABCLASS CS 'CLUSTER '.
             TAB_OK = 2.
          ENDIF.
   ENDSELECT.
*
   IF TAB_OK EQ 0.
      WRITE: /1 'Sorry, table name not found : ', P_TABNAM.
      WRITE: /1 'Report must be canceled' COLOR 6.
      STOP.
   ENDIF.
*
   IF TAB_OK EQ 1.
      WRITE: /1 'Tableclass not ''TRANSP'', ''POOL'' or ''CLUSTER'' :',
                 DD02L-TABCLASS COLOR 6.
*...................... INNTAB = no external table
*...................... VIEW   = perhaps long distance run
*...................... APPEND = APPEND-structur
*.......................................................................
      SKIP.
      WRITE: /1 'DD02L: ', DD02L+0(80).
      WRITE: /1 'Report must be canceled' COLOR 6.
      STOP.
   ENDIF.
*
 ENDFORM.
************************************************************************
*                   read table direct
***********************************************************************.
FORM READ-DIRECT-TABLE.
*
 DATA: OFFS     TYPE I.
 DATA: ANZ_NUMB TYPE I.
*.......................................................................
*
  IF P_NUMBER EQ 0.
     WRITE: /1 'No number of tablerows entered ''P_NUMBER = 0 '' '.
     EXIT.
  ENDIF.
******************** Headline ******************************************
*
 PERFORM LESEN-FIELDTAB USING P_TABNAM.
*
 IF FUN_OK EQ 1.
    WRITE: /1 'Content of Table : ' COLOR 3 , P_TABNAM COLOR 6.
    WRITE: /1 'Maximum length   : ', tablen COLOR 4.
    WRITE: /1 'Type of table    : ', DD02L-TABCLASS COLOR 5.
    SKIP 3.
*   DO TABLEN TIMES.
*      POSITION SY-INDEX.
*      WRITE '-'.
*   ENDDO.
*  WRITE AT /(TABLEN) SY-ULINE.
*

    LOOP AT ZDFIES.
      HEAD1 ZDFIES-FIELDNAME  ZDFIES-LENG.
    ENDLOOP.
    WRITE: /1 sy-uline(off).
    WRITE: /1 WORK(off) COLOR 3.
*     SKIP.
    WRITE /1 SPACE.
    DO off TIMES.
       POSITION SY-INDEX.
       WRITE '='.
    ENDDO.

*    WRITE AT /(TABLEN) SY-ULINE.
    CLEAR: WORK, OFF.
******************** content  ******************************************
   SELECT * FROM  (P_TABNAM) INTO WORK1.
*
     IF SY-DBCNT GT P_SKIP.
        ADD 1 TO ANZ_NUMB.
        IF ANZ_NUMB GT P_NUMBER.
           EXIT.
        ENDIF.
*
*       WHILE TABLEN GE OFF.
          LOOP AT ZDFIES.

            IF SY-TABIX EQ 1.
               MOVE '|' TO WORK+OFF(1).
               ADD 1 TO OFF.
            ENDIF.

          IF ZDFIES-INTTYPE = 'P'.
             ASSIGN WORK1+ZDFIES-OFFSET(ZDFIES-INTLEN) TO <FS1>
                    TYPE 'P' DECIMALS ZDFIES-DECIMALS.
          ELSE.
             IF ZDFIES-INTTYPE = 'F'.       "noch verbessern !!!!!
                ASSIGN WORK1+ZDFIES-OFFSET(ZDFIES-INTLEN) TO <FS1>
                       CASTING TYPE C.
*                      TYPE 'F' DECIMALS ZDFIES-DECIMALS.
             ELSE.
                ASSIGN WORK1+ZDFIES-OFFSET(ZDFIES-INTLEN) TO <FS1>
                       TYPE ZDFIES-INTTYPE.
             ENDIF.
          ENDIF.
*
          MOVE <FS1> TO WORK+OFF(zdfies-leng).
          ADD ZDFIES-LENG TO OFF.
          MOVE  '|' TO WORK+OFF(1).
          ADD 1 TO OFF.
           IF TABLEN  LT OFF.
              TABLEN  = OFF.
           ENDIF.
        ENDLOOP.

*      ENDWHILE.
       WRITE: /1 Work.

       CLEAR: OFF, work, work1.
     ENDIF.
   ENDSELECT.
 ELSE.
    WRITE: /1 'NO DFIES found'.
 ENDIF.
*
ENDFORM.
************************************************************************
*                 read info about table
************************************************************************
 FORM LESEN-FIELDTAB USING TNAME.
*
  DATA: LIN1 TYPE I.
  CLEAR FUN_OK.
*.......................................................................
  CALL FUNCTION 'GET_FIELDTAB'
   EXPORTING
       LANGU              = SY-LANGU
       ONLY               = SPACE
       TABNAME            = TNAME
       WITHTEXT           = 'X'
   IMPORTING
       HEADER             = ZX030L
   TABLES
       FIELDTAB           = ZDFIES
   EXCEPTIONS
      INTERNAL_ERROR      = 01
      NO_TEXTS_FOUND      = 02
      TABLE_HAS_NO_FIELDS = 03
      TABLE_NOT_ACTIV     = 04.
*
  CASE SY-SUBRC.
     WHEN 0.
       MOVE 1 TO FUN_OK.
       DESCRIBE TABLE ZDFIES LINES LIN1.
       IF LIN1 NE 0.
          READ TABLE ZDFIES INDEX LIN1.
          IF SY-SUBRC EQ 0.
             TABLEN = ZDFIES-OFFSET + ZDFIES-INTLEN.
          ELSE.
             WRITE: /1 'ERROR: LESEN-FIELDTAB, LIN1 = unable'.
             BREAK-POINT.  "what to do
          ENDIF.
       ELSE.
          WRITE: /1 'ERROR: LESEN-FIELDTAB, LIN1 = 0'.
          BREAK-POINT.  "what to do
       ENDIF.

*
     WHEN OTHERS.
        WRITE: /1 'Error ''GET_FIELDTAB'' :', SY-SUBRC.
   ENDCASE.
*
 ENDFORM.
************************************************************************
************************************************************************
******************* END OF PROGRAM *************************************