IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_ProductionSchedule') DROP PROCEDURE dbo.PROC_ProductionSchedule; GO CREATE PROCEDURE PROC_ProductionSchedule @TableName varchar(100) ,@STARTDATE date ,@ENDDATE date ,@LCID int ,@SeqFld varchar(200) AS begin SELECT A.FID ,A.FBILLNO ,AE.FMATERIALID ,AE.FENTRYID ,C.FNUMBER ,C_L.FNAME ,C_L.FSPECIFICATION --,(CASE -- CS.FEXPUNIT -- WHEN 'Y' THEN -- CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) ) + '年' -- WHEN 'M' THEN -- CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) /12 ) + '年' -- WHEN 'D' THEN -- CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) /365) + '年' ELSE '' --END) AS '有效期' ,(CASE CS.FEXPUNIT WHEN 'Y' THEN CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) * 12 ) + '个月' WHEN 'M' THEN CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) ) + '个月' WHEN 'D' THEN CONVERT ( VARCHAR, CAST(CS.FEXPPERIOD AS INT) / 365 * 12) + '个月' ELSE '' END) AS 'ShelfLife' --,'' AS '标准批量' ,CS.FSAFESTOCK --安全库存 --,CS.FSTOREUNITID --库存单位 --,CP.FLOTYIELD -- '每批产量' --,CP.FPACKUNITCONVERRATIO -- '包装规格' --,CP.FPACKUNITCONVERRATIO -- '包装规格-换算' --,CP.FPACKUNITID -- '单位' --,AE.M01 --,AE.S01 --,AE.S02 --,AE.S03 ,'' AS 'M01' ,'' AS 'S01' ,'' AS 'S02' ,'' AS 'S03' ,B.FFirmQty ,B.FOrderQty ,B.FMATERIALID FROM ( SELECT A.FMATERIALID ,A_B.FSALEORDERENTRYID ,SUM(A.FFirmQty) as 'FFirmQty' ,SUM(A.FORDERQTY) as 'FOrderQty' FROM T_PLN_PLANORDER A LEFT JOIN T_PLN_PLANORDER_B A_B ON A.FID = A_B.FID WHERE A.FRELEASETYPE = 1 --AND (A.FRELEASESTATUS = 1 OR A.FRELEASESTATUS = 2 ) group By A.FRELEASETYPE ,A.FMATERIALID ,A_B.FSALEORDERENTRYID ) B --预测单 LEFT JOIN T_PLN_FORECASTENTRY AE ON B.FSALEORDERENTRYID = AE.FENTRYID LEFT JOIN T_PLN_FORECAST A ON A.FID = AE.FID LEFT JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID LEFT JOIN T_BD_MATERIAL_L C_L ON C_L.FMATERIALID = B.FMATERIALID LEFT JOIN T_BD_MATERIALSTOCK CS ON CS.FMATERIALID = B.FMATERIALID LEFT JOIN T_BD_MATERIALPRODUCE CP ON CP.FMATERIALID = B.FMATERIALID WHERE --A.FDATE BETWEEN '2023-12-01 00:00:00' AND '2023-12-31 23:59:59' A.FDATE BETWEEN @STARTDATE AND @ENDDATE --更新单位 alter table #TMPMPS add STOREUNITNAME varchar(10) update #TMPMPS set #TMPMPS.STOREUNITNAME = B_L.FNAME from T_BD_UNIT_L B_L where B_L.FUNITID = #TMPMPS.FSTOREUNITID --alter table #TMPMPS add FPACKUNITNAME varchar(10) --update #TMPMPS set #TMPMPS.FPACKUNITNAME = B_L.FNAME from T_BD_UNIT_L B_L where B_L.FUNITID = #TMPMPS.FPACKUNITID declare @sql varchar(2000) set @sql = ' select FID ,FENTRYID ,FBILLNO ,FMATERIALID ,FNAME ,FSPECIFICATION ,ShelfLife --,'''' --标准批量 --,FLOTYIELD --每批产量 --,FPACKUNITCONVERRATIO -- 包装规格 --,CAST(FPACKUNITCONVERRATIO AS VARCHAR)+STOREUNITNAME+''/''+FPACKUNITNAME as FPACKUNITCONVT --包装规格 --,FPACKUNITID --单位 ,FSTOREUNITID ,STOREUNITNAME ,'''' AS --安全库存量-件 ,CAST(FSAFESTOCK AS INT) AS SAFESTOCK ,FSEQ ,0 AS M01 ,0 AS S01 ,0 AS S02 ,0 AS S03 --,(B.PlanQty / CP.FPACKUNITCONVERRATIO)AS ''系统计划生产批数'' --,(B.VerifyQty / CP.FPACKUNITCONVERRATIO) AS ''确认计划生产批数'' ,FFirmQty --确认计划生产数量 ,FFirmQty as FirmLotQty --确认生产批数 ,FOrderQty as OrderLotQty --计划生产批数 ,'+@SeqFld+' into '+ @TableName +' From #TMPMPS t0 ' --select @sql EXECUTE(@sql) drop table #TMPMPS end go --DECLARE @STARTDATE DATETIME ,@ENDDATE DATETIME --SELECT -- @STARTDATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, '2023-12-15'), 0) -- ,@ENDDATE = DATEADD(MS,-3, DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(MONTH, 1, '2023-12-15')), 0)) --DECLARE @LCID INT --SET @LCID = 2052 --EXEC PROC_ProductionSchedule @STARTDATE,@ENDDATE, @LCID;