壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4668|回复: 10

应群里要求发一个bom展开的sql,如果不全请大家补充

[复制链接]
发表于 2007/10/16 11:45:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
select bom.ASSEMBLY_ITEM_ID,
       mst.segment1 "产品代码",
       bom.ALTERNATE_BOM_DESIGNATOR,
       bic.COMPONENT_ITEM_ID,
       mstc.segment1 "组件代码",
       bic.ITEM_NUM,
       bic.OPERATION_SEQ_NUM,
       bic.COMPONENT_ITEM_ID,
       bic.EFFECTIVITY_DATE,
       bic.PLANNING_FACTOR,
       bic.COMPONENT_YIELD_FACTOR,
       bic.WIP_SUPPLY_TYPE,
       bic.SUPPLY_SUBINVENTORY,
        msi.SEGMENT1  "物品代码",
        msi.DESCRIPTION  "物品说明",
        msi.ATTRIBUTE10  "产品名称",
        msi.ATTRIBUTE11  "型号",
        msi.ATTRIBUTE12  "PN码",
        msi.ATTRIBUTE13  "产品毛重",
        msi.ATTRIBUTE14  "关键部件",        
        mir.REVISION_LABEL "版本"
  from bom_bill_of_materials    bom,
       bom_inventory_components bic,
       mtl_system_items_b       mst,
       mtl_system_items_b       mstc,
       mtl_system_items_vl       msi,
       mtl_item_revisions       mir
where
   mir.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
   AND  mir.ORGANIZATION_ID = msi.ORGANIZATION_ID
   AND  (msi.SEGMENT1 LIKE '4%'
    OR   msi.SEGMENT1 LIKE '5%')
   and  mst.inventory_item_id=mir.INVENTORY_ITEM_ID
    and mir.ORGANIZATION_ID=bom.ORGANIZATION_ID
   and bom.BILL_SEQUENCE_ID = bic.BILL_SEQUENCE_ID
   and bom.ASSEMBLY_ITEM_ID = mst.inventory_item_id
   and bom.ORGANIZATION_ID = mst.organization_id
   and bic.COMPONENT_ITEM_ID = mstc.inventory_item_id
   and bom.ORGANIZATION_ID = mstc.organization_id
      --Item
   AND mst.bom_enabled_flag = 'Y'
   AND mst.bom_item_type IN (1, 2, 3, 4) --Dependent   
      --BOM Header
   AND bom.assembly_type = 1 --1 Manufature,2 ENG
   AND nvl(bom.effectivity_control, 1) <= 3
      --BOM Line
   AND nvl(bic.disable_date, SYSDATE) >= SYSDATE
   AND bic.effectivity_date <= SYSDATE
   AND bic.implementation_date IS NOT NULL
   AND nvl(bic.eco_for_production, 2) = 2
      
   and bom.ORGANIZATION_ID =116;
发表于 2007/10/16 13:45:53 | 显示全部楼层
兄弟你这段程序只是取得是BOM的第一层,贡献我的:分解到无虚拟件的哪一层
Select Aa.Organization_Code 组织
      ,Aa.Segment1 装配件编码
      ,Aa.Description 装配件描述
      ,Msi.Segment1 组件编码
      ,Msi.Description 组件描述
      ,Msi.Primary_Uom_Code 单位
      ,Aa.Component_Quantity 数量
      ,Aa.Component_Remarks 工位
      ,Aa.Operation_Seq_Num 工序
      ,Aa.Supply_Subinventory 供应子库
      ,Decode(Aa.Wip_Supply_Type, 1, '推式', 2, '装配拉式', 3, '拉式工序', 4, '批量',
                             5, '供应商', 6, '虚拟件', 7,'基于物料清单', '未定义') 供应方式
       ,Aa.Level_Num 级别
From Mtl_System_Items_b Msi
        ,(Select Bom.Organization_Id                                ,Mp.Organization_Code,Msi.Segment1
        ,Msi.Description
        ,Bic.Component_Item_Id
                     ,Bic.Component_Remarks
        ,Bic.Operation_Seq_Num
        ,Bic.Component_Quantity
        ,Bic.Supply_Subinventory
        ,Bic.Wip_Supply_Type
        ,Level Level_Num
                From Bom_Structures_b   Bom
        ,Bom_Components_b   Bic
        ,Mtl_System_Items_b Msi
        ,Mtl_Parameters     Mp
              Where Bom.Bill_Sequence_Id = Bic.Bill_Sequence_Id
        And Nvl(Bic.Disable_Date, Sysdate + 1) > Sysdate
        And Bom.Organization_Id = Msi.Organization_Id
        And Bom.Assembly_Item_Id = Msi.Inventory_Item_Id
                     And Bom.Organization_Id = Mp.Organization_Id
                    And Mp.Organization_Code = '&organization_code'
           Start With Msi.Segment1 = '&Assembly_Item_Num'  Connect By Prior                              Bic.Component_Item_Id = Bom.Assembly_Item_Id
        And Prior Bic.Wip_Supply_Type = 6) Aa
Where Msi.Organization_Id = Aa.Organization_Id
         And Msi.Inventory_Item_Id = Aa.Component_Item_Id
         And Aa.Wip_Supply_Type <> 6
Order By Aa.Component_Remarks
         ,Msi.Segment1
发表于 2007/10/16 18:51:23 | 显示全部楼层
2楼的分的这么细啊
发表于 2007/10/17 10:14:52 | 显示全部楼层
谢谢 大家的 热情啊
把我 的也贴上
select DISTINCT
       msi1.segment1 P_item,
       to_char(b.lvl) LV,
       nvl(bom.alternate_bom_designator,'P') Alternate_bom_designator,
       msi2.segment1 C_item,msi2.description,
       b.component_quantity Component_Qty
from inv.mtl_system_items_b msi1,
     inv.mtl_system_items_b msi2,
     bom.bom_bill_of_materials bom,
     bom.bom_operation_sequences bos,
     (select level
             lvl,
             bic.bill_sequence_id,
             bic.component_item_id,
             bic.component_quantity,
             bic.OPERATION_SEQ_NUM,
             bic.COMPONENT_YIELD_FACTOR,
             bic.COMPONENT_SEQUENCE_ID,
             bic.item_num,
             bic.wip_supply_type,
             bic.supply_subinventory,
             bic.effectivity_date
FROM bom.bom_inventory_components bic
where disable_date IS NULL
  start with bic.bill_sequence_id in
       ( select bill_sequence_id
           from bom.bom_bill_of_materials bom2,
                inv.mtl_system_items_b msi
          where bom2.assembly_item_id = msi.inventory_item_id
            and bom2.organization_id = msi.organization_id
           --and msi.segment1 like 'FCC1SAA4CSNNBG%'
           --and msi.segment1 like 'FGC1SAAMRSYN%'
             and msi.segment1 = '110205258000' --Bom level
             and msi.organization_id = 88
             and bom2.alternate_bom_designator is null
            )
    CONNECT BY bic.bill_sequence_id in
   prior (SELECT distinct bill_sequence_id
            FROM bom.bom_bill_of_materials BO,
                 inv.mtl_system_items_b msi
           WHERE BO.assembly_item_id = bic.component_item_id
             AND BO.organization_id = 88
             and bo.ORGANIZATION_ID = msi.ORGANIZATION_ID
             and bo.ASSEMBLY_ITEM_ID = msi.INVENTORY_ITEM_ID
             and bo.alternate_bom_designator is null
             and disable_date IS NULL
             )
             ) b
  where b.bill_sequence_id = bom.bill_sequence_id
     and bom.ORGANIZATION_ID = 88
     and bom.ORGANIZATION_ID = msi1.ORGANIZATION_ID
     and bom.ASSEMBLY_ITEM_ID = msi1.INVENTORY_ITEM_ID
     and bom.ORGANIZATION_ID = MSI2.ORGANIZATION_ID
     AND b.component_item_id = MSI2.INVENTORY_ITEM_ID
     --AND MSI2.SEGMENT1 not lIKE 'F9%'
     --AND MSI2.SEGMENT1 not like 'R__B%'
     --and msi2.segment1 not like 'F8%'
     --and msi2.segment1 not like 'R9%'
     --and msi2.segment1 not like 'Z%'
     order by 2
发表于 2007/10/17 10:19:13 | 显示全部楼层
二楼:Bom_Components_b   Bic 不存在啊?
 楼主| 发表于 2007/10/17 10:37:50 | 显示全部楼层
这个表是做什么的`?
发表于 2007/10/17 14:48:25 | 显示全部楼层
原帖由 wfly2004 于 2007-10-17 10:19 发表
二楼:Bom_Components_b   Bic 不存在啊?


不会吧,我都用了二年了,怎么会不存在呢
发表于 2007/11/16 10:48:21 | 显示全部楼层
感覺樓上諸位都沒有考慮多階虛擬bom,給大家看一下我以前一個案子中所寫展bom程式,這種情況不是sql可以做出來的,需要使用pl/sql,采用遞歸的方式實現,可以無限制展出任意深度的bom(這個只是碰到虛擬階才會展下去,稍加改動也可以做到完全展開一個bom,不管有多少層)。

“aps_sd_sourcing_rule_check_t”是我自己所建的table
參數中同時寫入料號和id只是為了後來處理數據的方便性,正確的做法是只要id就可以了

PROCEDURE extend_bom (
      p_sequence_id              IN       NUMBER
     ,p_organization_id          IN       NUMBER
     ,p_assembly_item_id         IN       NUMBER
     ,p_assembly_item            IN       VARCHAR2
     ,p_top_assembly_item_id     IN       NUMBER
     ,p_top_assembly_item        IN       VARCHAR2
     ,p_creation_date            IN       NUMBER
   )
   IS
      aa                            NUMBER;

      CURSOR c1
      IS
         SELECT bic.component_item_id
               ,msib.segment1
               ,bic.component_quantity unit_qty
               ,msib.wip_supply_type
               ,bic.bill_sequence_id
               ,bic.item_num
           FROM bom_bill_of_materials bom
               ,bom_inventory_components bic
               ,mtl_system_items_b msib
          WHERE bom.organization_id = p_organization_id
            AND msib.organization_id = bom.organization_id
            AND msib.inventory_item_id = bic.component_item_id
            AND bom.assembly_item_id = p_assembly_item_id
            AND NVL (bom.common_bill_sequence_id, bom.bill_sequence_id) = bic.bill_sequence_id
            AND (   bic.disable_date IS NULL
                 OR bic.disable_date > SYSDATE)
            AND effectivity_date <= SYSDATE;
   BEGIN
      FOR r1 IN c1
      LOOP
         BEGIN
            IF r1.wip_supply_type = 6
            THEN   --phantom
               BEGIN
                  extend_bom (p_sequence_id
                             ,p_organization_id
                             ,r1.component_item_id
                             ,r1.segment1
                             ,p_top_assembly_item_id
                             ,p_top_assembly_item
                             ,p_creation_date
                             );
                  NULL;
               END;
            ELSE
               BEGIN
                  INSERT INTO aps_sd_sourcing_rule_check_t
                              (sequence_id
                              ,top_assembly_item_id
                              ,assembly_item_id
                              ,component_item_id
                              ,item_num
                              ,unit_qty
                              ,organization_id
                              ,creation_date
                              ,top_assembly_item
                              ,assembly_item
                              ,item
                              )
                       VALUES (p_sequence_id
                              ,p_top_assembly_item_id
                              ,p_assembly_item_id
                              ,r1.component_item_id
                              ,r1.item_num
                              ,r1.unit_qty
                              ,p_organization_id
                              ,p_creation_date
                              ,p_top_assembly_item
                              ,p_assembly_item
                              ,r1.segment1
                              );
               END;
            END IF;
         END;
      END LOOP;

      COMMIT;
   END;
发表于 2007/11/21 08:16:27 | 显示全部楼层
哇,正有所需求..
发表于 2011/12/15 10:23:48 | 显示全部楼层
好帖要顶!
发表于 2012/2/18 09:28:28 | 显示全部楼层
学习一下,收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 07:24 , Processed in 0.016392 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表