Files
GateDge2023_ljy/10.珍妮采/代码格式修正.sql
PastSaid e1e6cba475 a
2024-04-22 09:39:19 +08:00

1645 lines
46 KiB
Transact-SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

USE [AIS20180209140748] go
/****** Object: StoredProcedure [dbo].[SeorderBomExpAND] Script Date: 2024/1/24 15:09:53 ******/
SET ansi_nulls ON go SET quoted_identifier ON go
--SELECT * FROM seorder WHERE FBillNo='test201706201'
--SELECT * FROM SEOrderEntry WHERE FInterID=19907
--UPDATE SEOrder SET FHeadSelfS0153='N' WHERE FInterID=19422
--[SeorderBomExpAND] 'KLSO-20/0032/1-D7','mornINgstar',0,16393
--USE AIS20180209140748
-- =============================================
-- Author: 汤道勇
-- Create date: 2019-10-18
-- Description: 订单需求计算
-- =============================================
ALTER PROCEDURE [dbo].[SeorderBomExpAND] ( @BillNo AS VARCHAR(100),
--销售订单编号
@UseName AS VARCHAR(50),
--评审用户名称
@FInterID INT = 0,
--销售订单内码
@UserID INT = 16393 --评审用户ID
) AS begin SET nocount ON SET ansi_warnings off DECLARE @FID INT
--declare @BillNo as varchar(100)
--declare @FInterID INT=0
--set @BillNo='LSO-0782/18/2-D9-1'
IF @FInterID = 0
SELECT top 1 @FID = finterid
FROM seorder
WHERE fbillno = @BillNo AND fcancellation = 0
ELSE
SET @FID = @FInterID --DECLARE @FID INT
--SET @FID=19917
DELETE FROM mrp WHERE fid = @FID
DELETE FROM mrpentry WHERE fid = @FID
DELETE FROM mrpentry1 WHERE fid = @FID
DELETE FROM mrpentry2 WHERE fid = @FID
DELETE FROM mrpentry3 WHERE fid = @FID
DELETE FROM mrpentry4 WHERE fid = @FID
CREATE TABLE #mutidata(
findex INT identity(1,1)
,fbominterid INT DEFAULT(0)
--BOM内码
,fitemid INT NULL --物料内码
,fneedqty DECIMAL(28,14) DEFAULT(0) NULL,fbomlevel INT NULL
--BOM层级 0为成品 1为成品下一层依次类推)
,fparentid INT DEFAULT(0) NULL,frate DECIMAL(28,14) DEFAULT(0) NULL,
flevelstring VARCHAR(200) NULL,fbom INT,frootbomid INT DEFAULT(0),
forderinterid INT --订单内码
,forderentryid INT --订单行号
,f1 DECIMAL(28,14) DEFAULT(0) NULL -- --直接上级对当前物料的用量
,f2 DECIMAL(28,14) DEFAULT(0) NULL --直接上级物料的需求量
,f3 nvarchar(255) --物料长代码
,fnumber nvarchar(255) --物料长代码前3位
,fentryselfz0142 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0142 变动损耗%(一万以下)
,fentryselfz0143 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0143 变动损耗%(一至五万)
,fentryselfz0144 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0144 变动损耗%(五万以上)
,fentryselfz0145 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0145 粘锅料或5K以下固定值
,fentryselfz0151 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0151 其他固定值损耗
,fentryselfz0152 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0152 5000以下订单
,fentryselfz0153 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0153 变动损耗%10万以上
,forderdate datetime --销售订单日期
,funitid INT --BOM中用到的计量单位内码
,ferpclsid INT DEFAULT(0) --物料属性
,即时库存 DECIMAL(28,14) DEFAULT(0) --即时库存
,[在制量(未入库) ] DECIMAL(28,14) DEFAULT(0)
,已评审未出货的销售订单 DECIMAL(28,14) DEFAULT(0)
,投料单需求量 DECIMAL(28,14) DEFAULT(0)
,可用量 DECIMAL(28,14) DEFAULT(0)
,需生产数量 DECIMAL(28,14) DEFAULT(0)
,齐料日期 datetime
,开工日期 datetime
,完工日期 datetime
,要求到货日期 datetime
);
CREATE TABLE #mutidata2(
findex INT identity(1,1)
,fitemid INT NULL --物料内码
,fneedqty DECIMAL(28,14) DEFAULT(0) NULL
,frate DECIMAL(28,14) DEFAULT(0)NULL
,fbom INT,frootbomid INT DEFAULT(0),forderinterid INT --订单内码
,forderentryid INT --订单行号
,f1 DECIMAL(28,14) DEFAULT(0) NULL -- --直接上级对当前物料的用量
,f2 DECIMAL(28,14) DEFAULT(0) NULL --直接上级物料的需求量
,f3 nvarchar(255) --物料长代码
,fnumber nvarchar(255) --物料长代码前3位
,fentryselfz0142 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0142 变动损耗%(一万以下)
,fentryselfz0143 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0143 变动损耗%(一至五万)
,fentryselfz0144 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0144 变动损耗%(五万以上)
,fentryselfz0145 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0145 粘锅料或5K以下固定值
,fentryselfz0151 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0151 其他固定值损耗
,fentryselfz0152 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0152 5000以下订单
,fentryselfz0153 DECIMAL(28,14) DEFAULT(0)
--FEntrySelfZ0153 变动损耗%10万以上
,forderdate datetime --销售订单日期
,funitid INT --BOM中用到的计量单位内码
,ferpclsid INT DEFAULT(0) --物料属性
,齐料日期 datetime
,开工日期 datetime
,完工日期 datetime
,要求到货日期 datetime
)
CREATE UNIQUE clustered INDEX idx_findex ON #mutidata(findex);
CREATE nonclustered INDEX idx_fitemid ON #mutidata(fitemid);
CREATE nonclustered INDEX idx_flevelstring ON #mutidata(fbomlevel);
CREATE nonclustered INDEX idx_f3 ON #mutidata(f3);
CREATE nonclustered INDEX idx_fnumber ON #mutidata(fnumber);
CREATE UNIQUE clustered INDEX idx_findex ON #mutidata2(findex);
CREATE nonclustered INDEX idx_fitemid ON #mutidata2(fitemid);
CREATE nonclustered INDEX idx_fnumber ON #mutidata2(fnumber);
/*更新半成品的即时库存数量*/
SELECT a.fitemid,
Sum(fqty) fqty
INTO #icinventory
FROM icinventory a WITH ( nolock )
LEFT JOIN t_stock b WITH (nolock ) ON a.fstockid = b.fitemid
LEFT JOIN t_icitem c WITH (nolock ) ON a.fitemid = c.fitemid
WHERE
b.fproperty = 10
AND c.fnumber NOT LIKE '05.%'
GROUP BY a.fitemid
HAVING Sum(fqty) <> 0
/*更新半成品预计入库数量,只考虑已审核的产品入库单*/
SELECT
v1.fitemid
,Sum(v1.fauxqty - v1.fauxstockqty) AS fqty --计划生产数量-入库数量
INTO #yjrk
FROM
icmo v1 WITH(nolock)
INNER JOIN t_icitem t9 WITH(nolock) ON v1.fitemid = t9.fitemid
WHERE 1 = 1
AND t9.fitemid <> 0
AND v1.fauxqty - v1.fauxstockqty > 0
AND (
v1.ftrantype = 85
AND v1.ftype <> 11060
AND (v1.fstatus IN (1,2,5) --确认,下达状态的任务单
AND t9.ferpclsid IN (2,3)
AND v1.fcancellation = 0))
AND (t9.fnumber LIKE '03.%' OR t9.fnumber LIKE '04.%')
GROUP BY
v1.fitemid
/*投料单已投未领数量,05.开头的物料不需要考虑库存信息*/
SELECT
c.fitemid
,sum(
isnull(c.fauxqtymust * m.fcoefficient,0)+ isnull(
c.fauxqtysupply * m.fcoefficient,
0
)- isnull(
c.fauxstockqty * m.fcoefficient,0
)
) AS 'FQty' INTO #yjck--应发数量-已领数量
FROM
icmo a WITH(nolock)
INNER JOIN ppbom b WITH(nolock) ON a.finterid = b.ficmointerid
INNER JOIN ppbomentry c WITH(nolock) ON b.finterid = c.finterid
INNER JOIN t_measureunit m WITH(nolock) ON c.funitid = m.fmeasureunitid
INNER JOIN t_icitem n WITH(nolock) ON n.fitemid = c.fitemid
WHERE
1 = 1
AND a.fstatus IN(1,2,5)
AND (
isnull(c.fauxqtymust,0)+ isnull(c.fauxqtysupply,0)- isnull(c.fauxstockqty,0)
)> 0
AND n.fnumber NOT LIKE '05.%'
GROUP BY
c.fitemid
/*已审核未关闭的销售订单已评审未转任务单的成品和半成品*/
SELECT
fbase fitemid
,sum(CONVERT(FLOAT,ftext9)) fqty
INTO #seorder
FROM
mrpentry2 t1 WITH(nolock)
INNER JOIN seorder v1 WITH(nolock) ON t1.finteger2 = v1.finterid
WHERE 1 = 1
AND (v1.fchangemark = 0
AND (isnull(v1.fclasstypeid,0)<> 1007100)
AND (v1.fcancellation = 0 AND v1.fstatus > 2)
)
AND CONVERT(FLOAT,ftext9)> 0
AND t1.fcheckbox3 = 0
AND fbase > 0
GROUP BY
fbase
/**************************************************************1级 START ***************************************************************/
INSERT INTO #mutidata (
fbominterid
,fitemid
,fneedqty
,fbomlevel
,fparentid
,frate
,flevelstring
,fbom
,frootbomid
,forderinterid
,forderentryid
,forderdate
,funitid
,齐料日期
,开工日期
,完工日期
)
SELECT
a.finterid 'FBomInterid'
,se.fitemid 'FItemID'
,se.fqty *(m.fcoefficient / n.fcoefficient) 'FNeedQty'
,0 'FBomLevel'
,0 'FParentID'
,0 'FRate'
,0 'FLevelStrIng'
,a.fitemid 'FBom'
,a.finterid 'FRootBOMID'
,se.finterid 'FOrderInterID'
,se.fentryid 'FOrderEntryID'
,se.fdate '交货日期'
,a.funitid 'FUnitID'
,se.fentryselfs0177 '齐料日期'
,dateadd(day,2,se.fentryselfs0177) '开工日期'
,dateadd(day,-7,se.fdate) '完工日期'
FROM
seorder s WITH(nolock)
INNER JOIN seorderentry se WITH(nolock) ON s.finterid = se.finterid
LEFT JOIN icbom a WITH(nolock) ON a.fitemid = se.fitemid
INNER JOIN t_measureunit m WITH(nolock) ON se.funitid = m.fmeasureunitid
INNER JOIN t_measureunit n WITH(nolock) ON a.funitid = n.fmeasureunitid
WHERE
s.fcancellation = 0
AND isnull(s.fcheckerid,0)> 0
AND s.fbillno = '' --'20180418test'--
AND a.fusestatus = 1072 --使用状态的BOM
/*截取成品物料代码前4位编码更新物料的属性字段*/
UPDATE
a
SET
fnumber = CASE WHEN b.fnumber LIKE '04.%' THEN substring (b.fnumber,1,4) ELSE substring (b.fnumber,1,3) end
,f3 = b.fnumber
,a.ferpclsid = b.ferpclsid
FROM
#mutidata a WITH(nolock)
INNER JOIN t_icitem b WITH(nolock) ON a.fitemid = b.fitemid
/**************************************************************1级 END***************************************************************/
/**************************************************************2级 START ***************************************************************/
INSERT INTO #mutidata2 (
fitemid
,fneedqty
,frate
,fbom
,frootbomid
,forderinterid
,forderentryid
,f1
,f2
,b.fentryselfz0142
,b.fentryselfz0143
,b.fentryselfz0144
,b.fentryselfz0145
,b.fentryselfz0151
,b.fentryselfz0152
,b.fentryselfz0153
,forderdate
,funitid
,齐料日期 --,开工日期,完工日期,要求到货日期
)
SELECT
b.fitemid 'FItemID'
,0 'FNeedQty'
,0 'FRate'
,a.fbom 'FBom'
,frootbomid 'FRootBOMID'
,forderinterid 'FOrderInterID'
,forderentryid 'FOrderEntryID'
,b.fauxqty 'F1'
,a.fneedqty 'F2'
,b.fentryselfz0142
,b.fentryselfz0143
,b.fentryselfz0144
,b.fentryselfz0145
,b.fentryselfz0151
,b.fentryselfz0152
,b.fentryselfz0153
,a.forderdate 'FOrderDate'
,b.funitid 'FUnitID'
,a.齐料日期 '齐料日期'
FROM
#mutidata a
INNER JOIN icbomchild b WITH(nolock) ON a.fbominterid = b.finterid
WHERE
a.fbomlevel = 0
ORDER BY
b.fitemid,
forderentryid
--新增订单里的产品属性为外购不加控制
--**************************2020-08-04 add wfm**********************************************--
INSERT INTO #mutidata2 (
fitemid
,fneedqty
,frate
,fbom
,frootbomid
,forderinterid
,forderentryid
,f1
,f2
,b.fentryselfz0142
,b.fentryselfz0143
,b.fentryselfz0144
,b.fentryselfz0145
,b.fentryselfz0151
,b.fentryselfz0152
,b.fentryselfz0153
,forderdate
,funitid
,齐料日期 --,开工日期,完工日期,要求到货日期
)
SELECT
a.fitemid 'FItemID',
se.fqty 'FNeedQty',
0 'FRate',
0 'FBom',
0 'FRootBOMID',
se.finterid 'FOrderInterID',
se.fentryid 'FOrderEntryID',
1 'F1',
se.fqty 'F2',
0 fentryselfz0142,
0 fentryselfz0143,
0 fentryselfz0144,
0 fentryselfz0145,
0 fentryselfz0151,
0 fentryselfz0152,
0 fentryselfz0153,
s.fdate 'FOrderDate',
n.fmeasureunitid 'FUnitID',
se.fentryselfs0177 '齐料日期'
FROM
seorder s WITH(nolock)
INNER JOIN seorderentry se WITH(nolock) ON s.finterid = se.finterid
INNER JOIN t_icitem a WITH(nolock) ON a.fitemid = se.fitemid
INNER JOIN t_measureunit m WITH(nolock) ON se.funitid = m.fmeasureunitid
INNER JOIN t_measureunit n WITH(nolock) ON a.funitid = n.fmeasureunitid
WHERE
s.fcancellation = 0
AND isnull(s.fcheckerid,0)> 0
AND s.fbillno = @BillNo --''KLSO-20/0032/1-D7''--
AND a.ferpclsid = 1 --外购属性
--******************************end******************************************--
/*截取物料代码前3位(04.开头就截取4位)编码,更新物料的属性字段*/
UPDATE
a
SET
fnumber = CASE WHEN b.fnumber LIKE '04.%' THEN substring (b.fnumber,1,4) ELSE substring (b.fnumber,1,3) end,
f3 = b.fnumber,
a.ferpclsid = b.ferpclsid
FROM
#mutidata2 a INNER JOIN t_icitem b WITH(nolock) ON a.fitemid = b.fitemid
--用于成品的材料要求到货日期=成品的齐料日期-3
UPDATE #mutidata2 SET 要求到货日期=dateadd(day,-3,齐料日期) WHERE ferpclsid=1
--樽盖(03.、04.R)半成品开工日期=齐料日期-5完工日期=齐料日期-2
--UPDATE #Mutidata2 SET 开工日期=DATEADD(DAY,-5,齐料日期),完工日期=DATEADD(DAY,-2,齐料日期) WHERE FErpClsID<>1 AND FNumber IN ('03.','04.R')
--2019-10-15 汤工,之前设定的樽盖半成品现在帮忙改成开工日期=齐料日期-7完工日期齐料日期-3其他的暂不需要变更
UPDATE #mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期= dateadd(day,-3,齐料日期) WHERE ferpclsid<>1 AND fnumber IN ('03.','04.R')
--水剂(05.)半成品开工日期=齐料日期-7完工日期=齐料日期-4
UPDATE #mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期= dateadd(day,-4,齐料日期) WHERE ferpclsid<>1 AND fnumber ='05.'
/*第二层的损耗数根据第一层的成品数来判断*/
UPDATE
a
SET
frate = (
CASE WHEN f2 <= 10000
AND f2 > 5000 THEN f2 * f1 * isnull (a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0) WHEN f2 <= 5000 THEN f2 * f1 * isnull(a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0)+ isnull(a.fentryselfz0152,0) WHEN f2 >= 100000 THEN f2 * f1 * isnull(a.fentryselfz0153,0)/ 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 10000
AND f2 <= 50000 THEN isnull(a.fentryselfz0143,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 50000
AND f2 < 100000 THEN isnull(a.fentryselfz0144,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) ELSE 0 end
)
FROM
#mutidata2 a WHERE 1=1
/*第二层的需求量=第一层的数量*第二层的用量+第一层数量对应的损耗*/
--******2020-08-04 ADD FBom<>0***********************
UPDATE #mutidata2 SET fneedqty=f2*f1+frate WHERE 1=1 AND fbom<>0
/*相同成品、原材料进行汇总*/
INSERT INTO #mutidata ( fitemid,fneedqty,fbomlevel,frate,flevelstring,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
forderdate,
funitid,
ferpclsid,
fnumber,
f3,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
fitemid,
sum(fneedqty) 'FNeedQty',
1 'FBomLevel',
sum(frate) 'FRate',
'.1' 'FLevelStrIng',
max(fbom) 'FBom',
max(frootbomid) 'FRootBOMID',
max(forderinterid) 'FOrderInterID',
min(forderentryid) 'FOrderEntryID',
max(f1) 'F1',
max(f2) 'F2',
max(fentryselfz0142) 'FEntrySelfZ0142',
max(fentryselfz0143) 'FEntrySelfZ0143',
max(fentryselfz0144) 'FEntrySelfZ0144',
max(fentryselfz0145) 'FEntrySelfZ0145',
max(fentryselfz0151) 'FEntrySelfZ0151',
max(fentryselfz0152) 'FEntrySelfZ0152',
max(fentryselfz0153) 'FEntrySelfZ0153',
min(forderdate) 'FOrderDate',
funitid 'FUnitID',
ferpclsid 'FErpClsID',
max(fnumber) 'FNumber',
max(f3) 'F3',
min(齐料日期) '齐料日期',
min(开工日期) '开工日期',
min(完工日期) '完工日期',
min(要求到货日期) '要求到货日期'
FROM
#mutidata2
WHERE
(
f3 NOT LIKE '02.86%'
AND f3 NOT LIKE '02.87%'
AND f3 NOT LIKE '05.%'
)
GROUP BY
fitemid,
funitid,
ferpclsid,
fnumber
UNION ALL
SELECT
fitemid,
sum(fneedqty) 'FNeedQty',
1 'FBomLevel',
sum(frate) 'FRate',
'.1' 'FLevelStrIng',
max(fbom) 'FBom',
max(frootbomid) 'FRootBOMID',
max(forderinterid) 'FOrderInterID',
min(forderentryid) 'FOrderEntryID',
max(f1) 'F1',
max(f2) 'F2',
max(fentryselfz0142),
max(fentryselfz0143),
max(fentryselfz0144),
max(fentryselfz0145),
max(fentryselfz0151),
max(fentryselfz0152),
max(fentryselfz0153) 'FEntrySelfZ0153',
min(forderdate) 'FOrderDate',
funitid 'FUnitID',
ferpclsid 'FErpClsID',
max(fnumber) 'FNumber',
max(f3) 'F3',
min(齐料日期) '齐料日期',
min(开工日期) '开工日期',
min(完工日期) '完工日期',
min(要求到货日期) '要求到货日期'
FROM
#mutidata2
WHERE
f3 LIKE '02.86%'
OR f3 LIKE '02.87%'
OR f3 LIKE '05.%'
GROUP BY
fitemid,
funitid,
ferpclsid,
fnumber,
forderinterid,
forderentryid
/*更新半成品的即时库存数量*/
UPDATE a SET a.即时库存 = b.fqty FROM #mutidata a INNER JOIN #icinventory b ON a.fitemid=b.fitemid WHERE a.fbomlevel=1 --AND FErpClsID=2
/*更新半成品预计入库数量*/
UPDATE a SET a.[在制量(未入库) ] = b.fqty FROM #mutidata a INNER JOIN #yjrk b ON a.fitemid=b.fitemid WHERE a.fbomlevel=1 --AND FErpClsID=2
/*投料单已投未领数量*/
UPDATE a SET a.投料单需求量 = b.fqty FROM #mutidata a INNER JOIN #yjck b ON a.fitemid=b.fitemid WHERE a.fbomlevel=1 --AND FErpClsID=2
/**************************************************************2级 END***************************************************************/
/**************************************************************3级 START ***************************************************************/
DELETE FROM #mutidata2
INSERT INTO #mutidata2 ( fitemid,fneedqty,frate,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
forderdate,
funitid,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
b.fitemid,
0 'FNeedQty',
0 'FRate',
a.fbom 'FBom',
frootbomid,
forderinterid,
forderentryid,
b.fauxqty 'F1',
CASE WHEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
)> 0 THEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
) ELSE 0 end 'F2',
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
a.forderdate,
b.funitid,
齐料日期 '齐料日期',
开工日期,
完工日期,
要求到货日期
FROM
#mutidata a INNER JOIN icbom t WITH(nolock) ON a.fitemid = t.fitemid INNER
JOIN icbomchild b WITH(nolock) ON t.finterid = b.finterid
WHERE
t.fusestatus = 1072
AND a.fbomlevel = 1
--SELECT * FROM #Mutidata2 where FErpClsID<>1
/*截取物料代码前3位(04.开头就截取4位)编码,更新物料的属性字段*/
UPDATE a SET fnumber = CASE WHEN b.fnumber LIKE '04.%' THEN substring(b.fnumber,1,4) ELSE substring (b.fnumber,1,3) end,f3 = b.fnumber,a.ferpclsid = b.ferpclsid FROM #mutidata2 a INNER JOIN t_icitem b WITH(nolock) ON a.fitemid=b.fitemid WHERE 1=1
--用于半成品的材料要求到货日期=半成品的开工日期-3
UPDATE #mutidata2 SET 要求到货日期=dateadd(day,-3,开工日期) WHERE ferpclsid=1
UPDATE #mutidata2 SET 开工日期=NULL,完工日期=NULL WHERE ferpclsid=1
--樽盖(03.、04.R)半成品开工日期=齐料日期-5完工日期=齐料日期-2
--UPDATE #Mutidata2 SET 开工日期=DATEADD(DAY,-5,齐料日期),完工日期=DATEADD(DAY,-2,齐料日期) WHERE FErpClsID<>1 AND FNumber IN ('03.','04.R')
--2019-10-15 汤工,之前设定的樽盖半成品现在帮忙改成开工日期=齐料日期-7完工日期齐料日期-3其他的暂不需要变更
UPDATE #mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期=dateadd(day,-3,齐料日期) WHERE ferpclsid<>1 AND fnumber IN ('03.','04.R')
--水剂(05.)半成品开工日期=齐料日期-7完工日期=齐料日期-4
UPDATE #mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期=dateadd(day,-4,齐料日期) WHERE ferpclsid<>1 AND fnumber ='05.'
UPDATE #mutidata2 SET 要求到货日期=NULL WHERE ferpclsid<>1
--SELECT * FROM #Mutidata2
/*第三层的损耗数根据第二层的成品数来判断*/
UPDATE
a
SET
frate = (
CASE WHEN f2 <= 10000
AND f2 > 5000 THEN f2 * f1 * isnull (a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0) WHEN f2 <= 5000 THEN f2 * f1 * isnull(a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0)+ isnull(a.fentryselfz0152,0) WHEN f2 >= 100000 THEN f2 * f1 * isnull(a.fentryselfz0153,0)/ 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 10000
AND f2 <= 50000 THEN isnull(a.fentryselfz0143,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 50000
AND f2 < 100000 THEN isnull(a.fentryselfz0144,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0) +(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) ELSE 0 end
)
FROM
#mutidata2 a WHERE 1=1
/*第三层的需求量=第二层的数量*第三层的用量+第二层数量对应的损耗*/
UPDATE a SET fneedqty = f2 * f1 + frate FROM #mutidata2 a WHERE 1=1
/*相同成品、原材料进行汇总*/
INSERT INTO #mutidata ( fitemid,fneedqty,fbomlevel,frate,flevelstring,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
forderdate,
funitid,
ferpclsid,
fnumber,
f3,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
fitemid 'FItemID',
sum(fneedqty) 'FNeedQty',
2 'FBomLevel',
sum(frate) 'FRate',
'.2' 'FLevelStrIng',
max(fbom) 'FBom',
max(frootbomid) 'FRootBOMID',
max(forderinterid) 'FOrderInterID',
min(forderentryid) 'FOrderEntryID',
max(f1) 'F1',
max(f2) 'F2',
max(fentryselfz0142),
max(fentryselfz0143),
max(fentryselfz0144),
max(fentryselfz0145),
max(fentryselfz0151),
max(fentryselfz0152),
max(fentryselfz0153) 'FEntrySelfZ0153',
min(forderdate),
funitid 'FUnitID',
ferpclsid 'FErpClsID',
fnumber 'FNumber',
max(f3) 'F3',
min(齐料日期),
min(开工日期) 开工日期,
min(完工日期) 完工日期,
min(要求到货日期) 要求到货日期
FROM
#mutidata2 WHERE f3 NOT LIKE '02.86%' AND f3 NOT LIKE '02.87%' AND f3 NOT LIKE
'05.%'
GROUP BY
fitemid,
funitid,
ferpclsid,
fnumber
UNION ALL
SELECT
fitemid,
sum(fneedqty) fneedqty,
2 'FBomLevel',
sum(frate) frate,
'.2' flevelstring,
max(fbom) fbom,
max(frootbomid) frootbomid,
max(forderinterid) forderinterid,
min(forderentryid) forderentryid,
max(f1) f1,
max(f2) f2,
max(fentryselfz0142),
max(fentryselfz0143),
max(fentryselfz0144),
max(fentryselfz0145),
max(fentryselfz0151),
max(fentryselfz0152),
max(fentryselfz0153) 'FEntrySelfZ0153',
min(forderdate),
max(funitid),
max(ferpclsid),
max(fnumber),
max(f3),
min(齐料日期),
min(开工日期) 开工日期,
min(完工日期) 完工日期,
min(要求到货日期) 要求到货日期
FROM
#mutidata2 WHERE f3 LIKE
'02.86%'
OR f3 LIKE '02.87%'
OR f3 LIKE '05.%'
GROUP BY
fitemid,
ferpclsid,
forderinterid,
forderentryid
/*更新半成品的即时库存数量*/
UPDATE a SET a.即时库存 = b.fqty FROM #mutidata a INNER JOIN #icinventory b ON a.fitemid=b.fitemid WHERE a.fbomlevel=2 --AND FErpClsID=2
/*更新半成品预计入库数量*/
UPDATE a SET a.[在制量(未入库) ] = b.fqty FROM #mutidata a INNER JOIN #yjrk b ON a.fitemid=b.fitemid WHERE a.fbomlevel=2 --AND FErpClsID=2
/*投料单已投未领数量*/
UPDATE a SET a.投料单需求量 = b.fqty FROM #mutidata a INNER JOIN #yjck b ON a.fitemid=b.fitemid WHERE a.fbomlevel=2 --AND FErpClsID=2
/**************************************************************3级 END***************************************************************/
/**************************************************************4级 START ***************************************************************/
DELETE FROM #mutidata2
INSERT INTO #mutidata2 ( fitemid,fneedqty,frate,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
fentryselfz0153,
forderdate,
funitid,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
b.fitemid,
0 fneedqty,
0 frate,
a.fbom fbom,
frootbomid,
forderinterid,
forderentryid,
b.fauxqty f1,
CASE WHEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
)> 0 THEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
) ELSE 0 end f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
a.forderdate,
b.funitid,
齐料日期 '齐料日期',
开工日期,
完工日期,
要求到货日期
FROM
#mutidata a INNER JOIN icbom t WITH(nolock) ON a.fitemid = t.fitemid INNER
JOIN icbomchild b WITH(nolock) ON t.finterid = b.finterid
WHERE
t.fusestatus = 1072
AND a.fbomlevel = 2
/*截取物料代码前3位(04.开头就截取4位)编码,更新物料的属性字段*/
UPDATE
a
SET
fnumber = CASE WHEN b.fnumber LIKE '04.%' THEN substring(b.fnumber,1,4) ELSE substring(b.fnumber,1,3) end,
f3 = b.fnumber,
a.ferpclsid = b.ferpclsid
FROM
#mutidata2 a INNER JOIN t_icitem b WITH(nolock) ON a.fitemid=b.fitemid
--用于半成品的材料要求到货日期=半成品的开工日期-3
UPDATE
#mutidata2 SET 要求到货日期=dateadd(day,-3,开工日期) WHERE
ferpclsid = 1
UPDATE
#mutidata2 SET 开工日期=NULL,完工日期=NULL WHERE
ferpclsid = 1
--樽盖(03.、04.R)半成品开工日期=齐料日期-5完工日期=齐料日期-2
--UPDATE #Mutidata2 SET 开工日期=DATEADD(DAY,-5,齐料日期),完工日期=DATEADD(DAY,-2,齐料日期) WHERE FErpClsID<>1 AND FNumber IN ('03.','04.R')
--2019-10-15 汤工,之前设定的樽盖半成品现在帮忙改成开工日期=齐料日期-7完工日期齐料日期-3其他的暂不需要变更
UPDATE
#mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期=
dateadd(day,-3,齐料日期)
WHERE
ferpclsid <> 1
AND fnumber IN ('03.','04.R')
--水剂(05.)半成品开工日期=齐料日期-7完工日期=齐料日期-4
UPDATE
#mutidata2 SET 开工日期=dateadd(day,-7,齐料日期),完工日期=
dateadd(day,-4,齐料日期)
WHERE
ferpclsid <> 1
AND fnumber = '05.'
UPDATE
#mutidata2 SET 要求到货日期=NULL WHERE ferpclsid<>1
/*第四层的损耗数根据第三层的成品数来判断*/
UPDATE
a
SET
frate = (
CASE WHEN f2 <= 10000
AND f2 > 5000 THEN f2 * f1 * isnull (a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0) WHEN f2 <= 5000 THEN f2 * f1 * isnull(a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0)+ isnull(a.fentryselfz0152,0) WHEN f2 >= 100000 THEN f2 * f1 * isnull(a.fentryselfz0153,0)/ 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 10000
AND f2 <= 50000 THEN isnull(a.fentryselfz0143,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 50000
AND f2 < 100000 THEN isnull(a.fentryselfz0144,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0) +(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) ELSE 0 end
)
FROM
#mutidata2 a
--WHERE a.FBomLevel=3
/*相同成品、原材料进行汇总*/
INSERT INTO #mutidata ( fitemid,fneedqty,fbomlevel,frate,flevelstring,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
forderdate,
funitid,
ferpclsid,
fnumber,
f3,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
fitemid,
sum(fneedqty) fneedqty,
3 'FBomLevel',
sum(frate) frate,
'.3' flevelstring,
max(fbom) fbom,
max(frootbomid) frootbomid,
max(forderinterid) forderinterid,
min(forderentryid) forderentryid,
max(f1) f1,
max(f2) f2,
max(fentryselfz0142),
max(fentryselfz0143),
max(fentryselfz0144),
max(fentryselfz0145),
max(fentryselfz0151),
max(fentryselfz0152),
max(fentryselfz0153),
min(forderdate),
max(funitid),
max(ferpclsid),
max(fnumber),
max(f3),
min(齐料日期),
min(开工日期) 开工日期,
min(完工日期) 完工日期,
min(要求到货日期) 要求到货日期
FROM
#mutidata2 WHERE f3 NOT LIKE '02.86%' AND f3 NOT LIKE
'02.87%'
AND f3 NOT LIKE '05.%'
GROUP BY
fitemid,
ferpclsid
UNION ALL
SELECT
fitemid,
sum(fneedqty) fneedqty,
3 'FBomLevel',
sum(frate) frate,
'.3' flevelstring,
max(fbom) fbom,
max(frootbomid) frootbomid,
max(forderinterid) forderinterid,
min(forderentryid) forderentryid,
max(f1) f1,
max(f2) f2,
max(fentryselfz0142),
max(fentryselfz0143),
max(fentryselfz0144),
max(fentryselfz0145),
max(fentryselfz0151),
max(fentryselfz0152),
max(fentryselfz0153),
min(forderdate),
max(funitid),
max(ferpclsid),
max(fnumber),
max(f3),
min(齐料日期),
min(开工日期) 开工日期,
min(完工日期) 完工日期,
min(要求到货日期) 要求到货日期
FROM
#mutidata2 WHERE
f3 LIKE '02.86%'
OR f3 LIKE '02.87%'
OR f3 LIKE '05.%'
GROUP BY
fitemid,
ferpclsid,
forderinterid,
forderentryid
/*第四层的需求量=第三层的数量*第四层的用量+第三层数量对应的损耗*/
UPDATE a SET fneedqty = f2 * f1 + frate FROM #mutidata a WHERE fbomlevel=3
/*更新半成品的即时库存数量*/
UPDATE
a
SET
a.即时库存 = b.fqty
FROM
#mutidata a INNER JOIN #icinventory b
ON a.fitemid = b.fitemid
WHERE
a.fbomlevel = 3
--AND FErpClsID=2
/*更新半成品预计入库数量*/
UPDATE
a
SET
a.[在制量(未入库) ] = b.fqty
FROM
#mutidata a INNER JOIN
#yjrk b ON a.fitemid=b.fitemid WHERE a.fbomlevel=3
--AND FErpClsID=2
/*投料单已投未领数量*/
UPDATE
a
SET
a.投料单需求量 = b.fqty
FROM
#mutidata a INNER JOIN #yjck b
ON a.fitemid = b.fitemid
WHERE
a.fbomlevel = 3
--AND FErpClsID=2
/**************************************************************4级 END***************************************************************/
/**************************************************************5级 START ***************************************************************/
INSERT INTO #mutidata ( fitemid,fneedqty,fbomlevel,frate,flevelstring,fbom,
frootbomid,
forderinterid,
forderentryid,
f1,
f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
forderdate,
funitid,
齐料日期,
开工日期,
完工日期,
要求到货日期
)
SELECT
b.fitemid,
0 fneedqty,
4 'FBomLevel',
0 frate,
'..4' flevelstring,
a.fbom fbom,
frootbomid,
forderinterid,
forderentryid,
b.fauxqty f1,
CASE WHEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
)> 0 THEN isnull(a.fneedqty,0) + isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
) ELSE 0 end f2,
b.fentryselfz0142,
b.fentryselfz0143,
b.fentryselfz0144,
b.fentryselfz0145,
b.fentryselfz0151,
b.fentryselfz0152,
b.fentryselfz0153,
a.forderdate,
b.funitid,
齐料日期,
开工日期,
完工日期,
要求到货日期
FROM
#mutidata a
INNER JOIN icbom t WITH(nolock) ON a.fitemid = t.fitemid
INNER JOIN icbomchild b WITH(nolock) ON t.finterid = b.finterid
WHERE
t.fusestatus = 1072
AND a.fbomlevel = 3
/*截取物料代码前3位编码更新物料的属性字段*/
UPDATE
a
SET
fnumber = CASE WHEN b.fnumber LIKE '04.%' THEN substring(b.fnumber,1,4) ELSE substring(b.fnumber,1,3) end,
f3 = b.fnumber,
a.ferpclsid = b.ferpclsid
FROM
#mutidata a INNER JOIN t_icitem b WITH(nolock) ON a.fitemid=b.fitemid
WHERE
a.fbomlevel = 4
/*第四层的损耗数根据第三层的成品数来判断*/
UPDATE
a
SET
frate = (
CASE WHEN f2 <= 10000
AND f2 > 5000 THEN f2 * f1 * isnull (a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0) WHEN f2 <= 5000 THEN f2 * f1 * isnull(a.fentryselfz0142,0)/ 100.00 + isnull(a.fentryselfz0145,0)+ isnull(a.fentryselfz0151,0)+ isnull(a.fentryselfz0152,0) WHEN f2 >= 100000 THEN f2 * f1 * isnull(a.fentryselfz0153,0)/ 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 10000
AND f2 <= 50000 THEN isnull(a.fentryselfz0143,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0)+(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) WHEN f2 > 50000
AND f2 < 100000 THEN isnull(a.fentryselfz0144,0)* f2 * f1 / 100.00 + isnull(a.fentryselfz0151,0) +(
CASE WHEN a.fnumber = '05.' THEN isnull(a.fentryselfz0145,0) ELSE 0 end
) ELSE 0 end
)
FROM
#mutidata a WHERE a.fbomlevel=4
/*第四层的需求量=第三层的数量*第四层的用量+第三层数量对应的损耗*/
UPDATE a SET fneedqty = f2 * f1 + frate FROM #mutidata a WHERE fbomlevel=4
/*更新半成品的即时库存数量*/
UPDATE
a
SET
a.即时库存 = b.fqty
FROM
#mutidata a INNER JOIN #icinventory b
ON a.fitemid = b.fitemid
WHERE
a.fbomlevel = 4
--AND FErpClsID=2
/*更新半成品预计入库数量*/
UPDATE
a
SET
a.[在制量(未入库) ] = b.fqty
FROM
#mutidata a INNER JOIN
#yjrk b ON a.fitemid=b.fitemid WHERE a.fbomlevel=4
--AND FErpClsID=2
/*投料单已投未领数量*/
UPDATE
a
SET
a.投料单需求量 = b.fqty
FROM
#mutidata a INNER JOIN #yjck b
ON a.fitemid = b.fitemid
WHERE
a.fbomlevel = 3
--AND FErpClsID=2
/**************************************************************5级 END***************************************************************/
UPDATE
a
SET
a.已评审未出货的销售订单 = b.fqty
FROM
#mutidata a INNER
JOIN #seorder b ON a.fitemid=b.fitemid WHERE 1=1
CREATE TABLE [dbo].[ #MrpEntry1]( [FIndex] [INT] identity(1,1),[FID] [INT] NOT NULL,[FQty11] [DECIMAL](23,10) DEFAULT (0),
--订单数量
[FDate2] [DATETIME] NULL,
[FDate3] [DATETIME] NULL,
[FitemID1] [INT],
--成品ID
[FitemID2] [INT],
--材料长代码
[FNumber3] nvarchar(50),
[FItemID3] [INT],
--材料短代码
[FUnitID] [INT],
[FQty1] [DECIMAL](23,10) DEFAULT (0),
--毛需求
[FQty2] [DECIMAL](23,10) DEFAULT (0),
--即时库存
[FQty3] [DECIMAL](23,10) DEFAULT (0),
--采购申请单数量
[FQty4] [DECIMAL](23,10) DEFAULT (0),
--采购订单数量
[FQty5] [DECIMAL](23,10) DEFAULT (0),
--请检单数量
[FQty6] [DECIMAL](23,10) DEFAULT (0),
--在途数量
[FQty7] [DECIMAL](23,10) DEFAULT (0),
--可用数量
[FQty8] [DECIMAL](23,10) DEFAULT (0),
--欠料数量
[FQty9] [DECIMAL](23,10) DEFAULT (0),
--已评审未转单数量
[FQty10] [DECIMAL](23,10) DEFAULT (0),
--需申购数量
[FQty12] [DECIMAL](23,10) DEFAULT (0),
--已分配量
[FOrderInterID] INT,
[FOrderEntryID] INT,
[FNumber2] nvarchar(50),
[FOrderDate] datetime
) CREATE TABLE [dbo].[ #MrpEntry2]( [FID] [INT] NOT NULL,[FIndex]
[INT] identity(1,1),
[FItemID] [INT],
[FUnitID] [INT],
[FQty] [DECIMAL](23,10) DEFAULT (0),
--需求数量
[FDate] datetime,
--生产开工日期
[FDate1] datetime,
--生产完工日期
[FCustOrderNo] VARCHAR(20),
--客户订单号
[FOrderInterID] INT,
[FOrderEntryID] INT
)
/*新增表头内容*/
INSERT INTO [dbo].[Mrp](
[FID],[FClassTypeID],[FBillNo],
[FText4],fuser,ftime2
)
SELECT
@FID,
200000002,
@BillNo,
@BillNo,
@UserID,
getdate()
/*****************START 自制属性物料*************************/
INSERT INTO [dbo].[MrpEntry2] (
[FID],
[FIndex],
[FBase],
[FBase1],
finteger2,
finteger3,
fdate4,
fdate5,
ftext8,
ftext9,
fdecimal --即时库存
,
fdecimal1 --在制量(未入库)
,
fdecimal2 --已评审未出货的销售订单
,
fdecimal3 --投料单需求量
)
SELECT
a.forderinterid,
row_number() over(
ORDER BY
forderinterid,
forderentryid,
fbomlevel
) AS findex,
a.fitemid,
a.funitid,
forderinterid,
forderentryid,
a.开工日期,
a.完工日期,
a.fneedqty,
CONVERT(
DECIMAL(18,4),
(
CASE WHEN isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
)< 0 THEN 0 ELSE isnull(a.fneedqty,0)+ isnull(a.投料单需求量,0)- isnull(a.即时库存,0)- isnull(
a.[在制量(未入库) ],
0
) end
)
),
a.即时库存 --即时库存数量
,
a.[在制量(未入库) ],
a.已评审未出货的销售订单,
a.投料单需求量
FROM
#mutidata a WHERE a.ferpclsid IN(2,3) ORDER BY a.forderinterid,
forderentryid,
fbomlevel
/**************************************************END 自制属性物料**************************************************/
/**************************************************START 外购属性物料,不包含纸箱和化工原料**************************************************/
INSERT INTO #mrpentry1(fid,fitemid1,fqty11,fitemid2,fitemid3,fnumber3,
funitid,
fqty1,
fdate2,
fdate3,
forderinterid,
forderentryid,
[FNumber2],
fqty2
)
SELECT
a.forderinterid fid,
(
CASE WHEN a.fbom <> 0 THEN a.fbom ELSE a.fitemid end
) fitemid1,
a.fneedqty,
a.fitemid fitemid2,
a.fitemid fitemid3,
b.fnumber,
b.funitid,
a.fneedqty * e.fcoefficient fqty1,
a.要求到货日期,
--dateadd(day,-3,C.FOrderDate),--(CASE WHEN b.fnumber like '02.86.%' THEN dateadd(day,-20,C.FOrderDate) WHEN b.fnumber like '02.87.%' THEN dateadd(day,-20,C.FOrderDate) WHEN b.fnumber like '02.71.%' THEN dateadd(day,-25,C.FOrderDate) ELSE C.FOrderDate END) FDate2,--物料需求日期=确认发货日期-15
a.要求到货日期,
--dateadd(day,-3,C.FOrderDate),--(CASE WHEN b.fnumber like '02.86.%' THEN dateadd(day,-20,C.FOrderDate) WHEN b.fnumber like '02.87.%' THEN dateadd(day,-20,C.FOrderDate) WHEN b.fnumber like '02.71.%' THEN dateadd(day,-25,C.FOrderDate) ELSE C.FOrderDate END) FDate3,--材料到货日期
a.forderinterid,
a.forderentryid,
substring(b.fnumber,1,5) fnumber2,
a.即时库存
FROM
(
SELECT
t.forderinterid,
t.fitemid,
sum(t.fneedqty) fneedqty,
min(t.forderentryid) forderentryid,
funitid,
avg(t.即时库存) 即时库存,
ferpclsid,
min(要求到货日期) '要求到货日期',
max(fbom) 'FBom'
FROM
#mutidata t
WHERE
1 = 1
AND (
t.f3 NOT LIKE '02.86%'
AND t.f3 NOT LIKE '02.87%'
)
GROUP BY
t.forderinterid,
t.fitemid,
funitid,
ferpclsid,
fbom
) a
LEFT JOIN t_icitem b ON a.fitemid = b.fitemid --LEFT JOIN #Mutidata c ON c.FOrderInterID=a.FOrderInterID AND c.FOrderEntryID=a.FOrderEntryID AND a.FItemID=c.FItemID --AND c.FLevelStrIng='0'
LEFT JOIN t_measureunit e ON e.fmeasureunitid = a.funitid
WHERE
1 = 1
AND b.ferpclsid = 1
ORDER BY
a.fitemid
--------------------------------------------------------02.86、02.86不合并------------------------------------------------------------------
INSERT INTO #mrpentry1(fid,fitemid1,fqty11,fitemid2,fitemid3,fnumber3,
funitid,
fqty1,
fdate2,
fdate3,
forderinterid,
forderentryid,
[FNumber2],
fqty2
)
SELECT
a.forderinterid fid,
a.fbom fitemid1,
a.fneedqty,
a.fitemid fitemid2,
a.fitemid fitemid3,
b.fnumber,
b.funitid,
a.fneedqty * e.fcoefficient fqty1,
a.要求到货日期,
--dateadd(day,-20,C.FOrderDate) FDate2,--物料需求日期=确认发货日期-15
a.要求到货日期,
--dateadd(day,-20,C.FOrderDate) FDate3,--材料到货日期
a.forderinterid,
a.forderentryid,
substring(b.fnumber,1,5) fnumber2,
a.即时库存
FROM
#mutidata a LEFT JOIN t_icitem b ON a.fitemid = b.fitemid LEFT JOIN
t_measureunit e ON e.fmeasureunitid = a.funitid
WHERE
1 = 1
AND b.ferpclsid = 1
AND (
a.f3 LIKE '02.86%'
OR a.f3 LIKE '02.87%'
)
ORDER BY
a.fitemid
/*采购申请单数量*/
SELECT
v1.fitemid,
isnull(
sum(v1.fqty),
0
)- isnull(
sum(v2.fqty),
0
) fqty INTO #porequest FROM porequest v LEFT JOIN porequestentry v1 ON v.finterid =
v1.finterid
LEFT JOIN poorderentry v2 ON v2.fsourceinterid = v1.finterid
AND v2.fsourceentryid = v1.fentryid
WHERE
v.fcancellation = 0
AND v.fstatus < 3
AND v1.fmrpclosed = 0
GROUP BY
v1.fitemid
UPDATE a SET fqty3 = b.fqty FROM #mrpentry1 a LEFT JOIN #porequest b ON a.fitemid2=b.fitemid
/*采购订单数量*/
SELECT
fitemid,
sum(fqty - fauxreceiptqty) fqty INTO #poorder FROM poorder v
LEFT JOIN poorderentry v1 ON v.finterid = v1.finterid
WHERE
v.fcancellation = 0
AND v.fstatus < 3
GROUP BY
fitemid
HAVING
sum(fqty - fauxreceiptqty) > 0
UPDATE
a
SET
fqty4 = b.fqty
FROM
#mrpentry1 a LEFT JOIN #poorder b ON
a.fitemid2 = b.fitemid
/*收料通知/请检单*/
SELECT
fitemid,
sum(
(fqty - fauxconcommitqty)
) fqty INTO #poinstock FROM
poinstock v
LEFT JOIN poinstockentry v1 ON v.finterid = v1.finterid
WHERE
v.fcancellation = 0
AND v.fstatus < 3
AND v.ftrantype = 72
GROUP BY
fitemid
HAVING
sum(fqty - fauxconcommitqty) > 0
UPDATE
a
SET
fqty5 = b.fqty,
fqty6 = isnull(fqty3,0)+ isnull(fqty4,0)+ isnull(b.fqty,0)
FROM
#mrpentry1 a LEFT JOIN #poinstock b ON
a.fitemid2 = b.fitemid
/*在途数量*/
--UPDATE a SET FQty6=ISNULL(FQty3,0)+ISNULL(FQty4,0)+ISNULL(FQty5,0) FROM #MrpEntry1 a
/*已分配量,未结案生产任务单未领数*/
UPDATE
a
SET
fqty12 = isnull(b.fqty,0)
FROM
#mrpentry1 a LEFT JOIN #yjck b ON
a.fitemid2 = b.fitemid
UPDATE
a
SET
a.fnumber3 = 'P'
FROM
#mrpentry1 a WHERE a.findex IN (
SELECT
min(findex)
FROM
#mrpentry1 GROUP BY fitemid2) UPDATE t SET t.fqty8 =
t2.累计用量
FROM
#mrpentry1 t LEFT JOIN ( SELECT ( SELECT sum( isnull(fqty1,0) + isnull(
CASE WHEN fnumber3 = 'P' THEN fqty12 ELSE 0 end,
0
)
)
FROM
#mrpentry1 t1 WHERE
t1.fitemid2 = t.fitemid2
AND t1.findex <= t.findex
) 累计用量,
t.fitemid2,
t.findex
FROM
#mrpentry1 t ) t2 ON t.fitemid2 = t2.fitemid2 AND t.findex = t2.findex
UPDATE
t
SET
t.fqty8 = isnull(fqty2,0)+ isnull(fqty6,0)- isnull(fqty8,0),
t.fqty10 = CASE WHEN isnull(fqty2,0)+ isnull(fqty6,0)- isnull(fqty8,0) < 0 THEN -(
isnull(fqty2,0)+ isnull(fqty6,0)- isnull(fqty8,0)
) ELSE 0 end,
t.fqty7 = isnull(fqty1,0)+ isnull(fqty2,0)+ isnull(fqty6,0)- isnull(fqty8,0)+ isnull(
CASE WHEN fnumber3 = 'P' THEN fqty12 ELSE 0 end,
0
)
FROM
#mrpentry1 t
INSERT INTO [dbo].[MrpEntry1] (
[FID],
[FIndex],
[FDate2],
[FDate3],
ftext49,
ftext50,
ftext51,
[FitemID2],
[FUnitID],
finteger4,
finteger5,
ftext10 --订单数量
,
ftext11 --毛需求T
,
ftext12 --即时库存T
,
ftext13 --采购申请单数量T
,
ftext14 --采购订单数量T
,
ftext15 --请检单数量T
,
ftext16 --在途数量T
,
ftext17 --已分配量T
,
ftext18 --可用数量T
,
ftext19 --欠料数量T
--,ftext20--已评审未转单数量T
,
ftext21 --需申购数量
)
SELECT
forderinterid,
row_number() over(
ORDER BY
findex
) findex,
fdate2,
fdate3,
c.fnumber,
c.fname,
c.fmodel,
fitemid2,
a.funitid,
forderinterid,
forderentryid,
CONVERT(
DECIMAL(18,4),
isnull(fqty11,0)
) --订单数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty1,0)
) --毛需求
,
CONVERT(
DECIMAL(18,4),
isnull(fqty2,0)
) --即时库存
,
CONVERT(
DECIMAL(18,4),
isnull(fqty3,0)
) --采购申请单数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty4,0)
) --采购订单数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty5,0)
) --请检单数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty6,0)
) --在途数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty12,0)
) --已分配量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty7,0)
) --可用数量
,
CONVERT(
DECIMAL(18,4),
isnull(fqty8,0)
) --欠料数量
--,CONVERT(DECIMAL(18,4),ISNULL(FQty9,0))--已评审未转单数量
,
CASE WHEN isnull(a.fqty8,0) < 0 THEN CONVERT(
DECIMAL(18,4),
- isnull(a.fqty8,0)
) ELSE 0 end -- 需申购数量
FROM
#mrpentry1 a INNER JOIN t_icitem b ON a.fitemid2 = b.fitemid INNER JOIN
t_icitem c ON a.fitemid1 = c.fitemid
WHERE
a.fnumber2 NOT IN (
'02.86','02.87','01.A.','01.B.',
'01.C.','01.D.','01.E.','01.H.'
)
/**************************************************END 外购属性物料**************************************************/
/**************************************************START 纸箱物料**************************************************/
INSERT INTO [dbo].[MrpEntry3] ( [FID],[FIndex],[FBase5] --成品代码
,[FText23] --订单数量
,[FBase6] --纸箱短代码
,[FText24] --毛需求
,[FText25] --即时库存
,[FText26] --采购申请数量
,[FText27] --采购订单数量
,[FText28] --请检单数量
,[FText29] --在途数
,[FText30] --已分配量
,[FText31] --欠料数量
,[FText32] --可用量
,[FText33] --需采购数量
,[FDate6] --纸箱需求日期
,[FDate7] --建议到货日期
,[FCheckBox4] --确认转单
,[FCheckBox5] --转单标识
,[FText34] --采购申请单编号
,[FText35] --备注
,[FINteger6] --订单内码
,[FINteger7] --订单行号
,[FDate8] --转单日期
,[FUser3] ) --转单人
SELECT forderinterid,row_number() over( ORDER BY findex ) findex,fitemid1,
isnull(fqty11,0),fitemid2,CONVERT( DECIMAL(18,4),isnull([FQty1],0) )
--毛需求
,CONVERT( DECIMAL(18,4),isnull([FQty2],0) ) --即时库存
,CONVERT( DECIMAL(18,4),isnull([FQty3],0) ) --采购申请单数量
,CONVERT( DECIMAL(18,4),isnull([FQty4],0) ) --采购订单数量
,CONVERT( DECIMAL(18,4),isnull([FQty5],0) ) --请检单数量
,CONVERT( DECIMAL(18,4),isnull([FQty6],0) ) --在途数量
,CONVERT( DECIMAL(18,4),isnull([FQty12],0) ) --已分配量
,CONVERT( DECIMAL(18,4),isnull([FQty8],0) ) --欠料数量
,CONVERT( DECIMAL(18,4),isnull([FQty7],0) ) --可用数量
,CONVERT( DECIMAL(18,4),isnull([FQty10],0) ) --需申购数量
,fdate2,fdate3,0,0,'','',forderinterid,forderentryid,getdate(),0 FROM
#mrpentry1 a WHERE 1 = 1 AND ( fnumber2 LIKE '02.86%' OR fnumber2 LIKE '02.87%'
)
/**************************************************END 纸箱物料**************************************************/
/**************************************************START 化工原料**************************************************/
INSERT INTO [dbo].[MrpEntry4] ( [FID],[FIndex],[FBase7],[FText36],[FBase8],
[FText37] --毛需求
,[FText38] --即时库存
,[FText39] --采购申请单数量
,[FText40] --采购订单数量
,[FText41] --请检单数量
,[FText42] --在途数量
,[FText43] --已分配量
,[FText44] --欠料数量
,[FText45] --可用数量
,[FText46] --需申购数量
,[FDate9],[FDate10],[FCheckBox6],[FCheckBox7],[FText47],[FText48],
[FINteger8],[FINteger9],[FDate11],[FUser4] ) SELECT forderinterid,row_number
() over(ORDER BY findex) findex,fitemid1,isnull(fqty11,0),fitemid2,CONVERT(
DECIMAL(18,4),isnull([FQty1],0) ) --毛需求
,CONVERT( DECIMAL(18,4),isnull([FQty2],0) ) --即时库存
,CONVERT( DECIMAL(18,4),isnull([FQty3],0) ) --采购申请单数量
,CONVERT( DECIMAL(18,4),isnull([FQty4],0) ) --采购订单数量
,CONVERT( DECIMAL(18,4),isnull([FQty5],0) ) --请检单数量
,CONVERT( DECIMAL(18,4),isnull([FQty6],0) ) --在途数量
,CONVERT( DECIMAL(18,4),isnull([FQty12],0) ) --已分配量
,CONVERT( DECIMAL(18,4),isnull([FQty8],0) ) --欠料数量
,CONVERT( DECIMAL(18,4),isnull([FQty7],0) ) --可用数量
,CONVERT( DECIMAL(18,4),isnull([FQty10],0) ) --需申购数量
,fdate2 --GETDATE(),
,fdate3 --GETDATE()
,0,0,'','',forderinterid,forderentryid,getdate(),0 FROM #mrpentry1 a
WHERE 1 = 1 AND a.fnumber2 IN ( '01.A.','01.B.','01.C.','01.D.','01.E.',
'01.H.' )
/**************************************************END 化工原料**************************************************/
UPDATE seorder SET fheadselfs0153 = 'Y' WHERE finterid = @FID
--FHeadSelfS0153 评审标志
SELECT @FID,@BillNo DROP TABLE #mrpentry1 DROP TABLE #mrpentry2 DROP TABLE
#mutidata DROP TABLE #mutidata2 DROP TABLE #icinventory DROP TABLE #yjck DROP
TABLE #yjrk DROP TABLE #seorder DROP TABLE #poinstock DROP TABLE #porequest DROP
TABLE #poorder end