转自http://blog.sina.com.cn/s/blog_1647b3eff0102wi32.html

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.配置要求创建SO bapi-LMLPHP

创建SO bapi-LMLPHP

此字段逻辑:

创建SO bapi-LMLPHP

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

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

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

04-17 23:15