Для создания приложения попробуйте следующий код:
Для макросов INCLUDE <CNTN01>.
Code:
*&---------------------------------------------------------------------*
*&      Form  LOAD_FILE_TO_ATTACH
*&---------------------------------------------------------------------*
*       Прикрепление файлов к документу
*----------------------------------------------------------------------*
*      --> PF_FILE_NAME - имя файла
*      --> PF_OBJKEY    - ключ объекта
*      --> PF_OBJTYPE   - тип объекта
*     <--> PF_ERROR     - признак ошибки
*----------------------------------------------------------------------*
FORM load_file_to_attach  USING    pf_file_name TYPE string
                                   pf_temp_dir  TYPE char128
                                   pf_objkey    TYPE swo_typeid
                                   pf_objtype   TYPE swo_objtyp
                          CHANGING pf_error     TYPE c.
  DATA: ls_object_a    TYPE borident,
        ls_object_b    TYPE borident,
        lf_docty       LIKE borident-objtype VALUE 'MESSAGE',
        lf_str1        TYPE string,
        lf_str2        TYPE string,
        lf_ext         TYPE string,
        lo_message     TYPE swc_object,
        lf_message_key TYPE ts_message_key,
        lf_reltyp      LIKE breltyp-reltype VALUE 'ATTA',
        lf_msgtyp      LIKE sofm-doctp  VALUE 'PDF',
        lt_data_tab    TYPE STANDARD TABLE OF ts_blob,
        lf_file_length TYPE i,
        lf_filetype(10) TYPE c VALUE 'BIN',
        lf_result       TYPE c,
        lf_file(128)    TYPE c,
        lc_service      TYPE REF TO cl_gui_frontend_services,
        lf_filename     TYPE string,
        lf_rc           TYPE i,
        lf_offset       TYPE i,
        lf_size         TYPE i,
        lc_com1         TYPE ole2_object.
  pf_error = cc_x.
  CREATE OBJECT lc_service.
  ls_object_a-objkey =  pf_objkey.
  ls_object_a-objtype = pf_objtype.
  lf_file = pf_file_name.
  CONDENSE lf_file.
  lf_filename = lf_file.
  CALL METHOD lc_service->file_exist
    EXPORTING
      file                 = lf_filename
    RECEIVING
      result               = lf_result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.
  lf_file = lf_filename.
  CREATE OBJECT lc_com1 'SAPINFO' NO FLUSH.
  IF SY-subrc IS INITIAL.
    CALL METHOD OF lc_com1 'GetFileSize' = lf_size
      "NO FLUSH
      EXPORTING #1 = lf_file.
  ENDIF.
  CHECK lf_result IS NOT INITIAL.
* Читаем файл с диска
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lf_filename
      filetype                = lf_filetype
    IMPORTING
      filelength              = lf_file_length
    TABLES
      data_tab                = lt_data_tab
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16.
  IF sy-subrc IS NOT INITIAL.
    MESSAGE s368(00) WITH 'Ошибка открытия файла' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.
*----------------------------------------------------------
* First derive the Attachment's ( MESSAGE )document type.
  lf_docty = 'MESSAGE'.
  lf_ext = pf_file_name.
  TRANSLATE lf_ext TO UPPER CASE.
  SPLIT lf_ext AT '.' INTO: lf_str1 lf_str2.
  lf_offset = STRLEN( pf_temp_dir ).
  lf_str1 = lf_str1+lf_offset.
* Take given parameter e.g. 'DOC', 'PDF' etc.
  IF lf_str2 = 'DOC' OR lf_str2 = 'XLS' OR lf_str2 = 'PDF' OR lf_str2 = 'RAR' OR
     lf_str2 = 'BMP' OR lf_str2 = 'JPG'.
    lf_msgtyp = lf_str2.
  ELSE.
    lf_msgtyp = 'EXT'.
  ENDIF.
* Create an initial instance of BO 'MESSAGE' - to call the
* instance-independent method 'Create'.
  swc_create_object lo_message 'MESSAGE' lf_message_key.
* define container to pass the parameter values to the method call
* in next step.
  swc_container lt_message_container.
* Populate container with parameters for method
  swc_set_element lt_message_container 'DOCUMENTTITLE' lf_str1.
  swc_set_element lt_message_container 'DOCUMENTLANGU' 'E'.
  swc_set_element lt_message_container 'NO_DIALOG'     'X'.
  swc_set_element lt_message_container 'DOCUMENTNAME'   lf_docty.
  swc_set_element lt_message_container 'DOCUMENTTYPE'  lf_msgtyp.
* 'DocumentContent' is a multi-line element ( itab ).
  swc_set_table lt_message_container 'DocumentContent' lt_data_tab.
* Size is required in case of File attachments
  swc_set_element lt_message_container 'DOCUMENTSIZE'   lf_file_length.
* Refresh to get the reference of create 'MESSAGE' object for attachment
  swc_refresh_object lo_message.
  swc_call_method lo_message 'CREATE' lt_message_container.
* Get Key of new object
  swc_get_object_key lo_message lf_message_key.
* Now we have attachment as a business object instance. We can now
* attach it to our main business object instance.
* Create attachment BO object_b
  ls_object_b-objkey = lf_message_key.
  ls_object_b-objtype = lf_docty.
*----------------------------------------------------------
  CALL FUNCTION 'BINARY_RELATION_CREATE'
    EXPORTING
      obj_rolea      = ls_object_a
      obj_roleb      = ls_object_b
      relationtype   = lf_reltyp
    EXCEPTIONS
      no_model       = 1
      internal_error = 2
      unknown        = 3.
  COMMIT WORK AND WAIT.
  CALL METHOD lc_service->file_delete
    EXPORTING
      filename = pf_file_name
    CHANGING
      rc       = lf_rc.
  CLEAR pf_error.
ENDFORM.                    " LOAD_FILE_TO_ATTACH