EBS杂项出库事务处理

--初始化
/*
begin
  fnd_global.apps_initialize(user_id      => 8162,
                             resp_id      => 50692,
                             resp_appl_id => 20003);
  mo_global.init('M');
end;
*/
--插入库存事务接口表
declare


  l_api_name    CONSTANT VARCHAR2(80) := 'insert_transaction_iface';
  l_api_version CONSTANT NUMBER := 1.0;
  l_savepoint_name           VARCHAR2(80) := 'insert_transaction_iface01';
  l_progress                 VARCHAR2(240);
  l_uom_code                 VARCHAR2(30);
  l_document_number          VARCHAR2(240);
  l_project_id               NUMBER;
  l_doc_type_code            VARCHAR2(30);
  l_doc_seq                  NUMBER;
  l_tag                      VARCHAR2(10);
  l_project_number           VARCHAR2(240);
  l_transaction_action_id    NUMBER;
  l_material_expense_account NUMBER;
  l_handle_quantity          NUMBER;
  l_onhand_qty               NUMBER;
  l_lot_control              VARCHAR2(10);
  l_default_task_id          NUMBER;
  l_ccid                     NUMBER;
  l_org_segment              VARCHAR2(240);
  l_project_segment          VARCHAR2(240);
  l_account_segment          VARCHAR2(240);
  l_transaction_header_id    NUMBER;
  l_transaction_reference    VARCHAR2(240);
  l_retval                   NUMBER;
  l_mtl_txn_interface_rec    mtl_transactions_interface%ROWTYPE;
  l_iface_lot_rec            mtl_transaction_lots_interface%ROWTYPE;
  l_section_header_id        NUMBER;


  l_using_department   cux_inv_document_headers.using_department%TYPE;
  l_department_segment cux_inv_document_headers.using_department%TYPE;
  l_doc_object         VARCHAR2(240);


  l_api_name       CONSTANT VARCHAR2(30) := 'process_txn_iface';
  l_savepoint_name CONSTANT VARCHAR2(30) := 'process_txn_iface01';
  l_txn_count NUMBER;
  l_count     NUMBER := 0;


  X_return_status VARCHAR2(4);
  X_msg_count     NUMBER;
  X_msg_data      VARCHAR2(2000);


  x_trans_count NUMBER;
  x_err_msg     VARCHAR2(2000);


  x_transaction_header_id NUMBER;


BEGIN


  --获取不到标段任务再获取默认任务
  IF l_default_task_id IS NULL THEN
    l_default_task_id := cux_inv_utl.get_project_default_task_id(237441);
    dbms_output.put_line('1-' || l_default_task_id);
  END IF;


  --公司段
  l_org_segment := 1027; --select cux_inv_utl.get_org_attribute1(295) from dual;


  l_transaction_header_id := cux_pub_group_s.nextval;
  dbms_output.put_line('2-' || l_transaction_header_id);


  --事务处理参考
  l_transaction_reference := 'REFERENCETEST'; --l_document_number || g_connector || l_doc_seq;


  --判断事务处理的活动类型
  l_transaction_action_id := 1; --select cux_inv_utl.get_transaction_action_id2(110) from dual;


  --科目段
  l_account_segment := 54010103; -- select cux_inv_utl.get_account_segment(p_transaction_type_id => 110) from dual;


  --获取账户CCID


  l_ccid := 443515; /*select  cux_gl_utl.get_ccid(p_seg1 => '1027'
                                         ,p_seg2 => '0'
                                         ,p_seg3 => '54010103'
                                         ,p_seg5 => 'GT-2016-JZ·G-702') from dual;*/


  --如果事务处理类型是“从库存发放”,说明是出库操作,处理量 = 申请量*(-1)
  IF l_transaction_action_id = 1 THEN
  
    --单据处理数量不能大于现有量
  
    --l_handle_quantity := rec_line.quantity_required * (-1);
    l_handle_quantity := -0.01; --rec_line.handle_quantity * (-1); 
    dbms_output.put_line('3-' || l_handle_quantity);
  
    --如果事务处理类型是“接收至库存”,说明是入库操作,处理量 = 申请量
  ELSIF l_transaction_action_id = 27 THEN
  
    --l_handle_quantity := rec_line.quantity_required;
    l_handle_quantity := 0.01; --rec_line.handle_quantity; 
    dbms_output.put_line('4-' || l_handle_quantity);
  
  END IF;


  --判断是否批次控制
  l_lot_control := cux_inv_utl.item_lot_control(p_item_id         => 231102,
                                                p_organization_id => 315);


  dbms_output.put_line('5-' || l_lot_control);


  l_uom_code := cux_inv_utl.get_item_uom(p_inventory_item_id => 231102,
                                         p_organization_id   => 315);


  dbms_output.put_line('6-' || l_uom_code);


  l_mtl_txn_interface_rec.transaction_interface_id := mtl_material_transactions_s.nextval;
  l_mtl_txn_interface_rec.transaction_header_id    := l_transaction_header_id;
  l_mtl_txn_interface_rec.process_flag             := 1;
  l_mtl_txn_interface_rec.transaction_mode         := 3; --On-line processing模式
  l_mtl_txn_interface_rec.transaction_type_id      := 110; --p_transaction_type_id;
  l_mtl_txn_interface_rec.reason_id                := null; --p_reason_id;
  l_mtl_txn_interface_rec.transaction_action_id    := l_transaction_action_id;
  l_mtl_txn_interface_rec.source_code              := 'CUX';
  l_mtl_txn_interface_rec.source_line_id           := 123456; --rec_line.inv_line_id;
  l_mtl_txn_interface_rec.source_header_id         := 654321; --p_inv_header_id;
  l_mtl_txn_interface_rec.inventory_item_id        := 231102; --rec_line.inventory_item_id;
  l_mtl_txn_interface_rec.organization_id          := 315; --rec_line.organization_id;
  l_mtl_txn_interface_rec.pa_expenditure_org_id    := 315; --rec_line.organization_id; --支出组织
  l_mtl_txn_interface_rec.subinventory_code        := 'MQ01'; --rec_line.subinventory;
  l_mtl_txn_interface_rec.locator_id               := 17995; --rec_line.locator_id;
  l_mtl_txn_interface_rec.transaction_date         := nvl(NULL, SYSDATE);
  l_mtl_txn_interface_rec.transaction_quantity     := l_handle_quantity;
  l_mtl_txn_interface_rec.primary_quantity         := l_handle_quantity;
  l_mtl_txn_interface_rec.transaction_uom          := l_uom_code;
  l_mtl_txn_interface_rec.distribution_account_id  := l_ccid; --分配账户
  l_mtl_txn_interface_rec.transaction_source_id    := 654321; --p_inv_header_id;
  l_mtl_txn_interface_rec.transaction_source_name  := 'TEST'; --l_document_number; --单据号
  l_mtl_txn_interface_rec.transaction_cost         := 1; --rec_line.unit_price; --成本
  l_mtl_txn_interface_rec.source_lot_number        := '2736-GT-GA01-1'; --rec_line.lot_number; --批次
  l_mtl_txn_interface_rec.source_project_id        := 237441; --l_project_id; --来源项目
  l_mtl_txn_interface_rec.source_task_id           := l_default_task_id; --来源任务
  l_mtl_txn_interface_rec.transaction_reference    := 'hahaha-096'; --l_transaction_reference; 
  l_mtl_txn_interface_rec.attribute1               := 'NOWHERE'; --rec_line.element_id; 
  l_mtl_txn_interface_rec.last_update_date         := SYSDATE;
  l_mtl_txn_interface_rec.last_updated_by          := 8162;
  l_mtl_txn_interface_rec.creation_date            := SYSDATE;
  l_mtl_txn_interface_rec.created_by               := 8162;
  l_mtl_txn_interface_rec.last_update_login        := -1;


  --插入事务处理接口表
  INSERT INTO mtl_transactions_interface VALUES l_mtl_txn_interface_rec;
  -- commit;


  SELECT COUNT(1)
    INTO l_count
    FROM mtl_transactions_interface
   WHERE transaction_header_id = l_transaction_header_id;
  dbms_output.put_line('61-' || l_count);


  --如果是批次控制,还需要往批次接口表插入数据
  IF l_lot_control = 'Y' THEN
  
    l_iface_lot_rec.transaction_interface_id := l_mtl_txn_interface_rec.transaction_interface_id;
    l_iface_lot_rec.transaction_quantity     := l_handle_quantity;
    l_iface_lot_rec.lot_number               := '2736-GT-GA01-1';
    l_iface_lot_rec.source_code              := 'CUX';
    l_iface_lot_rec.source_line_id           := 123456; --rec_line.inv_line_id;
    l_iface_lot_rec.last_update_date         := SYSDATE;
    l_iface_lot_rec.last_updated_by          := 8162;
    l_iface_lot_rec.creation_date            := SYSDATE;
    l_iface_lot_rec.created_by               := 8162;
    l_iface_lot_rec.last_update_login        := -1;
  
    --插入批次接口表
    INSERT INTO mtl_transaction_lots_interface VALUES l_iface_lot_rec;
  
    dbms_output.put_line('7-' || l_handle_quantity);
  
  END IF;
  --                commit;


  --接口表的transaction_header_id作为输出参数
  x_transaction_header_id := l_transaction_header_id;


  l_retval := inv_txn_manager_pub.process_transactions(p_api_version   => '1.0' --p_api_version
                                                      ,
                                                       p_init_msg_list => fnd_api.g_false -- p_init_msg_list
                                                      ,
                                                       p_commit        => fnd_api.g_false --p_commit
                                                      ,
                                                       x_return_status => x_return_status,
                                                       x_msg_count     => x_msg_count,
                                                       x_msg_data      => x_msg_data,
                                                       x_trans_count   => l_txn_count,
                                                       p_table         => 1,
                                                       p_header_id     => x_transaction_header_id);
  commit; --注意此处务必要commit                                                         


  dbms_output.put_line('8-' || l_retval || ',' || x_return_status || ',' ||
                       x_msg_count || ',' || x_msg_data);


  SELECT COUNT(1)
    INTO l_count
    FROM mtl_transactions_interface
   WHERE transaction_header_id = x_transaction_header_id;


  dbms_output.put_line('88-' || l_count);


  IF l_retval <> 0 OR l_count > 0 THEN
    x_trans_count := 0;
    -- 返回出错信息记录组
    BEGIN
      SELECT 'ERROR_CODE:' || ERROR_CODE || ';' || 'ERROR_MSG:' ||
             error_explanation
        INTO x_err_msg
        FROM mtl_transactions_interface
       WHERE transaction_header_id = x_transaction_header_id
         AND rownum = 1;
    
      DBMS_OUTPUT.put_line('ERRORPROCESS' || x_err_msg);
    
    EXCEPTION
      WHEN OTHERS THEN
        x_err_msg := 'unexpected error!';
    END;
  
  ELSE
  
    --  NULL;
  
    DELETE FROM mtl_transactions_interface
     WHERE transaction_header_id = x_transaction_header_id;
    commit;
  
  END IF;


EXCEPTION


  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERROROTHERS');
  
END;

你可能感兴趣的:(EBS杂项出库事务处理)