/*计划订单一旦投放,T_PLN_RESERVELINKENTRY里计划订单将转移到生产订单 */ SELECT t0e.FID ,t0.FBILLNO ,t0e.FENTRYID ,t0e.FMATERIALID ,t0e.FBomId MOBomId ,t1.FSRCFORMID '顶级需求来源类型' ,t1.FSRCBILLNO '顶级需求来源单号' ,t1.FSRCINTERID /*顶级需求来源单内码*/ ,t1.FSRCENTRYID /*顶级需求来源分录号*/ ---来源于同一预测单同一行的这两个值一定相同 ,t2e.FSEQ ,t2e.FBomId /*可以用预测订单的FBomId取匹配BOM多级展开的首层号*/ ,t2e.FMATERIALID OMATERAILID ,'' BOMLevel /*放入一个临时表,待用*/ --INTO #_MO FROM T_PRD_MO t0 --生产订单表头 INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --生产订单表体 INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID=t0e.FID AND t1e.FINTSUPPLYENTRYID=t0e.FENTRYID--预留表表体 INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID='PLN_FORECAST'--预留表表头 INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID=t1.FSRCINTERID AND t2e.FENTRYID=t1.FSRCENTRYID--预测单表体 WHERE 1 = 1 --t0.FBILLNO='WO2401100002' /*测试生产订单*/ AND t0e.FFORECASTGROUP='' /*层数为空*/ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*确保是通过MRP运算下推的单据*/ --CREATE INDEX [#PLid] ON #_MO (FSRCINTERID ASC,FSRCENTRYID ASC) /*找相同组别可用*/ --CREATE INDEX [#BomId] ON #_MO (FBomId ASC) /*BOM多级展开以及更新首层号可用*/ --SELECT FSRCINTERID,FSRCENTRYID,MO2.FBILLNO AS '首层生产订单的层号' --into #n_mo --FROM #_MO MO INNER JOIN T_PRD_MOENTRY MO1 ON MO1.FID=MO.FID AND MO1.FENTRYID=MO.FENTRYID --INNER JOIN T_PRD_MO MO2 ON MO2.FID=MO.FID --CREATE INDEX [#n_mo] ON #n_mo (FSRCINTERID ASC,FSRCENTRYID ASC) /*找相同组别可用*/ ----update mo set BOMLevel=nmo.首层生产订单的层号+'-'+'表值函数里的层号' ----from #_MO mo left join #n_mo nmo on nmo.FSRCINTERID=mo.FSRCINTERID and nmo.FSRCENTRYID=mo.FSRCENTRYID --/*-------------将dbo.GetBomSeq改为表值函数或存储过程,返回包含下列字段的表----------------- -- 顶级BOM_ID(对应#_MO中的FBomId); -- 子BOM_ID(对应#_MO中的MOBomId); -- 层号 ----------------将dbo.GetBomSeq改为表值函数或存储过程,返回包含下列字段的表------------------*/ ----select dbo.GetBomSeq(7293846,3994919) --select * from #_MO --DROP TABLE #_MO --DROP TABLE #n_mo