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.