原文链接:https://www.591sap.com/thread-953-1-1.html
SAP交货单交货数量在lips中直接读取,但是拣配数量lfimg,只存在vbfa中,且如果基本计量单位和销售单位不一样,那么需要数量的转换
一、部分代码:
SELECT SUM( rfmng ) INTO lv_rfmng
FROM vbfa
WHERE vbelv = lt_lips-vbeln
AND posnv = lt_lips-posnr
AND vbtyp_n = 'Q'.
IF sy-subrc = 0.
CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' "基本计量单位-->销售单位
EXPORTING
input = lv_rfmng
* KZMEINH = ' '
matnr = lt_lips-matnr
meinh = lt_lips-vrkme "销售单位
meins = lt_lips-meins "基本计量单位
IMPORTING
output = t_item-pikmg
EXCEPTIONS
conversion_not_found = 1
input_invalid = 2
material_not_found = 3
meinh_not_found = 4
meins_missing = 5
no_meinh = 6
output_invalid = 7
overflow = 8
OTHERS = 9.
ENDIF.
t_item-vrkme = lt_lips-vrkme.
知识兔二、调用标准函数直接取拣配数量:WB2_GET_PICK_QUANTITY
DATA:e_pikmg TYPE pikmg.
CALL FUNCTION 'WB2_GET_PICK_QUANTITY'
EXPORTING
i_vbeln = i_head-vbeln
i_posnr = t_item-posnr
* I_MODE = ' '
IMPORTING
e_pikmg = e_pikmg
EXCEPTIONS
document_read_error = 1
OTHERS = 2.
知识兔三、交货单拣配发货过账时,拣配数量的控制1、增强MV50AFZ1拣配数量XLIPS-PIKMG
FORM USEREXIT_SAVE_DOCUMENT_PREPARE.
*{ INSERT SGDK905697 1
*发货过账时拣配数量为0 检查
DATA:lv_wbstk TYPE vbuk-wbstk.
CHECK likp-lfart = 'ZLF1' AND vbuk-wbstk = 'C'."VBUK-WBSTK check post goods issue
SELECT SINGLE wbstk INTO lv_wbstk FROM vbuk WHERE vbeln = vbuk-vbeln AND wbstk = 'C'.
IF sy-subrc <> 0 .
LOOP AT xlips WHERE updkz NE 'D' AND pikmg IS INITIAL.
READ TABLE xlips TRANSPORTING NO FIELDS WITH KEY uecha = xlips-posnr.
IF sy-subrc = 0.
CONTINUE.
ELSE.
MESSAGE '拣配数量不能为0!' TYPE 'E'.
ENDIF.
ENDLOOP.
ENDIF.
*} INSERT
ENDFORM.
知识兔但FORM USEREXIT_SAVE_DOCUMENT_PREPARE中报错,会在某些场景触发系统报错:Risk of posting several mat.documents for one delivery->long text
2、交货单不完整性检查配置
交货单中 交货数量=0,拣配数量=0,不允许过账,可以通过交货单不完整性检查配置来解决,但是这里有个致命的问题,不支持交货单物料的批次拆分,所以该配置又局限性,不适用。
注意,将“检查数量0”设置为B,即可实现避免交货单0拣配数量问题
原文链接:https://www.591sap.com/thread-953-1-1.html