Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Can anyone give a similar snippet :Reading from spool

Former Member
0 Kudos

I have spool with me of MB51 output created programmatically and i want it back in an internal table.I use this code

I have written the code but i have some doubts.

Firstly i dont know the exact structure which i must assign to output internal table.

Secondly i get an error like UC_OBJECTS_NOT_CHAR

call function 'RSPO_RETURN_ABAP_SPOOLJOB'

exporting

rqident = SPOOL_NUMBER

tables

buffer = itab

exceptions

no_such_job = 1

not_abap_list = 2

job_contains_no_data = 3

selection_empty = 4

no_permission = 5

can_not_access = 6

read_error = 7

others = 8.

3 REPLIES 3

Former Member
0 Kudos

Hi Aditya,

the below code is given by SAP (SAP note)......

Here using the spool no the spool is read.....

check this might be helpful for u...

*
* display spool list > 255 columns
*
* This is a SAP utility report to allow display of
* spool request lists with more than 255 columns in
* releases 4.6B and 4.6C (4.6D kernel must be used)
* SAPnet note: 186603
*
report ZRSPOSHOWLIST line-size 80.
parameters: rqident like tsp01-rqident,
            firstl type i default 0,
            lastl type i default 0.

* global data from LSPOXTOP
DATA:   RC(10) TYPE C,
        ERRMSG(100) TYPE C,
        STATUS LIKE SY-SUBRC,
        DSN_TYPE(8) TYPE C.
DATA: BEGIN OF DATA_SET_LINE,
        DATA_LENGTH(5),
        PRECOL(1),
*        DATA_LINE(1000),
        DATA_LINE(5000),  "MODAB
      END OF DATA_SET_LINE,
      DATA_SET_LENGTH(5) TYPE C.
TABLES: TSP01, TST05, tspoptions.
DATA: TEMSE_NAME LIKE TST01-DNAME,
      TEMSE_CLIENT LIKE TST01-DCLIENT,
      TEMSE_HANDLE LIKE RSTSTYPE-HANDLE,
      TEMSE_PART LIKE TST01-DPART,
      TEMSE_OBJTYP LIKE TST01-DTYPE,
      TEMSE_RECTYP LIKE RSTSTYPE-RECTYP,
      TEMSE_CHARCO LIKE TST01-DCHARCOD.
DATA: IS_OTF.
* global data from LSPOCTOP
DATA: BEGIN OF SPOC
*   ,   escape
*   ,   prtctrl
    ,   FIRST_BYTES(4)   " collection of the first bytes of the
                         " escape sequences, which I am searching for.

    ,   PRTCTRL_START_LENGTH TYPE I
    ,   PRTCTRL_TOTAL_LENGTH TYPE I
    ,   PRTCTRL_START(10)

    ,   SYMBOL_LOW_START(10)
    ,   SYMBOL_HGH_START(10)
    ,   SYMBOL_START_LENGTH TYPE I

    ,   ICON_START(10)
    ,   ICON_START_LENGTH    TYPE I
    ,   ICON_SEL             TYPE I VALUE 1
    ,   FRAME_START(10)
    ,   FRAME_START_LENGTH   TYPE I
    , END  OF  SPOC.
FIELD-SYMBOLS: <SPOC_PRTCTRL>     TYPE C
             , <SPOC_FRAME>       TYPE C
             , <SPOC_ICON>        TYPE C
             , <SPOC_SYMBOL_LOW>  TYPE C
             , <SPOC_SYMBOL_HGH>  TYPE C
             .

* copied from RSPO_DISPLAY_ABAP_SPOOLJOB
DATA: BUFFER LIKE DATA_SET_LINE OCCURS 1000.
tables: tsp02l.

SELECT SINGLE * FROM TSP01 WHERE RQIDENT = RQIDENT.
IF SY-SUBRC <> 0.
  write: / 'Spool request does not exist:'(001), rqident.
  exit.
endif.
CALL FUNCTION 'RSPO_CHECK_JOB_PERMISSION'
       EXPORTING
            ACCESS        = 'DISP'
            SPOOLREQ      = TSP01
       EXCEPTIONS
            NO_PERMISSION = 1
            OTHERS        = 2.
IF SY-SUBRC <> 0.
  write: / 'No authorization to display'(002).
  exit.
ENDIF.

PERFORM READ_DATA TABLES BUFFER
                   USING TSP01 FIRSTL LASTL.
if sy-subrc <> 0.
  write: / 'Error reading spoolo request'(003).
  exit.
endif.
IF IS_OTF = 'X'.
  write: / 'This spool request is not an ABAP list'(004).
  exit.
ENDIF.
PERFORM DISPLAY_DATA TABLES BUFFER using tsp01-rqpaper tsp01-rqident.

******************************************
FORM GET_SPOOL_LINE.
  DO.
    IF TEMSE_RECTYP+1(1) = 'Y'.
      CALL 'C_RSTS_READ'
         ID 'HANDLE'  FIELD TEMSE_HANDLE
         ID 'BUFF'    FIELD DATA_SET_LINE
*         ID 'BUFFLG'  FIELD 1006
         ID 'BUFFLG'  FIELD 5006 "MODAB
         ID 'ALLINE'  FIELD 'X'
         ID 'BINARY'  FIELD ' '
         ID 'SHOWLG'  FIELD 'X'
         ID 'RC'      FIELD RC
         ID 'ERRMSG'  FIELD ERRMSG.
      STATUS = SY-SUBRC.
    ELSE.
      CALL 'C_RSTS_READ'
         ID 'HANDLE'  FIELD TEMSE_HANDLE
         ID 'BUFF'    FIELD DATA_SET_LINE+1
*         ID 'BUFFLG'  FIELD 1005
         ID 'BUFFLG'  FIELD 5005 "MODAB
         ID 'ALLINE'  FIELD 'X'
         ID 'BINARY'  FIELD ' '
         ID 'SHOWLG'  FIELD 'X'
         ID 'RC'      FIELD RC
         ID 'ERRMSG'  FIELD ERRMSG.
      STATUS = SY-SUBRC.
      DATA_SET_LINE(5) = DATA_SET_LINE+1(5).
      DATA_SET_LINE-PRECOL = ' '.
      ADD 1 TO DATA_SET_LINE-DATA_LENGTH.
    ENDIF.
    STATUS = SY-SUBRC.
    IF STATUS <> 6.               " EOF, error condition, or got data
      EXIT.
    ENDIF.
* end of this part, try to open next part
    ADD 1 TO TEMSE_PART.
    CALL 'C_RSTS_CLOSE'
          ID 'HANDLE'  FIELD TEMSE_HANDLE
          ID 'RC'      FIELD RC
          ID 'ERRMSG'  FIELD ERRMSG.
    STATUS = SY-SUBRC.
    IF STATUS = 0.
      CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
        EXPORTING
          AUTHORITY     = 'SP01'
          CLIENT        = TEMSE_CLIENT                          "hjl
          NAME          = TEMSE_NAME
          PART          = TEMSE_PART
        IMPORTING
          CHARCO        = TEMSE_CHARCO
*         CREATER       =
*         CREDATE       =
*         DELDATE       =
*         MAX_CREDATE   =
*         MAX_DELDATE   =
*         NON_UNIQ      =
*         NOOF_PARTS    =
          RECTYP        = TEMSE_RECTYP
*         SIZE          =
*         STOTYP        =
*         type          =
          OBJTYPE       = TEMSE_OBJTYP
       EXCEPTIONS
          FB_ERROR      = 1
          FB_RSTS_OTHER = 2
          NO_OBJECT     = 3
          NO_PERMISSION = 4
          OTHERS        = 5.
      STATUS = SY-SUBRC.
    ENDIF.
    IF STATUS = 0.
      CALL 'C_RSTS_OPEN_READ'
        ID 'HANDLE'   FIELD TEMSE_HANDLE
        ID 'CLIENT'   FIELD TEMSE_CLIENT                     "hjl
        ID 'NAME'     FIELD TEMSE_NAME
        ID 'PART'     FIELD TEMSE_PART
        ID 'TYPE'     FIELD TEMSE_OBJTYP
        ID 'CONV'     FIELD ' '
        ID 'ALLINE'   FIELD 'X'
        ID 'BINARY'   FIELD ' '
        ID 'RECTYP'   FIELD TEMSE_RECTYP
        ID 'CHARCO'   FIELD TEMSE_CHARCO
        ID 'PROM'     FIELD 'I'
        ID 'RC'       FIELD RC
        ID 'ERRMSG'   FIELD ERRMSG.
      STATUS = SY-SUBRC.
    ENDIF.
  ENDDO.
  IF STATUS = 4.
    STATUS = 12.    "EOF
  ENDIF.
  IF STATUS = 8.
    STATUS = 40.    "Line too long
  ENDIF.
  DATA_SET_LENGTH = DATA_SET_LINE-DATA_LENGTH.
ENDFORM.


FORM READ_DATA TABLES BUFFER
               USING TSP01 LIKE TSP01 VALUE(FIRST) TYPE I
                                      VALUE(LAST) TYPE I.
DATA: LINES TYPE I.

REFRESH BUFFER.
CLEAR IS_OTF.

TEMSE_CLIENT = TSP01-RQCLIENT.
TEMSE_NAME = TSP01-RQO1NAME.
TEMSE_PART = 1.

  CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
      EXPORTING
          AUTHORITY     = 'SP01'
          CLIENT        = TEMSE_CLIENT
          NAME          = TEMSE_NAME
          PART          = TEMSE_PART
      IMPORTING
          CHARCO        = TEMSE_CHARCO
*         CREATER       =
*         CREDATE       =
*         DELDATE       =
*         MAX_CREDATE   =
*         MAX_DELDATE   =
*         NON_UNIQ      =
*         NOOF_PARTS    =
          RECTYP        = TEMSE_RECTYP
*         SIZE          =
*         STOTYP        =
*         type          =
          OBJTYPE       = TEMSE_OBJTYP
     EXCEPTIONS
          FB_ERROR      = 1
          FB_RSTS_OTHER = 2
          NO_OBJECT     = 3
          NO_PERMISSION = 4
          OTHERS        = 5.

  IF SY-SUBRC = 0.
    IF TEMSE_OBJTYP(3) = 'OTF'.
      IS_OTF = 'X'.
    ENDIF.
  ELSE.
    exit.
  ENDIF.

  CLEAR TEMSE_HANDLE.
  CALL 'C_RSTS_OPEN_READ'
      ID 'HANDLE'   FIELD TEMSE_HANDLE
      ID 'CLIENT'   FIELD TEMSE_CLIENT                       "hjl
      ID 'NAME'     FIELD TEMSE_NAME
      ID 'PART'     FIELD TEMSE_PART
      ID 'TYPE'     FIELD TEMSE_OBJTYP
      ID 'CONV'     FIELD ' '
      ID 'ALLINE'   FIELD 'X'
      ID 'BINARY'   FIELD ' '
      ID 'RECTYP'   FIELD TEMSE_RECTYP
      ID 'CHARCO'   FIELD TEMSE_CHARCO
      ID 'PROM'     FIELD 'I'
      ID 'RC'       FIELD RC
      ID 'ERRMSG'   FIELD ERRMSG.
  STATUS = SY-SUBRC.

  IF STATUS = 0.

  DO.
    PERFORM GET_SPOOL_LINE.
    IF STATUS <> 0 AND STATUS <> 40 AND STATUS <> 12.
      PERFORM CLOSE_JOB.
      exit.
    ENDIF.
    IF STATUS <> 12.                   " 12 = End
      IF NOT ( DATA_SET_LENGTH IS INITIAL ).
        DATA_SET_LINE-DATA_LENGTH = DATA_SET_LENGTH - 1.
      ENDIF.
      ADD 1 TO LINES.
      IF LINES >= FIRST.
        APPEND DATA_SET_LINE TO BUFFER.
      ENDIF.
      IF ( NOT LAST IS INITIAL ) AND ( LINES >= LAST ).
        EXIT.
      ENDIF.
    ELSE.
      IF LINES = 0.
        PERFORM CLOSE_JOB.
        exit.
      ENDIF.
      IF LINES < FIRST .
        PERFORM CLOSE_JOB.
        exit.
      ENDIF.
      EXIT.
    ENDIF.
  ENDDO.
  PERFORM CLOSE_JOB.
  ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
*       FORM CLOSE_JOB                                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM CLOSE_JOB.
  IF STATUS <> 0 AND STATUS <> 12.
    CALL 'C_RSTS_CLOSE'
          ID 'HANDLE'  FIELD TEMSE_HANDLE
          ID 'RC'      FIELD RC
          ID 'ERRMSG'  FIELD ERRMSG.
    MESSAGE E112(PO) WITH STATUS RC ERRMSG RAISING READ_ERROR.
  ENDIF.
  CALL 'C_RSTS_CLOSE'
     ID 'HANDLE'  FIELD TEMSE_HANDLE
     ID 'RC'      FIELD RC
     ID 'ERRMSG'  FIELD ERRMSG.
  STATUS = SY-SUBRC.
  IF STATUS <> 0.
    MESSAGE E112(PO) WITH STATUS RC ERRMSG RAISING READ_ERROR.
  ENDIF.
ENDFORM.


FORM DISPLAY_DATA TABLES BUFFER using rqpaper like tsp01-rqpaper
                                      rqid like tsp01-rqident.
  DATA: LINE_LENGTH TYPE I, gcol type i, glines type i,
        LINE_LENGTH2 LIKE RSTSTYPE-LINELENGTH,
        v, v2.

*  CALL FUNCTION 'RSPO_SPOOLDATA_WRITE_INIT'.
  perform spooldata_write_init.   "MODAB
*  select single * from tspoptions where spoption = 'REALWIDTH'.
*  if sy-subrc = 0.
    v = 'X'.
*  endif.
*  select single * from tspoptions where spoption = 'REALHEIGHT'.
*  if sy-subrc = 0.
   v2 = 'X'.
*  endif.
  if not v is initial or not v2 is initial.
    gcol = 0.
    glines = 0.
    select single * from tsp02l where pjident = rqid
                                and pjnummer = 0.
    if sy-subrc = 0.
      gcol = tsp02l-columns.
      glines = tsp02l-lines.
    else.
      CALL FUNCTION 'RSPO_GET_SIZE_OF_LAYOUT'
         EXPORTING
              layout  = rqpaper
         IMPORTING
*             ANSWER  =
              COLUMNS = gcol
              LINES   = glines
*             PFORMAT =
              .
    endif.
  endif.
  if gcol < 80 or v is initial.
    gcol = 255.
  endif.
  if glines < 5 or v2 is initial.
    glines = 0.
  endif.
  if gcol >= 1024.        "MODAB
    gcol = 1023.
  endif.
  NEW-PAGE NO-HEADING NO-TITLE LINE-SIZE gcol
                                 line-count glines.  " make a wide list
  SET BLANK LINES ON.

  LOOP AT BUFFER.
    DATA_SET_LINE = BUFFER.
    IF DATA_SET_LINE-PRECOL = 'P'.
      IF DATA_SET_LINE(1) = ' '.    " Echter Vorschub ?"
        NEW-PAGE.
      ENDIF.
      CONTINUE.
    ENDIF.
*   Zeilenlänge berechnen, falls unbekannt.
    IF DATA_SET_LINE-DATA_LENGTH IS INITIAL.
      LINE_LENGTH = STRLEN( DATA_SET_LINE-DATA_LINE ).
    ELSE.
      LINE_LENGTH = DATA_SET_LINE-DATA_LENGTH.
    ENDIF.

    IF LINE_LENGTH > 0.
      LINE_LENGTH2 = LINE_LENGTH.
      perform spooldata_write using data_set_line-data_line "MODAB
                                    line_length2
                                    1.
    ELSE.
                                       " Leerzeile
      SKIP.
    ENDIF.
  ENDLOOP.
ENDFORM.

* copied from RSPO_SPOOLDATA_WRITE
form spooldata_write using value(spool_data)
                           value(data_length) LIKE  RSTSTYPE-LINELENGTH
                           value(start_pos) like sy-colno.
* function globals
DATA: LPOS LIKE SY-COLNO
      , REST_LEN TYPE I
      , AREA_LEN TYPE I
      , NEXT_HOT TYPE I " offset of next special character
      , COLS     TYPE I " columns used by special character
      , BYTES    TYPE I " bytes   used by special character
      , HOT2
      , HOT3
      , HOT4
      , HOT5
      , HOT6
      , HOT7
      , BEGIN OF ESCAPE_TRICK
      ,   X1(1) TYPE X
      , END  OF  ESCAPE_TRICK
      , THE_PRTCTRL(5) TYPE C
*       Because of a problem within the ABAP listprocessing, I shall
*       never output the same icon side by side with the same color
*       and without a gap.
*       As I don't know the data, I will use two different variables
*       alternatively.
      , ICON_ID1       LIKE ICONS-L4
      , ICON_ID2       LIKE ICONS-L4.
  FIELD-SYMBOLS: <LDATA>
               , <PLAIN_TEXT>
               , <PRTCTRL>
               , <HOT_PRTCTRL>
               , <HOT_FRAME>
               , <HOT_ICON>
               , <HOT_SYMBOL>
               .

  IF START_POS < 2.
*   write at / ' ' no-gap.
    NEW-LINE.
    LPOS = 1.
  ELSE.
    LPOS = START_POS.
  ENDIF.

  REST_LEN = STRLEN( SPOOL_DATA ).
  DESCRIBE FIELD SPOOL_DATA LENGTH AREA_LEN.
  IF DATA_LENGTH = 0.
    " fine.
  ELSEIF DATA_LENGTH <= AREA_LEN.
    REST_LEN = DATA_LENGTH.
  ELSE.
    write: / 'Fehler beim Decodieren der Listendaten'(005).
    stop.
  ENDIF.

  CHECK REST_LEN > 0.

  ASSIGN SPOOL_DATA(REST_LEN) TO <LDATA>.

  WHILE <LDATA> CA SPOC-FIRST_BYTES.
    NEXT_HOT = SY-FDPOS.
    IF NEXT_HOT > 0.
      ASSIGN <LDATA>(NEXT_HOT) TO <PLAIN_TEXT>.
*     MODAB
      perform write_bigfield using <plain_text>
                                   next_hot
                                   lpos.
*      WRITE AT LPOS <PLAIN_TEXT> NO-GAP.
      ADD      NEXT_HOT TO LPOS.
      SUBTRACT NEXT_HOT FROM REST_LEN.
      ASSIGN <LDATA>+NEXT_HOT(REST_LEN) TO <LDATA>.
    ENDIF.
    IF REST_LEN >= SPOC-PRTCTRL_START_LENGTH.
      ASSIGN <LDATA>(SPOC-PRTCTRL_START_LENGTH) TO <HOT_PRTCTRL>.
    ELSE.
      ASSIGN 'too_short'                        TO <HOT_PRTCTRL>.
    ENDIF.
    IF REST_LEN >= SPOC-FRAME_START_LENGTH.
      ASSIGN <LDATA>(SPOC-FRAME_START_LENGTH)   TO <HOT_FRAME>.
    ELSE.
      ASSIGN 'too_short'                        TO <HOT_FRAME>.
    ENDIF.
    IF REST_LEN >= SPOC-ICON_START_LENGTH.
      ASSIGN <LDATA>(SPOC-ICON_START_LENGTH)    TO <HOT_ICON>.
    ELSE.
      ASSIGN 'too_short'                        TO <HOT_ICON>.
    ENDIF.
    IF REST_LEN >= SPOC-SYMBOL_START_LENGTH.
      ASSIGN <LDATA>(SPOC-SYMBOL_START_LENGTH)  TO <HOT_SYMBOL>.
    ELSE.
      ASSIGN 'too_short'                        TO <HOT_SYMBOL>.
    ENDIF.

    IF REST_LEN > 1.
      HOT2 = <LDATA>+1(1).
      IF REST_LEN > 2.
        HOT3 = <LDATA>+2(1).
        IF REST_LEN > 3.
          HOT4 = <LDATA>+3(1).
        ELSE.
          HOT4 = '?'.
        ENDIF.
      ELSE.
        HOT3 = '?'.
      ENDIF.
    ELSE.
      HOT2 = '?'.
    ENDIF.

    IF <HOT_FRAME> = <SPOC_FRAME>.
      COLS  = 1. " in most cases.
      BYTES = 2. " in most cases.
      CASE HOT2.
        WHEN '0'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '1'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '2'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '3'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '4'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '5'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '6'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '7'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '8'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN '9'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN ':'. WRITE AT LPOS HOT2 AS LINE NO-GAP.
        WHEN ';'. " box_drawings_light_left
                  WRITE AT LPOS '4'  AS LINE NO-GAP.
        WHEN '<'. " box_drawings_light_up
                  WRITE AT LPOS '5'  AS LINE NO-GAP.
        WHEN '='. " box_drawings_light_right
                  WRITE AT LPOS '4'  AS LINE NO-GAP.
        WHEN '>'. " box_drawings_light_down
                  WRITE AT LPOS '5'  AS LINE NO-GAP.
        WHEN '?'. " drawings_checkbox_off
                  WRITE AT LPOS ' '  AS CHECKBOX INPUT OFF NO-GAP.
        WHEN '@'. " drawings_checkbox_on
                  WRITE AT LPOS 'X'  AS CHECKBOX INPUT OFF NO-GAP.
        WHEN OTHERS.
          BYTES = 0.
      ENDCASE.
    ENDIF.
    IF <HOT_SYMBOL> = <SPOC_SYMBOL_LOW>.
      ESCAPE_TRICK = HOT3.
      SUBTRACT 32 FROM ESCAPE_TRICK-X1.
      IF HOT4 = SPACE.
        WRITE AT LPOS(2) ESCAPE_TRICK AS SYMBOL NO-GAP.
        COLS  = 2.
        BYTES = 4.
      ELSE.
        WRITE AT LPOS(1) ESCAPE_TRICK AS SYMBOL NO-GAP.
        BYTES = 3.
      ENDIF.
    ENDIF.
    IF <HOT_SYMBOL> = <SPOC_SYMBOL_HGH>.
      ESCAPE_TRICK = HOT3.
      ADD      32 TO   ESCAPE_TRICK-X1.
      IF HOT4 = SPACE.
        WRITE AT LPOS(2) ESCAPE_TRICK AS SYMBOL NO-GAP.
        COLS  = 2.
        BYTES = 4.
      ELSE.
        WRITE AT LPOS(1) ESCAPE_TRICK AS SYMBOL NO-GAP.
        BYTES = 3.
      ENDIF.
    ENDIF.
    IF <HOT_ICON> = <SPOC_ICON>.
      IF SPOC-ICON_SEL >< 1.
        SPOC-ICON_SEL      = 1.
        ICON_ID1      = '@00@'.
        ICON_ID1+1(1) = HOT3.
        ICON_ID1+2(1) = HOT4.
      ELSE.
        SPOC-ICON_SEL      = 2.
        ICON_ID2      = '@00@'.
        ICON_ID2+1(1) = HOT3.
        ICON_ID2+2(1) = HOT4.
      ENDIF.
      IF REST_LEN > 4.
        HOT5 = <LDATA>+4(1).
        IF REST_LEN > 5.
          HOT6 = <LDATA>+5(1).
          IF REST_LEN > 6.
            HOT7 = <LDATA>+6(1).
          ELSE.
            HOT7 = '?'.
          ENDIF.
        ELSE.
          HOT6 = '?'.
        ENDIF.
      ELSE.
        HOT5 = '?'.
      ENDIF.
      IF HOT5 = SPACE.
        IF HOT6 = SPACE.
          IF HOT7 = SPACE.
            IF SPOC-ICON_SEL = 1.
              WRITE AT LPOS(4) ICON_ID1 AS ICON.
*             write at lpos    icon_id1 as icon no-gap.
            ELSE.
              WRITE AT LPOS(4) ICON_ID2 AS ICON.
*             write at lpos    icon_id2 as icon no-gap.
            ENDIF.
            COLS  = 4.
            BYTES = 7.
          ELSE.
            IF SPOC-ICON_SEL = 1.
              WRITE AT LPOS(3) ICON_ID1 AS ICON.
*             write at lpos    icon_id1 as icon no-gap.
            ELSE.
              WRITE AT LPOS(3) ICON_ID2 AS ICON.
*             write at lpos    icon_id2 as icon no-gap.
            ENDIF.
            COLS  = 3.
            BYTES = 6.
          ENDIF.
        ELSE.
          IF SPOC-ICON_SEL = 1.
            WRITE AT LPOS(2) ICON_ID1 AS ICON.
*           write at lpos    icon_id1 as icon no-gap.
          ELSE.
            WRITE AT LPOS(2) ICON_ID2 AS ICON.
*           write at lpos    icon_id2 as icon no-gap.
          ENDIF.
          COLS  = 2.
          BYTES = 5.
        ENDIF.
      ELSE.
        "rite at lpos(1) icon_id as icon.
        WRITE AT LPOS(1) '#' NO-GAP. " Not enough space for any icon.
        COLS  = 1.
        BYTES = 4.
      ENDIF.
    ENDIF.

    IF <HOT_PRTCTRL> = <SPOC_PRTCTRL>.
      COLS  = 0. " in most cases.
      BYTES = 6. " in most cases.
      IF REST_LEN >= SPOC-PRTCTRL_TOTAL_LENGTH.
        THE_PRTCTRL = <LDATA>+SPOC-PRTCTRL_START_LENGTH(5).
        IF THE_PRTCTRL = 'SABLD'.
          FORMAT INTENSIFIED ON.
"no 3.0 'SAULN'.
"no 3.0   FORMAT UNDERSCORED ON.
        ELSEIF  THE_PRTCTRL = 'SAOFF'.
          FORMAT INTENSIFIED OFF.
"no 3.0   FORMAT UNDERSCORED OFF.
        ELSEIF  THE_PRTCTRL(3) = 'COL'.
          CASE THE_PRTCTRL+3(1).
            WHEN '0'.
              FORMAT COLOR OFF.
            WHEN '1'.
              FORMAT COLOR 1.
            WHEN '2'.
              FORMAT COLOR 2.
            WHEN '3'.
              FORMAT COLOR 3.
            WHEN '4'.
              FORMAT COLOR 4.
            WHEN '5'.
              FORMAT COLOR 5.
            WHEN '6'.
              FORMAT COLOR 6.
            WHEN '7'.
              FORMAT COLOR 7.
            ENDCASE.
            CASE THE_PRTCTRL+4(1).
              WHEN 'N'.
                FORMAT INTENSIFIED OFF INVERSE OFF.
              WHEN 'H'.
                FORMAT INTENSIFIED ON INVERSE OFF.
              WHEN 'V'.
                FORMAT INTENSIFIED ON INVERSE ON.
            ENDCASE.
          ENDIF. "printcontrol
      ELSE. "??
      ENDIF.
    ENDIF.

    IF BYTES = 0.
      BYTES = 1.
      WRITE AT LPOS(1) '#'.
      COLS  = 1.
    ENDIF.

    ADD COLS TO LPOS.
    SUBTRACT BYTES FROM REST_LEN.
    IF REST_LEN > 0.
      ASSIGN <LDATA>+BYTES(REST_LEN) TO <LDATA>.
    ELSE.
      EXIT.
    ENDIF.
  ENDWHILE.
* MODAB
  if rest_len > 0.
    ASSIGN <LDATA>(REST_LEN) TO <PLAIN_TEXT>.
    perform write_bigfield using <plain_text>
                                 rest_len
                                 lpos.
  endif.
endform.

form write_bigfield using value(field) type c
                          value(len)
                          value(pos).
field-symbols <p>.
data: chunk type i.

while len > 0.
  if len > 255.
    chunk = 255.
  else.
    chunk = len.
  endif.
  write at pos field(chunk) no-gap.
  add chunk to pos.
  len = len - chunk.
  if len > 0.
    field = field+chunk.
  endif.
endwhile.
endform.

form spooldata_write_init.
  DATA: BEGIN OF ESCAPE_TRICK
      ,   X1(1) TYPE X
      , END  OF  ESCAPE_TRICK
      .
  FIELD-SYMBOLS: <LDATA>
               , <PLAIN_TEXT>
               , <PRTCTRL>
               .


  ESCAPE_TRICK-X1           = '1C'.
  SPOC-PRTCTRL_START        = ESCAPE_TRICK.
  SPOC-PRTCTRL_START_LENGTH = 1.
  SPOC-PRTCTRL_TOTAL_LENGTH = SPOC-PRTCTRL_START_LENGTH + 5.
 ASSIGN SPOC-PRTCTRL_START(SPOC-PRTCTRL_START_LENGTH) TO <SPOC_PRTCTRL>.

  ESCAPE_TRICK-X1           = '1B'.
  SPOC-FRAME_START          = ESCAPE_TRICK.
  SPOC-FRAME_START_LENGTH   = 1.
  ASSIGN SPOC-FRAME_START(SPOC-FRAME_START_LENGTH) TO <SPOC_FRAME>.

  ESCAPE_TRICK-X1           = '1B'.
  SPOC-ICON_START           = ESCAPE_TRICK.
  SPOC-ICON_START+1         = ','.
  SPOC-ICON_START_LENGTH    = 2.
  ASSIGN SPOC-ICON_START(SPOC-ICON_START_LENGTH) TO <SPOC_ICON>.

  ESCAPE_TRICK-X1           = '1B'.
  SPOC-SYMBOL_LOW_START     = ESCAPE_TRICK.
  SPOC-SYMBOL_LOW_START+1   = '('.
  SPOC-SYMBOL_HGH_START     = ESCAPE_TRICK.
  SPOC-SYMBOL_HGH_START+1   = ')'.
  SPOC-SYMBOL_START_LENGTH  = 2.
  ASSIGN SPOC-SYMBOL_LOW_START(SPOC-SYMBOL_START_LENGTH)
                                                   TO <SPOC_SYMBOL_LOW>.
  ASSIGN SPOC-SYMBOL_HGH_START(SPOC-SYMBOL_START_LENGTH)
                                                   TO <SPOC_SYMBOL_HGH>.

  SPOC-FIRST_BYTES+0(1) = SPOC-PRTCTRL_START(1).
  SPOC-FIRST_BYTES+1(1) = SPOC-FRAME_START(1).
  SPOC-FIRST_BYTES+2(1) = SPOC-ICON_START(1).
  SPOC-FIRST_BYTES+3(1) = SPOC-SYMBOL_LOW_START(1).
endform.

Cheers,

Jose.

Former Member
0 Kudos

Thanx Jose.I got through from here.Obtained back spool on internal table with type c.But it is giving me raw text.Are you aware of any function module that wil put the spool text

back to corresponding fields of internal table.

0 Kudos

Adithya,

the above code displays the report in normal text format.....so dey must be doing something to convert raw text to normal char format....I think u can find dat if u go thru the code.....

Cheers,

jose.