cancel
Showing results for 
Search instead for 
Did you mean: 

Convertion of Smart form to pdf and sending mail to vendor for Invoice

Former Member
0 Kudos

Hi All...

now I am getting the output form of Invoice by the T-code VF02

here Im using Zreport & Zform...

my requirment is to convert smartform output to PDF and send as an e-mail attachment on my Existing report

where I use the FM - CONVERT_OTF_2_PDF ..

here my code

REPORT yinvoice_is.

TABLES: vbrk,vbrp, vbak, vbap, vbkd .

DATA : it_vbap TYPE STANDARD TABLE OF vbap WITH HEADER LINE ,

it_vbrk LIKE STANDARD TABLE OF vbrk with header line,

it_vbkd TYPE STANDARD TABLE OF vbkd WITH HEADER LINE ,

it_vbrp TYPE STANDARD TABLE OF vbrp WITH HEADER LINE ,

it_vbrp1 TYPE STANDARD TABLE OF vbrp WITH HEADER LINE ,

it_vbfa TYPE STANDARD TABLE OF vbfa WITH HEADER LINE ,

it_adrc1 TYPE STANDARD TABLE OF adrc WITH HEADER LINE,

it_adrc2 TYPE STANDARD TABLE OF adrc WITH HEADER LINE.

DATA: sum TYPE vbrp-kzwi5.

DATA: v_vkbur TYPE vkbur,

v_adrnr1 TYPE adrnr,

v_adrnr2 TYPE adrnr,

v_vbelv TYPE vbelv,

v_delch TYPE vbeln,

v_bstkd TYPE bstkd,

v_kdmat TYPE kdmat,

v_kwert TYPE kwert.

DATA : fm_name TYPE rs38l_fnam.

PARAMETER p_inv_no LIKE vbrk-vbeln OBLIGATORY .

    • Selecting Data

SELECT VBELN

ERDAT

VKORG

KUNRG

STCEG

NETWR

MWSBK

KNUMV

KUNAG

REGIO

FROM vbrk

INTO CORRESPONDING FIELDS OF TABLE it_vbrk

WHERE vbeln = p_inv_no .

SELECT matnr

kzwi1

kzwi2

kzwi3

kzwi4

kzwi5

netwr

mwsbp

meins

fklmg

arktx

FROM vbrp

INTO CORRESPONDING FIELDS OF TABLE it_vbrp

WHERE vbeln = p_inv_no .

  • Selecting Sales Order No.

SELECT SINGLE vbelv

FROM vbfa

INTO v_vbelv

WHERE vbeln = p_inv_no

AND vbtyp_v = 'C'.

IF sy-subrc = 0.

  • Selecting Delivery Challan...

SELECT SINGLE vbeln

FROM vbfa

INTO v_delch

WHERE vbelv = v_vbelv

AND vbtyp_n = 'J'.

SELECT SINGLE bstkd

FROM vbkd

INTO v_bstkd

WHERE vbeln = v_vbelv .

SELECT matnr kdmat

FROM vbap

INTO CORRESPONDING FIELDS OF TABLE it_vbap

WHERE vbeln = v_vbelv.

ENDIF.

READ TABLE it_vbrk INDEX 1.

IF sy-subrc = 0.

SELECT SINGLE kwert

FROM konv

INTO v_kwert

WHERE knumv = iT_vbrk-knumv

AND kschl = 'HD00'.

ENDIF.

    • Selecting From Address

SELECT SINGLE vkbur

FROM vbak

INTO v_vkbur

WHERE vbeln = v_vbelv.

IF sy-subrc = 0.

SELECT SINGLE adrnr

FROM tvbur

INTO v_adrnr1

WHERE vkbur = v_vkbur.

IF sy-subrc = 0.

SELECT SINGLE *

FROM adrc

INTO CORRESPONDING FIELDS OF it_adrc1

WHERE addrnumber = v_adrnr1.

APPEND it_adrc1.

ENDIF.

ENDIF.

  • APPEND it_adrc.

    • Selecting TO Address

SELECT SINGLE adrnr

FROM vbpa

INTO v_adrnr2

WHERE vbeln = p_inv_no

AND parvw = 'RE'.

IF sy-subrc = 0.

SELECT SINGLE *

FROM adrc

INTO CORRESPONDING FIELDS OF it_adrc2

WHERE addrnumber = v_adrnr2.

APPEND it_adrc2.

ENDIF.

    • Calling Function Module

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'YINVOICE_IS'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = fm_name

  • EXCEPTIONS

  • NO_FORM = 1

  • NO_FUNCTION_MODULE = 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.

    • Calling Function Module

CALL FUNCTION fm_name

*'/1BCDWB/SF00000496'

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

  • CONTROL_PARAMETERS =

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

  • OUTPUT_OPTIONS =

  • USER_SETTINGS = 'X'

i_vbelv = v_vbelv

i_bstkd = v_bstkd

i_kdmat = v_kdmat

i_kwert = v_kwert

i_delch = v_delch

  • IMPORTING

  • DOCUMENT_OUTPUT_INFO =

  • JOB_OUTPUT_INFO =

  • JOB_OUTPUT_OPTIONS =

TABLES

it_vbrk = it_vbrk

it_vbrp = it_vbrp

it_vbap = it_vbap

it_adrc1 = it_adrc1

it_adrc2 = it_adrc2

  • EXCEPTIONS

  • FORMATTING_ERROR = 1

  • INTERNAL_ERROR = 2

  • SEND_ERROR = 3

  • USER_CANCELED = 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.

ENDFORM. "ENTRY

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

You can take help from this code.

Converting SMART FORMS output to PDF format

REPORT zalok_test.

* Variable declarations
DATA:
w_form_name TYPE tdsfname VALUE 'ZALOK_TEST',
w_fmodule TYPE rs38l_fnam,
w_cparam TYPE ssfctrlop,
w_outoptions TYPE ssfcompop,
W_bin_filesize TYPE i, " Binary File Size
w_FILE_NAME type string,
w_File_path type string,
w_FULL_PATH type string.

* Internal tables declaration

* Internal table to hold the OTF data 
DATA:
t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

* Internal table to hold OTF data recd from the SMARTFORM
t_otf_from_fm TYPE ssfcrescl,

* Internal table to hold the data from the FM CONVERT_OTF
T_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.


* This function module call is used to retrieve the name of the Function
* module generated when the SMARTFORM is activated

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = w_form_name
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = w_fmodule
EXCEPTIONS
no_form = 1
no_function_module = 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.

* Calling the SMARTFORM using the function module retrieved above
* GET_OTF parameter in the CONTROL_PARAMETERS is set to get the OTF
* format of the output


w_cparam-no_dialog = 'X'.
w_cparam-preview = space. " Suppressing the dialog box
                                                    " for print preview
w_cparam-getotf = 'X'.

* Printer name to be used is provided in the export parameter
* OUTPUT_OPTIONS
w_outoptions-tddest = 'LP01'.

CALL FUNCTION w_fmodule
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
control_parameters = w_cparam
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
output_options = w_outoptions
* USER_SETTINGS = 'X'
IMPORTING
* DOCUMENT_OUTPUT_INFO =
job_output_info = t_otf_from_fm
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 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.

t_otf[] = t_otf_from_fm-otfdata[].

* Function Module CONVERT_OTF is used to convert the OTF format to PDF

CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
* PDF_DELETE_OTFTAB = ' '
IMPORTING
BIN_FILESIZE = W_bin_filesize
* BIN_FILE =
TABLES
otf = T_OTF
lines = T_pdf_tab
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.

* To display File SAVE dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
* EXPORTING
* WINDOW_TITLE =
* DEFAULT_EXTENSION =
* DEFAULT_FILE_NAME =
* FILE_FILTER =
* INITIAL_DIRECTORY =
* WITH_ENCODING =
* PROMPT_ON_OVERWRITE = 'X'
CHANGING
filename = w_FILE_NAME
path = w_FILE_PATH
fullpath = w_FULL_PATH
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 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.
ENDIF.


* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_bin_filesize
filename = w_FULL_PATH
FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* IMPORTING
* FILELENGTH =
tables
data_tab = T_pdf_tab
* FIELDNAMES =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* 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.

and for sending mail to vendor for Invoice check this link

saptechnical.com/SampleSpecs/AutoVendorDebitPosting/AVDP.htm

Hope this will help you.

Regards:

Alok

Former Member
0 Kudos

c_par-no_dialog = 'X'.

c_par-preview = space.

  • c_par-getotf = 'X'.---->PASS it to get form output in OTF *

out_opt-tddest = 'EPSON-COMMON'.

CALL FUNCTION fm_name

EXPORTING

control_parameters = c_par

output_options = out_opt

user_settings = space

vbeln = it_vbeln-vbeln

pdf = r2

rbiclear = c3

IMPORTING

job_output_info = opt

einv = einv.

i_otf = opt-otfdata.----


>here u will get the otf o/p of form

using below f.m u can convert it to pdf format

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

IMPORTING

bin_filesize = v_len_in

TABLES

otf = i_otf

lines = i_tline.

  • For mailing

IF ch2 EQ 'X'.

DATA sub TYPE string.

below f.m to convert it to 255 char

CALL FUNCTION 'QCE1_CONVERT'

TABLES

t_source_tab = i_tline

t_target_tab = so_ali[]

EXCEPTIONS

convert_not_possible = 1

OTHERS = 2.

objtxt = '<This is system generated message>.'.

APPEND objtxt.

objtxt = space.

APPEND objtxt.

  • Mail Body of message over.

DESCRIBE TABLE objtxt[] LINES v_lines_txt.

CONCATENATE 'Inv.' invno INTO sub SEPARATED BY space.

doc_chng-obj_name = sub.

doc_chng-expiry_dat = sy-datum + 10.

  • Mail Subject

refresh objpack[].

CONCATENATE 'Pricol Dispatch - Invoice' invno '- Reg.' INTO sub SEPARATED BY space.

doc_chng-obj_descr = sub.

doc_chng-sensitivty = 'F'.

doc_chng-doc_size = v_lines_txt * 255.

objpack-transf_bin = ' '.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = v_lines_txt.

objpack-doc_type = 'RAW'.

APPEND objpack.

*PDF Attachment

DESCRIBE TABLE so_ali[] LINES lineno.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = 1.

objpack-doc_size = lineno * 255 .

objpack-body_num = lineno.

objpack-doc_type = 'PDF'.

objpack-obj_name = 'INVOICE'.

objpack-obj_descr = 'Invoice'.

objpack-obj_langu = 'E'.

APPEND objpack.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = doc_chng

put_in_outbox = 'X'

commit_work = 'X'

TABLES

packing_list = objpack

contents_txt = objtxt[]

contents_bin = so_ali[]

*contents_hex = so_ali[]

receivers = reclist[]

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 'Mail sent successfully' TYPE 'S'.

SUBMIT RSCONN01 WITH MODE = MODE.

ENDIF.

Former Member
0 Kudos

hi,

use this code..

DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

i_tline TYPE TABLE OF tline WITH HEADER LINE,

i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

  • Objects to send mail.

i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

  • Variables declarations

v_len_in LIKE sood-objlen, "#EC NEEDED

v_lines_txt TYPE i,

v_lines_bin TYPE i,

  • Work Area declarations

w_ctrlop TYPE ssfctrlop,

w_return TYPE ssfcrescl,

w_compop TYPE ssfcompop,

wa_objhead TYPE soli_tab,

wa_doc_chng TYPE sodocchgi1,

wa_buffer TYPE string. "To convert from 132 to 255

Put a IF ELSE condition whether u want form output or E-mail output..

if it is a E-mail.. then call a small Sub-routine within your program..

FORM f_email .

w_ctrlop-getotf = 'X'.

w_ctrlop-no_dialog = 'X'.

w_compop-tdnoprev = 'X'.

CALL FUNCTION fnam

EXPORTING

control_parameters = w_ctrlop

output_options = w_compop

nast = nast

v_tcode = v_tcode

IMPORTING

job_output_info = w_return

TABLES

it_vbdkr = it_tvbdkr[]

it_vbdpr = tvbdpr[]

it_zglentitycode = it_zglentitycode[]

it_vttk = it_vttk[]

it_kna1 = it_kna1[]

it_t005 = it_t005[]

it_adrc = it_adrc[]

it_ekpo = it_ekpo[]

it_ekko = it_ekko[]

it_vbrp = it_vbrp[]

it_mara = it_mara[]

it_vbrk = it_vbrk[]

it_likp = it_likp[]

it_vttp = it_vttp[]

it_t001 = it_t001[]

it_zlogdely = it_zlogdely[]

it_prod = it_prod[]

it_lineitems = it_lineitems[]

it_tvzbt = it_tvzbt[]

it_t173t = it_t173t[]

it_t005t = it_t005t[]

it_zplant = it_zplant[]

it_stxbitmaps = it_stxbitmaps[]

it_prod_desc = it_prod_desc[].

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

i_otf[] = w_return-otfdata[].

*Converting the OFT format data to PDf format

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

IMPORTING

bin_filesize = v_len_in

TABLES

otf = i_otf

lines = i_tline.

LOOP AT i_tline.

TRANSLATE i_tline USING '~'.

CONCATENATE wa_buffer i_tline INTO wa_buffer.

ENDLOOP.

TRANSLATE wa_buffer USING '~'.

DO.

i_record = wa_buffer.

APPEND i_record.

SHIFT wa_buffer LEFT BY 255 PLACES.

IF wa_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

  • Attachment

REFRESH:

i_reclist,

i_objtxt,

i_objbin,

i_objpack.

CLEAR wa_objhead.

i_objbin[] = i_record[].

              • Create Message Body

        • Title and Description

i_objtxt = 'COMMERCIAL INVOICE'.

APPEND i_objtxt.

DESCRIBE TABLE i_objtxt LINES v_lines_txt.

READ TABLE i_objtxt INDEX v_lines_txt.

wa_doc_chng-obj_name = 'COMMERCIAL INVOICE'.

wa_doc_chng-expiry_dat = sy-datum + 10.

wa_doc_chng-obj_descr = 'COMMERCIAL INVOICE'.

wa_doc_chng-sensitivty = 'F'.

wa_doc_chng-doc_size = v_lines_txt * 255.

CLEAR i_objpack-transf_bin.

i_objpack-head_start = 1.

i_objpack-head_num = 0.

i_objpack-body_start = 1.

i_objpack-body_num = v_lines_txt.

i_objpack-doc_type = 'RAW'.

APPEND i_objpack.

        • Attachment

  • (pdf-Attachment)

i_objpack-transf_bin = 'X'.

i_objpack-head_start = 1.

i_objpack-head_num = 0.

i_objpack-body_start = 1.

DESCRIBE TABLE i_objbin LINES v_lines_bin.

READ TABLE i_objbin INDEX v_lines_bin.

i_objpack-doc_size = v_lines_bin * 255 .

i_objpack-body_num = v_lines_bin.

i_objpack-doc_type = 'PDF'.

i_objpack-obj_name = 'COMMERCIAL INVOICE'.

i_objpack-obj_descr = 'COMMERCIAL INVOICE'.

APPEND i_objpack.

IF it_adr6[] IS NOT INITIAL.

LOOP AT it_adr6 INTO wa_adr6.

CLEAR i_reclist.

i_reclist-receiver = wa_adr6-smtp_addr.

i_reclist-rec_type = 'U'.

i_reclist-com_type = 'INT'.

APPEND i_reclist.

ENDLOOP.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = wa_doc_chng

put_in_outbox = 'X'

TABLES

packing_list = i_objpack

object_header = wa_objhead

contents_bin = i_objbin

contents_txt = i_objtxt

receivers = i_reclist.

ENDIF.

ENDFORM. " f_email

regards

vijay