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