• Oracle EBS INV 释放保留


    CREATE or REPPLACE PROCEDURE RelieveReservation
    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);
            x_error_code   NUMBER         := 0;
        
            -- 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_serial_number             INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
    
            l_validation_flag           VARCHAR2(2) := FND_API.G_TRUE;  
            x_mtl_reservation_tbl       INV_RESERVATION_GLOBAL.MTL_RESERVATION_TBL_TYPE;
            x_mtl_reservation_tbl_count NUMBER := 0;
            x_primary_relieved_qty      NUMBER := 0;
            x_primary_remain_qty        NUMBER := 0;
    
            l_primary_reservation_qty   NUMBER := 10;   -- total qty 
            l_primary_relieved_qty      NUMBER := 2;  
            l_subinventory_code         VARCHAR2(40) := NULL; --'Stores';  -- will create a hard reservation
            
            -- 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;
            
            -- Load required serial numbers to be 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 msi.segment1 = 'SU_TEST_STS3'
            AND mp.organization_code = 'M1'
            AND msi.serial_number_control_code not in (1, 6)  -- item is not serial controlled / controlled at sales order issue 
            AND msn.serial_number BETWEEN '' AND '';   -- can leave this NULL if item is not serial controlled
           
    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.organization_id := ir.organization_id;
              l_rsv_rec.inventory_item_id := ir.inventory_item_id;
              EXIT;
            END LOOP;
            
            -- Get all reservations that exist for this item
            -- call API to get all the reservations for this item
            DBMS_OUTPUT.PUT_LINE('=======================================================');
            DBMS_OUTPUT.PUT_LINE('Calling INV_RESERVATION_PUB.Query_Reservation');         
            INV_RESERVATION_PUB.QUERY_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_QUERY_INPUT        => l_rsv_rec
                    , P_LOCK_RECORDS      => FND_API.G_FALSE
                    , P_SORT_BY_REQ_DATE    => INV_RESERVATION_GLOBAL.G_QUERY_NO_SORT
                    , P_CANCEL_ORDER_MODE  => INV_RESERVATION_GLOBAL.G_CANCEL_ORDER_NO
                    , X_MTL_RESERVATION_TBL          => x_mtl_reservation_tbl
                    , X_MTL_RESERVATION_TBL_COUNT    => x_mtl_reservation_tbl_count
                    , X_ERROR_CODE        => x_error_code  
             );
             
             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
                FOR i IN 1..x_mtl_reservation_tbl_count LOOP
                    DBMS_OUTPUT.PUT_LINE('=======================================================');
                    dbms_output.put_line('reservation_id              : '|| TO_CHAR(x_mtl_reservation_tbl(i).reservation_id));
                    dbms_output.put_line('requirement_date            : '|| TO_CHAR(x_mtl_reservation_tbl(i).requirement_date, 'YYYY/MM/DD'));
                    dbms_output.put_line('organization_id             : '|| TO_CHAR(x_mtl_reservation_tbl(i).organization_id));
                    dbms_output.put_line('inventory_item_id           : '|| TO_CHAR(x_mtl_reservation_tbl(i).inventory_item_id));
                    dbms_output.put_line('demand_source_type_id       : '|| TO_CHAR(x_mtl_reservation_tbl(i).demand_source_type_id));
                    dbms_output.put_line('demand_source_name          : '|| x_mtl_reservation_tbl(i).demand_source_name);
                    dbms_output.put_line('demand_source_header_id     : '|| TO_CHAR(x_mtl_reservation_tbl(i).demand_source_header_id));
                    dbms_output.put_line('demand_source_line_id       : '|| TO_CHAR(x_mtl_reservation_tbl(i).demand_source_line_id));
                    dbms_output.put_line('demand_source_line_detail   : '|| TO_CHAR(x_mtl_reservation_tbl(i).demand_source_line_detail));
                    dbms_output.put_line('primary_uom_code            : '|| x_mtl_reservation_tbl(i).primary_uom_code);
                    dbms_output.put_line('reservation_uom_code        : '|| x_mtl_reservation_tbl(i).reservation_uom_code);
                    dbms_output.put_line('reservation_quantity        : '|| TO_CHAR(x_mtl_reservation_tbl(i).reservation_quantity));
                    dbms_output.put_line('primary_reservation_quantity: '|| TO_CHAR(x_mtl_reservation_tbl(i).primary_reservation_quantity));
                    dbms_output.put_line('detailed_quantity           : '|| TO_CHAR(x_mtl_reservation_tbl(i).detailed_quantity));
                    dbms_output.put_line('supply_source_type_id       : '|| TO_CHAR(x_mtl_reservation_tbl(i).supply_source_type_id));
                    dbms_output.put_line('supply_source_header_id     : '|| TO_CHAR(x_mtl_reservation_tbl(i).supply_source_header_id));
                    dbms_output.put_line('supply_source_line_id       : '|| TO_CHAR(x_mtl_reservation_tbl(i).supply_source_line_id));
                    dbms_output.put_line('supply_source_name          : '|| (x_mtl_reservation_tbl(i).supply_source_name));
                    dbms_output.put_line('supply_source_line_detail   : '|| TO_CHAR(x_mtl_reservation_tbl(i).supply_source_line_detail));
                    dbms_output.put_line('subinventory_code           : '|| x_mtl_reservation_tbl(i).subinventory_code);
                    dbms_output.put_line('ship_ready_flag             : '|| TO_CHAR(x_mtl_reservation_tbl(i).ship_ready_flag));
                    dbms_output.put_line('staged_flag                 : '|| x_mtl_reservation_tbl(i).staged_flag);
                    DBMS_OUTPUT.PUT_LINE('=======================================================');
                 END LOOP;   
               END IF;
    
            -- call API to relieve all the queried reservations for this item
            DBMS_OUTPUT.PUT_LINE('=======================================================');
            DBMS_OUTPUT.PUT_LINE('Calling INV_RESERVATION_PUB.Relieve_Reservation');          
            FOR i IN 1..x_mtl_reservation_tbl_count LOOP
            
                  BEGIN
                      -- Initialize Serials to be relieved
                      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_row_cnt := l_row_cnt + 1;
                      END LOOP;
                      
                      IF (l_serial_number.COUNT > 0) THEN
                          l_primary_relieved_qty := l_serial_number.COUNT; 
                      END IF;
                 EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    dbms_output.put_line('Item not serial controlled / serials not provided');
                 END; 
                               
                  -- Call the API to relieve reservations for the provided serial numbers
                  INV_RESERVATION_PUB.RELIEVE_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_RSV_REC            =>  x_mtl_reservation_tbl(i)       
                      ,  P_PRIMARY_RELIEVED_QUANTITY =>  l_primary_relieved_qty
                      ,  P_RELIEVE_ALL     =>  FND_API.G_FALSE     -- Relieve ALL -> set to false, relieve partially
                      ,  P_ORIGINAL_SERIAL_NUMBER   =>  l_serial_number
                      ,  P_VALIDATION_FLAG            =>  l_validation_flag
                      ,  X_PRIMARY_RELIEVED_QUANTITY =>  x_primary_relieved_qty
                      ,  X_PRIMARY_REMAIN_QUANTITY   =>  x_primary_remain_qty
                  );
                  
           
                  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:'||x_mtl_reservation_tbl(i).reservation_id);
                     DBMS_OUTPUT.PUT_LINE('Primary Relieved Quantity: '||x_primary_relieved_qty);
                     DBMS_OUTPUT.PUT_LINE('Primary Remain Quantity: '||x_primary_remain_qty);              
                  END IF;
            
            END LOOP;   
    EXCEPTION
            WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE('Exception Occured :');
              DBMS_OUTPUT.PUT_LINE(SQLCODE ||':'||SQLERRM);
              DBMS_OUTPUT.PUT_LINE('=======================================================');
    END RelieveReservation;
    

      

    土豆君
  • 相关阅读:
    IEnumerable、IEnumerator接口(如何增加迭代器功能)
    IConvertible接口
    IComparable和IComparer接口
    c#-泛型、协变、逆变
    MVC-HtmlHelper扩展
    .Net反射-TypeDescriptor
    MVC Core 使用TagHelper扩展几个插件
    js日志组件封装
    js预解析
    js代码优化
  • 原文地址:https://www.cnblogs.com/jenrry/p/10020851.html
Copyright © 2020-2023  润新知