创建销售订单BAPI一些心得

2021-10-23 16:09发布


          点击此处--->   EasySAP.com 群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)

1.创建销售订单使用的BAPI

BAPI_SALESORDER_CREATEFROMDAT2

但是  BUSINESS OBJECT限制为 BUS2032

 

使用FM:

DATA          LV_OBJTYPE TYPE OJ_NAME .

LS_HEADER-SD_DOC_CAT为销售订单类型,即类型为:VBAK-VBTYP

   CALL FUNCTION 'SD_OBJECT_TYPE_DETERMINE'
    EXPORTING
      I_DOCUMENT_TYPE   LS_HEADER-SD_DOC_CAT
    IMPORTING
      E_BUSINESS_OBJECT LV_OBJTYPE
    EXCEPTIONS
      OTHERS            1.

如果LV_OBJTYPE = BUS2032

则可以使用BAPI_SALESORDER_CREATEFROMDAT2

如果其他的业务对象则使用FM: SD_SALESDOCUMENT_CREATE创建销售订单

 2.关于销售订单的增强使用

 参数 EXTENSIONIN 

举个例子,例如VBKD的数据  VBKD- TRATY  VBKD- TRMTYP

大家应该可以看出来VBKD 数据中, 虽然分为vbeln posnr  但是一般只会使用vbeln字段,posnr 为空,

此时,VBKD 数据 一般都可以在bapi参数

ORDER_HEADER_IN 找到,但是VBKD-  TRATY   却在bapi 中没有.

所以我们需要做增强.

首先 我们要确认使用 BAPE_VBAK 和BAPE_VBAKX两个结构

  LS_BAPIPAREX-STRUCTURE 'BAPE_VBAK'.

    LS_BAPE_VBAK-TRATY   LS_BAPISDHD1_VBKD-TRATY.
    LS_BAPE_VBAK-VSART   LS_BAPISDHD1_VBKD-VSART.
    LS_BAPE_VBAK-TRMTYP  LS_BAPISDHD1_VBKD-TRMTYP.
    LS_BAPE_VBAK-SDABW   LS_BAPISDHD1_VBKD-SDABW.

    LS_BAPIPAREX-VALUEPART1 LS_BAPE_VBAK.

    APPEND LS_BAPIPAREX TO ET_BAPIPAREX.

    LS_BAPIPAREX-STRUCTURE 'BAPE_VBAKX'.
    LS_BAPE_VBAKX-TRATY    CNS_X.
    LS_BAPE_VBAKX-VSART    CNS_X.
    LS_BAPE_VBAKX-TRMTYP   CNS_X.
    LS_BAPE_VBAKX-SDABW    CNS_X.

    LS_BAPIPAREX-VALUEPART1 LS_BAPE_VBAKX.

  其次:VBAKKOZ 需要增加TRATY . VBAKKOZX 也添加相应的控制字段TRATY type BAPIUPDATE

 然后请注意,

ORDER_HEADER_INX-UPDATEFLAG = SPACE . !! 这点很重要.详细逻辑请找:

 

SE38:FV45KFAK_VBAK_FUELLEN_VBAKKOM

 

补充:2016-09-27

模拟创建过去的销售订单的时候,交货单也应该交货在过去,但是出现报错.

认证研究了逻辑发现如下情况

首先 (数据库表TVAK)


1.配置要求

image.png


image.png

此字段逻辑:

image.png


其次 BAPISCHDL 中 有四个字段需要注意  EDATU MBDAT LDDAT WADAT 都要赋值过去时间

这样创建的销售订单vbep 数据 才会没有问题.

交货单选过去日期才会成功!      

 




赞赏支持