Application Development and Automation 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: 
Read only

Get OTF from sapscript output after submit

Former Member
2,118

Hi experts!

I'm calling a standar report RPC190E0 from a FM with a submit instruction, like this one:

...

SUBMIT RPC190E0 with selection-table seltab EXPORTING LIST TO MEMORY AND RETURN.

...

The report shows a sapscript output after the printer prompt window.

I don't know how execute the submit because I don't want the prompt window, it should pass it.

I need to get the sapscript output in OTF format after executing the submit of  RPC190E0.

Someone knows how to do it?

Kind regards,

Julian.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,618

Try this code..

CALL FUNCTION 'WRITE_FORM' " Write form

     EXPORTING

       ELEMENT = MAIN_ELEM  "ELEM_MAIN'

       TYPE    = 'BODY'

       WINDOW  = 'MAIN'.

   ENDLOOP.

   CALL FUNCTION 'CLOSE_FORM' " Close Form

   IMPORTING

     RESULT  = W_RES

   TABLES

     OTFDATA = I_OTF.

   REFRESH ITAB_DETL.

   CLEAR LFIMG.

   CLEAR STR_DETL.

   CALL FUNCTION 'CONVERT_OTF_2_PDF' " Convert to OTF

   IMPORTING

     BIN_FILESIZE           = L_FILESIZE

   TABLES

     OTF                    = I_OTF

     DOCTAB_ARCHIVE         = L_TAB_DOCS

     LINES                  = IT_PDF_OUTPUT

   EXCEPTIONS

     ERR_CONV_NOT_POSSIBLE  = 1

     ERR_OTF_MC_NOENDMARKER = 2

     OTHERS                 = 3.

   IF SY-SUBRC <> 0.

     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

   ENDIF.

* Transfer the 132-long strings to 255-long strings

   LOOP AT IT_PDF_OUTPUT.

     TRANSLATE IT_PDF_OUTPUT USING ' ~'.

     CONCATENATE GD_BUFFER IT_PDF_OUTPUT INTO GD_BUFFER.

   ENDLOOP.

   TRANSLATE GD_BUFFER USING '~ '.

   DO.

     IT_MESS_ATT = GD_BUFFER.

     APPEND IT_MESS_ATT.

     SHIFT GD_BUFFER LEFT BY 255 PLACES.

     IF GD_BUFFER IS INITIAL.

       EXIT.

     ENDIF.

   ENDDO.

   L_OBJBIN[] = IT_MESS_ATT[].

* Create Message Attachment

   DESCRIBE TABLE L_OBJBIN LINES L_TAB_LINES.

   READ     TABLE L_OBJBIN INDEX L_TAB_LINES.

   L_OBJPACK-DOC_SIZE = ( L_TAB_LINES - 1 ) * 255 + STRLEN( L_OBJBIN ).

   L_OBJPACK-TRANSF_BIN = 'X'.

   L_OBJPACK-HEAD_START = 1.

   L_OBJPACK-HEAD_NUM   = 0.

   L_OBJPACK-BODY_START = 1.

   L_OBJPACK-BODY_NUM   = L_TAB_LINES.

   L_OBJPACK-DOC_TYPE   = 'PDF'.

   L_OBJPACK-OBJ_NAME   = 'objectname'.

*Send the e-mail

     CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

     EXPORTING

       DOCUMENT_DATA              = DOCDATA

       PUT_IN_OUTBOX              = 'X'

       COMMIT_WORK                = 'X'

     TABLES

       PACKING_LIST               = L_OBJPACK

       CONTENTS_BIN               = L_OBJBIN

       CONTENTS_TXT               = L_OBJTXT

       RECEIVERS                  = RECLIST

     EXCEPTIONS

       TOO_MANY_RECEIVERS         = 1

       DOCUMENT_NOT_SENT          = 2

       DOCUMENT_TYPE_NOT_EXIST    = 3

       OPERATION_NO_AUTHORIZATION = 4

       PARAMETER_ERROR            = 5

       X_ERROR                    = 6

       ENQUEUE_ERROR              = 7

       OTHERS                     = 8.

     COMMIT WORK.




3 REPLIES 3
Read only

arindam_m
Active Contributor
0 Likes
1,618

Hi,

The control parameters for the sapscript should have the NO_DIALOG set as 'X'.

Cheers,

Arindam

Read only

Former Member
0 Likes
1,618

Hello Julian,

you can set your default printer device by going into system->user profile->own data.

then just input your device like LP01 into output device and check output immediately.

Read only

Former Member
0 Likes
1,619

Try this code..

CALL FUNCTION 'WRITE_FORM' " Write form

     EXPORTING

       ELEMENT = MAIN_ELEM  "ELEM_MAIN'

       TYPE    = 'BODY'

       WINDOW  = 'MAIN'.

   ENDLOOP.

   CALL FUNCTION 'CLOSE_FORM' " Close Form

   IMPORTING

     RESULT  = W_RES

   TABLES

     OTFDATA = I_OTF.

   REFRESH ITAB_DETL.

   CLEAR LFIMG.

   CLEAR STR_DETL.

   CALL FUNCTION 'CONVERT_OTF_2_PDF' " Convert to OTF

   IMPORTING

     BIN_FILESIZE           = L_FILESIZE

   TABLES

     OTF                    = I_OTF

     DOCTAB_ARCHIVE         = L_TAB_DOCS

     LINES                  = IT_PDF_OUTPUT

   EXCEPTIONS

     ERR_CONV_NOT_POSSIBLE  = 1

     ERR_OTF_MC_NOENDMARKER = 2

     OTHERS                 = 3.

   IF SY-SUBRC <> 0.

     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

   ENDIF.

* Transfer the 132-long strings to 255-long strings

   LOOP AT IT_PDF_OUTPUT.

     TRANSLATE IT_PDF_OUTPUT USING ' ~'.

     CONCATENATE GD_BUFFER IT_PDF_OUTPUT INTO GD_BUFFER.

   ENDLOOP.

   TRANSLATE GD_BUFFER USING '~ '.

   DO.

     IT_MESS_ATT = GD_BUFFER.

     APPEND IT_MESS_ATT.

     SHIFT GD_BUFFER LEFT BY 255 PLACES.

     IF GD_BUFFER IS INITIAL.

       EXIT.

     ENDIF.

   ENDDO.

   L_OBJBIN[] = IT_MESS_ATT[].

* Create Message Attachment

   DESCRIBE TABLE L_OBJBIN LINES L_TAB_LINES.

   READ     TABLE L_OBJBIN INDEX L_TAB_LINES.

   L_OBJPACK-DOC_SIZE = ( L_TAB_LINES - 1 ) * 255 + STRLEN( L_OBJBIN ).

   L_OBJPACK-TRANSF_BIN = 'X'.

   L_OBJPACK-HEAD_START = 1.

   L_OBJPACK-HEAD_NUM   = 0.

   L_OBJPACK-BODY_START = 1.

   L_OBJPACK-BODY_NUM   = L_TAB_LINES.

   L_OBJPACK-DOC_TYPE   = 'PDF'.

   L_OBJPACK-OBJ_NAME   = 'objectname'.

*Send the e-mail

     CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

     EXPORTING

       DOCUMENT_DATA              = DOCDATA

       PUT_IN_OUTBOX              = 'X'

       COMMIT_WORK                = 'X'

     TABLES

       PACKING_LIST               = L_OBJPACK

       CONTENTS_BIN               = L_OBJBIN

       CONTENTS_TXT               = L_OBJTXT

       RECEIVERS                  = RECLIST

     EXCEPTIONS

       TOO_MANY_RECEIVERS         = 1

       DOCUMENT_NOT_SENT          = 2

       DOCUMENT_TYPE_NOT_EXIST    = 3

       OPERATION_NO_AUTHORIZATION = 4

       PARAMETER_ERROR            = 5

       X_ERROR                    = 6

       ENQUEUE_ERROR              = 7

       OTHERS                     = 8.

     COMMIT WORK.