下面介绍SAP SD的销售订单外向交货单按批次拆分(Batch-Managed),包括前台操作和调用bapi ‘BAPI_OUTB_DELIVERY_CHANGE’ 实现。
1, 前台操作
按批次拆分操作:
外向交货单Tcode: VL02n
选中10行项目,点击‘批次拆分’按钮,填写批次后,回车,会将项目号和库位自动带出(视具体配置而定)
点保存后,原来航项目10数量自动变更,变成0.
删除批次拆分操作:
选中刚才创建的拆分项目90001和90002,点删除按钮。
10行项目数量会自动更新,重新变成3
2, BAPI实现
完整代码:
其中
1 |
LW_ITEM_DATA-USEHIERITM = '1'. |
查看了domain中的固定值:‘1’代表Batch Subitem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
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: 销售凭证流
以上。
发表评论