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

Spool number not generating

Former Member
0 Likes
5,522

Hi All,

I have a requirement that i need to get the Sales Order PDF and save it in a shared folder Automatically.

For that I created a call transaction for  VA03 ---> SO No. --> Issue to output --> Print.

in foreground it is working perfect.

But, when i scheduled it for background, i get a error msg that Spool no. not generated and terminated.

Please help.

Regards,

Sri.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
4,490

Hi All,

Thank you all for the replays.

Solved it by alternative solution.

solution is that i created a new program in which i call the driver program & smartform.

while calling smartform passing  ls_control_param-getotf     = 'X' and get the OTF data in the internal table.

by calling FM  CONVERT_OTF converting into PDF and send email.

Regards,

Srikanth.

Hi All,

I have a requirement that i need to get the Sales Order PDF and save it in a shared folder Automatically.

For that I created a call transaction for  VA03 ---> SO No. --> Issue to output --> Print.

in foreground it is working perfect.

But, when i scheduled it for background, i get a error msg that Spool no. not generated and terminated.

Please help.

Regards,

Sri.

10 REPLIES 10
Read only

former_member188724
Contributor
0 Likes
4,490

Hi,

Did you check whether the Printer Name is passed as without Printer spool cannot be generated.

If you are using LOCL Printer pls try using another Printer other than LOCL.

K.S.

Read only

0 Likes
4,490

Hi KS,

am passing the print parameters, but still its not working.

Regards,

Sri.

Read only

0 Likes
4,490

Hi,

Pls paste your Piece of code.

Regards,

K.S.

Read only

0 Likes
4,490

Hi KS,

please find my code below.

PARAMETER: p_email1 LIKE somlreci1-receiver,

            p_sender LIKE somlreci1-receiver,

            p_delspl  AS CHECKBOX.

DATA:

*   t_field    LIKE TABLE OF fs_field,

    t_bdcdata  LIKE TABLE OF bdcdata.

DATA:

   fs_bdcdata LIKE LINE OF t_bdcdata,   " Structure type of bdcdata

    w_str  TYPE string.

* Data decleration

DATA:

   wa_path TYPE string ,

   wa_error TYPE string,

   wa_cnt   TYPE i,

   w_mode    TYPE c VALUE 'A',

   wa_cnt1(2) TYPE n.

*DATA DECLARATION

DATA: gd_recsize TYPE i.

* Spool IDs

TYPES: BEGIN OF t_tbtcp.

         INCLUDE STRUCTURE tbtcp.

TYPES: END OF t_tbtcp.

DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,

       wa_tbtcp TYPE t_tbtcp.

* Job Runtime Parameters

DATA: gd_eventid LIKE tbtcm-eventid,

       gd_eventparm LIKE tbtcm-eventparm,

       gd_external_program_active LIKE tbtcm-xpgactive,

       gd_jobcount LIKE tbtcm-jobcount,

       gd_jobname LIKE tbtcm-jobname,

       gd_stepcount LIKE tbtcm-stepcount,

       gd_error    TYPE sy-subrc,

       gd_reciever TYPE sy-subrc.

DATAw_recsize TYPE i.

DATA: gd_subject   LIKE sodocchgi1-obj_descr,

       it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,

       it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,

       gd_sender_type     LIKE soextreci1-adr_typ,

       gd_attachment_desc TYPE so_obj_nam,

       gd_attachment_name TYPE so_obj_des.

* Spool to PDF conversions

DATA: gd_spool_nr LIKE tsp01-rqident,

       gd_destination LIKE rlgrap-filename,

       gd_bytecount LIKE tst01-dsize,

       gd_buffer TYPE string.

* Binary store for PDF

DATA: BEGIN OF it_pdf_output OCCURS 0.

         INCLUDE STRUCTURE tline.

DATA: END OF it_pdf_output.

CONSTANTS: c_dev LIKE  sy-sysid VALUE 'MED',

            c_no(1)     TYPE c   VALUE ' ',

            c_device(4) TYPE c   VALUE 'LOCL'.

DATA: PARAMS LIKE PRI_PARAMS,

       VALID  TYPE C.

CALL FUNCTION 'GET_PRINT_PARAMETERS'

   EXPORTING MODE                  = 'BATCH'

               REPORT                = sy-repid

   IMPORTING OUT_PARAMETERS        = PARAMS

               VALID                 = VALID.

     PERFORM populate_bdcdata.

     PERFORM insert_data.


PERFORM get_job_details.

     PERFORM obtain_spool_id.


IF sy-sysid = c_dev.

       WAIT UP TO 5 SECONDS.

       SUBMIT rsconn01 WITH mode   = 'INT'

                       WITH output = 'X'

                       AND RETURN.

     ENDIF.


FORM obtain_spool_id.

   CHECK NOT ( gd_jobname IS INITIAL ).

   CHECK NOT ( gd_jobcount IS INITIAL ).

   SELECT * FROM  tbtcp

                  INTO TABLE it_tbtcp

                  WHERE      jobname     = gd_jobname

                  AND        jobcount    = gd_jobcount

                  AND        stepcount   = gd_stepcount

                  AND        listident   <> '0000000000'

                  ORDER BY   jobname

                             jobcount

                             stepcount.

   READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.

   IF sy-subrc = 0.

     MESSAGE s004(zdd) WITH gd_spool_nr.

     gd_spool_nr = wa_tbtcp-listident.

     MESSAGE s004(zdd) WITH gd_spool_nr.

   ELSE.

     MESSAGE s005(zdd).

   ENDIF.

ENDFORM.                    "obtain_spool_id

*---------------------------------------------------------------------*

*       FORM get_job_details                                          *

*---------------------------------------------------------------------*

FORM get_job_details.

* Get current job details

   CALL FUNCTION 'GET_JOB_RUNTIME_INFO'

     IMPORTING

       eventid                 = gd_eventid

       eventparm               = gd_eventparm

       external_program_active = gd_external_program_active

       jobcount                = gd_jobcount

       jobname                 = gd_jobname

       stepcount               = gd_stepcount

     EXCEPTIONS

       no_runtime_info         = 1

       OTHERS                  = 2.

ENDFORM.                    "get_job_details

*---------------------------------------------------------------------*

*       FORM convert_spool_to_pdf                                     *

*---------------------------------------------------------------------*

FORM convert_spool_to_pdf.

   CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

     EXPORTING

       src_spoolid              = gd_spool_nr

       no_dialog                = c_no

       dst_device               = c_device

     IMPORTING

       pdf_bytecount            = gd_bytecount

     TABLES

       pdf                      = it_pdf_output

     EXCEPTIONS

       err_no_abap_spooljob     = 1

       err_no_spooljob          = 2

       err_no_permission        = 3

       err_conv_not_possible    = 4

       err_bad_destdevice       = 5

       user_cancelled           = 6

       err_spoolerror           = 7

       err_temseerror           = 8

       err_btcjob_open_failed   = 9

       err_btcjob_submit_failed = 10

       err_btcjob_close_failed  = 11

       OTHERS                   = 12.

   CHECK sy-subrc = 0.

* 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.

ENDFORM.                    "convert_spool_to_pdf

*---------------------------------------------------------------------*

*       FORM process_email                                            *

*---------------------------------------------------------------------*

FORM process_email.

   DESCRIBE TABLE it_mess_att LINES gd_recsize.

   CHECK gd_recsize > 0.

   PERFORM send_email USING p_email1.

*  perform send_email using p_email2.

ENDFORM.                    "process_email

*---------------------------------------------------------------------*

*       FORM send_email                                               *

*---------------------------------------------------------------------*

*  -->  p_email                                                       *

*---------------------------------------------------------------------*

FORM send_email USING p_email.

   CHECK NOT ( p_email IS INITIAL ).

   REFRESH it_mess_bod.

* Default subject matter

   gd_subject         = 'Subject'.

   gd_attachment_desc = 'Attachname'.

*  CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.

   it_mess_bod        = 'Message Body text, line 1'.

   APPEND it_mess_bod.

   it_mess_bod        = 'Message Body text, line 2...'.

   APPEND it_mess_bod.

* If no sender specified - default blank

   IF p_sender EQ space.

     gd_sender_type  = space.

   ELSE.

     gd_sender_type  = 'INT'.

   ENDIF.

* Send file by email as .xls speadsheet

   PERFORM send_file_as_email_attachment

                                TABLES it_mess_bod

                                       it_mess_att

                                 USING p_email

                                       'Example .xls documnet attachment'

                                       'PDF'

                                       gd_attachment_name

                                       gd_attachment_desc

                                       p_sender

                                       gd_sender_type

                              CHANGING gd_error

                                       gd_reciever.

ENDFORM.                    "send_email

*---------------------------------------------------------------------*

*       FORM delete_spool                                             *

*---------------------------------------------------------------------*

FORM delete_spool.

   DATA: ld_spool_nr TYPE tsp01_sp0r-rqid_char.

   ld_spool_nr = gd_spool_nr.

   CHECK p_delspl <> c_no.

   CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'

     EXPORTING

       spoolid = ld_spool_nr.

ENDFORM.                    "delete_spool

*&amp;---------------------------------------------------------------------*

*&amp;      Form  SEND_FILE_AS_EMAIL_ATTACHMENT

*&amp;---------------------------------------------------------------------*

*       Send email

*----------------------------------------------------------------------*

FORM send_file_as_email_attachment TABLES it_message

                                           it_attach

                                     USING p_email

                                           p_mtitle

                                           p_format

                                           p_filename

                                           p_attdescription

                                           p_sender_address

                                           p_sender_addres_type

                                  CHANGING p_error

                                           p_reciever.

   DATA: ld_error    TYPE sy-subrc,

         ld_reciever TYPE sy-subrc,

         ld_mtitle LIKE sodocchgi1-obj_descr,

         ld_email LIKE  somlreci1-receiver,

         ld_format TYPE  so_obj_tp ,

         ld_attdescription TYPE  so_obj_nam ,

         ld_attfilename TYPE  so_obj_des ,

         ld_sender_address LIKE  soextreci1-receiver,

         ld_sender_address_type LIKE  soextreci1-adr_typ,

         ld_receiver LIKE  sy-subrc.

   DATA:   t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

           t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

           t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           w_cnt TYPE i,

           w_sent_all(1) TYPE c,

           w_doc_data LIKE sodocchgi1.

   ld_email   = p_email.

   ld_mtitle = p_mtitle.

   ld_format              = p_format.

   ld_attdescription      = p_attdescription.

   ld_attfilename         = p_filename.

   ld_sender_address      = p_sender_address.

   ld_sender_address_type = p_sender_addres_type.

* Fill the document data.

   w_doc_data-doc_size = 1.

* Populate the subject/generic message attributes

   w_doc_data-obj_langu = sy-langu.

   w_doc_data-obj_name  = 'SAPRPT'.

   w_doc_data-obj_descr = ld_mtitle .

   w_doc_data-sensitivty = 'F'.

* Fill the document data and get size of attachment

   CLEAR w_doc_data.

   READ TABLE it_attach INDEX w_cnt.

   w_doc_data-doc_size =

      ( w_cnt - 1 ) * 255 + strlen( it_attach ).

   w_doc_data-obj_langu  = sy-langu.

   w_doc_data-obj_name   = 'SAPRPT'.

   w_doc_data-obj_descr  = ld_mtitle.

   w_doc_data-sensitivty = 'F'.

   CLEAR t_attachment.

   REFRESH t_attachment.

   t_attachment[] = it_attach[].

* Describe the body of the message

   CLEAR t_packing_list.

   REFRESH t_packing_list.

   t_packing_list-transf_bin = space.

   t_packing_list-head_start = 1.

   t_packing_list-head_num = 0.

   t_packing_list-body_start = 1.

   DESCRIBE TABLE it_message LINES t_packing_list-body_num.

   t_packing_list-doc_type = 'RAW'.

   APPEND t_packing_list.

* Create attachment notification

   t_packing_list-transf_bin = 'X'.

   t_packing_list-head_start = 1.

   t_packing_list-head_num   = 1.

   t_packing_list-body_start = 1.

   DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.

   t_packing_list-doc_type   ld_format.

   t_packing_list-obj_descr  ld_attdescription.

   t_packing_list-obj_name   ld_attfilename.

   t_packing_list-doc_size   t_packing_list-body_num * 255.

   APPEND t_packing_list.

* Add the recipients email address

   CLEAR t_receivers.

   REFRESH t_receivers.

   t_receivers-receiver = ld_email.

   t_receivers-rec_type = 'U'.

   t_receivers-com_type = 'INT'.

   t_receivers-notif_del = 'X'.

   t_receivers-notif_ndel = 'X'.

   APPEND t_receivers.

   CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

     EXPORTING

       document_data              = w_doc_data

       put_in_outbox              = 'X'

       sender_address             = ld_sender_address

       sender_address_type        = ld_sender_address_type

       commit_work                = 'X'

     IMPORTING

       sent_to_all                = w_sent_all

     TABLES

       packing_list               = t_packing_list

       contents_bin               = t_attachment

       contents_txt               = it_message

       receivers                  = t_receivers

     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.

* Populate zerror return code

   ld_error = sy-subrc.

* Populate zreceiver return code

   LOOP AT t_receivers.

     ld_receiver = t_receivers-retrn_code.

   ENDLOOP.

ENDFORM.                    "send_file_as_email_attachment

FORM fill_bdc_data USING value(p_program)

                       value(p_dynpro)

                       value(p_dynbegin)

                       value(p_fnam)

                       value(p_fval).

   CLEAR fs_bdcdata .

   IF p_dynbegin = 'X' .

     fs_bdcdata-program = p_program .

     fs_bdcdata-dynpro  = p_dynpro .

     fs_bdcdata-dynbegin = p_dynbegin .

     APPEND fs_bdcdata TO t_bdcdata.

   ELSE.

     fs_bdcdata-fnam = p_fnam.

     fs_bdcdata-fval = p_fval.

     CONDENSE fs_bdcdata-fval.

     APPEND fs_bdcdata TO t_bdcdata.

   ENDIF.                               " IF p_dynbeg..

ENDFORM .                              " Fill_entry

*********************(insert_data)****************************

FORM insert_data.

*Data decleration for Error Message

   DATA:

        t_msg TYPE TABLE OF bdcmsgcoll,   " Collecting Error messages

        w_msg TYPE bdcmsgcoll,

        w_msg1(51).

DATA: print_parameters TYPE pri_params,

       archi_parameters TYPE arc_params,

       valid_flag       TYPE c LENGTH 1.

   CALL TRANSACTION 'VA23' USING t_bdcdata

     MODE w_mode

     UPDATE 'S'

     MESSAGES INTO t_msg.

commit WORK.

ENDFORM.                    "insert_data

FORM populate_bdcdata.

   PERFORM :

*                                               T VA23

fill_bdc_data USING 'SAPMV45A'  '0102'  'X'  ' '  ' ',

fill_bdc_data USING  ''  ''  ''   'BDC_CURSOR'  'VBAK-VBELN',

fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE'  '=DRCK',

fill_bdc_data USING  ''  ''  ''   'VBAK-VBELN'  '1012000285',

fill_bdc_data USING 'SAPLVMSG'  '0200'  'X'  ' '  ' ',

fill_bdc_data USING  ''  ''  ''   'BDC_CURSOR'  'NAST-KSCHL(01)',

fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE'  '=PRNT'.

*fill_bdc_data USING  'SAPMSSY0' '0120'  'X'  ' '  ' ',

*

*fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE'  '=SBAC',

*fill_bdc_data USING  'SAPLVMSG' '0200'  'X'  ' '  ' ',

*

*

*fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE'  '/ECANC',

*fill_bdc_data USING  ''  ''  ''   'BDC_CURSOR'  'NAST-KSCHL(01)'.

ENDFORM.

Read only

0 Likes
4,490

Hi Sri,

Pls try changing the Printer to a non LOCL and check whether it works.

Regards,

K.S.

Read only

Former Member
0 Likes
4,490

Hi,

Does the background user have the authorization to write a file on to the shared folder?.

Regards,

Shashi Thakur

Read only

Former Member
0 Likes
4,490

Hi Sri,

You can not write one file on any shared folder for batch job, You can save this on Aplication server.

Thanks,

Shyam

Read only

Former Member
0 Likes
4,490

Generally When you have logic to display or get PDF directly for any Output we will process OTF related Control Parameter as 'X' -

control_param-getotf = 'X'.

By this we will directly get PDF output. When you use this option Spool will not be generated  by the system. You need to pass SPACE for this Or System Settings Flag for this GETOTF control Parameter. Then Only spool will get generated.

Thanks,

Venkatmani.

Read only

former_member1716
Active Contributor
0 Likes
4,490

Hi Sri,

One simle method i would suggest is in the forground method try to understand how the spool number is geneerated through debugging, through that you can find the missing parameter for spool generation.

May you would be missing something in background, please try through debugging.

Regards,

Satish

Read only

Former Member
0 Likes
4,491

Hi All,

Thank you all for the replays.

Solved it by alternative solution.

solution is that i created a new program in which i call the driver program & smartform.

while calling smartform passing  ls_control_param-getotf     = 'X' and get the OTF data in the internal table.

by calling FM  CONVERT_OTF converting into PDF and send email.

Regards,

Srikanth.