欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

SAP BAPI_PR_CREATE 创建采购申请(含自定义字段)

创建采购申请一般有两个函数:BAPI_PR_CREATE 和 BAPI_REQUISITION_CREATE。

使用BAPI_REQUISITION_CREATE创建常规的标准的采购申请比较方便,代码如下

FUNCTION ZFM_OA2SAP_CREAT_PR.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(ZBANFN) TYPE  BANFN
*"     REFERENCE(E_SUCC) TYPE  CHAR1
*"     REFERENCE(E_MESSAGE) TYPE  MSGTX
*"  TABLES
*"      INPUT STRUCTURE  ZSCMS008
*"----------------------------------------------------------------------
  DATA: LT_ITEM   TYPE TABLE OF BAPIEBANC,
        LS_ITEM   TYPE BAPIEBANC,
        LT_ACC    TYPE TABLE OF BAPIEBKN,
        LS_ACC    TYPE BAPIEBKN,
        LT_RETURN TYPE TABLE OF BAPIRETURN,
        LT_TEXT   TYPE TABLE OF BAPIEBANTX,
        LS_TEXT   TYPE BAPIEBANTX.
  DATA:LS_MESSAGE TYPE ZTCMS008-ZMESSAGE.
  DATA: LT_EXT TYPE TABLE OF BAPIPAREX,
        LS_EXT TYPE BAPIPAREX,
        LS_TE  TYPE BAPI_TE_REQUISITION_ITEM.   "<— 增强结构
  DATA: C_MATERIAL TYPE BAPIEBANC-MATERIAL.
  DATA: C_LIFNR TYPE BAPIEBANC-DES_VENDOR.
  DATA: LV_PR_NO TYPE BAPIEBANC-PREQ_NO.
  DATA: I_COUNT TYPE I VALUE 10.
  DATA:WA_ZTCMS008 TYPE ZSCMS008.
  DATA:GT_ZTCMS008 TYPE TABLE OF ZTCMS008.
  DATA:GS_ZTCMS008 TYPE  ZTCMS008.
  DATA:L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB.
  DATA:LV_MSEHI TYPE T006A-MSEHI.
  LOOP AT INPUT INTO WA_ZTCMS008.
    "--------------------------------------------------
    " 1. 行项目数据
    "--------------------------------------------------
    LS_ITEM-PREQ_ITEM  = I_COUNT.               "行号
    LS_ITEM-DOC_TYPE   = WA_ZTCMS008-BSART.                  "凭证类型
    IF WA_ZTCMS008-ERNAM IS NOT INITIAL.
      LS_ITEM-CREATED_BY   = WA_ZTCMS008-ERNAM.                  "创建人
    ENDIF.
    LS_ITEM-PREQ_NAME   = WA_ZTCMS008-AFNAM.                  "申请人
    LS_ITEM-PREQ_DATE   = WA_ZTCMS008-ERDAT.                  "需求日期
    IF WA_ZTCMS008-MATNR IS NOT INITIAL.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ZTCMS008-MATNR
        IMPORTING
          OUTPUT = C_MATERIAL.
      LS_ITEM-MATERIAL   = C_MATERIAL.            "物料
    ELSE.
      LS_ITEM-MATERIAL   = ''.
    ENDIF.
    LS_ITEM-SHORT_TEXT   = WA_ZTCMS008-TXZ01.                   "文本
    LS_ITEM-QUANTITY   = WA_ZTCMS008-MENGE.                   "数量
    "单位内外码转换
    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
      EXPORTING
        INPUT    = WA_ZTCMS008-MEINS  "外码
        LANGUAGE = SY-LANGU
      IMPORTING
        OUTPUT   = LV_MSEHI.  "内码

    LS_ITEM-UNIT       = LV_MSEHI.                  "单位
    LS_ITEM-PLANT      = WA_ZTCMS008-WERKS.                "工厂
    LS_ITEM-MAT_GRP      = WA_ZTCMS008-MATKL.                "物料组
    LS_ITEM-PUR_GROUP  = WA_ZTCMS008-EKGRP.                 "采购组
    LS_ITEM-DELIV_DATE = WA_ZTCMS008-LFDAT.         "交货日期
    LS_ITEM-DEL_DATCAT_EXT = 'D'.         "交货日期种类
    LS_ITEM-ACCTASSCAT = WA_ZTCMS008-KNTTP.                   "科目分配类别
    LS_ITEM-ITEM_CAT = WA_ZTCMS008-PSTYP."项目分配类别
    LS_ITEM-STORE_LOC = WA_ZTCMS008-LGORT."存储地点
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA_ZTCMS008-LIFNR
      IMPORTING
        OUTPUT = C_LIFNR.
    LS_ITEM-DES_VENDOR = C_LIFNR."所需供应商
    APPEND LS_ITEM TO LT_ITEM.

    "--------------------------------------------------
    " 2. 科目分配(成本中心)
    "--------------------------------------------------
    LS_ACC-PREQ_ITEM  = I_COUNT.
    LS_ACC-G_L_ACCT  = WA_ZTCMS008-SAKTO.
    LS_ACC-COST_CTR   = WA_ZTCMS008-KOSTL.
    LS_ACC-ASSET_NO   = WA_ZTCMS008-ANLN1.
    LS_ACC-ORDER_NO   = WA_ZTCMS008-AUFNR.
    APPEND LS_ACC TO LT_ACC.

    "--------------------------------------------------
    " 3. 长文本(可选)
    "--------------------------------------------------
*    LS_TEXT-PREQ_ITEM = '00010'.
*    LS_TEXT-TEXT_ID   = 'B01'.
*    LS_TEXT-TEXT_LINE = '请优先使用库存'.
*    APPEND LS_TEXT TO LT_TEXT.

    "--------------------------------------------------
    " 4. 增强字段赋值
    "--------------------------------------------------
    LS_TE-PREQ_ITEM   = I_COUNT.
    LS_TE-ZOADJBH = WA_ZTCMS008-ZOADJBH.        "<— 自定义字段
    LS_TE-ZOAHEADERID = WA_ZTCMS008-ZOAHEADERID.        "<— 自定义字段
    LS_TE-ZOAITEMID = WA_ZTCMS008-ZOAITEMID.        "<— 自定义字段
    LS_EXT-STRUCTURE  = 'BAPI_TE_REQUISITION_ITEM'.
    LS_EXT-VALUEPART1 = LS_TE.
    APPEND LS_EXT TO LT_EXT.

    WA_ZTCMS008-BNFPO = I_COUNT.
    MOVE-CORRESPONDING WA_ZTCMS008 TO GS_ZTCMS008.
    APPEND GS_ZTCMS008 TO GT_ZTCMS008.
    CLEAR:WA_ZTCMS008,LS_ITEM.
    I_COUNT = I_COUNT + 10.
  ENDLOOP.

  "--------------------------------------------------
  " 5. 调用 BAPI
  "--------------------------------------------------

  CALL FUNCTION 'BAPI_REQUISITION_CREATE'
    IMPORTING
      NUMBER                         = LV_PR_NO
    TABLES
      REQUISITION_ITEMS              = LT_ITEM
      REQUISITION_ACCOUNT_ASSIGNMENT = LT_ACC
      REQUISITION_ITEM_TEXT          = LT_TEXT
      EXTENSIONIN                    = LT_EXT
      RETURN                         = LT_RETURN.

  "--------------------------------------------------
  " 6. 结果处理
  "--------------------------------------------------
  LOOP AT LT_RETURN INTO DATA(LS_RET) WHERE TYPE CA 'AE'.
    LS_MESSAGE = LS_MESSAGE && LS_RET-MESSAGE.
    CLEAR:LS_RET.
  ENDLOOP.
  IF SY-SUBRC = 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT GT_ZTCMS008 ASSIGNING FIELD-SYMBOL(<FS_ZTCMS008>).
      <FS_ZTCMS008>-BANFN = LV_PR_NO.
      <FS_ZTCMS008>-ZMESSAGE = LS_MESSAGE.
      <FS_ZTCMS008>-ZDATE = SY-DATUM.
      <FS_ZTCMS008>-ZTIME = SY-UZEIT.
    ENDLOOP.
    ZBANFN = LV_PR_NO.
    E_SUCC = 'E'.
    E_MESSAGE = LS_MESSAGE.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = ABAP_TRUE.
    LOOP AT GT_ZTCMS008 ASSIGNING  <FS_ZTCMS008>.
      <FS_ZTCMS008>-BANFN = LV_PR_NO.
      <FS_ZTCMS008>-ZMESSAGE = |采购申请创建成功,PR号为:{ LV_PR_NO }|.
      <FS_ZTCMS008>-ZDATE = SY-DATUM.
      <FS_ZTCMS008>-ZTIME = SY-UZEIT.
    ENDLOOP.
    ZBANFN = LV_PR_NO.
    E_SUCC = 'S'.
    E_MESSAGE = |采购申请创建成功,PR号为:{ LV_PR_NO }|.
  ENDIF.

  IF GT_ZTCMS008 IS NOT INITIAL .
    TRY .
        MODIFY ZTCMS008 FROM TABLE GT_ZTCMS008.
        IF SY-SUBRC = 0.
          COMMIT WORK.
        ENDIF.
      CATCH CX_SY_OPEN_SQL_DB INTO L_ERROR .
        ROLLBACK WORK.
    ENDTRY.
  ENDIF.

ENDFUNCTION.

image

 

image

 

image

 但是这个函数创建有科目类别或者项目类别的采购申请会出现问题,所以会采用BAPI_PR_CREATE这个函数,代码如下

FUNCTION ZFM_OA2SAP_CREAT_PR_NEW.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(ZBANFN) TYPE  BANFN
*"     REFERENCE(E_SUCC) TYPE  CHAR1
*"     REFERENCE(E_MESSAGE) TYPE  MSGTX
*"  TABLES
*"      INPUT STRUCTURE  ZSCMS008
*"----------------------------------------------------------------------
  DATA:LS_MESSAGE TYPE ZTCMS008-ZMESSAGE.
  DATA: LT_EXT TYPE TABLE OF BAPIPAREX,
        LS_EXT TYPE BAPIPAREX,
        LS_TE  TYPE BAPI_TE_MEREQITEM.   "<— 增强结构
  DATA:LT_EXTX TYPE TABLE OF BAPIPAREX,
       LS_EXTX TYPE BAPIPAREX,
       LS_TEX  TYPE BAPI_TE_MEREQITEMX.   "<— 增强结构更新
  DATA: C_MATERIAL TYPE BAPIEBANC-MATERIAL.
  DATA: C_LIFNR TYPE BAPIEBANC-DES_VENDOR.
  DATA: I_COUNT TYPE I VALUE 10.
  DATA: I_COUNT_KM TYPE I VALUE 1.
  DATA:WA_ZTCMS008 TYPE ZSCMS008.
  DATA:GT_ZTCMS008 TYPE TABLE OF ZTCMS008.
  DATA:GS_ZTCMS008 TYPE  ZTCMS008.
  DATA:L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB.
  DATA:LV_MSEHI TYPE T006A-MSEHI.
  DATA:LV_BANFN      TYPE EBAN-BANFN.                   "定义变量
  DATA:LV_BNFPO      TYPE EBAN-BNFPO.                   "定义变量
  DATA:LS_PRITEM     TYPE BAPIMEREQITEMIMP.             "定义工作区
  DATA:LS_PRITEMX    TYPE BAPIMEREQITEMX.               "定义工作区
  DATA:LT_PRITEM     TYPE TABLE OF BAPIMEREQITEMIMP.    "定义内表
  DATA:LT_PRITEMX    TYPE TABLE OF BAPIMEREQITEMX.      "定义内表
  DATA:LS_HEAD       TYPE BAPIMEREQHEADER.              "定义工作区
  DATA:LS_HEADX      TYPE BAPIMEREQHEADERX.             "定义工作区
  DATA:LT_RETURN TYPE TABLE OF BAPIRET2.            "定义内表
  DATA:LS_PRACCOUNT  TYPE BAPIMEREQACCOUNT.             "定义工作区
  DATA:LS_PRACCOUNTX TYPE BAPIMEREQACCOUNTX.            "定义工作区
  DATA:LT_PRACCOUNT  TYPE TABLE OF BAPIMEREQACCOUNT.    "定义内表
  DATA:LT_PRACCOUNTX TYPE TABLE OF BAPIMEREQACCOUNTX.   "定义内表


  LOOP AT INPUT INTO WA_ZTCMS008.
    "抬头数据
    LS_HEAD-PR_TYPE           = WA_ZTCMS008-BSART.                      "直接给BAPI入参赋值-采购申请类型
    LS_HEADX-PR_TYPE         = 'X'.                         "直接给BAPI入参赋值-采购申请类型-标记
    " 明细行项目数据
    LS_PRITEM-PREQ_ITEM       = I_COUNT.                   "直接给BAPI入参赋值-采购申请类型行项目号
*    IF WA_ZTCMS008-ERNAM IS NOT INITIAL.
*      LS_PRITEM-PREQ_NAME     = WA_ZTCMS008-ERNAM.                    "直接给BAPI入参赋值-采购申请创建人取系统ID
*    ENDIF.
    LS_PRITEM-PREQ_NAME       = WA_ZTCMS008-AFNAM.                  "申请人
    IF WA_ZTCMS008-MATNR IS NOT INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = WA_ZTCMS008-MATNR
        IMPORTING
          OUTPUT = C_MATERIAL.
      LS_PRITEM-MATERIAL        = C_MATERIAL.            "物料
    ELSE.
      LS_PRITEM-MATERIAL        = ''.
    ENDIF.
    LS_PRITEM-PLANT           = WA_ZTCMS008-WERKS.                      "直接给BAPI入参赋值-工厂
    LS_PRITEM-STORE_LOC       = WA_ZTCMS008-LGORT."存储地点
    LS_PRITEM-QUANTITY        = WA_ZTCMS008-MENGE.                   "数量
    "单位内外码转换
    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
      EXPORTING
        INPUT    = WA_ZTCMS008-MEINS  "外码
        LANGUAGE = SY-LANGU
      IMPORTING
        OUTPUT   = LV_MSEHI.  "内码

    LS_PRITEM-UNIT            = LV_MSEHI.                  "单位

    LS_PRITEM-DELIV_DATE      = WA_ZTCMS008-LFDAT.         "交货日期
    LS_PRITEM-PREQ_DATE       = WA_ZTCMS008-ERDAT.                  "需求日期
    LS_PRITEM-SHORT_TEXT      = WA_ZTCMS008-TXZ01.                   "文本
    LS_PRITEM-PUR_GROUP       = WA_ZTCMS008-EKGRP.                       "直接给BAPI入参赋值-采购组
    LS_PRITEM-MATL_GROUP      = WA_ZTCMS008-MATKL.                "物料组
    LS_PRITEM-DEL_DATCAT_EXT  = 'D'.         "交货日期种类
    LS_PRITEM-ACCTASSCAT      = WA_ZTCMS008-KNTTP.                         "直接给BAPI入参赋值-科目分配类别
    LS_PRITEM-ITEM_CAT        = WA_ZTCMS008-PSTYP."项目分配类别
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA_ZTCMS008-LIFNR
      IMPORTING
        OUTPUT = C_LIFNR.
    LS_PRITEM-DES_VENDOR      = C_LIFNR."所需供应商
    APPEND LS_PRITEM TO LT_PRITEM.                        "将工作区ls_pritem赋值给内表lt_pritem

    LS_PRITEMX-PREQ_ITEM      = I_COUNT.                    "直接给BAPI入参赋值-标记
*    LS_PRITEMX-ERNAM          = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-MATERIAL       = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-PREQ_NAME      = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-PLANT          = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-STORE_LOC      = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-QUANTITY       = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-UNIT           = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-DELIV_DATE     = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-SHORT_TEXT     = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-PUR_GROUP      = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-MATL_GROUP     = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-DEL_DATCAT_EXT = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-ACCTASSCAT     = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-ITEM_CAT       = 'X'.                         "直接给BAPI入参赋值-标记
    LS_PRITEMX-DES_VENDOR     = 'X'.                         "直接给BAPI入参赋值-标记
    APPEND LS_PRITEMX TO LT_PRITEMX.                      "将工作区ls_pritemx赋值给内表lt_pritemx


    "科目分配
    LS_PRACCOUNT-PREQ_ITEM    = I_COUNT.                "直接给BAPI入参赋值-采购申请类型行项目号
    LS_PRACCOUNT-SERIAL_NO    = I_COUNT_KM.                    "直接给BAPI入参赋值-科目分配的序号
    LS_PRACCOUNT-GL_ACCOUNT   = |{ WA_ZTCMS008-SAKTO ALPHA = IN }|.
    LS_PRACCOUNT-COSTCENTER   = |{ WA_ZTCMS008-KOSTL ALPHA = IN }|.            "直接给BAPI入参赋值-成本中心
    LS_PRACCOUNT-ASSET_NO     = |{ WA_ZTCMS008-ANLN1 ALPHA = IN }|.          "直接给BAPI入参赋值-资产编号
    LS_PRACCOUNT-ORDERID      = |{ WA_ZTCMS008-AUFNR ALPHA = IN }|.           "直接给BAPI入参赋值-订单编号
    APPEND LS_PRACCOUNT TO LT_PRACCOUNT.                  "将工作区ls_pracccount赋值给内表lt_praccount


    LS_PRACCOUNTX-PREQ_ITEM   = I_COUNT.                 "直接给BAPI入参赋值-采购申请类型行项目号
    LS_PRACCOUNTX-SERIAL_NO   = I_COUNT_KM.                      "直接给BAPI入参赋值-科目分配的序号
    LS_PRACCOUNTX-GL_ACCOUNT  = 'X'.                       "直接给BAPI入参赋值-科目编号
    LS_PRACCOUNTX-COSTCENTER  = 'X'.                       "直接给BAPI入参赋值-成本中心
    LS_PRACCOUNTX-ASSET_NO    = 'X'.                      "直接给BAPI入参赋值-资产编号
    LS_PRACCOUNTX-ORDERID     = 'X'.                       "直接给BAPI入参赋值-订单编号
    APPEND LS_PRACCOUNTX TO LT_PRACCOUNTX.                "将工作区ls_praccountx赋值给内表lt_accountx



    "  增强字段赋值
    LS_TE-PREQ_ITEM   = I_COUNT.
    LS_TE-ZOADJBH = WA_ZTCMS008-ZOADJBH.        "<— 自定义字段
    LS_TE-ZOAHEADERID = WA_ZTCMS008-ZOAHEADERID.        "<— 自定义字段
    LS_TE-ZOAITEMID = WA_ZTCMS008-ZOAITEMID.        "<— 自定义字段
*    LS_EXT-STRUCTURE  = 'BAPI_TE_REQUISITION_ITEM'.  "BAPI_REQUISITION_CREATE用的这个
    LS_EXT-STRUCTURE  = 'BAPI_TE_MEREQITEM'."BAPI_PR_CREATE用到的是这个
    LS_EXT-VALUEPART1 = LS_TE.
    APPEND LS_EXT TO LT_EXT.

    "  增强字段赋值更新
    LS_TEX-PREQ_ITEM   = I_COUNT.
    LS_TEX-ZOADJBH = 'X'.        "<— 自定义字段
    LS_TEX-ZOAHEADERID = 'X'.        "<— 自定义字段
    LS_TEX-ZOAITEMID = 'X'.        "<— 自定义字段
    LS_EXT-STRUCTURE  = 'BAPI_TE_MEREQITEMX'."BAPI_PR_CREATE用到的是这个
    LS_EXT-VALUEPART1 = LS_TEX.
    APPEND LS_EXT TO LT_EXT.



*    "  增强字段赋值更新
*    LS_TEX-PREQ_ITEM   = I_COUNT.
*    LS_TEX-ZOADJBH = WA_ZTCMS008-ZOADJBH.        "<— 自定义字段
*    LS_TEX-ZOAHEADERID = WA_ZTCMS008-ZOAHEADERID.        "<— 自定义字段
*    LS_TEX-ZOAITEMID = WA_ZTCMS008-ZOAITEMID.        "<— 自定义字段
**    LS_EXT-STRUCTURE  = 'BAPI_TE_REQUISITION_ITEM'.  "BAPI_REQUISITION_CREATE用的这个
*    LS_EXTX-STRUCTURE  = 'BAPI_TE_MEREQITEMX'."BAPI_PR_CREATE用到的是这个
*    LS_EXTX-VALUEPART1 = LS_TEX.
*    APPEND LS_EXTX TO LT_EXTX.

    WA_ZTCMS008-BNFPO = I_COUNT.
    MOVE-CORRESPONDING WA_ZTCMS008 TO GS_ZTCMS008.
    APPEND GS_ZTCMS008 TO GT_ZTCMS008.
    CLEAR:WA_ZTCMS008,LS_PRITEM,LS_PRITEMX,LS_PRACCOUNT,LS_PRACCOUNTX,LS_TE,LS_EXT,LS_TEX.
    I_COUNT = I_COUNT + 10.
  ENDLOOP.

  "--------------------------------------------------
  " 调用 BAPI
  "--------------------------------------------------

  CALL FUNCTION 'BAPI_PR_CREATE'
    EXPORTING                                           "BAPI入参
      PRHEADER     = LS_HEAD
      PRHEADERX    = LS_HEADX
    IMPORTING                                           "BAPI出参
      NUMBER       = LV_BANFN
    TABLES                                              "表参数(入参)
      RETURN       = LT_RETURN
      PRITEM       = LT_PRITEM
      PRITEMX      = LT_PRITEMX
      PRACCOUNT    = LT_PRACCOUNT
      PRACCOUNTX   = LT_PRACCOUNTX
      EXTENSIONIN  = LT_EXT
      EXTENSIONOUT = LT_EXTX.


  "--------------------------------------------------
  " 结果处理
  "--------------------------------------------------
  LOOP AT LT_RETURN INTO DATA(LS_RET) WHERE TYPE CA 'AE'.
    LS_MESSAGE = LS_MESSAGE && LS_RET-MESSAGE.
    CLEAR:LS_RET.
  ENDLOOP.
  IF SY-SUBRC = 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT GT_ZTCMS008 ASSIGNING FIELD-SYMBOL(<FS_ZTCMS008>).
      <FS_ZTCMS008>-BANFN = LV_BANFN.
      <FS_ZTCMS008>-ZMESSAGE = LS_MESSAGE.
      <FS_ZTCMS008>-ZDATE = SY-DATUM.
      <FS_ZTCMS008>-ZTIME = SY-UZEIT.
    ENDLOOP.
    ZBANFN = LV_BANFN.
    E_SUCC = 'E'.
    E_MESSAGE = LS_MESSAGE.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = ABAP_TRUE.
    LOOP AT GT_ZTCMS008 ASSIGNING  <FS_ZTCMS008>.
      <FS_ZTCMS008>-BANFN = LV_BANFN.
      <FS_ZTCMS008>-ZMESSAGE = |采购申请创建成功,PR号为:{ LV_BANFN }|.
      <FS_ZTCMS008>-ZDATE = SY-DATUM.
      <FS_ZTCMS008>-ZTIME = SY-UZEIT.
    ENDLOOP.
    ZBANFN = LV_BANFN.
    E_SUCC = 'S'.
    E_MESSAGE = |采购申请创建成功,PR号为:{ LV_BANFN }|.
  ENDIF.

  IF GT_ZTCMS008 IS NOT INITIAL .
    TRY .
        MODIFY ZTCMS008 FROM TABLE GT_ZTCMS008.
        IF SY-SUBRC = 0.
          COMMIT WORK.
        ENDIF.
      CATCH CX_SY_OPEN_SQL_DB INTO L_ERROR .
        ROLLBACK WORK.
    ENDTRY.
  ENDIF.

ENDFUNCTION.

参数同上面的。

这里重点讲下自定义字段的增强及传入。

 

image

 双击屏幕出口

image

 下面两个增强结构要加入自定义字段

image

 如果使用的第一个函数的话,这里是不需要增加下面的结构,如果使用第二个函数,下面这个更新结构也要增加

image

 

image

 可以先创建,也可以先做出口功能

image

 

image

 

image

关键点:这个ZXM02O01程序要被包含在ZXM02ZZZ下才能正确生效,超重要!!!

 最后要在TOP建一个全局变量

image

 

posted @ 2025-09-24 11:03  萧静默  阅读(86)  评论(0)    收藏  举报