SAP MIGO生产订单入库校验BADI增强MB_MIGO_BADI
1. 创建BADI增强实施
- SE19->创建BADI增强
- 输入增强实施名称
- 设置增强属性
- 激活增强实施
2.修改增强实施
-
导航到增强实施类
-
创建全局变量
-
IF_EX_MB_MIGO_BADI~LINE_MODIFY 中传入数据
method IF_EX_MB_MIGO_BADI~LINE_MODIFY. if CS_GOITEM-BWART = '101' OR CS_GOITEM-BWART = '102' . "移动类型101 102 delete GT_GOITEM where ZEILE = I_LINE_ID. append CS_GOITEM to GT_GOITEM. endif. endmethod.
-
IF_EX_MB_MIGO_BADI~CHECK_ITEM 中做值校验
method IF_EX_MB_MIGO_BADI~CHECK_ITEM. data: WA_GOITEM type GOITEM. data: LV_FLAG type C, WA_AFRU type AFRU. data: LV_LMNGA type AFRU-LMNGA, "报工数量 LV_VORNR type AFVC-VORNR, "最后工序的工序号 LV_ERFMG_101 type MSEG-ERFMG, "101收货入库数量 LV_ERFMG_102 type MSEG-ERFMG. "102冲销入库数量 data: LS_BAPIRET type BAPIRET2. break JIEMM. if SY-TCODE = 'MIGO'. loop at GT_GOITEM into WA_GOITEM where ZEILE = I_LINE_ID and PPS_AUFNR is not initial and BWART = '101'. clear: WA_AFRU,LV_FLAG. select single * from AFRU into WA_AFRU where AUFNR = WA_GOITEM-PPS_AUFNR. if WA_AFRU-VORNR is initial. LV_FLAG = 'X'. "判断是整体报工还是工序报工 endif. clear: LV_LMNGA,LV_VORNR. "取已报工数量 case LV_FLAG. when 'X'. select sum( LMNGA ) "整体报工已报工数量 from AFRU into @LV_LMNGA where AUFNR = @WA_GOITEM-PPS_AUFNR "订单 and STOKZ = @SPACE "排除已被冲销和被取消的确认行 and STZHL = @SPACE. when others. select B~VORNR "PP01订单类型的最后一道工序工序号 from AFRU as A inner join AFVC as B on A~AUFPL = B~AUFPL where A~AUFNR = @WA_GOITEM-PPS_AUFNR and B~STEUS = 'PP01' order by B~VORNR descending into @LV_VORNR up to 1 rows. endselect. select sum( LMNGA ) from AFRU into @LV_LMNGA "工序报工最后一道工序报工数量 where AUFNR = @WA_GOITEM-PPS_AUFNR and VORNR = @LV_VORNR and STOKZ = @SPACE and STZHL = @SPACE. endcase. select sum( ERFMG ) from MSEG where AUFNR = @WA_GOITEM-PPS_AUFNR and MATNR = @WA_GOITEM-MATNR and BWART = '101' into @LV_ERFMG_101. select sum( ERFMG ) from MSEG where AUFNR = @WA_GOITEM-PPS_AUFNR and MATNR = @WA_GOITEM-MATNR and BWART = '102' into @LV_ERFMG_102. if ( LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ) ) < 0. LS_BAPIRET-TYPE = 'E'. LS_BAPIRET-ID = '00'. LS_BAPIRET-NUMBER = '001'. LS_BAPIRET-MESSAGE_V1 = |生产订单:{ WA_GOITEM-PPS_AUFNR alpha = out }前期数量超收,请联系生产确认入库单|. append LS_BAPIRET to ET_BAPIRET2. else. if WA_GOITEM-ERFMG > LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ). LS_BAPIRET-TYPE = 'E'. LS_BAPIRET-ID = '00'. LS_BAPIRET-NUMBER = '001'. LS_BAPIRET-MESSAGE_V1 = |生产订单:{ WA_GOITEM-PPS_AUFNR alpha = out }收货超过报工数量,目前可入库数量为{ LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ) }个|. append LS_BAPIRET to ET_BAPIRET2. endif. endif. endloop. endif. endmethod.
-
IF_EX_MB_MIGO_BADI~POST_DOCUMENT 中释放全局变量
method IF_EX_MB_MIGO_BADI~POST_DOCUMENT. CLEAR gt_goitem. endmethod.
3.生产订单MIGO过账效果
- BADI检查
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX