[BAPI]外向交货单按批次拆分[BAPI_OUTB_DELIVERY_CHANGE]

下面介绍SAP SD的销售订单外向交货单按批次拆分(Batch-Managed),包括前台操作和调用bapi  ‘BAPI_OUTB_DELIVERY_CHANGE’ 实现。

1, 前台操作

按批次拆分操作:

外向交货单Tcode: VL02n

选中10行项目,点击‘批次拆分’按钮,填写批次后,回车,会将项目号和库位自动带出(视具体配置而定)

点保存后,原来航项目10数量自动变更,变成0.

删除批次拆分操作:

选中刚才创建的拆分项目90001和90002,点删除按钮。

10行项目数量会自动更新,重新变成3

2, BAPI实现

完整代码:

其中

LW_ITEM_DATA-USEHIERITM      = '1'.

查看了domain中的固定值:‘1’代表Batch Subitem

REPORT ztest_bapi_sobitch.

PARAMETERS p_vbeln TYPE vbeln_vl DEFAULT '8000003765'.

"测试批次拆分
DATA:
  lit_header_partner   LIKE TABLE OF bapidlvpartnerchg           , "交货:合作伙伴更改
  lit_header_deadlines LIKE TABLE OF bapidlvdeadln               , "交货截止日期
  lit_item_data        LIKE TABLE OF bapiobdlvitemchg            , "更改外向交货拣配数据项目等级
  lit_item_control     LIKE TABLE OF bapiobdlvitemctrlchg        , "外向交货项目级别控制数据
  lit_ret           LIKE TABLE OF bapiret2   WITH HEADER LINE , "返回参数
  lit_item_data_spl    LIKE TABLE OF /spe/bapiobdlvitemchg       , "更改向外交货拣配数据项目等级(SPE)
  is_header_data      LIKE          bapiobdlvhdrchg             , "更改外向交货拣配数据表头等级
  is_header_control   LIKE          bapiobdlvhdrctrlchg         , "外向交货标题级别控制数据
  iv_delivery         LIKE          bapiobdlvhdrchg-deliv_numb  . "交货

DATA:
  lwa_header_partner   LIKE          bapidlvpartnerchg           , "交货:合作伙伴更改
  lwa_header_deadlines LIKE          bapidlvdeadln               , "交货截止日期
  lwa_item_data        LIKE          bapiobdlvitemchg            , "更改外向交货拣配数据项目等级
  lwa_item_control     LIKE          bapiobdlvitemctrlchg        , "外向交货项目级别控制数据
  lwa_return           LIKE          bapiret2                    . "返回参数


DATA: l_techn_control  TYPE bapidlvcontrol.
DATA:
  ls_item         TYPE bapiobdlvitemchg,
  ls_item_t       TYPE bapiobdlvitemchg,
  ls_item_control TYPE bapiobdlvitemctrlchg,
  ls_deadlines    TYPE bapidlvdeadln.

iv_delivery = p_vbeln. "交货单号



"头信息
is_header_data-deliv_numb     = p_vbeln. "交货单号
is_header_control-deliv_numb  = p_vbeln.

"修改原10行项目数量
CLEAR lwa_item_data.
lwa_item_data-deliv_numb     = p_vbeln.
lwa_item_data-deliv_item     = 10.      "原行项目
lwa_item_data-dlv_qty        = 1.
lwa_item_data-dlv_qty_imunit = 1.
lwa_item_data-base_uom       = 'TO'.    "基本单位
lwa_item_data-sales_unit     = 'TO'.    "销售单位

lwa_item_data-fact_unit_nom   = 1.      "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = 1.      "销售数量转换为 SKU 的值(除数)

APPEND lwa_item_data TO lit_item_data .

CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = 10.       "原行项目
lwa_item_control-chg_delqty = 'X'.      "数量修改标志

APPEND lwa_item_control TO lit_item_control.



"新拆分的批次
CLEAR lwa_item_data.
lwa_item_data-deliv_numb = p_vbeln.
lwa_item_data-deliv_item = '900001'.       "拆分后的新行项目
lwa_item_data-hieraritem = 10.             "上级行项目
lwa_item_data-batch      = 'YS91480001'.   "新批次
lwa_item_data-dlv_qty    = 1.              "自己重新计算拆分后的数量,
lwa_item_data-dlv_qty_imunit = 1.
lwa_item_data-fact_unit_nom   = 1.       "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = 1.       "销售数量转换为 SKU 的值(除数)
lwa_item_data-base_uom        = 'TO'.    "基本单位
lwa_item_data-sales_unit      = 'TO'.    "销售单位
lwa_item_data-usehieritm      = '1'.

APPEND lwa_item_data TO lit_item_data.


CLEAR lwa_item_data.
lwa_item_data-deliv_numb = p_vbeln.
lwa_item_data-deliv_item = '900002'.    "拆分后的新行项目
lwa_item_data-hieraritem = 10.          "上级行项目
lwa_item_data-batch      = 'YS91480002'."新批次
lwa_item_data-dlv_qty    = 1.
lwa_item_data-dlv_qty_imunit = 1.

lwa_item_data-fact_unit_nom   = 1.       "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = 1.       "销售数量转换为 SKU 的值(除数)
lwa_item_data-base_uom        = 'TO'.    "基本单位
lwa_item_data-sales_unit      = 'TO'.    "销售单位
lwa_item_data-usehieritm      = '1'.

APPEND lwa_item_data TO lit_item_data.


CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = '900001'. "拆分后的新行项目
lwa_item_control-chg_delqty = 'X'.      "数量修改标志
APPEND lwa_item_control TO lit_item_control  .

CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = '900002'."拆分后的新行项目
lwa_item_control-chg_delqty = 'X'.     "数量修改标志
APPEND lwa_item_control TO lit_item_control  .

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data      = is_header_data
    header_control   = is_header_control
    delivery         = iv_delivery
  TABLES
    header_partner   = lit_header_partner
    header_deadlines = lit_header_deadlines
    item_data        = lit_item_data
    item_control     = lit_item_control
    return           = lit_ret
*   ITEM_DATA_SPL    = IT_ITEM_DATA_SPL
  .
DATA: l_msg TYPE string.

IF lit_ret[] IS INITIAL.
  COMMIT WORK AND WAIT.
  WRITE:/ '批次拆分成功'.
  RETURN.
ENDIF.

LOOP AT lit_ret WHERE type = 'E'.
  CLEAR l_msg.
  MESSAGE ID  lit_ret-id
      TYPE   'E'
      NUMBER lit_ret-number
      WITH   lit_ret-message_v1
             lit_ret-message_v2
             lit_ret-message_v3
             lit_ret-message_v4
      INTO   l_msg.

  WRITE:/ l_msg.

ENDLOOP.

选择画面:

3, 保存批次数据库表

外向交货单批次的相关数据保存在表LIPS中,

LIPS-UECHA:批次拆分项目的上层项目

以上面的数据为例:

LIKP

LIPS

VBFA: 销售凭证流

以上。

posted @ 2019-08-30 16:05  真的是很难  阅读(2812)  评论(0编辑  收藏  举报