Script_pdf_email

Hi
This scenario is diffierent from the regular way.
I am not working on a driver program for a Script.
I am working on a normal report based on an invoice data. This data along with the same invoice should be sent to an email as an PDF attachment.
How can I do this.
Any inputs please.
Thanks
Kiran

Hi
See the sample report where You can send mail from a report
You have to convert the data into PDF using the fun module  CONVERT_ABAPSPOOLJOB_2_PDF which is not used in this
you have to handle it in the code
REPORT zm_reservation_alert
       NO STANDARD PAGE HEADING
       MESSAGE-ID zm_msg.
       D A T A B A S E  T A B L E S   D E C L A R A T I O N
               T Y P E S  D E C L A R A T I O N S
Reservations Main Structure
TYPES: BEGIN OF s_res,
         rsnum TYPE rsnum,                   " Reservation No
         rspos TYPE rspos,                   " Item No
         usnam TYPE usnam,                   " User Name
         bwart TYPE bwart,                   " Movement Type
         aufnr TYPE aufnr,                   " Order Number
         rsart TYPE rsart,                   " Record Type
         bdart TYPE bdart,                   " Reservation Type
         matnr TYPE matnr,                   " Material No
         bdter TYPE bdter,                   " Req Date
         menge TYPE menge_d,                 " Quantity
         kostl TYPE kostl,                   " Cost Center
         usrid TYPE sysid,                   " User ID
       END OF s_res.
Output Main Structure
TYPES: BEGIN OF s_rep,
         usnam TYPE usnam,                   " User Name
         rsnum TYPE rsnum,                   " Reservation No
         rspos TYPE rspos,                   " Item No
         matnr TYPE matnr,                   " Material No
         bdter TYPE bdter,                   " Req Date
         menge TYPE menge_d,                 " Quantity
         kostl TYPE kostl,                   " Cost Center
         aufnr TYPE aufnr,                   " Order Number
       END OF s_rep.
User Dept Details
TYPES: BEGIN OF s_dept,
         pernr TYPE persno,                  " Personal No
         usrid TYPE sysid,                   " User ID
         orgeh TYPE orgeh,                   " Orgn Unit
         orgtx TYPE orgtx,                   " Dept Name
       END OF s_dept.
For Send Mail Purpose
DATA : i_doc_data LIKE sodocchgi1.
DATA : BEGIN OF i_pack_list OCCURS 0.
        INCLUDE STRUCTURE sopcklsti1.
DATA : END OF i_pack_list.
DATA : BEGIN OF i_receivers OCCURS 0.
        INCLUDE STRUCTURE somlreci1.
DATA : END OF i_receivers.
DATA : BEGIN OF i_contents OCCURS 0.
        INCLUDE STRUCTURE solisti1.
DATA : END OF i_contents.
DATA : BEGIN OF i_header OCCURS 0.
        INCLUDE STRUCTURE solisti1.
DATA : END OF i_header.
DATA : BEGIN OF i_att OCCURS 0.
        INCLUDE STRUCTURE solisti1.
DATA : END OF i_att.
Internal table for bdcdata
DATA : it_bdcdata  LIKE bdcdata OCCURS 0 WITH HEADER LINE.
Internal table to handle messages
DATA : it_messages LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
           D A T A  D E C L A R A T I O N S
DATA: gv_lines  TYPE sy-index,           " Total Lines int Table
      gv_days   TYPE i,                  " Difference Days
      gv_date   TYPE sy-datum,           " Date
      gv_date1  TYPE sy-datum,           " Date
      gv_date2  TYPE sy-datum,           " Date
      gv_text(85),                       " Text Field
      gv_mesg(70),                       " Error Messages
      gv_bdc,                            " BDC Flag
      gv_flag TYPE i,                    " Flag
      gv_ernam TYPE ernam.               " User ID
            C O N S T A N T S     D E C L A R A T I O N S
CONSTANTS: c_x                VALUE 'X',         " Flag
           c_endda TYPE endda VALUE '99991231'.  " Date
     I N T E R N A L  T A B L E S  D E C L A R A T I O N S
DATA: i_res TYPE STANDARD TABLE OF s_res WITH HEADER LINE,  " Reservns
      i_dept TYPE STANDARD TABLE OF s_dept WITH HEADER LINE, " Dept
      i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE.  " Output
               S T A R T - O F - S E L E C T I O N                   *
START-OF-SELECTION.
Fetch main data
  PERFORM fetch_data.
Process data
  PERFORM process_data.
*&      Form  fetch_data
Fetching the Reservations related data from Database Tables
FORM fetch_data .
  CLEAR: gv_date, gv_date1, gv_date2.
  gv_date = sy-datum.
  gv_date1 = sy-datum - 10.
  gv_date2 = sy-datum + 10.
  CLEAR i_res.
  REFRESH i_res.
  SELECT a~rsnum                    " Reservation No.
         b~rspos                    " Reservation Item
         a~usnam                    " User Name
         a~bwart                    " Movement Type
         a~aufnr                    " Order Number
         b~rsart                    " Record Type
         b~bdart                    " Reservation Type
         b~matnr                    " Material No
         b~bdter                    " Req Date
    INTO TABLE i_res
    FROM rkpf AS a JOIN resb AS b
    ON arsnum = brsnum
    WHERE ( b~bdter BETWEEN gv_date1 AND gv_date2 ) AND
          b~xloek EQ ' '.
  SORT i_res BY rsnum rspos.
  DELETE ADJACENT DUPLICATES FROM i_res COMPARING matnr.
Add userid into the i_usr int table
  LOOP AT i_res.
    i_res-usrid = i_res-usnam.
    MODIFY i_res INDEX sy-tabix.
  ENDLOOP.
  IF NOT i_res[] IS INITIAL.
Get the User Dept Name
    CLEAR i_dept.
    REFRESH i_dept.
    SELECT a~pernr                    " Personal No
           a~usrid                    " User ID
           b~orgeh                    " Orgn Unit
           c~orgtx                    " Dept Name
      INTO TABLE i_dept
      FROM pa0105 AS a JOIN pa0001 AS b
      ON apernr = bpernr JOIN t527x AS c
      ON borgeh = corgeh
      FOR ALL ENTRIES IN i_res
      WHERE a~usrid = i_res-usrid AND
            a~endda EQ c_endda AND
            b~endda EQ c_endda.
  ENDIF.
  SORT i_dept BY pernr.
  DELETE ADJACENT DUPLICATES FROM i_dept COMPARING pernr.
Move the Creator of Reservation to a diff table
  LOOP AT i_res.
    MOVE-CORRESPONDING i_res TO i_rep.
    APPEND i_rep.
    CLEAR i_rep.
  ENDLOOP.
  SORT i_rep BY usnam rsnum rspos.
ENDFORM.                               " Fetch_Data
*&      Form  process_data
Process the Reservations related data for Expiry Date
FORM process_data .
  DATA: lv_date1 LIKE sy-datum,
        lv_date2 LIKE sy-datum,
        lv_date3(10),
        lv_menge(13),
        lv_tabix LIKE sy-tabix.
  LOOP AT i_rep.
    CLEAR: gv_days, gv_text, lv_date1, lv_date2,lv_date3.
    lv_tabix = sy-tabix.
    AT NEW usnam.
Populate the Contents Table
      CLEAR i_att.
      REFRESH i_att.
      i_att = 'Reservations Reminder'(014).
      APPEND i_att.
      i_att = '----
      APPEND i_att.
      i_att-line = '     '.
      APPEND i_att.
      READ TABLE i_dept WITH KEY usrid = i_rep-usnam.
      CONCATENATE 'Name:'(003) i_rep-usnam 'Dept:'(015) i_dept-orgtx
      INTO i_att-line SEPARATED BY space.
      APPEND i_att.
      i_att-line = '     '.
      APPEND i_att.
      i_att = 'Please find the List of expiring Reservations'(004).
      APPEND i_att.
      i_att-line = ' '.
      APPEND i_att.
      CONCATENATE '--' '' '--
' INTO
      i_att-line SEPARATED BY space.
      APPEND i_att.
    CONCATENATE 'Reservation #'(006) 'Material #'(007) ' Quantity'(002)
    'Due Date'(008) 'Work Center/CC'(005) INTO
    i_att-line SEPARATED BY space.
      APPEND i_att.
      CONCATENATE '--' '' '--
' INTO
      i_att-line SEPARATED BY space.
      APPEND i_att.
      i_att-line = ' '.
      APPEND i_att.
    ENDAT.
    gv_days  = i_rep-bdter - gv_date.
    lv_date1 = i_rep-bdter + 5.
    lv_date2 = i_rep-bdter + 10.
    MOVE i_rep-menge TO lv_menge.
    WRITE i_rep-bdter TO lv_date3.
    IF gv_days = 10.
      IF i_rep-aufnr <> space.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
         i_rep-aufnr 'is due for 10 days. Please collect'(009)
         INTO gv_text SEPARATED BY space.
      ELSE.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
         i_rep-kostl 'is due for 10 days. Please collect'(009)
         INTO gv_text SEPARATED BY space.
      ENDIF.
      i_att-line = gv_text.
      APPEND i_att.
      CLEAR i_att.
      CLEAR gv_text.
    ENDIF.
    IF gv_days = 5.
      IF i_rep-aufnr <> space.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-aufnr 'is due for 5 days. Please collect'(010)
        INTO gv_text SEPARATED BY space.
      ELSE.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-kostl 'is due for 5 days. Please collect'(010)
        INTO gv_text SEPARATED BY space.
      ENDIF.
      i_att-line = gv_text.
      APPEND i_att.
      CLEAR i_att.
      CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date1.
      IF i_rep-aufnr <> space.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-aufnr 'is getting cancelled on'(011) lv_date2
        INTO gv_text SEPARATED BY space.
      ELSE.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-kostl 'is getting cancelled on'(011) lv_date2
        INTO gv_text SEPARATED BY space.
      ENDIF.
      i_att-line = gv_text.
      APPEND i_att.
      CLEAR i_att.
      CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date2.
      IF i_rep-aufnr <> space.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-aufnr 'is being cancelled'(012)
        INTO gv_text SEPARATED BY space.
      ELSE.
        CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
        i_rep-kostl 'is being cancelled'(012)
        INTO gv_text SEPARATED BY space.
      ENDIF.
      i_att-line = gv_text.
      APPEND i_att.
      CLEAR i_att.
      CLEAR gv_text.
Mark the Reservation Item 'DELETED' using BDC.
     UPDATE resb SET xloek = c_x.
      PERFORM delete_item_resb.
    ENDIF.
    AT END OF usnam.
      IF ( gv_days = 10 OR gv_days = 5 OR gv_date = lv_date1 OR
           gv_date = lv_date2 ).
Read the User who creates the Reservn and send a mail alert to him
        CLEAR : i_receivers,gv_ernam.
        REFRESH: i_receivers.
        READ TABLE i_rep INDEX lv_tabix.
        gv_ernam = i_rep-usnam.
        IF gv_ernam <> space.
Send mail Alert to PR Creator(SAP inbox)
          PERFORM send_alert_data.
Send Mail to External Mail ID of the SAP USER
          PERFORM send_mail_external.
        ENDIF.
      ENDIF.
    ENDAT.
  ENDLOOP.
ENDFORM.                              " Process_data
*&      Form  delete_item_resb
Set the Deletion Indicator for the Res. Item in RESB
FORM delete_item_resb.
  gv_bdc = 'N'.
Perform to fill it_bdcdata.
  PERFORM fill_it_bdcdata.
Call the Transaction MB22
  CALL TRANSACTION 'MB22' USING it_bdcdata MODE 'A' UPDATE 'S'
                                MESSAGES INTO it_messages.
  IF sy-subrc <> 0.
    gv_flag = 1.
If error occurs in transaction mode run bdc session for that data
    PERFORM bdc_process.
  ENDIF.
Handles error messages
  PERFORM error_messages.
  CLEAR   : it_bdcdata, it_messages.
  REFRESH : it_bdcdata, it_messages.
  IF gv_bdc = 'O'.
close bdc if it is open
    PERFORM close_bdc.
  ENDIF.
ENDFORM.             "delete_item_resb
*&      Form  FILL_IT_BDCDATA
Filling Bdcdata structure with data
FORM fill_it_bdcdata.
  PERFORM bdc_dynpro      USING 'SAPMM07R' '0560'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RM07M-RSPOS'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RM07M-RSNUM'
                                i_rep-rsnum.
  PERFORM bdc_field       USING 'RM07M-RSPOS'
                                i_rep-rspos.
  PERFORM bdc_dynpro      USING 'SAPMM07R' '0510'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RESB-XLOEK'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RESB-XLOEK'
                                 c_x.
  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'COBL-KOSTL'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ENTE'.
  PERFORM bdc_dynpro      USING 'SAPMM07R' '0510'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RESB-ERFMG'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=BU'.
  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'COBL-KOSTL'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ENTE'.
ENDFORM.                    " FILL_IT_BDCDATA
*&      Form  BDC_DYNPRO
Filling the it_bdcdata table with program name & screen number
FORM bdc_dynpro USING    program LIKE bdcdata-program
                         dynpro LIKE bdcdata-dynpro.
  it_bdcdata-program = program.
  it_bdcdata-dynpro = dynpro.
  it_bdcdata-dynbegin = 'X'.
  APPEND it_bdcdata.
  CLEAR it_bdcdata.
ENDFORM.                    " BDC_DYNPRO
*&      Form  BDC_FIELD
  Filling it_bdcdata with field name and field value
FORM bdc_field USING fnam LIKE bdcdata-fnam
                     fval.
  it_bdcdata-fnam = fnam.
  it_bdcdata-fval = fval.
  APPEND it_bdcdata.
  CLEAR it_bdcdata.
ENDFORM.                    " BDC_FIELD
*&      Form  ERROR_MESSAGES
Displaying error messages
FORM error_messages.
  CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
      id        = sy-msgid
      lang      = sy-langu
    IMPORTING
      msg       = gv_mesg
    EXCEPTIONS
      not_found = 1
      OTHERS    = 2.
  LOOP AT it_messages WHERE msgtyp = 'E'.
    WRITE : / 'Message :'(001) ,gv_mesg.
    CLEAR it_messages.
  ENDLOOP.
ENDFORM.                    " ERROR_MESSAGES
*&      Form  BDC_PROCESS
Open bdc session if call transaction fails
FORM bdc_process.
  IF gv_bdc = 'N'.
open bdc session
    PERFORM open_bdc.
    gv_bdc = 'O'.
  ENDIF.
  IF gv_bdc = 'O'.
insert data into bdc session
    PERFORM insert_bdc.
  ENDIF.
ENDFORM.                    " BDC_PROCESS
*&      Form  OPEN_BDC
  Calling function module to open bdc session
FORM open_bdc.
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      client              = sy-mandt
      group               = 'ZMM'
      keep                = 'X'
      user                = sy-uname
    EXCEPTIONS
      client_invalid      = 1
      destination_invalid = 2
      group_invalid       = 3
      group_is_locked     = 4
      holddate_invalid    = 5
      internal_error      = 6
      queue_error         = 7
      running             = 8
      system_lock_error   = 9
      user_invalid        = 10
      OTHERS              = 11.
ENDFORM.                    " OPEN_BDC
*&      Form  INSERT_BDC
  Insert it_bdcdata into bdc by calling function module bdc_insert
FORM insert_bdc.
  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      tcode            = 'MB22'
    TABLES
      dynprotab        = it_bdcdata
    EXCEPTIONS
      internal_error   = 1
      not_open         = 2
      queue_error      = 3
      tcode_invalid    = 4
      printing_invalid = 5
      posting_invalid  = 6
      OTHERS           = 7.
ENDFORM.                    " INSERT_BDC
*&      Form  CLOSE_BDC
Closing bdc session
FORM close_bdc.
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      not_open    = 1
      queue_error = 2
      OTHERS      = 3.
ENDFORM.                    " CLOSE_BDC
*&      Form  send_alert_data
    Send Alert for the Expired Contract
FORM send_alert_data .
  CLEAR: gv_lines,i_receivers, i_header, i_contents,i_doc_data.
  REFRESH : i_receivers,i_header,i_contents.
  DESCRIBE TABLE i_att LINES gv_lines.
  i_receivers-receiver = gv_ernam.
i_receivers-receiver = 'SSHEIK'.
  i_receivers-rec_type = 'B'.
i_receivers-rec_date = sy-datum.
i_receivers-express = 'X'.
i_receivers-com_type = 'INT'.
i_receivers-notif_del = 'X'.
  APPEND i_receivers.
  i_doc_data-obj_name = 'SAPoffice'(013).
  i_doc_data-obj_descr = 'Reservations Reminder'(014).
  i_doc_data-obj_langu = 'E'.
  i_doc_data-no_change = c_x.
  i_doc_data-obj_prio = 1.
  i_doc_data-priority = 1.
  i_doc_data-doc_size = ( gv_lines - 1 ) * 255 + 135.
  i_pack_list-transf_bin = c_x.
  i_pack_list-head_start = '1'.
  i_pack_list-head_num = '1'.
  i_pack_list-body_start = '1'.
  i_pack_list-body_num = gv_lines.
  i_pack_list-doc_type = 'DOC'.
  i_pack_list-obj_name = 'SAPoffice'(013).
  i_pack_list-obj_descr = 'Reservations Reminder'(014).
  i_pack_list-obj_langu = 'E'.
  i_pack_list-doc_size = ( gv_lines - 1 ) * 255 + 135.
  APPEND i_pack_list.
i_header-line = 'Header'. APPEND i_header.
Data for contents
  i_contents-line = 'Please find the Reservations Due List'(016).
  APPEND i_contents.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data                    = i_doc_data
     PUT_IN_OUTBOX                    = 'X'
IMPORTING
  SENT_TO_ALL                      =
  NEW_OBJECT_ID                    =
    TABLES
      packing_list                     = i_pack_list
      object_header                    = i_header
      contents_bin                     = i_att
      contents_txt                     = i_contents
      receivers                        = i_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.
  IF sy-subrc = 0.
    MESSAGE i000 WITH 'Mail Sucessfully sent'(017).
  ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " send_alert_data
*&      Form  send_mail_external
Send mail to External MAIL ID of the PR Creator
FORM send_mail_external.
  DATA : lv_str(24), lv_str1(40),
         lv_pernr LIKE adr6-persnumber,
         lv_adrnr LIKE adr6-addrnumber,
         lv_usrid LIKE pa0105-usrid,
         lv_mail  LIKE adr6-smtp_addr,
         lv_sendor   TYPE syuname,
         lv_receiver TYPE string,
         lv_header   TYPE string,
         lv_body     TYPE string.
  CLEAR: lv_pernr, lv_usrid, lv_adrnr,
         lv_mail, lv_sendor, lv_receiver,
         lv_header, lv_body .
  lv_usrid = gv_ernam.
  SELECT SINGLE persnumber addrnumber FROM usr21
         INTO (lv_pernr,lv_adrnr)
         WHERE bname = lv_usrid.
  IF sy-subrc = 0.
    SELECT SINGLE smtp_addr INTO lv_mail FROM adr6
           WHERE addrnumber = lv_adrnr AND
                 persnumber = lv_pernr.
    IF sy-subrc <> 0.
      CONCATENATE lv_usrid '@anc.com' INTO lv_mail.
      lv_receiver =  lv_mail.
    ELSE.
      lv_receiver =  lv_mail.
    ENDIF.
   lv_receiver =  '[email protected]'.
    lv_sendor = 'JALKHATAM'.
    lv_header = 'Reservations Reminder'(014).
    lv_str  = 'Pls check your SAP Inbox'(019).
    lv_str1 = 'for the status of Reservations Due List'(020).
    CONCATENATE lv_str lv_str1 INTO lv_body
    SEPARATED BY space.
Call Function Module To send mail
    CALL FUNCTION 'UWSP_SEND_MAIL_TO_WEB'
      EXPORTING
        id_header           = lv_header
        id_body             = lv_body
        id_receiver         = lv_receiver
        id_sender           = lv_sendor
  ID_HTML_MAIL         =
       id_commit_work       = 'X'
     EXCEPTIONS
       error                = 1
       OTHERS               = 2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.
ENDFORM.                    " send_mail_external
Reward points for useful Answers
Regards
Anji

Similar Messages

Maybe you are looking for

  • Problem with webcam go plus

    hi.sorry,have problem speak engl....i am italy ............mi dice che mnca la firma digitale ...mi dice un nome di un file wcgopvid.nt,sconosciuto ?che devo fare?

  • Can I override low / empty ink message to enable print on a mac?

    Basically my printer will not allow me to print because my black ink cartridge is "low / empty". I think this is a leftover message from my last cartridge, however it is not recognising this cartrige and not printing! I know for a fact my cartridge i

  • Weird black bars between divs?

    Okay, so I was working on my website earlier and it was going fine, intill I previewed it in Live View, and these strange black lines popped up in between me different div tags.   Here's the code, if anyone knows what's gong on, it would be great if

  • Error syncing Yahoo Addressbook

    I get an "Unknown Error (4)" when attempting whenever I attempt to sync to my Yahoo Address Book thru iTunes. Is there a workaround for this problem? thanks

  • Canon T1i and Speedlite 580EX for off camera usage

    I have a T1i and 580EX (not 580EX II) flash. I would like to use the flash of the camera. Would I need any other devices (trigger, transmitter)? If not, then could you give me the guide as how it is set. Thanks in advance. Solved! Go to Solution.