您好,欢迎来到刀刀网。
搜索
您的当前位置:首页PO 审核增强-自己总结

PO 审核增强-自己总结

来源:刀刀网


物料组的审核策略:

*&---------------------------------------------------------------------*

*& 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务