涉及到使用将来日期发运订单问题。原因:由于工厂的销售订单在挑库结束后由EDI程序接受对方确认发运信息后自动完成SO的确认发运。然而客户要求提前实现AR开票业务,这样就意味着工厂接受到的订单确认发运信息中的发运日期有可能是将来日期,如下图所示:
INV模块无法实现将来期间日期的出入库,从而引发物料,成本等相关问题。
所以我们要解决的问题主要分两部分:1.实现将来发运功能。2.解决将来日期发运在INV遗留的问题。应客户的愿望我们采取如下的解决方案:
1.实现将来发运功能
①设置允许将来发运日期的参数
首先我们需要设置标准功能来实现将来发运的功能,然后再解决INV的问题,如下图,再OM下我们需要进行如下设置后就可以用将来日期来发运SO.。
项目中是由客户化程序自动发运确认,这里为了演示方便我们使用手动发运确认。如下图,订单创建了交货并成功挑库后我们使用将来日期来发运确认:
这时我们来查看后台请求时会发现“Interface Trip Stop”请求报警告,警告信息是“The date you have entered cannot be a date in the future. Please enter a past date or today's date.”
③开AR发票是正常的
如下图,在LOV中可以找到该事务处理号(本系统中设置为交货号)则说明可以开AR发票(如果找不到可以到INV模块推一下工作流后再回来查看)。
2.解决将来日期发运在INV遗留的问题。
INV模块无法实现将来期间日期的出入库,但我们可以先完成确认发运(从而可以开AR发票),然后等到事物处理时间<=当前时间 的时候再进行Interface.
①首先我们来看一下mtl_transactions_interface 这个接口表
这条数据卡在接口表里,原因是使用了将来日期,注意当前PROCESS_FLAG为3。
②制作并发请求完成Interface
这是我们可以做一个并发程序程序的主函数如下
CURSOR cur_mti_errors(p_organization_id IN NUMBER) IS
SELECT mti.transaction_interface_id,
mti.transaction_header_id,
mti.process_flag,
mti.transaction_date,
mti.error_code
FROM mtl_transactions_interface mti
WHERE mti.organization_id = p_organization_id
AND mti.source_code = 'ORDER ENTRY'
AND mti.transaction_date <= SYSDATE
AND (mti.ERROR_CODE LIKE
'Transaction date is a future date%The date you have entered cannot be a date in the future%'
OR mti.ERROR_CODE LIKE
'事务处理日期%是将来日期%您输入的日期不能是将来日期%')
AND mti.process_flag = 3;
这个CURSOR将当前时间可以进行Interface的数据查询出来(注意transaction_date <= SYSDATE )
然后将process_flag 置 1,如下:
UPDATE mtl_transactions_interface mti
SET mti.process_flag = 1
WHERE mti.transaction_interface_id = rec_mti_errors.transaction_interface_id;
最后调用Interface Trip Stop – SRS
--------------------------------------------------
-- Submit Request:'WSHINTERFACES':连接行程停靠站请求
--------------------------------------------------
v_request_id := fnd_request.submit_request('WSH',
'WSHINTERFACES', --连接行程停靠站请求
'',
TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'),
FALSE,
'ALL', --Mode
'', --Trip Stop
p_delivery_id, --Delivery
0, --Debug Level
'', --Batch ID
'', --Trip Type
p_organization_id,--Organization
1, --Number Of Child Process
1, --Stops per Batch
CHR(0));
③运行请求后查看发运行状态
我们可以将该请求设置成计划请求,这样每天都会轮训mtl_transactions_interface表,并将可以处理的数据Interface,这样我们即可以实现提前开AR发票又不影响库存和成本。
当transaction_date <= SYSDATE时该程序运行后则调用Interface Trip Stop – SRS程序,则发运的行的状态如下