Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

urgent require

Former Member
0 Likes
664

hi dear ,

can you provide me the source code for as follows.

Functionality is required that will allow the document to be downloaded from SAP to the user’s local drive as a PDF document. This will allow the user to send the document with a personalized message to the customer and also allow the user to send multiple documents to the customer in a single email.

i require as soon as possible.

thanks.

Puneet.

1 ACCEPTED SOLUTION
Read only

varma_narayana
Active Contributor
0 Likes
577

Hi Puneet..

This is the Code for Generating PDF and Sending as attachment thru Mail.

REPORT z_broadcasting_example

NO STANDARD PAGE HEADING

LINE-SIZE 254.

*----


*

  • Tables

*----


*

TABLES: adrp, "Persons (central address administration)

bhdgd, "Common data area batch heading routine

bsik, "Accounting: Secondary Index for Vendors

usr21, "Assign user name address key

zt001. "Textos aviso pago anticipos y liquidaciones gastos viaje

*----


*

  • General data definition

*----


*

TYPE-POOLS: icon. "Zuordnung: Ikonenbezeichner in Listen zu ASCII-Codes

TYPE-POOLS: slis. "Globale Typen für generische Listbausteine

DATA: d_linsz LIKE sy-linsz.

*----


*

  • Constants

*----


*

CONSTANTS: c_yes(1) TYPE c VALUE 'X'.

*----


*

  • Structures

*----


*

DATA: e_variant TYPE disvariant.

*----


*

  • Internal tables

*----


*

DATA: BEGIN OF t_list OCCURS 0,

checkbox(1) TYPE c,

xref3_tech LIKE bsik-xref3,

lifnr LIKE bsik-lifnr,

name1 LIKE lfa1-name1,

bukrs LIKE bsik-bukrs,

belnr LIKE bsik-belnr,

gjahr LIKE bsik-gjahr,

buzei LIKE bsik-buzei,

budat LIKE bsik-budat,

shkzg LIKE bsik-shkzg,

wrbtr LIKE bsik-wrbtr,

waers LIKE bsik-waers,

xref1 LIKE bsik-xref1,

xref3 LIKE bsik-xref3,

sgtxt LIKE bsik-sgtxt,

tabix_tech LIKE sy-tabix,

END OF t_list.

DATA: BEGIN OF t_items OCCURS 0,

bukrs LIKE bsik-bukrs,

belnr LIKE bsik-belnr,

gjahr LIKE bsik-gjahr,

buzei LIKE bsik-buzei,

xref3 LIKE bsik-xref3,

END OF t_items.

*----


*

  • Ranges

*----


*

*----


*

  • Selection-screen

*----


*

SELECTION-SCREEN: BEGIN OF BLOCK aaa WITH FRAME TITLE text-000.

SELECT-OPTIONS: s_lifnr FOR bsik-lifnr,

s_bukrs FOR bsik-bukrs,

s_umskz FOR bsik-umskz,

s_budat FOR bsik-budat,

s_wrbtr FOR bsik-wrbtr,

s_dmbtr FOR bsik-dmbtr,

s_ebeln FOR bsik-ebeln,

s_sgtxt FOR bsik-sgtxt,

s_xref1 FOR bsik-xref1,

s_xref3 FOR bsik-xref3.

SELECTION-SCREEN: SKIP.

PARAMETERS: p_vari LIKE disvariant-variant.

SELECTION-SCREEN: END OF BLOCK aaa.

PARAMETERS: p_spool(1) TYPE c NO-DISPLAY DEFAULT space.

*----


*

  • Events

*----


*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

CLEAR e_variant.

e_variant-report = sy-cprog.

e_variant-username = sy-uname.

CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'

EXPORTING

i_save = c_yes

CHANGING

cs_variant = e_variant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 0.

p_vari = e_variant-variant.

ENDIF.

PERFORM f4_for_variant.

*----


*

  • Main program

*----


*

START-OF-SELECTION.

CLEAR e_variant.

e_variant-report = sy-cprog.

e_variant-username = sy-uname.

e_variant-variant = p_vari.

PERFORM load_data.

PERFORM show_list.

END-OF-SELECTION.

*----


*

  • Routines

*----


*

*&----


*

*& Form f4_for_variant

*&----


*

  • text

*----


*

FORM f4_for_variant.

*

DATA: l_exit(1) TYPE c.

CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTING

is_variant = e_variant

i_tabname_header = 'T_LIST'

  • i_tabname_item = ' '

  • IT_DEFAULT_FIELDCAT =

i_save = 'A'

IMPORTING

e_exit = l_exit

es_variant = e_variant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 2.

MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

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

ELSE.

IF l_exit = space.

p_vari = e_variant-variant.

ENDIF.

ENDIF.

*

ENDFORM. " f4_for_variant

*&----


*

*& Form top_of_list

*&----


*

  • Mostramos la cabecera del listado de errores, usando

  • la rutina BATCH-HEADING del programa RSBTCHH0 (consultar

  • documentación de dicho programa).

*----


*

FORM top_of_list.

*

bhdgd-line1 = sy-title.

bhdgd-line2 = space.

CATCH SYSTEM-EXCEPTIONS bcd_field_overflow = 1.

bhdgd-lines = sy-linsz.

ENDCATCH.

IF sy-subrc = 1.

bhdgd-lines = 999.

ENDIF.

bhdgd-uname = sy-uname.

bhdgd-repid = sy-cprog.

bhdgd-inifl = 0.

PERFORM batch-heading(rsbtchh0).

ULINE.

FORMAT INTENSIFIED OFF.

*

ENDFORM. " top_of_list

*&----


*

*& Form print_selections

*&----


*

  • text

*----


*

FORM print_selections.

*

DATA: BEGIN OF lt_selecciones OCCURS 100,

flag(1) TYPE c,

olength TYPE x,

line LIKE raldb-infoline,

END OF lt_selecciones.

d_linsz = sy-linsz - 2.

sy-lisel = '*** Final de listado ***'(010).

PERFORM just_routine(rsbtchh0)

USING sy-lisel sy-linsz.

FORMAT RESET.

ULINE.

WRITE: / sy-vline NO-GAP, sy-lisel+2(d_linsz) NO-GAP, sy-vline.

ULINE.

SKIP.

CALL FUNCTION 'PRINT_SELECTIONS'

EXPORTING

mode = 'TABLE'

rname = sy-cprog

rvariante = ''

TABLES

infotab = lt_selecciones.

LOOP AT lt_selecciones.

WRITE: / lt_selecciones-line COLOR COL_NORMAL INTENSIFIED OFF.

ENDLOOP.

*

ENDFORM. " print_selections

*&----


*

*& Form load_data

*&----


*

  • text

*----


*

FORM load_data.

*

CLEAR: t_list.

REFRESH: t_list.

IF p_spool IS INITIAL.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE t_list

FROM bsik

WHERE lifnr IN s_lifnr

AND bukrs IN s_bukrs

AND umskz IN s_umskz

AND budat IN s_budat

AND wrbtr IN s_wrbtr

AND dmbtr IN s_dmbtr

AND ebeln IN s_ebeln

AND sgtxt IN s_sgtxt

AND xref1 IN s_xref1

AND xref3 IN s_xref3.

ELSE.

CLEAR: t_items.

REFRESH: t_items.

IMPORT t_items FROM MEMORY ID 'ADV_PAYMENTS'.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE t_list

FROM bsik

FOR ALL ENTRIES IN t_items

WHERE bukrs = t_items-bukrs

AND belnr = t_items-belnr

AND gjahr = t_items-gjahr

AND buzei = t_items-buzei

AND lifnr IN s_lifnr

AND bukrs IN s_bukrs

AND umskz IN s_umskz

AND budat IN s_budat

AND wrbtr IN s_wrbtr

AND dmbtr IN s_dmbtr

AND ebeln IN s_ebeln

AND sgtxt IN s_sgtxt

AND xref1 IN s_xref1

AND xref3 IN s_xref3.

ENDIF.

SORT t_list

BY lifnr

gjahr

bukrs

belnr

buzei.

  • Fill data:

  • - Vendor name

  • - Technical fields

  • - Signed amount

LOOP AT t_list.

CLEAR: t_list-name1.

SELECT SINGLE name1

INTO t_list-name1

FROM lfa1

WHERE lifnr = t_list-lifnr.

IF t_list-shkzg = 'H'.

t_list-wrbtr = t_list-wrbtr * ( -1 ).

ENDIF.

t_list-xref3_tech = t_list-xref3.

t_list-tabix_tech = sy-tabix.

MODIFY t_list.

ENDLOOP.

*

ENDFORM. " load_data

*&----


*

*& Form show_list

*&----


*

  • text

*----


*

FORM show_list.

*

DATA: le_layout TYPE slis_layout_alv.

DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: lt_events TYPE slis_t_event.

DATA: le_events TYPE slis_alv_event.

DATA: le_print TYPE slis_print_alv.

  • Layout control

CLEAR le_layout.

le_layout-f2code = '&ETA'.

le_layout-colwidth_optimize = space.

le_layout-no_colhead = space.

le_layout-zebra = c_yes.

le_layout-box_fieldname = 'CHECKBOX'.

le_layout-detail_initial_lines = c_yes.

le_layout-detail_popup = space.

le_layout-confirmation_prompt = c_yes.

  • Fill the field catalog

PERFORM fill_field_catalog

USING lt_fieldcat.

  • Events TOP-OF-PAGE y END-OF-LIST.

le_events-name = 'TOP_OF_PAGE'.

le_events-form = 'TOP_OF_LIST'.

APPEND le_events TO lt_events.

le_events-name = 'END_OF_LIST'.

le_events-form = 'PRINT_SELECTIONS'.

APPEND le_events TO lt_events.

  • Printing control

le_print-no_print_selinfos = c_yes.

le_print-no_coverpage = c_yes.

le_print-no_print_listinfos = c_yes.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

i_callback_program = sy-cprog

i_callback_pf_status_set = 'SET_PF_STATUS'

i_callback_user_command = 'USER_COMMAND'

  • I_STRUCTURE_NAME =

is_layout = le_layout

it_fieldcat = lt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • i_save = 'U'

i_save = 'A'

is_variant = e_variant

it_events = lt_events

  • IT_EVENT_EXIT =

is_print = le_print

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = t_list

EXCEPTIONS

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

*

ENDFORM. " show_list

*&----


*

*& Form fill_field_catalog

*&----


*

  • text

*----


*

  • -->_T_FIELDCAT text

*----


*

FORM fill_field_catalog

USING tfieldcat TYPE slis_t_fieldcat_alv.

*

DATA: le_fieldcat TYPE slis_fieldcat_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = sy-cprog

i_internal_tabname = 'T_LIST'

  • I_STRUCTURE_NAME =

i_client_never_display = c_yes

i_inclname = sy-cprog

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

CHANGING

ct_fieldcat = tfieldcat

  • EXCEPTIONS

  • INCONSISTENT_INTERFACE = 1

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

le_fieldcat-key = space.

le_fieldcat-emphasize = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING key emphasize

WHERE key = c_yes.

le_fieldcat-tech = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING tech

WHERE fieldname CP '*TECH'.

le_fieldcat-tech = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING tech

WHERE fieldname = 'SHKZG'.

le_fieldcat-cfieldname = 'WAERS'.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING cfieldname

WHERE datatype = 'CURR'.

*

ENDFORM. " fill_field_catalog

*&----


*

*& Form set_pf_status

*&----


*

FORM set_pf_status USING rt_extab TYPE slis_t_extab.

*

SET PF-STATUS 'MAIN' EXCLUDING rt_extab.

*

ENDFORM. " set_pf_status

*&----


*

*& Form user_command

*&----


*

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

*

CASE r_ucomm.

WHEN 'MAIL'.

LOOP AT t_list

TRANSPORTING NO FIELDS

WHERE NOT checkbox IS initial.

EXIT.

ENDLOOP.

IF sy-subrc = 0.

PERFORM broadcast_mails.

CLEAR: t_list-checkbox.

MODIFY t_list

TRANSPORTING checkbox

WHERE NOT checkbox IS initial.

ELSE.

MESSAGE s780(3g).

ENDIF.

WHEN OTHERS.

ENDCASE.

rs_selfield-refresh = c_yes.

rs_selfield-col_stable = c_yes.

rs_selfield-row_stable = c_yes.

*

ENDFORM. " user_command

*&----


*

*& Form broadcast_mails

*&----


*

  • text

*----


*

FORM broadcast_mails.

*

SORT t_list

BY checkbox

xref3_tech

lifnr

bukrs.

LOOP AT t_list.

IF NOT t_list-checkbox IS INITIAL.

AT NEW xref3_tech.

CLEAR: t_items.

REFRESH: t_items.

ENDAT.

MOVE-CORRESPONDING t_list TO t_items.

APPEND t_items.

AT END OF xref3_tech.

EXPORT t_items TO MEMORY ID 'ADV_PAYMENTS'.

PERFORM send_mail

USING t_list-xref3_tech.

ENDAT.

ENDIF.

ENDLOOP.

SORT t_list

BY tabix_tech.

*

ENDFORM. " broadcast_mails

*&----


*

*& Form send_mail

*&----


*

  • text

*----


*

  • -->_RECEIVER text

*----


*

FORM send_mail USING _receiver TYPE c.

*

DATA: le_parameters LIKE pri_params.

DATA: l_valid(1) TYPE c.

DATA: lt_pdf TYPE TABLE OF tline WITH HEADER LINE.

DATA: l_spool_c LIKE tsp01_sp0r-rqid_char.

DATA: l_spool_i LIKE tsp01-rqident.

  • Retrieve default print parameters

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

  • ARCHIVE_ID = C_CHAR_UNKNOWN

  • ARCHIVE_INFO = C_CHAR_UNKNOWN

  • ARCHIVE_MODE = C_CHAR_UNKNOWN

  • ARCHIVE_TEXT = C_CHAR_UNKNOWN

  • AR_OBJECT = C_CHAR_UNKNOWN

  • ARCHIVE_REPORT = C_CHAR_UNKNOWN

  • AUTHORITY = C_CHAR_UNKNOWN

  • COPIES = C_NUM3_UNKNOWN

  • COVER_PAGE = C_CHAR_UNKNOWN

  • DATA_SET = C_CHAR_UNKNOWN

  • DEPARTMENT = C_CHAR_UNKNOWN

  • DESTINATION = C_CHAR_UNKNOWN

  • EXPIRATION = C_NUM1_UNKNOWN

  • IMMEDIATELY = C_CHAR_UNKNOWN

  • IN_ARCHIVE_PARAMETERS = ' '

  • IN_PARAMETERS = ' '

  • LAYOUT = C_CHAR_UNKNOWN

  • LINE_COUNT = C_INT_UNKNOWN

  • LINE_SIZE = C_INT_UNKNOWN

  • LIST_NAME = C_CHAR_UNKNOWN

  • LIST_TEXT = C_CHAR_UNKNOWN

  • MODE = ' '

  • NEW_LIST_ID = C_CHAR_UNKNOWN

no_dialog = c_yes

  • RECEIVER = C_CHAR_UNKNOWN

  • RELEASE = C_CHAR_UNKNOWN

  • REPORT = C_CHAR_UNKNOWN

  • SAP_COVER_PAGE = C_CHAR_UNKNOWN

  • HOST_COVER_PAGE = C_CHAR_UNKNOWN

  • PRIORITY = C_NUM1_UNKNOWN

  • SAP_OBJECT = C_CHAR_UNKNOWN

  • TYPE = C_CHAR_UNKNOWN

  • USER = SY-UNAME

  • DRAFT = C_CHAR_UNKNOWN

IMPORTING

  • OUT_ARCHIVE_PARAMETERS =

out_parameters = le_parameters

valid = l_valid

  • EXCEPTIONS

  • ARCHIVE_INFO_NOT_FOUND = 1

  • INVALID_PRINT_PARAMS = 2

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

  • Fill the following parameters:

  • - Print immediately: no

  • - Delete after output: no

  • - New SPOOL request: yes

le_parameters-primm = space.

le_parameters-prrel = space.

le_parameters-prnew = c_yes.

  • Retrieve width and print format

PERFORM prepare_print_format

USING le_parameters.

  • Call the list on background

SUBMIT (sy-repid)

TO SAP-SPOOL

SPOOL PARAMETERS le_parameters

WITHOUT SPOOL DYNPRO

  • USING SELECTION-SET p_vari1

WITH p_spool = c_yes

AND RETURN.

  • Get the SPOOL number

GET PARAMETER ID 'SPI' FIELD l_spool_c.

l_spool_i = l_spool_c.

  • Convert SPOOL to PDF

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = l_spool_i

  • NO_DIALOG =

  • DST_DEVICE =

  • PDF_DESTINATION =

  • IMPORTING

  • PDF_BYTECOUNT =

  • PDF_SPOOLID =

  • LIST_PAGECOUNT =

  • BTC_JOBNAME =

  • BTC_JOBCOUNT =

TABLES

pdf = lt_pdf

  • EXCEPTIONS

  • ERR_NO_ABAP_SPOOLJOB = 1

  • ERR_NO_SPOOLJOB = 2

  • ERR_NO_PERMISSION = 3

  • ERR_CONV_NOT_POSSIBLE = 4

  • ERR_BAD_DESTDEVICE = 5

  • USER_CANCELLED = 6

  • ERR_SPOOLERROR = 7

  • ERR_TEMSEERROR = 8

  • ERR_BTCJOB_OPEN_FAILED = 9

  • ERR_BTCJOB_SUBMIT_FAILED = 10

  • ERR_BTCJOB_CLOSE_FAILED = 11

  • OTHERS = 12

.

IF sy-subrc <> 0.

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

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

ENDIF.

  • Build the mail

PERFORM build_mail

TABLES lt_pdf

USING _receiver.

*

ENDFORM. " send_mail

*&----


*

*& Form prepare_print_format

*&----


*

  • text

*----


*

  • <->_PARAMETERS text

*----


*

FORM prepare_print_format USING parameters LIKE priparams.

*

DATA: BEGIN OF lt_report_source OCCURS 0,

line(72) TYPE c,

END OF lt_report_source.

DATA: l_string_linsz TYPE string.

DATA: l_tabix LIKE sy-tabix.

DATA: BEGIN OF lt_sentencia OCCURS 0,

line(72) TYPE c,

END OF lt_sentencia.

DATA: lt_tsp1d TYPE TABLE OF tsp1d WITH HEADER LINE.

READ REPORT sy-repid INTO lt_report_source.

CHECK sy-subrc = 0.

CLEAR: l_tabix.

WHILE NOT l_string_linsz CS '.'.

ADD 1 TO l_tabix.

READ TABLE lt_report_source

INDEX l_tabix.

TRANSLATE lt_report_source-line TO UPPER CASE.

IF l_string_linsz CS 'REPORT'

OR lt_report_source-line CS 'REPORT'.

CONCATENATE l_string_linsz

lt_report_source-line

INTO l_string_linsz

SEPARATED BY space.

CONDENSE l_string_linsz.

ENDIF.

ENDWHILE.

TRANSLATE l_string_linsz USING '. '.

CLEAR: lt_report_source.

REFRESH: lt_report_source.

FREE: lt_report_source.

SPLIT l_string_linsz AT space INTO TABLE lt_sentencia.

LOOP AT lt_sentencia

WHERE line CS 'LINE-SIZE'.

l_tabix = sy-tabix.

EXIT.

ENDLOOP.

ADD 1 TO l_tabix.

READ TABLE lt_sentencia

INDEX l_tabix.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE lt_tsp1d

FROM tsp1d

WHERE type = 'L'

AND outcolumns >= lt_sentencia-line.

SORT lt_tsp1d

BY outcolumns.

READ TABLE lt_tsp1d

INDEX 1.

parameters-linct = lttsp1d-outrows.

parameters-linsz = ltsentencia-line.

parameters-paart = lttsp1d-papart.

*

ENDFORM. " prepare_print_format

*&----


*

*& Form build_mail

*&----


*

  • text

*----


*

  • -->_T_PDF text

  • -->_RECEIVER text

*----


*

FORM build_mail TABLES tpdf STRUCTURE tline

USING _receiver TYPE c.

*

DATA: l_length_t_pdf TYPE i.

DATA: l_string TYPE xstring.

DATA: l_string_bck TYPE string.

DATA: l_length_string TYPE i.

DATA: l_length_objbin TYPE i.

DATA: l_max_tabix TYPE i.

DATA: l_dif TYPE i.

DATA: l_hex_null TYPE x VALUE '00'.

DATA: lt_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.

DATA: l_tab_lines LIKE sy-tabix.

DATA: le_doc_chng LIKE sodocchgi1.

DATA: lt_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.

DATA: lt_objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.

DATA: lt_contents_bin LIKE solisti1 OCCURS 0 WITH HEADER LINE.

  • Mail text

  • (...here you should fill table lt_objtxt-line)

lt_objtxt-line = 'First line of text'.

append lt_objtxt.

lt_objtxt-line = 'Second line'.

append lt_objtxt.

DESCRIBE TABLE lt_objtxt LINES l_tab_lines.

READ TABLE lt_objtxt INDEX l_tab_lines.

le_doc_chng-doc_size = ( l_tab_lines - 1 ) * 255

+ STRLEN( lt_objtxt ).

le_doc_chng-obj_descr = 'This mail is about broadcasting'.

CLEAR lt_objpack-transf_bin.

lt_objpack-head_start = 1.

lt_objpack-head_num = 0.

lt_objpack-body_start = 1.

lt_objpack-body_num = l_tab_lines.

lt_objpack-doc_type = 'RAW'.

APPEND lt_objpack.

  • Attached file, in PDF-format

DESCRIBE FIELD tpdf LENGTH l_length_t_pdf.

CLEAR: l_string_bck,

l_string.

LOOP AT tpdf.

CONCATENATE l_string_bck tpdf INTO l_string_bck.

l_dif = l_length_t_pdf - STRLEN( tpdf ).

DO l_dif TIMES.

CONCATENATE l_string_bck l_hex_null INTO l_string_bck.

ENDDO.

CONCATENATE l_string tpdf INTO l_string.

ENDLOOP.

sy-subrc = 0.

WHILE sy-subrc = 0.

REPLACE l_hex_null WITH space INTO l_string_bck.

ENDWHILE.

l_length_string = strlen( l_string_bck ).

DESCRIBE FIELD lt_contents_bin LENGTH l_length_objbin.

l_max_tabix = ceil( l_length_string / l_length_objbin * '1.0' ).

DO l_max_tabix TIMES.

lt_contents_bin = l_string_bck.

APPEND lt_contents_bin.

IF sy-tabix <> l_max_tabix.

l_string_bck = l_string_bck+l_length_objbin.

ENDIF.

ENDDO.

DESCRIBE TABLE lt_contents_bin LINES l_tab_lines.

APPEND lt_objhead.

lt_objpack-transf_bin = c_yes.

lt_objpack-head_start = 1.

lt_objpack-head_num = 1.

lt_objpack-body_start = 1.

lt_objpack-body_num = l_tab_lines.

lt_objpack-doc_type = 'PDF'.

lt_objpack-obj_name = 'Advance payments'.

WRITE sy-datum TO lt_objpack-obj_descr.

CONCATENATE 'List of advance payments till'

lt_objpack-obj_descr

INTO lt_objpack-obj_descr

SEPARATED BY space.

CONCATENATE lt_objpack-obj_descr

'.PDF'

INTO lt_objpack-obj_descr.

lt_objpack-doc_size = ( l_tab_lines - 1 ) * 255.

LOOP AT lt_contents_bin.

ENDLOOP.

lt_objpack-doc_size = lt_objpack-doc_size + STRLEN( lt_contents_bin ).

APPEND lt_objpack.

  • Receiver list

SELECT SINGLE adr6~smtp_addr

INTO lt_reclist-receiver

FROM adr6 INNER JOIN usr21 ON adr6addrnumber = usr21addrnumber

AND adr6persnumber = usr21persnumber

WHERE usr21~bname = _receiver

AND adr6~date_from <= sy-datum

AND adr6~flgdefault = c_yes.

lt_reclist-rec_type = 'U'.

APPEND lt_reclist.

  • Finally! we send the mail

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = le_doc_chng

put_in_outbox = c_yes

TABLES

packing_list = lt_objpack

object_header = lt_objhead

contents_bin = lt_contents_bin

  • contents_hex =

contents_txt = lt_objtxt

receivers = lt_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.

*

ENDFORM. " build_mail

REWARD IF HELPFUL.

4 REPLIES 4
Read only

varma_narayana
Active Contributor
0 Likes
578

Hi Puneet..

This is the Code for Generating PDF and Sending as attachment thru Mail.

REPORT z_broadcasting_example

NO STANDARD PAGE HEADING

LINE-SIZE 254.

*----


*

  • Tables

*----


*

TABLES: adrp, "Persons (central address administration)

bhdgd, "Common data area batch heading routine

bsik, "Accounting: Secondary Index for Vendors

usr21, "Assign user name address key

zt001. "Textos aviso pago anticipos y liquidaciones gastos viaje

*----


*

  • General data definition

*----


*

TYPE-POOLS: icon. "Zuordnung: Ikonenbezeichner in Listen zu ASCII-Codes

TYPE-POOLS: slis. "Globale Typen für generische Listbausteine

DATA: d_linsz LIKE sy-linsz.

*----


*

  • Constants

*----


*

CONSTANTS: c_yes(1) TYPE c VALUE 'X'.

*----


*

  • Structures

*----


*

DATA: e_variant TYPE disvariant.

*----


*

  • Internal tables

*----


*

DATA: BEGIN OF t_list OCCURS 0,

checkbox(1) TYPE c,

xref3_tech LIKE bsik-xref3,

lifnr LIKE bsik-lifnr,

name1 LIKE lfa1-name1,

bukrs LIKE bsik-bukrs,

belnr LIKE bsik-belnr,

gjahr LIKE bsik-gjahr,

buzei LIKE bsik-buzei,

budat LIKE bsik-budat,

shkzg LIKE bsik-shkzg,

wrbtr LIKE bsik-wrbtr,

waers LIKE bsik-waers,

xref1 LIKE bsik-xref1,

xref3 LIKE bsik-xref3,

sgtxt LIKE bsik-sgtxt,

tabix_tech LIKE sy-tabix,

END OF t_list.

DATA: BEGIN OF t_items OCCURS 0,

bukrs LIKE bsik-bukrs,

belnr LIKE bsik-belnr,

gjahr LIKE bsik-gjahr,

buzei LIKE bsik-buzei,

xref3 LIKE bsik-xref3,

END OF t_items.

*----


*

  • Ranges

*----


*

*----


*

  • Selection-screen

*----


*

SELECTION-SCREEN: BEGIN OF BLOCK aaa WITH FRAME TITLE text-000.

SELECT-OPTIONS: s_lifnr FOR bsik-lifnr,

s_bukrs FOR bsik-bukrs,

s_umskz FOR bsik-umskz,

s_budat FOR bsik-budat,

s_wrbtr FOR bsik-wrbtr,

s_dmbtr FOR bsik-dmbtr,

s_ebeln FOR bsik-ebeln,

s_sgtxt FOR bsik-sgtxt,

s_xref1 FOR bsik-xref1,

s_xref3 FOR bsik-xref3.

SELECTION-SCREEN: SKIP.

PARAMETERS: p_vari LIKE disvariant-variant.

SELECTION-SCREEN: END OF BLOCK aaa.

PARAMETERS: p_spool(1) TYPE c NO-DISPLAY DEFAULT space.

*----


*

  • Events

*----


*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

CLEAR e_variant.

e_variant-report = sy-cprog.

e_variant-username = sy-uname.

CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'

EXPORTING

i_save = c_yes

CHANGING

cs_variant = e_variant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 0.

p_vari = e_variant-variant.

ENDIF.

PERFORM f4_for_variant.

*----


*

  • Main program

*----


*

START-OF-SELECTION.

CLEAR e_variant.

e_variant-report = sy-cprog.

e_variant-username = sy-uname.

e_variant-variant = p_vari.

PERFORM load_data.

PERFORM show_list.

END-OF-SELECTION.

*----


*

  • Routines

*----


*

*&----


*

*& Form f4_for_variant

*&----


*

  • text

*----


*

FORM f4_for_variant.

*

DATA: l_exit(1) TYPE c.

CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTING

is_variant = e_variant

i_tabname_header = 'T_LIST'

  • i_tabname_item = ' '

  • IT_DEFAULT_FIELDCAT =

i_save = 'A'

IMPORTING

e_exit = l_exit

es_variant = e_variant

EXCEPTIONS

not_found = 2.

IF sy-subrc = 2.

MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

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

ELSE.

IF l_exit = space.

p_vari = e_variant-variant.

ENDIF.

ENDIF.

*

ENDFORM. " f4_for_variant

*&----


*

*& Form top_of_list

*&----


*

  • Mostramos la cabecera del listado de errores, usando

  • la rutina BATCH-HEADING del programa RSBTCHH0 (consultar

  • documentación de dicho programa).

*----


*

FORM top_of_list.

*

bhdgd-line1 = sy-title.

bhdgd-line2 = space.

CATCH SYSTEM-EXCEPTIONS bcd_field_overflow = 1.

bhdgd-lines = sy-linsz.

ENDCATCH.

IF sy-subrc = 1.

bhdgd-lines = 999.

ENDIF.

bhdgd-uname = sy-uname.

bhdgd-repid = sy-cprog.

bhdgd-inifl = 0.

PERFORM batch-heading(rsbtchh0).

ULINE.

FORMAT INTENSIFIED OFF.

*

ENDFORM. " top_of_list

*&----


*

*& Form print_selections

*&----


*

  • text

*----


*

FORM print_selections.

*

DATA: BEGIN OF lt_selecciones OCCURS 100,

flag(1) TYPE c,

olength TYPE x,

line LIKE raldb-infoline,

END OF lt_selecciones.

d_linsz = sy-linsz - 2.

sy-lisel = '*** Final de listado ***'(010).

PERFORM just_routine(rsbtchh0)

USING sy-lisel sy-linsz.

FORMAT RESET.

ULINE.

WRITE: / sy-vline NO-GAP, sy-lisel+2(d_linsz) NO-GAP, sy-vline.

ULINE.

SKIP.

CALL FUNCTION 'PRINT_SELECTIONS'

EXPORTING

mode = 'TABLE'

rname = sy-cprog

rvariante = ''

TABLES

infotab = lt_selecciones.

LOOP AT lt_selecciones.

WRITE: / lt_selecciones-line COLOR COL_NORMAL INTENSIFIED OFF.

ENDLOOP.

*

ENDFORM. " print_selections

*&----


*

*& Form load_data

*&----


*

  • text

*----


*

FORM load_data.

*

CLEAR: t_list.

REFRESH: t_list.

IF p_spool IS INITIAL.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE t_list

FROM bsik

WHERE lifnr IN s_lifnr

AND bukrs IN s_bukrs

AND umskz IN s_umskz

AND budat IN s_budat

AND wrbtr IN s_wrbtr

AND dmbtr IN s_dmbtr

AND ebeln IN s_ebeln

AND sgtxt IN s_sgtxt

AND xref1 IN s_xref1

AND xref3 IN s_xref3.

ELSE.

CLEAR: t_items.

REFRESH: t_items.

IMPORT t_items FROM MEMORY ID 'ADV_PAYMENTS'.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE t_list

FROM bsik

FOR ALL ENTRIES IN t_items

WHERE bukrs = t_items-bukrs

AND belnr = t_items-belnr

AND gjahr = t_items-gjahr

AND buzei = t_items-buzei

AND lifnr IN s_lifnr

AND bukrs IN s_bukrs

AND umskz IN s_umskz

AND budat IN s_budat

AND wrbtr IN s_wrbtr

AND dmbtr IN s_dmbtr

AND ebeln IN s_ebeln

AND sgtxt IN s_sgtxt

AND xref1 IN s_xref1

AND xref3 IN s_xref3.

ENDIF.

SORT t_list

BY lifnr

gjahr

bukrs

belnr

buzei.

  • Fill data:

  • - Vendor name

  • - Technical fields

  • - Signed amount

LOOP AT t_list.

CLEAR: t_list-name1.

SELECT SINGLE name1

INTO t_list-name1

FROM lfa1

WHERE lifnr = t_list-lifnr.

IF t_list-shkzg = 'H'.

t_list-wrbtr = t_list-wrbtr * ( -1 ).

ENDIF.

t_list-xref3_tech = t_list-xref3.

t_list-tabix_tech = sy-tabix.

MODIFY t_list.

ENDLOOP.

*

ENDFORM. " load_data

*&----


*

*& Form show_list

*&----


*

  • text

*----


*

FORM show_list.

*

DATA: le_layout TYPE slis_layout_alv.

DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: lt_events TYPE slis_t_event.

DATA: le_events TYPE slis_alv_event.

DATA: le_print TYPE slis_print_alv.

  • Layout control

CLEAR le_layout.

le_layout-f2code = '&ETA'.

le_layout-colwidth_optimize = space.

le_layout-no_colhead = space.

le_layout-zebra = c_yes.

le_layout-box_fieldname = 'CHECKBOX'.

le_layout-detail_initial_lines = c_yes.

le_layout-detail_popup = space.

le_layout-confirmation_prompt = c_yes.

  • Fill the field catalog

PERFORM fill_field_catalog

USING lt_fieldcat.

  • Events TOP-OF-PAGE y END-OF-LIST.

le_events-name = 'TOP_OF_PAGE'.

le_events-form = 'TOP_OF_LIST'.

APPEND le_events TO lt_events.

le_events-name = 'END_OF_LIST'.

le_events-form = 'PRINT_SELECTIONS'.

APPEND le_events TO lt_events.

  • Printing control

le_print-no_print_selinfos = c_yes.

le_print-no_coverpage = c_yes.

le_print-no_print_listinfos = c_yes.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

i_callback_program = sy-cprog

i_callback_pf_status_set = 'SET_PF_STATUS'

i_callback_user_command = 'USER_COMMAND'

  • I_STRUCTURE_NAME =

is_layout = le_layout

it_fieldcat = lt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • i_save = 'U'

i_save = 'A'

is_variant = e_variant

it_events = lt_events

  • IT_EVENT_EXIT =

is_print = le_print

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = t_list

EXCEPTIONS

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

*

ENDFORM. " show_list

*&----


*

*& Form fill_field_catalog

*&----


*

  • text

*----


*

  • -->_T_FIELDCAT text

*----


*

FORM fill_field_catalog

USING tfieldcat TYPE slis_t_fieldcat_alv.

*

DATA: le_fieldcat TYPE slis_fieldcat_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = sy-cprog

i_internal_tabname = 'T_LIST'

  • I_STRUCTURE_NAME =

i_client_never_display = c_yes

i_inclname = sy-cprog

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

CHANGING

ct_fieldcat = tfieldcat

  • EXCEPTIONS

  • INCONSISTENT_INTERFACE = 1

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

le_fieldcat-key = space.

le_fieldcat-emphasize = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING key emphasize

WHERE key = c_yes.

le_fieldcat-tech = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING tech

WHERE fieldname CP '*TECH'.

le_fieldcat-tech = c_yes.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING tech

WHERE fieldname = 'SHKZG'.

le_fieldcat-cfieldname = 'WAERS'.

MODIFY tfieldcat

FROM le_fieldcat

TRANSPORTING cfieldname

WHERE datatype = 'CURR'.

*

ENDFORM. " fill_field_catalog

*&----


*

*& Form set_pf_status

*&----


*

FORM set_pf_status USING rt_extab TYPE slis_t_extab.

*

SET PF-STATUS 'MAIN' EXCLUDING rt_extab.

*

ENDFORM. " set_pf_status

*&----


*

*& Form user_command

*&----


*

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

*

CASE r_ucomm.

WHEN 'MAIL'.

LOOP AT t_list

TRANSPORTING NO FIELDS

WHERE NOT checkbox IS initial.

EXIT.

ENDLOOP.

IF sy-subrc = 0.

PERFORM broadcast_mails.

CLEAR: t_list-checkbox.

MODIFY t_list

TRANSPORTING checkbox

WHERE NOT checkbox IS initial.

ELSE.

MESSAGE s780(3g).

ENDIF.

WHEN OTHERS.

ENDCASE.

rs_selfield-refresh = c_yes.

rs_selfield-col_stable = c_yes.

rs_selfield-row_stable = c_yes.

*

ENDFORM. " user_command

*&----


*

*& Form broadcast_mails

*&----


*

  • text

*----


*

FORM broadcast_mails.

*

SORT t_list

BY checkbox

xref3_tech

lifnr

bukrs.

LOOP AT t_list.

IF NOT t_list-checkbox IS INITIAL.

AT NEW xref3_tech.

CLEAR: t_items.

REFRESH: t_items.

ENDAT.

MOVE-CORRESPONDING t_list TO t_items.

APPEND t_items.

AT END OF xref3_tech.

EXPORT t_items TO MEMORY ID 'ADV_PAYMENTS'.

PERFORM send_mail

USING t_list-xref3_tech.

ENDAT.

ENDIF.

ENDLOOP.

SORT t_list

BY tabix_tech.

*

ENDFORM. " broadcast_mails

*&----


*

*& Form send_mail

*&----


*

  • text

*----


*

  • -->_RECEIVER text

*----


*

FORM send_mail USING _receiver TYPE c.

*

DATA: le_parameters LIKE pri_params.

DATA: l_valid(1) TYPE c.

DATA: lt_pdf TYPE TABLE OF tline WITH HEADER LINE.

DATA: l_spool_c LIKE tsp01_sp0r-rqid_char.

DATA: l_spool_i LIKE tsp01-rqident.

  • Retrieve default print parameters

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

  • ARCHIVE_ID = C_CHAR_UNKNOWN

  • ARCHIVE_INFO = C_CHAR_UNKNOWN

  • ARCHIVE_MODE = C_CHAR_UNKNOWN

  • ARCHIVE_TEXT = C_CHAR_UNKNOWN

  • AR_OBJECT = C_CHAR_UNKNOWN

  • ARCHIVE_REPORT = C_CHAR_UNKNOWN

  • AUTHORITY = C_CHAR_UNKNOWN

  • COPIES = C_NUM3_UNKNOWN

  • COVER_PAGE = C_CHAR_UNKNOWN

  • DATA_SET = C_CHAR_UNKNOWN

  • DEPARTMENT = C_CHAR_UNKNOWN

  • DESTINATION = C_CHAR_UNKNOWN

  • EXPIRATION = C_NUM1_UNKNOWN

  • IMMEDIATELY = C_CHAR_UNKNOWN

  • IN_ARCHIVE_PARAMETERS = ' '

  • IN_PARAMETERS = ' '

  • LAYOUT = C_CHAR_UNKNOWN

  • LINE_COUNT = C_INT_UNKNOWN

  • LINE_SIZE = C_INT_UNKNOWN

  • LIST_NAME = C_CHAR_UNKNOWN

  • LIST_TEXT = C_CHAR_UNKNOWN

  • MODE = ' '

  • NEW_LIST_ID = C_CHAR_UNKNOWN

no_dialog = c_yes

  • RECEIVER = C_CHAR_UNKNOWN

  • RELEASE = C_CHAR_UNKNOWN

  • REPORT = C_CHAR_UNKNOWN

  • SAP_COVER_PAGE = C_CHAR_UNKNOWN

  • HOST_COVER_PAGE = C_CHAR_UNKNOWN

  • PRIORITY = C_NUM1_UNKNOWN

  • SAP_OBJECT = C_CHAR_UNKNOWN

  • TYPE = C_CHAR_UNKNOWN

  • USER = SY-UNAME

  • DRAFT = C_CHAR_UNKNOWN

IMPORTING

  • OUT_ARCHIVE_PARAMETERS =

out_parameters = le_parameters

valid = l_valid

  • EXCEPTIONS

  • ARCHIVE_INFO_NOT_FOUND = 1

  • INVALID_PRINT_PARAMS = 2

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

  • Fill the following parameters:

  • - Print immediately: no

  • - Delete after output: no

  • - New SPOOL request: yes

le_parameters-primm = space.

le_parameters-prrel = space.

le_parameters-prnew = c_yes.

  • Retrieve width and print format

PERFORM prepare_print_format

USING le_parameters.

  • Call the list on background

SUBMIT (sy-repid)

TO SAP-SPOOL

SPOOL PARAMETERS le_parameters

WITHOUT SPOOL DYNPRO

  • USING SELECTION-SET p_vari1

WITH p_spool = c_yes

AND RETURN.

  • Get the SPOOL number

GET PARAMETER ID 'SPI' FIELD l_spool_c.

l_spool_i = l_spool_c.

  • Convert SPOOL to PDF

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = l_spool_i

  • NO_DIALOG =

  • DST_DEVICE =

  • PDF_DESTINATION =

  • IMPORTING

  • PDF_BYTECOUNT =

  • PDF_SPOOLID =

  • LIST_PAGECOUNT =

  • BTC_JOBNAME =

  • BTC_JOBCOUNT =

TABLES

pdf = lt_pdf

  • EXCEPTIONS

  • ERR_NO_ABAP_SPOOLJOB = 1

  • ERR_NO_SPOOLJOB = 2

  • ERR_NO_PERMISSION = 3

  • ERR_CONV_NOT_POSSIBLE = 4

  • ERR_BAD_DESTDEVICE = 5

  • USER_CANCELLED = 6

  • ERR_SPOOLERROR = 7

  • ERR_TEMSEERROR = 8

  • ERR_BTCJOB_OPEN_FAILED = 9

  • ERR_BTCJOB_SUBMIT_FAILED = 10

  • ERR_BTCJOB_CLOSE_FAILED = 11

  • OTHERS = 12

.

IF sy-subrc <> 0.

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

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

ENDIF.

  • Build the mail

PERFORM build_mail

TABLES lt_pdf

USING _receiver.

*

ENDFORM. " send_mail

*&----


*

*& Form prepare_print_format

*&----


*

  • text

*----


*

  • <->_PARAMETERS text

*----


*

FORM prepare_print_format USING parameters LIKE priparams.

*

DATA: BEGIN OF lt_report_source OCCURS 0,

line(72) TYPE c,

END OF lt_report_source.

DATA: l_string_linsz TYPE string.

DATA: l_tabix LIKE sy-tabix.

DATA: BEGIN OF lt_sentencia OCCURS 0,

line(72) TYPE c,

END OF lt_sentencia.

DATA: lt_tsp1d TYPE TABLE OF tsp1d WITH HEADER LINE.

READ REPORT sy-repid INTO lt_report_source.

CHECK sy-subrc = 0.

CLEAR: l_tabix.

WHILE NOT l_string_linsz CS '.'.

ADD 1 TO l_tabix.

READ TABLE lt_report_source

INDEX l_tabix.

TRANSLATE lt_report_source-line TO UPPER CASE.

IF l_string_linsz CS 'REPORT'

OR lt_report_source-line CS 'REPORT'.

CONCATENATE l_string_linsz

lt_report_source-line

INTO l_string_linsz

SEPARATED BY space.

CONDENSE l_string_linsz.

ENDIF.

ENDWHILE.

TRANSLATE l_string_linsz USING '. '.

CLEAR: lt_report_source.

REFRESH: lt_report_source.

FREE: lt_report_source.

SPLIT l_string_linsz AT space INTO TABLE lt_sentencia.

LOOP AT lt_sentencia

WHERE line CS 'LINE-SIZE'.

l_tabix = sy-tabix.

EXIT.

ENDLOOP.

ADD 1 TO l_tabix.

READ TABLE lt_sentencia

INDEX l_tabix.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE lt_tsp1d

FROM tsp1d

WHERE type = 'L'

AND outcolumns >= lt_sentencia-line.

SORT lt_tsp1d

BY outcolumns.

READ TABLE lt_tsp1d

INDEX 1.

parameters-linct = lttsp1d-outrows.

parameters-linsz = ltsentencia-line.

parameters-paart = lttsp1d-papart.

*

ENDFORM. " prepare_print_format

*&----


*

*& Form build_mail

*&----


*

  • text

*----


*

  • -->_T_PDF text

  • -->_RECEIVER text

*----


*

FORM build_mail TABLES tpdf STRUCTURE tline

USING _receiver TYPE c.

*

DATA: l_length_t_pdf TYPE i.

DATA: l_string TYPE xstring.

DATA: l_string_bck TYPE string.

DATA: l_length_string TYPE i.

DATA: l_length_objbin TYPE i.

DATA: l_max_tabix TYPE i.

DATA: l_dif TYPE i.

DATA: l_hex_null TYPE x VALUE '00'.

DATA: lt_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.

DATA: l_tab_lines LIKE sy-tabix.

DATA: le_doc_chng LIKE sodocchgi1.

DATA: lt_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.

DATA: lt_objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.

DATA: lt_contents_bin LIKE solisti1 OCCURS 0 WITH HEADER LINE.

  • Mail text

  • (...here you should fill table lt_objtxt-line)

lt_objtxt-line = 'First line of text'.

append lt_objtxt.

lt_objtxt-line = 'Second line'.

append lt_objtxt.

DESCRIBE TABLE lt_objtxt LINES l_tab_lines.

READ TABLE lt_objtxt INDEX l_tab_lines.

le_doc_chng-doc_size = ( l_tab_lines - 1 ) * 255

+ STRLEN( lt_objtxt ).

le_doc_chng-obj_descr = 'This mail is about broadcasting'.

CLEAR lt_objpack-transf_bin.

lt_objpack-head_start = 1.

lt_objpack-head_num = 0.

lt_objpack-body_start = 1.

lt_objpack-body_num = l_tab_lines.

lt_objpack-doc_type = 'RAW'.

APPEND lt_objpack.

  • Attached file, in PDF-format

DESCRIBE FIELD tpdf LENGTH l_length_t_pdf.

CLEAR: l_string_bck,

l_string.

LOOP AT tpdf.

CONCATENATE l_string_bck tpdf INTO l_string_bck.

l_dif = l_length_t_pdf - STRLEN( tpdf ).

DO l_dif TIMES.

CONCATENATE l_string_bck l_hex_null INTO l_string_bck.

ENDDO.

CONCATENATE l_string tpdf INTO l_string.

ENDLOOP.

sy-subrc = 0.

WHILE sy-subrc = 0.

REPLACE l_hex_null WITH space INTO l_string_bck.

ENDWHILE.

l_length_string = strlen( l_string_bck ).

DESCRIBE FIELD lt_contents_bin LENGTH l_length_objbin.

l_max_tabix = ceil( l_length_string / l_length_objbin * '1.0' ).

DO l_max_tabix TIMES.

lt_contents_bin = l_string_bck.

APPEND lt_contents_bin.

IF sy-tabix <> l_max_tabix.

l_string_bck = l_string_bck+l_length_objbin.

ENDIF.

ENDDO.

DESCRIBE TABLE lt_contents_bin LINES l_tab_lines.

APPEND lt_objhead.

lt_objpack-transf_bin = c_yes.

lt_objpack-head_start = 1.

lt_objpack-head_num = 1.

lt_objpack-body_start = 1.

lt_objpack-body_num = l_tab_lines.

lt_objpack-doc_type = 'PDF'.

lt_objpack-obj_name = 'Advance payments'.

WRITE sy-datum TO lt_objpack-obj_descr.

CONCATENATE 'List of advance payments till'

lt_objpack-obj_descr

INTO lt_objpack-obj_descr

SEPARATED BY space.

CONCATENATE lt_objpack-obj_descr

'.PDF'

INTO lt_objpack-obj_descr.

lt_objpack-doc_size = ( l_tab_lines - 1 ) * 255.

LOOP AT lt_contents_bin.

ENDLOOP.

lt_objpack-doc_size = lt_objpack-doc_size + STRLEN( lt_contents_bin ).

APPEND lt_objpack.

  • Receiver list

SELECT SINGLE adr6~smtp_addr

INTO lt_reclist-receiver

FROM adr6 INNER JOIN usr21 ON adr6addrnumber = usr21addrnumber

AND adr6persnumber = usr21persnumber

WHERE usr21~bname = _receiver

AND adr6~date_from <= sy-datum

AND adr6~flgdefault = c_yes.

lt_reclist-rec_type = 'U'.

APPEND lt_reclist.

  • Finally! we send the mail

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = le_doc_chng

put_in_outbox = c_yes

TABLES

packing_list = lt_objpack

object_header = lt_objhead

contents_bin = lt_contents_bin

  • contents_hex =

contents_txt = lt_objtxt

receivers = lt_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.

*

ENDFORM. " build_mail

REWARD IF HELPFUL.

Read only

Former Member
0 Likes
577

What type of document it is?

Read only

Former Member
0 Likes
577

Hi,

To convert sap to pdf:

SAP have created a standard program RSTXPDFT4 to convert your Sapscripts/Lists/Smartforms spools into a PDF format.

Specify the spool number and you will be able to download the spool into your local harddisk.

It look exactly like what you see during a spool display.

Please note that it is not restricted to spool only. Any reports in the spool can be converted using the program 'RSTXPDFT4'.

For sending mail, check the following link:

http://sap-img.com/abap/sending-email-with-attachment.htm

Regards,

Bhaskar

Read only

dhorions
Contributor
0 Likes
577

Maybe you could hire an abap programmer to do this for you?