1. 程式人生 > >詳解EBS介面開發之庫存事務處理採購接收和退貨

詳解EBS介面開發之庫存事務處理採購接收和退貨

3.2   接收&退貨匯入api說明
此程式是呼叫標準API的客戶化程式,實現處理處理接收&退貨,處理方式有三種,聯機,立即,和批,具體資訊使用可以參考程式中的註釋

(五)接收&退貨匯入併發程式研究

4.1   匯入的併發請求

fnd_request.submit_request('PO',
                             'RVCTP', --
                             NULL,
                             to_char(SYSDATE, 'YYYY/MM/DD HH24:MI:SS'),
                             FALSE,
                             'BATCH', --Mode(事務處理模式)
                             p_group_id, --group_id(事務處理組標識)
                             NULL, --org_id(業務實體名)
                             chr(0))






fnd_request.submit_request('PO', --APPLICATIONI SHORT NAME;
                             'RCVDLPDT', --PROGRAME SHORT NAME;
                             '',
                             '',
                             FALSE,
                             'P_group_id=' || v_group_id,
                             'P_receipt_source_type=Supplier',
                             'P_qty_precision=2',
                             'P_org_id=' || p_organization_id);

(六)接收&退貨常用驗證

6.1  現有量檢查

inv_quantity_tree_pub.query_quantities(p_api_version_number => 1.0,
                                         
                                         p_init_msg_lst => NULL,
                                         
                                         x_return_status => l_return_status,
                                         
                                         x_msg_count => l_msg_count,
                                         
                                         x_msg_data => l_msg_data,
                                         
                                         p_organization_id => rec_header.organization_id, --倉庫ID
                                         
                                         p_inventory_item_id => rec_line.inventory_item_id, --物料ID
                                         
                                         p_tree_mode => 3,
                                         
                                         p_is_revision_control => FALSE,
                                         
                                         p_is_lot_control => TRUE,
                                         
                                         p_is_serial_control => FALSE,
                                         
                                         p_revision => NULL,
                                         
                                         p_lot_number => rec_loc.lot_number,
                                         
                                         p_lot_expiration_date => rec_loc.expiration_date,
                                         
                                         p_subinventory_code => rec_header.subinventory_code, --子庫code
                                         
                                         p_locator_id => NULL, --rec_loc.locator_id,
                                         
                                         p_cost_group_id => NULL,
                                         
                                         p_onhand_source => inv_quantity_tree_pvt.g_all_subs,
                                         
                                         x_qoh => l_qoh, --現有量
                                         
                                         x_rqoh => l_atp_qty,
                                         
                                         x_qr => l_qr,
                                         
                                         x_qs => l_qs,
                                         
                                         x_att => l_att,
                                         
                                         x_atr => l_atr);

七)參考例項程式

7.介面表一些重要欄位

1.事務處理頭
SELECT po.rcv_interface_groups_s.nextval INTO l_group_id FROM dual;
        g_group_id(x_group_num) := l_group_id;
        x_group_num := x_group_num + 1;
        SELECT rcv_headers_interface_s.nextval
          INTO l_rcv_headers_interface.header_interface_id
          FROM dual;
        --l_rcv_headers_interface.header_interface_id       := NULL;
        l_rcv_headers_interface.group_id               := l_group_id; --Required
        l_rcv_headers_interface.processing_status_code := 'PENDING'; --Required
        l_rcv_headers_interface.receipt_source_code    := 'VENDOR'; --Required
        l_rcv_headers_interface.transaction_type       := 'NEW';
        l_rcv_headers_interface.auto_transact_code     := 'DELIVER'; --'RECEIVE'; ---conditionally
        l_rcv_headers_interface.receipt_num            := 'RCV-' || --v_vendor_name
                                                          l_group_id; ---conditionally
        --l_rcv_headers_interface.vendor_name               := v_vendor_name; --Required
        -- l_rcv_headers_interface.vendor_num                := v_vendor_num; --Required
        l_rcv_headers_interface.vendor_id := v_vendor_id; --Required
        -- l_rcv_headers_interface.vendor_site_code          := v_vendor_site_code;
        l_rcv_headers_interface.vendor_site_id            := v_vendor_site_id;
        l_rcv_headers_interface.ship_to_organization_code := NULL; ---conditionally
        l_rcv_headers_interface.ship_to_organization_id   := rec_header.organization_id; ---conditionally
        l_rcv_headers_interface.expected_receipt_date     := rec_header.txn_date; --接收日期
        -- l_rcv_headers_interface.employee_name             := v_agent_name; ---conditionally
        -- l_rcv_headers_interface.employee_id               := v_agent_id;
        l_rcv_headers_interface.validation_flag := 'Y'; --Required
        -- l_rcv_headers_interface.currency_code             := 'CN';
        l_rcv_headers_interface.transaction_date := SYSDATE;
        l_rcv_headers_interface.org_id           := NULL;
      
        l_rcv_headers_interface.last_update_date  := SYSDATE; --Required
        l_rcv_headers_interface.last_updated_by   := g_user_id; --Required
        l_rcv_headers_interface.last_update_login := g_login_id;
        l_rcv_headers_interface.creation_date     := SYSDATE; --Required
        l_rcv_headers_interface.created_by        := g_user_id; --Required

2.事務處理行
SELECT rcv_transactions_interface_s.nextval
              INTO l_rcv_transactions_interface.interface_transaction_id
              FROM dual;
            -- l_rcv_transactions_interface.interface_transaction_id      := NULL;
          
            l_rcv_transactions_interface.last_update_date       := SYSDATE; --Required
            l_rcv_transactions_interface.last_updated_by        := g_user_id; --Required
            l_rcv_transactions_interface.creation_date          := SYSDATE; --Required
            l_rcv_transactions_interface.created_by             := g_user_id; --Required
            l_rcv_transactions_interface.last_update_login      := g_login_id;
            l_rcv_transactions_interface.request_id             := NULL;
            l_rcv_transactions_interface.program_application_id := g_prog_appl_id;
            l_rcv_transactions_interface.program_id             := g_conc_program_id;
            l_rcv_transactions_interface.program_update_date    := SYSDATE;
          
            l_rcv_transactions_interface.validation_flag         := 'Y'; --Required
            l_rcv_transactions_interface.header_interface_id     := l_rcv_headers_interface.header_interface_id;
            l_rcv_transactions_interface.shipment_header_id      := NULL;
            l_rcv_transactions_interface.group_id                := l_group_id; --Required---
            l_rcv_transactions_interface.processing_status_code  := 'PENDING'; --Required --Required
            l_rcv_transactions_interface.transaction_status_code := 'PENDING'; --Required
            l_rcv_transactions_interface.processing_mode_code    := 'ONLINE'; --Required
            l_rcv_transactions_interface.receipt_source_code     := 'VENDOR'; --Required
            l_rcv_transactions_interface.vendor_id               := v_vendor_id; --Required
            l_rcv_transactions_interface.vendor_site_id          := v_vendor_site_id; --Required
            l_rcv_transactions_interface.source_document_code    := 'PO'; --Required
            l_rcv_transactions_interface.po_header_id            := v_po_header_id; --115001; --v_po_header_id; --Required or duc num
            l_rcv_transactions_interface.po_line_id              := v_po_line_id; --112001; --41001; ---conditionally;one time item
            l_rcv_transactions_interface.po_line_location_id     := v_line_location_id; --109002;
            l_rcv_transactions_interface.po_distribution_id      := v_po_distribution_id; --103002;
            l_rcv_transactions_interface.transaction_type        := 'RECEIVE'; --Required --接收或退貨至(供應商or接收)
            l_rcv_transactions_interface.auto_transact_code      := 'DELIVER'; --Required
            l_rcv_transactions_interface.destination_type_code   := 'INVENTORY';
            l_rcv_transactions_interface.category_id             := v_category_id; --1123; ---conditionally
            l_rcv_transactions_interface.item_id                 := rec_line.inventory_item_id; ---conditionally
            l_rcv_transactions_interface.item_description        := NULL; --v_item_desc; --Required
            l_rcv_transactions_interface.transaction_date        := SYSDATE; --Required
            l_rcv_transactions_interface.quantity                := rec_line.quantity; --Required
            l_rcv_transactions_interface.uom_code                := rec_line.transaction_uom;
            l_rcv_transactions_interface.unit_of_measure         := rec_line.transaction_uom; --Required
            l_rcv_transactions_interface.primary_quantity        := rec_line.quantity;
          
            l_rcv_transactions_interface.primary_unit_of_measure    := rec_line.transaction_uom;
            l_rcv_transactions_interface.inspection_status_code     := NULL; --'NOT INSPECTED';
            l_rcv_transactions_interface.expected_receipt_date      := rec_header.txn_date; ---conditionally
            l_rcv_transactions_interface.destination_context        := 'INVENTORY';
            l_rcv_transactions_interface.source_doc_quantity        := NULL;
            l_rcv_transactions_interface.source_doc_unit_of_measure := NULL;
            l_rcv_transactions_interface.use_mtl_lot                := get_lot_control_code(rec_line.organization_id,
                                                                                            rec_line.inventory_item_id); --批次控制
            l_rcv_transactions_interface.use_mtl_serial             := get_serial_control_code(rec_line.organization_id,
                                                                                               rec_line.inventory_item_id);
            l_rcv_transactions_interface.org_id                     := rec_header.org_id; --
            l_rcv_transactions_interface.routing_header_id          := 3;
            l_rcv_transactions_interface.routing_step_id            := 1;
            l_rcv_transactions_interface.currency_code              := 'CNY';
            l_rcv_transactions_interface.currency_conversion_type   := NULL;
            l_rcv_transactions_interface.currency_conversion_rate   := NULL;
            l_rcv_transactions_interface.currency_conversion_date   := NULL;
            l_rcv_transactions_interface.po_unit_price              := NULL;
            l_rcv_transactions_interface.to_organization_id         := rec_line.organization_id; ---conditionally
            l_rcv_transactions_interface.subinventory               := rec_header.subinventory_code; ---conditionally
            l_rcv_transactions_interface.ship_to_location_id        := v_ship_to_location_id; --142; ---conditionally
            l_rcv_transactions_interface.interface_source_code      := 'RCV';
3.批次資訊
l_rcv_lots_interface.interface_transaction_id := l_rcv_transactions_interface.interface_transaction_id;
                  l_rcv_lots_interface.last_update_date         := SYSDATE;
                  l_rcv_lots_interface.last_updated_by          := fnd_global.user_id;
                  l_rcv_lots_interface.creation_date            := SYSDATE;
                  l_rcv_lots_interface.created_by               := fnd_global.user_id;
                  l_rcv_lots_interface.last_update_login        := fnd_global.login_id;
                  l_rcv_lots_interface.request_id               := NULL;
                  l_rcv_lots_interface.program_application_id   := NULL;
                  l_rcv_lots_interface.program_id               := NULL;
                  l_rcv_lots_interface.program_update_date      := NULL;
                
                  l_rcv_lots_interface.lot_num            := rec_lot.lot_number;
                  l_rcv_lots_interface.quantity           := rec_lot.transaction_quantity;
                  l_rcv_lots_interface.transaction_date   := SYSDATE;
                  l_rcv_lots_interface.expiration_date    := rec_lot.lot_expiration_date;
                  l_rcv_lots_interface.primary_quantity   := rec_lot.transaction_quantity;
                  l_rcv_lots_interface.item_id            := rec_line.inventory_item_id;
                  l_rcv_lots_interface.shipment_line_id   := NULL;
                  l_rcv_lots_interface.sublot_num         := NULL;
                  l_rcv_lots_interface.secondary_quantity := NULL;
                  l_rcv_lots_interface.qc_grade           := NULL;
                  l_rcv_lots_interface.reason_code        := NULL;
                  l_rcv_lots_interface.parent_lot_number  := NULL;

4.批次臨時資訊
l_iface_txn_lot_temp_rec.transaction_temp_id    := l_rcv_transactions_interface.interface_transaction_id;
                l_iface_txn_lot_temp_rec.last_update_date       := SYSDATE;
                l_iface_txn_lot_temp_rec.last_updated_by        := fnd_global.user_id;
                l_iface_txn_lot_temp_rec.creation_date          := SYSDATE;
                l_iface_txn_lot_temp_rec.created_by             := fnd_global.user_id;
                l_iface_txn_lot_temp_rec.last_update_login      := fnd_global.login_id;
                l_iface_txn_lot_temp_rec.lot_number             := rec_lot.lot_number;
                l_iface_txn_lot_temp_rec.transaction_quantity   := rec_lot.transaction_quantity;
                l_iface_txn_lot_temp_rec.primary_quantity       := rec_lot.transaction_quantity;
                l_iface_txn_lot_temp_rec.group_header_id        := l_group_id;
                l_iface_txn_lot_temp_rec.lot_expiration_date    := rec_lot.lot_expiration_date;
                l_iface_txn_lot_temp_rec.product_code           := 'RCV';
                l_iface_txn_lot_temp_rec.product_transaction_id := l_rcv_transactions_interface.interface_transaction_id;
                l_iface_txn_lot_temp_rec.origination_type       := 3;

7.2呼叫API處理 
cux_rcv_online_pub.process_rcv_online(p_api_version   => 1.0,
                                            p_init_msg_list => 'T',
                                            p_commit        => 'T',
                                            x_return_status => l_return_status,
                                            x_msg_count     => l_msg_count,
                                            x_msg_data      => l_msg_data,
                                            p_group_id      => g_group_id(i));        

(八)接收&退貨相關的一些知識

庫存管理的核心是對貨物本身的管理,是對貨物的數量與相關屬性的管理,目的是為銷售與採購服務,確保合理的庫存保有量,處理庫存分類帳目與進出流水帳,以單據的形式基本涵蓋倉庫的各種進出庫業務。庫存組織結構

組織是一種業務單位,例如:公司、工廠、倉庫、分部和部門等,組織可以根據實際業務不同分成多種層次,例如:法人實體,經營單位,庫存組織等。庫存組織是建立在經營單位之下的,可以細分為不同的子庫存。特別的是專案主組織,是專門為了統一定義庫存物品而設立的,可以是一個虛擬的並不存在的組織,對應實際倉庫。子庫存是從物料庫存中分離出來的獨特的物理或邏輯庫存,如原材料、成品或不良品的獨自存貨位置,客戶虛擬倉等,貨位是儲存物料的子庫存內的實際區域,例如:行、通道、存料箱或貨架。組織中的所有物料均保留在子庫存中,因此必須至少定義一個子庫存。一個OU下可以有多個IO,一個IO下可以設定多個子庫,每個子庫下可以設定多個貨位。

Oracle
產品按照不同的組織層次分別進行安全性的控制。總帳按照帳套進行資料遮蔽,而銷售/應收/採購/應付是典型的按照經營單位進行管理,庫存/物料清單/車間則是按照庫存組織分別管理。庫存組織用來遮蔽各類製造資料,Item/BOM/Routing等定義在庫存組織上,WIP/MRP等跑在庫存組織上;而庫存事務處理則以子庫存為中心,要麼從某個子庫存出,要麼從某個子庫存入;每個子庫存可以啟用貨位,也可以不啟用;如果啟用了,則事務處理時必須選擇貨位。在不同的庫存內,子庫程式碼可以重複;在不同的子庫內,貨位程式碼也可以重複。也就是說,Oracle僅僅是提供了這樣的模型,至於如何和實際業務對用,就非常靈活了。比如:庫存是個組織的概念,其比較,可指一個工廠或者獨立的辦事處、分公司這樣的實體;而子庫則通常代表一個真正的物理倉庫,也可指倉庫或者車間的一塊區域,還可以是虛擬的;貨位可用來代表倉庫的某一處空間或者貨架,也可指車間的一個塊區域。為了維護整個系item碼和資訊的統一,在庫存組織中有個物料主組織的概念,該組織定義item的屬性,並分配給以他為主組織的庫存組織使用,相應的item的屬性也分為主層控制和組織層控制,主層控制的屬性只能在主組織改,組織層控制的屬性可以在各個庫存組織維護。Oracle強烈建議一個帳套下只有只有一個庫存主組織,並且不要在庫存主組織作任何事務處理。

庫存事務處理

庫存事務處理是庫存業務的核心,是ERP庫存模組資料和相關模組資料處理的源頭,包括採購訂單接收與返回,WIP發退料與完工入庫,子庫間轉移,雜項事務,銷售發貨與RMA等。事務處理是物品進、出庫存或在倉庫內或者組織間移動,即倉庫的日常收發業務處理事務處理會引起物品數量,位置或成本的變化庫存事務有多種,有系統提供的,也可由客戶根據實際情況需要定義每一種物品交易時系統會產生對應的財務記錄可以通過版本號、批號、系列號,貨位來對有關專案進行跟蹤/控制物品的事務處理可以與相關的專案(Project)進行關聯事務處理反映業務資訊,事務處理分配反映會計資訊。事務處理分配以庫存組織、過賬批次為單位,以會計科目為核心彙總所有事務處理型別的會計資訊,將借貸發生額匯入總帳系統。成本模組的事務處理主要有接收、庫存、WIP三大類,系統日記帳報表中的型別反映事務處理的大類。物料事務處理分配和WIP事務處理分配分別反映庫存類和WIP類的會計資訊,並按類別來源匯入總帳系統。事務處理型別,來源和對應的會計科目如下,其中事務型別=事務來源+事務動作。

庫存控制庫存控制包括貨位控制,批次控制,序列號控制,版本控制。貨位控制可以使用貨位來標識儲存庫存專案的實際區域。專案數量可以通過貨位跟蹤。專案也可以限制在特定貨位範圍內。實行貨位控制便於控制儲貨位置和儲存能力。可以為庫存中的特定專案啟用批次控制,批次號特別適用於有保質期控制的物料。對於批次控制下的專案,可以對轉入庫存的每次收貨指定批號,此後在每次執行物料事務處理時您均可以參考相同的批次。版本控制則實際控制會喜歡到物料版本,以版本號來區分,通過查詢可瞭解各版本的部品材料和半成品的數量,且必須輸入版本號才能進行事務處理。庫存檔點ERP系統中,倉庫資料的準確性直接影響到整個系統計劃的執行。庫存檔點是保證庫存記錄準確的必要手段,通過盤點可以查找出錯的原因,調整系統與實際庫存量的差異,及時維護庫存資料的準確性。庫存檔點包括實際盤點和週期性盤點,如每個月末進行庫存檔點。

ABC
分類是週期盤點的前提條件,將庫存物料按一定的標準分成相應的等級,用於決定不同的物料在週期盤點時的盤點頻率,可以根據庫存價值,庫存數量,使用頻率等作為劃分的標準。週期盤點與實際盤點的區別在於週期盤點有計劃性,其根據ABC分類結果,設定的週期盤點頻率定期對物料進行盤點對庫存控制和準確性要求更高

採購接收是庫存與採購連線的一座橋樑,也是應付發票與採購單、庫存接收匹配的一根紐帶。採購接收一般有三種方式,一種是供應商送貨來直接入庫;一種是供應商送貨來先接收,接收後再安排入庫;還有即是先接收,然後送檢,質量檢查通過後再入庫。採購接收的來源主要包括採購訂單接收,組織間轉移的接收,銷售退貨的接收。

接收入庫的種類接收入庫可以按照資料來源分為2種:
1.         
對於po訂單以及發放的接收入庫;
2.         
對於內部請購單生成的sales order(後面的部分簡稱so)的接收入庫;接收入庫還可以按照入庫方式分為3種:
1
直接入庫:接收後自動入庫;
2
標準入庫:先接收,後入庫,分兩個步驟;
3
需要檢驗的接收入庫:先接收,然後檢驗,最後入庫;

標準訂單以及一攬子採購協議發放1對於標準訂單,當訂單被approve之後,系統會在mtl_supply這張表中插入該訂單相關的記錄,系統預設為每一個訂單分配行生成一條mtl_supply資料,其supply_type_code值為“PO”,表示物料供應的來源,目前是來自po訂單。所以mtl_supply表中,對於標準訂單以及一攬子發放,其資料層次是明細到分配行的,即根據distribution_id可以唯一確定一個mtl_supply行:

SELECT pha.segment1,
                                                                       pla.line_num,
                                                                      plla.shipment_num,
                                                                       pda.distribution_num,
                                                                     ms.supply_type_code,
                                                                      ms.quantity
FROM   mtl_supply            ms,
                                                                   po_headers_all        pha,
                                                                  po_lines_all          pla,
       po_line_locations_all plla,
       po_distributions_all  pda
WHERE  ms.po_distribution_id = pda.po_distribution_id
AND    ms.supply_type_code = 'PO'
AND    pha.po_header_id = pla.po_header_id
AND    plla.po_header_id = pha.po_header_id
AND    plla.po_line_id = pla.po_line_id
AND    pda.line_location_id = plla.line_location_id
AND    pha.segment1 = '1000100'

以上sql語句將篩選出訂單編號為‘1000100’的訂單可以接收的distribution行以及可以接收的數量。注意:在這個時候,rcv_shipmet_headers以及rcv_shipment_lines這兩張表中還沒有資料,這是po訂單與內部請購單接收資料流中的一個較大的差異。造成這種差異的原因是:對於po訂單,其發運物件是外部供應商,系統無法控制以及檢測外部供應商的發運動作,所以只能在做接收的時候,才能生成發運資訊,在任何接收之前,系統是不知道任何發運資料的;而對於內部請購單生成的SalesOrder來說,發運物件是公司內部其它組織或ou,發運資訊是在其他組織或OUSO的發運時就產生了,而不必等到接收的時候才產生相應的發運資訊。由於以上差異,在po訂單做接收時,介面中不必提供shipment資訊,而在po入庫以及內部請購單生成的so接收的時候,則需要提供shipment資訊。

2
接下來,當我們為po訂單做接收的時候,系統會生成相應的shipment資訊,經過測試,每次接收會生成一個新的shipment頭,每個接收行會生成一個新的shipment行。所以,對於po接收,其接收的transactionid與發運行的shipmentline id是一一對應的,在做po入庫的時候,可以利用這一點,通過shipmentline找到可以入庫的parenttransaction id。另外,對於po接收,其在發運行中的quantityreceivedquantityshipped欄位的值總是一樣的,因為發運記錄是完全參照接收記錄生成的。
3
對於直接入庫的訂單,接收後將同時在RCV_TRANSACTION中生成接收記錄以及入庫記錄;

對於標準接收則分為接收和入庫兩個步驟,接收生成接收事務處理記錄,並且同時在MTL_SUPPLY中可以找到mtl_supply_type為“RECEIVING”的記錄,表示存在可入庫記錄了,入庫來源是“RECEIVING”。入庫後再同一張表(RCV_TRANSACTION)中生成入庫事務處理記錄;雖然接收後在MTL_SUPPLY表中可以查到可入庫的資訊,但是因為接收後已經在RCV_TRANSACTION中產生了接收事務處理記錄,理論上來說,以上兩者的資料應當是等價的,但是這時候我們習慣於從RCV_TRANSACTION表中查詢可以入庫的記錄。對於需要檢驗的接收入庫,在接收後,需要完成檢驗,對接收記錄打上檢驗通過標記後,才能進行入庫動作,最終生成入庫事務處理記錄。

介面表注意事項不同的入庫方式Oracle提供了三種可選的入庫方式(PO訂單分配行介面維護)
1
直接入庫:接收後自動入庫;
2
標準入庫:接收後,進行入庫動作,才完成最終入庫;
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)時的幾個關鍵的狀態欄位:
                  rcv_transactions_interface.transaction_type         := 'RECEIVE';
            rcv_transactions_interface.auto_transact_code      := NULL;
            rcv_transactions_interface.destination_type_code    := ' RECEIVING ';
c)       對於接收甚至檢驗後的資料做入庫時,插接收事務處理的介面行表(rcv_transactions_interface)時的幾個關鍵的狀態欄位:
rcv_transactions_interface.transaction_type         := 'DELIVER';
rcv_transactions_interface.auto_transact_code      := NULL;
rcv_transactions_interface.destination_type_code    := 'INVENTORY';

可入庫數量我們需要判斷可入庫數量,這是對入庫介面資料的一項基本校驗,是否有足夠的數量可以入庫,我們分別給出PO以及IR的可入庫數量的演算法:

帶有批次處理的接收或退貨有兩種處理模式,一種是我上面的API例子,另外一種參考如下:

對於帶批次或序列號的接收入庫對於帶批次或序列號的接收入庫,對於1rcv_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 := 2;
以下程式在11i下驗證通過

--lot info------------
        IF (rec_line.lot_number IS NOT NULL) 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          := SYSDATE;
          mtl_transaction_lots_interfac.created_by             := fnd_global.user_id;
          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;
        
          SELECT mtl_material_transactions_s.NEXTVAL
          INTO   mtl_transaction_lots_interfac.transaction_interface_id
          FROM   dual;
        
          l_primary_qty :=1;
        
          INSERT INTO mtl_transaction_lots_interface VALUES mtl_transaction_lots_interfac;
        
        END IF;
      
        --serial info
        IF (serial_number IS NOT NULL) THEN
          mtl_serial_numbers_interface.last_update_date       := SYSDATE;
          mtl_serial_numbers_interface.last_updated_by        := fnd_global.user_id;
          mtl_serial_numbers_interface.creation_date          := SYSDATE;
          mtl_serial_numbers_interface.created_by             := fnd_global.user_id;
          mtl_serial_numbers_interface.last_update_login      := -1;
          mtl_serial_numbers_interface.product_code           := 'RCV';
          mtl_serial_numbers_interface.fm_serial_number       :=serial_number;
          mtl_serial_numbers_interface.to_serial_number       :=serial_number;
          mtl_serial_numbers_interface.process_flag           := 1;
          mtl_serial_numbers_interface.product_transaction_id := l_iface_rcv_rec.interface_transaction_id;
        
          SELECT mtl_material_transactions_s.NEXTVAL
          INTO   mtl_serial_numbers_interface.transaction_interface_id
          FROM   dual;
        
          INSERT INTO mtl_serial_numbers_interface VALUES mtl_serial_numbers_interface;
        END IF;