• Oracle EBS INV更新保留


    CREATE or REPPLACE PROCEDURE UpdateReservation
    AS 
            -- Common Declarations
            l_api_version       NUMBER      := 1.0; 
            l_init_msg_list     VARCHAR2(2) := FND_API.G_TRUE; 
            x_return_status     VARCHAR2(2);
            x_msg_count          NUMBER      := 0;
            x_msg_data          VARCHAR2(255);
        
            -- WHO columns
            l_user_id    NUMBER := -1;
            l_resp_id    NUMBER := -1;
            l_application_id  NUMBER := -1;
            l_row_cnt    NUMBER := 1;
            l_user_name    VARCHAR2(30) := 'MFG';
            l_resp_name    VARCHAR2(50) := 'Manufacturing and Distribution Manager';    
            
            -- API specific declarations
            l_rsv_rec                   INV_RESERVATION_GLOBAL.MTL_RESERVATION_REC_TYPE;
            l_new_rsv_rec               INV_RESERVATION_GLOBAL.MTL_RESERVATION_REC_TYPE;
            l_serial_number             INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
            l_new_serial_number         INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;        
            l_validation_flag           VARCHAR2(2) := FND_API.G_TRUE;  
    
            -- Load required serial numbers that are reserved
            CURSOR c_serials IS
            SELECT msn.inventory_item_id , msn.serial_number 
            FROM mtl_system_items_b msi, mtl_serial_numbers msn, mtl_parameters mp
            WHERE msi.organization_id = mp.organization_id 
            AND msi.organization_id = msn.current_organization_id
            AND msi.inventory_item_id = msn.inventory_item_id
            AND msn.group_mark_id IS NOT NULL
            AND msi.serial_number_control_code not in (1, 6)  -- item is not serial controlled / controlled at sales order issue 
            AND msi.segment1 = 'SU_TEST_STS3'
            AND mp.organization_code = 'M1'
            AND msn.serial_number BETWEEN '' AND ''
            ORDER BY msn.serial_number DESC;
            
            -- Load reservation for this item
            CURSOR c_item_reservations IS
            SELECT msi.organization_id, msi.inventory_item_id, res.reservation_id, res.reservation_quantity, res.demand_source_name
            FROM mtl_system_items_b msi, mtl_parameters mp, mtl_reservations res
            WHERE msi.segment1 = 'SU_TEST_STS3'
            AND mp.organization_code = 'M1'
            AND msi.organization_id = mp.organization_id 
            AND res.organization_id = msi.organization_id
            AND res.inventory_item_id = msi.inventory_item_id;
            
    BEGIN
      -- Get the user_id
      SELECT user_id
      INTO l_user_id
      FROM fnd_user
      WHERE user_name = l_user_name;
    
      -- Get the application_id and responsibility_id
      SELECT application_id, responsibility_id
      INTO l_application_id, l_resp_id
      FROM fnd_responsibility_vl
      WHERE responsibility_name = l_resp_name;
    
      FND_GLOBAL.APPS_INITIALIZE(l_user_id, l_resp_id, l_application_id);  
      dbms_output.put_line('Initialized applications context: '|| l_user_id || ' '|| l_resp_id ||' '|| l_application_id );
          
            -- Get the first row
            FOR ir IN c_item_reservations LOOP
                l_rsv_rec.reservation_id       := ir.reservation_id;
                l_rsv_rec.demand_source_name   := ir.demand_source_name;
                l_rsv_rec.reservation_quantity := ir.reservation_quantity; 
      
                -- Update Demand Source Name, reservation qty for reservations that exist for this item
                l_new_rsv_rec.reservation_id       := ir.reservation_id;
                l_new_rsv_rec.demand_source_name   := ir.demand_source_name; --||'_0723';
                l_new_rsv_rec.reservation_quantity := 10;   -- new reservation quantity 
      
                BEGIN
                      -- Initialize Serials to be updated / reserved
                      FOR ser IN c_serials LOOP
                          l_serial_number(l_row_cnt).inventory_item_id := ser.inventory_item_id;
                          l_serial_number(l_row_cnt).serial_number     := ser.serial_number;
                      
                          l_new_serial_number(l_row_cnt).inventory_item_id := ser.inventory_item_id;
                          l_new_serial_number(l_row_cnt).serial_number     := ser.serial_number + 10;
                          
                          l_row_cnt := l_row_cnt + 1;
                      END LOOP;
                 EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    dbms_output.put_line('Item not serial controlled / serials not provided');
                 END; 
              
                -- call API to update all the reservations for this item
                DBMS_OUTPUT.PUT_LINE('=======================================================');
                DBMS_OUTPUT.PUT_LINE('Calling INV_RESERVATION_PUB.Update_Reservation');         
                INV_RESERVATION_PUB.UPDATE_RESERVATION( 
                        P_API_VERSION_NUMBER      =>   l_api_version    
                      , P_INIT_MSG_LST        =>        l_init_msg_list  
                      , X_RETURN_STATUS        =>   x_return_status  
                      , X_MSG_COUNT          =>   x_msg_count      
                      , X_MSG_DATA         =>   x_msg_data       
                      , P_ORIGINAL_RSV_REC       =>   l_rsv_rec
                      , P_TO_RSV_REC       =>   l_new_rsv_rec
                      , P_ORIGINAL_SERIAL_NUMBER =>   l_serial_number
                      , P_TO_SERIAL_NUMBER       =>   l_new_serial_number
                      , P_VALIDATION_FLAG       =>   l_validation_flag 
                      , P_CHECK_AVAILABILITY     =>   FND_API.G_FALSE 
                );     
               
               DBMS_OUTPUT.PUT_LINE('=======================================================');
               DBMS_OUTPUT.PUT_LINE('Return Status: '||x_return_status);
        
               IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
                  DBMS_OUTPUT.PUT_LINE('Error Message :'||x_msg_data);
               END IF;
               
               IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
                  DBMS_OUTPUT.PUT_LINE('Reservation ID           :'||l_new_rsv_rec.reservation_id);
                  DBMS_OUTPUT.PUT_LINE('Demand Source Name (old) :'||l_rsv_rec.demand_source_name);
                  DBMS_OUTPUT.PUT_LINE('Demand Source Name (new) :'||l_new_rsv_rec.demand_source_name);            
                  DBMS_OUTPUT.PUT_LINE('Reservation Qty  (old)   :'||l_rsv_rec.reservation_quantity);
                  DBMS_OUTPUT.PUT_LINE('Reservation Qty  (new)   :'||l_new_rsv_rec.reservation_quantity);            
              END IF;
               
              DBMS_OUTPUT.PUT_LINE('=======================================================');
             
          END LOOP;
         
    EXCEPTION
            WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE('Exception Occured :');
              DBMS_OUTPUT.PUT_LINE(SQLCODE ||':'||SQLERRM);
              DBMS_OUTPUT.PUT_LINE('=======================================================');
     	END UpdateReservation;
    

      

    土豆君
  • 相关阅读:
    JavaScript基础知识
    java线程池
    Rop框架学习笔记
    Redis学习笔记之多机数据库
    【ML】Two-Stream Convolutional Networks for Action Recognition in Videos
    【CV】ICCV2015_Unsupervised Learning of Spatiotemporally Coherent Metrics
    【CV】ICCV2015_Describing Videos by Exploiting Temporal Structure
    【CV】CVPR2015_A Discriminative CNN Video Representation for Event Detection
    【ML】ICML2015_Unsupervised Learning of Video Representations using LSTMs
    【CV】ICCV2015_Unsupervised Visual Representation Learning by Context Prediction
  • 原文地址:https://www.cnblogs.com/jenrry/p/10020848.html
Copyright © 2020-2023  润新知