WIP工序移动和完工接口开发
文档控制
变更记录
1
日期 作者 版本 变更说明
审阅
姓名 职位
分发
拷贝编号 姓名 位置/岗位 1 2 3 4 备注:
WIP工序移动和工单完工接口开发
在某个项目中,需要对WIP的工单的某工序进行移动,完工,同时可能涉及到超量完工。Release之后的工单可以进行工序移动事务处理,在工序移动的同时可以选择报废、(超量)完工。
接口开发简洁
接口开发简述
大量的期初数据如何进入ERP?如何使ERP的系统流程更加自动化?如何迁移/合并两个Oracle ERP系统?这些纷繁复杂的海量工作不可能全部通过手工Key到系统中,必须通过某种方式灌入ERP、再现源系统数据风貌。
处理这些业务需求的方式就是“接口”:通过一组程序把数据批量写入Oracle ERP相关表中,达到和在界面输入同样的效果:数据一致性,数据有效性,数据集成性(比如插入PO数据,要反馈到MRP的需求/供应)。 接口开发主要步骤 ? ? ? ?
工序移动接口和完工接口
接口:
该方法是往移动事务处理接口表wip_move_txn_interface 中插入验证后的数据,然后调用标准API wip_movproc_pub.processinterface 来进行移动和完工。 但是往移动事务处理接口表中插数据的时候我们怎么知道要往哪些字段插数据呢? 首先我们可以导航到EBS中的移动事务处理界面 路径:车间管理-》移动事务处理-》移动事务处理
采集数据
验证数据:按接口要求格式化数据,验证各个字段数据的合法性 往相应的接口表中插入验证后的数据
ERP接口处理请求(将数据插入ERP数据表中)
就可以查知那些字段代表了什么意思,该插什么值了。 一下是一些关键字段:
字段 transaction_type 说明 1 工序移动(缺省) 2 移动完工入库 3 移动入库返回 给1 1 Move Validation 2 Move Processing 3 Operation Backflush Setup 给1 1 Pending 2 Running 3 Error 任务名称 Current Inv Organization 组织代码,这个字段必须给 事务日期,必须between Release Date and Sysdate 移动数量 单位,可以不是主单位 起始工序号 起始工序内部步骤 终止工序号 终止工序内部步骤 随便给,一般用来追踪 必须给,比较特殊 必须给,比较特殊 习惯上都给 process_phase process_status wip_entity_name organization_id organization_code transaction_date transaction_quantity transaction_uom fm_operation_seq_num fm_intraoperation_step_type to_operation_seq_num to_intraoperation_step_type source_code last_updated_by_name created_by_name 5个who字段
在处理的时候,可以判断当前的工序是否是最后一道工序,然后在设置transaction_type
的值,确定是移动还是入库
当往接口表中插入数据之后,就可以调用wip_movproc_pub.processinterface来进行后续的处理了;
超量完工
对于超量完工的情况,只需增加多一个字段即可,往接口表中插数据的时候,同时设置overcompletion_transaction_qty的值为超量的部分的值即可;
代码范例
一下是一个代码范例
CREATE OR REPLACE PACKAGE BODY cux_wip_dispatch_utl IS g_mmt_iface mtl_transactions_interface%ROWTYPE; g_wmti_iface wip_move_txn_interface%ROWTYPE;
g_user_name VARCHAR2(30) := fnd_global.user_name;
PROCEDURE test_mmt(p_id IN NUMBER) IS l_result NUMBER; BEGIN
SELECT mti.transaction_quantity INTO l_result
FROM mtl_transactions_interface mti WHERE mti.transaction_header_id = p_id; END test_mmt;
FUNCTION get_wip_entity_name(p_wip_entity_id IN NUMBER,
p_org_id IN NUMBER) RETURN VARCHAR2 IS l_return wip_entities.wip_entity_name%TYPE; BEGIN
SELECT wip_entity_name INTO l_return
FROM wip_entities t
WHERE wip_entity_id = p_wip_entity_id AND organization_id = p_org_id; RETURN l_return;
END get_wip_entity_name;
FUNCTION get_work_order_item_id(p_wip_entity_id IN NUMBER,
p_organization_id IN NUMBER) RETURN NUMBER AS
CURSOR c_work_order IS
SELECT t.primary_item_id FROM wip_entities t
WHERE t.wip_entity_id = p_wip_entity_id
AND t.organization_id = p_organization_id; l_item_id NUMBER; BEGIN
OPEN c_work_order; FETCH c_work_order INTO l_item_id; CLOSE c_work_order; RETURN l_item_id;
END get_work_order_item_id;
FUNCTION check_txn_date_in_period(p_transaction_date IN DATE, p_organization_id IN NUMBER) RETURN VARCHAR2 AS CURSOR c_period IS SELECT 'Y'
FROM org_acct_periods t WHERE t.open_flag = 'Y'
AND t.organization_id = p_organization_id
AND trunc(p_transaction_date) BETWEEN t.period_start_date AND t.schedule_close_date; l_valid_flag VARCHAR2(1); BEGIN
OPEN c_period; FETCH c_period
INTO l_valid_flag; CLOSE c_period;
RETURN l_valid_flag;
END check_txn_date_in_period;
PROCEDURE validate_wip_complete(p_wip_entity_id IN NUMBER, p_organization_id IN NUMBER, p_transaction_date IN DATE, p_complete_qty IN NUMBER, p_uom IN VARCHAR2,