BADI:ME_PROCESS_PO_CUST
需求:
2.1 根据采购申请是否经过修改或采购申请的类型,确定订单为一级审批还是二级审批。一级
审批订单汇总号为80,二级审批订单汇总号为90。系统默认订单汇总号为80,以下情况下订
单需要做二级审批,程序增强将汇总号由80 变为90:
1)类型为NB 的采购申请转采购订单时,如果用户修改了行项目的数量;
2)类型为NB 的采购申请转采购订单时,如果用户未按货源清单或设定的配额分配订单时;
3)从类型为NB 的采购申请转成的采购订单,用户通过ME22N 修改采购订单;
4)类型为ZPR1、ZPR2、ZPR8(备货采购、紧急采购、退货)的采购申请转采购订单时;
5)定线订单的确认数量经过修改时;
2.2 读取最新的改版信息,与用户录入的版次进行校验,提示用户最新的改版版本
对于类型为ZP02(包材)的订单,用户在行项目的批次栏填入物料的版次号,保存订单
时,系统从物料主数据读取最新的改版信息(字段:MARA-ZEINR),并与用户录入的版次号进
行校验,如不一致,发出警告“*****物料的最新版次号为*****”。
2.3 订单保存时检查运输商和供应商是否同一个。
订单保存时,如果该订单涉及到运费(国际贸易条件不是“100”),系统检查运输商和供
应商是否为同一个编码,如果为同一编码,发出警告“供应商与运输商为同一个公司”
系统逻辑:查找采购订单的条件记录ZFR1 中的运输商与采购订单的供应商
2.4 订单保存时提示用户某物料有改版控制量。
对于类型为ZP02(包材)的订单,用户保存订单时,系统检查该物料该版次在相应时间
段内是否有改版限制量,如果有,则给出发出警告“*****物料有改版限制量,请运行改版物
资完成量报表”。
系统逻辑:查找ZMM_GB 数据表中某物料某版次改版限制量的有效期,如果下订单的时
间在有效期内,则发出警告。(具体见功能说明书《改版物资限制量》)。
2.5 类型为ZP01、ZP02 的订单必须有采购申请的来源才能创建订单。
(1)订单header处理
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER.
include MM_MESSAGES_MAC.
DATA:l_head TYPE mepoheader.
DATA:l_item TYPE mepoitem.
DATA:L_BANFN TYPE EBAN-BANFN,"
wa_EBAN type eban."采购申请头
data:items type purchase_order_items,
item_obj type purchase_order_item.
l_head = IM_HEADER->get_data( ).
items = im_header->get_items( ) .
clear:wa_EBAN.
loop at items into item_obj .
l_item = item_obj-item->get_data( ).
if l_item-BANFN <> ''.
select single * into wa_EBAN from EBAN where BANFN = l_item-BANFN and BNFPO = l_item-BNFPO.
case wa_EBAN-BSART.
when 'ZPR1' OR 'ZPR2' OR 'ZPR8'.
L_HEAD-SUBMI = '90'.
IM_HEADER->set_data( IM_DATA = L_HEAD ).
CONTINUE.
WHEN 'NB' OR 'NB1' OR 'NB2' OR 'NB3'.
if wa_EBAN-MENGE <> l_item-MENGE.
L_HEAD-SUBMI = '90'.
IM_HEADER->set_data( IM_DATA = L_HEAD ).
CONTINUE.
endif.
endcase.
endif.
endloop.
BREAK zhangdq.
if sy-TCODE = 'ME21N' .
IF l_head-BSART = 'ZPO1' OR l_head-BSART = 'ZPO2' OR l_head-BSART = 'ZPO3'
OR l_head-BSART = 'ZPO4' OR l_head-BSART = 'ZPO5' OR l_head-BSART = 'ZPO6'
OR l_head-BSART = 'ZPO7' OR l_head-BSART = 'ZPO8' OR l_head-BSART = 'ZPO9'.
if L_HEAD-SUBMI = '' .
L_HEAD-SUBMI = '80'.
IM_HEADER->set_data( IM_DATA = L_HEAD ).
endif.
ENDIF.
ENDIF.
endmethod.
(2)订单ITEM处理
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
include MM_MESSAGES_MAC.
data:wa_mara type mara.
DATA : re_header TYPE mepoheader.
DATA:l_item TYPE mepoitem.
DATA: l_header TYPE REF TO if_purchase_order_mm."采购订单抬头
DATA: WA_ZMMT_GB TYPE ZMMT_GB.
DATA:L_BANFN TYPE EBAN-BANFN,"
wa_EBAN type eban."采购申请头
l_header = im_item->get_header( ).
re_header = l_header->get_data( )."获取头信息
l_item = im_item->get_data( ).
*1…读取最新的改版信息,与用户录入的版次进行校验,提示用户最新的改版版本
*对于类型为ZP02(包材)的订单,用户在行项目的批次栏填入物料的版次号,保存订单
*时,系统从物料主数据读取最新的改版信息(字段:MARA-ZEINR),并与用户录入的版次号进
*行校验,如不一致,发出警告“*****物料的最新版次号为*****”。
*2….对于类型为ZP02(包材)的订单,用户保存订单时,系统检查该物料该版次在相应时间
*段内是否有改版限制量,如果有,则给出发出警告“*****物料有改版限制量,请运行改版物
*资完成量报表”。
*系统逻辑:查找ZMM_GB 数据表中某物料某版次改版限制量的有效期,如果下订单的时
*间在有效期内,则发出警告。(具体见功能说明书《改版物资限制量》)。
BREAK ZHANGDQ.
CLEAR:wa_mara,WA_ZMMT_GB.
if re_header-BSART = 'ZPO2' .
select single * into wa_mara from mara where matnr = l_item-matnr.
if l_item-CHARG <> wa_mara-ZEINR .
mmpur_message 'W' 'ZMSG' '001' wa_mara-MATNR wa_mara-ZEINR '' ''.
ENDIF.
SELECT SINGLE * INTO WA_ZMMT_GB FROM ZMMT_GB WHERE MATNR = l_item-MATNR
AND VERID = l_item-CHARG
AND SDATE <= l_item-EINDT
AND EDATE >= l_item-EINDT.
IF SY-SUBRC = 0 .
mmpur_message 'W' 'ZMSG' '002' wa_mara-MATNR '' '' ''.
ENDIF.
ENDIF.
if l_item-BANFN <> ''.
select single * into wa_EBAN from EBAN where BANFN = l_item-BANFN and BNFPO = l_item-BNFPO.
case re_header-BSART.
when 'ZPR1' OR 'ZPR2' OR 'ZPR8'.
re_HEADer-SUBMI = '90'.
WHEN 'NB' OR 'NB1' OR 'NB2' OR 'NB3'.
if wa_EBAN-MENGE <> l_item-MENGE.
re_HEADer-SUBMI = '90'.
endif.
if re_header-BSART = 'NB' AND re_header-LIFNR <> wa_EBAN-FLIEF ."如果采购申请是NB类型,并且申请供应商和采购供应商不一致,直接设置为90
re_HEADer-SUBMI = '90'.
ENDIF.
endcase.
l_header->set_data( IM_DATA = re_HEADer ).
endif.
*订单保存时检查运输商和供应商是否同一个。
*订单保存时,如果该订单涉及到运费(国际贸易条件不是“100”),系统检查运输商和供
*应商是否为同一个编码,如果为同一编码,发出警告“供应商与运输商为同一个公司”
*系统逻辑:查找采购订单的条件记录ZFR1 中的运输商与采购订单的供应商
DATA:wa_im_komv TYPE komv.
DATA:l_get_conditions TYPE mmpur_tkomv.
endmethod.
(3)订单CHECK
method IF_EX_ME_PROCESS_PO_CUST~CHECK.
include MM_MESSAGES_MAC.
DATA: header TYPE mepoheader,
items TYPE purchase_order_items,
line_item TYPE purchase_order_item,
po_line TYPE mepoitem,
po_condition type mmpur_tkomv,
wa_im_komv TYPE komv,
eipo_line type MEPO_EIPO. "Foreign Trade: Export/Import: Item Data
data:l_flag(1)."是否能手工创建采购订单标志,只是限制ZPO1,ZPO2的订单类型
header = im_header->get_data( ).
items = im_header->get_items( ).
CLEAR:l_flag.
LOOP AT items INTO line_item.
po_line = line_item-item->get_data( ).
IF PO_LINE-BANFN = ''.
l_flag = 'X'.
ENDIF.
CALL METHOD line_item-item->get_conditions
IMPORTING
ex_conditions = po_condition.
IF header-INCO1 <> '100'.
loop at po_condition into wa_im_komv.
IF wa_im_komv-KSCHL = 'ZFR1' AND wa_im_komv-LIFNR = header-LIFNR.
mmpur_message 'W' 'ZMSG' '003' wa_im_komv-KPOSN '' '' ''.
ENDIF.
clear wa_im_komv.
endloop.
endif.
endloop.
IF ( header-BSART = 'ZPO1' OR header-BSART = 'ZPO2' ) AND l_flag = 'X' and sy-TCODE = 'ME21N'.
mmpur_message 'E' 'ZMSG' '004' '' '' '' ''.
ENDIF.
endmethod.
(4)SE91消息设置
001 &1物料的最新版次号为&2
002 &1物料有改版限制量,请运行改版物资完成量报表
003 采购订单&1行供应商与运输商为同一个公司
004 类型为ZPO1、ZPO2的订单必须有采购申请的来源才能创建订单