PDF Attachments in Report output.

Hi Gurus,
I have a Smartform Print program. My Business needs it the Smart form output is send to E-mail as PDF attachment.
But the exact requirement is ,
They need it a summury report before sending to E-mail.
In the report output The Smart form appears as an PDF atachment. If he clicks that attachment user can able to open and see the attachment. And beside the attachment there is one check box. If he checks the check box and click on E-mail button, then only the PDF should goes to E-mail as PDF attachment.
Here my question how we can place the PDF attachments in Report output.
If any one have suugestion or samle code send it to me.
Thanks and Regards
Srihari.

Hi,
If you have to display the pdf attachment in the report output, you may try using CL_GUI_PDFVIEWER. Have a look at this code sample as to how to implement it
[http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/d8bb0975-0e01-0010-2192-bd1fffd80cae]
Regards,
Vikranth

Similar Messages

  • How to print multiple PDF attachments from report

    Hello experts,
    I have developed an ALV report that is having some PDF attachments and I have push button(Print all) as shown in below image.
    When I click on print all button all the pdf attachments should be send to printer.
    I did check in the SCN but I found some posts to print single pdf from after opening the pdf and some posts to view a pdf file which is saved on desktop but in my requirement I have multiple pdf attachments and I have to send all the attachments to printer with print all button click without opening the attachmens.
    Can you please help me to resolve this issue.Thanks in advance.
    Thanks & Regards
    Suman

    Hi,
    Your Requirement is bit complex,
    i hope we can achieve the solution if follows bellow links and we use application server for temporary storage.
    Print Adobe Document from any URL link in SAP ABAP.
    Hope this will help you.

  • PDF-attachments (bug report)

    Hi,
    when I receive an email with an attachment in PDF I can read everything without problems.
    After I have forward this email I cannot read the attachment of the original email anymore. I can only see a small pdf icon if I open the attachment.
    Graefe

    This is a user forum. You can submit feedback to Apple: http://www.apple.com/feedback/iphone.html.

  • How can I print PDF attachments from ABAP report in transaction ME23N?

    Hi,
    Users attach PDF files using "services for objects" in transaction ME23N.
    How can I print the PDF attachments from ABAP report ?
    Thanks in advance,,

    Hi,
      check this link,this might help you to solve your problem
    /people/thomas.jung3/blog/2005/04/28/setting-up-an-adobe-writer-for-abap-output
    Regards
    Kiran Sure

  • Print Report Output in PDF Format

    :-) Hiee E'body
    I generated the output of a Report(developed in Report Builder 6i) in PDF format.
    The output file is created properly and the PDF file gets displayed on the screen in proper format but when i try to print the PDF file it gets printed across the page instead of printing
    it straight.
    I have checked all page and printer settings but cannot find the reason for this.
    If anybody is aware of the solution to this problem please guide me for the same.
    Have a nice day !!
    Thanking You ..
    Vivek Kapoor

    hello,
    sounds like you have a problem with portrait/landscape orientation of your document.
    regards,
    the oracle reports team --pw                                                                                                                                                                                                                                                                                   

  • PAYABLES NOT GETTING THE REPORT OUTPUT IN PDF AFTER APPLYING RUP5 R12

    Hi All,
    RDBMS:10.2.0.3.0
    Oracle Apps :12.0.4
    OS:AIX 5.3
    Problem Description:
    We are presently facing an issue in Payables not getting the report output in PDF esp for the reports "Invoice Register", Invoice Hold Report and also other reports. We were able to generate the reports till our last test performed on last Thursday. This instance was cloned over the last weekend and probably the new upgrade to RUP5 R12,would have impacted it.
    Concurrent Programs submitted are completed normal but on clicking "view output" results in Blank PDF output.
    The error message what was shown is as below:
    "Adobe Reader could not open 'AcrC.tmp' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)".
    Where could we locate ther above 'AcrC.tmp' of Adobe Reader..
    could anyone please share such an experience encountered for resolution..
    Would appreciate an early response..
    Thanks for your time!
    Regards,

    I suggest you speak to your DBA/sysadmin. This is not likely to be a reports problem.
    Check that you can see the output from apps through the viewer (the report may not hav output anything)
    Check whether you can print anything on that printer from apps.
    May also be worth checking to see if you can print to another printer from this report.

  • Report output to convert to pdf and mail it to recepient

    Hi
    I'm using the below coding for converting the output of the program to pdf and then mail it to the recepient.The coding works for background processsing only can i do the same for online.In the write statement i'm using the sy-repid my program name and when i get the pdf mail i'm getting the name of the program but instead i need to get the output of my program.Can any one help me in correcting the coding to get the output in pdf format.I know where i'm going wrong but this is the first time i'm working with this so new to this....It would be better if i could run the program and get the convertions into pdf through mail instead of background processing.....Please change the coding below to get the same.....
    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.
    DATA:  w_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 'DEV',
               c_no(1)     TYPE c   VALUE ' ',
               c_device(4) TYPE c   VALUE 'LOCL'.
    *START-OF-SELECTION.
    START-OF-SELECTION.
    Write statement to represent report output. Spool request is created
    if write statement is executed in background. This could also be an
    ALV grid which would be converted to PDF without any extra effort
      WRITE sy-repid.
      new-page.
      commit work.
      new-page print off.
    IF sy-batch EQ 'X'.
        PERFORM get_job_details.
        PERFORM obtain_spool_id.
    Alternative way could be to submit another program and store spool
    id into memory, will be stored in sy-spono.
    *submit ZSPOOLTOPDF2
           to sap-spool
           spool parameters   %_print
           archive parameters %_print
           without spool dynpro
           and return.
    Get spool id from program called above
    IMPORT w_spool_nr FROM MEMORY ID 'SPOOLTOPDF'.
        PERFORM convert_spool_to_pdf.
        PERFORM process_email.
        if p_delspl EQ 'X'.
          PERFORM delete_spool.
        endif.
        IF sy-sysid = c_dev.
          wait up to 5 seconds.
          SUBMIT rsconn01 WITH mode   = 'INT'
                          WITH output = 'X'
                          AND RETURN.
        ENDIF.
    ELSE.
       SKIP.
       WRITE:/ 'Program must be executed in background in-order for spool'
               'request to be created.'.
    ENDIF.
          FORM obtain_spool_id                                          *
    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.
          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.
          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.
          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.
          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         = 'Branch Revenue'.
      gd_attachment_desc = 'Branch Revenue'.
    CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.
      it_mess_bod        = 'Branch Revenue,Profit and Commissions'.
      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
                                          'Branch Revenue'
                                          'PDF'
                                          gd_attachment_name
                                          gd_attachment_desc
                                         p_sender
                                         gd_sender_type
                                 changing gd_error
                                          gd_reciever.
    ENDFORM.
          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.
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          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.
    Thanks in advance.....

    Hi
      Below is the code I was used to convert the sap script( Sales Order) to convert to PDf and send as an attachment.
    Dev/UDD Id :  EUR-770416                                             *
    Author     :  M.Sreeram Kumar                                        *
    Date       :  08-Apr-07                                              *
    Request    :  DU1K933766
    Description:  Send an order confirmation to the multiple user in a   *
                  PDF format via Email.                                  *
    Change Log                                                           *
    Author      :                                                        *
    Date        :                                                        *
    Description :                                                        *
    Request     :                                                        *
                 Print of an order confirmation by SAPscript
    REPORT zrep_email LINE-COUNT 100 MESSAGE-ID vn.
    TABLES: komk,                          "Communicationarea for conditions
            komp,                          "Communicationarea for conditions
            komvd,                         "Communicationarea for conditions
            vbco3,                         "Communicationarea for view
            vbdka,                         "Headerview
            vbdpa,                         "Itemview
            vbdpau,                        "Subitemnumbers
            conf_out,                      "Configuration data
            sadr,                          "Addresses
            tvag,                          "Reason for rejection
            vedka,                         "Servicecontract head data
            vedpa,                         "Servicecontract position data
            vedkn,                         "Servicecontract head notice data
            vedpn,                         "Servicecontract pos. notice data
            vbpa,                          "Sales Document: Partner
            kna1,                          "General Data in Customer Master
            riserls,                       "Serialnumbers
            komser,                        "Serialnumbers for print
            tvbur,                         "Sales office
            tvko,                          "Sales organisation
            adrs,                          "Communicationarea for Address
            fpltdr.                        "billing schedules
    INCLUDE zrep_rvadtabl.
    *INCLUDE yzrvadtabl.
    *INCLUDE RVADTABL.
    INCLUDE zrep_rvdirekt.
    *INCLUDE yzrvdirekt.
    *INCLUDE RVDIREKT.
    INCLUDE zrep_vedadata.
    *INCLUDE yzvedadata.
    *INCLUDE VEDADATA.
    DATA: retcode   LIKE sy-subrc.         "Returncode
    DATA: repeat(1) TYPE c.
    DATA: xscreen(1) TYPE c.               "Output on printer or screen
    DATA: BEGIN OF steu,                   "Controldata for output
            vdkex(1) TYPE c,
            vdpex(1) TYPE c,
            kbkex(1) TYPE c,
            kbpex(1) TYPE c,
          END OF steu.
    DATA: BEGIN OF tvbdpa OCCURS 0.        "Internal table for items
            INCLUDE STRUCTURE vbdpa.
    DATA: END OF tvbdpa.
    DATA: BEGIN OF tkomv OCCURS 50.
            INCLUDE STRUCTURE komv.
    DATA: END OF tkomv.
    DATA: BEGIN OF tkomvd OCCURS 50.
            INCLUDE STRUCTURE komvd.
    DATA: END OF tkomvd.
    DATA: BEGIN OF tvbdpau OCCURS 5.
            INCLUDE STRUCTURE vbdpau.
    DATA: END   OF tvbdpau.
    DATA: BEGIN OF tkomcon OCCURS 50.
            INCLUDE STRUCTURE conf_out.
    DATA: END   OF tkomcon.
    DATA: BEGIN OF tkomservh OCCURS 1.
            INCLUDE STRUCTURE vedka.
    DATA: END   OF tkomservh.
    DATA: BEGIN OF tkomservp OCCURS 5.
            INCLUDE STRUCTURE vedpa.
    DATA: END   OF tkomservp.
    DATA: BEGIN OF tkomservhn OCCURS 5.
            INCLUDE STRUCTURE vedkn.
    DATA: END   OF tkomservhn.
    DATA: BEGIN OF tkomservpn OCCURS 5.
            INCLUDE STRUCTURE vedpn.
    DATA: END   OF tkomservpn.
    DATA: BEGIN OF tkomser OCCURS 5.
            INCLUDE STRUCTURE riserls.
    DATA: END   OF tkomser.
    DATA: BEGIN OF tkomser_print OCCURS 5.
            INCLUDE STRUCTURE komser.
    DATA: END   OF tkomser_print.
    DATA: BEGIN OF tfpltdr OCCURS 5.
            INCLUDE STRUCTURE fpltdr.
    DATA: END   OF tfpltdr.
    DATA: pr_kappl(01)   TYPE c VALUE 'V'. "Application for pricing
    DATA: BEGIN OF char_val OCCURS 0,
            atnam LIKE cabn-atnam,
            atwrt LIKE ausp-atwrt,
          END OF char_val.
    FORM entry USING return_code us_screen.
      CLEAR retcode.
      xscreen = us_screen.
      PERFORM processing.
      IF retcode NE 0.
        return_code = 1.
      ELSE.
        return_code = 0.
      ENDIF.
    ENDFORM.                    "ENTRY
          FORM PROCESSING                                               *
    FORM processing.
      PERFORM get_data.
      CHECK retcode = 0.
      PERFORM form_open USING xscreen vbdka-land1.
      CHECK retcode = 0.
      PERFORM logo_selection.
    PERFORM form_title_print.
      CHECK retcode = 0.
      PERFORM write_header_info.
      PERFORM validity_print.
      CHECK retcode = 0.
      PERFORM header_data_print.
      CHECK retcode = 0.
      PERFORM header_serv_print.
      CHECK retcode = 0.
      PERFORM header_notice_print.
      CHECK retcode = 0.
      PERFORM header_inter_print.
      CHECK retcode = 0.
      PERFORM header_text_print.
      CHECK retcode = 0.
      PERFORM item_print.
      CHECK retcode = 0.
      PERFORM end_print.
      CHECK retcode = 0.
      PERFORM form_close.
      CHECK retcode = 0.
      PERFORM zemail_process.
    ENDFORM.                    "PROCESSING
          S U B R O U T I N E S                                         *
          FORM ALTERNATIVE_ITEM                                         *
          A text is printed, if the item is an alternative item.        *
    FORM alternative_item.
      CHECK vbdpa-grpos CN '0'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ALTERNATIVE_ITEM'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ALTERNATIVE_ITEM
          FORM CHECK_REPEAT                                             *
          A text is printed, if it is a repeat print for the document.  *
    FORM check_repeat.
      CLEAR repeat.
      SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
                                    AND   objky = nast-objky
                                    AND   kschl = nast-kschl
                                    AND   spras = nast-spras
                                    AND   parnr = nast-parnr
                                    AND   parvw = nast-parvw
                                    AND   nacha BETWEEN '1' AND '4'.
        CHECK *nast-vstat = '1'.
        repeat = 'X'.
        EXIT.
      ENDSELECT.
    ENDFORM.                    "CHECK_REPEAT
          FORM DELIVERY_DATE                                            *
          If the delivery date in the item is different to the header   *
          date and there are no scheduled quantities, the delivery date *
          is printed in the item block.                                 *
    FORM delivery_date.
      IF vbdka-lfdat =  space AND
         vbdpa-lfdat NE space AND
         vbdpa-etenr_da = space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_DELIVERY_DATE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "DELIVERY_DATE
          FORM DIFFERENT_CONSIGNEE                                      *
          If the consignee in the item is different to the header con-  *
          signee, it is printed by this routine.                        *
    FORM different_consignee.
      CHECK vbdka-name1_we NE vbdpa-name1_we
        OR  vbdka-name2_we NE vbdpa-name2_we
        OR  vbdka-name3_we NE vbdpa-name3_we
        OR  vbdka-name4_we NE vbdpa-name4_we.
      CHECK vbdpa-name1_we NE space
        OR  vbdpa-name2_we NE space
        OR  vbdpa-name3_we NE space
        OR  vbdpa-name4_we NE space.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_CONSIGNEE'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "DIFFERENT_CONSIGNEE
          FORM DIFFERENT_REFERENCE_NO                                   *
          If the reference number in the item is different to the header*
          reference number, it is printed by this routine.              *
    FORM different_reference_no.
      CHECK vbdpa-vbeln_vang NE vbdka-vbeln_vang
        OR  vbdpa-vbtyp_vang NE vbdka-vbtyp_vang.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_REFERENCE_NO'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "DIFFERENT_REFERENCE_NO
          FORM DIFFERENT_TERMS                                          *
          If the terms in the item are different to the header terms,   *
          they are printed by this routine.                             *
    FORM different_terms.
      DATA: us_vposn   LIKE vedpa-vposn.
      DATA: us_text(1) TYPE c.             "Flag for Noticetext was printed
      IF vbdpa-zterm NE vbdka-zterm AND
         vbdpa-zterm NE space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_TERMS_OF_PAYMENT'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
      IF vbdpa-inco1 NE space.
        IF vbdpa-inco1 NE vbdka-inco1 OR
           vbdpa-inco2 NE vbdka-inco2.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_DELIVERY'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDIF.
    Print different validity-data for the position
      READ TABLE tkomservp WITH KEY vbdpa-posnr.
      IF sy-subrc EQ 0.
        vedpa = tkomservp.
        IF vedpa-vbegdat NE space       AND
           vedpa-venddat NE space       AND
           NOT vedpa-vbegdat IS INITIAL AND
           NOT vedpa-venddat IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV1'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSEIF vedpa-vbegdat NE space AND
               NOT vedpa-vbegdat IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV2'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_SERV3'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDIF.
    Notice-rules for the positions.
      MOVE vbdpa-posnr TO us_vposn.
      CLEAR us_text.
      LOOP AT tkomservpn WHERE vposn = us_vposn.
        vedpn = tkomservpn.
        IF us_text IS INITIAL.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_TERMS_OF_NOTTXT'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
          us_text = charx.
        ENDIF.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM_TERMS_OF_NOTICE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDLOOP.
      IF NOT us_text IS INITIAL.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'EMPTY_LINE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "DIFFERENT_TERMS
          FORM END_PRINT                                                *
    FORM end_print.
      PERFORM get_header_prices.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'PROTECT'.
      PERFORM header_price_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'END_VALUES'.
      CALL FUNCTION 'CONTROL_FORM'
        EXPORTING
          command = 'ENDPROTECT'.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'SUPPLEMENT_TEXT'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "END_PRINT
          FORM FORM_CLOSE                                               *
          End of printing the form                                      *
    FORM form_close.
    CALL FUNCTION 'CLOSE_FORM'
       EXCEPTIONS
         OTHERS = 1.
      CALL FUNCTION 'CLOSE_FORM'
    IMPORTING
      RESULT                         =
      RDI_RESULT                     =
       TABLES
         otfdata                        = t_otfdata
    EXCEPTIONS
      UNOPENED                       = 1
      BAD_PAGEFORMAT_FOR_PRINT       = 2
      SEND_ERROR                     = 3
      SPOOL_ERROR                    = 4
      CODEPAGE                       = 5
       OTHERS                         = 1.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
        retcode = 1.
      ENDIF.
      SET COUNTRY space.
    ENDFORM.                    "FORM_CLOSE
          FORM FORM_OPEN                                                *
          Start of printing the form                                    *
    -->  US_SCREEN  Output on screen                                   *
                     ' ' = printer                                      *
                     'X' = screen                                       *
    -->  US_COUNTRY County for telecommunication and SET COUNTRY       *
    FORM form_open USING us_screen us_country.
      INCLUDE zrep_rvadopfo.
    INCLUDE yzrvadopfo.
    INCLUDE RVADOPFO.
    ENDFORM.                    "FORM_OPEN
          FORM FORM_TITLE_PRINT                                         *
          Printing of the form title depending of the field VBTYP       *
    FORM form_title_print.
      CASE vbdka-vbtyp.
        WHEN 'A'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_A'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'B'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_B'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'C'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_C'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'E'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_E'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'F'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_F'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'G'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_F'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'H'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_H'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'K'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_K'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN 'L'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_L'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        WHEN OTHERS.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TITLE_OTHERS'
              window  = 'TITLE'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
      ENDCASE.
      IF repeat NE space.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'REPEAT'
            window  = 'REPEAT'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "FORM_TITLE_PRINT
          FORM GET_DATA                                                 *
          General provision of data for the form                        *
    FORM get_data.
      DATA: us_veda_vbeln     LIKE veda-vbeln.
      DATA: us_veda_posnr_low LIKE veda-vposn.
      CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
        TABLES
          tkomv = tkomv.
      CLEAR komk.
      CLEAR komp.
      vbco3-mandt = sy-mandt.
      vbco3-spras = nast-spras.
      vbco3-vbeln = nast-objky.
      vbco3-kunde = nast-parnr.
      vbco3-parvw = nast-parvw.
      CALL FUNCTION 'RV_DOCUMENT_PRINT_VIEW'
        EXPORTING
          comwa = vbco3
        IMPORTING
          kopf  = vbdka
        TABLES
          pos   = tvbdpa.
    Fetch servicecontract-data and notice-data for head and position.
      us_veda_vbeln     = vbdka-vbeln.
      us_veda_posnr_low = posnr_low.
      CALL FUNCTION 'SD_VEDA_GET_PRINT_DATA'
        EXPORTING
          i_document_number = us_veda_vbeln
          i_language        = sy-langu
          i_posnr_low       = us_veda_posnr_low
        TABLES
          print_data_pos    = tkomservp
          print_data_head   = tkomservh
          print_notice_pos  = tkomservpn
          print_notice_head = tkomservhn.
      PERFORM get_controll_data.
      PERFORM sender.
      PERFORM check_repeat.
      PERFORM tvbdpau_create.
    ENDFORM.                    "GET_DATA
          FORM GET_ITEM_BILLING_SCHEDULES                               *
          In this routine the billing schedules are fetched from the    *
          database.                                                     *
    FORM get_item_billing_schedules.
      REFRESH tfpltdr.
      CHECK NOT vbdpa-fplnr IS INITIAL.
      CALL FUNCTION 'BILLING_SCHED_PRINTVIEW_READ'
        EXPORTING
          i_fplnr    = vbdpa-fplnr
          i_language = nast-spras
        TABLES
          zfpltdr    = tfpltdr.
    ENDFORM.                    "GET_ITEM_BILLING_SCHEDULES
    *&      Form  ITEM_BILLING_SCHEDULES_PRINT
          This routine prints the billing shedules of a salesdocument    *
          position.                                                      *
    FORM  item_billing_schedules_print.
      DATA: first_line(1) TYPE c.
      first_line = charx.
      LOOP AT tfpltdr.
        fpltdr = tfpltdr.
      Output of the following printlines
        IF NOT fpltdr-perio IS INITIAL.
        periodische Fakturen
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_BILLING_SCHEDULE_PERIODIC'
            EXCEPTIONS
              element = 1
              window  = 2.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        bei periodischen nur eine Zeile
          EXIT.
        ELSEIF fpltdr-fareg CA '14'.
        prozentuale Teilfakturierung
          IF NOT first_line IS INITIAL.
            CLEAR first_line.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_PERCENT_HEADER'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_PERCENT'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ELSEIF fpltdr-fareg CA '235'.
        wertmäßige  Teilfakturierung
          IF NOT first_line IS INITIAL.
            CLEAR first_line.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_VALUE_HEADER'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_BILLING_SCHEDULE_VALUE'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ELSEIF fpltdr-fareg CA '3'.
        Schlußrechnung
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_BILLING_SCHEDULES_PRINT
    *eject
          FORM GET_ITEM_CHARACTERISTICS                                 *
          In this routine the configuration data item is fetched from   *
          the database.                                                 *
    FORM get_item_characteristics.
      REFRESH tkomcon.
      CHECK NOT vbdpa-cuobj IS INITIAL.
      CALL FUNCTION 'CUD0_GET_CONFIGURATION'                    "#EC EXISTS
        EXPORTING
          instance      = vbdpa-cuobj
          language      = nast-spras
        TABLES
          configuration = tkomcon
        EXCEPTIONS
          OTHERS        = 4.
    ENDFORM.                    "GET_ITEM_CHARACTERISTICS
          FORM GET_ITEM_PRICES                                          *
          In this routine the price data for the item is fetched from   *
          the database.                                                 *
    FORM get_item_prices.
      CLEAR: komp,
             tkomv.
      IF komk-knumv NE vbdka-knumv.
        CLEAR komk.
        komk-mandt = sy-mandt.
        komk-kalsm = vbdka-kalsm.
        komk-kappl = pr_kappl.
        komk-waerk = vbdka-waerk.
        komk-knumv = vbdka-knumv.
        komk-vbtyp = vbdka-vbtyp.
      ENDIF.
      komp-kposn = vbdpa-posnr.
      CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
        EXPORTING
          comm_head_i = komk
          comm_item_i = komp
          language    = nast-spras
        IMPORTING
          comm_head_e = komk
          comm_item_e = komp
        TABLES
          tkomv       = tkomv
          tkomvd      = tkomvd.
    ENDFORM.                    "GET_ITEM_PRICES
          FORM GET_HEADER_PRICES                                        *
          In this routine the price data for the header is fetched from *
          the database.                                                 *
    FORM get_header_prices.
      CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
        EXPORTING
          comm_head_i = komk
          language    = nast-spras
        IMPORTING
          comm_head_e = komk
        TABLES
          tkomv       = tkomv
          tkomvd      = tkomvd.
    ENDFORM.                    "GET_HEADER_PRICES
    *&      Form  HEADER_DATA_PRINT
          Printing of header data like terms, weights ....               *
    FORM header_data_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'HEADER_DATA'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                               " HEADER_DATA_PRINT
          FORM HEADER_PRICE_PRINT                                       *
          Printout of the header prices                                 *
    FORM header_price_print.
      LOOP AT tkomvd.
        AT FIRST.
          IF komk-supos NE 0.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_SUM'.
          ELSE.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'UNDER_LINE'
              EXCEPTIONS
                element = 1
                window  = 2.
            IF sy-subrc NE 0.
              PERFORM protocol_update.
            ENDIF.
          ENDIF.
        ENDAT.
        komvd = tkomvd.
        IF komvd-koaid = 'D'.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'TAX_LINE'.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'SUM_LINE'.
        ENDIF.
      ENDLOOP.
      DESCRIBE TABLE tkomvd LINES sy-tfill.
      IF sy-tfill = 0.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'UNDER_LINE'
          EXCEPTIONS
            element = 1
            window  = 2.
        IF sy-subrc NE 0.
          PERFORM protocol_update.
        ENDIF.
      ENDIF.
    ENDFORM.                    "HEADER_PRICE_PRINT
          FORM HEADER_TEXT_PRINT                                        *
          Printout of the headertexts                                   *
    FORM header_text_print.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'HEADER_TEXT'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "HEADER_TEXT_PRINT
          FORM ITEM_CHARACERISTICS_PRINT                                *
          Printout of the item characteristics -> configuration         *
    FORM item_characteristics_print.
      LOOP AT tkomcon.
        conf_out = tkomcon.
        IF sy-tabix = 1.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_CONFIGURATION_HEADER'
            EXCEPTIONS
              OTHERS  = 1.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_CONFIGURATION'
            EXCEPTIONS
              OTHERS  = 1.
          IF sy-subrc NE 0.
            PERFORM protocol_update.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_CHARACTERISTICS_PRINT
          FORM ITEM_DELIVERY_CONFIRMATION                               *
          If the delivery date is not confirmed, a text is printed      *
    FORM item_delivery_confirmation.
      CHECK vbdpa-lfdat = space.
      CHECK vbdpa-kwmeng NE 0.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_DELIVERY_CONFIRMATION'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_DELIVERY_CONFIRMATION
          FORM ITEM_PRICE_PRINT                                         *
          Printout of the item prices                                   *
    FORM item_price_print.
      LOOP AT tkomvd.
        komvd = tkomvd.
        IF sy-tabix = 1.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_PRICE_QUANTITY'.
        ELSE.
          CALL FUNCTION 'WRITE_FORM'
            EXPORTING
              element = 'ITEM_LINE_PRICE_TEXT'.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "ITEM_PRICE_PRINT
          FORM ITEM_PRINT                                               *
          Printout of the items                                         *
    FORM item_print.
      DATA: da_subrc LIKE sy-subrc,
            da_dragr LIKE tvag-dragr.
      CALL FUNCTION 'WRITE_FORM'           "First header
           EXPORTING  element = 'ITEM_HEADER'
           EXCEPTIONS OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      CALL FUNCTION 'WRITE_FORM'           "Activate header
           EXPORTING  element = 'ITEM_HEADER'
                      type    = 'TOP'
           EXCEPTIONS OTHERS  = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
      LOOP AT tvbdpa.
        vbdpa = tvbdpa.
      TVAG lesen um festzustellen ob abgesagte Positionen gedruckt werden
      sollen
        PERFORM tvag_select(sapmv45a) USING vbdpa-abgru
                                            da_dragr
                                            space
                                            da_subrc.
        IF da_dragr EQ space.              "Print rejected item?
          IF vbdpa-posnr_neu NE space.     "Item
            PERFORM get_item_serials.
            PERFORM get_item_characteristics.
            PERFORM get_item_billing_schedules.
            PERFORM get_item_prices.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'ENDPROTECT'.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'PROTECT'.
            CALL FUNCTION 'WRITE_FORM'
              EXPORTING
                element = 'ITEM_LINE'.
            PERFORM item_rejected.
            PERFORM item_price_print.
            CALL FUNCTION 'CONTROL_FORM'
              EXPORTING
                command = 'ENDPROTECT'.
            PERFORM item_text_print.
            PERFORM item_serials_print.
            PERFORM item_characteristics_print.
            PERFORM alternative_item.
            PERFORM delivery_date.
            PERFORM item_delivery_confirmation.
            PERFORM item_billing_schedules_print.
            PERFORM different_reference_no.
            PERFORM different_terms.
            PERFORM different_consignee.
            PERFORM schedule_header.
            PERFORM main_item.
          ELSE.
            PERFORM schedule_print.
          ENDIF.
        ENDIF.
      ENDLOOP.
      CALL FUNCTION 'WRITE_FORM'           "Deactivate Header
           EXPORTING  element  = 'ITEM_HEADER'
                      function = 'DELETE'
                      type     = 'TOP'
           EXCEPTIONS OTHERS   = 1.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_PRINT
          FORM ITEM_REJECTED                                            *
          A text is printed, if the item is rejected                    *
    FORM item_rejected.
      CHECK NOT vbdpa-abgru IS INITIAL.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM_REJECTED'
        EXCEPTIONS
          element = 1
          window  = 2.
      IF sy-subrc NE 0.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    "ITEM_REJECTED
          FORM MAIN_ITEM                                                *
          A text is printed, if the item is a main item                 *

  • Changing the seeded rdf report output from text to PDF

    Hi All,
    I am trying to change the seeded report "Print Requisition Report" output from text to PDF. I changed the output format in the concurrent program definition from text to pdf. The report is now getting displayed in pdf format, but the alignment of the fields are changed. The output is not printing as it was printing while in the text output format. The output looks very sloppy, with uneven fonts and too much of text wrapping.
    I tried some formatting and fields are somehow getting displayed but doesnt look in proper format. I am not able to change the font style in the report builder 6i, even if i change it is printing in the same font style with uneven font size. I think reducing the font size might help, but i am unable to change.We are on 11.5.10.2. Please provide your valuable suggestions on how to go about.
    Thanks
    Sarvesh

    Hi Hussein,
    Thanks for the information. After the adjustments in the layout and the font change the report is now getting displayed without any clipping when clicked on view output. But when the same report is printed some characters on the left and and right side is getting clipped. Please help on how to solve this issue.
    Thanks,
    Sarvesh

  • Converting simple report output to PDF print layout issue

    Hi all,
    I am converted one report output to PDF format, it is working fine in one DEV sever, but when we moved it to other server the layout of output preview & font size  is not coming properly (as same in DEV server)  in the new server. I am using the below code, please check & correct me if anything is wrong.
    CALL FUNCTION 'GET_PRINT_PARAMETERS'
          EXPORTING
            copies                 = '1'
            cover_page             = space
            destination            = 'LOCL'
            expiration             = '1'
            immediately            = space
            mode                   = space
            new_list_id            = 'X'
            no_dialog              = 'X'
            user                   = sy-uname
            line_size              = 200
            line_count             = 65
    *        layout                 = 'Z_65_230'
            layout                 = 'X_58_170'
            sap_cover_page         = 'X'
          IMPORTING
            out_parameters         = mstr_print_parms
            valid                  = mc_valid
          EXCEPTIONS
            archive_info_not_found = 1
            invalid_print_params   = 2
            invalid_archive_params = 3
            OTHERS                 = 4.
        IF sy-subrc EQ 0.
    **--Creating Spool Request.
          CALL FUNCTION 'JOB_OPEN'
            EXPORTING
              jobname          = lv_job_name
            IMPORTING
              jobcount         = lv_job_count
            EXCEPTIONS
              cant_create_job  = 1
              invalid_job_data = 2
              jobname_missing  = 3
              OTHERS           = 4.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ELSE.
    **--Submitting the Report & Get the Output.
            SUBMIT  zpsr_submit_prcng WITH SELECTION-TABLE t_ebeln TO SAP-SPOOL WITHOUT SPOOL DYNPRO
                                  SPOOL PARAMETERS mstr_print_parms
                                  USER             sy-uname         " User for runtime authorizations
                                  VIA JOB          lv_job_name
                                  NUMBER           lv_job_count
                                  AND RETURN.
            IF sy-subrc <> 0.
              MESSAGE ID    sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH  sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ELSE.
              CALL FUNCTION 'JOB_CLOSE'
                EXPORTING
                  jobcount         = lv_job_count
                  jobname          = lv_job_name
                  strtimmed        = 'X'
                IMPORTING
                  job_was_released = lv_job_released.
              IF sy-subrc <> 0.
                MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
              ENDIF.
    Thanks & Regards
    Avish
    Moderator Message: Please use code tags when pasting code snippets. Also paste relevant portions of the code
    Edited by: Suhas Saha on Jul 13, 2011 3:05 PM

    Dear Alexander,
    Thanks for the reply.
    In this I am using the FM 'CONVERT_ABAPSPOOLJOB_2_PDF'. I have checked the settings from SPAD that is also same in both servers for particular output device. But the patches are diffrennt in both the servers, the server from which layout is not coming properly having the high level patches in compare to the other server(which is working fine).

  • Problem in converting report output to pdf

    Hi,
    I'm managing to get the spool id and other requirements but could'nt get the output of the program converted to pdf format.When i'm trying to do this i'm getting the pdf format of the functional module which retrievs the header and item records and displays the numbers records in the header and item like for eg. header records 8 and item records 10 this its displaying in the format in which we get our funtional module output when we give some data into it.....
    Can any one please tell me how to solve this for ur information i'm using hierarchail squential report with multiple reports in the same report.............
    for instance i'm using the following coding please find the bug......
    PARAMETER: p_email1 LIKE somlreci1-receiver
                                        DEFAULT '[email protected]',
               p_sender LIKE somlreci1-receiver
                                        DEFAULT '[email protected]',
               p_delspl  AS CHECKBOX.
    *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.
    DATA:  w_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 'DEV',
               c_no(1)     TYPE c   VALUE ' ',
               c_device(4) TYPE c   VALUE 'LOCL'.
    *START-OF-SELECTION.
    START-OF-SELECTION.
    Write statement to represent report output. Spool request is created
    if write statement is executed in background. This could also be an
    ALV grid which would be converted to PDF without any extra effort
      WRITE 'Hello World'.
      new-page.
      commit work.
      new-page print off.
      IF sy-batch EQ 'X'.
        PERFORM get_job_details.
        PERFORM obtain_spool_id.
    Alternative way could be to submit another program and store spool
    id into memory, will be stored in sy-spono.
    *submit ZSPOOLTOPDF2
           to sap-spool
           spool parameters   %_print
           archive parameters %_print
           without spool dynpro
           and return.
    Get spool id from program called above
    IMPORT w_spool_nr FROM MEMORY ID 'SPOOLTOPDF'.
        PERFORM convert_spool_to_pdf.
        PERFORM process_email.
        if p_delspl EQ 'X'.
          PERFORM delete_spool.
        endif.
        IF sy-sysid = c_dev.
          wait up to 5 seconds.
          SUBMIT rsconn01 WITH mode   = 'INT'
                          WITH output = 'X'
                          AND RETURN.
        ENDIF.
      ELSE.
        SKIP.
        WRITE:/ 'Program must be executed in background in-order for spool',
                'request to be created.'.
      ENDIF.
          FORM obtain_spool_id                                          *
    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.
          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.
          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.
          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.
          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.
          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.
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          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.

    Please  go throught the code    ... this  is  my salary sending  program to  all the employees   as pdf attach file of his  salary breakup ...... it was  so clear  how the   data  is converted in th  pdf   format   .... and more understanding way the internal tables are declared ....
    DATA W_OPTIONS LIKE ITCPO OCCURS 0 WITH HEADER LINE.
      DATA : z_itcpp LIKE itcpp OCCURS 0 WITH HEADER LINE.
      DATA : otfdt like ITCOO OCCURS 0 WITH HEADER LINE.
      DATA : pdfdt like TLINE OCCURS 0 with header line.
       DATA: NUMBYTES TYPE I.
      DATA: OBJPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
      DATA: OBJHEAD   LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
      DATA: OBJBIN    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
      DATA: OBJTXT    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
      DATA: RECLIST   LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
      DATA: DOC_CHNG  LIKE SODOCCHGI1.
      DATA: TAB_LINES LIKE SY-TABIX.
      DATA: Begin of i_errors occurs 0,
            type(1) type c,
            descr(100) type c,
           End of i_errors.
        w_options-tdprinter = 'POSTSCPT'.
        W_options-TDRDIDEV = 'XP45'.
        W_options-TDGETOTF = 'X'.
        APPEND W_options.
        call function 'OPEN_FORM'
            exporting
                  device                      = 'PRINTER'
                  dialog                      = ' '
                  form                        = 'ZHRPAYSLIP'
                  language                    =  sy-langu
                  options                     =  w_options
    *      IMPORTING
    *         LANGUAGE                    =
    *         NEW_ARCHIVE_PARAMS          =
    *         RESULT                      =
           exceptions
                 canceled                    = 1
                 device                      = 2
                 form                        = 3
                 options                     = 4
                 unclosed                    = 5
                 mail_options                = 6
                 archive_error               = 7
                 invalid_fax_number          = 8
                 more_params_needed_in_batch = 9
                 others                      = 10 .
    CALL FUNCTION 'CLOSE_FORM'
    *    IMPORTING
    *         RDI_RESULT               =
        TABLES
             OTFDATA                  = otfdt
          EXCEPTIONS
               UNOPENED                 = 1
               BAD_PAGEFORMAT_FOR_PRINT = 2
               SEND_ERROR               = 3
               OTHERS                   = 4.
        EXPORT otfdt TO MEMORY ID 'PDFT'.
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
       FORMAT                      = 'PDF'
    *   MAX_LINEWIDTH               = 132
    *   ARCHIVE_INDEX               = ' '
    *   COPYNUMBER                  = 0
    *   ASCII_BIDI_VIS2LOG          = ' '
    *   PDF_DELETE_OTFTAB           = ' '
    IMPORTING
       BIN_FILESIZE                = NUMBYTES
    *   BIN_FILE                    =
      TABLES
        otf                         = otfdt
        lines                       = pdfdt
    * EXCEPTIONS
    *   ERR_MAX_LINEWIDTH           = 1
    *   ERR_FORMAT                  = 2
    *   ERR_CONV_NOT_POSSIBLE       = 3
    *   ERR_BAD_OTF                 = 4
    *   OTHERS                      = 5
    IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF .
    Refresh OBJTXT. clear OBJTXT.
      Refresh OBJPACK. clear OBJPACK.
      Refresh objbin. clear objbin.
      Refresh OBJHEAD. clear OBJHEAD.
      Refresh RECLIST. Clear RECLIST.
    * Creation of the document to be sent
    * File Name
      DOC_CHNG-OBJ_NAME = 'PAYSLIP'.
    * Mail Subject
      DOC_CHNG-OBJ_DESCR = 'Payslip'.
    * Mail Contents
      OBJTXT = 'This e-mail was sent from an automated system...'.
      APPEND OBJTXT.
      OBJTXT = 'Do not reply to this message.'.
      APPEND OBJTXT.
      OBJTXT = 'Please open the attachment to view the Payslip'.
      APPEND OBJTXT.
      OBJTXT = ''.
      APPEND OBJTXT.
      if not msgtxt1 is initial.
      OBJTXT = msgtxt1.
      APPEND OBJTXT.
      endif.
      if not msgtxt2 is initial.
      OBJTXT = msgtxt2.
      APPEND OBJTXT.
      endif.
      if not msgtxt3 is initial.
      OBJTXT = msgtxt3.
      APPEND OBJTXT.
      endif.
      DESCRIBE TABLE OBJTXT LINES TAB_LINES.
      READ TABLE OBJTXT INDEX TAB_LINES.
      DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
    * Creation of the entry for the compressed document
      CLEAR OBJPACK-TRANSF_BIN.
      OBJPACK-HEAD_START = 1.
      OBJPACK-HEAD_NUM = 0.
      OBJPACK-BODY_START = 1.
      OBJPACK-BODY_NUM = TAB_LINES.
      OBJPACK-DOC_TYPE = 'RAW'.
      APPEND OBJPACK.
    * Creation of the document attachment
    CALL FUNCTION 'QCE1_CONVERT'
       TABLES
         t_source_tab         = pdfdt
         t_target_tab         = objbin
       EXCEPTIONS
         convert_not_possible = 1
         OTHERS               = 2.
    describe table objbin lines tab_lines.
    OBJHEAD = 'Payslip.PDF'.
    APPEND OBJHEAD.
    ** Creation of the entry for the compressed attachment
      OBJPACK-TRANSF_BIN = 'X'.
      OBJPACK-HEAD_START = 1.
      OBJPACK-HEAD_NUM = 1.
      OBJPACK-BODY_START = 1.
      OBJPACK-BODY_NUM = TAB_LINES.
      OBJPACK-DOC_TYPE = 'PDF'.
      OBJPACK-OBJ_NAME = 'Payslip'.
      OBJPACK-OBJ_DESCR = 'Payslip'.
      OBJPACK-DOC_SIZE = TAB_LINES * 255.
      APPEND OBJPACK.
    * Completing the recipient list
    *  Read table i_pa0105 with key pernr = pernr-pernr binary search.
      loop at i_pa0105 where pernr = pernr-pernr and USRTY = '0010'.
      endloop.
      if sy-subrc = 0.
          RECLIST-RECEIVER = i_pa0105-USRID_LONG.
          RECLIST-REC_TYPE = 'U'.
          APPEND RECLIST.
      endif.
      if RECLIST[] is initial.
          loop at i_pa0105 where pernr = pernr-pernr and USRTY = 'MAIL'.
          endloop.
          if sy-subrc = 0.
              RECLIST-RECEIVER = i_pa0105-USRID.
              RECLIST-REC_TYPE = 'U'.
              APPEND RECLIST.
          endif.
      endif.
       if not RECLIST[] is initial.
    * Sending the document
        CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        EXPORTING
           DOCUMENT_DATA = DOC_CHNG
           PUT_IN_OUTBOX = ''
           COMMIT_WORK = 'X'
        TABLES
           PACKING_LIST = OBJPACK
           OBJECT_HEADER = OBJHEAD
           CONTENTS_BIN = OBJBIN
           CONTENTS_TXT = OBJTXT
           RECEIVERS = RECLIST
        EXCEPTIONS
           TOO_MANY_RECEIVERS = 1
           DOCUMENT_NOT_SENT = 2
           OPERATION_NO_AUTHORIZATION = 4
        OTHERS = 99.
        CASE SY-SUBRC.
           WHEN 0.
                   LOOP AT RECLIST.
    *                   Concatenate pernr-pernr '-'  RECLIST-RECEIVER(48)
    into error1.
                       IF RECLIST-RETRN_CODE = 0.
    *                     Concatenate error1 ': The document was sent' into
    error1.
                         i_errors-descr = pernr-pernr.
                         i_errors-type = 'S'.
                         append i_errors.
                       ELSE.
                         Concatenate error1 ': The document could not be
    sent' into error1.
                         i_errors-descr = error1.
                         i_errors-type = 'E'.
                         append i_errors.
                       ENDIF.
                   ENDLOOP.
            WHEN 1.
               Concatenate pernr-pernr '-'  RECLIST-RECEIVER(48) into
    error1.
               Concatenate error1 ': No authorization for sending to the
    recipients' into error1.
               i_errors-descr = error1.
               i_errors-type = 'E'.
               append i_errors.
            WHEN 2.
               Concatenate pernr-pernr '-'  RECLIST-RECEIVER(48) into
    error1.
               Concatenate error1 ': Document could not be sent to the
    recipient' into error1.
               i_errors-descr = error1.
               i_errors-type = 'E'.
               append i_errors.
            WHEN 4.
               Concatenate pernr-pernr '-'  RECLIST-RECEIVER(48) into
    error1.
               Concatenate error1 ': No send authorization' into error1.
               i_errors-descr = error1.
               i_errors-type = 'E'.
               append i_errors.
            WHEN OTHERS.
               Concatenate pernr-pernr '-'  RECLIST-RECEIVER(48) into
    error1.
               Concatenate error1 ': Error occurred while sending' into
    error1.
               i_errors-descr = error1.
               i_errors-type = 'E'.
               append i_errors.
        ENDCASE.
      else.
        error1 = pernr-pernr.
    *    Concatenate error1 ': Maintain Infotype 0105.' into error1.
        i_errors-descr = error1.
        i_errors-type = 'M'.
        append i_errors.
      endif.
    girish

  • How to download the report output  into PDF format

    Hi friedns
    from the report output when user clicks download button
    it has to download to PDF format
    how to do this
    thanks in advance
    venu

    hi venu,
    check this sample code
    Save Report Output to a PDF File
    This report takes another report as input, and captures the output of that report. The output is then converted to
    PDF and saved to a local file. This shows how to use some of the PDF function modules, as well as an easy way to
    create PDF files.
    Source Code Listing
    report zabap_2_pdf.
    *-- Enhancements: only allow to be run with variant. Then called
    *-- program will be transparent to users
    *-- TABLES
    tables:
    tsp01.
    *-- STRUCTURES
    data:
    mstr_print_parms like pri_params,
    mc_valid(1) type c,
    mi_bytecount type i,
    mi_length type i,
    mi_rqident like tsp01-rqident.
    *-- INTERNAL TABLES
    data:
    mtab_pdf like tline occurs 0 with header line,
    mc_filename like rlgrap-filename.
    *-- SELECTION SCREEN
    parameters:
    p_repid like sy-repid, " Report to execute
    p_linsz like sy-linsz default 132, " Line size
    p_paart like sy-paart default 'X_65_132'. " Paper Format
    start-of-selection.
    concatenate 'c:\'
    p_repid
    '.pdf'
    into mc_filename.
    *-- Setup the Print Parmaters
    call function 'GET_PRINT_PARAMETERS'
    exporting
    authority= space
    copies = '1'
    cover_page = space
    data_set = space
    department = space
    destination = space
    expiration = '1'
    immediately = space
    in_archive_parameters = space
    in_parameters = space
    layout = space
    mode = space
    new_list_id = 'X'
    no_dialog= 'X'
    user = sy-uname
    importing
    out_parameters = mstr_print_parms
    valid = mc_valid
    exceptions
    archive_info_not_found = 1
    invalid_print_params = 2
    invalid_archive_params = 3
    others = 4.
    *-- Make sure that a printer destination has been set up
    *-- If this is not done the PDF function module ABENDS
    if mstr_print_parms-pdest = space.
    mstr_print_parms-pdest = 'LOCL'.
    endif.
    *-- Explicitly set line width, and output format so that
    *-- the PDF conversion comes out OK
    mstr_print_parms-linsz = p_linsz.
    mstr_print_parms-paart = p_paart.
    submit (p_repid) to sap-spool without spool dynpro
    spool parameters mstr_print_parms
    via selection-screen
    and return.
    *-- Find out what the spool number is that was just created
    perform get_spool_number using sy-repid
    sy-uname
    changing mi_rqident.
    *-- Convert Spool to PDF
    call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
    exporting
    src_spoolid= mi_rqident
    no_dialog = space
    dst_device = mstr_print_parms-pdest
    importing
    pdf_bytecount = mi_bytecount
    tables
    pdf = mtab_pdf
    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.
    call function 'DOWNLOAD'
    exporting
    bin_filesize = mi_bytecount
    filename = mc_filename
    filetype = 'BIN'
    importing
    act_filename = mc_filename
    tables
    data_tab = mtab_pdf.
    FORM get_spool_number *
    Get the most recent spool created by user/report *
    --> F_REPID *
    --> F_UNAME *
    --> F_RQIDENT *
    form get_spool_number using f_repid
    f_uname
    changing f_rqident.
    data:
    lc_rq2name like tsp01-rq2name.
    concatenate f_repid+0(8)
    f_uname+0(3)
    into lc_rq2name separated by '_'.
    select * from tsp01 where rq2name = lc_rq2name
    order by rqcretime descending.
    f_rqident = tsp01-rqident.
    exit.
    endselect.
    if sy-subrc ne 0.
    clear f_rqident.
    endif.
    endform." get_spool_number
    Regards,
    Naveen

  • Open mutiple PDF report outputs with one button click

    I need to open multiple PDF outputs depending on check boxes on the front end (Asp.net C#) app connecting to Crystal report server XI. Here is my code. I'm able to open only one PDF not multiple. If I use Response.end() at the end except first nothing is displayed. If I remove response.end() it opens Adobe and displays error msg saying file is corrupted. Please let me know if there is any other way to display multiple PDF outputs
    SessionMgr sessionMgr = new SessionMgr();
            EnterpriseSession enterpriseSession;
            ReportAppFactory reportAppFactory;
            ReportClientDocument reportClientDocument;
            EnterpriseService enterpriseService;
            InfoStore infoStore;
            InfoObjects infoObjects;
            InfoObject infoObject;
            String crServerName = ConfigurationManager.AppSettings.Get("CRServerName");
            String crUserID = ConfigurationManager.AppSettings.Get("CRUserID");
            String crPwd = ConfigurationManager.AppSettings.Get("CRPwd");
            String dbUserID = ConfigurationManager.AppSettings.Get("DBUserID");
            String dbPwd = ConfigurationManager.AppSettings.Get("DBPwd");
            enterpriseSession = sessionMgr.Logon(crUserID, crPwd, crServerName, "secEnterprise");
            enterpriseService = enterpriseSession.GetService("InfoStore");
            infoStore = new InfoStore(enterpriseService);
            infoObjects = infoStore.Query("Select SI_ID From CI_INFOOBJECTS Where SI_NAME='" + reportName + "' And SI_INSTANCE=0");
            infoObject = infoObjects[1];
            EnterpriseService tempService = enterpriseSession.GetService("", "RASReportFactory");
            reportAppFactory = (ReportAppFactory)tempService.Interface;
            reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID, 0);
            // Pass datbase logon credentials
            reportClientDocument.DatabaseController.logon(dbUserID, dbPwd);
    reportClientDocument.DataDefController.ParameterFieldController.SetCurrentValues("", "ProjectID", ddlProjects.SelectedValue);
            PrintOutputController rasPrintOutputController;
               CrReportExportFormatEnum rasReportExportFormat = CrReportExportFormatEnum.crReportExportFormatPDF;
                           rasPrintOutputController = doc.PrintOutputController;
                ByteArray tempByteArray = rasPrintOutputController.Export(rasReportExportFormat, 0);
                Byte[] byteStreamOutput = tempByteArray.ByteArray;
                Response.AddHeader("content-disposition", "attachment;filename=" + reportName + ".pdf");
               Response.ContentType = "application/pdf";
                Response.BinaryWrite(byteStreamOutput);
    Response.end();

    Hello, Anu;
    Business Objects will create one PDF from one report. Once the report object has been formatted as a PDF it is no longer handled by Business Objects but uses the functionality of Adobe.
    If they were being saved as .pdf files, would there be a way to open more than one at a time?
    Elaine

  • Converting report output to pdf by submit spooland email to multiple vendor

    Hi all,
               my current program converting the report output to pdf and then downaloding andsending  to vendor email.If user enter single vendor is o.k. but if suppose user enter multiple vendors,report is dipalying with multiple vendor information and all this information converting to one pdf file only.but i need particular vendor pdf have particular vendor info only excluding remaining vendor info.I am pasting my code.can anyone suggest?
    TYPES: BEGIN OF type_data,
           lifnr TYPE ekko-lifnr,
           matnr TYPE lips-matnr,
           vgbel TYPE lips-vgbel,
           vgpos TYPE lips-vgpos,
           mfrgr TYPE lips-mfrgr,
           vbeln TYPE ekes-vbeln,
           erdat TYPE ekes-erdat,
           lfdat TYPE ekes-eindt,
           lgort TYPE lips-lgort,
           verur TYPE ekes-xblnr,
           lfuhr TYPE ekes-uzeit,
           lfimg TYPE lips-lfimg,
           meins TYPE lips-meins,
           posnr TYPE lips-posnr,
           kdmat TYPE lips-kdmat,
           dabmg TYPE ekes-dabmg,
           eindt TYPE eket-eindt,
    * Add by liza DEVK989704
           park TYPE ZPO_PARK-menge,
    * End by liza DEVK989704
           END OF type_data.
    DATA: gt_data TYPE STANDARD TABLE OF type_data.
    DATA: gw_data LIKE LINE OF gt_data.
    form display_list.
    DATA: lv_maktx   TYPE makt-maktx,
            lv_adv(01) TYPE c.
      DATA: lv_menge TYPE zomm_t0104m-menge.
    *-- Set titles
      title1 = 'Shipping notifications'.
      title2 = '(Formerly Known As Matsushita Industrial )'.
      title3 = sy-title.
      IF NOT pa_fax IS INITIAL.
        NEW-PAGE LINE-SIZE 120 LINE-COUNT 44.
        title3 = 'Outstanding shipping notifications by supplier'.
      ENDIF.
      SORT gt_data BY lifnr lfdat matnr vgbel vgpos eindt.
      LOOP AT gt_data INTO gw_data.
        AT NEW lifnr.
          NEW-PAGE.
          sy-pagno = 1.
    *-- Get the vendor name
          CLEAR: gv_name1,
                 gv_telf1,
                 gv_telfx.
          SELECT SINGLE name1 telf1 telfx
                 INTO (gv_name1, gv_telf1, gv_telfx)
                 FROM lfa1
                 WHERE lifnr = gw_data-lifnr.
        ENDAT.
    AT NEW matnr.
    *-- Get the material description
          CLEAR lv_maktx.
          SELECT SINGLE maktx INTO lv_maktx
                 FROM makt
                 WHERE matnr = gw_data-matnr
                   AND spras = sy-langu.
        ENDAT.
    *-- If "only pending shipping notifications" is selected, remove all
    *   entries with no pending quantity
        IF gw_data-lfimg LE gw_data-dabmg AND
           pa_pend = 'X'.
          CONTINUE.
        ENDIF.
    *-- Highlight entries where the SN delivery date is before the PO
    *   delivery date
        IF gw_data-lfdat < gw_data-eindt.
          FORMAT INTENSIFIED ON.
          lv_adv = 'X'.
        ELSE.
          FORMAT INTENSIFIED OFF.
          CLEAR lv_adv.
        ENDIF.
        lv_menge = gw_data-lfimg - gw_data-dabmg.
    * Add by liza DEVK989704
        clear: PARKING, T_PARK.
        refresh: T_PARK.
        Select * from ZPO_PARK into T_PARK
        where vbeln = gw_data-vbeln
        and lifnr = gw_data-lifnr
        and matnr =  gw_data-matnr.
        Append T_PARK.
        Endselect.
        Loop at T_PARK.
          PARKING = PARKING + T_PARK-menge.
        Endloop.
        gw_data-park = PARKING.
    * End by liza DEVK989704
        IF pa_fax IS INITIAL.
          WRITE:/2(18) gw_data-matnr,
                  (40) lv_maktx,
                       gw_data-vgbel,
                       gw_data-eindt,
                  (04) gw_data-mfrgr,
                  (18) gw_data-verur,
                       gw_data-vbeln,
                       gw_data-lfdat,
                  (07) gw_data-lfimg UNIT gw_data-meins,
                  (07) gw_data-dabmg UNIT gw_data-meins,
                  (07) lv_menge UNIT gw_data-meins,
                       gw_data-lgort,
                       gw_data-erdat,
                  (01) lv_adv,
    * Add by liza DEVK989704
                  (08) gw_data-park.
    * End by liza DEVK989704
        ELSE.
          WRITE:/2(12) gw_data-matnr,
                  (26) lv_maktx,
                       gw_data-vgbel,
                  (16) gw_data-verur,
                       gw_data-vbeln,
                       gw_data-lfdat,
                  (07) gw_data-lfimg UNIT gw_data-meins,
                  (07) gw_data-dabmg UNIT gw_data-meins,
                  (07) lv_menge UNIT gw_data-meins,
                       gw_data-lgort.
        ENDIF.
        PERFORM write_vline.

    AT END OF lifnr.
         If pa_dtim NE '000000'.
          ULINE.
          SKIP.
          WRITE:/12 TS_VEND.
          WRITE:/12 TS_ATT.
          WRITE:/12 TS_FROM.
          SKIP.                                     "D01K934099
          WRITE:/12'DELIVERY TIME:',pa_dtim.        "D01K934099
          SKIP.                                     "D01K934099
          WRITE:/12 TS_TEXT1.
          WRITE:/12 TS_TEXT2.
          WRITE:/12 TS_TEXT3.
          WRITE:/12 TS_TEXT4.
        Else.
          ULINE.
          SKIP.
          WRITE:/12 TS_VEND.
          WRITE:/12 TS_ATT.
          WRITE:/12 TS_FROM.
          WRITE:/12 TS_TEXT1.
          WRITE:/12 TS_TEXT2.
          WRITE:/12 TS_TEXT3.
          WRITE:/12 TS_TEXT4.
    Endif.
    ENDAT.
         move-corresponding gw_data to t_data.
         move : lv_maktx  to t_data-maktx,
                lv_menge  to t_data-menge,
                lv_adv    to t_data-adv,
                parking   to t_data-park.
           append t_data.
    L_X = 'X'.
      CALL FUNCTION 'GET_PRINT_PARAMETERS'
       EXPORTING
         NO_DIALOG                      = L_X
       IMPORTING
         OUT_PARAMETERS                 = GS_PRINT_PARAMS
         VALID                          = G_VALID
      IF SY-SUBRC  0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
          GS_PRINT_PARAMS-PAART = 'X_65_80'.
          GS_PRINT_PARAMS-LINSZ = '185'.
    *   /*----------store the current selection screen details---------/
      CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
        EXPORTING
          CURR_REPORT           = SY-REPID
        TABLES
          SELECTION_TABLE       = T_RSPARAMS
       EXCEPTIONS
         NOT_FOUND             = 1
         NO_REPORT             = 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.
    *   /*--- importing variable value set at first time to restrict the infinite loop --------/.
    IMPORT VAR FROM MEMORY ID 'abc' .
      VAR = VAR + 1 .
      P_UNAME = SY-UNAME .
      P_REPID = SY-REPID .
    * /*------checking variable to restricted scecond time exction of this block of code---------/
      IF VAR = 1 .
        V_MEMID = 1 .
        EXPORT VAR TO MEMORY ID 'abc' .
    * /*-----------submitting the spool request--------------/
        SUBMIT (P_REPID) WITH SELECTION-TABLE T_RSPARAMS
                           TO SAP-SPOOL
                         SPOOL PARAMETERS GS_PRINT_PARAMS
                         WITHOUT SPOOL DYNPRO
                         AND RETURN.
    endif.
    FREE MEMORY ID 'abc'.
    *  /*-------Calculating the lenth of report name--------/
      v_len = STRLEN( P_REPID ) .
    *  /*-------consutrucing the database variable  rq2name to search the spool request---------/
      IF v_len >= 9 .
        CONCATENATE P_REPID+0(9)
                    P_UNAME+0(3) INTO LC_RQ2NAME .
      ELSE.
        V_LEN1 = 9 - V_LEN .
        DO V_LEN1 TIMES .
          CONCATENATE V_TEMP '_' INTO V_TEMP .
        ENDDO.
        CONCATENATE P_REPID V_TEMP
                    P_UNAME INTO LC_RQ2NAME .
      ENDIF.
    *  /*--------selecting the spool request using the above constructed variable----------/
      SELECT  * FROM TSP01 INTO TABLe IT_TSP01
              WHERE RQ2NAME = LC_RQ2NAME .
    * /*--------sorting the internal table-----------/
      SORT  it_tsp01 BY RQCRETIME DESCENDING .
    * /*--------reading the first spool request-------/
      READ TABLE IT_TSP01 INDEX 1.
    * /*--------Convert Spool to PDF-----------/
      IF GS_PRINT_PARAMS-PDEST IS INITIAL.
        GS_PRINT_PARAMS-PDEST = 'LOCL'.
      ENDIF.
      CONCATENATE P_DEST T_DATA-LIFNR '.PDF' INTO G_FILENAME.
      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
        EXPORTING
          SRC_SPOOLID                    = IT_TSP01-RQIDENT
         NO_DIALOG                      = SPACE
       IMPORTING
         PDF_BYTECOUNT                  = G_BYTECOUNT
       TABLES
         PDF                            = T_PDF
       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
      IF SY-SUBRC  0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

  • How to send the output to PDF format in reports 6i?

    Hi,
    How to send the output to PDF format in reports 6i? I given Mode = BITMAP.
    DESTYPE = File, DESFORMAT = PDF, DESNAME = C:\x.pdf.
    Report is running fine. But PDF file not generated. I don't know what i missed. Any one can help this?
    Thanks
    Kavitha

    Hello,
    Do you get this problem only for DESFORMAT=PDF ?
    Test with :
    DESFORMAT = RTF, DESNAME = C:\x.rtf
    or
    DESFORMAT = HTMLCSS, DESNAME = C:\x.html
    does it work ?
    Check if DESNAME is modified in the reports itself.
    Regards

  • Is there a way to merge 3 or more report output in PDF into one

    Hi All,
    I know about the report sectioning. I am wondering is there any other way to merge 3 or more report output in pdf form to a single document.
    I have seen that there are many thrid party tools. Wondering is there anything from Oracle reports feature or any Oracle product for this?
    Thank You
    Rajesh ALex

    If not changing the reports design, third party tools is the only options. AFAIK, there is no Oracle proprietary tool for merging PDF files..

Maybe you are looking for

  • LR to PS makes images Red

    Hi, I've scoured forums and I've seen similar ones to mine, but I can never find a step-by-step instructions as to how to fix the issue. My problem: I process my images in LR first, then I want to export to PSCS4 for additional processing.  When I do

  • My ipod isn't displayed in my computer

    before when i connected my ipod, both itunes and the computer recognized the ipod. An extra disc appeared in My Computer (F:), but now there are no F: when i connect the ipod. but itunes works perfectly fine. what can i do, so i can bet back the extr

  • Creation of Distribution rule(Settlement rule) in production order

    Hello SAP GURUS,     I have one good query for you guys.When we create production order,by default it takes settlement rule (settle the cost of production order to material even that 100% settlement),and its because we have given the distribution rul

  • Filtering columns on condition

    Hi, I want to be able to select a few columns depending on a key. for instance, if my key is 'FA' then I want my FA columns to be the ones returned and not PG even though PG's columns are also declared. Here's the idea: table1 id  key  val FA  1  5th

  • DDIC and SAP* changing into usertype system

    In order to secure the Standard Users DDIC and SAP* against misuse i planned to change them into SYSTEM accounts instead of DIALOG. Is there, in case of a standard SAP implementation, any indications that we shouldn´t do this? In the guidelines and f