物料组的审核策略:
*&---------------------------------------------------------------------*
*& Include ZXM06U22
*&---------------------------------------------------------------------*
*\"----------------------------------------------------------------------
*\" IMPORTING
*\" VALUE(I_CEKKO) LIKE CEKKO STRUCTURE CEKKO
*\" VALUE(IT_BEKPO) TYPE MMPUR_BEKPO OPTIONAL
*\" VALUE(IT_BEKET) TYPE MMPUR_BEKET OPTIONAL
*\" VALUE(IT_EKKNU) TYPE MMPUR_EKKNU OPTIONAL
*\" EXPORTING
*\" VALUE(E_CEKKO) LIKE CEKKO STRUCTURE CEKKO
*\"----------------------------------------------------------------------
DATA: WA_BEKPO type BEKPO.
DATA: WA_MATKL LIKE EKPO-MATKL.
* Material group: 1- only Material grp 1, 2- only Material grp 2, 3-include Material grp 1 & 2
DATA: ZMAT_GROUP TYPE INTEGER.
ZMAT_GROUP = 0.
IF I_CEKKO-BSART = 'NB' OR I_CEKKO-BSART = 'ZNB'.
LOOP AT IT_BEKPO into WA_BEKPO.
CHECK WA_BEKPO-LOEKZ IS INITIAL.
* SELECT MATKL INTO WA_MATKL FROM EKPO
* WHERE EBELN = WA_BEKPO-EBELN.
* IF WA_BEKPO-MATKL = '1101' OR WA_BEKPO-MATKL = '1102' OR WA_BEKPO-MATKL WA_BEKPO-MATKL
= =
'1103' '1202'
OR OR
WA_BEKPO-MATKL WA_BEKPO-MATKL
= =
'1201' '1203'
OR OR
WA_BEKPO-MATKL = '1301' OR WA_BEKPO-MATKL = '1302'
* OR WA_BEKPO-MATKL = '1303' OR WA_BEKPO-MATKL = '1304' OR WA_BEKPO-MATKL WA_BEKPO-MATKL
= =
'1305' '1402'
OR OR
WA_BEKPO-MATKL WA_BEKPO-MATKL
= =
'1401' '1403'
OR OR
WA_BEKPO-MATKL = '1404' OR WA_BEKPO-MATKL = '1405'
* OR WA_BEKPO-MATKL = '1406' OR WA_BEKPO-MATKL = '1407' OR WA_BEKPO-MATKL
=
'1408'
OR
WA_BEKPO-MATKL
=
'1409'
OR
WA_BEKPO-MATKL = '2001'.
IF NOT ( WA_BEKPO-MATKL = '1001' OR WA_BEKPO-MATKL = '1002' ) .
IF ZMAT_GROUP = 2.
ZMAT_GROUP = 3.
ENDIF.
IF ZMAT_GROUP = 0.
ZMAT_GROUP = 1.
ENDIF.
ENDIF.
IF WA_BEKPO-MATKL = '1001' OR WA_BEKPO-MATKL = '1002'.
IF ZMAT_GROUP = 1.
ZMAT_GROUP = 3.
ENDIF.
IF ZMAT_GROUP = 0.
ZMAT_GROUP = 2.
ENDIF.
ENDIF.
* ENDSELECT.
ENDLOOP.
IF ZMAT_GROUP = 1.
I_CEKKO-USRC1 = 'B0'.
ENDIF.
IF ZMAT_GROUP = 2 OR ZMAT_GROUP = 3.
I_CEKKO-USRC1 = 'B1'.
ENDIF.
ENDIF.
* exchange data with the calling report
move-corresponding i_cekko to e_cekko.
付款条件的审批策略的增强:
EXIT_SAPLEBND_002
BADI:ZIM_MM_RELEASE -SE19 Classic BADI
*&---------------------------------------------------------------------* *& 包括 ZXM06U22
*&---------------------------------------------------------------------* *\"---------------------------------------------------------------------- *\" IMPORTING
*\" VALUE(I_CEKKO) LIKE CEKKO STRUCTURE CEKKO *\" VALUE(IT_BEKPO) TYPE MMPUR_BEKPO OPTIONAL *\" VALUE(IT_BEKET) TYPE MMPUR_BEKET OPTIONAL *\" VALUE(IT_EKKNU) TYPE MMPUR_EKKNU OPTIONAL *\" EXPORTING
*\" VALUE(E_CEKKO) LIKE CEKKO STRUCTURE CEKKO
*\"----------------------------------------------------------------------
DATA : WA_EKKO TYPE EKKO , \"采购订单表头
WA_EKPO TYPE BEKPO . \"采购订单项目 \"
DATA : Z_TERM TYPE DZTERM ,
Z_AMT TYPE CEKKO-GNETW VALUE 0 .
IMPORT ZPOTERM = WA_EKKO-ZTERM FROM MEMORY ID 'ZPOTERM' .
IF WA_EKKO-ZTERM = SPACE .
READ TABLE it_bekpo into wa_ekpo INDEX 1 .
* ---取付款条件
select SINGLE * into wa_ekko
from ekko
where ebeln = wa_ekpo-ebeln
and loekz = space .
IF SY-SUBRC <> 0 .
SELECT SINGLE ZTERM INTO WA_EKKO-ZTERM
FROM LFM1
WHERE LIFNR = I_CEKKO-LIFNR .
ENDIF .
FREE MEMORY ID 'ZPOTERM' .
ENDIF.
*currency change
IF I_CEKKO-WAERS <> 'RMB' .
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
* CLIENT = SY-MANDT
DATE = sy-datum
FOREIGN_AMOUNT = I_CEKKO-GNETW
FOREIGN_CURRENCY = I_CEKKO-WAERS
LOCAL_CURRENCY = 'RMB'
* RATE = 0 * TYPE_OF_RATE = 'M' * READ_TCURR = 'X'
IMPORTING
* EXCHANGE_RATE = * FOREIGN_FACTOR =
LOCAL_AMOUNT = Z_AMT
* LOCAL_FACTOR = * EXCHANGE_RATEX =
* FIXED_RATE = * DERIVED_RATE_TYPE =
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE .
MOVE I_CEKKO-GNETW TO Z_AMT .
ENDIF .
*---检查审批策略--------
CASE I_CEKKO-EKGRP.
WHEN 'S01'.
I_CEKKO-USRC1 = 'S1' .
WHEN 'H07'.
IF I_CEKKO-GNETW BETWEEN 0 AND 10000.
I_CEKKO-USRC1 = 'X1' .
ELSE .
I_CEKKO-USRC1 = 'X2' .
ENDIF.
WHEN 'H08' .
IF I_CEKKO-GNETW BETWEEN 0 AND 10000.
I_CEKKO-USRC1 = 'W1' .
ELSE .
I_CEKKO-USRC1 = 'W2' .
ENDIF.
WHEN 'H01' OR 'H02' OR 'H03' OR 'H04' OR 'H06' OR 'H09' .
IF ( WA_EKKO-ZTERM = 'Z100' OR WA_EKKO-ZTERM = 'Z101' OR WA_EKKO-ZTERM = 'Z102' OR I_CEKKO-BSART = 'ZRSO' ) .
IF Z_AMT BETWEEN 0 AND 50000 .
I_CEKKO-USRC1 = 'E1' .
ELSEIF Z_AMT BETWEEN 50001 AND 400000 .
I_CEKKO-USRC1 = 'Z3' .
ELSE .
I_CEKKO-USRC1 = 'Z5' .
ENDIF.
ELSE .
IF Z_AMT BETWEEN 0 AND 50000 .
I_CEKKO-USRC1 = 'Z1' .
ELSEIF Z_AMT BETWEEN 50001 AND 400000 .
I_CEKKO-USRC1 = 'Z3' .
ELSE .
I_CEKKO-USRC1 = 'Z5' .
ENDIF .
ENDIF .
WHEN 'H05' .
IF ( WA_EKKO-ZTERM = 'Z100' OR WA_EKKO-ZTERM = 'Z101' OR WA_EKKO-ZTERM = 'Z102' OR I_CEKKO-BSART = 'ZRSO') .
IF Z_AMT BETWEEN 0 AND 50000 .
I_CEKKO-USRC1 = 'E2' .
ELSEIF Z_AMT BETWEEN 50001 AND 400000 .
I_CEKKO-USRC1 = 'Z4' .
ELSE .
I_CEKKO-USRC1 = 'Z6' .
ENDIF.
ELSE .
IF Z_AMT BETWEEN 0 AND 50000 .
I_CEKKO-USRC1 = 'Z2' .
ELSEIF Z_AMT BETWEEN 50001 AND 400000 .
I_CEKKO-USRC1 = 'Z4' .
ELSE .
I_CEKKO-USRC1 = 'Z6' .
ENDIF .
ENDIF .
WHEN OTHERS.
ENDCASE.
*-----保存更改值
move-corresponding i_cekko to e_cekko.
退货PO多级审批-增强代码
*--------------------------Add by qin.hp-------------------------* *& ZRE PO (退货PO) 多级审批 *& 1. 金额 0~~50000 两级审批 *& 2. 金额 50000~~100000 三级审批
*& 3. 金额 100000 以上 四级审批
DATA: WA_BEKPO type BEKPO.
DATA: Z_AMT TYPE CEKKO-GNETW VALUE 0.
IF I_CEKKO-BSART = 'ZRE'.
LOOP AT IT_BEKPO INTO WA_BEKPO.
I_CEKKO-GNETW = I_CEKKO-GNETW + WA_BEKPO-NETWR.
ENDLOOP.
IF I_CEKKO-WAERS <> 'RMB'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
* CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_AMOUNT = I_CEKKO-GNETW
FOREIGN_CURRENCY = I_CEKKO-WAERS
LOCAL_CURRENCY = 'RMB'
* RATE = 0 * TYPE_OF_RATE = 'M' * READ_TCURR = 'X'
IMPORTING
* EXCHANGE_RATE = * FOREIGN_FACTOR =
LOCAL_AMOUNT = Z_AMT
* LOCAL_FACTOR = * EXCHANGE_RATEX = * FIXED_RATE = * DERIVED_RATE_TYPE =
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
MOVE I_CEKKO-GNETW TO Z_AMT.
ENDIF.
IF Z_AMT > 0 AND Z_AMT < 50000.
I_CEKKO-USRC1 = '03'.
ELSEIF Z_AMT >= 50000 AND Z_AMT < 100000.
I_CEKKO-USRC1 = '02'.
ELSE.
I_CEKKO-USRC1 = '01'.
ENDIF.
ENDIF.
MOVE-CORRESPONDING I_CEKKO TO E_CEKKO.
*--------------------------Add by qin.hp-------------------------* TABLES: marc,ekpo,ekbe,wb2_v_mkpf_mseg2.
DATA: i_bekpo LIKE it_bekpo WITH HEADER LINE.
DATA: v_str TYPE string.
DATA: v_ebeln LIKE ekbe-ebeln.
DATA: zok_code TYPE sy-ucomm.
DATA: p LIKE ekpo-pstyp.
DATA: BEGIN OF w_bekpo.
INCLUDE STRUCTURE i_bekpo.
DATA: END OF w_bekpo.
DATA: i_ekpo LIKE ekpo.
DATA: z_mtart LIKE mara-mtart.
i_bekpo[] = it_bekpo[].
CLEAR w_bekpo.
LOOP AT i_bekpo INTO w_bekpo.
IF w_bekpo-updkz EQ 'U'.
SELECT * FROM ekpo
WHERE ekpo~mandt = sy-mandt
AND ekpo~ebeln = w_bekpo-ebeln
AND ekpo~ebelp = w_bekpo-ebelp.
MOVE-CORRESPONDING ekpo TO i_ekpo.
ENDSELECT.
CLEAR v_str.
IF w_bekpo-loekz NE 'L' AND i_ekpo-loekz EQ 'L'.
CONCATENATE '订单项目' w_bekpo-ebeln '/' w_bekpo-ebelp
'已删除,不允许恢复!'
INTO v_str.
MESSAGE v_str TYPE 'E'.
ENDIF.
\" IF ( i_ekpo-netpr NE w_bekpo-netpr OR i_ekpo-peinh NE w_bekpo-peinh ). \"当有ZM01 专用-按一定数量扣款(相对负值)的价格时,用NETPR的价格不正确
IF ( i_ekpo-brtwr EQ w_bekpo-brtwr AND i_ekpo-menge EQ w_bekpo-menge ).\"当总价和总数量都没有变,直接跳过价格修改检查
ELSE.\"总数量或总价不相同时,再对比单位净价是否有改变,如果是ZM01的行项目又更改数量的时候,还是有问题
IF ( i_ekpo-netpr NE w_bekpo-netpr OR i_ekpo-peinh NE w_bekpo-peinh ).
SELECT SINGLE * FROM ekbe
WHERE ekbe~mandt = sy-mandt
* AND ekbe~bewtp = 'Q'
AND ekbe~ebeln = w_bekpo-ebeln
AND ekbe~ebelp = w_bekpo-ebelp.
IF sy-subrc EQ 0.
CONCATENATE '订单项目' w_bekpo-ebeln '/' w_bekpo-ebelp
'已存在收货历史,请不要随意修改单价!'
INTO v_str.
MESSAGE v_str TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
IF w_bekpo-loekz EQ 'L' AND i_ekpo-loekz NE 'L'.
CLEAR v_ebeln.
SELECT SINGLE ekbe~ebelp INTO v_ebeln
FROM ekbe
WHERE ekbe~mandt = sy-mandt
AND ekbe~bewtp = 'Q'
AND ekbe~ebeln = w_bekpo-ebeln
AND ekbe~ebelp = w_bekpo-ebelp.
IF v_ebeln NE space.
CONCATENATE '项目' w_bekpo-ebeln '/' w_bekpo-ebelp
'的采购校验历史已存在,不能删除!'
INTO v_str.
MESSAGE v_str TYPE 'E'.
ENDIF.
* endif.
IF i_ekpo-pstyp = '3'.
SELECT SINGLE *
FROM wb2_v_mkpf_mseg2
WHERE mandt_i = sy-mandt
AND bwart_i = '541'
AND ebeln_i = w_bekpo-ebeln.
IF sy-subrc = 0.
CONCATENATE '采购单' w_bekpo-ebeln
'的外协发料历史已存在,不允许删除其任意项目!'
INTO v_str.
MESSAGE v_str TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
ELSEIF w_bekpo-updkz EQ 'I'.
IF i_cekko-bsart EQ 'NB'.
IF w_bekpo-pstyp NE '9'.
IF ( w_bekpo-werks NE '1100' ) AND ( w_bekpo-banfn EQ space ).
MESSAGE '请根据采购申请下单!' TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
IF w_bekpo-knttp = 'Z'.
SELECT SINGLE mtart INTO z_mtart FROM mara
WHERE matnr = w_bekpo-matnr.
IF z_mtart NE 'ZUNB'.
CONCATENATE '物料' w_bekpo-matnr
'不是客供料,不可以下客供采购订单!' INTO v_str.
MESSAGE v_str TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
MOVE i_cekko TO e_cekko.
PO 收货的增强---不允许跨月或提前7天不能收货
EXIT_SAPMM07M_001
*&---------------------------------------------------------------------* *& 包括 ZXMBCU02
*&---------------------------------------------------------------------* *\"---------------------------------------------------------------------- *\"*\"Lokale Schnittstelle: *\" IMPORTING
*\" VALUE(I_MSEG) LIKE MSEG STRUCTURE MSEG *\" VALUE(I_VM07M) LIKE VM07M STRUCTURE VM07M *\" VALUE(I_DM07M) LIKE DM07M STRUCTURE DM07M *\" VALUE(I_MKPF) LIKE MKPF STRUCTURE MKPF
*\" EXPORTING
*\" VALUE(E_SGTXT) LIKE MSEG-SGTXT
*\"----------------------------------------------------------------------
IF I_MSEG-BWART = '101' OR I_MSEG-BWART = '103' OR I_MSEG-BWART = '105'.
DATA :PO TYPE EBELN ,PO_TYP TYPE BSART , PO_DATE TYPE EINDT.
SELECT SINGLE BSART INTO PO_TYP
FROM EKKO
WHERE EBELN = I_MSEG-EBELN .
IF SY-SUBRC = 0 .
IF PO_TYP = 'ZNB' OR PO_TYP = 'ZMOQ' OR PO_TYP = 'ZRSO' OR PO_TYP = 'ZTDG' OR PO_TYP = 'ZTNB' .
SELECT MAX( SLFDT ) INTO PO_DATE
FROM EKET
WHERE EBELN = I_MSEG-EBELN AND EBELP = I_MSEG-EBELP .
*<-------跨月判断 -- 过帐日期 在 实际交货日期以后 正常,否则跨月.
IF I_MKPF-BUDAT(6) < PO_DATE(6) .
MESSAGE E001(00) WITH '不允许跨月收货' .
ENDIF .
PO_DATE = PO_DATE - 7 .
IF I_MKPF-BUDAT < PO_DATE .
MESSAGE E001(00) WITH '回复交货日期 7 天前不能收货'.
ENDIF.
ENDIF.
ENDIF .
ENDIF.
IF E_SGTXT is initial.
E_SGTXT = I_MSEG-SGTXT.
ENDIF. \"
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务