根据BOM多级展开查询产品采购件

  根据BOM多级展开查找产品采购件,另外在EXCEL中做了一个宏来取数(需要修改连接数据库内容),可多次输入成品代码分别取出数据并保存
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

 

create PROCEDURE [dbo].[aaa_BomExpand]
(
@FNumber varchar(100),
@ExpandLevel int=50, ----展开级数
@Order smallint=1,  ----排序方式 0 自然顺序 ,1 物料代码,2 物料名称
@BeginDay datetime='19000101 12:00:00:000AM', --子项物料生效日期  
@EndDay datetime='21000101 12:00:00:000AM' --子项物料失效日期  
--@Succeed smallint OUTPUT,----是否成功
--@Reason varchar(400) OUTPUT ----失败原因
)
AS
 SET NOCOUNT ON
 Create Table #Mutidata (  FIndex int IDENTITY,FEntryID INT, FBomInterid int, FItemID int null, FNeedQty decimal(28,14) default(0) null, FBOMLevel int null, FItemType 
 int null, FParentID int default(0)null, FRate   decimal(28,14) default(0) null, FHistory int default(0) null, FHaveMrp smallint default(0) null, FLevelString 
 varchar(200) null, FBom int, FMaterielType int  default(371) null,FOperSN Int NULL DEFAULT(0),FOperID int default(0)) 
 
 Create Table #MutiParentItem(  FIndex int IDENTITY,FEntryID INT default(0), FBomInterid int, FItemID int null, FNeedQty decimal(28,14) default(0) null, FBOMLevel 
 int null, FItemType int null,  FParentID int default(0)null, FRate   decimal(28,14) default(0) null, FHistory int default(0) null, FHaveMrp smallint default(0) null, 
 FLevelString varchar(200) null , FBom int, FMaterielType int  default(371) null,FOperSN Int NULL DEFAULT(0),FOperID int default(0)) 
 Create Table #Errors ( FIndex int IDENTITY, FType smallint default(0), FErrText nvarchar(355) )
 
 Insert into #mutiParentItem (fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FBom) Select a.finterid, t1.FItemID,a.fqty, 0,0,(case t5.FID when 'WG' then 0 
 when 'ZZ' then 1 when 'WWJG' then 1 else 2 end) FItemtype,t1.FItemID From icbom a
 inner join t_ICItem t1 on t1.FItemID = a.fitemid
 left join t_Submessage t5 on t1.FErpClsID = t5.FInterID 
 where t5.FTypeID = 210 and  t1.fnumber=@FNumber and a.fusestatus=1072

 DECLARE @BOMMaxLevel smallint
 DECLARE @BOMLevel smallint
 DECLARE @SelectRows int
 DECLARE @ParentBomID int
 DECLARE @ParentNeedQty decimal(28,14)
 DECLARE @ParentIndex int
 DECLARE @ParentItemID int
 DECLARE @ParentHaveMrp int
 DECLARE @ParentLevelString varchar(200)
 DECLARE @ParentBomLevel int
 DECLARE @ParentHistory int
 DECLARE @ExpandMode int
 DECLARE @FItemType int
 DECLARE @FBom int
 DECLARE @FMaterielType int
 DECLARE @FBomInterid int
 DECLARE @sHideDisabledMaterial varchar(50)
 DECLARE @sLongNumber varchar(50)
 SELECT @BOMMaxLevel = 50
 SELECT @BOMLevel =0
 SELECT @SelectRows = 0
 SELECT @ExpandMode=0
 --SET @Succeed=0
 --SET @Reason=''
 SET @sLongNumber = '0'
 SELECT @sLongNumber  = isnull(fvalue,'0') FROM t_systemprofile WHERE fkey = 'UseShortNumber' AND FCategory = 'IC'
 SET @sLongNumber = rtrim(@sLongNumber)
 SELECT @sHideDisabledMaterial = RTRIM(ISNULL(FValue,'0')) FROM t_SystemProfile WHERE FKey = 'HideDisabledMaterial' AND FCategory = 'IC'
 IF @ExpandLevel=0
  SELECT @ExpandLevel=50
 UPDATE #MutiParentItem SET FHaveMrp = 1
 ------如果是特征类物料,展开到第一层为止
 SELECT TOP 1 @FBomInterid=fbominterid  , @ParentIndex=u1.FIndex,@ParentItemID=u1.Fitemid,@ParentNeedQty=u1.FNeedQty,@ParentBomLevel=u1.FBOMLevel,
  @ParentHaveMrp=u1.FHaveMrp,@ParentLevelString=u1.FLevelString,@ParentHistory=u1.FHistory ,@FItemType=u1.FItemType ,@FBom=u1.FBom,@FMaterielType=u1.FMaterielType
 FROM #MutiParentItem u1 ORDER BY FIndex DESC  
 --系统参数“屏蔽BOM中的失效物料”为1,则只展开有效的子项物料
 --过滤条件:v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay 
 --含义:物料有效期间与参数时间区间有交集为有效
 IF @sHideDisabledMaterial = '1'
 BEGIN
  IF @Order=0
  BEGIN
   INSERT INTO #MutiParentItem(FEntryID ,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
   SELECT V2.FEntryID,v2.finterid,
    v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15) ) * CAST(((  CAST( v2.FQty AS Decimal(28,15) ) / CAST(v1.FQty AS Decimal(28,15) )   )) AS Decimal(28,15)) FNeedQty, 1,
    @parentIndex FParentID,t1.FErpClsID FItemtype,
    v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
   FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
   WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
    AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY v2.FEntryID
  END
  ELSE IF @order=1
  BEGIN
   IF @sLongNumber = '0'
    INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
    SELECT FEntryID,v2.finterid,
       v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
       @parentIndex FParentID,t1.FErpClsID FItemtype,
       v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
    FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
    WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
     AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fnumber
       ELSE
    INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
    SELECT FEntryID,v2.finterid,
     v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15) ))) AS Decimal(28,15) ) FNeedQty, 1,
     @parentIndex FParentID,t1.FErpClsID FItemtype,
     v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
    FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
    WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
     AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fshortnumber
  END
  ELSE
  BEGIN
   INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
   SELECT V2.FEntryID,v2.finterid,
    v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
    @parentIndex FParentID,t1.FErpClsID FItemtype,
    v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
   FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
   WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
    AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fname
  END
 END
 ELSE
 BEGIN
  IF @Order=0
  BEGIN
   INSERT INTO #MutiParentItem(FEntryID ,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
   SELECT V2.FEntryID,v2.finterid,
    v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15)) / CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
    @parentIndex FParentID,t1.FErpClsID FItemtype,
    v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
   FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
   WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
    AND v2.FItemID = t1.FItemID ORDER BY v2.FEntryID
  END
  ELSE IF @order=1
  BEGIN
   IF @sLongNumber = '0'
    INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
    SELECT FEntryID,v2.finterid,
     v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
     @parentIndex FParentID,t1.FErpClsID FItemtype,
     v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
    FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
    WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
     AND v2.FItemID = t1.FItemID ORDER BY t1.fnumber
   ELSE
    INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
    SELECT FEntryID,v2.finterid,
     v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
     @parentIndex FParentID,t1.FErpClsID FItemtype,
     v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
    FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
    WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
     AND v2.FItemID = t1.FItemID ORDER BY t1.fshortnumber
  END
  ELSE
  BEGIN
   INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
   SELECT V2.FEntryID,v2.finterid,
    v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, 1,
    @parentIndex FParentID,t1.FErpClsID FItemtype,
    v2.FQty / v1.FQty FRate,@ParentHistory ,0,@FBom,v2.FMaterielType,v2.FOperID
   FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
   WHERE  v1.Finterid=@FBomInterid  AND v2.Finterid = v1.FInterID
    AND v2.FItemID = t1.FItemID ORDER BY t1.fname
  END
 END
 SELECT @SelectRows = COUNT(*) FROM #MutiParentItem
 WHILE ( @BOMLevel < @BomMaxLevel AND @SelectRows >0 )
 BEGIN
  SET @SelectRows = 0
  SELECT TOP 1 @ParentIndex=u1.FIndex,@ParentItemID=u1.Fitemid,@ParentNeedQty=u1.FNeedQty,@ParentBomLevel=u1.FBOMLevel,
   @ParentHaveMrp=u1.FHaveMrp,@ParentLevelString=u1.FLevelString,@ParentHistory=u1.FHistory ,@FItemType=u1.FItemType ,@FBom=u1.FBom,@FMaterielType=u1.FMaterielType
  FROM #MutiParentItem u1 ORDER BY FIndex DESC   
  -----只展开普通件和特征件,如果不是,停止展开此物料
  IF @FMaterielType=372 OR @FMaterielType=373 OR @FMaterielType=374 OR @FMaterielType=376
   SELECT @ParentHaveMrp =1
  IF @ParentHaveMrp > 0
  BEGIN
   INSERT INTO #Mutidata (FEntryID,fbominterid,FItemID,FNeedQty,FBomLevel,FItemType,FParentID,FHistory,FLevelString ,FBom,FMaterielType,FOperID)
   SELECT U1.FEntryID,u1.fbominterid, u1.FItemID,u1.FNeedQty,u1.FBomLevel,u1.FItemType,u1.FParentID,u1.FHistory,u1.FLevelString ,u1.FBom,u1.FMaterielType,u1.FOperID
   FROM #MutiParentItem u1  WHERE u1.FIndex = @ParentIndex
   Delete FROM #MutiParentItem WHERE FIndex = @ParentIndex
  END
  ELSE
  BEGIN
       UPDATE #MutiParentItem SET FHaveMrp = 1 WHERE FIndex = @ParentIndex
       ----展开并插入该物料的父项物料-----------
       SET @SelectRows = 0
      ----增加计数器-------------------------
       SET @BomLevel = @ParentBomLevel + 1
       ---限定展开层次
       IF @BomLevel=@ExpandLevel
    SELECT @ParentHaveMrp =1
   IF @sHideDisabledMaterial = '1'
   BEGIN
          IF @order=0
          BEGIN
           INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
           SELECT V2.FEntryID,v2.finterid,
            v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
            @parentIndex FParentID,t1.FErpClsID FItemtype,
            v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
           FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
           WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
            AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY v2.FEntryID
          END
          ELSE IF @order=1
    BEGIN
     IF @sLongNumber = '0'
      INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
      SELECT V2.FEntryID,v2.finterid,
       v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
       @parentIndex FParentID,t1.FErpClsID FItemtype,
       v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
      FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
      WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
       AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fnumber
     ELSE
      INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
      SELECT V2.FEntryID,v2.finterid,
       v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
       @parentIndex FParentID,t1.FErpClsID FItemtype,
       v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
      FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
      WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
       AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fshortnumber
    END
    ELSE
    BEGIN
     INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
     SELECT V2.FEntryID,v2.finterid,
      v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15)) /CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
      @parentIndex FParentID,t1.FErpClsID FItemtype,
      v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
     FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
     WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
      AND v2.FItemID = t1.FItemID AND v2.FBeginDay <= @EndDay AND v2.FEndDay >= @BeginDay ORDER BY t1.fname
    END
   END
   ELSE
   BEGIN
          IF @order=0
          BEGIN
           INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
           SELECT V2.FEntryID,v2.finterid,
            v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15) ) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
            @parentIndex FParentID,t1.FErpClsID FItemtype,
            v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
           FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
           WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
            AND v2.FItemID = t1.FItemID  ORDER BY v2.FEntryID
          END
          ELSE IF @order=1
    BEGIN
     IF @sLongNumber = '0'
      INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
      SELECT V2.FEntryID,v2.finterid,
       v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/ CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
       @parentIndex FParentID,t1.FErpClsID FItemtype,
       v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
      FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
      WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
       AND v2.FItemID = t1.FItemID ORDER BY t1.fnumber
     ELSE
      INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
      SELECT V2.FEntryID,v2.finterid,
       v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15))/CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
       @parentIndex FParentID,t1.FErpClsID FItemtype,
       v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
      FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
      WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
       AND v2.FItemID = t1.FItemID ORDER BY t1.fshortnumber
    END
    ELSE
    BEGIN
     INSERT INTO #MutiParentItem(FEntryID,fbominterid,FItemID,FNeedQty,FBOMLevel,FParentID,FItemType,FRate,FHistory,FHaveMrp,FBom,FMaterielType,FOperID)
     SELECT V2.FEntryID,v2.finterid,
      v2.FItemID, CAST(@ParentNeedQty AS Decimal(28,15)) * CAST(((CAST(v2.FQty AS Decimal(28,15)) /CAST(v1.FQty AS Decimal(28,15)))) AS Decimal(28,15)) FNeedQty, (@BomLevel) FBomLevel,
      @parentIndex FParentID,t1.FErpClsID FItemtype,
      v2.FQty / v1.FQty FRate,@ParentHistory ,@ParentHaveMrp,@FBom,v2.FMaterielType,v2.FOperID
     FROM ICBOM v1,ICBOMChild v2,t_ICItem t1
     WHERE  v1.FitemiD=@ParentItemID AND v1.FUseStatus = 1072 AND v2.Finterid = v1.FInterID
      AND v2.FItemID = t1.FItemID ORDER BY t1.fname
    END
   END
  END
  SELECT @SelectRows = Count(*) FROM #MutiParentItem
 END
  ---错误判断------------------------
 --IF @BOMLevel >= 50
 --BEGIN
  --SET @Succeed=1
  --SET @Reason='BOM结构不安全,可能出现嵌套!BOM展开无法继续.'
 --END
 UPDATE #Mutidata SET FLevelString = REPLICATE('.', FBomLevel) + convert(varchar(4),FBomLevel)
 --select * from #Mutidata a,t_icitem b where a.fitemid=b.fitemid
  --下面这段语句是查询出来的数据,只查询前面几个字段,多数字段被我注销了(需要可自己修改)
 select a.FLevelString FLevel,b.fnumber FNumber,b.fname FName, k.FName as FErpClsName,
a.FNeedQty FQty
--b.FChartNumber AS FChartNumber,isnull(c.Fname,' ')+' ' FUnitID, 
--,d.FScrap,d.FMachinePos,isnull(e.Fname,' ')+' ' FMaterielType,(case d.FOperSN when 0 then '' else cast(d.FOperSN as varchar(255)) end) 
 --FOperSN,isnull(f.Fname,' ')+' ' FOperID, isnull(g.FName,' ')+' ' FStockID,(case b.FIsKeyItem when 0 then '否' else '是' end) FIsKeyItem, (case h.FDeleted when 0 then '否' else 
 --'是' end)  FDeleted,d.FNote,isnull(i.fname,' ')+' ' FUseStatus,a.FitemID EditFitem, CASE WHEN (d.FBeginDay BETWEEN '1900-01-01' AND  '2100-01-01') THEN 0  WHEN (d.FEndDay 
 --BETWEEN '1900-01-01' AND  '2100-01-01' ) THEN 0  WHEN ('1900-01-01' >= d.FBeginDay AND '2100-01-01' <= d.FEndDay) THEN 0 ELSE 1 END AS FAlterBackColor, '253, 223, 
 --223' AS FBackColor,  d.FBeginDay,d.FEndDay,d.FPercent,b.FQtyDecimal FInitDecimal,b.FQtyDecimal FQtyDecimal
 --select a.FLevelString+' ' FLevel,b.fnumber+b.FModel FNumber,b.fname+' ' FName, k.FName+' ' as FErpClsName,b.FChartNumber AS FChartNumber,isnull(c.Fname,' ')+' ' FUnitID
  into #TmpBOM from #Mutidata a
 inner join t_icitem b on a.fitemid=b.fitemid
 left outer join t_item c on b.funitid=c.fitemid
 inner join icbomchild d on a.FBomInterid=d.finterid and a.FItemID=d.FItemID and a.FOperID=d.FOperID AND a.FEntryID=d.FEntryID
 left outer join t_submessage e on d.FMaterielType=e.finterid
 left outer join t_submessage f on d.FOperID=f.finterid
 left outer join t_stock g on d.FStockID=g.FItemID
 inner join t_item h on b.fitemid=h.fitemid
 left outer join t_submessage i on b.fusestate=i.finterid
 inner join  t_submessage k on b.FErpClsID = k.FinterID
 where a.FBOMLevel>0 and ferpclsid=1 order by a.FIndex desc
-- ferpclsid=1代表采购件,可以去掉表示展开所有物料

 select * from #TmpBOM 
 drop table #TmpBOM

 drop table #Errors
 drop table #MutiParentItem
 drop table #Mutidata
 RETURN

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值