CV11批量创建文档bom结构的相关函数

本文介绍如何通过ABAP编程实现SAP系统中PLM文档结构的批量导入流程,包括使用CSAP_DOC_BOM_DELETE函数删除原有结构及API_DOCUMENT_SAVE_BOM函数创建新结构的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中需要将PLM中文档结构导入到SAP中,需要批量导入,现记录下两个关键的函数以及调用参数设置

1.首先需要调用函数CSAP_DOC_BOM_DELETE删除文档原有的结构,否则不可创建结构。

2.注意参数fl_commit_and_wait需要被赋值为X,否则结构创建失败。


REPORT ztest01.


*---------------------------------------------
*声明程序中所使用的type pool
*---------------------------------------------
TYPE-POOLS truxs,  "
             slis.   "ALV

*---------------------------------------------
*声明程序中所使用的表
*---------------------------------------------
TABLES sscrfields.

*---------------------------------------------
*声明程序中所使用的变量及自定义类型
*---------------------------------------------
TYPES BEGIN OF type_line,
          dokar TYPE stpo-dokar,                   "文档类型
          doknr TYPE stpo-doknr,                   "凭证编号
          dokvr TYPE stpo-dokvr,                   "文档版本
          doktl TYPE stpo-doktl,                   "凭证部分
        END OF type_line.

TYPES tab_type_line TYPE STANDARD TABLE OF type_line WITH DEFAULT KEY.

DATA gt_data     TYPE tab_type_line.          "全局数据内表.

*---------------------------------------------
*屏幕输入报表筛选条件
*---------------------------------------------

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.
PARAMETERSp_file LIKE rlgrap-filename MODIF ID m2.
SELECTION-SCREEN END OF BLOCK a1.

*---------------------------------------------
*用于屏幕初始化,例如屏幕字段默认值的填充
*---------------------------------------------
INITIALIZATION.

*-------------------------------------------------
*PBO,可以通过修改系统默认SCREEN内表修改屏幕的某些属性
*-------------------------------------------------
AT SELECTION-SCREEN OUTPUT.

*-------------------------------------------------
*  弹出文件选择框
*-------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM sub_get_filename USING 'O'
                         CHANGING p_file.

*---------------------------------------------
*输入结束后启动的模块
*---------------------------------------------
START-OF-SELECTION.
  PERFORM sub_process_data USING p_file                            "上传数据
                        CHANGING gt_data.
  CHECK gt_data[] IS NOT INITIAL.
  PERFORM sub_modify_data USING gt_data.                           "更新数据

*---------------------------------------------
*选择结束事件,一般用于输出列表
*---------------------------------------------
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  SUB_GET_FILENAME
*&---------------------------------------------------------------------*
*       文件选择搜索帮助
*----------------------------------------------------------------------*
FORM sub_get_filename USING VALUE(i_modeTYPE c
                    CHANGING VALUE(o_filenameTYPE c.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mask             ',EXCEL FILE,*.XLS;*.XLSX;'
      mode             i_mode
    IMPORTING
      filename         o_filename
    EXCEPTIONS
      inv_winsys       1
      no_batch         2
      selection_cancel 3
      selection_error  4
      OTHERS           5.

ENDFORM.                    " SUB_GET_FILENAME

*&---------------------------------------------------------------------*
*&      FORM SUB_PROCESS_DATA
*&---------------------------------------------------------------------*
*       上传数据
*----------------------------------------------------------------------*
FORM sub_process_data USING VALUE(i_filenameTYPE c
                   CHANGING VALUE(ot_dataTYPE tab_type_line.

  DATA l_exist    TYPE c,
         l_filename LIKE rlgrap-filename,
         it_raw     TYPE truxs_t_text_data.

  REFRESH ot_data.

  CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
    EXPORTING
      fname i_filename
    IMPORTING
      exist l_exist.

  IF sy-subrc NE 0.
    MESSAGE '文件不存在!' TYPE 'E'.
  ENDIF.

  l_filename i_filename.
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        'X'
      i_tab_raw_data       it_raw
      i_filename           l_filename
    TABLES
      i_tab_converted_data ot_data[]
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.

  CHECK ot_data[] IS NOT INITIAL.

ENDFORM.                    "SUB_PROCESS_DATA

*&---------------------------------------------------------------------*
*&      Form  SUB_MODIFY_DATA
*&---------------------------------------------------------------------*
*       更新数据
*----------------------------------------------------------------------*
FORM sub_modify_data USING VALUE(it_dataTYPE tab_type_line.
  DATA ls_data     TYPE type_line,
         lt_doc      TYPE STANDARD TABLE OF bapi_doc_structure,
         ls_doc      TYPE bapi_doc_structure,
         lt_messages TYPE STANDARD TABLE OF messages.

  CALL FUNCTION 'CSAP_DOC_BOM_DELETE'
    EXPORTING
      document           '10000000006'
      doc_type           'DRW'
      doc_part           '000'
      doc_vers           '00'
      fl_no_change_doc   'X'
      fl_commit_and_wait 'X'
    EXCEPTIONS
      error              1.

  LOOP AT it_data INTO ls_data.
    ls_doc-documenttype ls_data-dokar.
    ls_doc-documentnumber ls_data-doknr.
    ls_doc-documentpart ls_data-doktl.
    ls_doc-documentversion ls_data-dokvr.
    APPEND ls_doc TO lt_doc.
  ENDLOOP.

  CALL FUNCTION 'API_DOCUMENT_SAVE_BOM'
    EXPORTING
      pf_dokar             'DRW'
      pf_doknr             '10000000006'
      pf_doktl             '000'
      pf_dokvr             '00'
    TABLES
      pt_documentstructure lt_doc
      pt_messages          lt_messages
    EXCEPTIONS
      error                1
      OTHERS               2.
  IF sy-subrc 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    MESSAGE '导入成功!' TYPE 'S'.
  ENDIF.
ENDFORM.                    " SUB_MODIFY_DATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值