EBS INV 计算现有量(标准API)、保留量、可用量(一)

本文介绍了一种查询特定组织中物料的现有量和保留量的方法。通过遍历批次并使用Oracle EBS API来获取现有量,同时利用SQL查询计算保留量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有量= 可用量+保留量;
1.现有量<BR> --批次
     CURSOR c_lot_number(l_organization_id NUMBER) IS
       SELECT mln.lot_number,
              mln.expiration_date
         FROM mtl_lot_numbers mln
        WHERE mln.inventory_item_id = p_inventory_item_id
         -- AND mln.status_id = 1 --有效合格批次
          AND mln.organization_id = l_organization_id; --需要添加合格字段 
  FOR rec_loc IN c_lot_number(p_organization_id)
     LOOP
       --遍历批次。取合格批次。
       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     => p_organization_id, --仓库ID
                                              p_inventory_item_id   => p_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   => p_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);
      
       IF l_return_status = fnd_api.g_ret_sts_success THEN
         l_onhand := l_onhand + l_qoh;
       ELSE
         log( 'Error:获取先有量出错' );
       END IF;
      
     END LOOP;
    
2. 保留量
?
SELECT nvl( SUM (qty), 0)
      INTO l_reserv
      FROM ( SELECT mr.reservation_quantity qty,
                   msi.segment1
              FROM mtl_reservations   mr,
                   mtl_system_items_b msi
             WHERE 1 = 1
               AND mr.demand_source_type_id <> 2 --排除SO 
               AND mr.inventory_item_id = msi.inventory_item_id
               AND mr.organization_id = msi.organization_id
               AND mr.subinventory_code = p_subinventory_code
               AND msi.inventory_item_id = p_inventory_item_id
               AND msi.organization_id = p_organization_id
            UNION
            SELECT mmt.transaction_quantity qty,
                   msi.segment1
              FROM mtl_material_transactions_temp mmt,
                   mtl_system_items_b             msi
             WHERE 1 = 1
               AND mmt.transaction_source_type_id <> 2 --排除SO 
               AND mmt.subinventory_code = p_subinventory_code
               AND mmt.inventory_item_id = msi.inventory_item_id
               AND mmt.organization_id = msi.organization_id
               AND msi.inventory_item_id = p_inventory_item_id
               AND msi.organization_id = p_organization_id);
<think>好的,我需要解决用户在Oracle EBS中释放被保留库存的问题。首先,用户提到保留为0,但可处理数也为0,这意味着库存可能被某种保留机制锁定,但具体原因不明。根据引用中的信息,库存组织用于跟踪库存业务,且采购和库存模块的结账流程需要关闭期间以防止事务处理(引用2、3)。这可能影响库存的可用性。此外,财务月结时需要检查中转科目,确保余额为零(引用4),这可能间接影响库存状态。 可能的解决方案步骤包括:1.**检查库存保留原因**:查看保留记录,确定保留类型是硬保留还是软保留。硬保留通常由系统自动生成,如销售订单预留;软保留可能是手动设置。 2. **释放手动保留**:如果是手动保留,可以通过“保留事务处理”界面释放。需要用户权限,可能涉及查找保留来源单据。3.**处理系统保留**:系统自动保留需处理源头单据,如取消销售订单或工单,系统会自动释放。但用户提到保留为0,可能单据已处理但未触发释放,需检查事务处理状态。4.**库存组织与期间状态**:确认库存组织是否处于开放期间(引用3)。如果期间关闭,无法进行事务处理,导致无法释放。需重新打开期间或调整系统日期。 5. **事务处理异常**:可能存在未完成的事务,如移动工单等,需检查待处理事务并完成或回滚。6.**数据修复**:如果上述步骤无效,可能需要通过SQL脚本直接更新库存表,但需谨慎操作,避免数据不致。 需提醒用户注意系统权限和备份,必要时联系DBA。同时,参考财务月结的中转科目检查(引用4),确保库存调整的财务影响正确处理。</think>### 解决方案:释放Oracle EBS中被保留的库存 #### 1. **确认保留类型及原因** - **保留类型**:需区分是**硬保留**(系统自动生成,如销售订单、工单预留)还是**软保留**(手动设置)。 - **保留来源**:通过`库存→保留保留事务处理`界面查询保留记录,确认保留关联的单据(如销售订单号、工单号)[^2]。 #### 2. **释放手动保留(软保留)** - **操作路径**:`库存→保留保留事务处理` - **步骤**: 1. 输入查询条件(如组织、物料编号)定位保留记录。 2. 选择需释放的保留行,点击“释放”按钮。 3. 提交`库存事务处理管理器`请求,确保事务处理完成。 #### 3. **处理系统保留(硬保留)** - **需处理源头单据**: - **销售订单保留**:取消订单或关闭需求后,系统自动释放。 - **工单保留**:关闭工单或调整物料需求。 - **关键检查点**: - 检查单据状态是否为“已关闭”或“已取消”。 - 若单据已处理但保留未释放,需运行`保留管理→清除保留历史`请求[^3]。 #### 4. **检查库存组织期间状态** - **操作路径**:`库存→会计关闭→库存会计期` - **步骤**: 1. 确认当前库存组织是否处于**开放期间**。 2. 若期间已关闭,需重新打开或联系系统管理员调整[^3]。 #### 5. **处理事务处理异常** - **运行请求**: - `库存→事务处理→处理未决事务`:检查是否存在未完成的移动工单、转移订单等。 - `库存→报表→库存价值报表`:验证库存数保留状态是否致[^3]。 #### 6. **数据修复(谨慎操作)** - **适用场景**:当系统逻辑异常导致保留无法释放时。 - **操作步骤**: 1. 备份相关表(如`MTL_MATERIAL_TRANSACTIONS_TEMP`、`MTL_RESERVATIONS`)。 2. 通过DBA执行SQL脚本更新保留状态(示例): ```sql UPDATE mtl_reservations SET quantity = 0 WHERE reservation_id = [保留ID]; ``` 3. 提交`保留管理→清除保留历史`请求[^3]。 #### 7. **验证可处理数** - **操作路径**:`库存→物料→物料在库` - **预期结果**:释放后,可处理数应恢复为实际可用量。若仍为0,需检查是否其他保留或事务锁定了库存[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值