DATA: BEGIN OF LT_RESB OCCURS 0,
AUFNR LIKE RESB-AUFNR, "订单号
MATNR LIKE RESB-MATNR, "物料号
BDMNG LIKE RESB-BDMNG, "发料总需求数量
ENMNG LIKE RESB-ENMNG, "已发料数量
XLOEK LIKE RESB-XLOEK, "删除标记
FLBL TYPE P DECIMALS 8, "单个成品需物料数量
FLSL TYPE P DECIMALS 8, "已发料数量/单个成品需物料数量 = 可制造成品数量
END OF LT_RESB.
DATA: LV_NUM TYPE P DECIMALS 0,
LV_LMNGA TYPE AFRU-LMNGA,
LV_XMNGA TYPE AFRU-XMNGA.
IF ( SY-TCODE = 'CO11N'AND AFRUD_IMP-VORNR = '0010' ) OR SY-TCODE = 'CO15'. "检查工序0010,以后工序标准程序会检查前置工序允许后置工序报工的数量
CASE SY-TCODE.
WHEN 'CO11N'. "工序报工,根据工序报工数量限制
SELECT SUM( LMNGA )
FROM AFRU
INTO @LV_LMNGA "已报工数量
WHERE AUFNR = @CAUFVD_IMP-AUFNR "订单
AND VORNR = @AFRUD_IMP-VORNR "工序
AND STOKZ = @SPACE "排除已被冲销和被取消的确认行
AND STZHL = @SPACE.
SELECT SUM( XMNGA )
FROM AFRU
INTO @LV_XMNGA "已报废数量
WHERE AUFNR = @CAUFVD_IMP-AUFNR "订单
AND VORNR = @AFRUD_IMP-VORNR "工序
AND STOKZ = @SPACE "排除已被冲销和被取消的确认行
AND STZHL = @SPACE.
WHEN 'CO15'. "整体报工,根据订单报工数量限制
SELECT SUM( LMNGA ) "已报工数量
FROM AFRU
INTO @LV_LMNGA
WHERE AUFNR = @CAUFVD_IMP-AUFNR
AND STOKZ = @SPACE
AND STZHL = @SPACE.
SELECT SUM( XMNGA ) "已报废数量
FROM AFRU
INTO @LV_XMNGA
WHERE AUFNR = @CAUFVD_IMP-AUFNR
AND STOKZ = @SPACE
AND STZHL = @SPACE.
WHEN OTHERS.
ENDCASE.
SELECT SINGLE GAMNG "订单数量
INTO @DATA(LV_GAMNG)
FROM AFKO
WHERE AUFNR = @CAUFVD_IMP-AUFNR.
SELECT AUFNR MATNR ENMNG BDMNG XLOEK "预留排除反冲、删除、虚拟键
INTO CORRESPONDING FIELDS OF TABLE LT_RESB FROM RESB
WHERE AUFNR = CAUFVD_IMP-AUFNR "订单
AND RGEKZ = SPACE
AND XLOEK = SPACE
AND DUMPS = SPACE.
LOOP AT LT_RESB.
LT_RESB-FLBL = LT_RESB-BDMNG / LV_GAMNG. "单个成品需物料数量 = 发料总需求数量(制造订单数量成品) / 订单数量
LT_RESB-FLSL = LT_RESB-ENMNG / LT_RESB-FLBL. "已发料数量/单个成品需物料数量 = 可制造成品数量
MODIFY LT_RESB.
ENDLOOP.
SORT LT_RESB[] BY FLSL ASCENDING.
CLEAR LT_RESB.
READ TABLE LT_RESB[] INTO LT_RESB INDEX 1. "按照
LV_NUM = FLOOR( LT_RESB-FLSL - LV_LMNGA - LV_XMNGA )."可报工数量,向下取整 预留发料可制造数量 - 已报工数量 - 已报废数量
IF AFRUD_IMP-LMNGA + AFRUD_IMP-XMNGA > LV_NUM. "正常报工数量 + 报废数量 > 可报工数量(大于错误)
MESSAGE E000(ZPP01) WITH LV_NUM.
ENDIF.
ENDIF.