Output XML MAIL ZZRLB INVOICE

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 10

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

* Print of a invoice by SAPscript SMART FORMS *


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

REPORT zzrlb_invoice.

* declaration of data
INCLUDE rlb_invoice_data_declare.
* definition of forms
INCLUDE rlb_invoice_form01.
INCLUDE rlb_print_forms.

DATA: v_addr_fact TYPE char80.


*---------------------------------------------------------------------*
* FORM ENTRY
*---------------------------------------------------------------------*
FORM entry USING return_code us_screen.

DATA: lf_retcode TYPE sy-subrc.


CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen
CHANGING lf_retcode.
IF lf_retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.

ENDFORM. "ENTRY
*---------------------------------------------------------------------*
* FORM PROCESSING *
*---------------------------------------------------------------------*
FORM processing USING proc_screen
CHANGING cf_retcode.

DATA: ls_print_data_to_read TYPE lbbil_print_data_to_read.


DATA: ls_bil_invoice TYPE lbbil_invoice.
DATA: lf_fm_name TYPE rs38l_fnam.
DATA: ls_control_param TYPE ssfctrlop.
DATA: ls_composer_param TYPE ssfcompop.
DATA: ls_recipient TYPE swotobjid.
DATA: ls_sender TYPE swotobjid.
DATA: lf_formname TYPE tdsfname.
DATA: ls_addr_key LIKE addr_key.
DATA: ls_dlv-land LIKE vbrk-land1.
DATA: ls_job_info TYPE ssfcrescl.
* DATA: ljob_output TYPE ssfcrescl.
DATA: ls_path_extern LIKE v_path-pathextern VALUE
'/usr/sap/XXX/app/ARCHFAC'.
DATA: ls_path_extern_out LIKE v_path-pathextern.
*{ REPLACE DE3K900050 1
*\ DATA: ls_xsfdata TYPE ssfxrdi.
DATA: ls_xsfdata TYPE LINE OF tsfixml, " Addition by LCAUMUL LIC001
on 20.04.2009
* BEGIN INSERT CMANOSO - 2009.09.18 - ISSUE ZRDI DE3K900622
ls_conv TYPE REF TO cl_abap_conv_in_ce,
ls_xstring TYPE xstring,
ls_string TYPE string,
lv_len_in TYPE i.
* ENDOF INSERT CMANOSO - 2009.09.18 - ISSUE ZRDI DE3K900622
*} REPLACE
DATA: ls_xsldata TYPE ssfxsl.
DATA: ls_cssdata TYPE ssfcss.
DATA: ls_chardata(250) TYPE c.
DATA: ls_doctab LIKE docs OCCURS 0.
DATA: ls_lines LIKE tline OCCURS 0 WITH HEADER LINE.
DATA: ls_otfdata LIKE itcoo.

DATA: ls_params TYPE zxx_params,


lv_accnt TYPE usr02-accnt.

* SmartForm from customizing table TNAPR


lf_formname = tnapr-sform.

* determine print data


PERFORM set_print_data_to_read USING lf_formname
CHANGING ls_print_data_to_read
cf_retcode.

IF cf_retcode = 0.
* select print data
PERFORM get_data USING ls_print_data_to_read
CHANGING ls_addr_key
ls_dlv-land
ls_bil_invoice
cf_retcode.
ENDIF.

******************** SMA add send mail tetrix


TYPES : BEGIN OF ty_adr6,
addrnumber TYPE ad_addrnum,
smtp_addr TYPE ad_smtpadr,
END OF ty_adr6.
DATA : wa_adr6 TYPE ty_adr6,
it_adr6 TYPE TABLE OF ty_adr6,
ls_usr21 TYPE usr21,
s_email TYPE TABLE OF adr6-smtp_addr WITH HEADER LINE.

CLEAR lv_accnt.
SELECT SINGLE accnt FROM usr02
INTO lv_accnt
WHERE bname = sy-uname.
IF sy-subrc = 0.
ENDIF.

CLEAR ls_params.
SELECT SINGLE * FROM zxx_params
INTO ls_params
WHERE program_id = 'ZZRLB_INVOICE'
AND param_in1 = 'ADDR_FACT'
AND bukrs = ls_bil_invoice-hd_org-comp_code
AND param_in2 = 'ACCNT'
AND param_in3 = lv_accnt.
IF sy-subrc = 0.
v_addr_fact = ls_params-param_out1.
ELSE.
CLEAR ls_params.
SELECT SINGLE * FROM zxx_params
INTO ls_params
WHERE program_id = 'ZZRLB_INVOICE'
AND param_in1 = 'ADDR_FACT'
AND bukrs = ls_bil_invoice-hd_org-comp_code.
IF sy-subrc = 0.
v_addr_fact = ls_params-param_out1.
ENDIF.
ENDIF.

SELECT addrnumber smtp_addr FROM adr6


INTO CORRESPONDING FIELDS OF TABLE it_adr6
WHERE addrnumber = ls_addr_key-addrnumber.
IF sy-subrc = 0.
LOOP AT it_adr6 INTO wa_adr6.
s_email = wa_adr6-smtp_addr.
APPEND s_email.
ENDLOOP.
ENDIF.
******************** SMA add send mail tetrix

IF cf_retcode = 0.
PERFORM set_print_param USING ls_addr_key
ls_dlv-land
CHANGING ls_control_param
ls_composer_param
ls_recipient
ls_sender
cf_retcode.
ENDIF.

IF cf_retcode = 0.

IF nast-kschl EQ 'ZRDI'.
ls_composer_param-xsfcmode = 'X'.
ls_composer_param-xsf = 'X'.
ls_composer_param-xsfoutmode = 'A'.
ls_composer_param-xsfoutdev = nast-ldest.
ls_composer_param-xsfformat = ' '.
ELSEIF nast-kschl EQ 'ZPD1'.
ls_composer_param-tdsuffix2 = ls_bil_invoice-hd_gen-bil_number.
ls_composer_param-tdnewid = 'X'.
ENDIF.

* determine smartform function module for invoice


CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING formname = lf_formname
* variant = ' '
* direct_call = ' '
IMPORTING fm_name = lf_fm_name
EXCEPTIONS no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* error handling
cf_retcode = sy-subrc.
PERFORM protocol_update.
ENDIF.
ENDIF.
IF cf_retcode = 0.
PERFORM check_repeat.
IF ls_composer_param-tdcopies EQ 0.
nast_anzal = 1.
ELSE.
nast_anzal = ls_composer_param-tdcopies.
ENDIF.
ls_composer_param-tdcopies = 1.
DO nast_anzal TIMES.
* In case of repetition only one time archiving
IF sy-index > 1 AND nast-tdarmod = 3.
nast_tdarmod = nast-tdarmod.
nast-tdarmod = 1.
ls_composer_param-tdarmod = 1.
ENDIF.
IF sy-index NE 1 AND repeat IS INITIAL.
repeat = 'X'.
ENDIF.
*DEB - SMA - get data of form printing
IF nast-nacha = 5.
ls_control_param-getotf = 'X'.
ENDIF.
*FIN - SMA - get data of form printing

* call smartform invoice


CALL FUNCTION lf_fm_name
EXPORTING
archive_index = toa_dara
archive_parameters = arc_params
control_parameters = ls_control_param
* mail_appl_obj =
mail_recipient = ls_recipient
mail_sender = ls_sender
output_options = ls_composer_param
user_settings = space
is_bil_invoice = ls_bil_invoice
is_nast = nast
is_repeat = repeat
IMPORTING job_output_info = ls_job_info
* document_output_info =
* job_output_options =
EXCEPTIONS formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* error handling
cf_retcode = sy-subrc.
PERFORM protocol_update.
* get SmartForm protocoll and store it in the NAST protocoll
PERFORM add_smfrm_prot.
ELSE.
IF sy-index EQ 1.
REPLACE 'XXX' WITH sy-sysid INTO ls_path_extern.
CONDENSE ls_path_extern NO-GAPS.
IF nast-kschl EQ 'ZRDI'.
* XSF
*{ REPLACE DE3K900050 2
*\ CHECK NOT ljob_output-xsfdata IS INITIAL.
CHECK NOT ls_job_info-xmloutput-xsfdata IS INITIAL. "ADDITION
LCAUMUL(LIC001) 20.04.09
*} REPLACE
CONCATENATE ls_path_extern
'/'
'ARCHFAC_XML_'
ls_bil_invoice-hd_gen-bil_number
'.xml'
INTO ls_path_extern_out.
*{ REPLACE DE3K900050 3
*\ OPEN DATASET ls_path_extern_out FOR OUTPUT IN TEXT MODE.
*--START OF MODIFICATION LIC001
* OPEN DATASET ls_path_extern_out FOR OUTPUT IN TEXT MODE ENCODING
DEFAULT.
OPEN DATASET ls_path_extern_out FOR OUTPUT IN BINARY MODE. "CHANGE
CMANOSO 2009.09.18 ZRDI ISSUE - DE3K900622
*--END OF MODIFICATION LIC001
*} REPLACE
CHECK sy-subrc IS INITIAL.
*{ REPLACE DE3K900050 4
*\ LOOP AT ljob_output-xsfdata INTO ls_xsfdata.
LOOP AT ls_job_info-xmloutput-xsfdata INTO ls_xsfdata.
"ADDITION LCAUMUL (LIC001) 20.04.09 SD07
*} REPLACE
*{ REPLACE DE3K900050 5
*\ MOVE ls_xsfdata-xrdistr TO ls_chardata.
* MOVE ls_xsfdata TO ls_chardata. " Addition LCAUMUL
(LIC001) 20.04.2009
* BEGIN INSERT CMANOSO - 2009.09.18 - ZRDI ISSUE - DE3K900622
MOVE ls_xsfdata TO ls_xstring.
CALL METHOD cl_abap_conv_in_ce=>create
EXPORTING
input = ls_xstring
encoding = 'UTF-8'
replacement = '?'
ignore_cerr = abap_true
RECEIVING
conv = ls_conv.
TRY.
CALL METHOD ls_conv->read
IMPORTING
data = ls_string.
CATCH cx_sy_conversion_codepage.
CATCH cx_sy_codepage_converter_init.
CATCH cx_parameter_invalid_type.
CATCH cx_parameter_invalid_range.
ENDTRY.
* ENDOF INSERT CMANOSO - 2009.09.18 - ZRDI ISSUE - DE3K900622
*} REPLACE
*{ REPLACE DE3K900622 6
*\ TRANSFER ls_chardata TO ls_path_extern_out.
* BEGIN INSERT CMANOSO - 2009.09.18 - ZRDI ISSUE - DE3K900622
FIND FIRST OCCURRENCE OF '</sf>' IN ls_string MATCH OFFSET lv_len_in.
IF sy-subrc = 0.
ADD 5 TO lv_len_in.
TRANSFER ls_xsfdata TO ls_path_extern_out LENGTH lv_len_in.
ELSE.
TRANSFER ls_xsfdata TO ls_path_extern_out.
ENDIF.
* ENDOF INSERT CMANOSO - 2009.09.18 - ZRDI ISSUE - DE3K900622
*} REPLACE
ENDLOOP.
CLOSE DATASET ls_path_extern_out.

ENDIF.
ENDIF.
ENDIF.
ENDDO.
* get SmartForm spoolid and store it in the NAST protocoll
DATA ls_spoolid LIKE LINE OF ls_job_info-spoolids.
LOOP AT ls_job_info-spoolids INTO ls_spoolid.
IF ls_spoolid NE space.
PERFORM protocol_update_spool USING '342' ls_spoolid
space space space.
ENDIF.
ENDLOOP.
ls_composer_param-tdcopies = nast_anzal.
IF NOT nast_tdarmod IS INITIAL.
nast-tdarmod = nast_tdarmod.
CLEAR nast_tdarmod.
ENDIF.

ENDIF.

* get SmartForm protocoll and store it in the NAST protocoll


* PERFORM ADD_SMFRM_PROT.

IF nast-nacha = 5.

DATA : v_bin_filesize TYPE i,


it_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE,
it_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE,
pdf_bin TYPE xstring,
pdf_content TYPE solix_tab.

it_otf_final[] = ls_job_info-otfdata[].

CALL FUNCTION 'CONVERT_OTF'


EXPORTING
format = 'PDF'
max_linewidth = 132
IMPORTING
bin_filesize = v_bin_filesize
bin_file = pdf_bin
TABLES
otf = it_otf_final[]
lines = it_lines[]
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
IF sy-subrc <> 0.
ENDIF.

pdf_content = cl_document_bcs=>xstring_to_solix( pdf_bin ).

*********************************************************************
* Email *
*********************************************************************

TYPES: ty_document_data TYPE sodocchgi1,


ty_packing_list TYPE sopcklsti1,
ty_attachment TYPE solisti1,
ty_body_msg TYPE solisti1,
ty_receivers TYPE somlreci1.

DATA: it_document_data TYPE STANDARD TABLE OF ty_document_data,


it_packing_list TYPE STANDARD TABLE OF ty_packing_list,
it_attachment TYPE STANDARD TABLE OF ty_attachment,
it_body_msg TYPE STANDARD TABLE OF ty_body_msg,
it_receivers TYPE STANDARD TABLE OF ty_receivers,
gt_attch TYPE STANDARD TABLE OF solisti1.

DATA :wa_document_data TYPE ty_document_data,


wa_packing_list TYPE ty_packing_list,
wa_attachment TYPE ty_attachment,
wa_body_msg TYPE ty_body_msg,
wa_receivers TYPE ty_receivers,
gs_attch TYPE solisti1,
gs_soli TYPE soli.

DATA: g_tab_lines TYPE i,


g_sent_to_all TYPE sonv-flag,
lv_date(10) TYPE c,
lv_time(8) TYPE c,
lv_mat_des TYPE maktx.

DATA: wa_head TYPE thead,


lt_text TYPE STANDARD TABLE OF tline WITH HEADER LINE,
lt_text_sender TYPE STANDARD TABLE OF tline WITH HEADER LINE,
wa_text TYPE tline,
ls_text_sender TYPE tline,
text_string TYPE string,
l_spras TYPE t005-spras,
ls_hd_gen TYPE lbbil_hd_gen,
it_final TYPE TABLE OF tline,
sender_address TYPE soextreci1-receiver.

** DATA: IT_EMAIL TYPE STANDARD TABLE OF ZSD_EMAIL_DLIST,


** WA_EMAIL TYPE ZSD_EMAIL_DLIST.

CONSTANTS: c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,


c_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf,
c_program_id TYPE zxx_params-program_id VALUE
'ZSD_CUSTOMER_INVOICE',
c_param_in1 TYPE zxx_params-param_in1 VALUE 'EMAIL_BODY',
c_param_sen TYPE zxx_params-param_in1 VALUE 'EMAIL_SENDER',
comma TYPE c VALUE ',',
c_1 VALUE '1',
c_0 VALUE '0'.
* SUBJECT OF THE MAIL.
CLEAR: lv_date, lv_time, wa_document_data-obj_descr.

wa_document_data-obj_descr = text-100.
REPLACE '&' INTO wa_document_data-obj_descr WITH ls_bil_invoice-hd_gen-
bil_number.

* Get the language of the invoice destination country


l_spras = nast-spras.
IF l_spras IS INITIAL.
l_spras = sy-langu.
ENDIF.
* only manage text in english or French
IF l_spras NE 'FR' AND l_spras NE 'EN'.
l_spras = 'EN'.
ENDIF.

SELECT SINGLE param_out1


FROM zxx_params INTO wa_head-tdname
WHERE program_id = c_program_id
AND bukrs = ls_bil_invoice-hd_org-comp_code
AND param_in1 = c_param_in1.
IF sy-subrc IS NOT INITIAL OR wa_head-tdname IS INITIAL.
wa_head-tdname = 'ZFI_EMAIL_BODY_NISA'.
ENDIF.
wa_head-tdid = 'ST'.
wa_head-tdobject = 'TEXT'.
wa_head-tdspras = l_spras.

CALL FUNCTION 'READ_TEXT'


EXPORTING
client = sy-mandt
id = wa_head-tdid
language = wa_head-tdspras
name = wa_head-tdname
object = wa_head-tdobject
archive_handle = 0
local_cat = ' '
TABLES
lines = lt_text
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
wa_body_msg = space.
APPEND wa_body_msg TO it_body_msg.
ELSE.
wa_body_msg = space.
CLEAR text_string.
APPEND wa_body_msg TO it_body_msg.
LOOP AT lt_text INTO wa_text.
wa_body_msg = wa_text-tdline.
REPLACE ALL OCCURRENCES OF 'V_ADDR_FACT' IN wa_body_msg WITH v_addr_fact.
APPEND wa_body_msg TO it_body_msg.
ENDLOOP.
ENDIF.

CLEAR wa_body_msg.
wa_document_data-obj_name = 'SMARTFORM'.

"WRITE PACKING LIST FOR BODY


DESCRIBE TABLE it_body_msg LINES g_tab_lines.
wa_packing_list-head_start = 1.
wa_packing_list-head_num = 0.
wa_packing_list-body_start = 1.
wa_packing_list-body_num = g_tab_lines.
wa_packing_list-doc_type = 'RAW'.
APPEND wa_packing_list TO it_packing_list.
CLEAR wa_packing_list.

"Write Packing List for Attachment


wa_packing_list-transf_bin = 'X'.
wa_packing_list-head_start = 1.
wa_packing_list-head_num = 1.
wa_packing_list-body_start = 1.
DESCRIBE TABLE pdf_content LINES g_tab_lines.
wa_packing_list-doc_type = 'PDF'.
wa_packing_list-obj_descr = wa_document_data-obj_descr.
wa_packing_list-obj_name = 'PDF_ATTACHMENT'.
wa_packing_list-body_num = g_tab_lines.
wa_packing_list-doc_size = wa_packing_list-body_num * 255.
APPEND wa_packing_list TO it_packing_list.
CLEAR wa_packing_list.

"Fill the document data and get size of attachment


wa_document_data-obj_langu = sy-langu.
wa_document_data-doc_size = g_tab_lines - 1.
wa_document_data-doc_size = wa_document_data-doc_size * 255.

"Receivers List.
LOOP AT s_email.
wa_receivers-rec_type = 'U'. "Internet address
wa_receivers-receiver = s_email.
wa_receivers-com_type = 'INT'.
wa_receivers-notif_del = 'X'.
wa_receivers-notif_ndel = 'X'.
APPEND wa_receivers TO it_receivers .
CLEAR:wa_receivers.
ENDLOOP.

"Function module to send mail to Recipients


CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = wa_document_data
put_in_outbox = 'X'
IMPORTING
sent_to_all = g_sent_to_all
TABLES
packing_list = it_packing_list
contents_txt = it_body_msg
contents_hex = pdf_content
receivers = it_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 s303(me) WITH 'Mail has been Successfully Sent.'.
ELSE.
MESSAGE s303(me) WITH 'Mail has not been Successfully Sent.'.
ENDIF.
ENDIF.

ENDFORM. "PROCESSING

You might also like