Posted: Fri Feb 27, 2009 3:53 pm Post subject: Get SAP data and mail mail merge it to a MS word document
Code:
************************************************************************
* Program name: ZZJF_WORD_46UP *
* Author : HR Expert author *
* Date : April 2005 *
* Description : This demo program will work for version 4.6 onward. *
* It will get SAP data and mail merge it to a MS word *
* document. *
*======================================================================*
* M O D I F I C A T I O N H I S T O R Y *
*======================================================================*
*
************************************************************************
report zzjf_word_46up no standard page heading
message-id zh
line-count 65
line-size 132.
tables: pernr.
infotypes: 0000, 0001, 0002.
*----------------------------------------------------------------------*
* parameters and selection options.
*----------------------------------------------------------------------*
selection-screen begin of block blk0 with frame title text-l02.
parameters: p_year(2) type n default '15'.
selection-screen end of block blk0.
type-pools: abap.
data: begin of empinfo occurs 0,
first_name(30) type c,
last_name(30) type c,
years(2) type c,
end of empinfo.
data: ee_selected(1) type c.
********************* OLE Defines **********************************
include ole2incl.
data: h_word type ole2_object,
wordapp type ole2_object,
worddoc type ole2_object,
wordobj type ole2_object.
data: txt_work_file like rlgrap-filename value
'C:\Program Files\SAP\SAP_DATA_FILE.txt'.
data: doc_work_file like rlgrap-filename value
'C:\Program Files\SAP\MS_WORD_DOC.doc'.
data: begin of fieldnames occurs 5,
field(60) type c,
end of fieldnames.
********************* end OLE Defines *****************************
*----------------------------------------------------------------------*
get pernr.
*----------------------------------------------------------------------*
clear: empinfo, ee_selected.
perform gather_infotype_data.
check ee_selected ne space.
append empinfo.
*----------------------------------------------------------------------*
end-of-selection.
*----------------------------------------------------------------------*
if not empinfo[] is initial.
perform mail_merge_data_to_ms_word.
else.
write: / 'NO DATA AVAILABLE FOR THIS SELECTION!'.
endif.
*&---------------------------------------------------------------------*
*& Form GATHER_INFOTYPE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form gather_infotype_data.
data: begin of phifi occurs 5.
include structure phifi.
data: end of phifi.
data: hire_date type d.
data: fire_date type d.
data: cutoff_date type d.
data: years(2) type n.
call function 'RP_HIRE_FIRE'
exporting
beg = '18000101'
end = '99991231'
importing
hire_date = hire_date
fire_date = fire_date
tables
pp0000 = p0000 "input
pp0001 = p0001 "input
pphifi = phifi. "output
check not hire_date is initial.
check hire_date < cutoff_date.
call function 'COMPUTE_YEARS_BETWEEN_DATES'
exporting
first_date = hire_date
second_date = cutoff_date
importing
years_between_dates = years.
check years >= p_year.
write years to empinfo-years no-zero.
rp-provide-from-last p0002 space pn-begda pn-endda.
if pnp-sw-found eq '1'.
empinfo-last_name = p0002-nachn.
empinfo-first_name = p0002-vorna.
endif.
ee_selected = 'X'.
endform. " GATHER_INFOTYPE_DATA
*&---------------------------------------------------------------------*
*& Form INIT_PARAMETERS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form init_parameters.
pnptimed = 'D'. "set to today radio button
endform. " INIT_PARAMETERS
*&---------------------------------------------------------------------*
*& Form PRINT_REPORT_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form print_report_header.
endform. " PRINT_REPORT_HEADER
*&---------------------------------------------------------------------*
*& Form MAIL_MERGE_DATA_TO_MS_WORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form mail_merge_data_to_ms_word .
endform. " MAIL_MERGE_DATA_TO_MS_WORD
*&---------------------------------------------------------------------*
*& Form CLEAR_EXISTING_DATA_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form clear_existing_data_file .
data: file_name type string.
data: result type abap_bool.
data: rc type i.
* flush to execute the deletion
call method cl_gui_cfw=>flush.
endif.
endform. " CLEAR_EXISTING_DATA_FILE
*&---------------------------------------------------------------------*
*& Form DOWNLAOD_EMPLOYEE_DATA_TO_PC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_employee_data_to_pc.
data: file_name type string.
data: cnt type i.
data: lt_download type standard table of string,
lv_download type string,
lv_hstr(1024) type c.
class cl_abap_char_utilities definition load.
constants: lc_tab type string
value cl_abap_char_utilities=>horizontal_tab.
field-symbols: <field> type any,
<data_tab_wa> type any.
perform get_all_field_names.
clear lv_download.
loop at fieldnames.
write fieldnames to lv_hstr left-justified.
if sy-tabix > 1.
concatenate lv_download lc_tab lv_hstr
into lv_download.
else.
concatenate lv_download lv_hstr
into lv_download.
endif.
endloop.
append lv_download to lt_download.
* then the data table
loop at empinfo
assigning <data_tab_wa>.
cnt = 0.
clear lv_download.
sy-subrc = 0.
while sy-subrc = 0.
cnt = cnt + 1.
assign component cnt of structure <data_tab_wa> to <field>.
check sy-subrc = 0.
write <field> to lv_hstr left-justified.
if cnt > 1.
concatenate lv_download lc_tab lv_hstr
into lv_download.
else.
concatenate lv_download lv_hstr
into lv_download.
endif.
endwhile.
append lv_download to lt_download.
endloop.
file_name = txt_work_file.
call function 'GUI_DOWNLOAD'
exporting
* BIN_FILESIZE =
filename = file_name
* FILETYPE = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
* HEADER = '00'
trunc_trailing_blanks = 'X'
* col_select =
* col_select_mask =
* IMPORTING
* FILELENGTH =
tables
data_tab = lt_download
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.
case sy-subrc.
when 1.
raise file_write_error.
when 2.
raise no_batch.
when 3.
raise gui_refuse_filetransfer.
when 4.
raise invalid_type .
when 5.
raise no_authority.
when 6.
raise unknown_error.
when 7.
raise header_not_allowed.
when 8.
raise separator_not_allowed.
when 9.
raise filesize_not_allowed.
when 10.
raise header_too_long.
when 11.
raise dp_error_create.
when 12.
raise dp_error_send.
when 13.
raise dp_error_write.
when 14.
raise unknown_dp_error.
when 15.
raise access_denied.
when 16.
raise dp_out_of_memory.
when 17.
raise disk_full.
when 18.
raise dp_timeout.
when 19.
raise file_not_found.
when 20.
raise dataprovider_exception.
when 21.
raise control_flush_error.
when others.
raise unknown_error.
endcase.
endif.
endform. " DOWNLAOD_EMPLOYEE_DATA_TO_PC
*&---------------------------------------------------------------------*
*& Form GET_ALL_FIELD_NAMES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_all_field_names.
type-pools: sydes.
type-pools slis.
data: td type sydes_desc.
data: name_header type sydes_nameinfo.
data: name like name_header.
data: types_header type sydes_typeinfo.
data: type like types_header.
data: prev_tabix like sy-tabix.
data: continue_field(1) type c.
data: search_str(40) type c.
data: s_length(5) type p.
data: begin of stru_tab occurs 0,
name(30) type c,
fldname(30) type c,
index like sy-tabix,
length(3) type n,
type(1) type c,
decimals(2) type n,
end of stru_tab.
clear: td.
describe field empinfo into td.
clear: stru_tab[], stru_tab.
do 1000 times.
read table td-types into types_header index sy-index.
if sy-subrc ne 0.
exit.
endif.
type = types_header.
stru_tab-index = type-idx_name.
stru_tab-type = type-type.
stru_tab-length = type-length.
stru_tab-decimals = type-decimals.
check stru_tab-index ne 0.
append stru_tab.
enddo.
do 1000 times.
read table td-names into name_header index sy-index.
if sy-subrc ne 0.
exit.
endif.
name = name_header.
if continue_field ne space.
read table stru_tab index prev_tabix.
if sy-subrc eq 0.
concatenate stru_tab-fldname name-name into stru_tab-fldname.
modify stru_tab index prev_tabix.
clear: prev_tabix, continue_field.
endif.
else.
loop at stru_tab where index eq sy-index.
stru_tab-fldname = name-name.
prev_tabix = sy-tabix.
modify stru_tab.
endloop.
endif.
if name-continue eq '*'.
continue_field = 'X'.
else.
continue_field = space.
endif.
enddo.
* now build fieldnames
loop at stru_tab.
fieldnames-field = stru_tab-fldname.
append fieldnames.
endloop.
endform. " GET_ALL_FIELD_NAMES
*&---------------------------------------------------------------------*
*& Form OPEN_MS_WORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form start_ms_word .
data: xcode like sy-xcode,
ok_code like sy-xcode,
rc type i,
platform type i,
registry_entry(255) type c,
reg_value type string,
temp_dir type string.
data: version_str(80) type c,
word_version type i.
shift version_str left by 11 places.
move version_str to word_version.
if word_version < 8.
create object wordobj 'Word.Basic'.
else.
create object worddoc 'Word.Document'.
get property of worddoc 'Application' = wordapp.
set property of wordapp 'Visible' = 1.
get property of wordapp 'WordBasic' = wordobj.
call method of wordobj 'FileClose'.
endif.
call method of wordobj 'AppShow'.
* Serienbriefdatei Жffnen
if word_version > 8.
get property of wordapp 'Documents' = documents.
endform. " OPEN_MS_WORD
*&---------------------------------------------------------------------*
*& Form FILL_MS_WORD_WITH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_ms_word_with_data .
data: passwort(15).
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.