diff --git a/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs b/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs index be5cb9b..713a38d 100644 --- a/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs +++ b/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs @@ -12,24 +12,43 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using ExtensionMethods; +using Kingdee.BOS.Log; namespace MonthlyProductionSchedule { - [Description("生产计划表-定时任务"), HotUpdate] + [Description("生产计划表-库存记录-定时任务"), HotUpdate] public class AutoRecordsInventoryPlugIn : IScheduleService { public void Run(Context ctx, Schedule schedule) { + var executeDay = schedule.Parameters.IsEmpty() ? 20 : schedule.Parameters.Long2Int(); var newDate = DateTime.Now; - //var year = filter.FilterParameter.CustomFilter["DataHoldYear"].Long2Int(); - //var month = filter.FilterParameter.CustomFilter["DataHoldMonth"].Long2Int(); - //var date = new DateTime(year, month, 1); - var tableName = "TMP" + Guid.NewGuid().ToString("N").ToUpper(); - var startDate = newDate.AddDays(1 - newDate.Day); - var endDate = startDate.AddMonths(1).AddDays(-1); - var year = newDate.Year; - var month = newDate.Month; - DBServiceHelper.Execute(ctx, $"/*dialect*/ EXEC PROC_PPL_AutoSaveCurrentData {tableName} , {newDate.ToLongFormat()} ,{startDate.ToShortFormat()} ,{endDate.ToShortFormat()} ,{year} ,{month}"); + if (newDate.Day == executeDay) + { + try + { + Logger.Info(schedule.Name, "记录物料即时库存start..."); + + ////如果这个日期下已保存有数据,先删除 + //var delSql = $"DELETE FROM T_MATERIAL_INVENTORY_MONTH_RECORD WHERE RECORDDAY = {newDate.Day} AND RECORDMONTH = {newDate.Month} AND RECORDYEAR = {newDate.Year} "; + //var delNum = DBServiceHelper.Execute(ctx, $"/*dialect*/{delSql}"); + //Logger.Info(schedule.Name, $"删除物料即时库存数据成功!(本次删除{delNum}条)"); + + var intoSql = $@" PROC_SAVE_MATERIAL_INVENTORY {ctx.UserLocale.LCID} ,{newDate.Year} ,{newDate.Month} ,{newDate.Day} "; + var intoNum = DBServiceHelper.Execute(ctx, $"/*dialect*/{intoSql}"); + Logger.Info(schedule.Name, $"记录物料即时库存成功!(本次记录{intoNum}条)"); + } + catch (Exception ex) + { + Logger.Error(schedule.Name, ex.Message, ex); + } + finally + { + Logger.Info(schedule.Name, "记录物料即时库存end..."); + } + } + + //DBServiceHelper.Execute(ctx, $"/*dialect*/ EXEC PROC_PPL_AutoSaveCurrentData {tableName} , {newDate.ToLongFormat()} ,{startDate.ToShortFormat()} ,{endDate.ToShortFormat()} ,{year} ,{month}"); } } } diff --git a/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs index 4054c7d..af6d4eb 100644 --- a/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs +++ b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs @@ -15,6 +15,8 @@ using System.Data; using System.Linq; using System.Runtime.InteropServices.ComTypes; using System.Security.Cryptography; +using Kingdee.BOS.Core.Report; +using System.Threading.Tasks; namespace MonthlyProductionSchedule { @@ -23,36 +25,64 @@ namespace MonthlyProductionSchedule { public override void ButtonClick(ButtonClickEventArgs e) { - + base.ButtonClick(e); if (e.Key.EqualsIgnoreCase("FSaveDataButton")) { - base.ButtonClick(e); var reportModel = this.Model as SysReportModel; //简单帐表对应的Model - - this.View.ShowMessage("保存数据会覆盖历史数据,是否继续?", MessageBoxOptions.OKCancel, new Action(result => + try { - if (result == MessageBoxResult.OK) - { - var tableName = this.SysReportView.Model.DataSource.TableName; - var para = new List(); + var year = reportModel.DataObject["DataHoldYear"].Long2Int(); + var month = reportModel.DataObject["DataHoldMonth"].Long2Int(); + var date = new DateTime(year, month, 1); + var startDate = date.ToString("yyyy-MM-dd"); + var endDate = date.AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"); + var tableName = this.SysReportView.Model.DataSource.TableName; + //para.Add(new SqlParam("@tableName", KDDbType.String, tableName)); + //para.Add(new SqlParam("@FRECORDDATE", KDDbType.DateTime, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); + var para = new List(); + para.Add(new SqlParam("@STARTDATE", KDDbType.Date, startDate)); + para.Add(new SqlParam("@ENDDATE", KDDbType.Date, endDate)); + para.Add(new SqlParam("@YEAR", KDDbType.Int64, year)); + para.Add(new SqlParam("@MONTH", KDDbType.Int64, month)); + para.Add(new SqlParam("@DAY", KDDbType.Int64, 20)); + para.Add(new SqlParam("@LCID", KDDbType.Int64, this.Context.UserLocale.LCID)); - var year = reportModel.DataObject["DataHoldYear"].Long2Int(); - var month = reportModel.DataObject["DataHoldMonth"].Long2Int(); + var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_SAVE_PLANPLMRPT_DATA", para); + //var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_PPL_SaveCurrentData", para); - para.Add(new SqlParam("@tableName", KDDbType.String, tableName)); - para.Add(new SqlParam("@FRECORDDATE", KDDbType.DateTime, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); - para.Add(new SqlParam("@FRECORDYEAR", KDDbType.Int64, year)); - para.Add(new SqlParam("@FRECORDMONTH", KDDbType.Int64, month)); + reportModel.DataObject["DataBDStatu"] = 1; - var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_PPL_SaveCurrentData", para); + this.View.Refresh(); + //this.View.InvokeFormOperation(FormOperationEnum.Refresh); - reportModel.DataObject["DataBDStatu"] = 1; - } - })); + //var btn = this.SysReportView.GetControl("FSaveDataButton"); + //btn.Enabled = false; + + //确保旧的临时表删除 +// var deleteTmpSql = $@" +//IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[{tableName}]') AND type IN ('U')) +// DROP TABLE [dbo].[{tableName}] +//GO +//"; +// DBUtils.Execute(this.Context, $"/*dialect*/{deleteTmpSql}"); + } + catch (Exception ex) + { + this.View.ShowErrMessage(ex.Message); + } + + //this.View.ShowMessage("保存数据会覆盖历史数据,是否继续?", MessageBoxOptions.OKCancel, new Action(result => + //{ + // if (result == MessageBoxResult.OK) + // { + + // } + //})); return; } } + } } diff --git a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj index b013c99..0699e18 100644 --- a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj +++ b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj @@ -80,14 +80,21 @@ - - - - - - - - + + + + + + + + + + + + + + + @@ -95,5 +102,6 @@ ExtensionMethods + \ No newline at end of file diff --git a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs index 867c308..ca6fb13 100644 --- a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs +++ b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs @@ -16,6 +16,7 @@ using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.Util; using System.Data; +using Kingdee.BOS.Core.Metadata.FieldElement; namespace MonthlyProductionSchedule @@ -102,8 +103,6 @@ namespace MonthlyProductionSchedule var year = filter.FilterParameter.CustomFilter["DataHoldYear"].Long2Int(); var month = filter.FilterParameter.CustomFilter["DataHoldMonth"].Long2Int(); var date = new DateTime(year, month, 1); - // 取数SQL - // FID, FEntryId, 编号、状态、物料、数量、单位、单位精度、单价、价税合计 object resa = 0; var startDate = date.ToString("yyyy-MM-dd"); var endDate = date.AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"); @@ -113,14 +112,15 @@ namespace MonthlyProductionSchedule //DBUtils.ExecuteDynamicObject(this.Context, sql); var para = new List { - new SqlParam("@tableName", KDDbType.String,tableName), - new SqlParam("@startDate", KDDbType.String,startDate), - new SqlParam("@endDate", KDDbType.String,endDate), - new SqlParam("@LCID", KDDbType.Int32,base.Context.UserLocale.LCID), + new SqlParam("@tableName", KDDbType.String ,tableName), + new SqlParam("@startDate", KDDbType.String ,startDate), + new SqlParam("@endDate", KDDbType.String ,endDate), + new SqlParam("@LCID", KDDbType.Int32 ,base.Context.UserLocale.LCID), new SqlParam("@seqFld", KDDbType.String,seqFld), - new SqlParam("@year", KDDbType.Int32,year), - new SqlParam("@month", KDDbType.Int32,month), - new SqlParam("@HasId", KDDbType.Int32, resa,ParameterDirection.Output) + new SqlParam("@year", KDDbType.Int32 ,year), + new SqlParam("@month", KDDbType.Int32 ,month), + new SqlParam("@day", KDDbType.Int32 ,20), + new SqlParam("@HasId", KDDbType.Int32, resa ,ParameterDirection.Output) }; var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_ProductionSchedule", para); @@ -168,7 +168,7 @@ namespace MonthlyProductionSchedule // FID, FEntryId, var _colIndex = 0; - ReportHeader header = new ReportHeader(); + ReportHeader header = base.GetReportHeaders(filter); header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++); header.AddChild("FNAME", new LocaleValue("产品名称"), _colIndex++); @@ -192,9 +192,32 @@ namespace MonthlyProductionSchedule header.AddChild("FFirmQty", new LocaleValue("确认计划生产量"), _colIndex++); header.AddChild("Note", new LocaleValue("备注"), _colIndex++); + //var FNUMBER = header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++); + //var FNAME = header.AddChild("FNAME", new LocaleValue("产品名称"), _colIndex++); + //var SHELFLIFE = header.AddChild("SHELFLIFE", new LocaleValue("有效期"), _colIndex++); + //var StandardLot = header.AddChild("StandardLot", new LocaleValue("标准批量"), _colIndex++); + //var FLOTYIELD = header.AddChild("FLOTYIELD", new LocaleValue("每批产量"), _colIndex++); + //var FPACKUNITCONVERRATIO = header.AddChild("FPACKUNITCONVERRATIO", new LocaleValue("包装规格"), _colIndex++); + //var FPACKUNITCONVT = header.AddChild("FPACKUNITCONVT", new LocaleValue("包装规格"), _colIndex++); + //var FPACKUNITNAME = header.AddChild("FPACKUNITNAME", new LocaleValue("单位"), _colIndex++); + //var SAFESTOCKCOUNT = header.AddChild("SAFESTOCKCOUNT", new LocaleValue("安全库存量"), _colIndex++); + //var SAFESTOCK = header.AddChild("SAFESTOCK", new LocaleValue("安全库存数量"), _colIndex++); + //var M01 = header.AddChild("M01", new LocaleValue("本月预计需求量"), _colIndex++); + //var S01 = header.AddChild("S01", new LocaleValue(date.AddMonths(-1).ToString("yyyy年MM月") + "发货量"), _colIndex++); + //var S02 = header.AddChild("S02", new LocaleValue(date.AddMonths(-2).ToString("yyyy年MM月") + "发货量"), _colIndex++); + //var S03 = header.AddChild("S03", new LocaleValue(date.AddMonths(-3).ToString("yyyy年MM月") + "发货量"), _colIndex++); + //var InStockQty = header.AddChild("InStockQty", new LocaleValue("已入库量"), _colIndex++); + //var InProductionQty = header.AddChild("InProductionQty", new LocaleValue("在生产量"), _colIndex++); + //var TotalStockQty = header.AddChild("TotalStockQty", new LocaleValue("合计入库量"), _colIndex++); + //var OrderLotQty = header.AddChild("OrderLotQty", new LocaleValue("系统计划生产批数"), _colIndex++); + //var FirmLotQty = header.AddChild("FirmLotQty", new LocaleValue("确认计划生产批数"), _colIndex++); + //var FFirmQty = header.AddChild("FFirmQty", new LocaleValue("确认计划生产量"), _colIndex++); + //var Note = header.AddChild("Note", new LocaleValue("备注"), _colIndex++); + return header; } + public override ReportTitles GetReportTitles(IRptParams filter) { var result = base.GetReportTitles(filter); @@ -210,7 +233,7 @@ namespace MonthlyProductionSchedule result.AddTitle("FDataBDStatu", saveDataStauts.ToString()); result.AddTitle("FDataHoldYear", dyFilter["DataHoldYear"].ToString()); result.AddTitle("FDataHoldMonth", dyFilter["DataHoldMonth"].ToString()); - result.AddTitle("FDataHoldDate", $"{dyFilter["DataHoldYear"]}-{dyFilter["DataHoldMonth"]}"); + //result.AddTitle("FDataHoldDate", $"{dyFilter["DataHoldYear"]}-{dyFilter["DataHoldMonth"]}"); //if (saveDataStauts != null) //{ // if (saveDataStauts.Long2Int() == 1) diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql deleted file mode 100644 index 9a90bf6..0000000 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql +++ /dev/null @@ -1,45 +0,0 @@ - -IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRE_PLANPLMRPT') - DROP PROCEDURE dbo.PROC_INQUIRE_PLANPLMRPT; -GO - -CREATE PROCEDURE PROC_INQUIRE_PLANPLMRPT - @TableName varchar(100) - ,@LCID int - ,@SeqFld varchar(200) - ,@year int - ,@month int - ,@HasId int out -AS -BEGIN - set @hasId = 0; - IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[T_PLAN_PLANPLMRPT]') AND type IN ('U')) - BEGIN - SELECT - @HasId = COUNT(A.FID) - FROM - T_PLAN_PLANPLMRPT A - WHERE - A.FRECORDMONTH = @month AND A.FRECORDYEAR = @year - END - if @hasId > 0 - begin - SELECT - * - into #TMPMPS - FROM - T_PLAN_PLANPLMRPT A - WHERE - A.FRECORDMONTH = @month AND A.FRECORDYEAR = @year - - DECLARE @SQL VARCHAR(2000) - SET @sql = ' - select - t0.* - ,'+@SeqFld+' - into '+ @TableName +' From #TMPMPS t0 ' - - EXECUTE(@sql) - DROP TABLE #TMPMPS - end -END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql deleted file mode 100644 index 9b9edfb..0000000 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql +++ /dev/null @@ -1,27 +0,0 @@ -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) - ,@year int - ,@month int - ,@HasId int output -AS -BEGIN - set @HasId = 0 - - IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[T_PLAN_PLANPLMRPT]') AND type IN ('U')) - BEGIN - EXEC PROC_INQUIRE_PLANPLMRPT @TableName,@LCID,@SeqFld,@year,@month, @HasId - END - - IF @HasId = 0 - BEGIN - EXEC PROC_INQUIRPLMTMPRTP @TableName,@STARTDATE,@ENDDATE,@LCID,@SeqFld - END -END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql deleted file mode 100644 index fd8aa5f..0000000 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql +++ /dev/null @@ -1,162 +0,0 @@ - -IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRPLMTMPRTP') - DROP PROCEDURE dbo.PROC_INQUIRPLMTMPRTP; -GO - -CREATE PROCEDURE PROC_INQUIRPLMTMPRTP - @TableName varchar(100) - ,@STARTDATE date - ,@ENDDATE date - ,@LCID int - ,@SeqFld varchar(200) -AS -BEGIN - ---㱨start - SELECT - AE.FSRCBILLNO - ,AE.FMATERIALID - ,AE.FSALEORDERENTRYID - ,AE.FSALEORDERENTRYSEQ - ,SUM(AE.FQTY) AS FQTY - ,SUM(B.FFINISHQTY) AS FFINISHQTY -- - into #TMP_MO_INFO - FROM - T_PRD_MO A - LEFT JOIN T_PRD_MOENTRY AE ON A.FID = AE.FID - LEFT JOIN T_PRD_MOENTRY_A AE_A ON AE_A.FENTRYID = AE.FENTRYID - LEFT JOIN (SELECT - A.FBILLTYPE --50fa7c2eda7947b89fab5431bf25d48e 㱨 e52b554423704173b7306554708a8b05 㱨 - ,AE.FMOENTRYID - ,FFINISHQTY - FROM - T_PRD_MORPT A - LEFT JOIN T_PRD_MORPTENTRY AE ON AE.FID = A.FID - WHERE A.FDOCUMENTSTATUS='C' AND A.FBILLTYPE = '50fa7c2eda7947b89fab5431bf25d48e' - ) B on B.FMOENTRYID = AE.FENTRYID - WHERE - AE.FSRCBILLTYPE ='PLN_PLANORDER' - AND AE_A.FSTATUS <> 6 - AND AE.FSALEORDERENTRYID <> 0 - AND A.FDATE between @STARTDATE and @ENDDATE - GROUP BY - AE.FSRCBILLNO - ,AE.FMATERIALID - ,AE.FSALEORDERENTRYID - ,AE.FSALEORDERENTRYSEQ - ---㱨end - - - --ƻstart - SELECT - A.FID - ,A.FBILLNO - ,A.FMATERIALID - ,A_B.FSALEORDERENTRYID - ,SUM(A.FFirmQty) as 'FFirmQty' - ,SUM(A.FORDERQTY) as 'FOrderQty' - into #TMP_PLN_INFO - 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.FID - ,A.FBILLNO - ,A.FRELEASETYPE - ,A.FMATERIALID - ,A_B.FSALEORDERENTRYID - --ƻend - - - - --ѯstart - SELECT - A.FID - ,A.FBILLNO - ,AE.FMATERIALID - ,AE.FENTRYID - ,C.FNUMBER - ,C_L.FNAME - ,C_L.FSPECIFICATION - ,(CASE CS.FEXPPERIOD - WHEN 0 THEN '' - ELSE - CASE - CS.FEXPUNIT - WHEN 'Y' THEN - CONVERT ( VARCHAR,CAST((CS.FEXPPERIOD * 12) AS INT) ) + '' - WHEN 'M' THEN - CONVERT ( VARCHAR,CAST(CS.FEXPPERIOD AS INT) ) + '' - WHEN 'D' THEN - CONVERT ( VARCHAR, CAST(( - CASE CS.FEXPPERIOD % 30 WHEN 0 THEN CS.FEXPPERIOD / 30 ELSE CS.FEXPPERIOD / 365 * 12 END - ) AS INT)) + '' ELSE '' - END - END) AS 'SHELFLIFE' - ,C.FLotSize AS StandardLot - ,CS.FSAFESTOCK AS SAFESTOCK --ȫ - ,CS.FSTOREUNITID --浥λ - ,(PackageValConver(CS.FSAFESTOCK, CP.FPACKUNITCONVERRATIO)) AS SAFESTOCKCOUNT - ,CP.FLOTYIELD -- 'ÿ' - ,CP.FPACKUNITCONVERRATIO -- 'װ' - ,CP.FPACKUNITID -- 'λ' - ,PackageValConver(AE.M01,CP.FPACKUNITCONVERRATIO) as M01 - ,PackageValConver(AE.S01,CP.FPACKUNITCONVERRATIO) as S01 - ,PackageValConver(AE.S02,CP.FPACKUNITCONVERRATIO) as S02 - ,PackageValConver(AE.S03,CP.FPACKUNITCONVERRATIO) as S03 - ,PackageValConver((ISNULL(D.FQTY,0) - ISNULL(D.FFINISHQTY,0)),CP.FPACKUNITCONVERRATIO) AS InProductionQty -- - ,PackageValConver(ISNULL(E.FQTY,0),CP.FPACKUNITCONVERRATIO) AS InStockQty -- - ,PackageValConver((ISNULL(D.FQTY,0) + ISNULL(E.FQTY,0)),CP.FPACKUNITCONVERRATIO) AS TotalStockQty --ϼ - ,PackageValConver(B.FOrderQty,CP.FPACKUNITCONVERRATIO) AS OrderLotQty --ƻ - ,B.FFirmQty - ,B.FOrderQty - into #TMPMPS - FROM - T_PLN_FORECAST A - LEFT JOIN T_PLN_FORECASTENTRY AE ON A.FID = AE.FID - RIGHT JOIN #TMP_PLN_INFO B ON B.FSALEORDERENTRYID = AE.FENTRYID - 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 - LEFT JOIN #TMP_MO_INFO D on D.FSRCBILLNO = B.FBILLNO AND D.FSALEORDERENTRYID = AE.FENTRYID AND D.FSALEORDERENTRYSEQ = AE.FSEQ - LEFT JOIN (SELECT - A.FMATERIALID - ,A.FSTOCKORGID - ,SUM(A1.FQTY) AS FQTY - FROM T_STK_INVENTORY A - LEFT JOIN T_STK_INVINITDETAIL A1 on A.FMATERIALID = A1.FMATERIALID AND A.Fstockid = A1.FSTOCKID - group by A.FMATERIALID,A.FSTOCKORGID - ) E on E.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 FSTOREUNITNAME VARCHAR(50) - UPDATE #TMPMPS SET #TMPMPS.FSTOREUNITNAME = B_L.FNAME FROM T_BD_UNIT_L B_L WHERE B_L.FUNITID = #TMPMPS.FSTOREUNITID - - ALTER TABLE #TMPMPS ADD FPACKUNITNAME VARCHAR(50) - UPDATE #TMPMPS SET #TMPMPS.FPACKUNITNAME = B_L.FNAME FROM T_BD_UNIT_L B_L WHERE B_L.FUNITID = #TMPMPS.FPACKUNITID - - ALTER TABLE #TMPMPS ADD FPACKUNITCONVT VARCHAR(100) - UPDATE T SET T.FPACKUNITCONVT = CONCAT(CONVERT(VARCHAR,T.FPACKUNITCONVERRATIO),T.FSTOREUNITNAME,'/',T.FPACKUNITNAME) FROM #TMPMPS T - - --ALTER TABLE #TMPMPS ADD TotalStockQty decimal(23,6) - --UPDATE T SET T.TotalStockQty = T.InProductionQty +T.InStockQty FROM #TMPMPS T - --ѯend - - DECLARE @SQL VARCHAR(2000) - SET @sql = N' - select - t0.* - ,'+@SeqFld+' - into '+ @TableName +' From #TMPMPS t0 ' - EXECUTE(@sql) - - DROP TABLE #TMPMPS - DROP TABLE #TMP_PLN_INFO - DROP TABLE #TMP_MO_INFO -END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/即时库存记录.sql b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/即时库存记录.sql similarity index 100% rename from MonthlyProductionSchedule/SQLServer/即时库存记录.sql rename to MonthlyProductionSchedule/SQLServer/生产计划表1.0/即时库存记录.sql diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表1.0/月度生产计划表-预测单.sql b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/月度生产计划表-预测单.sql new file mode 100644 index 0000000..8adb3de --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/月度生产计划表-预测单.sql @@ -0,0 +1,162 @@ + +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRPLMTMPRTP') + DROP PROCEDURE dbo.PROC_INQUIRPLMTMPRTP; +GO + +CREATE PROCEDURE PROC_INQUIRPLMTMPRTP + @TableName varchar(100) + ,@STARTDATE date + ,@ENDDATE date + ,@LCID int + ,@SeqFld varchar(200) +AS +BEGIN + ---㱨start + SELECT + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ,SUM(t0E.FQTY) AS FQTY + ,SUM(t1.FFINISHQTY) AS FFINISHQTY -- + into #TMP_MO_INFO + FROM + T_PRD_MO t0 + LEFT JOIN T_PRD_MOENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN T_PRD_MOENTRY_A t0E_A ON t0E_A.FENTRYID = t0E.FENTRYID + LEFT JOIN (SELECT + t0.FBILLTYPE --50fa7c2eda7947b89fab5431bf25d48e 㱨 e52b554423704173b7306554708a8b05 㱨 + ,t0E.FMOENTRYID + ,FFINISHQTY + FROM + T_PRD_MORPT t0 + LEFT JOIN T_PRD_MORPTENTRY t0E ON t0E.FID = t0.FID + WHERE t0.FDOCUMENTSTATUS='C' AND t0.FBILLTYPE = '50fa7c2eda7947b89fab5431bf25d48e' + ) t1 on t1.FMOENTRYID = t0E.FENTRYID + WHERE + t0E.FSRCBILLTYPE ='PLN_PLANORDER' + AND t0E_A.FSTATUS <> 6 + AND t0E.FSALEORDERENTRYID <> 0 + AND t0.FDATE between @STARTDATE and @ENDDATE + GROUP BY + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ---㱨end + + + --ƻstart + SELECT + t0.FID + ,t0.FBILLNO + ,t0.FMATERIALID + ,t0_B.FSALEORDERENTRYID + ,SUM(t0.FFirmQty) as 'FFirmQty' + ,SUM(t0.FORDERQTY) as 'FOrderQty' + into #TMP_PLN_INFO + FROM + T_PLN_PLANORDER t0 + LEFT JOIN T_PLN_PLANORDER_B t0_B ON t0.FID = t0_B.FID + WHERE + t0.FRELEASETYPE = 1 + --AND (t0.FRELEASESTATUS = 1 OR t0.FRELEASESTATUS = 2 ) + GROUP By + t0.FID + ,t0.FBILLNO + ,t0.FRELEASETYPE + ,t0.FMATERIALID + ,t0_B.FSALEORDERENTRYID + --ƻend + + + + --ѯstart + SELECT + t0.FID + ,t0.FBILLNO + ,t0E.FMATERIALID + ,t0E.FENTRYID + ,t2.FNUMBER + ,t2_L.FNAME + ,t2_L.FSPECIFICATION + ,(CASE t2S.FEXPPERIOD + WHEN 0 THEN '' + ELSE + CASE + t2S.FEXPUNIT + WHEN 'Y' THEN + CONVERT ( VARCHAR,CAST((t2S.FEXPPERIOD * 12) AS INT) ) + '' + WHEN 'M' THEN + CONVERT ( VARCHAR,CAST(t2S.FEXPPERIOD AS INT) ) + '' + WHEN 't3' THEN + CONVERT ( VARCHAR, CAST(( + CASE t2S.FEXPPERIOD % 30 WHEN 0 THEN t2S.FEXPPERIOD / 30 ELSE t2S.FEXPPERIOD / 365 * 12 END + ) AS INT)) + '' ELSE '' + END + END) AS 'SHELFLIFE' + ,t2.FLotSize AS StandardLot + ,t2S.FSAFESTOCK AS SAFESTOCK --ȫ + ,t2S.FSTOREUNITID --浥λ + ,(dbo.PackageValConver(t2S.FSAFESTOCK, t2P.FPACKUNITCONVERRATIO)) AS SAFESTOCKCOUNT + ,t2P.FLOTYIELD -- 'ÿ' + ,t2P.FPACKUNITCONVERRATIO -- 'װ' + ,t2P.FPACKUNITID -- 'λ' + ,dbo.PackageValConver(t0E.M01,t2P.FPACKUNITCONVERRATIO) as M01 + ,dbo.PackageValConver(t0E.S01,t2P.FPACKUNITCONVERRATIO) as S01 + ,dbo.PackageValConver(t0E.S02,t2P.FPACKUNITCONVERRATIO) as S02 + ,dbo.PackageValConver(t0E.S03,t2P.FPACKUNITCONVERRATIO) as S03 + ,dbo.PackageValConver((ISNULL(t3.FQTY,0) - ISNULL(t3.FFINISHQTY,0)),t2P.FPACKUNITCONVERRATIO) AS InProductionQty -- + ,dbo.PackageValConver(ISNULL(t4.FQTY,0),t2P.FPACKUNITCONVERRATIO) AS InStockQty -- + ,dbo.PackageValConver((ISNULL(t3.FQTY,0) + ISNULL(t4.FQTY,0)),t2P.FPACKUNITCONVERRATIO) AS TotalStockQty --ϼ + ,dbo.PackageValConver(t1.FOrderQty,t2P.FPACKUNITCONVERRATIO) AS OrderLotQty --ƻ + ,t1.FFirmQty + ,t1.FOrderQty + into #TMPMPS + FROM + T_PLN_FORECAST t0 + LEFT JOIN T_PLN_FORECASTENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN #TMP_PLN_INFO t1 ON t1.FSALEORDERENTRYID = t0E.FENTRYID AND t1.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL t2 ON t2.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t2_L ON t2_L.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIALSTOCK t2S ON t2S.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIALPRODUCE t2P ON t2P.FMATERIALID = t0E.FMATERIALID + LEFT JOIN #TMP_MO_INFO t3 on t3.FSRCBILLNO = t1.FBILLNO AND t3.FSALEORDERENTRYID = t0E.FENTRYID AND t3.FSALEORDERENTRYSEQ = t0E.FSEQ + LEFT JOIN (SELECT + t0.FMATERIALID + ,t0.FSTOCKORGID + ,SUM(t1.FQTY) AS FQTY + FROM T_STK_INVENTORY t0 + LEFT JOIN T_STK_INVINITDETAIL t1 ON t0.FMATERIALID = t1.FMATERIALID AND t0.FSTOCKID = t1.FSTOCKID + GROUP BY t0.FMATERIALID,t0.FSTOCKORGID + ) t4 on t4.FMATERIALID = t0E.FMATERIALID + WHERE + --t0.FDATE BETWEEN '2023-12-01 00:00:00' AND '2023-12-31 23:59:59' + t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + + --µλ + ALTER TABLE #TMPMPS ADD FSTOREUNITNAME VARCHAR(50) + UPDATE #TMPMPS SET #TMPMPS.FSTOREUNITNAME = B_L.FNAME FROM T_BD_UNIT_L B_L WHERE B_L.FUNITID = #TMPMPS.FSTOREUNITID + + ALTER TABLE #TMPMPS ADD FPACKUNITNAME VARCHAR(50) + UPDATE #TMPMPS SET #TMPMPS.FPACKUNITNAME = B_L.FNAME FROM T_BD_UNIT_L B_L WHERE B_L.FUNITID = #TMPMPS.FPACKUNITID + + ALTER TABLE #TMPMPS ADD FPACKUNITCONVT VARCHAR(100) + UPDATE T SET T.FPACKUNITCONVT = CONCAT(CONVERT(VARCHAR,T.FPACKUNITCONVERRATIO),T.FSTOREUNITNAME,'/',T.FPACKUNITNAME) FROM #TMPMPS T + + --ALTER TABLE #TMPMPS ADD TotalStockQty decimal(23,6) + --UPDATE T SET T.TotalStockQty = T.InProductionQty +T.InStockQty FROM #TMPMPS T + --ѯend + + DECLARE @SQL VARCHAR(2000) + SET @sql = N' + select + t0.* + ,'+@SeqFld+' + into '+ @TableName +' From #TMPMPS t0 ' + EXECUTE(@sql) + + DROP TABLE #TMPMPS + DROP TABLE #TMP_PLN_INFO + DROP TABLE #TMP_MO_INFO +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度计划数据保存.sql b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/月度计划数据保存.sql similarity index 100% rename from MonthlyProductionSchedule/SQLServer/月度计划数据保存.sql rename to MonthlyProductionSchedule/SQLServer/生产计划表1.0/月度计划数据保存.sql diff --git a/MonthlyProductionSchedule/SQLServer/自动保存存储过程.sql b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/自动保存存储过程.sql similarity index 100% rename from MonthlyProductionSchedule/SQLServer/自动保存存储过程.sql rename to MonthlyProductionSchedule/SQLServer/生产计划表1.0/自动保存存储过程.sql diff --git a/MonthlyProductionSchedule/SQLServer/计划生产订单入库数.sql b/MonthlyProductionSchedule/SQLServer/生产计划表1.0/计划生产订单入库数.sql similarity index 100% rename from MonthlyProductionSchedule/SQLServer/计划生产订单入库数.sql rename to MonthlyProductionSchedule/SQLServer/生产计划表1.0/计划生产订单入库数.sql diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0.zip b/MonthlyProductionSchedule/SQLServer/生产计划表2.0.zip new file mode 100644 index 0000000..7ab0f94 Binary files /dev/null and b/MonthlyProductionSchedule/SQLServer/生产计划表2.0.zip differ diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/1.创建表_物料库存记录表.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/1.创建表_物料库存记录表.sql new file mode 100644 index 0000000..7ab5b1b --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/1.创建表_物料库存记录表.sql @@ -0,0 +1,44 @@ +/* + Navicat Premium Data Transfer + + Source Server : sql server + Source Server Type : SQL Server + Source Server Version : 15002080 + Source Host : .:1433 + Source Catalog : AIS20231110222743 + Source Schema : dbo + + Target Server Type : SQL Server + Target Server Version : 15002080 + File Encoding : 65001 + + Date: 27/12/2023 16:44:40 +*/ + + +-- ---------------------------- +-- Table structure for T_MATERIAL_INVENTORY_MONTH_RECORD +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[T_MATERIAL_INVENTORY_MONTH_RECORD]') AND type IN ('U')) + DROP TABLE [dbo].[T_MATERIAL_INVENTORY_MONTH_RECORD] +GO + +CREATE TABLE [dbo].[T_MATERIAL_INVENTORY_MONTH_RECORD] ( + [FID] int not null PRIMARY KEY IDENTITY(100000,1), + [FMASTERID] int NULL, + [FMATERIALID] int NOT NULL, + [FNUMBER] nvarchar(80) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FSTOCKQTY] decimal(23,10) NOT NULL, + [FLOTYIELD] int not NULL, + [FPACKUNITCONVERRATIO] int not NULL, + [FPACKUNITID] int not NULL, + [FUSEORGID] int NOT NULL, + [RECORDYEAR] int NOT NULL, + [RECORDMONTH] int NOT NULL, + [RECORDDAY] int NOT NULL +) +GO + +ALTER TABLE [dbo].[T_MATERIAL_INVENTORY_MONTH_RECORD] SET (LOCK_ESCALATION = TABLE) +GO + diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/2.存储过程_生产计划_查询保存数据.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/2.存储过程_生产计划_查询保存数据.sql new file mode 100644 index 0000000..61d3a71 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/2.存储过程_生产计划_查询保存数据.sql @@ -0,0 +1,36 @@ +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRE_PLANPLMRPT') + DROP PROCEDURE dbo.PROC_INQUIRE_PLANPLMRPT; +GO + +CREATE PROCEDURE PROC_INQUIRE_PLANPLMRPT + @TABLENAME VARCHAR(100) + ,@SEQFLD VARCHAR(200) + ,@YEAR INT + ,@MONTH INT + ,@DAY INT + ,@HASID INT OUTPUT +AS +BEGIN + SET @HASID = 0; + + SELECT + * + INTO #TMPMPS + FROM + T_PLAN_PLANPLMRPT A + WHERE + A.FRECORDDAY = @DAY AND A.FRECORDMONTH = @MONTH AND A.FRECORDYEAR = @YEAR + + SELECT @HASID = COUNT(1) FROM #TMPMPS + + DECLARE @SQL VARCHAR(2000) + + SET @sql = ' + select + t0.* + ,'+@SeqFld+' + into '+ @TableName +' From #TMPMPS t0 ' + + EXECUTE(@sql) + DROP TABLE #TMPMPS +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/3.存储过程_生产计划_查询即时数据.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/3.存储过程_生产计划_查询即时数据.sql new file mode 100644 index 0000000..1899b97 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/3.存储过程_生产计划_查询即时数据.sql @@ -0,0 +1,143 @@ + +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_TMP_INQUIRE_PLANPLMRPT') + DROP PROCEDURE dbo.PROC_TMP_INQUIRE_PLANPLMRPT; +GO + +CREATE PROCEDURE PROC_TMP_INQUIRE_PLANPLMRPT + @TABLENAME VARCHAR(100) + ,@SEQFLD VARCHAR(200) + ,@LCID INT + ,@STARTDATE DATE + ,@ENDDATE DATE + ,@YEAR INT + ,@MONTH INT + ,@DAY INT + ,@HASID INT OUTPUT +AS +BEGIN + SELECT + t0.FID + ,t0.FBILLNO + ,t0E.FMATERIALID + ,t0E.FENTRYID + ,t0E.FSEQ + ,t2.FNUMBER + ,t2_L.FNAME + ,t2_L.FSPECIFICATION + ,(CASE t2S.FEXPPERIOD + WHEN 0 THEN '' + ELSE + CASE + t2S.FEXPUNIT + WHEN 'Y' THEN + CONVERT ( VARCHAR,CAST((t2S.FEXPPERIOD * 12) AS INT) ) + '' + WHEN 'M' THEN + CONVERT ( VARCHAR,CAST(t2S.FEXPPERIOD AS INT) ) + '' + WHEN 'D' THEN + CONVERT ( VARCHAR, CAST(( + CASE t2S.FEXPPERIOD % 30 WHEN 0 THEN t2S.FEXPPERIOD / 30 ELSE t2S.FEXPPERIOD / 365 * 12 END + ) AS INT)) + '' ELSE '' + END + END) AS 'SHELFLIFE' + ,CONCAT(t2.FLotSize,t5_L.FNAME, '/') AS StandardLot + ,dbo.ToDecimal2(t2S.FSAFESTOCK) AS SAFESTOCK --ȫ + ,t2S.FSTOREUNITID --浥λ + ,t5_L.FNAME AS FSTOREUNITNAME + ,(dbo.PackageValConver(t2S.FSAFESTOCK, t4.FPACKUNITCONVERRATIO)) AS SAFESTOCKCOUNT + ,CONCAT(CONVERT(VARCHAR,dbo.ToDecimal2(t4.FPACKUNITCONVERRATIO)),t5_L.FNAME ,'/' ,t6_L.FNAME) AS FPACKUNITCONVT + ,t4.FLOTYIELD -- 'ÿ' + ,t4.FPACKUNITCONVERRATIO -- 'װ' + ,t4.FPACKUNITID -- 'λ' + ,t6_L.FNAME AS FPACKUNITNAME + ,dbo.PackageValConver(t0E.M01,t4.FPACKUNITCONVERRATIO) as M01 + ,dbo.PackageValConver(t0E.S01,t4.FPACKUNITCONVERRATIO) as S01 + ,dbo.PackageValConver(t0E.S02,t4.FPACKUNITCONVERRATIO) as S02 + ,dbo.PackageValConver(t0E.S03,t4.FPACKUNITCONVERRATIO) as S03 + ,dbo.PackageValConver(ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) ,t4.FPACKUNITCONVERRATIO) AS InProductionQty -- + ,dbo.PackageValConver(ISNULL(t4.FSTOCKQTY,0),t4.FPACKUNITCONVERRATIO) AS InStockQty -- + ,dbo.PackageValConver((ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) + ISNULL(t4.FSTOCKQTY,0)),t4.FPACKUNITCONVERRATIO) AS TotalStockQty --ϼ + ,dbo.PackageValConver(t1.FOrderQty,t4.FLOTYIELD) AS OrderLotQty --ƻ + ,dbo.PackageValConver(t1.FFirmQty, t4.FPACKUNITCONVERRATIO) AS FirmLotQty --ȷ + ,dbo.ToDecimal2(t1.FFirmQty) FFirmQty --ȷ + ,@DAY AS FRECORDDAY + ,@MONTH AS FRECORDMONTH + ,@YEAR AS FRECORDYEAR + into #TMPMPS + FROM + T_PLN_FORECAST t0 + LEFT JOIN T_PLN_FORECASTENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN ( + SELECT + t1.FMATERIALID + ,t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1_B.FSALEORDERENTRYID + ,sum(t1.FFirmQty) FFirmQty + ,sum(t1.FOrderQty) FOrderQty + FROM + T_PLN_PLANORDER t1 + LEFT JOIN T_PLN_PLANORDER_B t1_B ON t1.FID = t1_B.FID + WHERE t1.FDATASOURCE = 1 AND t1.FCREATEDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1.FMATERIALID + ,t1_B.FSALEORDERENTRYID + ) t1 ON t1.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL t2 ON t2.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t2_L ON (t2_L.FMATERIALID = t0E.FMATERIALID AND t2_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_MATERIALSTOCK t2S ON t2S.FMATERIALID = t0E.FMATERIALID + LEFT JOIN ( + SELECT + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ,SUM(t1.FFINISHQTY) AS FFINISHQTY -- + ,SUM(t1.FSTOCKINQUASELQTY) AS FSTOCKINQUASELQTY --ϸƷѡ + FROM + T_PRD_MO t0 + LEFT JOIN T_PRD_MOENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN T_PRD_MOENTRY_A t0E_A ON t0E_A.FENTRYID = t0E.FENTRYID + LEFT JOIN ( + SELECT + t0.FBILLTYPE --50fa7c2eda7947b89fab5431bf25d48e 㱨 e52b554423704173b7306554708a8b05 㱨 + ,t0E.FMOENTRYID + ,t0E.FFINISHQTY + ,t0E_A.FSTOCKINQUASELQTY + FROM + T_PRD_MORPT t0 + LEFT JOIN T_PRD_MORPTENTRY t0E ON t0E.FID = t0.FID + LEFT JOIN T_PRD_MORPTENTRY_A t0E_A ON t0E_A.FID = t0.FID AND t0E_A.FENTRYID = t0E.FENTRYID + WHERE t0.FDOCUMENTSTATUS='C' AND t0.FBILLTYPE = '50fa7c2eda7947b89fab5431bf25d48e' + ) t1 ON t1.FMOENTRYID = t0E.FENTRYID + WHERE + t0E.FSRCBILLTYPE ='PLN_PLANORDER' + AND t0E_A.FSTATUS <> 6 + AND t0E.FSALEORDERENTRYID <> 0 + AND t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ) t3 ON t3.FSALEORDERENTRYID = t0E.FENTRYID AND t3.FSALEORDERENTRYSEQ = t0E.FSEQ AND t3.FSRCBILLNO = t0.FBILLNO + LEFT JOIN T_MATERIAL_INVENTORY_MONTH_RECORD t4 ON (t4.FMATERIALID = t0E.FMATERIALID AND t4.RECORDYEAR = @YEAR AND t4.RECORDMONTH = @MONTH and t4.RECORDDAY = @DAY) + LEFT JOIN T_BD_UNIT_L t5_L ON (t5_l.FUNITID = t2S.FSTOREUNITID AND t5_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_UNIT_L t6_L ON (t6_l.FUNITID = t4.FPACKUNITID AND t6_L.FLOCALEID = @LCID) + WHERE + t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + + SELECT @HASID = COUNT(1) FROM #TMPMPS + + DECLARE @SQL VARCHAR(2000) + + SET @sql = ' + select + t0.* + ,'+@SeqFld+' + into '+ @TableName +' From #TMPMPS t0 ' + + EXECUTE(@sql) + DROP TABLE #TMPMPS +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/4.存储过程_生产计划_查询.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/4.存储过程_生产计划_查询.sql new file mode 100644 index 0000000..7599a7e --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/4.存储过程_生产计划_查询.sql @@ -0,0 +1,30 @@ +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) + ,@YEAR INT + ,@MONTH INT + ,@DAY INT + ,@HASID INT OUTPUT +AS +BEGIN + SET @HASID = 0 + + SELECT @DAY = (CASE WHEN LTRIM(RTRIM(T0.FPARAMETERS)) = '' THEN @DAY ELSE CAST(T0.FPARAMETERS AS INT) END) FROM T_BAS_SCHEDULEINFO T0 WHERE T0.FSCHEDULETYPEID = '657bf589f52174' + + IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[T_PLAN_PLANPLMRPT]') AND TYPE IN ('U')) + BEGIN + EXEC PROC_INQUIRE_PLANPLMRPT @TABLENAME,@SEQFLD,@YEAR,@MONTH,@DAY, @HASID OUTPUT + END + ELSE + BEGIN + EXEC PROC_TMP_INQUIRE_PLANPLMRPT @TABLENAME, @SEQFLD, @LCID, @STARTDATE, @ENDDATE, @YEAR, @MONTH, @DAY, @HASID OUTPUT + END + +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/5.存储过程_生产计划表_insert.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/5.存储过程_生产计划表_insert.sql new file mode 100644 index 0000000..9bf6f43 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/5.存储过程_生产计划表_insert.sql @@ -0,0 +1,129 @@ + +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SAVE_PLANPLMRPT_DATA') + DROP PROCEDURE dbo.PROC_SAVE_PLANPLMRPT_DATA; +GO + +CREATE PROCEDURE PROC_SAVE_PLANPLMRPT_DATA + @STARTDATE date + ,@ENDDATE date + ,@YEAR int + ,@MONTH int + ,@DAY int + ,@LCID int +AS +BEGIN + SELECT @DAY = (CASE WHEN LTRIM(RTRIM(T0.FPARAMETERS)) = '' THEN @DAY ELSE CAST(T0.FPARAMETERS AS INT) END) FROM T_BAS_SCHEDULEINFO T0 WHERE T0.FSCHEDULETYPEID = '657bf589f52174' + + INSERT INTO T_PLAN_PLANPLMRPT + SELECT + t0.FBILLNO + ,t0E.FMATERIALID + ,t0E.FENTRYID + ,t0E.FSEQ + ,t2.FNUMBER + ,t2_L.FNAME + ,t2_L.FSPECIFICATION + ,(CASE t2S.FEXPPERIOD + WHEN 0 THEN '' + ELSE + CASE + t2S.FEXPUNIT + WHEN 'Y' THEN + CONVERT ( VARCHAR,CAST((t2S.FEXPPERIOD * 12) AS INT) ) + '' + WHEN 'M' THEN + CONVERT ( VARCHAR,CAST(t2S.FEXPPERIOD AS INT) ) + '' + WHEN 'D' THEN + CONVERT ( VARCHAR, CAST(( + CASE t2S.FEXPPERIOD % 30 WHEN 0 THEN t2S.FEXPPERIOD / 30 ELSE t2S.FEXPPERIOD / 365 * 12 END + ) AS INT)) + '' ELSE '' + END + END) AS 'SHELFLIFE' + ,CONCAT(t2.FLotSize,t5_L.FNAME, '/') AS StandardLot + ,dbo.ToDecimal2(t2S.FSAFESTOCK) AS SAFESTOCK --ȫ + ,t2S.FSTOREUNITID --浥λ + ,t5_L.FNAME AS FSTOREUNITNAME + ,(dbo.PackageValConver(t2S.FSAFESTOCK, t4.FPACKUNITCONVERRATIO)) AS SAFESTOCKCOUNT + ,CONCAT(CONVERT(VARCHAR,dbo.ToDecimal2(t4.FPACKUNITCONVERRATIO)),t5_L.FNAME ,'/' ,t6_L.FNAME) AS FPACKUNITCONVT --װת + ,t4.FLOTYIELD -- 'ÿ' + ,t4.FPACKUNITCONVERRATIO -- 'װ' + ,t4.FPACKUNITID -- 'λ' + ,t6_L.FNAME AS FPACKUNITNAME + ,dbo.PackageValConver(t0E.M01,t4.FPACKUNITCONVERRATIO) as M01 -- + ,dbo.PackageValConver(t0E.S01,t4.FPACKUNITCONVERRATIO) as S01 --ǰһ + ,dbo.PackageValConver(t0E.S02,t4.FPACKUNITCONVERRATIO) as S02 --ǰ + ,dbo.PackageValConver(t0E.S03,t4.FPACKUNITCONVERRATIO) as S03 --ǰ + ,dbo.PackageValConver(ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) ,t4.FPACKUNITCONVERRATIO) AS InProductionQty -- + ,dbo.PackageValConver(ISNULL(t4.FSTOCKQTY,0),t4.FPACKUNITCONVERRATIO) AS InStockQty -- + ,dbo.PackageValConver((ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) + ISNULL(t4.FSTOCKQTY,0)),t4.FPACKUNITCONVERRATIO) AS TotalStockQty --ϼ + ,dbo.PackageValConver(t1.FOrderQty,t4.FLOTYIELD) AS OrderLotQty --ƻ + ,dbo.PackageValConver(t1.FFirmQty, t4.FPACKUNITCONVERRATIO) AS FirmLotQty --ȷ + ,dbo.ToDecimal2(t1.FFirmQty) FFirmQty --ȷ + ,@DAY AS FRECORDDAY + ,@MONTH AS FRECORDMONTH + ,@YEAR AS FRECORDYEAR + FROM + T_PLN_FORECAST t0 + LEFT JOIN T_PLN_FORECASTENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN ( + SELECT + t1.FMATERIALID + ,t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1_B.FSALEORDERENTRYID + ,sum(t1.FFirmQty) FFirmQty + ,sum(t1.FOrderQty) FOrderQty + FROM + T_PLN_PLANORDER t1 + LEFT JOIN T_PLN_PLANORDER_B t1_B ON t1.FID = t1_B.FID + WHERE t1.FDATASOURCE = 1 AND t1.FCREATEDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1.FMATERIALID + ,t1_B.FSALEORDERENTRYID + ) t1 ON t1.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL t2 ON t2.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t2_L ON (t2_L.FMATERIALID = t0E.FMATERIALID AND t2_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_MATERIALSTOCK t2S ON t2S.FMATERIALID = t0E.FMATERIALID + LEFT JOIN ( + SELECT + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ,SUM(t1.FFINISHQTY) AS FFINISHQTY -- + ,SUM(t1.FSTOCKINQUASELQTY) AS FSTOCKINQUASELQTY --ϸƷѡ + FROM + T_PRD_MO t0 + LEFT JOIN T_PRD_MOENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN T_PRD_MOENTRY_A t0E_A ON t0E_A.FENTRYID = t0E.FENTRYID + LEFT JOIN ( + SELECT + t0.FBILLTYPE --50fa7c2eda7947b89fab5431bf25d48e 㱨 e52b554423704173b7306554708a8b05 㱨 + ,t0E.FMOENTRYID + ,t0E.FFINISHQTY + ,t0E_A.FSTOCKINQUASELQTY + FROM + T_PRD_MORPT t0 + LEFT JOIN T_PRD_MORPTENTRY t0E ON t0E.FID = t0.FID + LEFT JOIN T_PRD_MORPTENTRY_A t0E_A ON t0E_A.FID = t0.FID AND t0E_A.FENTRYID = t0E.FENTRYID + WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FBILLTYPE = '50fa7c2eda7947b89fab5431bf25d48e' + ) t1 ON t1.FMOENTRYID = t0E.FENTRYID + WHERE + t0E.FSRCBILLTYPE ='PLN_PLANORDER' + AND t0E_A.FSTATUS <> 6 + AND t0E.FSALEORDERENTRYID <> 0 + AND t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ) t3 ON t3.FSALEORDERENTRYID = t0E.FENTRYID AND t3.FSALEORDERENTRYSEQ = t0E.FSEQ AND t3.FSRCBILLNO = t0.FBILLNO + LEFT JOIN T_MATERIAL_INVENTORY_MONTH_RECORD t4 ON (t4.FMATERIALID = t0E.FMATERIALID AND t4.RECORDYEAR = @YEAR AND t4.RECORDMONTH = @MONTH and t4.RECORDDAY = @DAY) + LEFT JOIN T_BD_UNIT_L t5_L ON (t5_l.FUNITID = t2S.FSTOREUNITID AND t5_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_UNIT_L t6_L ON (t6_l.FUNITID = t4.FPACKUNITID AND t6_L.FLOCALEID = @LCID) + WHERE + t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/6.存储过程_物料即时库存表_insert.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/6.存储过程_物料即时库存表_insert.sql new file mode 100644 index 0000000..5d12217 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/6.存储过程_物料即时库存表_insert.sql @@ -0,0 +1,43 @@ +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SAVE_MATERIAL_INVENTORY') + DROP PROCEDURE dbo.PROC_SAVE_MATERIAL_INVENTORY; +GO + +CREATE PROCEDURE PROC_SAVE_MATERIAL_INVENTORY + @LCID int + ,@YEAR int + ,@MONTH int + ,@DAY int +AS +BEGIN + DELETE FROM T_MATERIAL_INVENTORY_MONTH_RECORD WHERE RECORDDAY = @DAY AND RECORDMONTH = @MONTH AND RECORDYEAR = @YEAR + + INSERT INTO T_MATERIAL_INVENTORY_MONTH_RECORD + SELECT + T0.FMASTERID + ,T0.FMATERIALID + ,T0.FNUMBER + ,ISNULL(T1.STOCKQTY,0) AS FSTOCKQTY + ,T0P.FLOTYIELD -- 'ÿ' + ,T0P.FPACKUNITCONVERRATIO -- 'װ' + ,T0P.FPACKUNITID -- 'λ' + ,T0.FUSEORGID + ,@YEAR AS RECORDYEAR + ,@MONTH AS RECORDMONTH + ,@DAY AS RECORDDAY + FROM + T_BD_MATERIAL T0 + LEFT JOIN T_BD_MATERIALPRODUCE T0P ON T0P.FMATERIALID = T0.FMATERIALID + LEFT JOIN ( + SELECT + T1.FMATERIALID + ,SUM(T1.FBASEQTY) AS STOCKQTY + FROM + T_STK_INVENTORY T1 + GROUP BY + T1.FMATERIALID + ) T1 ON T0.FMATERIALID = T1.FMATERIALID + WHERE + T0.FDOCUMENTSTATUS = 'C' AND T0.FUSEORGID = 1 + ORDER BY T0.FMATERIALID + +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/7.创建表_生产计划表.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/7.创建表_生产计划表.sql new file mode 100644 index 0000000..14d010d --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/7.创建表_生产计划表.sql @@ -0,0 +1,64 @@ +/* + Navicat Premium Data Transfer + + Source Server : sql server + Source Server Type : SQL Server + Source Server Version : 15002080 + Source Host : .:1433 + Source Catalog : AIS20231110222743 + Source Schema : dbo + + Target Server Type : SQL Server + Target Server Version : 15002080 + File Encoding : 65001 + + Date: 29/12/2023 01:50:37 +*/ + + +-- ---------------------------- +-- Table structure for T_PLAN_PLANPLMRPT +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[T_PLAN_PLANPLMRPT]') AND type IN ('U')) + DROP TABLE [dbo].[T_PLAN_PLANPLMRPT] +GO + +CREATE TABLE [dbo].[T_PLAN_PLANPLMRPT] ( + [FID] int NOT NULL PRIMARY KEY IDENTITY(100000,1), + [FBILLNO] varchar(80) COLLATE Chinese_PRC_CI_AS NULL, + [FMATERIALID] int NULL, + [FENTRYID] int NULL, + [FSEQ] int NULL, + [FNUMBER] nvarchar(80) COLLATE Chinese_PRC_CI_AS NULL, + [FNAME] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [FSPECIFICATION] nvarchar(510) COLLATE Chinese_PRC_CI_AS NULL, + [SHELFLIFE] varchar(50) COLLATE Chinese_PRC_CI_AS NULL, + [StandardLot] varchar(200) COLLATE Chinese_PRC_CI_AS NOT NULL, + [SAFESTOCK] decimal(23,2) NULL, + [FSTOREUNITID] int NULL, + [FSTOREUNITNAME] nvarchar(80) COLLATE Chinese_PRC_CI_AS NULL, + [SAFESTOCKCOUNT] decimal(23,2) NULL, + [FPACKUNITCONVT] nvarchar(200) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FLOTYIELD] int NULL, + [FPACKUNITCONVERRATIO] int NULL, + [FPACKUNITID] int NULL, + [FPACKUNITNAME] nvarchar(80) COLLATE Chinese_PRC_CI_AS NULL, + [M01] decimal(23,2) NULL, + [S01] decimal(23,2) NULL, + [S02] decimal(23,2) NULL, + [S03] decimal(23,2) NULL, + [InProductionQty] decimal(23,2) NULL, + [InStockQty] decimal(23,2) NULL, + [TotalStockQty] decimal(23,2) NULL, + [OrderLotQty] decimal(23,2) NULL, + [FirmLotQty] decimal(23,2) NULL, + [FFirmQty] decimal(23,2) NULL, + [FRECORDDAY] int null, + [FRECORDMONTH] int null, + [FRECORDYEAR] int null +) +GO + +ALTER TABLE [dbo].[T_PLAN_PLANPLMRPT] SET (LOCK_ESCALATION = TABLE) +GO + diff --git a/MonthlyProductionSchedule/SQLServer/自定义函数.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/自定义函数.sql similarity index 91% rename from MonthlyProductionSchedule/SQLServer/自定义函数.sql rename to MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/自定义函数.sql index f49ac23..3e4123f 100644 --- a/MonthlyProductionSchedule/SQLServer/自定义函数.sql +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/完成/自定义函数.sql @@ -7,5 +7,5 @@ select @result = (CASE @coefficient WHEN 0 THEN @cnvNumber ELSE (@cnvNumber/@coefficient) END) -RETURN @result +RETURN ROUND(@result,2) END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_物料库存记录.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_物料库存记录.sql new file mode 100644 index 0000000..e835366 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_物料库存记录.sql @@ -0,0 +1,32 @@ +--DELETE FROM T_MATERIAL_INVENTORY_MONTH_RECORD WHERE RECORDDAY = 27 AND RECORDMONTH = 12 AND RECORDYEAR = 2023 + +INSERT INTO T_MATERIAL_INVENTORY_MONTH_RECORD +SELECT + T0.FMASTERID + ,T0.FMATERIALID + ,T0.FNUMBER + --,T0_L.FNAME + ,ISNULL(T1.STOCKQTY,0) AS FSTOCKQTY + ,T0P.FLOTYIELD -- 'ÿ' + ,T0P.FPACKUNITCONVERRATIO -- 'װ' + ,T0P.FPACKUNITID -- 'λ' + ,T0.FUSEORGID + ,2023 AS RECORDYEAR + ,12 AS RECORDMONTH + ,20 AS RECORDDAY +FROM + T_BD_MATERIAL T0 + LEFT JOIN T_BD_MATERIAL_L T0_L ON (T0_L.FMATERIALID = T0.FMATERIALID AND T0_L.FLOCALEID = 2052) + LEFT JOIN T_BD_MATERIALPRODUCE T0P ON T0P.FMATERIALID = T0.FMATERIALID + LEFT JOIN ( + SELECT + T1.FMATERIALID + ,SUM(T1.FBASEQTY) AS STOCKQTY + FROM + T_STK_INVENTORY T1 + GROUP BY + T1.FMATERIALID + ) T1 ON T0.FMATERIALID = T1.FMATERIALID +WHERE + T0.FDOCUMENTSTATUS = 'C' AND T0.FUSEORGID =1 +ORDER BY T0.FMATERIALID diff --git a/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_生产计划数据.sql b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_生产计划数据.sql new file mode 100644 index 0000000..1222299 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/生产计划表2.0/查询_生产计划数据.sql @@ -0,0 +1,118 @@ + DECLARE @STARTDATE DATE,@ENDDATE DATE,@LCID INT,@YEAR INT,@MONTH INT,@DAY INT + SET @STARTDATE ='2023-12-01' + SET @ENDDATE ='2023-12-31' + SET @LCID = 2052 + SET @YEAR = 2023 + SET @MONTH = 12 + SET @DAY = 20 + + --ȡʱƻIJֵ + SELECT @DAY = (CASE WHEN LTRIM(RTRIM(T0.FPARAMETERS)) = '' THEN @DAY ELSE CAST(T0.FPARAMETERS AS INT) END) FROM T_BAS_SCHEDULEINFO T0 WHERE T0.FSCHEDULETYPEID = '657bf589f52174' + SELECT + t0.FID + ,t0.FBILLNO + ,t0E.FMATERIALID + ,t0E.FENTRYID + ,t0E.FSEQ + ,t2.FNUMBER + ,t2_L.FNAME + ,t2_L.FSPECIFICATION + ,(CASE t2S.FEXPPERIOD + WHEN 0 THEN '' + ELSE + CASE + t2S.FEXPUNIT + WHEN 'Y' THEN + CONVERT ( VARCHAR,CAST((t2S.FEXPPERIOD * 12) AS INT) ) + '' + WHEN 'M' THEN + CONVERT ( VARCHAR,CAST(t2S.FEXPPERIOD AS INT) ) + '' + WHEN 'D' THEN + CONVERT ( VARCHAR, CAST(( + CASE t2S.FEXPPERIOD % 30 WHEN 0 THEN t2S.FEXPPERIOD / 30 ELSE t2S.FEXPPERIOD / 365 * 12 END + ) AS INT)) + '' ELSE '' + END + END) AS 'SHELFLIFE' + ,CONCAT(t2.FLotSize,t5_L.FNAME, '/') AS StandardLot + ,dbo.ToDecimal2(t2S.FSAFESTOCK) AS SAFESTOCK --ȫ + ,t2S.FSTOREUNITID --浥λ + ,t5_L.FNAME AS FSTOREUNITNAME + ,(dbo.PackageValConver(t2S.FSAFESTOCK, t4.FPACKUNITCONVERRATIO)) AS SAFESTOCKCOUNT + ,CONCAT(CONVERT(VARCHAR,dbo.ToDecimal2(t4.FPACKUNITCONVERRATIO)),t5_L.FNAME ,'/' ,t6_L.FNAME) AS FPACKUNITCONVT + ,t4.FLOTYIELD -- 'ÿ' + ,t4.FPACKUNITCONVERRATIO -- 'װ' + ,t4.FPACKUNITID -- 'λ' + ,t6_L.FNAME AS FPACKUNITNAME + ,dbo.PackageValConver(t0E.M01,t4.FPACKUNITCONVERRATIO) as M01 + ,dbo.PackageValConver(t0E.S01,t4.FPACKUNITCONVERRATIO) as S01 + ,dbo.PackageValConver(t0E.S02,t4.FPACKUNITCONVERRATIO) as S02 + ,dbo.PackageValConver(t0E.S03,t4.FPACKUNITCONVERRATIO) as S03 + ,dbo.PackageValConver(ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) ,t4.FPACKUNITCONVERRATIO) AS InProductionQty -- + ,dbo.PackageValConver(ISNULL(t4.FSTOCKQTY,0),t4.FPACKUNITCONVERRATIO) AS InStockQty -- + ,dbo.PackageValConver((ISNULL(t3.FFINISHQTY,0) - ISNULL(t3.FSTOCKINQUASELQTY,0) + ISNULL(t4.FSTOCKQTY,0)),t4.FPACKUNITCONVERRATIO) AS TotalStockQty --ϼ + ,dbo.PackageValConver(t1.FOrderQty,t4.FLOTYIELD) AS OrderLotQty --ƻ + ,dbo.PackageValConver(t1.FFirmQty, t4.FPACKUNITCONVERRATIO) AS FirmLotQty --ȷ + ,dbo.ToDecimal2(t1.FFirmQty) FFirmQty --ȷ + FROM + T_PLN_FORECAST t0 + LEFT JOIN T_PLN_FORECASTENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN ( + SELECT + t1.FMATERIALID + ,t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1_B.FSALEORDERENTRYID + ,sum(t1.FFirmQty) FFirmQty + ,sum(t1.FOrderQty) FOrderQty + FROM + T_PLN_PLANORDER t1 + LEFT JOIN T_PLN_PLANORDER_B t1_B ON t1.FID = t1_B.FID + WHERE t1.FDATASOURCE = 1 AND t1.FCREATEDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t1.FCOMPUTERNO + ,t1.FBILLNO + ,t1.FMATERIALID + ,t1_B.FSALEORDERENTRYID + ) t1 ON t1.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL t2 ON t2.FMATERIALID = t0E.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t2_L ON (t2_L.FMATERIALID = t0E.FMATERIALID AND t2_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_MATERIALSTOCK t2S ON t2S.FMATERIALID = t0E.FMATERIALID + LEFT JOIN ( + SELECT + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ,SUM(t1.FFINISHQTY) AS FFINISHQTY -- + ,SUM(t1.FSTOCKINQUASELQTY) AS FSTOCKINQUASELQTY --ϸƷѡ + FROM + T_PRD_MO t0 + LEFT JOIN T_PRD_MOENTRY t0E ON t0.FID = t0E.FID + LEFT JOIN T_PRD_MOENTRY_A t0E_A ON t0E_A.FENTRYID = t0E.FENTRYID + LEFT JOIN ( + SELECT + t0.FBILLTYPE --50fa7c2eda7947b89fab5431bf25d48e 㱨 e52b554423704173b7306554708a8b05 㱨 + ,t0E.FMOENTRYID + ,t0E.FFINISHQTY + ,t0E_A.FSTOCKINQUASELQTY + FROM + T_PRD_MORPT t0 + LEFT JOIN T_PRD_MORPTENTRY t0E ON t0E.FID = t0.FID + LEFT JOIN T_PRD_MORPTENTRY_A t0E_A ON t0E_A.FID = t0.FID AND t0E_A.FENTRYID = t0E.FENTRYID + WHERE t0.FDOCUMENTSTATUS='C' AND t0.FBILLTYPE = '50fa7c2eda7947b89fab5431bf25d48e' + ) t1 ON t1.FMOENTRYID = t0E.FENTRYID + WHERE + t0E.FSRCBILLTYPE ='PLN_PLANORDER' + AND t0E_A.FSTATUS <> 6 + AND t0E.FSALEORDERENTRYID <> 0 + AND t0.FDATE BETWEEN @STARTDATE AND @ENDDATE + GROUP BY + t0E.FSRCBILLNO + ,t0E.FMATERIALID + ,t0E.FSALEORDERENTRYID + ,t0E.FSALEORDERENTRYSEQ + ) t3 ON t3.FSALEORDERENTRYID = t0E.FENTRYID AND t3.FSALEORDERENTRYSEQ = t0E.FSEQ AND t3.FSRCBILLNO = t0.FBILLNO + LEFT JOIN T_MATERIAL_INVENTORY_MONTH_RECORD t4 ON (t4.FMATERIALID = t0E.FMATERIALID AND t4.RECORDYEAR = @YEAR AND t4.RECORDMONTH = @MONTH and t4.RECORDDAY = @DAY) + LEFT JOIN T_BD_UNIT_L t5_L ON (t5_l.FUNITID = t2S.FSTOREUNITID AND t5_L.FLOCALEID = @LCID) + LEFT JOIN T_BD_UNIT_L t6_L ON (t6_l.FUNITID = t4.FPACKUNITID AND t6_L.FLOCALEID = @LCID) + WHERE + t0.FDATE BETWEEN @STARTDATE AND @ENDDATE \ No newline at end of file