Честно говоря, я точно не знаю, принципиальны или нет пробелы в конце файлов DOC/XLS, но полагаю, что если бы двоичные данные как-то манипулировались, то файл бы потом не читался. Кстати, нашла свой собственный код, в котором вообще все вычисления длины файла закомментированы и заменены на [кол-во строк * 255]. И ничего, работает. Вот фрагмент кода - читается DOC файл с сервера и посылается аттачментом к email.
Code:
* Read the file from server
TRY.
OPEN DATASET p_file FOR INPUT IN BINARY MODE.
WHILE sy-subrc = 0.
READ DATASET p_file INTO itab_objbin.
APPEND itab_objbin.
ENDWHILE.
CLOSE DATASET p_file.
CATCH cx_sy_file_access_error.
MESSAGE ...
ENDTRY.
<...>
* Creating the document to be sent
DESCRIBE TABLE itab_lines LINES lv_tab_lines.
* READ TABLE itab_lines INDEX lv_tab_lines.
* wa_doc_chng-doc_size = ( lv_tab_lines - 1 ) * 255 +
* STRLEN( itab_lines ).
wa_doc_chng-doc_size = lv_tab_lines * 255.
* Creating the entry for the compressed document
CLEAR itab_objpack-transf_bin.
itab_objpack-head_start = 1.
itab_objpack-head_num = 0.
itab_objpack-body_start = 1.
itab_objpack-body_num = lv_tab_lines.
itab_objpack-doc_type = 'RAW'.
APPEND itab_objpack.
* Creating the entry for the compressed attachment
IF itab_objbin[] IS NOT INITIAL.
DESCRIBE TABLE itab_objbin LINES lv_tab_lines.
itab_objhead = 'WorkflowReference.doc'.
APPEND itab_objhead.
itab_objpack-transf_bin = 'X'.
itab_objpack-head_start = 1.
itab_objpack-head_num = 1.
itab_objpack-body_start = 1.
itab_objpack-body_num = lv_tab_lines.
itab_objpack-doc_type = 'EXT'.
itab_objpack-obj_name = 'ATTACHMENT'.
itab_objpack-obj_descr = 'Workflow Reference'.
itab_objpack-doc_size = lv_tab_lines * 255.
APPEND itab_objpack.
ENDIF.
* Send the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = wa_doc_chng
commit_work = c_yes
TABLES
packing_list = itab_objpack
object_header = itab_objhead
contents_bin = itab_objbin
contents_txt = itab_lines
receivers = itab_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
У нас SP 18, так что ноты, которые до него, все должны быть. Более поздних скорее всего нет.
Mожет у вас какие-нибудь проблемы из-за Unicode на самом деле? Может и не надо в BINARY MODE читать-то?
