cancel
Showing results for 
Search instead for 
Did you mean: 

getting Payslip as PDF file if dowloaded into Desktop, but error in mail

Former Member
0 Kudos

Dear all,

I am getting my pay slip in PDF file, if I download it to my Desktop, but when I am sending it as mail , PDF is sent , but at recievers end, that PDF content is not getting displayed, it is giving eror that data is not decoded properly,

I have changed the lenght for the file to 255 characters then also I am getting the same error.

Can Anyone please help me .

Thanks in Advance,

Regards,

Satya.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

REPORT zpdf.

DATA: form_name TYPE rs38l_fnam.

DATA: wa_ctrlop TYPE ssfctrlop,

wa_outopt TYPE ssfcompop.

DATA: t_otfdata TYPE ssfcrescl,

t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA: t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.

DATA: w_filesize TYPE i.

DATA: w_bin_filesize TYPE i.

DATA: fname1 TYPE string.

data : binfilesize type I,

file_name type string,

FILE_PATH TYPE STRING,

FULL_PATH TYPE STRING.

*SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME.

*PARAMETERS :p_name TYPE rs38l_fnam DEFAULT 'zpdf_g', "form name

  • p_fpath LIKE rlgrap-filename. "file path

*SELECTION-SCREEN: END OF BLOCK b1.

*

*PARAMETER: p_date LIKE sy-datum.

*PARAMETER: p_rea TYPE char255.

*

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.

  • CALL FUNCTION 'F4_FILENAME'

  • EXPORTING

  • program_name = syst-cprog

  • dynpro_number = syst-dynnr

    • FIELD_NAME = ' '

  • IMPORTING

  • file_name = p_fpath.

START-OF-SELECTION.

  • MOVE p_fpath TO fname1.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZPDF_G' "p_name

IMPORTING

fm_name = form_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.

wa_ctrlop-getotf = 'X'.

wa_ctrlop-no_dialog = 'X'.

wa_outopt-tdnoprev = 'X'.

CALL FUNCTION form_name

EXPORTING

control_parameters = wa_ctrlop

output_options = wa_outopt

user_settings = 'X'

mydate = '20070608'

reason = 'asdf'

IMPORTING

job_output_info = t_otfdata

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.

  • CALL FUNCTION 'ZFM_OTC_PDF'

  • EXPORTING

  • v_fpath = fname1

  • w_otfdata = t_otfdata.

END-OF-SELECTION.

t_otf[] = t_otfdata-otfdata[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

  • ARCHIVE_INDEX = ' '

IMPORTING

bin_filesize = w_bin_filesize

TABLES

otf = t_otf

lines = t_pdf_tab

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 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.

----


TAKING THE DOWNLOAD FILE PATH AS USER INPUT*

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 = FILE_NAME

path = FILE_PATH

fullpath = 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.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

BIN_FILESIZE = w_bin_filesize

FILENAME = FULL_PATH "fname1

FILETYPE = 'BIN'

IMPORTING

FILELENGTH = w_filesize

TABLES

DATA_TAB = t_pdf_tab

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 i000(zpdf).

ELSE.

MESSAGE i001(zpdf).

ENDIF.

Rewards if useful..............

Minal

Former Member
0 Kudos

Hello Minal,

Even I am done with that part able to get the PDF file in Desktop .

when sending it through mail its throwing an error,

Just try to help me in that area also.

Thansk in Advance,

Regards,

Satya.

Answers (1)

Answers (1)

former_member150733
Contributor
0 Kudos

Are you using smart form or sapscript.

The below links may be of help:

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/emailfromSAP&

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/smartformtoMailasPDF+attachment&

Former Member
0 Kudos

Hi Anish How r u ? this is Satya

I am not using Script or Smart form, I am printing PAyslip like I have downloaded Payslip into an Internal table and got ABAP Spool for that, then I converted it as PDF File it is getting downloaded, After that I am using SO_NEW_DOCUMENT_ATT_SEND_API1 FM to send that Internal table as mail through PDF conversion.

There Also I am able to get the mail with PDF Attachment , but when opening that PDF I am facing this problem.

Thanks & Regards,

Satya.

former_member150733
Contributor
0 Kudos

The problem might be in the Packing list <b>MAILPACK</b> and <b>MAILBIN</b> internal table

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = MAILDATA

PUT_IN_OUTBOX = ' '

TABLES

PACKING_LIST = <b>MAILPACK</b>

OBJECT_HEADER = MAILHEAD

CONTENTS_BIN = <b>MAILBIN</b>

CONTENTS_TXT = MAILTXT

RECEIVERS = MAILREC

EXCEPTIONS

TOO_MANY_RECEIVERS = 1

DOCUMENT_NOT_SENT = 2

OPERATION_NO_AUTHORIZATION = 4

OTHERS = 99.

A sample perform to fill this is :

FORM PREPARE_PACKING_LIST.

CLEAR: MAILPACK, MAILBIN, MAILHEAD.

REFRESH: MAILPACK, MAILBIN, MAILHEAD.

DESCRIBE TABLE MAILTXT LINES TAB_LINES.

READ TABLE MAILTXT INDEX TAB_LINES.

MAILDATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( MAILTXT ).

  • Creation of the entry for the compressed document

CLEAR MAILPACK-TRANSF_BIN.

MAILPACK-HEAD_START = 1.

MAILPACK-HEAD_NUM = 0.

MAILPACK-BODY_START = 1.

MAILPACK-BODY_NUM = TAB_LINES.

MAILPACK-DOC_TYPE = 'RAW'.

APPEND MAILPACK.

LOOP AT SOLISTI1.

MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.

APPEND MAILBIN.

ENDLOOP.

DESCRIBE TABLE MAILBIN LINES TAB_LINES.

MAILHEAD = 'ZFILE.PDF'.

APPEND MAILHEAD.

    • Creation of the entry for the compressed attachment

MAILPACK-TRANSF_BIN = 'X'.

MAILPACK-HEAD_START = 1.

MAILPACK-HEAD_NUM = 1.

MAILPACK-BODY_START = 1.

MAILPACK-BODY_NUM = TAB_LINES.

MAILPACK-DOC_TYPE = '<b>OTF</b>'. " Also check out this

MAILPACK-OBJ_NAME = 'ZFILE'.

  • Mail Subject

MAILPACK-OBJ_DESCR = ' Content'.

MAILPACK-DOC_SIZE = TAB_LINES * 255.

APPEND MAILPACK.

ENDFORM. " PREPARE_PACKING_LIST

Message was edited by:

Anish Thomas

Former Member
0 Kudos

Tried in the given way also

But ending up with Same Error ,

Please guide me.

This is the Code I have done.

  • init

CLEAR: P_FORM, P_INFO, PAYSLIP, FUNAME.

REFRESH: P_FORM, PAYSLIP.

  • determine name of function module

  • depending on CE or non CE

CALL FUNCTION 'HRO1_GET_FUNAME'

EXPORTING

pernr = PERNR-PERNR

IMPORTING

FUNAME = funame.

  • get raw version of payslip

CALL FUNCTION funame

EXPORTING

EMPLOYEE_NUMBER = PERNR-PERNR

SEQUENCE_NUMBER = SEQNR

PAYSLIP_VARIANT = 'AMP3'

IMPORTING

P_INFO = P_INFO

RETURN = RETURN

TABLES

P_FORM = P_FORM.

  • any errors occured

CHECK RETURN IS INITIAL.

DESCRIBE TABLE P_FORM LINES LINES.

IF LINES LE 0.

  • PERFORM FILL_RETURN USING 'I' '3G' 824 RETURN.

  • ERROR MESSAGE.

EXIT.

ENDIF.

CALL FUNCTION 'CONVERT_PAYSLIP_TO_SAPSCRIPT'

EXPORTING

P_INFO = p_info

TABLES

payslip = payslip

p_form = p_form

EXCEPTIONS

EMPTY_FORM = 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.

*************************************

**************************************

  • Get print parameters from user defaults and form definition

CONSTANTS:

dataset TYPE pri_params-prdsn VALUE 'ESSEDT'.

DATA:

edtname TYPE syrepid,

listname TYPE pri_params-plist,

pri_params TYPE pri_params,

rc TYPE sysubrc,

valid TYPE xfeld.

CONCATENATE dataset sy-uzeit INTO listname.

PERFORM xedt_get_repna IN PROGRAM rpcljnx0

USING '40' edtname rc.

IF rc <> 0.

edtname = 'RPCEDTX0'.

ENDIF.

CALL FUNCTION 'HR_PL_DETERMINE_PRI_PARAMS'

EXPORTING

imp_linesize = p_info-pcols

imp_linecount = p_info-psize

imp_repid = edtname

IMPORTING

exp_new_params = pri_params.

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

data_set = dataset " dataset name

expiration = '1' " one day in spool

immediately = space " no immediate print

in_parameters = pri_params " defaults

list_name = listname " listname

new_list_id = 'X' " new spool id

no_dialog = 'X' " no print popup

IMPORTING

out_parameters = pri_params

valid = valid

EXCEPTIONS

OTHERS = 4.

CHECK sy-subrc EQ 0

AND valid NE space.

  • Submit EDT to spool

EXPORT p_p_form FROM p_form TO MEMORY ID '%%_P_FORM_%%'.

EXPORT p_info FROM p_info TO MEMORY ID '%%_P_INFO_%%'.

SUBMIT rpcedt_list_to_memory

TO SAP-SPOOL

SPOOL PARAMETERS pri_params

WITHOUT SPOOL DYNPRO

AND RETURN.

  • Get Spool ID

DATA:

spool_ids TYPE STANDARD TABLE OF rsporq,

spoolname TYPE rspotype-rq0name,

spooldsn TYPE rspotype-rq2name,

spoolid TYPE tsp01-rqident.

FIELD-SYMBOLS: <spool> LIKE LINE OF spool_ids.

spooldsn = listname.

spoolname = dataset.

CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'

EXPORTING

rq0name = spoolname

rq2name = spooldsn

TABLES

spoolrequests = spool_ids

EXCEPTIONS

OTHERS = 0.

READ TABLE spool_ids ASSIGNING <spool> INDEX 1.

CHECK sy-subrc EQ 0.

spoolid = <spool>-rqident.

  • Convert to PDF

DATA:

pdf_table TYPE rcl_bag_tline,

pdf_fsize type i value '132'.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = spoolid

no_dialog = 'X'

IMPORTING

pdf_bytecount = pdf_fsize

TABLES

pdf = pdf_table

EXCEPTIONS

OTHERS = 0.

  • Map PDF table into 'flat' table acording to Unicode flag

Data:

wa_pdfline like line of pdf_table,

pdf_xstring type xstring.

Field-symbols:

<l_xline> type x.

loop at pdf_table into wa_pdfline.

assign wa_pdfline to <l_xline> casting.

concatenate pdf_xstring <l_xline> into pdf_xstring in byte mode.

endloop.

Upto here Got Payslip.

Using this I am doing the below code for Mailing purpose.

DATA: I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,

I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,

I_RECEIVERS TYPE TABLE OF SOMLRECI1 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,

  • Work Area declarations

WA_OBJHEAD TYPE SOLI_TAB,

W_CTRLOP TYPE SSFCTRLOP,

wa_reclist LIKE LINE OF i_reclist,

W_COMPOP TYPE SSFCOMPOP,

W_RETURN TYPE SSFCRESCL,

WA_DOC_CHNG TYPE SODOCCHGI1,

W_DATA TYPE SODOCCHGI1,

WA_BUFFER TYPE STRING, "To convert from 132 to 255

  • Variables declarations

V_FORM_NAME TYPE RS38L_FNAM,

V_LEN_IN LIKE SOOD-OBJLEN,

V_LEN_OUT LIKE SOOD-OBJLEN,

V_LEN_OUTN TYPE I,

V_LINES_TXT TYPE I,

V_LINES_BIN TYPE I,

wa_0105 TYPE p0105.

  • Attachment

REFRESH: I_RECLIST,

I_OBJTXT,

I_OBJBIN,

I_OBJPACK.

CLEAR WA_OBJHEAD.

I_OBJBIN[] = P_FORM[].

  • Create Message Body Title and Description

I_OBJTXT = 'test with pdf-Attachment!'.

APPEND I_OBJTXT.

DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.

READ TABLE I_OBJTXT INDEX V_LINES_TXT.

WA_DOC_CHNG-OBJ_NAME = 'smartform'.

WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.

WA_DOC_CHNG-OBJ_DESCR = 'smartform'.

WA_DOC_CHNG-SENSITIVTY = 'F'.

WA_DOC_CHNG-DOC_SIZE = ( v_lines_txt - 1 ) * 255 + strlen( i_objtxt ).

.

  • wa_objHEAD = 'ZFILE.PDF'.

  • APPEND wa_objHEAD.

  • Main Text

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-TRANSF_BIN = 'X'.

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 = 1.

I_OBJPACK-BODY_START = 1.

DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.

READ TABLE I_OBJBIN INDEX V_LINES_BIN.

I_OBJPACK-BODY_START = 1.

I_OBJPACK-DOC_SIZE = v_lines_bin * 255 .

I_OBJPACK-BODY_NUM = V_LINES_BIN.

I_OBJPACK-TRANSF_BIN = 'X'.

I_OBJPACK-DOC_TYPE = 'OTF'.

I_OBJPACK-OBJ_NAME = 'smart'.

I_OBJPACK-OBJ_DESCR = 'test'.

APPEND I_OBJPACK.

REFRESH i_reclist.

CLEAR wa_0105.

READ TABLE p0105 INTO wa_0105 WITH KEY usrty = '0010'

endda = '99991231'.

IF sy-subrc = 0.

ENDIF.

  • Email id 1 (Outlook)

CLEAR wa_reclist-receiver.

wa_reclist-rec_type = 'U'.

wa_reclist-express = 'X'.

wa_reclist-receiver = wa_0105-usrid_long.

APPEND wa_reclist TO i_reclist.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = WA_DOC_CHNG

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

PACKING_LIST = I_OBJPACK

OBJECT_HEADER = WA_OBJHEAD

CONTENTS_BIN = I_OBJBIN

CONTENTS_TXT = I_OBJTXT

RECEIVERS = I_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.

WRITE:/ 'Error When Sending the File', SY-SUBRC.

ELSE.

WRITE:/ 'Mail sent'.

ENDIF.

I am getting the message Mail sent and all ,

But Unable to open that PDF file.

Regards,

Satya.

Regards,

Satya.

Former Member
0 Kudos

Hi Anish

Message was edited by:

gouranga

Former Member
0 Kudos

Hi Anish,

Message was edited by:

gouranga