接收入库接口探索Word下载.docx

上传人:b****4 文档编号:17567824 上传时间:2022-12-07 格式:DOCX 页数:12 大小:168.62KB
下载 相关 举报
接收入库接口探索Word下载.docx_第1页
第1页 / 共12页
接收入库接口探索Word下载.docx_第2页
第2页 / 共12页
接收入库接口探索Word下载.docx_第3页
第3页 / 共12页
接收入库接口探索Word下载.docx_第4页
第4页 / 共12页
接收入库接口探索Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

接收入库接口探索Word下载.docx

《接收入库接口探索Word下载.docx》由会员分享,可在线阅读,更多相关《接收入库接口探索Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

接收入库接口探索Word下载.docx

Rcv_transaction

这张表的内容是已经接收入库的事物处理记录,在标准入库或检验入库的时候,我们可能需要其中的接收信息。

Rcv_shipment_headers

发运头表

Rcv_shipment_lines

发运行表

标准订单以及一揽子采购协议发放

1.对于标准订单,当订单被approve之后,系统会在mtl_supply这张表中插入该订单相关的记录,系统默认为每一个订单分配行生成一条mtl_supply数据,其supply_type_code值为“PO”,表示物料供应的来源,目前是来自po订单。

所以mtl_supply表中,对于标准订单以及一揽子发放,其数据层次是明细到分配行的,即根据distribution_id可以唯一确定一个mtl_supply行:

SELECTpha.segment1,

pla.line_num,

plla.shipment_num,

pda.distribution_num,

ms.supply_type_code,

ms.quantity

FROMmtl_supplyms,

po_headers_allpha,

po_lines_allpla,

po_line_locations_allplla,

po_distributions_allpda

WHEREms.po_distribution_id=pda.po_distribution_id

ANDms.supply_type_code='

PO'

ANDpha.po_header_id=pla.po_header_id

ANDplla.po_header_id=pha.po_header_id

ANDplla.po_line_id=pla.po_line_id

ANDpda.line_location_id=plla.line_location_id

ANDpha.segment1='

1000100'

以上sql语句将筛选出订单编号为‘1000100’的订单可以接收的distribution行以及可以接收的数量。

注意:

在这个时候,rcv_shipmet_headers以及rcv_shipment_lines这两张表中还没有数据,这是po订单与内部请购单接收数据流中的一个较大的差异。

造成这种差异的原因是:

对于po订单,其发运对象是外部供应商,系统无法控制以及检测外部供应商的发运动作,所以只能在做接收的时候,才能生成发运信息,在任何接收之前,系统是不知道任何发运数据的;

而对于内部请购单生成的SalesOrder来说,发运对象是公司内部其它组织或ou,发运信息是在其他组织或OU做SO的发运时就产生了,而不必等到接收的时候才产生相应的发运信息。

由于以上差异,在po订单做接收时,接口中不必提供shipment信息,而在po入库以及内部请购单生成的so接收的时候,则需要提供shipment信息。

2.接下来,当我们为po订单做接收的时候,系统会生成相应的shipment信息,经过测试,每次接收会生成一个新的shipment头,每个接收行会生成一个新的shipment行。

所以,对于po接收,其接收的transactionid与发运行的shipmentlineid是一一对应的,在做po入库的时候,可以利用这一点,通过shipmentline找到可以入库的parenttransactionid。

另外,对于po接收,其在发运行中的quantityreceived与quantityshipped字段的值总是一样的,因为发运记录是完全参照接收记录生成的。

3.对于直接入库的订单,接收后将同时在RCV_TRANSACTION中生成接收记录以及入库记录;

对于标准接收则分为接收和入库两个步骤,接收生成接收事务处理记录,并且同时在MTL_SUPPLY中可以找到mtl_supply_type为“RECEIVING”的记录,表示存在可入库记录了,入库来源是“RECEIVING”。

入库后再同一张表(RCV_TRANSACTION)中生成入库事务处理记录;

虽然接收后在MTL_SUPPLY表中可以查到可入库的信息,但是因为接收后已经在RCV_TRANSACTION中产生了接收事务处理记录,理论上来说,以上两者的数据应当是等价的,但是这时候我们习惯于从RCV_TRANSACTION表中查找可以入库的记录。

对于需要检验的接收入库,在接收后,需要完成检验,对接收记录打上检验通过标记后,才能进行入库动作,最终生成入库事务处理记录。

标准订单接收入库数据流向图

对内部请购单生成的SalesOrder的接收入库

内部请购单因为涉及到内部销售订单以及发运信息,所以比PO单的接收多了若干环节,显得较为复杂。

基本的数据流如下:

1.创建内部请购单,审批成功后,通过请求生成对应的SalesOrder,完成从PO表到OE表的第一个步骤的数据流动。

可以通过OE表的Reference字段来追溯对应的请购单(IR)。

这时候虽然在MTL_SUPPLY中也产生了供应数据,但是这个时候是无法对这个IR进行接收的,因为对应的SO还没有发运记录,没有发运怎么能接收呢。

2.对SO进行挑库发放,确认发运后,在RCV_SHIPMENT中生成了发运记录。

完成了第二个步骤的数据流动。

注意,由于存在SO拆行,以及分批发运的状况,所以发运行与IR的行是不存在严格意义上的数量对应关系的,一个IR行生成的SO行,可能被拆分在若干个发运记录中,这也是在做IR接收入库时,接口表要求插入发运信息的原因,对于IR的接收,是以发运事务处理为单位的。

发放确认后,在MTL_SUPPLY中,将可以找到supply_type_code为“SHIPMENT”的供应记录,表示从这个时刻起,这个IR相关的订单可以开始接收了,接收来源是“SHIPMENT”;

3.接下来的步骤基本和PO接收入库一致。

值得注意的是在对IR生成的SO做接收时,可以发现一个明显的特点,接收事务处理界面中的可接收记录根据发运方式被拆成了多行,而不像PO接收时那样一个PO行对应一行可接收记录。

这也直接说明了对于IR来说接收是以发运为单位进行的。

接口表注意事项

不同的入库方式

Oracle提供了三种可选的入库方式(在PO订单分配行界面维护):

接收后,进行入库动作,才完成最终入库;

3.要求检验的入库:

接收后,进行检验,打印检验通过标记后,才能进行入库动作。

对于这三种接收入库,接口表通过不同的控制字段来完成期望的接收入库动作:

a)对于直接入库的接收,插接收事务处理的接口行表(rcv_transactions_interface)时的几个关键的状态字段:

rcv_transactions_interface.transaction_type:

='

RECEIVE'

;

rcv_transactions_interface.auto_transact_code:

DELIVER'

rcv_transactions_interface.destination_type_code:

INVENTORY'

b)对于标准以及需检验的入库的接收,插接收事务处理的接口行表(rcv_transactions_interface)时的几个关键的状态字段:

=NULL;

RECEIVING'

c)对于接收甚至检验后的数据做入库时,插接收事务处理的接口行表(rcv_transactions_interface)时的几个关键的状态字段:

rcv_transactions_interface.transaction_type:

rcv_transactions_interface.auto_transact_code:

rcv_transactions_interface.destination_type_code:

可入库数量

我们需要判断可入库数量,这是对入库接口数据的一项基本校验,是否有足够的数量可以入库,我们分别给出PO以及IR的可入库数量的算法:

对于PO单(标准采购订单,一揽子发放):

FUNCTIONcheck_po_valid_quantity(p_routing_idINNUMBER

p_line_location_idINNUMBER

p_deliver_qtyINNUMBER

p_uom_codeINVARCHAR2

p_item_idINNUMBER)RETURNVARCHAR2IS

l_qtyNUMBER:

=0;

l_valid_quantityNUMBER:

l_ship_uom_codeVARCHAR2(3);

CURSORcur_valid_lines(i_routing_idINNUMBER)IS

SELECTms.quantity,muom.uom_code

FROMmtl_supplyms,rcv_transactionsrt,mtl_units_of_measuremuom

WHERErt.transaction_id=ms.rcv_transaction_id

ANDrt.inspection_status_code=

decode(i_routing_id,1,rt.inspection_status_code,2,'

ACCEPTED'

ANDms.supply_type_code='

RECEIVING'

ANDms.po_line_location_id=p_line_location_id

ANDmuom.unit_of_measure=ms.unit_of_measure;

BEGIN

IF(p_routing_id='

1'

ORp_routing_id='

2'

)THEN

--standardorinspectrequireddeliver

FORrec_valid_lineINcur_valid_lines(p_routing_id)LOOP

l_qty:

=rec_valid_line.quantity;

--transactquantityaccordingtouom

IF(rec_valid_line.uom_code<

>

p_uom_code)THEN

=inv_convert.inv_um_convert(p_item_id,

6,

l_qty,

rec_valid_line.uom_code,

p_uom_code,

NULL,

NULL);

ENDIF;

l_valid_quantity:

=l_valid_quantity+l_qty;

ENDLOOP;

ELSIF(p_routing_id='

3'

--directdeliver

SELECTplla.quantity-plla.quantity_received-plla.quantity_cancelled,muom.uom_code

INTOl_valid_quantity,l_ship_uom_code

FROMpo_line_locations_allplla,mtl_units_of_measuremuom

WHEREplla.quantity-plla.quantity_received-plla.quantity_cancelled>

0

ANDmuom.unit_of_measure=plla.unit_meas_lookup_code

ANDplla.line_location_id=p_line_location_id;

IF(l_ship_uom_code<

l_valid_quantity,

l_ship_uom_code,

xxdomi_cn_conc_utl.debug('

l_valid_quantity:

'

||l_valid_quantity||'

;

p_deliver_qty:

||

p_deliver_qty);

IF(l_valid_quantity>

=p_deliver_qty)THEN

RETURN'

VALID'

ELSE

INVALID'

EXCEPTION

WHENOTHERSTHEN

xxdomi_cn_conc_utl.log_msg('

check_po_valid_quantity:

||SQLERRM);

ENDcheck_po_valid_quantity;

对于IR

FUNCTIONcheck_ir_valid_quantity(p_routing_idINNUMBER

p_req_line_idINNUMBER

--validlinesforrouting_id1&

2

WHEREms.req_line_id=p_req_line_id

ANDms.rcv_transaction_id=rt.transaction_id

--validlinesforrouting_id3

CURSORcur_dir_valid_linesIS

FROMmtl_supplyms,mtl_units_of_measuremuom

SHIPMENT'

)THEN

--directdeliver

FORrec_dir_valid_lineINcur_dir_valid_linesLOOP

=rec_dir_valid_line.quantity;

IF(rec_dir_valid_line.uom_code<

rec_dir_valid_line.uom_code,

check_ir_valid_quantity:

ENDcheck_ir_valid_quantity;

以上检查程序综合考虑了不同的三种入库方式,其中p_routing_id有三种值:

1:

表示标准入库;

2:

表示需要检验的入库;

3:

表示直接入库;

以上程序也考虑到了单位的转换,支持入库单位与接收单位不想同的情况下的入库数量校验。

对于带批次或序列号的接收入库

对于带批次或序列号的接收入库,对于1行rcv_transactions_interface记录需要额外插两张MTL的接口表。

这里有一个比较诡异的地方,就是接收入库时,插rcv_serials_interface,以及rcv_lots_interface这两张表是没用的,而一定要插mtl_transaction_lots_interface以及mtl_serial_numbers_interface这两张MTL表,而且对应的要设置

rcv_transactions_interface.use_mtl_lot:

=2;

rcv_transactions_interface.use_mtl_serial:

以下程序在11i下验证通过。

--lotinfo------------

IF(rec_line.lot_numberISNOTNULL)THEN

mtl_transaction_lots_interfac.last_update_date:

=SYSDATE;

mtl_transaction_lots_interfac.last_updated_by:

=fnd_global.user_id;

mtl_transaction_lots_interfac.creation_date:

mtl_transaction_lots_interfac.created_by:

mtl_transaction_lots_interfac.last_update_login:

=-1;

mtl_transaction_lots_interfac.product_code:

RCV'

mtl_transaction_lots_interfac.product_transaction_id:

=rcv_transactions_interface.interface_transaction_id;

mtl_transaction_lots_interfac.lot_number:

=rec_line.lot_number;

mtl_transaction_lots_interfac.transaction_quantity:

=l_iface_rcv_rec.quantity;

mtl_transaction_lots_interfac.primary_quantity:

=l_primary_qty;

SELECTmtl_material_transactions_s.NEXT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1