SAP创建和修改交货单BAPI

SAP创建和修改交货单BAPI

1.根据采购订单->内向交货单

创建

此BAPI会出现物料号为空的情况
*

  • LW_HEADER-DELIV_DATE = SY-DATUM.
  • LT_DETAIL-PO_NUMBER = US_LIPS-VGBEL.
  • LT_DETAIL-PO_ITEM = US_LIPS-VGPOS.
  • LT_DETAIL-DELIV_QTY = U_DATA-LFIMG.
  • LT_DETAIL-UNIT = US_LIPS-VRKME.
  • APPEND LT_DETAIL.
  • CALL FUNCTION ‘BBP_INB_DELIVERY_CREATE’
  • EXPORTING
  •  IS_INB_DELIVERY_HEADER = LW_HEADER
    
  • IMPORTING
  •  EF_DELIVERY            = LV_VBELN
    
  • TABLES
  •  IT_INB_DELIVERY_DETAIL = LT_DETAIL
    
  •  RETURN                 = LT_RETURN.
    

推荐以下BAPI
LS_REQ-ID = ‘1’.
LS_REQ-DOCUMENT_NUMB = US_LIPS-VGBEL.
LS_REQ-DOCUMENT_ITEM = US_LIPS-VGPOS.
SELECT SINGLE LGORT FROM EKPO INTO @DATA(L_LGORT)
WHERE EBELN = @US_LIPS-VGBEL AND EBELP = @US_LIPS-VGPOS.
IF SY-SUBRC = 0.
LS_REQ-STGE_LOC = L_LGORT.
ENDIF.
LS_REQ-EXTDELV_NO = ‘’.
LS_REQ-QUANTITY_BASE__UOM = U_DATA-LFIMG.
LS_REQ-DELIVERY_DATE = SY-DATUM.
LS_REQ-DOCUMENT_TYPE = ‘B’. "B - PO,L - DN,A - SALES ORDER
APPEND LS_REQ TO LT_REQ.

  • 调用BAPI创建内向交货单
    CALL FUNCTION ‘BAPI_DELIVERYPROCESSING_EXEC’
    TABLES
    REQUEST = LT_REQ
    CREATEDITEMS = LT_RESULT
    RETURN = LT_RETURN.

    READ TABLE LT_RESULT INDEX 1.
    IF SY-SUBRC EQ 0.
    LV_VBELN = LT_RESULT-DOCUMENT_NUMB.
    ENDIF.

修改

*查询原始路线
SELECT SINGLE ROUTE,VSART,LFDAT,WADAT,VSBED INTO @DATA(LW_LIKP) FROM LIKP WHERE VBELN = @U_DATA-VBELN.
IF SY-SUBRC EQ 0 AND LW_LIKP-ROUTE IS NOT INITIAL.
LW_HEADER-ROUTE = LW_LIKP-ROUTE.

  • 抬头
    LS_HEAD-DELIV_NUMB = LV_VBELN.
    LS_HEADX-DELIV_NUMB = LV_VBELN.

    LS_HEAD-ROUTE = LW_LIKP-ROUTE.
    LS_HEADX-ROUTE_FLG = ABAP_TRUE.
    
    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
      EXPORTING
        HEADER_DATA    = LS_HEAD
        HEADER_CONTROL = LS_HEADX
        DELIVERY       = LV_VBELN
      TABLES
        RETURN         = LT_RETURN1.
    

    或者

    • 修改数量
  • 抬头
    LS_HEAD-DELIV_NUMB = US_LIPS-VBELN.
    LS_HEADX-DELIV_NUMB = US_LIPS-VBELN.

  • 行项目
    LS_ITEM-DELIV_NUMB = US_LIPS-VBELN.
    LS_ITEM-DELIV_ITEM = US_LIPS-POSNR.
    LS_ITEM-DLV_QTY = US_LIPS-LFIMG - U_DATA-LFIMG. "原交货单新数量= 原交货单老数量 - 该行拆分数量
    LS_ITEM-SALES_UNIT = US_LIPS-VRKME.
    SELECT SINGLE UMREZ UMREN
    INTO (LS_ITEM-FACT_UNIT_NOM,LS_ITEM-FACT_UNIT_DENOM)
    FROM MARM
    WHERE MATNR = US_LIPS-MATNR "销售单位一定要先在主数据维护
    AND MEINH = LS_ITEM-SALES_UNIT.
    APPEND LS_ITEM TO LT_ITEM.
    LS_ITEMX-DELIV_NUMB = US_LIPS-VBELN.
    LS_ITEMX-DELIV_ITEM = US_LIPS-POSNR.
    LS_ITEMX-CHG_DELQTY = ‘X’."修改交货数量
    APPEND LS_ITEMX TO LT_ITEMX.

    CALL FUNCTION ‘BAPI_INB_DELIVERY_CHANGE’
    EXPORTING
    HEADER_DATA = LS_HEAD
    HEADER_CONTROL = LS_HEADX
    DELIVERY = US_LIPS-VBELN
    TABLES
    ITEM_DATA = LT_ITEM
    ITEM_CONTROL = LT_ITEMX
    RETURN = LT_RETURN.

2.根据销售订单->外向交货单

创建

LS_SO-REF_DOC = US_LIPS-VGBEL.
LS_SO-REF_ITEM = US_LIPS-VGPOS.
LS_SO-DLV_QTY = U_DATA-LFIMG.
LS_SO-SALES_UNIT = US_LIPS-VRKME.
APPEND LS_SO TO LT_SO.

CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CREATE_SLS’
IMPORTING
DELIVERY = LV_VBELN
TABLES
SALES_ORDER_ITEMS = LT_SO
CREATED_ITEMS = LT_DN
RETURN = LT_RETURN.

修改

  • 修改数量

  • 抬头
    LS_HEAD-DELIV_NUMB = US_LIPS-VBELN.
    LS_HEADX-DELIV_NUMB = US_LIPS-VBELN.

  • 行项目
    LS_ITEM-DELIV_NUMB = US_LIPS-VBELN.
    LS_ITEM-DELIV_ITEM = US_LIPS-POSNR.
    LS_ITEM-DLV_QTY = US_LIPS-LFIMG - U_DATA-LFIMG. "原交货单新数量= 原交货单老数量 - 该行拆分数量
    LS_ITEM-SALES_UNIT = US_LIPS-VRKME.
    SELECT SINGLE UMREZ UMREN
    INTO (LS_ITEM-FACT_UNIT_NOM,LS_ITEM-FACT_UNIT_DENOM)
    FROM MARM
    WHERE MATNR = US_LIPS-MATNR "销售单位一定要先在主数据维护
    AND MEINH = LS_ITEM-SALES_UNIT.
    APPEND LS_ITEM TO LT_ITEM.
    LS_ITEMX-DELIV_NUMB = US_LIPS-VBELN.
    LS_ITEMX-DELIV_ITEM = US_LIPS-POSNR.
    LS_ITEMX-CHG_DELQTY = ‘X’."修改交货数量
    APPEND LS_ITEMX TO LT_ITEMX.

    CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CHANGE’
    EXPORTING
    HEADER_DATA = LS_HEAD
    HEADER_CONTROL = LS_HEADX
    DELIVERY = US_LIPS-VBELN
    TABLES
    ITEM_DATA = LT_ITEM
    ITEM_CONTROL = LT_ITEMX
    RETURN = LT_RETURN.

3.根据采购订单->外向交货单

创建

LS_STO-REF_DOC = US_LIPS-VGBEL.
LS_STO-REF_ITEM = US_LIPS-VGPOS.
LS_STO-DLV_QTY = U_DATA-LFIMG.
LS_STO-SALES_UNIT = US_LIPS-VRKME.
APPEND LS_STO TO LT_STO.

SELECT SINGLE VSTEL INTO @LV_VSTEL
FROM EKPV
WHERE EBELN = @US_LIPS-VGBEL
AND EBELP = @US_LIPS-VGPOS.

CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CREATE_STO’
EXPORTING
SHIP_POINT = LV_VSTEL
IMPORTING
DELIVERY = LV_VBELN
TABLES
STOCK_TRANS_ITEMS = LT_STO
CREATED_ITEMS = LT_DN
RETURN = LT_RETURN.

修改

*查询原始路线
SELECT SINGLE ROUTE,VSART,WADAT,LFDAT,VSBED INTO @DATA(LW_LIKP) FROM LIKP WHERE VBELN = @U_DATA-VBELN.
IF SY-SUBRC EQ 0 AND LW_LIKP-ROUTE IS NOT INITIAL.

  • 抬头
    LS_HEAD-DELIV_NUMB = LV_VBELN.
    LS_HEADX-DELIV_NUMB = LV_VBELN.

    LS_HEAD-ROUTE = LW_LIKP-ROUTE.
    LS_HEADX-ROUTE_FLG = ABAP_TRUE.
    
    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
      EXPORTING
        HEADER_DATA    = LS_HEAD
        HEADER_CONTROL = LS_HEADX
        DELIVERY       = LV_VBELN
      TABLES
        RETURN         = LT_RETURN.
    
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在ABAP中,可以使用BAPI创建交货单。 具体步骤如下: 1. 首先,需要使用BAPI "BAPI_OUTB_DELIVERY_CREATEFROMDAT2"来创建交货单。 2. 然后,需要准备所需的参数。具体来说,需要准备的参数包括: - 订单号(ORDER_NO) - 客户(CUSTOMER) - 工厂(PLANT) - 库存地点(STORE_LOC) - 销售组织(SALES_ORG) - 分销渠道(DISTR_CHAN) - 交货日期(DELIV_DATE) 3. 然后,可以调用BAPI创建交货单。具体来说,可以使用以下代码: CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATEFROMDAT2' EXPORTING order_no = ORDER_NO customer = CUSTOMER plant = PLANT store_loc = STORE_LOC sales_org = SALES_ORG distr_chan = DISTR_CHAN deliv_date = DELIV_DATE IMPORTING delivery = DELIVERY TABLES return = RETURN. 4. 最后,可以检查BAPI调用的结果。如果返回值表(RETURN)中存在错误消息,则说明BAPI调用失败;否则,BAPI调用成功,交货单已经创建成功。 希望这些信息能够帮助你。如果你有其他疑问,欢迎继续提问。 ### 回答2: 在ABAP中,我们可以使用BAPI技术创建交货单。 首先,我们需要使用事务代码BAPI事务代码SE37,打开Function Builder。在Function Builder中,我们可以选择BAPI交货单提供的功能模块。 在功能模块搜索栏中,输入“BAPI_GOODSMVT_CREATE”并点击“Check”按钮。在搜索结果中找到该功能模块后,双击它,进入模块详细信息页面。 在功能模块的详细信息页面中,我们可以看到各种输入和输出参数。我们需要根据需求来正确填写这些参数,以创建所需的交货单。 在输入参数中,最重要的参数是“GOODSMVT_HEADER”和“GOODSMVT_ITEM”。这些参数定义了交货单的头部信息和项目信息。 在“GOODSMVT_HEADER”参数中,我们需要填写交货单的相关信息,如交货单类型、日期、移动类型等。 在“GOODSMVT_ITEM”参数中,我们需要填写交货单的项目信息,如物料号、数量批次信息等。 在输入参数填写完成后,我们可以点击“Test”按钮来测试该功能模块。系统会根据输入的参数运行该功能模块,并返回相应的输出结果。 如果一切都正常,我们可以将该功能模块集成到我们的ABAP程序中。在程序中调用该功能模块,并传递正确的参数值,即可创建交货单。 需要注意的是,我们还需要考虑异常情况的处理。在调用该功能模块时,我们可以检查返回的系统消息,以判断交货单是否成功创建。如果出现错误,我们可以根据系统消息来进行相应的错误处理。 总之,通过使用ABAP中的BAPI技术,我们可以方便地创建交货单,并通过正确填写参数值和处理异常情况来确保交货单的正确创建。 ### 回答3: ABAP是一种编程语言,用于SAP系统中的应用开发,包括创建交货单等业务处理。在ABAP中,可以使用一种称为BAPI(Business Application Programming Interface)的特殊功能来创建交货单。 要创建交货单BAPI,首先需要了解交货单的必要信息,如交货单号、客户、物料、数量等。然后使用合适的BAPI函数模块,如'BAPI_OUTB_DELIVERY_CREATE_SLS'或'BAPI_OUTB_DELIVERY_CREATE_STO'等。 在ABAP程序中,可以使用以下步骤来创建交货单BAPI: 1. 首先,声明和定义必要的变量,如交货单号、客户、物料等。根据需求,可能还需要其他辅助变量。 2. 调用合适的BAPI函数模块,传递必要的输入参数。例如,使用'BAPI_OUTB_DELIVERY_CREATE_SLS'来创建销售交货单,传递交货单号、客户、物料和数量等信息。 3. 处理返回的结果。BAPI函数模块通常会返回一个结构或表,其中包含创建交货单的结果。可以根据需要对返回结果进行处理,如输出错误信息或记录成功创建交货单号。 4. 根据实际情况,可能还需要其他的处理步骤,如更新交货单的状态或进行后续业务操作。 总之,使用ABAP语言编写程序来创建交货单BAPI可以简化企业内部的业务流程,并提高工作效率。通过合理的参数传递和结果处理,我们可以实现快速、准确地创建交货单,并满足业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值