本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。
我接到的需求就是客户已经根据IDOC 生成了内向交货单,希望abap做一个批导,
将交货单上的数量进行打包,并且分配serial no
首先我们先来分析什么是HU(handling unit)
HU就是包装单元即包装好的物料
一个包装单元包含包装物料(可以理解为托盘) 被包装物料(机器)
Serial no 就是序列号,可以理解为汽车的车架号,每台都是唯一
所以一个HU 里面包了多少个机器,就可以分配多少个serial no
一个交货单里面有多少台数量,那么我们可以根据换算关系打包多少个HU
前台的操作步骤就是创建完交货单之后,点击包装(pack),然后根据换算关系,打包hu,分配serial no
查阅资料之后,我发现可以将以上步骤拆开做,首先HU02创建HU,然后将HU分配给已经存在的交货单。
HU02对应的bapi:BAPI_HU_CREATE
DATA: LS_HEADERPROPOSAL TYPE BAPIHUHDRPROPOSAL.
DATA: LT_PROPITEM TYPE STANDARD TABLE OF BAPIHUITMPROPOSAL.
DATA: LS_PROPITEM TYPE BAPIHUITMPROPOSAL.
DATA: LT_SERIALNO TYPE STANDARD TABLE OF BAPIHUITMSERIALNO.
DATA: LS_SERIALNO TYPE BAPIHUITMSERIALNO.
DATA: LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.
DATA: LS_RETURN TYPE BAPIRET2.
DATA: LS_HUHEADER TYPE BAPIHUHEADER.
DATA: LV_HUKEY TYPE BAPIHUKEY-HU_EXID.
LS_HEADERPROPOSAL-PACK_MAT = P_MATNR. "包装物料
LS_HEADERPROPOSAL-HU_STATUS_INIT = 'A'. "planing 只有计划hu才能assign
"LS_HEADERPROPOSAL-EXT_ID_HU_2 = ''. "如果有的话,对应外部系统的hu
LS_HEADERPROPOSAL-TOTAL_WGHT = LV_MENGE.
LS_PROPITEM-HU_ITEM_TYPE = '1'. "Material item
LS_PROPITEM-MATERIAL = LS_PALLATE-MATNR. "Mandatory-entry field for material items and auxiliary packaging-material items.
LS_PROPITEM-PACK_QTY = LV_MENGE. "May only be set for material items and describes the quantity that is to be packed in the base unit of measure. Mandatory-entry field for material items.
LS_PROPITEM-BASE_UNIT_QTY = GS_LIPS-MEINS.
LS_PROPITEM-PLANT = GS_LIPS-WERKS.
LS_PROPITEM-NO_OF_SERIAL_NUMBERS = LV_ANZSN. "这个数量必须等于被包装物料号
"根据序列号数量去 传入徐磊好
"给托盘绑定序列号
LS_SERIALNO-ROW_INDEX = 1.
LS_SERIALNO-SERIALNO = GS_DATA-SERNR.
APPEND LS_SERIALNO TO LT_SERIALNO.
CALL FUNCTION 'BAPI_HU_CREATE'
EXPORTING
HEADERPROPOSAL = LS_HEADERPROPOSAL
IMPORTING
HUHEADER = LS_HUHEADER
HUKEY = LV_HUKEY
TABLES
ITEMSPROPOSAL = LT_PROPITEM
ITEMSSERIALNO = LT_SERIALNO
RETURN = LT_RETURN
* HUITEM =
* CWM_ITEMSPROPOSAL =
* CWM_HUITEM =
.
第二步将已经创建hu去分配给内向交货单。
DATA: LT_HAND_UNIT TYPE STANDARD TABLE OF HUM_REHANG_HU.
DATA: LS_HAND_UNIT TYPE HUM_REHANG_HU.
DATA: LS_VBKOK TYPE VBKOK.
"将序列号,托盘分配到 内向交货单上
LS_VBKOK-VBELN_VL = LS_TEMP-VBELN.
LS_HAND_UNIT-TOP_HU_EXTERNAL = LS_HUHEADER-HU_EXID. " External Handling Unit Identification of new HU
LS_HAND_UNIT-TOP_HU_INTERNAL = LS_HUHEADER-HU_ID. " Internal Handling Unit Number of new HU
LS_HAND_UNIT-VENUM = LS_HUHEADER-HU_ID. " Internal Handling Unit Number of new HU
APPEND LS_HAND_UNIT TO LT_HAND_UNIT.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
VBKOK_WA = LS_VBKOK
SYNCHRON = 'X'
NO_MESSAGES_UPDATE = ' '
UPDATE_PICKING = 'X'
COMMIT = 'X'
DELIVERY = LS_TEMP-VBELN
NICHT_SPERREN = 'X'
TABLES
IT_HANDLING_UNITS = LT_HAND_UNIT
PROT = LT_PROTT
EXCEPTIONS
EF_ERROR_ANY_0 = 1
EF_ERROR_IN_ITEM_DELETION_0 = 2
EF_ERROR_IN_POD_UPDATE_0 = 3
EF_ERROR_IN_INTERFACE_0 = 4
EF_ERROR_IN_GOODS_ISSUE_0 = 5
EF_ERROR_IN_FINAL_CHECK_0 = 6
EF_ERROR_PARTNER_UPDATE = 7
EF_ERROR_SERNR_UPDATE = 8
ERROR_MESSAGE = 9
OTHERS = 10.