GOS会计凭证上传附件

1、GOS介绍

GOS是一个连接文档和SAP内各种对象的工具,在SAP的一些凭证中,可以通过GOS进行附件的上传、查看和删除等功能,例如采购订单、会计凭证等。

如果没有这个按钮,可以将当前登录用户的类型设置为对话即可。

 2、前台附件上传

点击创建附件,选择需要上传的附件即可

 点击附件清单,即可查看上传的附件

 并且可以对当前上传的附件进行删除操作

 3、代码实现

 源代码

"--------------------@斌将军--------------------
REPORT zgos.

TYPE-POOLS: slis,abap,truxs.
INCLUDE <cntn01>.

*----------------------------------------------------------------------*
*   屏幕定义
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-002.
  PARAMETERS:p_file  TYPE rlgrap-filename MEMORY ID p, "上载模版路径
             p_belnr TYPE bkpf-belnr OBLIGATORY,
             p_gjahr TYPE bkpf-gjahr OBLIGATORY,
             p_bukrs TYPE bkpf-bukrs OBLIGATORY.
SELECTION-SCREEN END OF BLOCK blk1.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN  on HELP-REQUEST|VALUE-REQUEST                   *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  "选择路径
  PERFORM frm_choose_file.

*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  "上传附件
  PERFORM frm_upload_file.

*&---------------------------------------------------------------------*
*&      Form  FRM_CHOOSE_FILE
*&---------------------------------------------------------------------*
*       选择文件
*----------------------------------------------------------------------*
FORM frm_choose_file.
  "F4 选择文件
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = p_file.

  IF sy-subrc <> 0.
  ENDIF.
ENDFORM. "FRM_CHOOSE_FILE

*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
*       上传附件
*----------------------------------------------------------------------*
FORM frm_upload_file.

  DATA:lt_swcont        TYPE TABLE OF swcont WITH HEADER LINE,
       lt_binrel_attrib TYPE TABLE OF brelattr,
       lt_bin           TYPE TABLE OF solix.

  DATA:lv_filename       TYPE string,
       lv_long_filename  TYPE dbmsgora-filename,
       lv_pure_filename  TYPE sdbah-actid,
       lv_pure_extension TYPE sdbad-funct,
       ls_obja           TYPE borident,
       ls_roleb          TYPE borident,
       ls_binrel         TYPE gbinrel,
       ls_attsize        TYPE int4,
       lo_swc_obj        TYPE swc_object.

  "上传文件
  CLEAR:lv_filename.
  lv_filename = p_file.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lv_filename
      filetype                = 'BIN'
    IMPORTING
      filelength              = ls_attsize
    TABLES
      data_tab                = lt_bin
    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
      OTHERS                  = 17.
  IF sy-subrc <> 0.
    MESSAGE '文件上传失败' TYPE 'S' DISPLAY LIKE 'E'.
    STOP.
  ELSE.

    CLEAR:lv_long_filename.
    lv_long_filename = lv_filename.
    "截取文件名称和后缀
    CALL FUNCTION 'SPLIT_FILENAME'
      EXPORTING
        long_filename  = lv_long_filename
      IMPORTING
        pure_filename  = lv_pure_filename
        pure_extension = lv_pure_extension.

    "转换文件
    swc_create_object  lo_swc_obj 'MESSAGE' ''.
    swc_set_element    lt_swcont 'NO_DIALOG' 'X'.
    swc_set_element    lt_swcont 'DOCUMENTTITLE' lv_pure_filename."文件名
    swc_set_table      lt_swcont 'Content_Hex'   lt_bin."文件内容
    swc_set_element    lt_swcont 'DOCUMENTTYPE'  lv_pure_extension."文件格式
    swc_set_element    lt_swcont 'DOCUMENTSIZE'  ls_attsize."文件大小
    swc_refresh_object lo_swc_obj.
    swc_call_method    lo_swc_obj  'CREATE' lt_swcont.
    swc_get_object_key lo_swc_obj  ls_roleb-objkey.

    ls_roleb-objtype = 'MESSAGE'.   "
    ls_obja-objtype = 'BKPF'.      "
    ls_obja-objkey = p_bukrs && p_belnr && p_gjahr."拼接会计公司、会计凭证、会计年度

    "上传附件
    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = ls_obja
        obj_roleb      = ls_roleb
        relationtype   = 'ATTA'
      IMPORTING
        binrel         = ls_binrel
      TABLES
        binrel_attrib  = lt_binrel_attrib
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3
        OTHERS         = 4.
    IF sy-subrc EQ 0.
      MESSAGE s043(sgos_msg)."已成功创建附件
    ENDIF.
  ENDIF.

ENDFORM.
"--------------------@斌将军--------------------

 

定期更文,欢迎关注

 

 
 
 
 
posted @ 2023-05-15 10:30  斌将军  阅读(178)  评论(0编辑  收藏  举报