From ea907261582f16ec55a909ec072d78f957df72ad Mon Sep 17 00:00:00 2001 From: PastSaid <603806070@qq.com> Date: Fri, 15 Dec 2023 09:08:09 +0800 Subject: [PATCH] a --- GateDge2023.sln | 2 + .../BarItemClickEventPlugIn.cs | 31 +++++++ .../MonthlyProductionSchedule.csproj | 3 + .../ProductionPlanRptPlugIn.cs | 49 +++++++---- .../SQLServer/月度生产计划表-存储表.sql | 35 ++++++++ .../SQLServer/月度生产计划表-查询.sql | 63 ++++++++++++++ .../SQLServer/月度生产计划表-预测单.sql | 79 +++-------------- SAL_OUTSTOCK/SAL_OUTSTOCK.csproj | 2 - .../SQLServer/月度生产计划表-预测单.sql | 86 ------------------- SAL_OUTSTOCK/SQLServer/月度生产计划表.sql | 58 ------------- UnitTestProject1/UnitTest1.cs | 4 + .../BeforeSaveEventBillPlugIn.cs | 83 ++++++++++++++++-- .../DataChangedEventFormPlugIn.cs | 1 + 13 files changed, 262 insertions(+), 234 deletions(-) create mode 100644 MonthlyProductionSchedule/BarItemClickEventPlugIn.cs create mode 100644 MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql create mode 100644 MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql delete mode 100644 SAL_OUTSTOCK/SQLServer/月度生产计划表-预测单.sql delete mode 100644 SAL_OUTSTOCK/SQLServer/月度生产计划表.sql diff --git a/GateDge2023.sln b/GateDge2023.sln index 5527a0a..791d201 100644 --- a/GateDge2023.sln +++ b/GateDge2023.sln @@ -27,6 +27,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "月度生产计划", "月 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonthlyProductionSchedule", "MonthlyProductionSchedule\MonthlyProductionSchedule.csproj", "{86DA044C-9D3B-43BD-8BDB-24B65E152604}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "旭东", "旭东", "{0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs new file mode 100644 index 0000000..223d52f --- /dev/null +++ b/MonthlyProductionSchedule/BarItemClickEventPlugIn.cs @@ -0,0 +1,31 @@ +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.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +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; + + return; + } + } + } +} diff --git a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj index 91b1207..8b8af29 100644 --- a/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj +++ b/MonthlyProductionSchedule/MonthlyProductionSchedule.csproj @@ -68,8 +68,11 @@ + + + diff --git a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs index 479479d..8dcaddd 100644 --- a/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs +++ b/MonthlyProductionSchedule/ProductionPlanRptPlugIn.cs @@ -14,6 +14,8 @@ using Kingdee.BOS.Core.List; using Kingdee.BOS.App.Data; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.Util; +using System.Data; namespace MonthlyProductionSchedule @@ -114,16 +116,30 @@ namespace MonthlyProductionSchedule // 默认排序字段:需要从filter中取用户设置的排序字段 string seqFld = string.Format(base.KSQL_SEQ, " t0.FID "); - + var year = filter.FilterParameter.CustomFilter["DataHoldYear"].Long2Int(); + var month = filter.FilterParameter.CustomFilter["DataHoldMonth"].Long2Int(); + var date = new DateTime(year, month, 1); // 取数SQL // FID, FEntryId, 编号、状态、物料、数量、单位、单位精度、单价、价税合计 - - var startDate = "2023-12-01"; - var endDate = "2023-12-31"; + 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) + //}; + + //var res = DBUtils.ExecuteStoreProcedure(this.Context, "PROC_ProductionSchedule", para); DBUtils.ExecuteDynamicObject(this.Context, sql); + //filter.FilterParameter.CustomOption.Add("res", res[0].Value); } protected override string GetIdentityFieldIndexSQL(string tableName) { @@ -135,7 +151,8 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont { base.ExecuteBatch(listSql); } - /// + + /// /// 构建出报表列 /// /// @@ -153,10 +170,14 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont /// ListHeader headChild2 = header.AddChild("FPURMAN", new LocaleValue("采购员")); /// headChild2.Width = width; /// headChild2.Mergeable = true; - /// + /// + /// + /// public override ReportHeader GetReportHeaders(IRptParams filter) { - var date = System.DateTime.Now; + var year = filter.FilterParameter.CustomFilter["DataHoldYear"].Long2Int(); + var month = filter.FilterParameter.CustomFilter["DataHoldMonth"].Long2Int(); + var date = new DateTime(year, month, 1); // FID, FEntryId, var _colIndex = 0; @@ -164,20 +185,20 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont 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++); header.AddChild("FPACKUNITCONVT", new LocaleValue("包装规格"), _colIndex++); header.AddChild("FPACKUNITNAME", new LocaleValue("单位"), _colIndex++); - header.AddChild("ShelfLife", new LocaleValue("安全库存量"), _colIndex++); + header.AddChild("SAFESTOCKCOUNT", new LocaleValue("安全库存量"), _colIndex++); header.AddChild("SAFESTOCK", new LocaleValue("安全库存数量"), _colIndex++); header.AddChild("M01", new LocaleValue("本月预计需求量"), _colIndex++); header.AddChild("S01", new LocaleValue(date.AddMonths(-1).ToString("yyyyMM") + "发货量"), _colIndex++); header.AddChild("S02", new LocaleValue(date.AddMonths(-2).ToString("yyyyMM") + "发货量"), _colIndex++); header.AddChild("S03", new LocaleValue(date.AddMonths(-3).ToString("yyyyMM") + "发货量"), _colIndex++); - header.AddChild("FSPECIFICATION", new LocaleValue("已入库量"), _colIndex++); - header.AddChild("FSPECIFICATION", new LocaleValue("在生产量"), _colIndex++); - header.AddChild("FSPECIFICATION", new LocaleValue("合计入库量"), _colIndex++); + header.AddChild("InStockQty", new LocaleValue("已入库量"), _colIndex++); + header.AddChild("InProductionQty", new LocaleValue("在生产量"), _colIndex++); + header.AddChild("TotalStockQty", new LocaleValue("合计入库量"), _colIndex++); header.AddChild("OrderLotQty", new LocaleValue("系统计划生产批数"), _colIndex++); header.AddChild("FirmLotQty", new LocaleValue("确认计划生产批数"), _colIndex++); header.AddChild("FFirmQty", new LocaleValue("确认计划生产量"), _colIndex++); @@ -189,7 +210,6 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont public override ReportTitles GetReportTitles(IRptParams filter) { var result = base.GetReportTitles(filter); - var date = System.DateTime.Now; DynamicObject dyFilter = filter.FilterParameter.CustomFilter; if (dyFilter != null) { @@ -197,9 +217,8 @@ EXEC PROC_ProductionSchedule '{tableName}','{startDate}','{endDate}', {base.Cont { result = new ReportTitles(); } + //var t = filter.FilterParameter.CustomOption["res"].Long2Int(); //result.AddTitle("F_JD_Date", Convert.ToString(dyFilter["F_JD_Date"])); - - result.AddTitle("FNameLabel", $"{date.AddMonths(-1).ToString("yyyyyMMM")}"); } return result; } diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql new file mode 100644 index 0000000..da241c1 --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-存储表.sql @@ -0,0 +1,35 @@ + +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRE_PLANPLMRPT') + DROP PROCEDURE dbo.PROC_INQUIRE_PLANPLMRPT; +GO + +CREATE PROCEDURE PROC_INQUIRE_PLANPLMRPT + @STARTDATE date + ,@ENDDATE date + ,@LCID int + ,@SeqFld varchar(200) + ,@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 + SELECT + @HasId = COUNT(A.FID) + FROM + T_PLAN_PLANPLMRPT A + WHERE + A.FDATE BETWEEN @STARTDATE AND @ENDDATE + END + + if @hasId =1 + BEGIN + SELECT + * + INTO #TMPMPS + FROM + T_PLAN_PLANPLMRPT A + WHERE + A.FDATE BETWEEN @STARTDATE AND @ENDDATE + END +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql new file mode 100644 index 0000000..7c6cc2c --- /dev/null +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-查询.sql @@ -0,0 +1,63 @@ +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) + --,@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 + END + + 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 +END \ No newline at end of file diff --git a/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql b/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql index c3e5a37..5b7f6f2 100644 --- a/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql +++ b/MonthlyProductionSchedule/SQLServer/月度生产计划表-预测单.sql @@ -1,16 +1,15 @@ -IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_ProductionSchedule') - DROP PROCEDURE dbo.PROC_ProductionSchedule; +IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_INQUIRPLMTMPRTP') + DROP PROCEDURE dbo.PROC_INQUIRPLMTMPRTP; GO -CREATE PROCEDURE PROC_ProductionSchedule - @TableName varchar(100) - ,@STARTDATE date +CREATE PROCEDURE PROC_INQUIRPLMTMPRTP + @STARTDATE date ,@ENDDATE date ,@LCID int ,@SeqFld varchar(200) AS -begin +BEGIN SELECT A.FID @@ -20,15 +19,6 @@ begin ,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 @@ -40,7 +30,7 @@ begin END) AS 'ShelfLife' --,'' AS '׼' ,CS.FSAFESTOCK --ȫ - --,CS.FSTOREUNITID --浥λ + ,CS.FSTOREUNITID --浥λ --,CP.FLOTYIELD -- 'ÿ' --,CP.FPACKUNITCONVERRATIO -- 'װ' --,CP.FPACKUNITCONVERRATIO -- 'װ-' @@ -55,8 +45,8 @@ begin ,'' AS 'S03' ,B.FFirmQty ,B.FOrderQty - ,B.FMATERIALID - FROM + into #TMPMPS + FROM ( SELECT A.FMATERIALID @@ -73,7 +63,7 @@ begin ,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 @@ -86,55 +76,8 @@ begin --µλ 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 + 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; \ No newline at end of file +END \ No newline at end of file diff --git a/SAL_OUTSTOCK/SAL_OUTSTOCK.csproj b/SAL_OUTSTOCK/SAL_OUTSTOCK.csproj index a684788..098ec69 100644 --- a/SAL_OUTSTOCK/SAL_OUTSTOCK.csproj +++ b/SAL_OUTSTOCK/SAL_OUTSTOCK.csproj @@ -73,8 +73,6 @@ - - diff --git a/SAL_OUTSTOCK/SQLServer/月度生产计划表-预测单.sql b/SAL_OUTSTOCK/SQLServer/月度生产计划表-预测单.sql deleted file mode 100644 index 502aa92..0000000 --- a/SAL_OUTSTOCK/SQLServer/月度生产计划表-预测单.sql +++ /dev/null @@ -1,86 +0,0 @@ -DECLARE @DATE DATE,@STARTDATE DATETIME ,@ENDDATE DATETIME -SET @DATE = '2023-12-15' -SELECT - @STARTDATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, @DATE), 0) - ,@ENDDATE = DATEADD(MS,-3, DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(MONTH, 1, @DATE)), 0)) - -DECLARE @LCID INT -SET @LCID = 2052 -SELECT - A.FBILLNO - ,AE.FMATERIALID - ,AE.FENTRYID - ,C_L.FNAME AS 'Ʒ' - ,C_L.FSPECIFICATION AS 'ͺ' - --,(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 'Ч' - --,'' AS '׼' - --,CP.FLOTYIELD AS 'ÿ' - --,CP.FPACKUNITCONVERRATIO AS 'װ' - --,CP.FPACKUNITCONVERRATIO AS 'װ-' - --,CP.FPACKUNITID AS 'λ' - ,CS.FSTOREUNITID AS 'λ' - ,'' AS 'ȫ' - ,CAST(CS.FSAFESTOCK AS INT) AS 'ȫ' - ,AE.FSEQ - --,AE.M01 AS 'Ԥ' - --,AE.S01 AS 'ǰ·' - --,AE.S02 AS 'ǰ·' - --,AE.S03 AS 'ǰһ·' - ,'' AS 'ǰ·' - ,'' AS 'ǰ·' - ,'' AS 'ǰһ·' - --,DE.FSRCBILLNO - --,EE_A.FSTOCKINQUAAUXQTY AS '' - --,'' AS '' - --,(EE_A.FSTOCKINQUAAUXQTY + 0) AS 'ϼƿ' - --,'' AS 'ƻ' - --,(B.PlanQty / CP.FPACKUNITCONVERRATIO)AS 'ϵͳƻ' - --,(B.VerifyQty / CP.FPACKUNITCONVERRATIO) AS 'ȷϼƻ' - ,B.VerifyQty AS 'ȷϼƻ' - --,DE.FREMARK AS 'ע' -FROM - T_PLN_FORECAST A --Ԥⵥ - LEFT JOIN T_PLN_FORECASTENTRY AE ON A.FID = AE.FID - LEFT JOIN ( - SELECT - A.FMATERIALID - ,A_B.FSALEORDERENTRYID - ,SUM(case when A.FRELEASESTATUS = 1 then A.FDemandQty else 0 end) as 'PlanQty' - ,SUM(case when A.FRELEASESTATUS = 2 then A.FDemandQty else 0 end) as 'VerifyQty' - 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 ON B.FSALEORDERENTRYID = AE.FENTRYID - LEFT JOIN T_BD_MATERIAL C ON C.FMATERIALID = AE.FMATERIALID - LEFT JOIN T_BD_MATERIAL_L C_L ON C_L.FMATERIALID = AE.FMATERIALID - LEFT JOIN T_BD_MATERIALSTOCK CS ON CS.FMATERIALID = AE.FMATERIALID - LEFT JOIN T_BD_MATERIALPRODUCE CP ON CP.FMATERIALID = C.FMATERIALID - --LEFT JOIN T_PRD_MOENTRY_LK DE_LK ON DE_LK.FSID = B.FID - --LEFT JOIN T_PRD_MOENTRY DE ON DE.FENTRYID = DE_LK.FENTRYID - --LEFT JOIN T_PRD_MOENTRY EE ON EE.FMATERIALID = B.FMATERIALID -- - --LEFT JOIN T_PRD_MOENTRY_A EE_A ON EE_A.FENTRYID = EE.FENTRYID AND EE.FID =EE_A.FID -- -WHERE - A.FDATE BETWEEN @STARTDATE AND @ENDDATE diff --git a/SAL_OUTSTOCK/SQLServer/月度生产计划表.sql b/SAL_OUTSTOCK/SQLServer/月度生产计划表.sql deleted file mode 100644 index d314d08..0000000 --- a/SAL_OUTSTOCK/SQLServer/月度生产计划表.sql +++ /dev/null @@ -1,58 +0,0 @@ -DECLARE @date date,@startDate datetime ,@endDate datetime -set @date = '2023-07-15' -select - @startDate = dateadd(month, datediff(month, 0, @date), 0) - ,@endDate = dateadd(ms,-3, dateadd(month, datediff(month, 0, dateadd(month, 1, @date)), 0)) -select -@startDate,@endDate - -declare @LCID int -set @LCID = 2052 -SELECT - A.FMATERIALID - ,a.FBILLNO - ,ee.FSRCBILLNO - --,B_L.FNAME AS '产品名称' - ,(CASE - FEXPUNIT - WHEN 'Y' THEN - CONVERT ( VARCHAR, BA.FEXPPERIOD ) + '年' - WHEN 'M' THEN - CONVERT ( VARCHAR, ba.FEXPPERIOD) + '月' - WHEN 'D' THEN - CONVERT ( VARCHAR, ba.FEXPPERIOD ) + '日' ELSE '' - END) as '有效期' - ,'' as '标准批量' - ,'' as '每批产量(件)' - ,'' as '包装规格' - ,'' as '包装规格' - ,a.FUNITID - ,'' as '单位' - --,C_L.FNAME AS '单位' - ,'' as '安全库存量(件)' - ,BA.FSAFESTOCK AS '安全库存数量' - --,DE.M01 AS '本月预计需求量' - --,DE.S01 AS '前三月发货量' - --,DE.S02 AS '前二月发货量' - --,DE.S03 AS '前一月发货量' - ,EE_A.FSTOCKINQUAAUXQTY as '已入库量' - ,'' as '在生产量' - ,(EE_A.FSTOCKINQUAAUXQTY + 0) as '合计库存量' - ,'' as '计划生产批数' - ,DE.FQTY AS '计划生产量' - ,DE.FREMARK AS '备注' -FROM - T_PLN_PLANORDER A --计划订单 - LEFT JOIN T_BD_MATERIAL B ON A.FMATERIALID = B.FMATERIALID --物料 --- LEFT JOIN T_BD_MATERIAL_L B_L ON B_L.FMATERIALID = B.FMATERIALID - LEFT JOIN T_BD_MATERIALSTOCK BA ON BA.FMATERIALID = B.FMATERIALID --- LEFT JOIN T_BD_MATERIALBASE BB ON BB.FMATERIALID = B.FMATERIALID - --LEFT JOIN T_BD_UNIT_L C_L ON C_L.FUNITID = a.FUNITID - LEFT JOIN T_PLN_FORECASTENTRY DE ON DE.FMATERIALID = B.FMATERIALID --预测单 - left join T_PLN_FORECAST d on de.FID = d.FID - LEFT JOIN T_PRD_MOENTRY EE ON EE.FMATERIALID = B.FMATERIALID --生产订单 - LEFT JOIN T_PRD_MOENTRY_A EE_A ON EE_A.FENTRYID = EE.FENTRYID AND EE.FID =EE_A.FID --生产订单 -WHERE - A.FRELEASETYPE = 1 - --AND B_L.FLOCALEID = @LCID - --AND C_L.FLOCALEID = @LCID \ No newline at end of file diff --git a/UnitTestProject1/UnitTest1.cs b/UnitTestProject1/UnitTest1.cs index 00ec73c..36583cc 100644 --- a/UnitTestProject1/UnitTest1.cs +++ b/UnitTestProject1/UnitTest1.cs @@ -14,6 +14,10 @@ namespace UnitTestProject1 object ttt = " "; var dd = ttt.ToDecimalR(); + + var a = 0.00M; + var a2 = 0L; + var f = (a == a2); return; } } diff --git a/UseGetFmaterialData/BeforeSaveEventBillPlugIn.cs b/UseGetFmaterialData/BeforeSaveEventBillPlugIn.cs index 29e8f0a..af30db4 100644 --- a/UseGetFmaterialData/BeforeSaveEventBillPlugIn.cs +++ b/UseGetFmaterialData/BeforeSaveEventBillPlugIn.cs @@ -2,6 +2,7 @@ using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; @@ -25,7 +26,7 @@ namespace UseGetFmaterialData public override void BeforeSave(BeforeSaveEventArgs e) { base.BeforeSave(e); - + this.View.ShowMessage("插件触发了保存前事件:BeforeSave"); if (OrgIdCheck()) { Entity details = null; @@ -37,7 +38,7 @@ namespace UseGetFmaterialData //直接调拨单 明细表 if (this.View.UserParameterKey.Equals("STK_TransferDirect")) details = this.View.BusinessInfo.GetEntity("FBillEntry"); - + IOperationResult opResult = new OperationResult(); if (details != null) { var entrys = this.View.Model.GetEntityDataObject(details); @@ -46,14 +47,35 @@ namespace UseGetFmaterialData { var tempValue2 = this.View.Model.GetValue("FDATE"); var dateValue = tempValue2.IsNullOrEmptyOrWhiteSpace() ? string.Empty : tempValue2.ToString(); + foreach (var entry in entrys) { var rowIndex = this.View.Model.GetRowIndex(details, entry); var tempValue = entry["MaterialId_Id"]; var rowValue = tempValue.IsNullOrEmptyOrWhiteSpace() ? string.Empty : tempValue.ToString(); - UpdReferPriceAndExplain(dateValue, rowValue, rowIndex); + string errMsg = string.Empty; + UpdReferPriceAndExplain(dateValue, rowValue, rowIndex, ref errMsg); + + if (!errMsg.IsNullOrEmpty()) + { + var number = (entry["MaterialId"] as DynamicObject)["Number"]; + opResult.OperateResult.Add(new OperateResult + { + Name = number.ToString(), + Message = errMsg, + SuccessStatus = false + }); + + + } } TotalReferAmount(entrys, details); + + if (opResult.OperateResult.Any()) + { + e.Cancel = true; + this.View.ShowOperateResult(opResult.OperateResult); + } } } } @@ -95,6 +117,7 @@ namespace UseGetFmaterialData try { this.View.Model.SetValue("F_GAT_Decimal1", total); + //参考金额汇总 this.View.Model.SetValue("FTotalReferAmount", total); } catch @@ -102,6 +125,7 @@ namespace UseGetFmaterialData try { this.View.Model.SetValue("FTotalReferAmount", total); + //参考金额汇总 this.View.Model.SetValue("F_GAT_Decimal1", total); } catch { } @@ -131,12 +155,13 @@ namespace UseGetFmaterialData /// 表头日期 /// 子表物料id(物料编码) /// - private void UpdReferPriceAndExplain(string date, string materialId, int row) + private void UpdReferPriceAndExplain(string date, string materialId, int row, ref string errMsg) { + var isHasEmpty = false; var returnFlag = false; if (date.IsNullOrEmptyOrWhiteSpace()) - returnFlag = true; + isHasEmpty = returnFlag = true; if (!returnFlag && (materialId.IsNullOrEmptyOrWhiteSpace() || materialId.Equals("0"))) returnFlag = true; @@ -175,6 +200,52 @@ namespace UseGetFmaterialData //参考方向 this.View.Model.SetValue("FExplain", dataSet[0]["FNOTE"], row); + + if (price == 0 || amount == 0) + { + errMsg = "物料没有找到参考单价与参考金额,或数量为0"; + return; + } + + var cSql = $@" +SELECT top 1 + A.FBILLNO,C.FTAXPRICE +FROM + T_STK_INSTOCK A + INNER JOIN T_STK_INSTOCKENTRY B ON A.FID =B.FID + INNER JOIN T_STK_INSTOCKENTRY_F C ON C.FENTRYID = B.FENTRYID +WHERE + A.FDOCUMENTSTATUS = 'C' + AND A.FCANCELSTATUS = 'A' + AND A.FSTOCKORGID = 101542 + AND B.FMATERIALID = {materialId} + AND FDATE<= '{date}' + AND FAPPROVEDATE <= '{date}' +ORDER BY + FDATE DESC,FAPPROVEDATE DESC "; + + var inDataSet = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{cSql}"); + if (inDataSet.Any()) + { + var taxPrice = inDataSet[0]["FTAXPRICE"].ToDecimalR(); + if (taxPrice == 0) + { + errMsg = "物料没有找到采购入库单单价"; + return; + } + + var xAbs = Math.Abs((price - taxPrice) / taxPrice); + if (xAbs > 0.05M) + { + errMsg = "物料采购入库单价与参考单价相差值不能大于5%"; + return; + } + } + else + { + errMsg = "物料没有找到采购入库单"; + return; + } } else { @@ -186,8 +257,10 @@ namespace UseGetFmaterialData //this.View.Model.SetValue("FReferAmountM", 0, row); //参考方向 this.View.Model.SetValue("FExplain", "没有找到价格", row); + } } + } } } diff --git a/UseGetFmaterialData/DataChangedEventFormPlugIn.cs b/UseGetFmaterialData/DataChangedEventFormPlugIn.cs index 439f943..2ee4245 100644 --- a/UseGetFmaterialData/DataChangedEventFormPlugIn.cs +++ b/UseGetFmaterialData/DataChangedEventFormPlugIn.cs @@ -7,6 +7,7 @@ using Kingdee.BOS.Core.Metadata.Util; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; +using System.Collections.Generic; using System.ComponentModel; using System.Linq; using static System.Net.WebRequestMethods;