Skip to Content
0
Former Member
Nov 09, 2005 at 12:43 AM

Email Attachment

47 Views

Hi,

I have to change the prog to send email as attachment. I did some changes. Looks it needs some more changes. Can some one help me on this. I am not using ALV.

Thanks

Veni.

 

REPORT ZSDRSHIP LINE-SIZE 248 LINE-COUNT 65 MESSAGE-ID ZV

NO STANDARD PAGE HEADING.

  • Data Declaration

*Tables

TABLES: VBRK, "Billing: Header Data

ITCPO, "Sapscript Output Interface

T001, "Company Codes

SADR, "Address Management: Company Data

VBPA, "Sales Document: Partner

KNA1, "General Data in Customer Master

LFA1, "Vendor master (general section)

VBRP, "Billing: Item Data

DNAST, "Output status, display fields

T005T, "Country Names

EIKP, "Export/Import header data

T618T, "Modes of Transport: Descriptions

ZMAT, "Classification of Material Numbers

T001W, "Plants/Branches

T005U, "Taxes: Region Key: Texts

NAST. "Message status

  • selection screen for the program RSNAST00 run.

RANGES: R_KAPPL FOR DNAST-KAPPL,

R_OBJKY FOR NAST-OBJKY,

R_KSCHL FOR NAST-KSCHL,

R_NACHA FOR NAST-NACHA,

R_LDEST FOR NAST-LDEST.

  • Internal tables.

DATA: BEGIN OF ITAB_VBRK OCCURS 100,

VBELN LIKE VBRK-VBELN,

NETWR LIKE VBRK-NETWR,

BUKRS LIKE VBRK-BUKRS,

EXNUM LIKE VBRK-EXNUM,

END OF ITAB_VBRK.

DATA: BEGIN OF ITAB_VBRP OCCURS 50,

MATNR LIKE VBRP-MATNR,

FKIMG LIKE VBRP-FKIMG,

NETWR LIKE VBRP-NETWR,

WERKS LIKE VBRP-WERKS,

END OF ITAB_VBRP.

DATA: BEGIN OF ITAB_ZMAT OCCURS 10,

ZMATNR LIKE ZMAT-ZMATNR,

FKIMG LIKE VBRP-FKIMG,

NETWR LIKE VBRP-NETWR,

END OF ITAB_ZMAT.

DATA: BEGIN OF FTAB OCCURS 100,

IND TYPE C,

VBELN(10) TYPE N,

NETWR LIKE VBRK-NETWR,

BUKRS LIKE VBRK-BUKRS,

EXNUM LIKE VBRK-EXNUM,

END OF FTAB.

DATA: IND TYPE C,

CNT1 TYPE I,

IPAGE TYPE I,

I_WERKS LIKE VBRP-WERKS VALUE ' '.

  • Program Selections

SELECT-OPTIONS: SDATE FOR VBRK-FKDAT.

  • Initialization

INITIALIZATION.

  • Initialization for the program RSNAST00 run.

R_KAPPL-SIGN = 'I'.

R_KAPPL-OPTION = 'EQ'.

R_KAPPL-LOW = 'V3'.

R_KAPPL-HIGH = ' '.

APPEND R_KAPPL.

CLEAR R_KAPPL.

R_KSCHL-SIGN = 'I'.

R_KSCHL-OPTION = 'EQ'.

R_KSCHL-LOW = 'ZCOM'.

R_KSCHL-HIGH = ' '.

APPEND R_KSCHL.

CLEAR R_KSCHL.

R_NACHA-SIGN = 'I'.

R_NACHA-OPTION = 'EQ'.

R_NACHA-LOW = '1'.

R_NACHA-HIGH = ' '.

APPEND R_NACHA.

CLEAR R_NACHA.

  • Start-of-selection

START-OF-SELECTION.

SELECT VBELN NETWR BUKRS EXNUM FROM VBRK INTO TABLE ITAB_VBRK

WHERE FKART EQ 'F8'

AND FKDAT IN SDATE.

COMMIT WORK.

PERFORM OUTPUT.

AT USER-COMMAND.

CASE SY-UCOMM.

WHEN 'PRIN'.

PERFORM READ_DATA.

PERFORM PRINT_DATA.

WHEN 'SELE'.

PERFORM SELECT_DATA.

WHEN 'DETA'.

PERFORM READ_DATA.

PERFORM DISPLAY_DATA.

  • WHEN 'EMAIL'.

  • PERFORM READ_DATA.

  • PERFORM EMAIL_DATA.

ENDCASE.

  • TOP-OF-PAGE

TOP-OF-PAGE.

PERFORM HEADINGS.

TOP-OF-PAGE DURING LINE-SELECTION.

CASE SY-UCOMM.

WHEN 'SELE'.

PERFORM HEADINGS.

WHEN 'DETA'.

PERFORM HEADINGS1.

ENDCASE.

perform get_file_name.

perform sub_call_file.

PERFORM EMAIL_DATA.

&----


*& Form OUTPUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM OUTPUT.

SET PF-STATUS 'NORM'.

LOOP AT ITAB_VBRK.

WRITE: /01 SY-VLINE,

02 IND AS CHECKBOX,

03 SY-VLINE,

04 ITAB_VBRK-VBELN,

15 SY-VLINE,

16 ITAB_VBRK-NETWR,

51 SY-VLINE.

ENDLOOP.

ULINE /(51).

ENDFORM. " OUTPUT

&----


*& Form READ_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM READ_DATA.

CNT1 = 6.

IPAGE = 1.

REFRESH FTAB.

LOOP AT ITAB_VBRK.

READ LINE CNT1 OF PAGE IPAGE FIELD VALUE IND INTO FTAB-IND.

READ LINE CNT1 OF PAGE IPAGE FIELD VALUE

ITAB_VBRK-VBELN INTO FTAB-VBELN.

FTAB-BUKRS = ITAB_VBRK-BUKRS.

FTAB-NETWR = ITAB_VBRK-NETWR.

FTAB-EXNUM = ITAB_VBRK-EXNUM.

APPEND FTAB.

CLEAR FTAB.

CNT1 = CNT1 + 1.

IF CNT1 > 65.

IPAGE = IPAGE + 1.

CNT1 = 6.

ENDIF.

ENDLOOP.

ENDFORM. " READ_DATA

&----


*& Form PRINT_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM PRINT_DATA.

LOOP AT FTAB.

IF FTAB-IND = 'X'.

REFRESH R_OBJKY.

R_OBJKY-SIGN = 'I'.

R_OBJKY-OPTION = 'EQ'.

R_OBJKY-LOW = FTAB-VBELN.

R_OBJKY-HIGH = ' '.

APPEND R_OBJKY.

CLEAR R_OBJKY.

SUBMIT RSNAST00 VIA SELECTION-SCREEN WITH S_KAPPL IN R_KAPPL

WITH S_OBJKY IN R_OBJKY

WITH S_KSCHL IN R_KSCHL

WITH S_NACHA IN R_NACHA

WITH P_AGAIN EQ ' '

WITH P_PRINT EQ '4_A1'

AND RETURN.

IF FTAB-NETWR GE 2500.

PERFORM GET_DATA.

PERFORM PRINT_FORM.

ENDIF.

ENDIF.

ENDLOOP.

ENDFORM. " PRINT_DATA

&----


*& Form PRINT_FORM

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM PRINT_FORM.

ITCPO-TDIMMED = 'X'.

ITCPO-TDDELETE = 'X'.

ITCPO-TDPROGRAM = SY-REPID.

ITCPO-TDDEST = '5_A1'.

CALL FUNCTION 'OPEN_FORM'

EXPORTING

FORM = 'Z_SHIPPERS'

LANGUAGE = SY-LANGU

OPTIONS = ITCPO

EXCEPTIONS

CANCELED = 1

DEVICE = 2

FORM = 3

OPTIONS = 4

UNCLOSED = 5

OTHERS = 6.

LOOP AT ITAB_ZMAT.

CALL FUNCTION 'WRITE_FORM'

EXPORTING

ELEMENT = 'ITEM_DATA'

FUNCTION = 'SET'

TYPE = 'BODY'

WINDOW = 'MAIN'

  • IMPORTING

  • PENDING_LINES =

EXCEPTIONS

ELEMENT = 1

FUNCTION = 2

TYPE = 3

UNOPENED = 4

UNSTARTED = 5

WINDOW = 6

OTHERS = 7.

ENDLOOP.

CALL FUNCTION 'CLOSE_FORM'

EXCEPTIONS

UNOPENED = 1

OTHERS = 2.

IF SY-SUBRC EQ 0.

MESSAGE I355 WITH FTAB-VBELN.

ENDIF.

ENDFORM. " PRINT_FORM

&----


*& Form SELECT_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM SELECT_DATA.

SY-LSIND = 0.

IF IND = 'X'.

IND = ' '.

ELSEIF IND = ' '.

IND = 'X'.

ENDIF.

PERFORM OUTPUT.

ENDFORM. " SELECT_DATA

&----


*& Form GET_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_DATA.

CLEAR: T001, SADR, VBPA, LFA1, KNA1, T005T, EIKP, T618T, I_WERKS.

REFRESH: ITAB_VBRP, ITAB_ZMAT.

SELECT SINGLE ADRNR BUTXT FROM T001 INTO (T001-ADRNR, T001-BUTXT)

WHERE BUKRS EQ FTAB-BUKRS.

SELECT SINGLE * FROM SADR WHERE ADRNR EQ T001-ADRNR

AND NATIO EQ SPACE.

SELECT SINGLE LIFNR FROM VBPA INTO VBPA-LIFNR

WHERE VBELN EQ FTAB-VBELN

AND POSNR = '000000'

AND PARVW = 'SP'.

SELECT SINGLE * FROM LFA1 WHERE LIFNR = VBPA-LIFNR.

SELECT SINGLE KUNNR FROM VBPA INTO VBPA-KUNNR

WHERE VBELN EQ FTAB-VBELN

AND POSNR = '000000'

AND PARVW = 'WE'.

SELECT SINGLE * FROM KNA1 WHERE KUNNR = VBPA-KUNNR.

SELECT SINGLE * FROM T005T WHERE SPRAS = 'E'

AND LAND1 = KNA1-LAND1.

SELECT SINGLE * FROM EIKP WHERE EXNUM = FTAB-EXNUM.

SELECT SINGLE * FROM T618T WHERE SPRAS = 'E'

AND LAND1 = EIKP-ALAND

AND EXPVZ = EIKP-EXPVZ.

SELECT MATNR FKIMG NETWR WERKS FROM VBRP INTO TABLE ITAB_VBRP

WHERE VBELN = FTAB-VBELN.

LOOP AT ITAB_VBRP.

IF I_WERKS EQ ' '.

I_WERKS = ITAB_VBRP-WERKS.

SELECT SINGLE * FROM T001W WHERE WERKS = I_WERKS.

SELECT SINGLE * FROM T005U WHERE SPRAS = 'E'

AND LAND1 = T001W-LAND1

AND BLAND = T001W-REGIO.

ENDIF.

SELECT SINGLE ZMATNR FROM ZMAT INTO ZMAT-ZMATNR

WHERE MATNR = ITAB_VBRP-MATNR.

IF SY-SUBRC EQ 0.

MOVE ZMAT-ZMATNR TO ITAB_ZMAT-ZMATNR.

MOVE ITAB_VBRP-FKIMG TO ITAB_ZMAT-FKIMG.

MOVE ITAB_VBRP-NETWR TO ITAB_ZMAT-NETWR.

COLLECT ITAB_ZMAT.

CLEAR ITAB_ZMAT.

ELSE.

MESSAGE I356 WITH ITAB_VBRP-MATNR.

ENDIF.

ENDLOOP.

ENDFORM. " GET_DATA

&----


*& Form HEADINGS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM HEADINGS.

FORMAT COLOR COL_HEADING.

WRITE: 'SEGA OF AMERICA, INC.',

/ 'List of Commercial Invoices'.

ULINE /(51).

FORMAT COLOR 2.

WRITE: /01 SY-VLINE,

03 SY-VLINE,

04 TEXT-001,

15 SY-VLINE,

16 TEXT-002,

51 SY-VLINE,

52 ' ' COLOR OFF.

ULINE /(51).

ENDFORM. " HEADINGS

&----


*& Form DISPLAY_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DISPLAY_DATA.

SET PF-STATUS 'NORM1'.

LOOP AT FTAB.

IF FTAB-IND = 'X'.

REFRESH ITAB_VBRP.

SELECT MATNR FKIMG NETWR WERKS FROM VBRP INTO TABLE ITAB_VBRP

WHERE VBELN = FTAB-VBELN.

WRITE:/ 'Details of Commercial Invoice:' COLOR 4, FTAB-VBELN COLOR 4.

ULINE /(56).

LOOP AT ITAB_VBRP.

WRITE: /01 SY-VLINE,

02 ITAB_VBRP-MATNR,

20 SY-VLINE,

21 ITAB_VBRP-NETWR,

56 SY-VLINE,

57 ' ' COLOR OFF.

ENDLOOP.

ULINE /(56).

ENDIF.

ENDLOOP.

ENDFORM. " DISPLAY_DATA

&----


*& Form HEADINGS1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM HEADINGS1.

FORMAT COLOR COL_HEADING.

WRITE: 'SEGA OF AMERICA, INC.',

/ 'Commercial Invoice Details.'.

ULINE /(56).

FORMAT COLOR 2.

WRITE: /01 SY-VLINE,

02 TEXT-003,

20 SY-VLINE,

21 TEXT-004,

56 SY-VLINE,

57 ' ' COLOR OFF.

ULINE /(56).

ENDFORM. " HEADINGS1

&----


*& Form get_file_name

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


DATA:p_fp like rlgrap-filename.

FORM get_file_name .

CALL FUNCTION 'F4_FILENAME'

IMPORTING

file_name = p_fp.

ENDFORM.

&----


*& Form sub_call_file

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form sub_call_file.

data: filename type string.

filename = p_fp.

call function 'GUI_DOWNLOAD'

exporting

  • BIN_FILESIZE =

filename = filename

filetype = 'DAT'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • IMPORTING

  • FILELENGTH =

  • tables

  • data_tab = ialv2

  • FIELDNAMES =

  • EXCEPTIONS

  • FILE_WRITE_ERROR = 1

  • NO_BATCH = 2

  • GUI_REFUSE_FILETRANSFER = 3

  • INVALID_TYPE = 4

  • NO_AUTHORITY = 5

  • UNKNOWN_ERROR = 6

  • OTHERS = 22

.

if sy-subrc <> 0.

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

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

endif.

  • delete ialv2 index 1.

endform. " sub_call_file

&----


*& Form EMAIL_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM EMAIL_DATA.

  • Populate details for .xls file

PERFORM build_xls_data_table.

  • Populate message body

PERFORM populate_email_message_body.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

TABLES i_message

i_attach

USING p_email

'Commercial Invoice'

'XLS'

'COMMERCIAL_INVOICE'

' '

' '

' '

CHANGING g_error

g_reciever.

  • Instructs mail send program for SAPCONNECT to send email(rsconn01)

PERFORM initiate_mail_execute_program.

ENDFORM. " EMAIL_DATA

&----


*& Form build_xls_data_table

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_xls_data_table .

CONSTANTS:

con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,

con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.

CONCATENATE 'MATERIAL' 'NET PRICE'

INTO i_attach

SEPARATED BY con_tab.

CONCATENATE con_cret i_attach INTO i_attach.

APPEND i_attach.

LOOP AT ITAB_VBRP.

WRITE: /01 SY-VLINE,

02 ITAB_VBRP-MATNR,

20 SY-VLINE,

21 ITAB_VBRP-NETWR,

56 SY-VLINE,

57 ' ' COLOR OFF.

ENDLOOP.

LOOP AT ITAB_VBRP.

CONCATENATE VBRP-MATNR

VBRP-NETWR

INTO i_attach SEPARATED BY con_tab.

CONCATENATE con_cret i_attach INTO i_attach.

APPEND i_attach.

ENDLOOP.

ENDFORM. " build_xls_data_table

&----


*& Form populate_email_message_body

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM populate_email_message_body .

DATA: l_buffer(250).

REFRESH i_message.

l_buffer = 'COMMERCIAL INVOICE DATA DOWNLOAD. '.

CONCATENATE l_buffer 'You will find an attachment in this message.'

INTO l_buffer.

i_message = l_buffer.

APPEND i_message.

ENDFORM. " populate_email_message_body

&----


*& Form SEND_FILE_AS_EMAIL_ATTACHMENT

&----


  • Send email

----


FORM send_file_as_email_attachment TABLES p_i_message

p_i_attach

USING p_email1

p_mtitle

p_format

p_filename

p_attdescription

p_sender_address

p_sender_addres_type

CHANGING p_error

p_receiver.

DATA: l_error TYPE sy-subrc,

l_receiver TYPE sy-subrc,

l_email LIKE somlreci1-receiver,

l_mtitle LIKE sodocchgi1-obj_descr,

l_format TYPE so_obj_tp,

l_attfilename TYPE so_obj_des ,

l_attdescription TYPE so_obj_nam ,

l_sender_address LIKE soextreci1-receiver,

l_sender_address_type LIKE soextreci1-adr_typ.

l_email = p_email1.

l_mtitle = p_mtitle.

l_format = p_format.

l_attfilename = p_filename.

l_attdescription = p_attdescription.

l_sender_address = p_sender_address.

l_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 = l_mtitle .

w_doc_data-sensitivty = 'F'.

  • Fill the document data and get size of attachment

CLEAR w_doc_data.

READ TABLE i_attach INDEX w_cnt.

w_doc_data-doc_size =

( w_cnt - 1 ) * 255 + STRLEN( i_attach ).

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = l_mtitle.

w_doc_data-sensitivty = 'F'.

CLEAR i_attachment.

REFRESH i_attachment.

i_attachment[] = p_i_attach[].

  • Describe the body of the message

CLEAR i_packing_list.

REFRESH i_packing_list.

i_packing_list-transf_bin = space.

i_packing_list-head_start = 1.

i_packing_list-head_num = 0.

i_packing_list-body_start = 1.

DESCRIBE TABLE i_message LINES i_packing_list-body_num.

i_packing_list-doc_type = 'RAW'.

APPEND i_packing_list.

  • Create attachment notification

i_packing_list-transf_bin = 'X'.

i_packing_list-head_start = 1.

i_packing_list-head_num = 1.

i_packing_list-body_start = 1.

DESCRIBE TABLE i_attachment LINES i_packing_list-body_num.

i_packing_list-doc_type = l_format.

i_packing_list-obj_descr = l_attdescription.

i_packing_list-obj_name = l_attfilename.

i_packing_list-doc_size = i_packing_list-body_num * 255.

APPEND i_packing_list.

  • Add the recipients email address

CLEAR i_receivers.

REFRESH i_receivers.

i_receivers-receiver = l_email.

i_receivers-rec_type = 'U'.

i_receivers-com_type = 'INT'.

i_receivers-notif_del = 'X'.

i_receivers-notif_ndel = 'X'.

APPEND i_receivers.

  • i_receivers-receiver = l_email.

  • i_receivers-rec_type = 'B'.

  • i_receivers-com_type = ''.

  • i_receivers-notif_del = 'X'.

  • i_receivers-notif_ndel = 'X'.

  • APPEND i_receivers.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = w_doc_data

put_in_outbox = 'X'

sender_address = l_sender_address

sender_address_type = l_sender_address_type

commit_work = 'X'

IMPORTING

sent_to_all = w_sent_all

TABLES

packing_list = i_packing_list

contents_bin = i_attachment

contents_txt = i_message

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.

  • Populate zerror return code

l_error = sy-subrc.

  • Populate zreceiver return code

LOOP AT i_receivers.

l_receiver = i_receivers-retrn_code.

ENDLOOP.

ENDFORM. "send_file_as_email_attachment

&----


*& Form INITIATE_MAIL_EXECUTE_PROGRAM

&----


  • Instructs mail send program for SAPCONNECT to send email.

----


FORM initiate_mail_execute_program.

WAIT UP TO 2 SECONDS.

SUBMIT rsconn01 WITH mode = 'INT'

WITH output = ''

AND RETURN.

ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM