怎么查询MTL_ONHAND_QUANTITIES_DETAIL与mtl_material_transactions中的库存量持平?

网上的一篇文章:
Oracle Applications 提供了计算库存的表 MTL_ONHAND_QUANTITIES_DETAIL,开发人员只要按要求对表进行分组求和即可得到库存的现有量,这个数量就是我们在系统中查询的数量。但是如果用户要开发人员提供上个月或上个季度的库存就麻烦了。因为表MTL_ONHAND_QUANTITIES_DETAIL不提供追溯库存计算的方法。那怎么解决这个问题?
我们先来看看表MTL_ONHAND_QUANTITIES_DETAIL和 mtl_material_transactions 表的关系。mtl_material_transactions 是 Oracle Applications 库存的基表,凡是和库存有关的数据都必须存入这个表,如初期的库存导入,采购的接受入库。销售,制造的完工入库。子库转移等。mtl_material_transactions 的分组求和应该等于MTL_ONHAND_QUANTITIES_DETAIL表的分组求和,但表mtl_material_transactions 的记录一般数据庞大,不会在这个表中求现有量。mtl_material_transactions表中每笔的数据异动都会影响到MTL_ONHAND_QUANTITIES_DETAIL 的最终结果。我们通过研究发现。mtl_material_transactions 每笔入库的记录都会相应的在MTL_ONHAND_QUANTITIES_DETAI 表中增加此记录。在库存未消失前我们可以通过 mtl_material_transactions表的TRANSACTION_ID字段和表MTL_ONHAND_QUANTITIES_DETAIL的字段CREATE_TRANSACTION_ID 建立一一对应关系。
  现在的问题是我在系统里通过MTL_ONHAND_QUANTITIES_DETAIL中的CREATE_TRANSACTION_ID字段 关联mtl_material_transactions只能关联到一小部分,有很多都是空的,mtl_material_transactions就没有CREATE_TRANSACTION_ID 的记录,求解

 

这个是按年份计算历史库存状态的查询,可以按自己要求改写出你要的语句。
select organization_id,
       to_char(lastdate, 'yyyy'),
       count(*) cnt,
       sum(amount) value
  from (
        
        select tran.organization_id,
                tran.inventory_item_id,
                cict.item_number,
                cict.description,
                cict.primary_uom_code,
                round(item_cost, 2) item_cost,
                onhand,
                round(onhand * item_cost, 2) amount,
                lastdate,
                planning_make_buy_code
          from (select sum(primary_transaction_quantity) onhand,
                        inventory_item_id,
                        organization_id
                   from mtl_onhand_quantities_detail
                  where organization_id = 1
                  group by inventory_item_id, organization_id) moq,
               
                (select max(transaction_date) lastDate,
                        inventory_item_id,
                        organization_id
                   from inv.mtl_material_transactions
                  where transaction_type_id not in (10008, 2, 90, 24)
                    and organization_id = 1
                  group by inventory_item_id, organization_id) tran,
                (select inventory_item_id,
                        item_number,
                        description,
                        primary_uom_code,
                        planning_make_buy_code,
                        max(item_cost) item_cost
                   from CST_ITEM_COST_TYPE_V
                  where (organization_id in (1, 2, 3)
                    and cost_type_id = 1 or organization_id =4
                    and cost_type_id = 2)
                    and item_cost > 0
                  group by inventory_item_id,
                           item_number,
                           description,
                           primary_uom_code,
                           planning_make_buy_code) cict
        
         where tran.inventory_item_id = moq.inventory_item_id
           and tran.organization_id = moq.organization_id
           and cict.inventory_item_id(+) = moq.inventory_item_id
           and lastdate < to_date('2011-01-01', 'yyyy-mm-dd')
        
         order by lastdate, item_number
        
        )
group by organization_id, to_char(lastdate, 'yyyy')
order by organization_id, to_char(lastdate, 'yyyy')


查历史库存不能使用MTL_ONHAND_QUANTITIES之类的表,只能做核对工作,语句核心是transaction_type_id not in (10008, 2, 90, 24),要排除这几种事务类型。留下的都是影响库存数量的事务。
注意的是当历史上事务处理出现异常时,最后计算出来的现有量会与MTL_ONHAND_QUANTITIES表中不一致,可以用当前现有量核对不一致的物料。使用这个语句
select * from (select sum(primary_quantity) qty,
                    inventory_item_id,
                    organization_id
               from inv.mtl_material_transactions
              where transaction_type_id not in(10008,2,90,24)               
                and organization_id = 2
              group by inventory_item_id, organization_id) tran,
            (select organization_id,
                    inventory_item_id,
                    sum(on_hand) quantity
               from MTL_ONHAND_TOTAL_V where  organization_id = 2
              group by organization_id, inventory_item_id) Mot
              where tran.inventory_item_id=mot.inventory_item_id
              and tran.organization_id=mot.organization_id
              and tran.qty<>mot.quantity
。查询可能会慢些,但是能接受。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值