创建交货单有如下场景以及对应BAPI,如下:
1)根据销售订单 / 销售计划协议创建外向交货单,对应Tcode VL01N,调用BAPI_OUTB_DELIVERY_CREATE_SLS 或者 BAPI_DELIVERYPROCESSING_EXEC(REQUEST-DOCUMENT_TYPE = ‘A’ ”销售订单)
2)根据采购订单 / 采购计划协议创建内向交货单,对应Tcode VL31N,调用BAPI_DELIVERYPROCESSING_EXEC(REQUEST-DOCUMENT_TYPE = ‘B’ “采购订单)
3)根据公司间转储订单 / 采购计划协议创建外向交货单,对应Tcode VL10D,调用BAPI_OUTB_DELIVERY_CREATE_STO
4)根据公司间转储订单/ 采购计划协议的外向交货单创建内向交货单,对应外向交货单抬头的交货输出,配置输出类型SPED,对应处理程序 /SPE/STO_ID_PROCESSING 例程 STO_ID_CREATION
CLEAR SHIP_POINT.
SELECT SINGLE VSTEL INTO SHIP_POINT FROM TVSTZ WHERE WERKS = WA_HEAD-WERKS2.
IF SHIP_POINT IS INITIAL.
SHIP_POINT = WA_HEAD-WERKS2.
ENDIF.
LOOP AT IT_SHOW INTO WA_SHOW WHERE SEL = 'X' AND BANFN = WA_HEAD-BANFN.
CLEAR LS_ZSD_JHD_H.
LS_ZSD_JHD_H-VBELN2 = WA_SHOW-EBELN.
LS_ZSD_JHD_H-ZFYGS = WA_SHOW-ZFYGS.
LS_ZSD_JHD_H-ZFYGSCO = WA_SHOW-ZFYGSCO.
APPEND LS_ZSD_JHD_H TO LT_ZSD_JHD_H.
CLEAR LS_ITEM_EXTENSION.
LS_ITEM_EXTENSION-REF_DOC = WA_SHOW-EBELN.
LS_ITEM_EXTENSION-POSNR = WA_SHOW-EBELP.
LS_ITEM_EXTENSION-ZFYGS = WA_SHOW-ZFYGS.
LS_ITEM_EXTENSION-ZFYGSCO = WA_SHOW-ZFYGSCO.
LS_ITEM_EXTENSION-LGORT = WA_SHOW-LGORT2.
LS_ITEM_EXTENSION-MATNR = WA_SHOW-MATNR.
LS_ITEM-REF_DOC = WA_SHOW-EBELN.
LS_ITEM-REF_ITEM = WA_SHOW-EBELP.
LS_ITEM-DLV_QTY = WA_SHOW-MENGE.
LS_ITEM-SALES_UNIT = WA_SHOW-MEINS.
CLEAR LS_EXT.
LS_EXT-STRUCTURE = 'ZOUTB_DLV_EXTENSION'.
LS_EXT-VALUEPART1 = LS_ITEM_EXTENSION.
APPEND LS_EXT TO LT_EXTIN.
APPEND LS_ITEM_EXTENSION TO LT_ITEM_EXTENSION. " 关务平台用
APPEND LS_ITEM TO LT_ITEM. " 关务平台 --- 20191130
CLEAR STOCK_TRANS_ITEMS.
STOCK_TRANS_ITEMS-REF_DOC = WA_SHOW-EBELN.
STOCK_TRANS_ITEMS-REF_ITEM = WA_SHOW-EBELP.
STOCK_TRANS_ITEMS-DLV_QTY = WA_SHOW-MENGE.
STOCK_TRANS_ITEMS-SALES_UNIT = WA_SHOW-MEINS.
APPEND STOCK_TRANS_ITEMS.
ENDLOOP.
***** 全局变量赋值
CALL FUNCTION ‘ZFSD_025’
TABLES
IT_HEADER = LT_ZSD_JHD_H
IT_ITEMS = LT_ITEM_EXTENSION
IT_VBPAVB = LT_VBPA .
IF DUE_DATE IS NOT INITIAL.
EXPORT BLDAT = DUE_DATE TO MEMORY ID 'LIKP-BLDAT_2020'.
ENDIF.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
SHIP_POINT = SHIP_POINT
DUE_DATE = DUE_DATE
IMPORTING
DELIVERY = DELIVERY
NUM_DELIVERIES = NUM_DELIVERIES
TABLES
STOCK_TRANS_ITEMS = STOCK_TRANS_ITEMS
DELIVERIES = DELIVERIES
CREATED_ITEMS = CREATED_ITEMS
EXTENSION_OUT = EXTENSION_OUT
RETURN = SD_RETURN.
IF SY-SUBRC EQ 0.
LOOP AT SD_RETURN WHERE TYPE = 'A' OR TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC NE 0.
IF DELIVERY IS NOT INITIAL.
LV_FLAG2 = 'Y'.
ENDIF.
ENDIF.
ENDIF.