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;