diff --git a/Extensions/DateTimeExtension.cs b/Extensions/DateTimeExtension.cs new file mode 100644 index 0000000..9e59de6 --- /dev/null +++ b/Extensions/DateTimeExtension.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ExtensionMethods +{ + public static class DateTimeExtension + { + public static string ToLongFormat(this DateTime dateTime) + { + return dateTime.ToString("yyyy-MM-dd HH:mm:ss"); + } + + public static string ToShortFormat(this DateTime dateTime) + { + return dateTime.ToString("yyyy-MM-dd"); + } + } +} diff --git a/Extensions/ExtensionMethods.csproj b/Extensions/ExtensionMethods.csproj index 89d985a..e728549 100644 --- a/Extensions/ExtensionMethods.csproj +++ b/Extensions/ExtensionMethods.csproj @@ -40,6 +40,7 @@ + diff --git a/GateDge2023.sln b/GateDge2023.sln index 791d201..3c8132d 100644 --- a/GateDge2023.sln +++ b/GateDge2023.sln @@ -29,6 +29,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonthlyProductionSchedule", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "旭东", "旭东", "{0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "汇威", "汇威", "{42311C80-7B4C-4353-BCA9-4ABD024290C8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kingdee.K3.SCM.Sal.Report.PlugInEx", "Kingdee.K3.SCM.Sal.Report.PlugInEx\Kingdee.K3.SCM.Sal.Report.PlugInEx.csproj", "{01F02D15-2726-4077-80FC-9E38EF29BABC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -63,6 +67,10 @@ Global {86DA044C-9D3B-43BD-8BDB-24B65E152604}.Debug|Any CPU.Build.0 = Debug|Any CPU {86DA044C-9D3B-43BD-8BDB-24B65E152604}.Release|Any CPU.ActiveCfg = Release|Any CPU {86DA044C-9D3B-43BD-8BDB-24B65E152604}.Release|Any CPU.Build.0 = Release|Any CPU + {01F02D15-2726-4077-80FC-9E38EF29BABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01F02D15-2726-4077-80FC-9E38EF29BABC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01F02D15-2726-4077-80FC-9E38EF29BABC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01F02D15-2726-4077-80FC-9E38EF29BABC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -76,6 +84,7 @@ Global {6EE96AB5-8FD3-4A48-912A-CA2AF5B82300} = {2217EA0E-E53F-4ECC-A49D-F38BC743F47A} {A362AFBC-FC73-46A6-9185-15C17E694538} = {56C57ADC-8E92-4340-AC25-B7647758D4EB} {86DA044C-9D3B-43BD-8BDB-24B65E152604} = {A362AFBC-FC73-46A6-9185-15C17E694538} + {01F02D15-2726-4077-80FC-9E38EF29BABC} = {42311C80-7B4C-4353-BCA9-4ABD024290C8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {16F7DBDD-F487-41D6-A856-9E9B7B3F61C5} diff --git a/Kingdee.K3.SCM.Sal.Report.PlugInEx/Class1.cs b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Class1.cs new file mode 100644 index 0000000..2f147f9 --- /dev/null +++ b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Class1.cs @@ -0,0 +1,13 @@ +using Kingdee.K3.SCM.Sal.Report.PlugIn; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Kingdee.K3.SCM.Sal.Report.PlugInEx +{ + public class Class1: SaleOutStockDetailEdit + { + } +} diff --git a/Kingdee.K3.SCM.Sal.Report.PlugInEx/Kingdee.K3.SCM.Sal.Report.PlugInEx.csproj b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Kingdee.K3.SCM.Sal.Report.PlugInEx.csproj new file mode 100644 index 0000000..97b0e65 --- /dev/null +++ b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Kingdee.K3.SCM.Sal.Report.PlugInEx.csproj @@ -0,0 +1,69 @@ + + + + + Debug + AnyCPU + {01F02D15-2726-4077-80FC-9E38EF29BABC} + Library + Properties + Kingdee.K3.SCM.Sal.Report.PlugInEx + Kingdee.K3.SCM.Sal.Report.PlugInEx + v4.5 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.App.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Core.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.DataEntity.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Model.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.BD.Contracts.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.SCM.Sal.Report.PlugIn.dll + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Kingdee.K3.SCM.Sal.Report.PlugInEx/Properties/AssemblyInfo.cs b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e0928a4 --- /dev/null +++ b/Kingdee.K3.SCM.Sal.Report.PlugInEx/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Kingdee.K3.SCM.Sal.Report.PlugInEx")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Kingdee.K3.SCM.Sal.Report.PlugInEx")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("01f02d15-2726-4077-80fc-9e38ef29babc")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs b/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs new file mode 100644 index 0000000..be5cb9b --- /dev/null +++ b/MonthlyProductionSchedule/AutoRecordsInventoryPlugIn.cs @@ -0,0 +1,35 @@ +using Kingdee.BOS; +using Kingdee.BOS.App; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.Core; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ExtensionMethods; + +namespace MonthlyProductionSchedule +{ + [Description("生产计划表-定时任务"), HotUpdate] + public class AutoRecordsInventoryPlugIn : IScheduleService + { + public void Run(Context ctx, Schedule schedule) + { + 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}"); + } + } +} diff --git a/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs index 223d52f..4054c7d 100644 --- a/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs +++ b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs @@ -1,28 +1,55 @@ -using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.App.Data; +using Kingdee.BOS; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.Report.PlugIn; +using Kingdee.BOS.Model.Report; +using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Data; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Runtime.InteropServices.ComTypes; +using System.Security.Cryptography; namespace MonthlyProductionSchedule { [Description("生产计划表-点击事件"), HotUpdate] public class BarItemClickEventPlugIn : AbstractSysReportPlugIn { - public override void ButtonClick(ButtonClickEventArgs e) { if (e.Key.EqualsIgnoreCase("FSaveDataButton")) { base.ButtonClick(e); - var t = this.View.BillBusinessInfo; + var reportModel = this.Model as SysReportModel; //简单帐表对应的Model + + + this.View.ShowMessage("保存数据会覆盖历史数据,是否继续?", MessageBoxOptions.OKCancel, new Action(result => + { + 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(); + + 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)); + + var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_PPL_SaveCurrentData", para); + + reportModel.DataObject["DataBDStatu"] = 1; + } + })); return; } diff --git a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj index 8b8af29..a15f0fd 100644 --- a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj +++ b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj @@ -47,6 +47,14 @@ ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Model.dll + + False + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + + False + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.WebApi.Client.dll + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.BD.Contracts.dll @@ -66,14 +74,25 @@ + + + + + + + + + {50532462-8f7f-455c-b4b3-732ed764e2fa} + ExtensionMethods + \ No newline at end of file diff --git a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs index 8dcaddd..0e4f83e 100644 --- a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs +++ b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs @@ -124,23 +124,27 @@ namespace MonthlyProductionSchedule object resa = 0; var startDate = date.ToString("yyyy-MM-dd"); var endDate = date.AddMonths(1).AddDays(-1); - string sql = $@" -EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Context.UserLocale.LCID} ,'{seqFld}'; -"; - //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("@seqFld", KDDbType.String,seqFld), - // new SqlParam("@HasId", KDDbType.Int32, resa,ParameterDirection.Output) - //}; + // string sql = $@" + //EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Context.UserLocale.LCID} ,'{seqFld}'; + //"; + //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("@seqFld", KDDbType.String,seqFld), + new SqlParam("@year", KDDbType.Int32,year), + new SqlParam("@month", KDDbType.Int32,month), + new SqlParam("@HasId", KDDbType.Int32, resa,ParameterDirection.Output) + }; - //var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_ProductionSchedule", para); - DBUtils.ExecuteDynamicObject(this.Context, sql); + var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_ProductionSchedule", para); //filter.FilterParameter.CustomOption.Add("res", res[0].Value); + filter.FilterParameter.CustomFilter["DataBDStatu"] = res.First(x => x.Name.Equals("@HasId")).Value; } + protected override string GetIdentityFieldIndexSQL(string tableName) { string result = base.GetIdentityFieldIndexSQL(tableName); @@ -183,8 +187,9 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont var _colIndex = 0; ReportHeader header = new ReportHeader(); + header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++); header.AddChild("FNAME", new LocaleValue("产品名称"), _colIndex++); - header.AddChild("ShelfLife", new LocaleValue("有效期"), _colIndex++); + header.AddChild("SHELFLIFE", new LocaleValue("有效期"), _colIndex++); header.AddChild("StandardLot", new LocaleValue("标准批量"), _colIndex++); header.AddChild("FLOTYIELD", new LocaleValue("每批产量"), _colIndex++); header.AddChild("FPACKUNITCONVERRATIO", new LocaleValue("包装规格"), _colIndex++); @@ -217,7 +222,21 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont { result = new ReportTitles(); } - //var t = filter.FilterParameter.CustomOption["res"].Long2Int(); + //数据保存状态 + object saveDataStauts; + dyFilter.TryGetValue("DataBDStatu", out saveDataStauts); + result.AddTitle("FDataBDStatu", saveDataStauts.ToString()); + result.AddTitle("FDataHoldYear", dyFilter["DataHoldYear"].ToString()); + result.AddTitle("FDataHoldMonth", dyFilter["DataHoldMonth"].ToString()); + result.AddTitle("FDataHoldDate", $"{dyFilter["DataHoldYear"]}-{dyFilter["DataHoldMonth"]}"); + //if (saveDataStauts != null) + //{ + // if (saveDataStauts.Long2Int() == 1) + // result.AddTitle("FSaveDataButton", "更新覆盖当月数据"); + // else + // result.AddTitle("FSaveDataButton", "保存当月数据1"); + + //} //result.AddTitle("F_JD_Date", Convert.ToString(dyFilter["F_JD_Date"])); } return result; diff --git a/MonthlyProductionSchedule/SQLServer/即时库存记录.sql b/MonthlyProductionSchedule/SQLServer/即时库存记录.sql new file mode 100644 index 0000000..93a68f3 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/即时库存记录.sql @@ -0,0 +1,80 @@ +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRPLMTMPRTP1111111111') + DROP PROCEDURE dbo.PROC_INQUIRPLMTMPRTP1111111111; +GO + +CREATE PROCEDURE PROC_INQUIRPLMTMPRTP1111111111 + @FRECORDDATE DATETIME + ,@FRECORDYEAR INT + ,@FRECORDMONTH INT +AS +BEGIN + SELECT + AE.FSRCBILLNO + ,AE.FMATERIALID + ,AE.FSALEORDERENTRYID + ,AE.FSALEORDERENTRYSEQ + ,SUM(AE.FQTY) AS FQTY + ,SUM(B.FFINISHQTY) AS FFINISHQTY --已入库数量 + 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' + ) B on B.FMOENTRYID = AE.FENTRYID + RIGHT JOIN ( + SELECT + A.FMATERIALID + ,A.FNUMBER + ,B.FSTOCKORGID + ,B.FLOT + ,SUM(B.FBASEQTY) AS FBASEQTY + ,@FRECORDDATE AS FRECORDDATE + ,@FRECORDYEAR as FRECORDYEAR + ,@FRECORDMONTH as FRECORDMONTH + ,AP.FLOTYIELD -- '每批产量' + ,AP.FPACKUNITCONVERRATIO -- '包装规格' + ,AP.FPACKUNITID -- '单位' + --INTO #TMPRECORD + FROM + T_BD_MATERIAL A + INNER JOIN T_BD_MATERIALPRODUCE AP ON AP.FMATERIALID = A.FMATERIALID + INNER JOIN T_STK_INVENTORY B ON A.FMASTERID = B.FMATERIALID + WHERE + B.FSTOCKORGID = 100038 And A.FDOCUMENTSTATUS = 'C' + GROUP BY + A.FMATERIALID + ,A.FNUMBER + ,B.FSTOCKORGID + ,B.FLOT + ,AP.FLOTYIELD -- '每批产量' + ,AP.FPACKUNITCONVERRATIO -- '包装规格' + ,AP.FPACKUNITID -- '单位' + ) C on C.FMATERIALID = AE.FMATERIALID + WHERE + AE.FSRCBILLTYPE ='PLN_PLANORDER' AND AE_A.FSTATUS <> 6 and AE.FSALEORDERENTRYID <> 0 + GROUP BY + AE.FSRCBILLNO + ,AE.FMATERIALID + ,AE.FSALEORDERENTRYID + ,AE.FSALEORDERENTRYSEQ + + + --ALTER TABLE #TMPRECORD ADD FRECORDDATE DATETIME + --UPDATE #TMPRECORD SET FRECORDDATE = @FRECORDDATE + + --ALTER TABLE #TMPRECORD ADD FRECORDYEAR int DEFAULT 0 + --UPDATE #TMPRECORD SET FRECORDYEAR = @FRECORDYEAR + + --ALTER TABLE #TMPRECORD ADD FRECORDMONTH int DEFAULT 0 + --UPDATE #TMPRECORD SET FRECORDMONTH = @FRECORDMONTH + + SELECT * FROM #TMPRECORD + DROP TABLE #TMPRECORD +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql index da241c1..9a90bf6 100644 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql @@ -4,32 +4,42 @@ IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRE_PLANPLMRPT') GO CREATE PROCEDURE PROC_INQUIRE_PLANPLMRPT - @STARTDATE date - ,@ENDDATE date + @TableName varchar(100) ,@LCID int ,@SeqFld varchar(200) - ,@HasId int output + ,@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 + BEGIN SELECT @HasId = COUNT(A.FID) FROM T_PLAN_PLANPLMRPT A WHERE - A.FDATE BETWEEN @STARTDATE AND @ENDDATE + A.FRECORDMONTH = @month AND A.FRECORDYEAR = @year END - - if @hasId =1 - BEGIN + if @hasId > 0 + begin SELECT - * - INTO #TMPMPS + * + into #TMPMPS FROM T_PLAN_PLANPLMRPT A WHERE - A.FDATE BETWEEN @STARTDATE AND @ENDDATE - END + 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 index 7c6cc2c..9b9edfb 100644 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql @@ -8,56 +8,20 @@ CREATE PROCEDURE PROC_ProductionSchedule ,@ENDDATE date ,@LCID int ,@SeqFld varchar(200) - --,@HasId int output + ,@year int + ,@month int + ,@HasId int output AS BEGIN - DECLARE @HasId int - DECLARE @SQL VARCHAR(2000) 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 @STARTDATE,@ENDDATE,@LCID,@SeqFld, @HasId + EXEC PROC_INQUIRE_PLANPLMRPT @TableName,@LCID,@SeqFld,@year,@month, @HasId END - IF @HasId = 0 + IF @HasId = 0 BEGIN - EXEC PROC_INQUIRPLMTMPRTP @STARTDATE,@ENDDATE,@LCID,@SeqFld - end - - SET @sql = ' - select - t0.FID - ,FENTRYID - ,FBILLNO - ,FMATERIALID - ,FNAME - ,FSPECIFICATION - ,ShelfLife - ,0 AS StandardLot --׼ - --,FLOTYIELD --ÿ - --,FPACKUNITCONVERRATIO -- װ - --,CAST(FPACKUNITCONVERRATIO AS VARCHAR)+STOREUNITNAME+''/''+FPACKUNITNAME as FPACKUNITCONVT --װ - --,FPACKUNITID --λ - ,FSTOREUNITID - ,STOREUNITNAME - ,0 AS SAFESTOCKCOUNT --ȫ- - ,CAST(FSAFESTOCK AS INT) AS SAFESTOCK - ,0 AS M01 - ,0 AS S01 - ,0 AS S02 - ,0 AS S03 - ,0 AS InStockQty - ,0 AS InProductionQty - ,0 AS TotalStockQty - --,(FOrderQty / CP.FPACKUNITCONVERRATIO) AS OrderLotQty -- ''ϵͳƻ'' - --,(FFirmQty / CP.FPACKUNITCONVERRATIO) AS FirmLotQty -- ''ȷϼƻ'' - ,FFirmQty --ȷϼƻ - ,FFirmQty as FirmLotQty --ȷ - ,FOrderQty as OrderLotQty --ƻ - ,'+@SeqFld+' - into '+ @TableName +' From #TMPMPS t0 ' - - EXECUTE(@sql) - - DROP TABLE #TMPMPS + 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 index 5b7f6f2..5850344 100644 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql @@ -4,13 +4,73 @@ IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRPLMTMPRTP') GO CREATE PROCEDURE PROC_INQUIRPLMTMPRTP - @STARTDATE date + @TableName varchar(100) + ,@STARTDATE date ,@ENDDATE date ,@LCID int ,@SeqFld varchar(200) -AS +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' + ) 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 @@ -19,65 +79,102 @@ BEGIN ,C.FNUMBER ,C_L.FNAME ,C_L.FSPECIFICATION - ,(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' + ,(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' --,'' 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' + ,(CASE CP.FPACKUNITCONVERRATIO + WHEN 0 + THEN CS.FSAFESTOCK ELSE (CS.FSAFESTOCK/CP.FPACKUNITCONVERRATIO) + END) AS SAFESTOCKCOUNT + ,CP.FLOTYIELD -- 'ÿ' + ,CP.FPACKUNITCONVERRATIO -- 'װ' + ,CP.FPACKUNITID -- 'λ' + ,AE.M01 + ,AE.S01 + ,AE.S02 + ,AE.S03 + ,(CASE CP.FPACKUNITCONVERRATIO + WHEN 0 + THEN D.FQTY - D.FFINISHQTY ELSE ((D.FQTY - D.FFINISHQTY)/CP.FPACKUNITCONVERRATIO) + END) AS InProductionQty -- + ,(CASE CP.FPACKUNITCONVERRATIO + WHEN 0 + THEN E.FBASEQTY ELSE (E.FBASEQTY/CP.FPACKUNITCONVERRATIO) + END) AS InStockQty -- + ,(CASE CP.FPACKUNITCONVERRATIO + WHEN 0 + THEN (D.FQTY + E.FBASEQTY) ELSE ((D.FQTY + E.FBASEQTY)/CP.FPACKUNITCONVERRATIO) + END) AS TotalStockQty --ϼ + ,(CASE CP.FPACKUNITCONVERRATIO + WHEN 0 + THEN B.FOrderQty ELSE (B.FOrderQty/CP.FPACKUNITCONVERRATIO) + END) AS OrderLotQty --ƻ + ,CS.FSTOREUNITID AS FPACKUNITID -- 'λ' + --, 140 as FLOTYIELD -- 'ÿ' + --,150 as FPACKUNITCONVERRATIO -- 'װ' + --,400 AS SAFESTOCKCOUNT --ȫ + --,'' AS 'M01' + --,'' AS 'S01' + --,'' AS 'S02' + --,'' AS 'S03' ,B.FFirmQty ,B.FOrderQty into #TMPMPS 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 + 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(A.FBASEQTY) AS FBASEQTY + FROM T_STK_INVENTORY A + group by A.FMATERIALID,A.FSTOCKORGID + ) E on E.FMATERIALID = C.FMASTERID AND E.FSTOCKORGID = A.FFOREORGID 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 FSTOREUNITNAME VARCHAR(10) + 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(10) - --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 FPACKUNITNAME VARCHAR(10) + 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(10) + UPDATE T SET T.FPACKUNITCONVT = CONCAT(CONVERT(VARCHAR,T.FPACKUNITCONVERRATIO),T.STOREUNITNAME,'/',T.FPACKUNITNAME) FROM #TMPMPS T + --ѯend + + DECLARE @SQL VARCHAR(2000) + SET @sql = ' + 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/月度计划数据保存.sql new file mode 100644 index 0000000..d7a8cf3 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/月度计划数据保存.sql @@ -0,0 +1,22 @@ + +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_PPL_SaveCurrentData') + DROP PROCEDURE dbo.PROC_PPL_SaveCurrentData; +GO + +CREATE PROCEDURE PROC_PPL_SaveCurrentData + @TableName varchar(100) + ,@FRECORDDATE varchar(20) + ,@FRECORDYEAR INT + ,@FRECORDMONTH INT +AS +BEGIN + DELETE FROM T_PLAN_PLANPLMRPT WHERE FRECORDDATE = @FRECORDYEAR AND FRECORDMONTH = @FRECORDMONTH + + DECLARE @SQL VARCHAR(2000) + SET @sql = ' + SELECT *,'+@FRECORDDATE+' AS FRECORDDATE ,'+@FRECORDYEAR+' AS FRECORDYEAR ,'+@FRECORDMONTH+' AS FRECORDMONTH + INTO T_PLAN_PLANPLMRPT FROM '+@TableName + + EXECUTE(@sql) + +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/自动保存存储过程.sql b/MonthlyProductionSchedule/SQLServer/自动保存存储过程.sql new file mode 100644 index 0000000..5d0679e --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/自动保存存储过程.sql @@ -0,0 +1,27 @@ +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_PPL_AutoSaveCurrentData') + DROP PROCEDURE dbo.PROC_PPL_AutoSaveCurrentData; +GO + +CREATE PROCEDURE PROC_PPL_AutoSaveCurrentData + @TableName varchar(100) + ,@FRECORDDATE datetime + ,@STARTDATE date + ,@ENDDATE date + ,@FRECORDYEAR INT + ,@FRECORDMONTH INT +AS +BEGIN + EXEC PROC_INQUIRPLMTMPRTP @TableName,@STARTDATE,@ENDDATE,2052,' ROW_NUMBER() OVER(ORDER BY t0.FID ) FIDENTITYID ' + + DELETE FROM T_PLAN_PLANPLMRPT WHERE FRECORDDATE = @FRECORDYEAR AND FRECORDMONTH = @FRECORDMONTH + + DECLARE @SQL VARCHAR(2000) + + SET @sql = ' + SELECT *,'+@FRECORDDATE+' AS FRECORDDATE ,'+@FRECORDYEAR+' AS FRECORDYEAR ,'+@FRECORDMONTH+' AS FRECORDMONTH + INTO T_PLAN_PLANPLMRPT FROM '+@TableName + + EXECUTE(@sql) + + execute(N'drop table'+ @TableName) +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/计划生产订单入库数.sql b/MonthlyProductionSchedule/SQLServer/计划生产订单入库数.sql new file mode 100644 index 0000000..6062c24 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/计划生产订单入库数.sql @@ -0,0 +1,38 @@ +SELECT + --A.FID + --,AE.FENTRYID + --,AE.FSALEORDERNO + --,AE.FSRCBILLID + --,AE.FSRCBILLENTRYID + --,AE.FSRCBILLENTRYSEQ + --,AE.FSRCBILLTYPE + --,AE.FSALEORDERID + --,AE_A.FREQSRC + --,AE_A.FCREATETYPE + --,AE_A.FSTATUS --6ѽ᰸ + AE.FSRCBILLNO + ,AE.FMATERIALID + ,AE.FSALEORDERENTRYID + ,AE.FSALEORDERENTRYSEQ + ,SUM(AE.FQTY) AS FQTY + ,SUM(B.FFINISHQTY) AS FFINISHQTY -- +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' + ) B on B.FMOENTRYID = AE.FENTRYID +WHERE + AE.FSRCBILLTYPE ='PLN_PLANORDER' AND AE_A.FSTATUS <> 6 and AE.FSALEORDERENTRYID <> 0 +GROUP BY + AE.FSRCBILLNO + ,AE.FMATERIALID + ,AE.FSALEORDERENTRYID + ,AE.FSALEORDERENTRYSEQ \ No newline at end of file diff --git a/UseGetFmaterialData.zip b/UseGetFmaterialData.zip new file mode 100644 index 0000000..34c1d48 Binary files /dev/null and b/UseGetFmaterialData.zip differ