LV01FFD0
ENHANCEMENT 1 ZDIALOG_PREPARE_100_06. "active version
“” USE xresult TABLE "
""add 2012.08.13 for 如果没有按FIFO,客户审核问题改善,
TABLES: ZRESULT .
IF yresult[] IS NOT INITIAL.
EXPORT yresult TO MEMORY ID ‘FIFO1’.
""for 内存MO有在发料时自动修改批次时用,有+ -
loop at yresult where ERFMG <> 0.
endloop.
if sy-subrc <> 0.
MESSAGE E398(00) WITH ‘请填写需求数量!’ .
endif.
LOOP AT yresult WHERE matnr+9(4) >= '1203' AND matnr+9(4) <= '1206'.
delete from ZRESULT where matnr = yresult-matnr and charg = yresult-charg
and werks = yresult-werks and lgort = yresult-lgort .
move-corresponding yresult to ZRESULT.
modify ZRESULT .
ENDLOOP .
ENDIF.
ENDENHANCEMENT.
**********************************************SRART fifo2012.08.13 added by abap
TABLES: zresult,zbwart,zwerks,zreason .
**DATA: ITAB LIKE TABLE OF zresult with header line .
*---- Interne Ergebnistabelle
DATA: BEGIN OF xresult OCCURS 0.
INCLUDE STRUCTURE bdbatch.
DATA: vrfmg_ame LIKE bdbatch-vrfmg,
ext_quan TYPE extmg,
xsele TYPE c,
xread TYPE c,
xkeep TYPE c,
xcorr TYPE c,
xdele TYPE c,
org_tabix LIKE sy-tabix,
sort_tabix LIKE sy-tabix,
cuobj LIKE inob-cuobj.
DATA: END OF xresult.
-
---- Interne Ergebnistabelle zwisabapeichern
DATA: BEGIN OF yresult OCCURS 0.
INCLUDE STRUCTURE xresult.
DATA: END OF yresult.IMPORT yresult FROM MEMORY ID ‘FIFO1’.
-
DELETE FROM MEMORY ID 'FIFO1'.
IF i_mkpf-vgart = ‘WA’ AND i_mseg-bwart = ‘261’.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE yresult
FROM zresult ."where aufnr = i_mseg-aufnr.
ENDIF.IF i_mseg-erfmg <> 0.
SELECT SINGLE * INTO zbwart FROM zbwart
WHERE bwart = i_mseg-bwart AND sobkz = i_mseg-sobkz .
IF sy-subrc = 0.
SELECT SINGLE * INTO zwerks FROM zwerks
WHERE werks = i_mseg-werks AND lgort = i_mseg-lgort .
IF sy-subrc = 0.
LOOP AT yresult WHERE matnr = i_mseg-matnr AND charg = i_mseg-charg
AND werks = i_mseg-werks AND lgort = i_mseg-lgort
AND ( ( menge = 0 AND xsele = ‘’) OR ( menge < i_mseg-menge AND xsele = ‘X’ ) ).
SELECT SINGLE * INTO zreason FROM zreason
WHERE code = i_mseg-sgtxt.
IF sy-subrc <> 0. "i_mseg-sgtxt is initial .
MESSAGE e398(00) WITH ‘该行未按照FIFO发料,请填写<原因代码>到行项目文本!’.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
***********************************************************************END
ZXMBCU02
&---------------------------------------------------------------------
*& 包含 ZXMBCU02
&---------------------------------------------------------------------
e_sgtxt = i_mseg-sgtxt.
*>>>>>>>>>>>>>>>>-----begin
- created by Nicky on 20191012 CR:DEVK936508
- 月结过帐控制
DATA: wa_ztfi0051 TYPE ztfi0051.
DATA: l_zmonth TYPE ztfi0051-zmonth.
l_zmonth = i_mkpf-budat+0(6).
SELECT SINGLE *
FROM ztfi0051
INTO CORRESPONDING FIELDS OF wa_ztfi0051
WHERE zcontype EQ ‘A’
AND werks IN ( ‘’,i_mseg-werks )
AND zmonth EQ l_zmonth.
IF sy-subrc = 0.
*************过帐日期所在月份已经设置物料过帐控制
SELECT SINGLE *
FROM ztfi0051
INTO CORRESPONDING FIELDS OF wa_ztfi0051
WHERE zcontype EQ ‘A’"物料过帐
AND zmonth EQ l_zmonth
AND werks EQ ‘’
AND bname EQ sy-uname.
IF sy-subrc = 0.
"有所有工厂的权限
ELSE.
"没有所有工厂的权限
SELECT SINGLE *
FROM ztfi0051
INTO CORRESPONDING FIELDS OF wa_ztfi0051
WHERE zcontype EQ ‘A’"物料过帐
AND zmonth EQ l_zmonth
AND werks EQ i_mseg-werks
AND bname EQ sy-uname.
IF sy-subrc = 0.
"有当前工厂的权限
ELSE.
*******************用户帐号未在允许范围中
"&1年&2月已经被财务设置成不允许过帐!
MESSAGE e020(zfi) WITH l_zmonth+0(4) l_zmonth+4(2).
ENDIF.
ENDIF.
ELSE.
ENDIF.
*<<<<<<<<<<<<<<<<-----end
*& ADD AT 2017-07-25
DATA : zv_qtygr LIKE afpo-wemng,
zv_qtyor LIKE afpo-psmng,
zv_matrq LIKE mseg-menge.
DATA: zv_rsnum LIKE afko-rsnum.
DATA : BEGIN OF zi_resb OCCURS 0,
alpgr LIKE resb-alpgr,
matnr LIKE resb-matnr,
werks LIKE resb-werks,
lgort LIKE resb-lgort, "added at 2012-07-19
charg LIKE resb-charg, "added at 2012-07-19
rgekz LIKE resb-rgekz, "added at 2012-07-19
enmng LIKE resb-enmng,
bdmng LIKE resb-bdmng,
END OF zi_resb,
BEGIN OF resb_stru,
matnr LIKE resb-matnr,
werks LIKE resb-werks,
charg LIKE resb-charg,
enmng LIKE resb-enmng,
bdmng LIKE resb-bdmng,
gpreis LIKE resb-gpreis,
peinh LIKE resb-peinh,
END OF resb_stru.
DATA: BEGIN OF i_resb OCCURS 0,
alpgr LIKE resb-alpgr,
matnr LIKE resb-matnr,
werks LIKE resb-werks,
lgort LIKE resb-lgort, "added at 2012-07-20
charg LIKE resb-charg, "added at 2012-07-20
rgekz LIKE resb-rgekz, "added at 2012-07-20
enmng LIKE resb-enmng,
bdmng LIKE resb-bdmng,
END OF i_resb.
-
订单确认 added at 2012-07-20
DATA:
BEGIN OF it_afru OCCURS 0,
vornr LIKE afru-vornr, "工序
smeng LIKE afru-smeng, "工序数量
lmnga LIKE afru-lmnga, "已报工数量
stokz LIKE afru-stokz, "标识:凭证已被冲销
stzhl LIKE afru-stzhl, "被取消确认的确认计数器
END OF it_afru,BEGIN OF it_afvc OCCURS 0,
aufpl LIKE afvc-aufpl, "订单中工序的工艺路线号
vornr LIKE afvc-vornr, "工序
aplzl LIKE afvc-aplzl, "订单的通用计数器
objnr LIKE jest-objnr, "对象号
arbid LIKE afvc-arbid, "资源的对象 ID Change For DEVK933250 20180702
END OF it_afvc.
DATA: v_alpgr LIKE resb-alpgr,
v_auart LIKE aufk-auart, "订单类型
v_qty LIKE resb-bdmng, "统计返工领用成品数量
v_qty1 LIKE resb-bdmng,
v_mat(4), "成品前面4位
v_com(4),
v_matnr LIKE afpo-matnr, "订单的物料编号
v_lmnga LIKE afru-lmnga,
v_vornr LIKE afru-vornr, "工序
v_qtyed LIKE resb-bdmng, "已入库数量
v_aufpl LIKE afvc-aufpl,
v_bdmng LIKE resb-bdmng, "需求量
v_enmng LIKE resb-enmng. "提货数
DATA: tbx LIKE sy-tabix,
c_aufpl(10),
c_aplzl(8),
c_dwerk(4),
s_line LIKE bsvx-sttxt.
DATA:gwatnr1 LIKE mseg-matnr.
DATA: lt_resb TYPE TABLE OF resb,
wa_resb TYPE resb.
DATA: lv_resvqty LIKE resb-bdmng,
lv_clabs LIKE mchb-clabs,
lv_cls TYPE string,
lv_res TYPE string,
lv_msg TYPE string.
DATA:lv_auart TYPE aufk-auart.
DATA:lv_zzrwl TYPE aufk-zzrwl.
DATA:zmatnr TYPE matnr.
DATA:lv_matnr TYPE matnr.
DATA:zspart TYPE spart.
DATA:zrma(3).
DATA:lv_rsnum TYPE afko-rsnum.
DATA:lv_gamng TYPE afko-gamng.
DATA:lv_wemng TYPE afpo-wemng.
DATA:lv_total TYPE menge_d.
DATA:lv_canqty TYPE menge_d.
DATA:BEGIN OF lt_resbx OCCURS 0,
rsnum TYPE resb-rsnum,
rspos TYPE resb-rspos,
matnr TYPE resb-matnr,
werks TYPE resb-werks,
enmng TYPE resb-enmng,
bdmng TYPE resb-bdmng,
meins TYPE resb-meins,
END OF lt_resbx.
DATA:BEGIN OF lt_total OCCURS 0,
matnr TYPE resb-matnr,
werks TYPE resb-werks,
enmng TYPE resb-enmng,
bdmng TYPE resb-bdmng,
mkqty TYPE menge_d,
END OF lt_total.
************************* 2019年1月29日正式使用,结合财务关账协助上线,上线后取消***************
DATA: lv_start_date TYPE sy-datum VALUE ‘20190125’. "20190129
DATA: lv_end_date TYPE sy-datum VALUE ‘20190131’.
DATA: lv_ok_date TYPE sy-datum VALUE ‘20190201’.
************************* 2019年1月29日正式使用,结合财务关账协助上线,上线后取消***************
IF i_mkpf-vgart = ‘WF’ AND i_mseg-bwart = ‘101’.
SELECT SINGLE auart INTO lv_auart FROM aufk WHERE aufnr = i_mseg-aufnr.
-
SELECT SINGLE matnr INTO lv_matnr FROM mseg WHERE aufnr = i_mseg-aufnr.
-
if lv_auart = ‘ZM04’ or lv_auart = ‘ZM05’ or lv_auart = ‘ZM09’ or lv_auart = ‘ZM10’ or lv_auart = ‘ZM11’.
IF ( lv_auart+0(2) = ‘ZM’ OR lv_auart+0(2) = ‘ZZ’ ) AND lv_auart <> ‘ZZCO’ . -
IF ( lv_matnr+0(4) <> ‘5005’ OR lv_matnr+0(4) <> ‘5106’).
SELECT SINGLE afko~rsnum afko~gamng afpo~wemng INTO (lv_rsnum,lv_gamng,lv_wemng) FROM afko INNER JOIN afpo ON afko~aufnr = afpo~aufnr WHERE afko~aufnr = i_mseg-aufnr.
IF sy-subrc = 0.lv_total = lv_wemng + i_mseg-menge. "收货加上即将收货
SELECT resb~rsnum resb~rspos resb~matnr resb~werks resb~enmng resb~bdmng resb~meins
INTO TABLE lt_resbx
FROM resb
INNER JOIN mara
ON ( resb~matnr = mara~matnr )
WHERE resb~rsnum = lv_rsnum
AND resb~xloek = space
AND resb~rgekz NE ‘X’
AND resb~dumps NE ‘X’
AND resb~bdmng > 0
AND resb~bwart = ‘261’
AND ( mara~mtart = ‘ZERT’ OR mara~mtart = ‘ZALB’ ).SELECT resb~rsnum resb~rspos resb~matnr resb~werks resb~enmng resb~bdmng resb~meins
APPENDING TABLE lt_resbx
FROM resb
INNER JOIN mara
ON ( resb~matnr = mara~matnr )
WHERE resb~rsnum = lv_rsnum
AND resb~xloek = space
AND resb~rgekz NE ‘X’
AND resb~dumps NE ‘X’
AND resb~bdmng > 0
AND resb~schgt NE ‘X’
AND resb~xwaok EQ ‘X’
AND resb~bwart = ‘261’. -
AND ( MARA~MATKL = '1203' OR
-
MARA~MATKL = '1204' OR
-
MARA~MATKL = '1205' OR
-
MARA~MATKL = '1206' OR
-
MARA~MATKL = '1212' OR
-
MARA~MATKL = '1214' OR
-
MARA~MATKL = '1215' OR
-
MARA~MATKL = '1222' OR
-
MARA~MATKL = '1225' OR
-
MARA~MATKL = '1227'). SORT lt_resbx BY rsnum rspos. DELETE ADJACENT DUPLICATES FROM lt_resbx COMPARING rsnum rspos. LOOP AT lt_resbx. lt_total-matnr = lt_resbx-matnr. lt_total-werks = lt_resbx-werks. lt_total-bdmng = lt_resbx-bdmng. lt_total-enmng = lt_resbx-enmng. COLLECT lt_total. CLEAR lt_total. ENDLOOP. LOOP AT lt_total ASSIGNING FIELD-SYMBOL(<fs_total>). <fs_total>-mkqty = ( <fs_total>-enmng / <fs_total>-bdmng ) * lv_gamng. "可以收获数量 ENDLOOP. SORT lt_total BY mkqty . READ TABLE lt_total INDEX 1. IF sy-subrc = 0. IF lv_total > lt_total-mkqty. "收货加上即将收货 大于 工单发料折合成成品数量 , lv_canqty = lt_total-mkqty - lv_wemng. MESSAGE e352(zpp) WITH i_mseg-aufnr lv_canqty. EXIT. ENDIF. ENDIF.
-
ENDIF.
-
ENDIF.
-
IF ( lv_matnr+0(4) = ‘5005’ OR lv_matnr+0(4) = ‘5106’)…
-
SELECT SINGLE afko~rsnum afko~gamng afpo~wemng INTO (lv_rsnum,lv_gamng,lv_wemng) FROM afko INNER JOIN afpo ON afko~aufnr = afpo~aufnr WHERE afko~aufnr = i_mseg-aufnr.
-
IF sy-subrc = 0.
-
lv_total = lv_wemng + i_mseg-menge. "收货加上即将收货
-
SELECT resb~rsnum resb~rspos resb~matnr resb~werks resb~enmng resb~bdmng resb~meins
-
INTO TABLE lt_resbx
-
FROM resb
-
INNER JOIN mara
-
ON ( resb~matnr = mara~matnr )
-
WHERE resb~rsnum = lv_rsnum
-
AND resb~xloek = space
-
AND resb~rgekz NE 'X'
-
AND resb~dumps NE 'X'
-
AND resb~bdmng > 0
-
AND resb~bwart = '261'
-
AND ( mara~mtart = 'ZERT' OR mara~mtart = 'ZALB' ).
-
SELECT resb~rsnum resb~rspos resb~matnr resb~werks resb~enmng resb~bdmng resb~meins
-
APPENDING TABLE lt_resbx
-
FROM resb
-
INNER JOIN mara
-
ON ( resb~matnr = mara~matnr )
-
WHERE resb~rsnum = lv_rsnum
-
AND resb~xloek = space
** AND RESB~RGEKZ NE ‘X’
-
AND resb~dumps NE 'X'
-
AND resb~bdmng > 0
-
AND resb~schgt NE 'X'
-
AND resb~xwaok EQ 'X'
-
AND resb~bwart = '261'.
** AND ( MARA~MATKL = ‘1203’ OR
** MARA~MATKL = ‘1204’ OR
** MARA~MATKL = ‘1205’ OR
** MARA~MATKL = ‘1206’ OR
** MARA~MATKL = ‘1212’ OR
** MARA~MATKL = ‘1214’ OR
** MARA~MATKL = ‘1215’ OR
** MARA~MATKL = ‘1222’ OR
** MARA~MATKL = ‘1225’ OR
** MARA~MATKL = ‘1227’).
*
-
SORT lt_resbx BY rsnum rspos.
-
DELETE ADJACENT DUPLICATES FROM lt_resbx COMPARING rsnum rspos.
-
LOOP AT lt_resbx.
-
lt_total-matnr = lt_resbx-matnr.
-
lt_total-werks = lt_resbx-werks.
-
lt_total-bdmng = lt_resbx-bdmng.
-
lt_total-enmng = lt_resbx-enmng.
-
COLLECT lt_total.
-
CLEAR lt_total.
-
ENDLOOP.
-
LOOP AT lt_total ASSIGNING FIELD-SYMBOL(<fs_total1>).
-
<fs_total1>-mkqty = ( <fs_total1>-enmng / <fs_total1>-bdmng ) * lv_gamng. "可以收获数量
-
ENDLOOP.
-
SORT lt_total BY mkqty .
-
READ TABLE lt_total INDEX 1.
-
IF sy-subrc = 0.
-
IF lv_total > lt_total-mkqty. "收货加上即将收货 大于 工单发料折合成成品数量 ,
-
lv_canqty = lt_total-mkqty - lv_wemng.
-
MESSAGE e352(zpp) WITH i_mseg-aufnr lv_canqty.
-
EXIT.
-
ENDIF.
-
ENDIF.
- ENDIF.
ENDIF.
ENDIF.
*& ADD 生产入库的逻辑
- 生产订单收货
DATA:lv_aufnr TYPE mseg-aufnr.
IF i_mseg-aufnr IS NOT INITIAL.
lv_aufnr = i_mseg-aufnr.
ELSE.
lv_aufnr = i_mkpf-frbnr.
ENDIF.
IF ( i_mkpf-vgart = ‘WF’ AND i_mseg-bwart = ‘101’ )
-
OR ( i_mkpf-vgart = ‘WA’ AND i_mseg-bwart = ‘Z31’ ).
OR ( i_mkpf-vgart = ‘WA’ AND i_mseg-bwart = ‘Y01’ ). -
SELECT SINGLE auart zzrwl INTO (lv_auart,lv_zzrwl ) FROM aufk WHERE aufnr = i_mseg-aufnr. "abap 20210903
SELECT SINGLE auart zzrwl INTO (lv_auart,lv_zzrwl ) FROM aufk WHERE aufnr = lv_aufnr.
IF lv_auart+0(4) = ‘ZM10’ OR lv_auart+0(4) = ‘ZM11’ OR lv_auart+0(4) = ‘ZM05’.
CLEAR: zmatnr,zspart,zrma. -
SELECT SINGLE matnr INTO zmatnr FROM afpo WHERE aufnr = i_mseg-aufnr.
SELECT SINGLE matnr INTO zmatnr FROM afpo WHERE aufnr = lv_aufnr. "abap 20210903
IF sy-subrc = 0.
SELECT SINGLE spart INTO zspart FROM mara WHERE matnr = zmatnr.
IF zspart = ‘10’ OR zspart = ‘11’ OR zspart = ‘12’ OR zspart = ‘20’."内存和CSSD
IF zmatnr+0(4) NE ‘9901’ AND zmatnr+0(4) NE ‘7002’."华为代工内存,MES报工
zrma = ‘RMA’. "为真正的RMA的工单需要砟自动报工处.其它也有华为ESSD的RMA工单,但是在车间MES完成的,不需要自动报工
ENDIF.
ELSEIF zspart = ‘21’."ESSD 非华为的工单要自动报工
IF lv_zzrwl IS INITIAL.
zrma = ‘RMA’.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF lv_auart+0(2) NE ‘ZF’ AND zrma NE ‘RMA’. "只对封装生产和RMA自己维修的工单
EXIT.
ENDIF.
CLEAR:zv_rsnum, v_aufpl.
-
SELECT SINGLE rsnum aufpl FROM afko INTO (zv_rsnum, v_aufpl) WHERE aufnr = i_mseg-aufnr.
SELECT SINGLE rsnum aufpl FROM afko INTO (zv_rsnum, v_aufpl) WHERE aufnr = lv_aufnr. "abap 20210903 -
工艺路线
REFRESH it_afvc.
SELECT * FROM afvc
INTO CORRESPONDING FIELDS OF TABLE it_afvc
WHERE aufpl EQ v_aufpl AND loekz <> ‘X’.LOOP AT it_afvc.
tbx = sy-tabix.
CLEAR: c_aufpl,c_aplzl,s_line.
c_aufpl = it_afvc-aufpl.
c_aplzl = it_afvc-aplzl.
CONCATENATE ‘OV’ c_aufpl c_aplzl INTO it_afvc-objnr.
CALL FUNCTION ‘STATUS_TEXT_EDIT’
EXPORTING -
CLIENT = SY-MANDT
-
FLG_USER_STAT = ' ' objnr = it_afvc-objnr only_active = 'X' spras = sy-langu IMPORTING line = s_line EXCEPTIONS object_not_found = 1 OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
IF s_line CS ‘DLT’ OR s_line CS ‘删除’. "不管什么情况下的工序删除都要去掉
DELETE it_afvc INDEX tbx.
ENDIF.ENDLOOP.
SORT it_afvc BY vornr DESCENDING.
v_vornr = ‘0001’.
LOOP AT it_afvc.
IF v_vornr LT it_afvc-vornr.
v_vornr = it_afvc-vornr.
ENDIF.
ENDLOOP. -
找工单类型
CLEAR v_auart. -
SELECT SINGLE auart FROM aufk INTO v_auart WHERE aufnr = i_mseg-aufnr.
SELECT SINGLE auart FROM aufk INTO v_auart WHERE aufnr = lv_aufnr. "abap 20210903 -
找工单最后一道工序确认数
REFRESH it_afru.
SELECT * FROM afru
INTO CORRESPONDING FIELDS OF TABLE it_afru -
WHERE aufnr = i_mseg-aufnr AND stokz = ‘’ AND stzhl = ‘’.
WHERE aufnr = lv_aufnr AND stokz = ‘’ AND stzhl = ‘’. "abap 20210903
SORT it_afru BY vornr DESCENDING.
CLEAR:v_matnr,zv_qtyor,zv_qtygr,c_dwerk.
SELECT SINGLE matnr psmng wemng dwerk
FROM afpo
INTO (v_matnr,zv_qtyor,zv_qtygr,c_dwerk)
- WHERE aufnr = i_mseg-aufnr.
WHERE aufnr = lv_aufnr. "abap 20210903
CLEAR:v_mat,v_qtyed.
v_mat = v_matnr+0(4).
v_qtyed = zv_qtygr.
zv_qtygr = zv_qtygr + i_mseg-menge.
REFRESH zi_resb.
SELECT * FROM resb INTO CORRESPONDING FIELDS OF TABLE zi_resb WHERE rsnum = zv_rsnum AND rgekz = ’ ’ AND schgt NE ‘X’
AND dumps NE ‘X’ AND xloek NE ‘X’.
SORT zi_resb BY alpgr matnr werks.
CLEAR v_qty.
LOOP AT zi_resb.
v_com = zi_resb-matnr+0(4).
-
if v_mat = v_com.
v_qty = v_qty + zi_resb-enmng.
-
endif.
IF zi_resb-alpgr EQ space.
AT NEW matnr.
CLEAR i_resb.
CLEAR: v_bdmng,v_enmng.
ENDAT.
v_bdmng = v_bdmng + zi_resb-bdmng.
v_enmng = v_enmng + zi_resb-enmng.
MOVE-CORRESPONDING zi_resb TO i_resb.
AT END OF matnr.
i_resb-bdmng = v_bdmng.
i_resb-enmng = v_enmng.
APPEND i_resb.
ENDAT. -
MOVE-CORRESPONDING zi_resb TO i_resb.
-
APPEND i_resb.
ELSE.
AT NEW alpgr.
CLEAR i_resb.
CLEAR: v_bdmng,v_enmng.
ENDAT.
v_bdmng = v_bdmng + zi_resb-bdmng.
v_enmng = v_enmng + zi_resb-enmng.
MOVE-CORRESPONDING zi_resb TO i_resb.
AT END OF alpgr.
i_resb-bdmng = v_bdmng.
i_resb-enmng = v_enmng.
APPEND i_resb.
ENDAT.
ENDIF.
ENDLOOP.LOOP AT i_resb.
zv_matrq = i_resb-bdmng * zv_qtygr / zv_qtyor.
IF i_resb-enmng < zv_matrq. -
MESSAGE e023(zpp) WITH i_mseg-aufnr i_resb-matnr. MESSAGE e023(zpp) WITH lv_aufnr i_resb-matnr. "abap 20210903 EXIT.
ENDIF.
ENDLOOP. -
IF v_auart = 'ZP02' OR v_auart = 'ZP08'.
IF v_auart = ‘ZF04’ OR v_auart = ‘ZF09’.
IF v_qty < zv_qtygr.
v_qty1 = v_qty - v_qtyed. -
MESSAGE e102(zpp) WITH i_mseg-aufnr v_qty1. MESSAGE e102(zpp) WITH lv_aufnr v_qty1. "abap 20210903 EXIT.
ENDIF.
ENDIF.
*20120829 abap 增加除板卡外工厂工单入库自动按照入库数量进行报工操作,此处只报数量不报工时。
DATA: gt_tickets TYPE STANDARD TABLE OF bapi_pp_timeticket WITH HEADER LINE.
DATA: zsum LIKE resb-bdmng." TYPE i.
DATA: BEGIN OF gt_resb OCCURS 0,
aufnr LIKE afpo-aufnr, "MO
gamng LIKE afko-gamng,
zgamng LIKE afko-gamng,
matnr LIKE resb-matnr, "物料号
werks LIKE resb-werks,
bdmng LIKE resb-bdmng, "TYPE i, "需求量
enmng LIKE resb-enmng , "工单该料已经提货数 "added by abap 20121030
zbdmng LIKE resb-bdmng, "TYPE i, "当前报工入库扣料按BOM理论需求量
lgort LIKE resb-lgort, "库存地点
rgekz LIKE resb-rgekz,
schgt LIKE resb-schgt,
dumps LIKE resb-dumps,
flag TYPE c, "added by abap 20130304
END OF gt_resb.
DATA: BEGIN OF gt_mard OCCURS 0,
matnr LIKE mard-matnr,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
" charg like mchb-charg,
labst LIKE mard-labst,
END OF gt_mard.
-
DATA: gt_return TYPE STANDARD TABLE OF bapi_coru_return WITH HEADER LINE.data: gt_mchb1 like gt_mchb occurs 0 with header line.
"data: gt_return like bapi_coru_return occurs 0 with header line.
DATA: gt_return1 TYPE STANDARD TABLE OF bapiret1 WITH HEADER LINE .
******************************Change 20180523 start for Abap DEVK932948 \ DEVK932990 - 需要查找对应工单用到的工艺路线组号和计数器号,再找对应工序代码的8101的标准工时
DATA: lt_plnnr TYPE afko-plnnr,
lt_plnal TYPE afko-plnal,
lt_vgw01 TYPE plpo-vgw01,
lt_vgw02 TYPE plpo-vgw02,
lt_conf_activity1 LIKE bapi_pp_timeticket-conf_activity1,
lt_conf_activity2 LIKE bapi_pp_timeticket-conf_activity2,
lt_vge01 LIKE plpo-vge01,
lt_vge02 LIKE plpo-vge02,
lt_bmsch LIKE plpo-bmsch.
DATA: ls_int TYPE i.
DATA:BEGIN OF gs_info_plpo,
arbid TYPE plpo-arbid, "Change add For DEVK933250 20180702
vornr TYPE plpo-vornr,
vgw01 TYPE plpo-vgw01,
vge01 TYPE plpo-vge01,
vgw02 TYPE plpo-vgw02,
vge02 TYPE plpo-vge02,
bmsch TYPE plpo-bmsch,
END OF gs_info_plpo.
DATA: gt_info_plpo LIKE STANDARD TABLE OF gs_info_plpo.
CLEAR: lt_plnnr,lt_plnal.
-
SELECT SINGLE plnnr plnal FROM afko INTO ( lt_plnnr,lt_plnal )
-
WHERE aufnr EQ i_mseg-aufnr.
SELECT SINGLE plnnr plnal FROM afko INTO ( lt_plnnr,lt_plnal )
WHERE aufnr EQ lV_aufnr.IF sy-subrc = 0.
IF it_afvc IS NOT INITIAL.
SELECT plpo~arbid plpo~vornr plpo~vgw01 plpo~vge01 plpo~vgw02 plpo~vge02 plpo~bmsch INTO CORRESPONDING FIELDS OF TABLE gt_info_plpo
FROM plas INNER JOIN plpo ON ( plas~plnnr = plpo~plnnr AND plas~plnkn = plpo~plnkn )
FOR ALL ENTRIES IN it_afvc
WHERE plas~plnnr = lt_plnnr
AND plas~plnal = lt_plnal
AND plpo~arbid = it_afvc-arbid AND plpo~arbid NE ‘00000000’ "Change For DEVK933250 20180702
AND plpo~steus NE ‘ZP05’ "Change Add 20180704 DEVK933250 -
AND PLPO~VORNR = IT_AFVC-VORNR AND PLPO~ARBID NE '00000000' "Change For DEVK933250 20180702 AND plas~loekz NE 'X'.
ENDIF.
SORT gt_info_plpo BY arbid vornr. "Change For DEVK933250 20180702 SORT GT_INFO_PLPO BY VORNR
ENDIF.
******************************Change 20180523 end for Abap DEVK932948\DEVK932990CLEAR: gt_tickets.
*******************ADD BY ABAP 2020-05-18
DATA: l_last TYPE char1.
SORT it_afvc BY aufpl vornr.
LOOP AT it_afvc.
CLEAR: gt_tickets.
*******************ADD BY ABAP 2020-05-18
AT END OF aufpl.
"最后一个工序
l_last = ‘X’.
ENDAT.MOVE it_afvc-vornr TO gt_tickets-operation.
*******************ADD BY ABAP 2020-05-18 -
gt_tickets-orderid = i_mseg-aufnr.
gt_tickets-orderid = lv_aufnr. "abap 20210903
IF l_last = ‘X’.
"最后一个工序 -
IF i_mseg-bwart = 'Z31'. IF i_mseg-bwart = 'Y01'. "报废 gt_tickets-scrap = i_mseg-menge."报废数量 gt_tickets-yield = 0. ELSE. "正常产出 gt_tickets-yield = i_mseg-menge. gt_tickets-scrap = 0."报废数量 ENDIF.
ELSE.
"非最后一个工序
"正常产出
gt_tickets-yield = i_mseg-menge.
gt_tickets-scrap = 0."报废数量
ENDIF.
gt_tickets-fin_conf = ‘1’.
************************* 2019年1月29日正式使用,结合财务关账协助上线,上线后取消***************
IF sy-datum >= lv_start_date AND sy-datum <= lv_end_date. "当前日期为:1月29日~31日时,Item过账日期设置为2月1日。
gt_tickets-postg_date = lv_ok_date.
ENDIF.
************************* 2019年1月29日正式使用,结合财务关账协助上线,上线后取消***************
******************************CHANGE 20180523 START FOR ABAP DEVK932948\DEVK932990
*需要查找对应工单用到的工艺路线组号和计数器号,再找对应工序代码的8101的标准工时
-
IF SY-SUBRC = 0. 直接读取****************
-
IF LT_PLNNR IS NOT INITIAL AND LT_PLNAL IS NOT INITIAL.
-
CLEAR: LT_VGW01,LT_VGW02.
-
SELECT SINGLE PLPO~VGW01 PLPO~VGW02 PLPO~VGE01 PLPO~VGE02 INTO ( LT_VGW01,LT_VGW02,LT_VGE01,LT_VGE02 )
-
FROM PLAS INNER JOIN PLPO ON ( PLAS~PLNNR = PLPO~PLNNR AND PLAS~PLNKN = PLPO~PLNKN ) " AND PLAS~PLNKN = PLPO~PLNKN
-
WHERE PLAS~PLNNR = LT_PLNNR
-
AND PLAS~PLNAL = LT_PLNAL
-
AND PLPO~VORNR = IT_AFVC-VORNR
-
AND PLAS~LOEKZ NE 'X'.
-
CLEAR: LT_PLNNR,LT_PLNAL.
-
IF SY-SUBRC = 0.
-
LT_CONF_ACTIVITY1 = I_MSEG-MENGE * LT_VGW01.
-
LT_CONF_ACTIVITY2 = I_MSEG-MENGE * LT_VGW02.
-
CLEAR: LT_VGW01,LT_VGW02,LT_VGE01,LT_VGE02.
-
ENDIF.
-
ENDIF.
-
IF LT_CONF_ACTIVITY1 > 0.
-
GT_TICKETS-CONF_ACTIVITY1 = LT_CONF_ACTIVITY1.
-
GT_TICKETS-CONF_ACTI_UNIT1 = LT_VGE01.
-
ENDIF.
-
IF LT_CONF_ACTIVITY2 > 0.
-
GT_TICKETS-CONF_ACTIVITY2 = LT_CONF_ACTIVITY2.
-
GT_TICKETS-CONF_ACTI_UNIT2 = LT_VGE02.
-
ENDIF.
**********直接读取方式 -
READ TABLE 方式
-
READ TABLE GT_INFO_PLPO INTO GS_INFO_PLPO WITH KEY VORNR = IT_AFVC-VORNR BINARY SEARCH. "Change For DEVK933250 20180702
READ TABLE gt_info_plpo INTO gs_info_plpo WITH KEY arbid = it_afvc-arbid BINARY SEARCH.
IF sy-subrc = 0 AND gs_info_plpo IS NOT INITIAL.
lt_vgw01 = gs_info_plpo-vgw01.
lt_vgw02 = gs_info_plpo-vgw02.
lt_bmsch = gs_info_plpo-bmsch.
lt_conf_activity1 = ( lt_vgw01 / lt_bmsch ) * i_mseg-menge. “I_MSEG-MENGE * LT_VGW01.
lt_conf_activity2 = ( lt_vgw02 / lt_bmsch ) * i_mseg-menge.” I_MSEG-MENGE * LT_VGW02.
lt_vge01 = gs_info_plpo-vge01.
lt_vge02 = gs_info_plpo-vge02.
IF lt_conf_activity1 >= 0. -
如果以S为单位,需要进行四舍五入,大于0.5的为1的整数倍,小于0.5的为0.大于1S的为1的整数倍 IF lt_vge01 = 'S'. ls_int = lt_conf_activity1. gt_tickets-conf_activity1 = ls_int. gt_tickets-conf_acti_unit1 = lt_vge01. ELSE. gt_tickets-conf_activity1 = lt_conf_activity1. gt_tickets-conf_acti_unit1 = lt_vge01. ENDIF. ENDIF. CLEAR: ls_int. IF lt_conf_activity2 >= 0. IF lt_vge02 = 'S'. ls_int = lt_conf_activity2. gt_tickets-conf_activity2 = ls_int. gt_tickets-conf_acti_unit2 = lt_vge02. ELSE. gt_tickets-conf_activity2 = lt_conf_activity2. gt_tickets-conf_acti_unit2 = lt_vge02. ENDIF. ENDIF. CLEAR: lt_vgw01,lt_vgw02,lt_vge01,lt_vge02,ls_int. ",GT_TICKETS
ENDIF.
******************************Change 20180523 end for Abap DEVK932948 / DEVK932990
APPEND gt_tickets.
CLEAR: lt_conf_activity1,lt_conf_activity2. "*Change 20180523 end for Abap DEVK932948 /DEVK932990
ENDLOOP.
CLEAR: gt_tickets.
SORT gt_tickets BY operation.
SELECT * FROM resb INTO CORRESPONDING FIELDS OF TABLE gt_resb
- WHERE aufnr = i_mseg-aufnr AND rgekz = ‘X’ AND schgt <> ‘X’ AND dumps <> ‘X’
WHERE aufnr = lv_aufnr AND rgekz = ‘X’ AND schgt <> ‘X’ AND dumps <> ‘X’ "abap 20210903
AND xloek NE ‘X’. "flushback material
DATA: g_gamng LIKE afko-gamng.
LOOP AT gt_resb.
SELECT SINGLE gamng
FROM afko INTO g_gamng
-
WHERE aufnr = i_mseg-aufnr. WHERE aufnr = lv_aufnr. "abap 20210903
gt_resb-gamng = g_gamng.
gt_resb-zgamng = i_mseg-menge.
MODIFY gt_resb.
ENDLOOP.LOOP AT gt_resb.
gt_resb-zbdmng = ( gt_resb-zgamng * gt_resb-bdmng ) / gt_resb-gamng.
MODIFY gt_resb.
ENDLOOP.SELECT matnr
werks
lgort
labst
INTO CORRESPONDING FIELDS OF TABLE gt_mard
FROM mard FOR ALL ENTRIES IN gt_resb
WHERE matnr = gt_resb-matnr AND werks = gt_resb-werks AND lgort = gt_resb-lgort.LOOP AT gt_resb .
CLEAR gt_mard." add by likui 20160708
READ TABLE gt_mard WITH KEY matnr = gt_resb-matnr werks = gt_resb-werks lgort = gt_resb-lgort.
IF gt_resb-zbdmng > gt_mard-labst . "当前报工入库扣料按BOM理论需求量 > 该料在线仓非限制数量
CLEAR:zsum.
zsum = gt_resb-enmng + gt_mard-labst."已提货量+库存量
IF gt_resb-enmng = gt_resb-bdmng."工单料件提货量=料件需求量
"说明已扣完,不检查报错,应该不用再扣,
ELSEIF gt_resb-enmng < gt_resb-bdmng."工单料件提货量 < 料件需求量
IF zsum < gt_resb-bdmng. "已提货量+库存量 < 需求量
gt_resb-flag = 1. "modify by abap 20130304
MODIFY gt_resb .
ENDIF.
ELSEIF gt_resb-enmng > gt_resb-bdmng."不会
ENDIF.
ENDIF.
ENDLOOP.
************************ Modify abap 20130304 for 一次性把工单所有欠的料显示出来
DATA: conmatnr(200) TYPE c,
flag TYPE c.
LOOP AT gt_resb WHERE flag = 1.
CONCATENATE gt_resb-matnr ‘|’ conmatnr INTO conmatnr .
flag = 1.
ENDLOOP.
IF flag = 1.
-
CONCATENATE conmatnr ‘在’ gt_resb-lgort ‘库存不足’ INTO conmatnr.message E106(ZPP) with conmatnr gt_resb-lgort." type 'E'.
MESSAGE conmatnr TYPE ‘E’.
ENDIF.
*&begin of mark by nirui 2016-04-19
IF sy-ucomm = ‘OK_CHECK’.
CALL FUNCTION ‘BAPI_PRODORDCONF_CREATE_TT’
EXPORTING
post_wrong_entries = ‘0’
testrun = ‘X’
TABLES
timetickets = gt_tickets
detail_return = gt_return.
-
SORT gt_return BY type id number. "不能排序,因会把错误排到下面去,无法正确提醒 ABAP 20130121
DELETE ADJACENT DUPLICATES FROM gt_return.
ROLLBACK WORK. "ADD 20121030
LOOP AT gt_return WHERE type = ‘E’.
MESSAGE e105(zpp) WITH gt_return-message.
ENDLOOP.
ENDIF."if ( sy-ucomm = ‘OK_POST1’ or sy-ucomm = ‘OK_POST’) and c_dwerk+0(2) ne ‘26’ . "add 入库点击保存时也能报工 ABAP 20121011
IF ( sy-ucomm = ‘OK_POST1’ OR sy-ucomm = ‘OK_POST’).
CALL FUNCTION ‘BAPI_PRODORDCONF_CREATE_TT’
EXPORTING
post_wrong_entries = ‘0’ -
IMPORTING
-
return = gt_return1 TABLES timetickets = gt_tickets detail_return = gt_return.
IF sy-subrc <> 0.
ROLLBACK WORK. "ADD 20121030
ENDIF. -
SORT gt_return BY type id number."不能排序,因会把错误排到下面去,无法正确提醒 ABAP 20130121
DELETE ADJACENT DUPLICATES FROM gt_return.
***** 针对工单错误ID为 CO ,NUM为341的错误,系统挂起3秒钟
**** 并执行循环执行3次。如果不成功,则输出错误消息;
READ TABLE gt_return WITH KEY type = ‘E’
id = ‘CO’
number = ‘341’.
IF sy-subrc = 0. " 如果有此Error
WAIT UP TO 3 SECONDS. " 挂起3秒
DO 3 TIMES. "再执行3 次.
CLEAR gt_return[].
CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
EXPORTING
post_wrong_entries = '0'
-
testrun = 'X'
-
importing
-
return = TABLES timetickets = gt_tickets detail_return = gt_return. IF sy-subrc <> 0. ROLLBACK WORK. ENDIF. READ TABLE gt_return WITH KEY type = 'E' id = 'CO' number = '341'. IF sy-subrc <> 0. "没有CO 341 ERROR,可能是其它错误或者没有错误 EXIT. ELSE. " 如果有此Error WAIT UP TO 3 SECONDS. ENDIF. ENDDO.
***** 处理错误消息
LOOP AT gt_return WHERE type = ‘E’ .
ROLLBACK WORK. "added by abap 20121121 for 有报工,没有入库成功的问题,或者报工COMMIT提交时有错误,还是提交了的问题
MESSAGE e105(zpp) WITH gt_return-message.
-
PERFORM write_log USING 'M' gt_return-message. ENDLOOP.
ELSE.
***** 处理错误消息
LOOP AT gt_return WHERE type = ‘E’ .
ROLLBACK WORK. "added by abap 20121121 for 有报工,没有入库成功的问题,或者报工COMMIT提交时有错误,还是提交了的问题
MESSAGE e105(zpp) WITH gt_return-message.
ENDLOOP.
ENDIF.
CLEAR:gt_tickets[],gt_return[].ENDIF.
ENDIF.