‎2007 Sep 26 10:59 AM
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 users 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.
‎2007 Sep 26 11:02 AM
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.
‎2007 Sep 26 11:02 AM
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.
‎2007 Sep 26 11:06 AM
‎2007 Sep 26 11:11 AM
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
‎2007 Sep 26 1:37 PM