MIGO增強

保存
1.badi MB_DOCUMENT_BADI中(這個badi幾乎是最全的)
POST_DOCUMENT
method if_ex_mb_migo_badi~post_document.
data: wa_mseg type mseg,
wa_lips type lips.
data: lv_bsart type esart.

data: lt_lips type table of lips,
wa_likp type likp.

data: lv_mng101 type wemng,
lv_mnggi type wemng.

loop at it_mseg into wa_mseg.
select single bsart into lv_bsart from ekko where ebeln = wa_mseg-ebeln.
if lv_bsart = 'ZSTO'.
clear: lv_mng101,lv_mnggi.
select single wemng into lv_mng101 from eket where ebeln = wa_mseg-ebeln and ebelp = wa_mseg-ebelp.
select * into table lt_lips from lips where vgbel = wa_mseg-ebeln and vgpos = wa_mseg-ebelp.
if sy-subrc = 0.
loop at lt_lips into wa_lips.
clear wa_likp.
select single * into wa_likp from likp where vbeln = wa_lips-vbeln.
if wa_likp-gbstk = 'B' or wa_likp-gbstk = 'C'.
lv_mnggi = lv_mnggi + wa_lips-lfimg.
endif.
endloop.

lv_mng101 = lv_mng101 + wa_mseg-menge.
if lv_mng101 > lv_mnggi.
message '收貨數量大於發貨數量,請檢查!' type 'E'.
exit.
endif.

else.
message '未創建交貨單,不允許收貨!' type 'E'.
exit.
endif.
endif.

*有交貨已完成標記的採購訂單不允許收貨 cyl 20170406
select single *
into @data(ls_ekpo)
from ekpo
where ebeln = @wa_mseg-ebeln and ebelp = @wa_mseg-ebelp
and elikz = 'X'.
if sy-subrc = 0.
message '有交貨已完成標記的採購訂單不允許收貨!' type 'E'.
endif.
endloop.
endmethod.



2.MBCF0002,函數EXIT_SAPMM07M_001(下面代碼)

*標準成本發佈物料移動增強
data ls_mbew like mbew.

if i_mseg-matnr is not initial and i_mseg-werks is not initial.
select single *
from mbew
into ls_mbew
where matnr = i_mseg-matnr
and bwkey = i_mseg-werks
and vprsv = 'S'.
if ls_mbew is not initial and ls_mbew-stprs is initial.
message e001(00) with '物料沒有成本估算,不能進行物料移動,請聯繫成本會計首先更新!'.
endif.
endif.

*生產訂單入庫數量檢查增強
DATA:BEGIN OF LT_AFRU OCCURS 0,
AUFNR LIKE AFRU-AUFNR,
VORNR LIKE AFRU-VORNR, "工序
LMNGA LIKE AFRU-LMNGA, "良品數量
XMNGA LIKE AFRU-XMNGA, "不良品數量
STOKZ LIKE AFRU-STOKZ, "沖銷標記
END OF LT_AFRU.
DATA L_SUM LIKE I_MSEG-MENGE. "總報工數量
DATA L_AUART LIKE AUFK-AUART. "生產訂單類型
DATA L_WEMNG LIKE AFPO-WEMNG. "已入庫數量
DATA L_MENGE LIKE I_MSEG-MENGE. "本次可入庫數量

IF I_MSEG-BWART = '101' AND I_MSEG-AUFNR IS NOT INITIAL AND SY-TCODE NE 'MBST'. "生產訂單入庫

*通常檢查
SELECT SINGLE AUART
INTO L_AUART
FROM AUFK
WHERE AUFNR = I_MSEG-AUFNR.
FIND L_AUART IN 'TN01,TN02'. "TN01、TN02的類型才檢查
IF SY-SUBRC = 0.
IF I_MSEG-WERKS NE '1310'
AND I_MSEG-WERKS NE '1320'
AND I_MSEG-WERKS NE '1390'
AND I_MSEG-WERKS NE '1510'
AND I_MSEG-WERKS NE '1590'
AND I_MSEG-WERKS NE '1990'
AND I_MSEG-WERKS NE '2210'
AND I_MSEG-WERKS NE '2290'
AND I_MSEG-WERKS NE '2390'
AND I_MSEG-WERKS NE '2590'
AND I_MSEG-WERKS NE '2690'
AND I_MSEG-WERKS NE '2790'
AND I_MSEG-WERKS NE '6010'.

IF L_AUART = 'TN02'. "檢查總入庫數量不能大於總報工數量
IF I_MSEG-AUFNR IS NOT INITIAL AND I_MSEG-BWART = '101'.
SELECT AUFNR VORNR LMNGA XMNGA STOKZ
INTO TABLE LT_AFRU
FROM AFRU
WHERE AUFNR = I_MSEG-AUFNR
AND VORNR = ( SELECT MAX( VORNR ) FROM AFRU WHERE AUFNR = I_MSEG-AUFNR ).

LOOP AT LT_AFRU.
IF LT_AFRU-STOKZ = 'X'.
LT_AFRU-LMNGA = - LT_AFRU-LMNGA.
LT_AFRU-XMNGA = - LT_AFRU-XMNGA.
ENDIF.
L_SUM = L_SUM + LT_AFRU-LMNGA + LT_AFRU-XMNGA.
ENDLOOP.

SELECT SINGLE WEMNG
INTO L_WEMNG
FROM AFPO
WHERE AUFNR = I_MSEG-AUFNR AND POSNR = 1.

IF L_WEMNG + I_MSEG-MENGE > L_SUM.
MESSAGE '訂單' && I_MSEG-AUFNR && '入庫實際數 大於 該訂單的報工數量,請檢查報工數量' TYPE 'E'.
ENDIF.
ENDIF.

ELSEIF L_AUART = 'TN01'. "檢查總入庫數量不大於總髮料數
DATA:BEGIN OF LT_RESB OCCURS 0,
AUFNR LIKE RESB-AUFNR,
MATNR LIKE RESB-MATNR,
BDMNG LIKE RESB-BDMNG, "需求數量
XLOEK LIKE RESB-XLOEK, "刪除
ENMNG LIKE RESB-ENMNG, "總髮料數量
FLBL TYPE P DECIMALS 8, "發料比例
END OF LT_RESB.
* DATA L_ENMNG LIKE RESB-ENMNG. "總髮料量
DATA L_PSMNG LIKE AFPO-PSMNG.

SELECT AUFNR RESB~MATNR BDMNG XLOEK
INTO TABLE LT_RESB
FROM RESB
INNER JOIN MARC ON RESB~MATNR = MARC~MATNR AND RESB~WERKS = MARC~WERKS
WHERE MARC~FEVOR = 'P02'
AND RESB~AUFNR = I_MSEG-AUFNR AND RESB~RGEKZ = SPACE AND RESB~KZEAR = SPACE. "排除反衝
IF SY-SUBRC = 0. "找不到非反衝件非P02就不檢查
READ TABLE LT_RESB WITH KEY XLOEK = ''.
IF SY-SUBRC = 0. "在非反衝組件中至少有一個物料沒有打刪除標記才檢查
SELECT SINGLE PSMNG
INTO L_PSMNG
FROM AFPO
WHERE AUFNR = I_MSEG-AUFNR.

LOOP AT LT_RESB.
* CLEAR L_ENMNG. "組件總髮料數量
SELECT SUM( MENGE )
INTO LT_RESB-ENMNG
FROM ZPP_002
WHERE AUFNR = I_MSEG-AUFNR AND MATNR = LT_RESB-MATNR AND STOKZ = SPACE.

LT_RESB-FLBL = LT_RESB-ENMNG / LT_RESB-BDMNG.
MODIFY LT_RESB.
ENDLOOP.
SORT LT_RESB BY FLBL DESCENDING.
READ TABLE LT_RESB INDEX 1.

SELECT SINGLE WEMNG
INTO L_WEMNG
FROM AFPO
WHERE AUFNR = I_MSEG-AUFNR AND POSNR = 1.
IF ( L_WEMNG + I_MSEG-MENGE ) / L_PSMNG > LT_RESB-FLBL.
L_MENGE = LT_RESB-FLBL * L_PSMNG - L_WEMNG.
MESSAGE '訂單' && I_MSEG-AUFNR && '的充電電池發料數爲' && LT_RESB-ENMNG && '本次入庫只能爲' && L_MENGE TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.

ENDIF.

ENDIF.
ENDIF.


ENDIF.

修改行項目
MB_MIGO_BADI-LINE_MODIFY
method if_ex_mb_migo_badi~line_modify.
*有交貨已完成標記的採購訂單不允許收貨 cyl 20170406
if ( cs_goitem-bwart = '101' or cs_goitem-bwart = '103' ) and cs_goitem-mblnr is initial. "顯示物料憑證時不進入檢查
select single *
into @data(ls_ekpo)
from ekpo
where ebeln = @cs_goitem-ebeln and ebelp = @cs_goitem-ebelp
and elikz = 'X'.
if sy-subrc = 0.
message '有交貨已完成標記的採購訂單不允許收貨!' type 'E'.
endif.
endif.
endmethod.
發佈了45 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章