diff --git a/01.扩展/HandleUtils/sql/查询字段所在表.sql b/01.扩展/HandleUtils/sql/查询字段所在表.sql
index 6b48018..66e672d 100644
--- a/01.扩展/HandleUtils/sql/查询字段所在表.sql
+++ b/01.扩展/HandleUtils/sql/查询字段所在表.sql
@@ -6,6 +6,6 @@ FROM
syscolumns b
WHERE
a.id= b.id
- AND b.name LIKE '%FSTOCKID'
+ AND b.name LIKE '%FSALUNITID'
AND a.type= 'U'
- AND a.name LIKE 'T_PRD_PPBOM%'
\ No newline at end of file
+ --AND a.name LIKE 'T_PRD_%'
\ No newline at end of file
diff --git a/02.珠海市供水有限公司/ZHSW.Python/PUR_Requisition/BillEventPlugInEx.py b/02.珠海市供水有限公司/ZHSW.Python/PUR_Requisition/BillEventPlugInEx.py
new file mode 100644
index 0000000..5275fff
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW.Python/PUR_Requisition/BillEventPlugInEx.py
@@ -0,0 +1,97 @@
+import clr
+clr.AddReference("System")
+clr.AddReference("Kingdee.BOS")
+clr.AddReference("Kingdee.BOS.Core")
+clr.AddReference("Kingdee.BOS.DataEntity")
+clr.AddReference("Kingdee.BOS.App")
+clr.AddReference("Kingdee.BOS.Contracts")
+clr.AddReference("Kingdee.BOS.ServiceHelper")
+
+from Kingdee.BOS import*
+from Kingdee.BOS.Core import *
+from Kingdee.BOS.Core.Metadata.EntityElement import *
+from Kingdee.BOS.Orm.DataEntity import*
+from Kingdee.BOS.Orm.Metadata.DataEntity import*
+from Kingdee.BOS.Core.DynamicForm.PlugIn import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
+from Kingdee.BOS.Util import *
+from System import *
+from System.ComponentModel import*
+from System.Collections.Generic import*
+from System.Text import*
+from Kingdee.BOS.ServiceHelper import *
+
+def DataChanged(e):
+ if e.Field.Key == "FMaterialId":
+ if DoCheckConditions():
+ if e.NewValue != None and e.NewValue != 0:
+ hasQRCost = this.View.Model.GetValue("FHasQRCost")
+ idlist = [{ "materialId" : e.NewValue , "inRow" : e.Row}]
+ GetcContractAnnualCost(idlist,hasQRCost)
+ else:
+ this.View.Model.SetValue("FTAXPRICE", 0, e.Row)
+ this.View.Model.SetValue("FTAXRATE", 0, e.Row)
+ this.View.InvokeFieldUpdateService("FTAXPRICE" ,e.Row)
+
+ if e.Field.Key == "FHasQRCost":
+ if DoCheckConditions():
+ hasQRCost = e.NewValue
+ entity = this.View.BusinessInfo.GetEntity("FEntity")
+ entrys = this.View.Model.GetEntityDataObject(entity)
+ idlist = list(filter(lambda x:x["materialId"] > 0,map(lambda x:{ "materialId":x["MaterialId_Id"] ,"inRow": x["Seq"] - 1} ,entrys)))
+ GetcContractAnnualCost(idlist,hasQRCost)
+
+def GetcContractAnnualCost(idList,hasQRCost):
+ # whereSql = " AND t0e.F_QNV_BASE1 IN ({0}) ".format(",".join(idList))
+ intoSqlList = List[str]()
+ if idList != None and idList.Count > 0:
+ for idObj in idList:
+ intoSqlList.Add("SELECT {0} AS 'MATERIALID' ,{1} inRow".format(str(idObj["materialId"]),str(idObj["inRow"])));
+
+ sql = """/*dialect*/
+ SELECT *
+ INTO #TMPMATERIALNUM
+ FROM ({0}) tt
+
+ SELECT tt.inRow,ISNULL(t.,0) AS ''
+ ,ISNULL(t.˰,0) AS '˰'
+ ,ISNULL(t.ۺϵ,0) AS 'ۺϵ'
+ ,ISNULL(t.Ĭ˰,0) AS 'Ĭ˰'
+ FROM #TMPMATERIALNUM tt
+ LEFT JOIN (SELECT t0e.FID
+ ,t0e.FENTRYID
+ ,t0.FBILLNO
+ ,t0.F_QNV_TEXT2
+ ,t0e.F_QNV_BASE1 AS ''
+ ,t0e.F_QNV_DECIMAL1 AS '˰'
+ ,t0e.F_QNV_DECIMAL3 AS 'ۺϵ'
+ ,t0e.F_QNV_DATE2 AS 'Ч'
+ ,t0e.F_QNV_DATE3 AS 'ʧЧ'
+ ,t1.FTAXRATE AS 'Ĭ˰'
+ ,ROW_NUMBER() OVER (PARTITION BY t0e.F_QNV_BASE1 ORDER BY t0e.F_QNV_DATE2 DESC) AS 'RN'
+ FROM QNV_t_Cust_Entry100003 t0
+ INNER JOIN QNV_t_Cust_Entry100004 t0e on t0.FID = t0e.FID
+ INNER JOIN T_BD_TAXRATE t1 on t1.FID = t0e.F_QNV_BASE3
+ WHERE 1=1
+ AND t0.FDOCUMENTSTATUS ='C'
+ AND GETDATE() BETWEEN t0e.F_QNV_DATE2 AND t0e.F_QNV_DATE3
+ ) t on t. = tt.MATERIALID AND t.RN = 1
+ WHERE 1 = 1
+
+ """.format(" union ".join(intoSqlList))
+
+ result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
+
+ if result != None and result.Count > 0:
+ priceKey = "ۺϵ" if hasQRCost else "˰"
+ for row in result:
+ rowIndex = row["inRow"]
+ this.View.Model.SetValue("FTAXPRICE", row[priceKey], rowIndex)
+ this.View.Model.SetValue("FTAXRATE", row["Ĭ˰"], rowIndex)
+ this.View.InvokeFieldUpdateService("FTAXPRICE" ,rowIndex)
+
+def DoCheckConditions():
+ orgObj = this.View.Model.GetValue("FApplicationOrgId")
+ if orgObj["Id"] == 101542:
+ return True
+ return False
diff --git a/02.珠海市供水有限公司/ZHSW.Python/ZHSW.Python.pyproj b/02.珠海市供水有限公司/ZHSW.Python/ZHSW.Python.pyproj
new file mode 100644
index 0000000..22e2816
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW.Python/ZHSW.Python.pyproj
@@ -0,0 +1,40 @@
+
+
+ Debug
+ 2.0
+ 0efb3769-37f2-4d7a-9eff-4c1cb749475c
+
+
+
+
+
+
+ .
+ .
+ ZHSW.Python
+ ZHGS.Python
+
+
+ true
+ false
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/02.珠海市供水有限公司/ZHSW.Python/sql/获取合同年度单价.sql b/02.珠海市供水有限公司/ZHSW.Python/sql/获取合同年度单价.sql
new file mode 100644
index 0000000..fb8574c
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW.Python/sql/获取合同年度单价.sql
@@ -0,0 +1,19 @@
+SELECT t.*
+FROM (SELECT t0e.FID
+ ,t0e.FENTRYID
+ ,t0.FBILLNO
+ ,t0.F_QNV_TEXT2
+ ,t0e.F_QNV_BASE1 AS ''
+ ,t0e.F_QNV_DECIMAL1 AS '˰'
+ ,t0e.F_QNV_DECIMAL3 AS 'ۺϵ'
+ ,t0e.F_QNV_DATE2 AS 'Ч'
+ ,t0e.F_QNV_DATE3 AS 'ʧЧ'
+ ,t1.FTAXRATE AS 'Ĭ˰'
+ ,ROW_NUMBER() over(PARTITION BY t0e.F_QNV_BASE1 ORDER BY t0e.F_QNV_DATE2 DESC) AS 'RN'
+FROM QNV_t_Cust_Entry100003 t0
+ INNER JOIN QNV_t_Cust_Entry100004 t0e on t0.FID = t0e.FID
+ INNER JOIN T_BD_TAXRATE t1 on t1.FID = t0e.F_QNV_BASE3
+WHERE 1=1
+ AND t0.FDOCUMENTSTATUS ='C'
+ AND GETDATE() BETWEEN t0e.F_QNV_DATE2 AND t0e.F_QNV_DATE3) t
+WHERE t.RN = 1
\ No newline at end of file
diff --git a/02.珠海市供水有限公司/ZHSW/PUR_Requisition/BillEventPlugInEx.cs b/02.珠海市供水有限公司/ZHSW/PUR_Requisition/BillEventPlugInEx.cs
new file mode 100644
index 0000000..1c0a596
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW/PUR_Requisition/BillEventPlugInEx.cs
@@ -0,0 +1,27 @@
+using Kingdee.BOS.Core.DynamicForm.PlugIn;
+using Kingdee.BOS.Core.Metadata.EntityElement;
+using Kingdee.BOS.JSON;
+using Kingdee.BOS.Util;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+
+namespace ZHGS.PUR_Requisition
+{
+ [Description("根据日期,物料Id更新参考单价、取价方向、参考金额-控件触发、新增加载触发"), HotUpdate]
+ public class BillEventPlugInEx : AbstractDynamicFormPlugIn
+ {
+ public override void AfterBindData(EventArgs e)
+ {
+ base.AfterBindData(e);
+
+ var entity = this.View.BusinessInfo.GetEntity("FEntity");
+ var entrys = this.View.Model.GetEntityDataObject(entity);
+
+ var materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("FAnalyzeMaterialEntity");
+ var materialRows = this.View.Model.GetEntityDataObject(materialEntity);
+ }
+ }
+}
diff --git a/02.珠海市供水有限公司/ZHSW/Properties/AssemblyInfo.cs b/02.珠海市供水有限公司/ZHSW/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3bf5676
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("ZHGS")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ZHGS")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("bf093890-ebf9-485c-a92e-49264b810108")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/02.珠海市供水有限公司/ZHSW/ZHSW.csproj b/02.珠海市供水有限公司/ZHSW/ZHSW.csproj
new file mode 100644
index 0000000..16ff7a1
--- /dev/null
+++ b/02.珠海市供水有限公司/ZHSW/ZHSW.csproj
@@ -0,0 +1,63 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {BF093890-EBF9-485C-A92E-49264B810108}
+ Library
+ Properties
+ ZHSW
+ ZHSW
+ v4.0
+ 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.ServiceHelper.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/HW.PRD_LACKANAYLEBILL.csproj b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/HW.PRD_LACKANAYLEBILL.csproj
new file mode 100644
index 0000000..2b7fd06
--- /dev/null
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/HW.PRD_LACKANAYLEBILL.csproj
@@ -0,0 +1,66 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}
+ Library
+ Properties
+ HW.PRD_LACKANAYLEBILL
+ HW.PRD_LACKANAYLEBILL
+ v4.0
+ 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.BOS.ServiceHelper.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/ProductBomLackAnalyePlugIn.cs b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/ProductBomLackAnalyePlugIn.cs
new file mode 100644
index 0000000..abb5afc
--- /dev/null
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/ProductBomLackAnalyePlugIn.cs
@@ -0,0 +1,149 @@
+using Kingdee.BOS;
+using Kingdee.BOS.Core.DynamicForm.PlugIn;
+using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
+using Kingdee.BOS.Core.Metadata.EntityElement;
+using Kingdee.BOS.Orm.DataEntity;
+using Kingdee.BOS.ServiceHelper;
+using Kingdee.BOS.Util;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace HW.PRD_LACKANAYLEBILL
+{
+ public class ProductBomLackAnalyePlugIn : AbstractDynamicFormPlugIn
+ {
+ public override void OnInitialize(InitializeEventArgs e)
+ {
+ base.OnInitialize(e);
+
+ }
+
+ public override void ButtonClick(ButtonClickEventArgs e)
+ {
+ base.ButtonClick(e);
+ if (e.Key.EndsWith("FToAnalyze", StringComparison.OrdinalIgnoreCase))
+ {
+
+ var materialEntity = this.View.Model.BusinessInfo.GetEntryEntity("FAnalyzeMaterialEntity");
+ var materialRows = this.View.Model.GetEntityDataObject(materialEntity);
+ var row = new DynamicObject(materialEntity.DynamicObjectType);
+ var a = row[""].Long2Int();
+ materialEntity.SeqDynamicProperty.SetValue(row, 1);
+ int num = (int)base.Context.CurrentOrganizationInfo.ID;
+ Entity entryEntity = this.View.Model.BusinessInfo.GetEntryEntity("F_ora_Entity");
+ DynamicObjectCollection entityDataObject = this.View.Model.GetEntityDataObject(entryEntity);
+ this.View.Model.BeginIniti();
+ entityDataObject.Clear();
+ DynamicObjectCollection dynamicObjectCollection = this.View.Model.GetValue("F_ora_Stock") as DynamicObjectCollection;
+ DynamicObject dynamicObject = this.View.Model.GetValue("F_ora_Base") as DynamicObject;
+ DynamicObject dynamicObject2 = this.View.Model.GetValue("F_ora_Base1") as DynamicObject;
+ string text = " AND FSTOCKID IN (";
+ string text2 = "";
+ string text3 = "";
+ string text4 = "";
+ string text5 = "";
+ string text6 = "";
+ if (this.View.Model.GetValue("F_ora_SDate") != null)
+ {
+ text5 = this.View.Model.GetValue("F_ora_SDate").ToString();
+ }
+ if (this.View.Model.GetValue("F_ora_EDate") != null)
+ {
+ text6 = this.View.Model.GetValue("F_ora_EDate").ToString();
+ }
+ if (dynamicObject != null)
+ {
+ text3 = Convert.ToString(dynamicObject["Number"]);
+ }
+ if (dynamicObject2 != null)
+ {
+ text4 = Convert.ToString(dynamicObject2["Number"]);
+ }
+ if (this.View.Model.GetValue("F_ora_HName") != null)
+ {
+ text2 = this.View.Model.GetValue("F_ora_HName").ToString();
+ }
+ HashSet hashSet = new HashSet();
+ if (dynamicObjectCollection.Count > 0)
+ {
+ foreach (DynamicObject dynamicObject3 in dynamicObjectCollection)
+ {
+ long num2 = Convert.ToInt64(dynamicObject3["F_ora_Stock_Id"]);
+ bool flag8 = num2 == 0L;
+ if (!flag8)
+ {
+ bool flag9 = !hashSet.Contains(num2);
+ if (flag9)
+ {
+ text = text + num2 + ",";
+ }
+ }
+ }
+ text += "0)";
+ }
+ else
+ {
+ text = " AND 1=1 ";
+ }
+ string text7 = string.Concat(new string[]
+ {
+ "exec Pro_BOMStockStatusBillEXP '",
+ text3,
+ "','",
+ text4,
+ "','",
+ text,
+ "','",
+ text5,
+ "' ,'",
+ text6,
+ "','",
+ text2,
+ "'"
+ });
+ StringBuilder stringBuilder = new StringBuilder();
+ DynamicObjectCollection dynamicObjectCollection2 = DBServiceHelper.ExecuteDynamicObject(base.Context, text7);
+ bool flag10 = dynamicObjectCollection2.Count > 0;
+ if (flag10)
+ {
+ this.View.Model.BatchCreateNewEntryRow("F_ora_Entity", dynamicObjectCollection2.Count);
+ }
+ int num3 = 0;
+ foreach (DynamicObject dynamicObject4 in dynamicObjectCollection2)
+ {
+ this.Model.SetValue("F_ora_Number", dynamicObject4[1], num3);
+ this.Model.SetValue("F_ora_Name", dynamicObject4[2], num3);
+ this.Model.SetValue("F_ora_Model", dynamicObject4[3], num3);
+ this.Model.SetValue("F_ora_OldNumber", dynamicObject4[4], num3);
+ this.Model.SetValue("F_ora_StartQty", dynamicObject4[5], num3);
+ this.Model.SetValue("F_ora_PoInQty", dynamicObject4[6], num3);
+ this.Model.SetValue("F_ora_AllOutQty", dynamicObject4[7], num3);
+ this.Model.SetValue("F_ora_EndQty", dynamicObject4[8], num3);
+ this.Model.SetValue("F_ora_ZTQty", dynamicObject4[9], num3);
+ this.Model.SetValue("F_ora_ZZQty", dynamicObject4[10], num3);
+ this.Model.SetValue("F_ora_JJQty", dynamicObject4[11], num3);
+ this.Model.SetValue("F_ora_WFQty", dynamicObject4[12], num3);
+ this.Model.SetValue("F_ora_LLQty", dynamicObject4[13], num3);
+ this.Model.SetValue("F_ora_XSCKQty", dynamicObject4[14], num3);
+ this.Model.SetValue("F_ora_DBCKQty", dynamicObject4[15], num3);
+ this.Model.SetValue("F_ora_DBRKQty", dynamicObject4[16], num3);
+ this.Model.SetValue("F_ora_SGWZQty", dynamicObject4[17], num3);
+ this.Model.SetValue("F_ora_SDQty", dynamicObject4[18], num3);
+ this.Model.SetValue("F_ora_ZYQty", dynamicObject4[19], num3);
+ this.Model.SetValue("F_ora_KYKCQty", dynamicObject4[20], num3);
+ this.Model.SetValue("F_ora_StockNumber", dynamicObject4[21], num3);
+ this.Model.SetValue("F_ora_StockName", dynamicObject4[22], num3);
+ this.Model.SetValue("F_ora_Text", dynamicObject4[23], num3);
+ this.Model.SetValue("F_ora_CPNumber", dynamicObject4[24], num3);
+ num3++;
+ }
+ DBServiceHelper.LoadReferenceObject(base.Context, entityDataObject.ToArray(), entityDataObject.DynamicCollectionItemPropertyType, false);
+ this.View.Model.EndIniti();
+ this.View.UpdateView("F_ora_Entity");
+ }
+ }
+ }
+}
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/Properties/AssemblyInfo.cs b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f999b96
--- /dev/null
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("HW.PRD_LACKANAYLEBILL")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HW.PRD_LACKANAYLEBILL")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("b6fd6277-a4da-4fac-bda9-841d51e3d57f")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/aaaa.cs b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/aaaa.cs
new file mode 100644
index 0000000..5b134ba
--- /dev/null
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LACKANAYLEBILL/aaaa.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HW.PRD_LACKANAYLEBILL
+{
+ internal class aaaa
+ {
+ }
+}
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.py b/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.py
index 8b13789..ab773df 100644
--- a/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.py
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.py
@@ -1 +1,305 @@
+import clr
+clr.AddReference("System")
+clr.AddReference("Kingdee.BOS")
+clr.AddReference("Kingdee.BOS.Core")
+clr.AddReference("Kingdee.BOS.DataEntity")
+clr.AddReference("Kingdee.BOS.App")
+clr.AddReference("Kingdee.BOS.Contracts")
+clr.AddReference("Kingdee.BOS.ServiceHelper")
+clr.AddReference("ExtensionMethods")
+from Kingdee.BOS import*
+from Kingdee.BOS.Core import *
+from Kingdee.BOS.Core.Metadata.EntityElement import *
+from Kingdee.BOS.Orm.DataEntity import*
+from Kingdee.BOS.Orm.Metadata.DataEntity import*
+from Kingdee.BOS.Core.DynamicForm.PlugIn import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
+from System import *
+from System.ComponentModel import*
+from System.Collections.Generic import*
+from System.Text import*
+from Kingdee.BOS.ServiceHelper import *
+from ExtensionMethods import BooleanExtension as boolObjEx
+from ExtensionMethods import DateTimeExtension as dateObjEx
+from ExtensionMethods import ObjectExtension as objEx
+from ExtensionMethods import StringExtension as strObjEx
+
+def ButtonClick(e):
+ if e.Key.EndsWith("FToAnalyzeBtn", StringComparison.OrdinalIgnoreCase):
+ proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FAnalyzeProEntity")
+ proRows = this.View.Model.GetEntityDataObject(proEntity)
+ this.View.Model.BeginIniti()
+ if proRows != None and proRows.Count > 0:
+ sDate = this.View.Model.GetValue("FBillSDate")
+ eDate = this.View.Model.GetValue("FBillEDate")
+ proStrList = List[str]();
+
+ for row in proRows:
+ proStrList.Add("SELECT {0} AS 'MATERIALID' ,{1} needNum".format(row["FAnalyzeProId"]["Id"],row["FAnalyzeProQty"]))
+
+ sql = """/*dialect*/
+DECLARE @needNum DECIMAL(23,6)
+,@sDate varchar(100)
+,@eDate varchar(100)
+SET @needNum = 20
+SET @sDate = '{1}'
+SET @eDate = '{2}'
+
+SELECT tt.MATERIALID,SUM(tt.needNum) needNum
+INTO #TMPMATERIALNUM
+FROM ({0}) tt
+GROUP BY tt.MATERIALID
+
+SELECT t0.FMASTERID
+ ,t0.FMATERIALID
+ ,t0.FNUMBER
+ ,t0.FUSEORGID
+ ,t1.needNum AS 'ProMaterialQty'
+ INTO #ProMaterial
+FROM T_BD_MATERIAL t0
+ INNER JOIN #TMPMATERIALNUM t1 on t0.FMATERIALID = t1.MATERIALID
+WHERE t0.FDOCUMENTSTATUS = 'C'
+
+CREATE TABLE #MATERIAL_LACKANALYE(
+ FIDENTITYID int not null default 0
+ ,MaterialId int not null default 0
+ ,BomId int
+ ,ϴ varchar(100) default ''
+ , varchar(100) default ''
+ ,_ decimal(23,6) default 0
+ ,_ʱ decimal(23,6) default 0
+ ,_δ decimal(23,6) default 0
+ ,_ decimal(23,6) default 0
+ ,_ܶ decimal(23,6) default 0
+ ,_; decimal(23,6) default 0
+ ,_ÿ decimal(23,6) default 0
+ ,_ʵ decimal(23,6) default 0
+ ,_ decimal(23,6) default 0
+ ,BOMLEVEL int
+ ,IsProduct int
+ ,ϸϼ int
+)
+
+SELECT t0.FMATERIALID
+ ,ISNULL(t3.sumQTY,0) AS ʱ
+ ,ISNULL(t4.sumBASENOPICKEDQTY,0) AS δ
+ ,ISNULL(t5.sumNoStockInQty,0) AS
+ ,ISNULL(t1. - t1.δ,0) AS 'ܶ'
+ ,ISNULL(t2. - t2.,0) AS ';'
+ ,(ISNULL(t3.sumQTY,0) - ISNULL(t4.sumBASENOPICKEDQTY,0) + ISNULL(t5.sumNoStockInQty,0) - ISNULL(t1. - t1.δ,0) + ISNULL(t2. - t2.,0)) AS 'ÿ'
+ ,ISNULL(t6.,0) AS ''
+ INTO #Material_Stock_Statu
+FROM T_BD_MATERIAL t0
+ LEFT JOIN (
+ SELECT
+ t0e.FMATERIALID,SUM(t0e.FQTY) AS ''
+ ,SUM((t0e_r.FBASEREMAINOUTQTY + t0e_r.FBASERETURNQTY)) AS 'δ'
+ FROM T_SAL_ORDER t0
+ INNER JOIN T_SAL_ORDERENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_SAL_ORDERENTRY_R t0e_r on t0e.FID = t0e_r.FID AND t0e_r.FENTRYID = t0e.FENTRYID
+ WHERE t0.FDOCUMENTSTATUS = 'C'
+ AND t0.FCANCELSTATUS = 'A'
+ AND t0.FCLOSESTATUS = 'A'
+ AND t0.FDATE between @sDate AND @eDate
+ GROUP BY t0e.FMATERIALID
+ ) t1 on t1.FMATERIALID = t0.FMATERIALID
+ LEFT JOIN (
+ SELECT
+ t0e.FMATERIALID,SUM(t0e.FQTY) AS ''
+ ,SUM(t0e_r.FREMAINSTOCKINQTY) AS 'ʣ'
+ ,SUM(t0e_r.FBASESTOCKINQTY) AS ''
+ FROM T_PUR_POORDER t0
+ INNER JOIN T_PUR_POORDERENTRY t0e on t0.FID = t0e.FID AND t0.FBUSINESSTYPE != 'ZCCG' AND t0.FBUSINESSTYPE != 'FYCG'
+ INNER JOIN T_PUR_POORDERENTRY_R t0e_r on t0e.FID = t0e_r.FID AND t0e_r.FENTRYID = t0e.FENTRYID
+ WHERE t0.FDOCUMENTSTATUS = 'C'
+ AND t0.FCANCELSTATUS = 'A'
+ AND t0.FCLOSESTATUS = 'A'
+ AND t0.FDATE BETWEEN @sDate AND @eDate
+ GROUP BY t0e.FMATERIALID
+ ) t2 on t2.FMATERIALID = t0.FMATERIALID
+ LEFT JOIN (
+ SELECT tt0.FMATERIALID,tt0.FSTOCKORGID,SUM(tt0.FBASEQTY) AS sumQTY
+ FROM T_STK_INVENTORY tt0
+ GROUP BY tt0.FMATERIALID,tt0.FSTOCKORGID
+ ) t3 on t3.FMATERIALID = t0.FMASTERID AND t3.FSTOCKORGID = t0.FUSEORGID
+ LEFT JOIN (
+ SELECT t0e.FMATERIALID,SUM(t0e_q.FNOPICKEDQTY) sumBASENOPICKEDQTY
+ FROM T_PRD_PPBOMENTRY t0e
+ INNER JOIN T_PRD_PPBOMENTRY_Q t0e_q on t0e.FENTRYID = t0e_q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_A t0e_a on t0e_a.FENTRYID = t0e.FMOENTRYID
+ WHERE t0e_a.FSTATUS = 4
+ GROUP BY t0e.FMATERIALID
+ ) t4 on t4.FMATERIALID = t0.FMATERIALID
+ LEFT JOIN (
+ SELECT t0e.FMATERIALID,SUM(t0e_q.FNOSTOCKINQTY) AS sumNoStockInQty
+ FROM T_PRD_MOENTRY t0e
+ INNER JOIN T_PRD_MOENTRY_Q t0e_q on t0e.FENTRYID = t0e_q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_A t0e_a on t0e_a.FENTRYID = t0e.FENTRYID
+ WHERE t0e_a.FSTATUS = 4
+ GROUP BY t0e.FMATERIALID
+ ) t5 on t5.FMATERIALID = t0.FMATERIALID
+ LEFT JOIN (
+ SELECT t0e.FMATERIALID,SUM(FBASEUNITQTY-FINSTOCKBASEQTY + FRETURNBASEQTY) AS ''
+ FROM T_PUR_RECEIVE t0
+ INNER JOIN T_PUR_RECEIVEENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_PUR_RECEIVEENTRY_R t0e_r on t0e.FID = t0e_r.FID AND t0e.FENTRYID = t0e_r.FENTRYID
+ INNER JOIN T_PUR_RECEIVEENTRY_S t0e_s on t0e.FID = t0e_s.FID AND t0e.FENTRYID = t0e_s.FENTRYID
+ WHERE t0.FDOCUMENTSTATUS = 'C'
+ AND t0.FCANCELSTATUS = 'A'
+ AND t0.FCLOSESTATUS = 'A'
+ AND t0.FDATE BETWEEN @sDate AND @eDate
+ GROUP BY t0e.FMATERIALID
+ ) t6 on t6.FMATERIALID = t0.FMATERIALID
+WHERE t0.FDOCUMENTSTATUS = 'C'
+ AND t0.FFORBIDSTATUS = 'A'
+
+INSERT INTO #MATERIAL_LACKANALYE
+SELECT
+ ROW_NUMBER() OVER (ORDER BY t0.FMATERIALID)
+ ,t0.FMATERIALID
+ ,t1.FID
+ ,t2.FNUMBER
+ ,t2_l.FNAME
+ ,t0.ProMaterialQty
+ ,t3.ʱ
+ ,t3.δ
+ ,t3.
+ ,t3.ܶ
+ ,t3.;
+ ,t3.ÿ
+ ,(CASE
+ WHEN t3.ÿ > t0.ProMaterialQty THEN 0
+ ELSE t3.ÿ - t0.ProMaterialQty
+ END)
+ ,t3.
+ ,0
+ ,1
+ ,1
+FROM #ProMaterial t0
+ INNER JOIN (
+ SELECT tt.FID,tt.FMATERIALID,ROW_NUMBER() OVER (PARTITION BY tt.FMATERIALID ORDER BY tt.FID DESC) AS 'rn' FROM T_ENG_BOM tt
+ WHERE 1 = 1
+ AND tt.FDOCUMENTSTATUS = 'C'
+ AND tt.FFORBIDSTATUS = 'A'
+ ) t1 on t0.FMATERIALID = t1.FMATERIALID AND t1.rn = 1 --AND t0.FUSEORGID = t1.FUSEORGID
+ INNER JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t1.FMATERIALID AND t2_l.FLOCALEID = 2052
+ LEFT JOIN #Material_Stock_Statu t3 on t1.FMATERIALID = t3.FMATERIALID
+WHERE 1 = 1
+ORDER BY
+ t0.FNUMBER
+
+DECLARE @num INT,@level int,@LoopCount int
+SET @num = 1
+SET @level =0
+SET @LoopCount = 0;
+
+WHILE (@num <> 0 AND @LoopCount < 10)
+BEGIN
+ INSERT INTO #MATERIAL_LACKANALYE(MaterialId,BomId,_,_ʱ,_δ,_,_ܶ,_;,_ÿ,_ʵ,_,BOMLEVEL,ϸϼ,IsProduct)
+ SELECT
+ tt.FMATERIALID
+ ,ISNULL(t2.FID,0) AS BomId
+ ,ABS(tt._)
+ ,t3.ʱ
+ ,t3.δ
+ ,t3.
+ ,t3.ܶ
+ ,t3.;
+ ,t3.ÿ
+ ,(CASE
+ WHEN t3.ÿ > (ABS(tt._) + ISNULL(t4.ϼ_ʵ,0)) THEN 0
+ ELSE t3.ÿ - (ABS(tt._) + ISNULL(t4.ϼ_ʵ,0))
+ END) AS 'ʵ'
+ ,t3.
+ ,@level + 1
+ ,tt.co
+ ,0
+ FROM (
+ SELECT
+ t1.FMATERIALID
+ ,SUM(t0._ʵ * (t1.FNUMERATOR / t1.FDENOMINATOR)) AS '_'
+ ,count(1) co
+ FROM
+ #MATERIAL_LACKANALYE t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.BomId = t1.FID
+ WHERE 1 = 1
+ AND t0.BOMLEVEL = @level
+ GROUP BY t1.FMATERIALID
+ ) tt
+ LEFT JOIN (
+ SELECT tt3.FID,tt3.FNUMBER,tt3.FMATERIALID,ROW_NUMBER() OVER (PARTITION BY tt3.FMATERIALID ORDER BY tt3.FID DESC) AS 'rn'
+ FROM T_ENG_BOM tt3
+ WHERE 1 = 1 AND tt3.FDOCUMENTSTATUS = 'C' AND tt3.FFORBIDSTATUS = 'A'
+ ) t2 ON t2.rn = 1 AND tt.FMATERIALID = t2.FMATERIALID
+ LEFT JOIN #Material_Stock_Statu t3 on t3.FMATERIALID = tt.FMATERIALID
+ LEFT JOIN (
+ SELECT tt.MaterialId,sum(tt._ʵ) AS 'ϼ_ʵ' FROM #MATERIAL_LACKANALYE tt GROUP BY tt.MaterialId
+ ) t4 on t4.MaterialId = tt.FMATERIALID
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+
+END
+
+UPDATE t0 SET
+ t0.ϴ = t1.FNUMBER
+ ,t0. = t1_l.FNAME
+ ,t0.FIDENTITYID = t2.rn
+FROM #MATERIAL_LACKANALYE t0
+ INNER JOIN T_BD_MATERIAL t1 on t0.MaterialId = t1.FMATERIALID
+ INNER JOIN T_BD_MATERIAL_L t1_l on t0.MaterialId = t1_l.FMATERIALID AND t1_l.FLOCALEID = 2052
+ INNER JOIN (SELECT MaterialId,ROW_NUMBER() OVER (ORDER BY bomlevel,ϴ) 'rn' FROM #MATERIAL_LACKANALYE) t2 on t0.MaterialId = t2.MaterialId
+
+SELECT t0.* FROM #MATERIAL_LACKANALYE t0 ORDER BY FIDENTITYID
+
+DROP TABLE #ProMaterial
+DROP TABLE #TMPMATERIALNUM
+DROP TABLE #MATERIAL_LACKANALYE
+DROP TABLE #Material_Stock_Statu
+""".format(" union ".join(proStrList),sDate,eDate)
+
+ proRows.Clear()
+ # this.View.UpdateView("FAnalyzeProEntity");
+ materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("FAnalyzeMaterialEntity")
+ materialRows = this.View.Model.GetEntityDataObject(materialEntity)
+ materialRows.Clear()
+ res = DBServiceHelper.ExecuteDynamicObject(this.Context,sql)
+
+ if res != None and res.Count > 0:
+ for item in res:
+ row = DynamicObject(materialEntity.DynamicObjectType)
+ isPro = item["IsProduct"]
+ matId = item["MaterialId"]
+ matFld = this.View.BillBusinessInfo.GetField("FAnalyzeMaterialId");#ֶԪԪ,ʹֶαʶ
+ matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType)
+ row["FAnalyzeMaterialId_Id"] = matId
+ row["FAnalyzeMaterialId"] = matObj
+ row["FAnalyzeMQty"] = item["_"]
+ row["FStkQty"] = item["_ʱ"]
+ row["FNotIssueQty"] = item["_δ"]
+ row["FInMakingQty"] = item["_"]
+ row["FOrderMQty"] = item["_ܶ"]
+ row["FInTransitQty"] = item["_;"]
+ row["FAvailableQty"] = item["_ÿ"]
+ row["FActualQty"] = item["_ʵ"]
+ row["FDetectionQty"] = item["_"]
+ materialRows.Add(row)
+ if isPro == 1:
+ proRow = DynamicObject(proEntity.DynamicObjectType)
+ proRow["FAnalyzeProId_Id"] = matId
+ proRow["FAnalyzeProId"] = matObj
+ proRow["FAnalyzeProQty"] = item["_"]
+ proRow["FProStkQty"] = item["_ʱ"]
+ proRow["FProNotIssueQty"] = item["_δ"]
+ proRow["FProInMakingQty"] = item["_"]
+ proRow["FProOrderQty"] = item["_ܶ"]
+ proRow["FProInTransitQty"] = item["_;"]
+ proRow["FProAvailableQty"] = item["_ÿ"]
+ proRow["FProActualQty"] = item["_ʵ"]
+ proRows.Add(proRow);
+
+ this.View.UpdateView("FAnalyzeProEntity")
+ this.View.UpdateView("FAnalyzeMaterialEntity")
diff --git a/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.pyproj b/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.pyproj
index 60b01b9..444939c 100644
--- a/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.pyproj
+++ b/03.珠海市汇威精密制造有限公司/HW.PRD_LackAnalyeBill.Python/HW.PRD_LackAnalyeBill.Python.pyproj
@@ -26,6 +26,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py b/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py
new file mode 100644
index 0000000..5c8bcdb
--- /dev/null
+++ b/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py
@@ -0,0 +1,92 @@
+#clrп
+import clr
+#Ӷcloudij
+clr.AddReference('System')
+clr.AddReference('System.Data')
+clr.AddReference('Kingdee.BOS')
+clr.AddReference('Kingdee.BOS.Core')
+clr.AddReference('Kingdee.BOS.App')
+clr.AddReference('Kingdee.BOS.Contracts')
+clr.AddReference('Kingdee.BOS.DataEntity')
+clr.AddReference('Kingdee.BOS.ServiceHelper')
+#dairycloudеijʵռ䵼룬ݹ鵼룩
+from Kingdee.BOS.Core import *
+from Kingdee.BOS.Util import *
+from Kingdee.BOS.Core.Bill import *
+from Kingdee.BOS.Core.Bill.PlugIn import *
+from Kingdee.BOS.Orm.DataEntity import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
+from System import *
+from System.Data import *
+from Kingdee.BOS.App.Data import *
+from System.Collections.Generic import List
+from Kingdee.BOS.ServiceHelper import *
+
+def EndOperationTransaction(e):
+ # 8ύ9126ɾ3
+ if this.FormOperation.OperationId == 8:
+ for data in e.DataEntitys:
+ documentStatus = data["DocumentStatus"]
+ if documentStatus == "C":
+ # entry = data["SaleOrderEntry"]
+ billId = data["Id"]
+ # formId = data["FFormId"]
+ sqlLList = List[str]();
+ # ֪ͨ
+ sqlLList.Add("""/*dialect*/
+UPDATE tt SET tt.F_CYG_TEXT1 = STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t1e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_SAL_DELIVERYNOTICEENTRY tt
+WHERE EXISTS (SELECT 1 FROM T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk WHERE t1e_lk.FSBILLID = {0} AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' AND t1e_lk.FENTRYID = tt.FENTRYID)
+ """.format(billId))
+ # ۳ⵥ
+ sqlLList.Add("""
+UPDATE tt SET tt.F_CYG_TEXT1 = STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e ON t1e.FENTRYID = t1e_lk.FENTRYID --֪ͨ
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk --۳ⵥϵ
+ ON t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ WHERE t2e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_SAL_OUTSTOCKENTRY tt
+WHERE EXISTS (
+ SELECT 1 FROM T_SAL_OUTSTOCKENTRY_LK t2e_lk
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t2e_lk.FSBILLID = t1e.FID AND t2e_lk.FSID = t1e.FENTRYID
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t1e.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t2e_lk.FENTRYID = tt.FENTRYID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY' AND t1e_lk.FSBILLID = {0})
+ """.format(billId))
+ # Ӧյ
+ sqlLList.Add("""
+UPDATE tt SET tt.F_CYG_TEXT1 = STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e ON t1e.FENTRYID = t1e_lk.FENTRYID --֪ͨ
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk --۳ⵥϵ
+ ON t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ INNER JOIN T_SAL_OUTSTOCKENTRY t2e on t2e.FENTRYID = t2e_lk.FENTRYID
+ INNER JOIN T_AR_RECEIVABLEENTRY_LK t3e_lk
+ on t2e.FID = t3e_lk.FSBILLID AND t2e.FENTRYID = t3e_lk.FSID AND t3e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY'
+ WHERE t3e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_AR_RECEIVABLEENTRY tt
+WHERE EXISTS (
+ SELECT 1 FROM T_AR_RECEIVABLEENTRY_LK t3e_lk
+ INNER JOIN T_SAL_OUTSTOCKENTRY t2e on t2e.FID = t3e_lk.FSBILLID AND t2e.FENTRYID = t3e_lk.FSID
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk on t2e.FENTRYID = t2e_lk.FENTRYID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t2e_lk.FSBILLID = t1e.FID AND t2e_lk.FSID = t1e.FENTRYID
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t1e.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t3e_lk.FENTRYID = tt.FENTRYID AND t3e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY' AND t1e_lk.FSBILLID = {0})
+""".format(billId))
+ DBUtils.ExecuteBatch(this.Context,sqlLList,sqlLList.Count);
\ No newline at end of file
diff --git a/05.长园/CYG.Python/SAL_SaleOrder/sql/销售订单保存时更新关联订单信息.sql b/05.长园/CYG.Python/SAL_SaleOrder/sql/销售订单保存时更新关联订单信息.sql
new file mode 100644
index 0000000..8ce7480
--- /dev/null
+++ b/05.长园/CYG.Python/SAL_SaleOrder/sql/销售订单保存时更新关联订单信息.sql
@@ -0,0 +1,81 @@
+--/***********֪ͨstart*********************/
+--UPDATE tt SET tt.F_CYG_TEXT1 =
+SELECT tt.FENTRYID
+ ,STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t1e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_SAL_DELIVERYNOTICEENTRY tt
+WHERE EXISTS (SELECT 1 FROM T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk WHERE t1e_lk.FSBILLID = 100040 AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' AND t1e_lk.FENTRYID = tt.FENTRYID)
+--/***********֪ͨend*********************/
+
+--/***********۳ⵥstart*********************/
+--UPDATE tt SET tt.F_CYG_TEXT1 =
+SELECT tt.FENTRYID
+ ,STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e ON t1e.FENTRYID = t1e_lk.FENTRYID --֪ͨ
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk --۳ⵥϵ
+ ON t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ WHERE t2e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_SAL_OUTSTOCKENTRY tt
+WHERE EXISTS (
+ SELECT 1 FROM T_SAL_OUTSTOCKENTRY_LK t2e_lk
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t2e_lk.FSBILLID = t1e.FID AND t2e_lk.FSID = t1e.FENTRYID
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t1e.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t2e_lk.FENTRYID = tt.FENTRYID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY' AND t1e_lk.FSBILLID = 100040)
+--/***********۳ⵥend*********************/
+
+--/***********Ӧյstart*********************/
+--UPDATE tt SET tt.F_CYG_TEXT1 =
+SELECT tt.FENTRYID
+ ,STUFF((SELECT distinct ','+ t0e.F_CYG_TEXT4
+ FROM T_SAL_ORDERENTRY t0e --۶
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ
+ ON t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e ON t1e.FENTRYID = t1e_lk.FENTRYID --֪ͨ
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk --۳ⵥϵ
+ ON t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ INNER JOIN T_SAL_OUTSTOCKENTRY t2e on t2e.FENTRYID = t2e_lk.FENTRYID
+ INNER JOIN T_AR_RECEIVABLEENTRY_LK t3e_lk
+ on t2e.FID = t3e_lk.FSBILLID AND t2e.FENTRYID = t3e_lk.FSID AND t3e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY'
+ WHERE t3e_lk.FENTRYID = tt.FENTRYID --ƴӹֶ
+ FOR XML PATH('')
+ ),1,1,'') --stuff תкƴ
+FROM T_AR_RECEIVABLEENTRY tt
+WHERE EXISTS (
+ SELECT 1 FROM T_AR_RECEIVABLEENTRY_LK t3e_lk
+ INNER JOIN T_SAL_OUTSTOCKENTRY t2e on t2e.FID = t3e_lk.FSBILLID AND t2e.FENTRYID = t3e_lk.FSID
+ INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk on t2e.FENTRYID = t2e_lk.FENTRYID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t2e_lk.FSBILLID = t1e.FID AND t2e_lk.FSID = t1e.FENTRYID
+ INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t1e.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+ WHERE t3e_lk.FENTRYID = tt.FENTRYID AND t3e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY' AND t1e_lk.FSBILLID = 100040)
+--/***********Ӧյend*********************/
+
+
+--SELECT
+-- t0e.FID
+-- ,t0e.FENTRYID
+-- ,t1e.FENTRYID AS '֪ͨʵid'
+-- ,ISNULL(t2e.FENTRYID, 0) AS '۳ⵥʵid'
+-- ,ISNULL(t3e.FENTRYID, 0) AS 'Ӧյʵid'
+--FROM T_SAL_ORDERENTRY t0e
+-- INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID
+-- AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
+-- INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t1e.FENTRYID = t1e_lk.FENTRYID
+-- INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk on t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID
+-- AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
+-- INNER JOIN T_SAL_OUTSTOCKENTRY t2e on t2e.FENTRYID = t2e_lk.FENTRYID
+-- INNER JOIN T_AR_RECEIVABLEENTRY_LK t3e_lk on t2e.FID = t3e_lk.FSBILLID AND t2e.FENTRYID = t3e_lk.FSID
+-- AND t3e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY'
+-- INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FENTRYID = t3e_lk.FENTRYID
+--WHERE
+-- t0e.FID = 100007
+
diff --git a/05.长园/CYG/CYG.csproj b/05.长园/CYG/CYG.csproj
new file mode 100644
index 0000000..90ecb34
--- /dev/null
+++ b/05.长园/CYG/CYG.csproj
@@ -0,0 +1,46 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}
+ Library
+ Properties
+ CYG
+ CYG
+ v4.0
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/05.长园/CYG/Properties/AssemblyInfo.cs b/05.长园/CYG/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3ac2a67
--- /dev/null
+++ b/05.长园/CYG/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("CYG")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CYG")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("2f638d52-c946-4f1b-89a1-adb47d5fdbd9")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/06.泰诺麦博/Trinomab.Python/Trinomab.Python.pyproj b/06.泰诺麦博/Trinomab.Python/Trinomab.Python.pyproj
new file mode 100644
index 0000000..4be9b9b
--- /dev/null
+++ b/06.泰诺麦博/Trinomab.Python/Trinomab.Python.pyproj
@@ -0,0 +1,33 @@
+
+
+ Debug
+ 2.0
+ f1e2602e-2506-41b1-b696-4ed18316cb07
+ .
+
+
+
+
+ .
+ .
+ Trinomab.Python
+ Trinomab.Python
+
+
+ true
+ false
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/06.泰诺麦博/Trinomab/Properties/AssemblyInfo.cs b/06.泰诺麦博/Trinomab/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..446595f
--- /dev/null
+++ b/06.泰诺麦博/Trinomab/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Trinomab")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Trinomab")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("45c22f98-7aac-465e-b8bb-81a1a320d00a")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/06.泰诺麦博/Trinomab/Trinomab.csproj b/06.泰诺麦博/Trinomab/Trinomab.csproj
new file mode 100644
index 0000000..65a86fa
--- /dev/null
+++ b/06.泰诺麦博/Trinomab/Trinomab.csproj
@@ -0,0 +1,46 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A}
+ Library
+ Properties
+ Trinomab
+ Trinomab
+ v4.0
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/PLAN2.sql b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/PLAN2.sql
index 8a09372..06cf79b 100644
--- a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/PLAN2.sql
+++ b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/PLAN2.sql
@@ -1,4 +1,4 @@
-USE [AIS202401040030]
+USE [AIS202401040030]
GO
/****** Object: StoredProcedure [dbo].[P_UpdatePlan2] Script Date: 2024-01-17 17:38:56 ******/
SET ANSI_NULLS ON
@@ -6,9 +6,9 @@ GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
--- Author:
+-- Author: 阿斌
-- Create date: 2023-05-23
--- Description: ¼ƻϢ
+-- Description: 更新计划订单信息
-- =============================================
ALTER PROCEDURE [dbo].[P_UpdatePlan2]
(
@@ -27,14 +27,14 @@ BEGIN
--SET NOCOUNT ON;
--SELECT
--- A.FBILLNO AS 'ƻ'
--- ,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к'
--- ,A.F_Source_order_number as 'ƻ۶'
--- ,A.F_FORECASTNUMBER as 'ƻԤⵥ'
--- ,A.F_Linenumber as 'ƻԤⵥк'
--- ,E.FBILLNO AS 'Ԥⵥ'
--- ,D.FSEQ,D.F_Source_order_number as 'Ԥⵥ۶'
--- ,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+-- A.FBILLNO AS '计划订单单号'
+-- ,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '计划订单销售订单行号'
+-- ,A.F_Source_order_number as '计划订单销售订单单号'
+-- ,A.F_FORECASTNUMBER as '计划订单预测单单号'
+-- ,A.F_Linenumber as '计划订单预测单行号'
+-- ,E.FBILLNO AS '预测单单号'
+-- ,D.FSEQ,D.F_Source_order_number as '预测单销售订单单号'
+-- ,D.F_SOURCE_ORDER_LINE_NUMBER as '预测单销售订单行号'
--INTO #TEMP1
--FROM T_PLN_PLANORDER A
--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
@@ -50,19 +50,19 @@ BEGIN
-- SELECT
---ƻ, Ԥⵥ,
---'Ԥⵥк'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
---'۶'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶) from #TEMP1 where Ԥⵥ۶<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
---'۶к'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶к) from #TEMP1 where Ԥⵥ۶к<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+--计划订单单号, 预测单单号,
+--'预测单行号'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+--'销售订单单号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单单号) from #TEMP1 where 预测单销售订单单号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+--'销售订单行号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单行号) from #TEMP1 where 预测单销售订单行号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),'')
--into #temp3
-- FROM #TEMP1 t
--- GROUP BY ƻ,Ԥⵥ
+-- GROUP BY 计划订单单号,预测单单号
--- UPDATE T_PLN_PLANORDER SET F_FORECASTNUMBER=B.Ԥⵥ, F_Linenumber=B.Ԥⵥк, F_SOURCE_ORDER_LINE_NUMBER=b.۶к, F_SOURCE_ORDER_NUMBER=b.۶
+-- UPDATE T_PLN_PLANORDER SET F_FORECASTNUMBER=B.预测单单号, F_Linenumber=B.预测单行号, F_SOURCE_ORDER_LINE_NUMBER=b.销售订单行号, F_SOURCE_ORDER_NUMBER=b.销售订单单号
--FROM T_PLN_PLANORDER A
--inner join #temp3 B
---ON A.FBILLNO=B.ƻ
+--ON A.FBILLNO=B.计划订单单号
----inner join #temp2 f on f.fname = a.FBILLNO
@@ -124,12 +124,12 @@ BEGIN
----UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
-----CASE WHEN B. IS NULL THEN ELSE CONCAT(,'-',) END
+----CASE WHEN B.层数 IS NULL THEN 订单号 ELSE CONCAT(订单号,'-',层数) END
---- from T_PLN_PLANORDER A
---- inner join
----(
-----select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
-----A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '' from T_PLN_PLANORDER A
+----select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '层数', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
+----A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '订单号' from T_PLN_PLANORDER A
----INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
----INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
------WHERE a.F_WAUG_LAYER = ''
@@ -141,9 +141,9 @@ BEGIN
-------select a.FBILLNO AS 'ƻ',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к',A.F_Source_order_number as 'ƻ۶'
-------, A.F_FORECASTNUMBER as 'ƻԤⵥ', A.F_Linenumber as 'ƻԤⵥк',
-------E.FBILLNO AS 'Ԥⵥ',D.FSEQ,D.F_Source_order_number as 'Ԥⵥ۶',D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+------select a.FBILLNO AS '计划订单单号',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '计划订单销售订单行号',A.F_Source_order_number as '计划订单销售订单单号'
+------, A.F_FORECASTNUMBER as '计划订单预测单单号', A.F_Linenumber as '计划订单预测单行号',
+------E.FBILLNO AS '预测单单号',D.FSEQ,D.F_Source_order_number as '预测单销售订单单号',D.F_SOURCE_ORDER_LINE_NUMBER as '预测单销售订单行号'
------INTO #TEMP1
------from T_PLN_PLANORDER A
------INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
@@ -157,19 +157,19 @@ BEGIN
------ --select * from #TEMP1
--------
-------UPDATE A SET A.F_FORECASTNUMBER=B.Ԥⵥ,A.F_Linenumber=B.Ԥⵥк,a.F_SOURCE_ORDER_LINE_NUMBER=b.۶к,a.F_SOURCE_ORDER_NUMBER=b.۶
+------UPDATE A SET A.F_FORECASTNUMBER=B.预测单单号,A.F_Linenumber=B.预测单行号,a.F_SOURCE_ORDER_LINE_NUMBER=b.销售订单行号,a.F_SOURCE_ORDER_NUMBER=b.销售订单单号
------FROM T_PLN_PLANORDER A
------inner join
------(
------SELECT
-------ƻ, Ԥⵥ,
-------'Ԥⵥк'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
-------'۶'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶) from #TEMP1 where Ԥⵥ۶<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
-------'۶к'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶к) from #TEMP1 where Ԥⵥ۶к<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+------计划订单单号, 预测单单号,
+------'预测单行号'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+------'销售订单单号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单单号) from #TEMP1 where 预测单销售订单单号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+------'销售订单行号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单行号) from #TEMP1 where 预测单销售订单行号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),'')
------ FROM #TEMP1 t
------- GROUP BY ƻ,Ԥⵥ
+------ GROUP BY 计划订单单号,预测单单号
------) B
-------ON A.FBILLNO=B.ƻ
+------ON A.FBILLNO=B.计划订单单号
------WHERE A.F_FORECASTNUMBER=''
------AND A.FBILLNO = @FBILLNO
diff --git a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
index 0b7eb2a..0cdd553 100644
--- a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
+++ b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
@@ -3,7 +3,7 @@ IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SELECT_UPDATE_BOMLEVEL')
GO
CREATE PROCEDURE PROC_SELECT_UPDATE_BOMLEVEL
- @billnoStr varchar(1000)
+ @billnoStr nvarchar(8000)
AS
BEGIN
CREATE TABLE #TMP_MO --ʱ#TMP
diff --git a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/英博尔测试20240220.sql b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/英博尔测试20240220.sql
index 94bb978..d9813e8 100644
--- a/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/英博尔测试20240220.sql
+++ b/07.珠海英搏尔/Enpower.PRD_MO/SQLserver/英博尔测试20240220.sql
@@ -2,25 +2,38 @@
declare @FBILLNO NVARCHAR(1000)
set @FBILLNO = 'WO2402200045,WO2402200046,WO2402200047'
select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',')
-
-UPDATE B SET FFORECASTGROUP = REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO)
-
-FROM T_PRD_MO A
-INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
-INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
-INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
-INNER JOIN T_PRD_MO E ON E.FID=D.FID
-INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --ײ
-INNER JOIN T_PRD_MOENTRY I ON I.FID=H.FID --ײ㵥
-INNER JOIN T_PRD_MOENTRY_Q J ON J.FSRCSPLITENTRYID=I.FENTRYID
-INNER JOIN T_PRD_MOENTRY K ON K.FENTRYID=J.FENTRYID
-INNER JOIN T_PRD_MO L ON L.FID=K.FID AND SUBSTRING(L.FBILLNO, CHARINDEX('-',L.FBILLNO)+1,LEN(L.FBILLNO)) = SUBSTRING(A.FBILLNO, CHARINDEX('-',A.FBILLNO)+1,LEN(A.FBILLNO))
-inner join #temp2 m on m.Fname=a.FBILLNO
-WHERE 1=1
-AND B.FFORECASTGROUP = ''
-
-
+/*********************************ֶstart*****************************************/
+--UPDATE B SET FFORECASTGROUP = REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO)
+
+--FROM T_PRD_MO A
+--INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+--INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
+--INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
+--INNER JOIN T_PRD_MO E ON E.FID=D.FID
+--INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --ײ
+--INNER JOIN T_PRD_MOENTRY I ON I.FID=H.FID --ײ㵥
+--INNER JOIN T_PRD_MOENTRY_Q J ON J.FSRCSPLITENTRYID=I.FENTRYID
+--INNER JOIN T_PRD_MOENTRY K ON K.FENTRYID=J.FENTRYID
+--INNER JOIN T_PRD_MO L ON L.FID=K.FID AND SUBSTRING(L.FBILLNO, CHARINDEX('-',L.FBILLNO)+1,LEN(L.FBILLNO)) = SUBSTRING(A.FBILLNO, CHARINDEX('-',A.FBILLNO)+1,LEN(A.FBILLNO))
+--inner join #temp2 m on m.Fname=a.FBILLNO
+--WHERE 1=1
+--AND B.FFORECASTGROUP = ''
+
+UPDATE t0e SET t0e.FFORECASTGROUP = REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO)
+--SELECT REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO)
+FROM T_PRD_MO t0
+ INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_PRD_MOENTRY_Q t0e_q on t0e_q.FENTRYID = t0e.FENTRYID
+ INNER JOIN T_PRD_MOENTRY t1e on t1e.FENTRYID = t0e_q.FSRCSPLITENTRYID
+ INNER JOIN T_PRD_MO t2 on t2.FBILLNO = t1e.FFORECASTGROUPFRIST
+ INNER JOIN T_PRD_MOENTRY t2e on t2e.FID = t2.FID
+ INNER JOIN T_PRD_MOENTRY_Q t3e_q on t3e_q.FSRCSPLITENTRYID = t2e.FENTRYID
+ INNER JOIN T_PRD_MOENTRY t3e on t3e.FENTRYID = t3e_q.FENTRYID
+ INNER JOIN T_PRD_MO t3 on t3.FID = t3e.FID AND SUBSTRING(t3.FBILLNO, CHARINDEX('-',t3.FBILLNO)+1,LEN(t3.FBILLNO)) = SUBSTRING(t0.FBILLNO, CHARINDEX('-',t0.FBILLNO)+1,LEN(t0.FBILLNO))
+WHERE 1=1
+ AND t0e.FFORECASTGROUP = ''
+/*********************************ֶend*****************************************/
--2024-01-15 ,ʹÿ洢
exec PROC_SELECT_UPDATE_BOMLEVEL @FBILLNO
diff --git a/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj
new file mode 100644
index 0000000..c3a8e6b
--- /dev/null
+++ b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj
@@ -0,0 +1,39 @@
+
+
+ Debug
+ 2.0
+ e16a75bc-5fb5-47fc-962d-4ad20e686d59
+ .
+
+
+
+
+ .
+ .
+ Enpower.Python
+ Enpower.Python
+
+
+ true
+ false
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower.Python/PRD_MO/OperationEventPlugInEx.py b/07.珠海英搏尔/Enpower.Python/PRD_MO/OperationEventPlugInEx.py
new file mode 100644
index 0000000..914a145
--- /dev/null
+++ b/07.珠海英搏尔/Enpower.Python/PRD_MO/OperationEventPlugInEx.py
@@ -0,0 +1,82 @@
+#clrп
+import clr
+#Ӷcloudij
+clr.AddReference('System')
+clr.AddReference('System.Data')
+# ýstart
+clr.AddReference('Kingdee.BOS')
+clr.AddReference('Kingdee.BOS.App')
+clr.AddReference('Kingdee.BOS.App.Core')
+clr.AddReference('Kingdee.BOS.Business.DynamicForm')
+clr.AddReference('Kingdee.BOS.Contracts')
+clr.AddReference('Kingdee.BOS.Core')
+clr.AddReference('Kingdee.BOS.DataEntity')
+clr.AddReference('Kingdee.BOS.ServiceHelper')
+# ýend
+
+#dairycloudеijʵռ䵼룬ݹ鵼룩
+from System import *
+from System.Data import *
+from System.Collections.Generic import List
+from Kingdee.BOS.Core import *
+from Kingdee.BOS.Util import *
+from Kingdee.BOS.Core.List import *
+from Kingdee.BOS.Core.List.PlugIn import *
+from Kingdee.BOS.Orm.DataEntity import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn import *
+from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
+from Kingdee.BOS.App.Data import *
+from Kingdee.BOS.ServiceHelper import *
+
+# def OnPreparePropertys(e):
+# e.FieldKeys.Add("FWorkTimeType")
+
+def AfterDoOperation(e):
+ # 8ύ9126
+ if e.Operation.Operation == "DoUpdatePPBOMLevel":
+ datas = this.View.SelectedRowsInfo
+ whereSql = ""
+ if datas.Count > 0:
+ whereSql = "AND t0.FID IN({0})".format( ",".join(set(map(lambda x :str(x.PrimaryKeyValue),datas))))
+
+ sql = """/*dialect*/
+UPDATE t0e SET t0e.FFORECASTGROUP = t1e.FFORECASTGROUP
+ ,t0e.FFORECASTGROUPFRIST = CASE
+ WHEN CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0) = 0
+ THEN t1e.FFORECASTGROUP
+ ELSE SUBSTRING(t1e.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0))
+ END
+FROM T_PRD_PPBOM t0
+ INNER JOIN T_PRD_PPBOMENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_PRD_MOENTRY t1e on t1e.FID = t0.FMOID
+WHERE 1 = 1 AND t1e.FFORECASTGROUP != ''
+ AND t0e.FFORECASTGROUP = ''
+ AND t0e.FFORECASTGROUPFRIST != t1e.FFORECASTGROUPFRIST
+ {0} """.format(whereSql)
+ # raise Exception(sql)
+ # count = DBUtils.Execute(this.Context, sql)
+
+# def EndOperationTransaction(e):
+# if this.FormOperation.Operation == "DoUpdatePPBOMLevel":
+# datas = e.DataEntitys;
+# whereSql = ""
+# if datas.Count > 0:
+# whereSql = "AND t0.FID IN({0})".format( ",".join(set(map(lambda x :str(x.Id),datas))))
+
+# sql = """/*dialect*/
+# UPDATE t0e SET t0e.FFORECASTGROUP = t1e.FFORECASTGROUP
+# ,t0e.FFORECASTGROUPFRIST = CASE
+# WHEN CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0) = 0
+# THEN t1e.FFORECASTGROUP
+# ELSE SUBSTRING(t1e.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0))
+# END
+# FROM T_PRD_PPBOM t0
+# INNER JOIN T_PRD_PPBOMENTRY t0e on t0.FID = t0e.FID
+# INNER JOIN T_PRD_MOENTRY t1e on t1e.FID = t0.FMOID
+# WHERE 1 = 1 AND t1e.FFORECASTGROUP != ''
+# AND t0e.FFORECASTGROUP = ''
+# AND t0e.FFORECASTGROUPFRIST != t1e.FFORECASTGROUPFRIST
+# {0}
+# """.format(whereSql)
+
+# raise Exception(sql)
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/Enpower.csproj b/07.珠海英搏尔/Enpower/Enpower.csproj
new file mode 100644
index 0000000..534473f
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/Enpower.csproj
@@ -0,0 +1,67 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}
+ Library
+ Properties
+ Enpower
+ Enpower
+ v4.0
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/PLAN2.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/PLAN2.sql
new file mode 100644
index 0000000..06cf79b
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/PLAN2.sql
@@ -0,0 +1,222 @@
+USE [AIS202401040030]
+GO
+/****** Object: StoredProcedure [dbo].[P_UpdatePlan2] Script Date: 2024-01-17 17:38:56 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+-- =============================================
+-- Author: 阿斌
+-- Create date: 2023-05-23
+-- Description: 更新计划订单信息
+-- =============================================
+ALTER PROCEDURE [dbo].[P_UpdatePlan2]
+(
+ @FBILLNO NVARCHAR(1000)
+)
+
+AS
+BEGIN
+ DECLARE @RC int
+ SET @RC = 1;
+
+ WHILE(@RC >0)
+ BEGIN
+ EXEC @RC = PROC_UPDATE_PLAN_BY_PAGE
+ END
+--SET NOCOUNT ON;
+
+--SELECT
+-- A.FBILLNO AS '计划订单单号'
+-- ,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '计划订单销售订单行号'
+-- ,A.F_Source_order_number as '计划订单销售订单单号'
+-- ,A.F_FORECASTNUMBER as '计划订单预测单单号'
+-- ,A.F_Linenumber as '计划订单预测单行号'
+-- ,E.FBILLNO AS '预测单单号'
+-- ,D.FSEQ,D.F_Source_order_number as '预测单销售订单单号'
+-- ,D.F_SOURCE_ORDER_LINE_NUMBER as '预测单销售订单行号'
+--INTO #TEMP1
+--FROM T_PLN_PLANORDER A
+--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+----inner join #temp2 f on f.fname = a.FBILLNO
+--WHERE A.F_FORECASTNUMBER=''
+----AND A.FBILLNO = @FBILLNO
+----where A.FBILLNO = 'MRP00260726'
+----WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
+
+
+
+-- SELECT
+--计划订单单号, 预测单单号,
+--'预测单行号'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+--'销售订单单号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单单号) from #TEMP1 where 预测单销售订单单号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+--'销售订单行号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单行号) from #TEMP1 where 预测单销售订单行号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),'')
+--into #temp3
+-- FROM #TEMP1 t
+-- GROUP BY 计划订单单号,预测单单号
+
+
+-- UPDATE T_PLN_PLANORDER SET F_FORECASTNUMBER=B.预测单单号, F_Linenumber=B.预测单行号, F_SOURCE_ORDER_LINE_NUMBER=b.销售订单行号, F_SOURCE_ORDER_NUMBER=b.销售订单单号
+--FROM T_PLN_PLANORDER A
+--inner join #temp3 B
+--ON A.FBILLNO=B.计划订单单号
+----inner join #temp2 f on f.fname = a.FBILLNO
+
+
+
+--DROP TABLE #TEMP1
+--DROP TABLE #temp3
+
+
+--UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
+--from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+----inner join #temp2 f on f.fname = a.FBILLNO
+----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
+----AND A.FBILLNO = @FBILLNO
+
+--update a set F_CUSTOMERNAME=d.FCUSTID,F_MATERIALCODE=d.FMATERIALID,F_FORECASTNUMBER=c.FBILLNO,F_Linenumber=d.FSEQ,F_SOURCE_ORDER_LINE_NUMBER=d.F_SOURCE_ORDER_LINE_NUMBER,F_Source_order_number=d.F_Source_order_number
+--FROM T_PLN_PLANORDER A
+--INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID
+--INNER JOIN T_PLN_FORECAST C ON C .FBILLNO = B.FSALEORDERNO
+--INNER JOIN T_PLN_FORECASTENTRY D ON D .FID= C.FID AND D.FSEQ=B.FSALEORDERENTRYSEQ
+----INNER JOIN #temp2 e ON A.FBILLNO = e.Fname
+----WHERE A.FBILLNO = 'MRP00640407'
+
+
+
+----UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+----INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
+----where ( a.F_Remark='' )
+
+
+--UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
+--from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
+--INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+--INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+----inner join #temp2 f on f.fname = a.FBILLNO
+----where ( e.F_DESCRIPTION='' )
+----AND A.FBILLNO = @FBILLNO
+
+
+
+
+
+--UPDATE T_PLN_PLANORDER SET F_Remark=
+-- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+--from T_PLN_PLANORDER A
+----inner join #temp2 f on f.fname = a.FBILLNO
+--where
+--1=1
+----and ( a.F_Remark='' )
+--AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
+----AND A.FBILLNO = @FBILLNO
+
+
+----UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
+----CASE WHEN B.层数 IS NULL THEN 订单号 ELSE CONCAT(订单号,'-',层数) END
+---- from T_PLN_PLANORDER A
+---- inner join
+----(
+----select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '层数', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
+----A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '订单号' from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
+----INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
+------WHERE a.F_WAUG_LAYER = ''
+
+----) B ON A.FID = B.FID
+
+----DROP TABLE #temp2
+
+
+
+
+------select a.FBILLNO AS '计划订单单号',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '计划订单销售订单行号',A.F_Source_order_number as '计划订单销售订单单号'
+------, A.F_FORECASTNUMBER as '计划订单预测单单号', A.F_Linenumber as '计划订单预测单行号',
+------E.FBILLNO AS '预测单单号',D.FSEQ,D.F_Source_order_number as '预测单销售订单单号',D.F_SOURCE_ORDER_LINE_NUMBER as '预测单销售订单行号'
+------INTO #TEMP1
+------from T_PLN_PLANORDER A
+------INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+------INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+------INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+------INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+------WHERE A.F_FORECASTNUMBER=''
+------AND A.FBILLNO = @FBILLNO
+--------where A.FBILLNO = 'MRP00260726'
+--------WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
+
+------ --select * from #TEMP1
+--------
+------UPDATE A SET A.F_FORECASTNUMBER=B.预测单单号,A.F_Linenumber=B.预测单行号,a.F_SOURCE_ORDER_LINE_NUMBER=b.销售订单行号,a.F_SOURCE_ORDER_NUMBER=b.销售订单单号
+------FROM T_PLN_PLANORDER A
+------inner join
+------(
+------SELECT
+------计划订单单号, 预测单单号,
+------'预测单行号'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+------'销售订单单号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单单号) from #TEMP1 where 预测单销售订单单号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),''),
+------'销售订单行号'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), 预测单销售订单行号) from #TEMP1 where 预测单销售订单行号<>'' and 计划订单单号=t.计划订单单号 and 预测单单号 =t.预测单单号 for xml path('')),1,1,''),'')
+------ FROM #TEMP1 t
+------ GROUP BY 计划订单单号,预测单单号
+------) B
+------ON A.FBILLNO=B.计划订单单号
+------WHERE A.F_FORECASTNUMBER=''
+------AND A.FBILLNO = @FBILLNO
+
+
+
+------DROP TABLE #TEMP1
+
+
+----UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+----INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+----INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+----INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
+----AND A.FBILLNO = @FBILLNO
+
+
+------UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+------from T_PLN_PLANORDER A
+------INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+------INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+------INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
+------where ( a.F_Remark='' )
+
+
+----UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
+----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+----where ( e.F_DESCRIPTION='' )
+----AND A.FBILLNO = @FBILLNO
+
+
+
+
+
+----UPDATE T_PLN_PLANORDER SET F_Remark=
+---- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+----from T_PLN_PLANORDER A
+----where
+----1=1
+----and ( a.F_Remark='' )
+----AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
+----AND A.FBILLNO = @FBILLNO
+
+
+
+END
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdatePlan2.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdatePlan2.sql
new file mode 100644
index 0000000..52447d8
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/P_UpdatePlan2.sql
@@ -0,0 +1,223 @@
+USE [AIS20220929093310]
+GO
+/****** Object: StoredProcedure [dbo].[P_UpdatePlan2] Script Date: 2024-03-12 11:36:05 ******/
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+-- =============================================
+-- Author:
+-- Create date: 2023-05-23
+-- Description: ¼ƻϢ
+-- =============================================
+ALTER PROCEDURE [dbo].[P_UpdatePlan2]
+(
+ @FBILLNO NVARCHAR(1000)
+)
+
+AS
+BEGIN
+ EXEC PROC_UPDATE_PLAN_20240120
+ -- SET NOCOUNT ON added to prevent extra result sets from
+ -- interfering with SELECT statements.
+-- SET NOCOUNT ON;
+-- -- EXEC P_UpdatePlan
+
+
+-- select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',')
+
+
+
+
+
+
+--select a.FBILLNO AS 'ƻ',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к',A.F_Source_order_number as 'ƻ۶'
+--, A.F_FORECASTNUMBER as 'ƻԤⵥ', A.F_Linenumber as 'ƻԤⵥк',
+--E.FBILLNO AS 'Ԥⵥ',D.FSEQ,D.F_Source_order_number as 'Ԥⵥ۶',D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+--INTO #TEMP1
+--from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+--inner join #temp2 f on f.fname = a.FBILLNO
+----WHERE A.F_FORECASTNUMBER=''
+----AND A.FBILLNO = @FBILLNO
+----where A.FBILLNO = 'MRP00260726'
+----WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
+
+-- --select * from #TEMP1
+----
+
+
+-- SELECT
+--ƻ, Ԥⵥ,
+--'Ԥⵥк'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
+--'۶'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶) from #TEMP1 where Ԥⵥ۶<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
+--'۶к'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶к) from #TEMP1 where Ԥⵥ۶к<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+--into #temp3
+-- FROM #TEMP1 t
+-- GROUP BY ƻ,Ԥⵥ
+
+
+-- UPDATE T_PLN_PLANORDER SET F_FORECASTNUMBER=B.Ԥⵥ, F_Linenumber=B.Ԥⵥк, F_SOURCE_ORDER_LINE_NUMBER=b.۶к, F_SOURCE_ORDER_NUMBER=b.۶
+--FROM T_PLN_PLANORDER A
+--inner join #temp3 B
+--ON A.FBILLNO=B.ƻ
+--inner join #temp2 f on f.fname = a.FBILLNO
+
+
+
+--DROP TABLE #TEMP1
+--DROP TABLE #temp3
+
+
+--UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
+--from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+--inner join #temp2 f on f.fname = a.FBILLNO
+----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
+----AND A.FBILLNO = @FBILLNO
+
+--update a set F_CUSTOMERNAME=d.FCUSTID,F_MATERIALCODE=d.FMATERIALID,F_FORECASTNUMBER=c.FBILLNO,F_Linenumber=d.FSEQ,F_SOURCE_ORDER_LINE_NUMBER=d.F_SOURCE_ORDER_LINE_NUMBER,F_Source_order_number=d.F_Source_order_number
+--FROM T_PLN_PLANORDER A
+--INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID
+--INNER JOIN T_PLN_FORECAST C ON C .FBILLNO = B.FSALEORDERNO
+--INNER JOIN T_PLN_FORECASTENTRY D ON D .FID= C.FID AND D.FSEQ=B.FSALEORDERENTRYSEQ
+--INNER JOIN #temp2 e ON A.FBILLNO = e.Fname
+----WHERE A.FBILLNO = 'MRP00640407'
+
+
+
+----UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+----INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
+----where ( a.F_Remark='' )
+
+
+--UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
+--from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
+--INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+--INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+--inner join #temp2 f on f.fname = a.FBILLNO
+----where ( e.F_DESCRIPTION='' )
+----AND A.FBILLNO = @FBILLNO
+
+
+
+
+
+--UPDATE T_PLN_PLANORDER SET F_Remark=
+-- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+--from T_PLN_PLANORDER A
+--inner join #temp2 f on f.fname = a.FBILLNO
+--where
+--1=1
+----and ( a.F_Remark='' )
+--AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
+----AND A.FBILLNO = @FBILLNO
+
+
+--UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
+--CASE WHEN B. IS NULL THEN ELSE CONCAT(,'-',) END
+-- from T_PLN_PLANORDER A
+-- inner join
+--(
+--select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
+--A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '' from T_PLN_PLANORDER A
+--INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
+--INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
+----WHERE a.F_WAUG_LAYER = ''
+
+--) B ON A.FID = B.FID
+
+--DROP TABLE #temp2
+
+
+
+
+------select a.FBILLNO AS 'ƻ',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к',A.F_Source_order_number as 'ƻ۶'
+------, A.F_FORECASTNUMBER as 'ƻԤⵥ', A.F_Linenumber as 'ƻԤⵥк',
+------E.FBILLNO AS 'Ԥⵥ',D.FSEQ,D.F_Source_order_number as 'Ԥⵥ۶',D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+------INTO #TEMP1
+------from T_PLN_PLANORDER A
+------INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+------INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+------INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+------INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+------WHERE A.F_FORECASTNUMBER=''
+------AND A.FBILLNO = @FBILLNO
+--------where A.FBILLNO = 'MRP00260726'
+--------WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
+
+------ --select * from #TEMP1
+--------
+------UPDATE A SET A.F_FORECASTNUMBER=B.Ԥⵥ,A.F_Linenumber=B.Ԥⵥк,a.F_SOURCE_ORDER_LINE_NUMBER=b.۶к,a.F_SOURCE_ORDER_NUMBER=b.۶
+------FROM T_PLN_PLANORDER A
+------inner join
+------(
+------SELECT
+------ƻ, Ԥⵥ,
+------'Ԥⵥк'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
+------'۶'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶) from #TEMP1 where Ԥⵥ۶<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),''),
+------'۶к'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶к) from #TEMP1 where Ԥⵥ۶к<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+------ FROM #TEMP1 t
+------ GROUP BY ƻ,Ԥⵥ
+------) B
+------ON A.FBILLNO=B.ƻ
+------WHERE A.F_FORECASTNUMBER=''
+------AND A.FBILLNO = @FBILLNO
+
+
+
+------DROP TABLE #TEMP1
+
+
+----UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+----INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+----INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+----INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
+----AND A.FBILLNO = @FBILLNO
+
+
+------UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+------from T_PLN_PLANORDER A
+------INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+------INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+------INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
+------where ( a.F_Remark='' )
+
+
+----UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
+----from T_PLN_PLANORDER A
+----INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
+----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+----where ( e.F_DESCRIPTION='' )
+----AND A.FBILLNO = @FBILLNO
+
+
+
+
+
+----UPDATE T_PLN_PLANORDER SET F_Remark=
+---- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+----from T_PLN_PLANORDER A
+----where
+----1=1
+----and ( a.F_Remark='' )
+----AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
+----AND A.FBILLNO = @FBILLNO
+
+
+
+END
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM.sql
new file mode 100644
index 0000000..41aeddd
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM.sql
@@ -0,0 +1,49 @@
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID 'Դ'
+ ,t1.FSRCBILLNO 'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,'' BOMLevel
+ /*һʱ*/
+ --INTO #_MO
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID=t0e.FID AND t1e.FINTSUPPLYENTRYID=t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID='PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID=t1.FSRCINTERID AND t2e.FENTRYID=t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+
+ --CREATE INDEX [#PLid] ON #_MO (FSRCINTERID ASC,FSRCENTRYID ASC) /*ͬ*/
+ --CREATE INDEX [#BomId] ON #_MO (FBomId ASC) /*BOM༶չԼײſ*/
+
+ --SELECT FSRCINTERID,FSRCENTRYID,MO2.FBILLNO AS 'ײIJ'
+ --into #n_mo
+ --FROM #_MO MO INNER JOIN T_PRD_MOENTRY MO1 ON MO1.FID=MO.FID AND MO1.FENTRYID=MO.FENTRYID
+ --INNER JOIN T_PRD_MO MO2 ON MO2.FID=MO.FID
+ --CREATE INDEX [#n_mo] ON #n_mo (FSRCINTERID ASC,FSRCENTRYID ASC) /*ͬ*/
+
+ ----update mo set BOMLevel=nmo.ײIJ+'-'+'ֵIJ'
+ ----from #_MO mo left join #n_mo nmo on nmo.FSRCINTERID=mo.FSRCINTERID and nmo.FSRCENTRYID=mo.FSRCENTRYID
+ --/*-------------dbo.GetBomSeqΪֵ洢̣ذֶεı-----------------
+ -- BOM_ID(Ӧ#_MOеFBomId)
+ -- BOM_ID(Ӧ#_MOеMOBomId)
+ --
+ ----------------dbo.GetBomSeqΪֵ洢̣ذֶεı------------------*/
+ ----select dbo.GetBomSeq(7293846,3994919)
+
+ --select * from #_MO
+
+ --DROP TABLE #_MO
+ --DROP TABLE #n_mo
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_创建临时表.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_创建临时表.sql
new file mode 100644
index 0000000..ced761c
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_创建临时表.sql
@@ -0,0 +1,186 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ );
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ --AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO) order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FBOMID =MOBomId
+ ) t0 ON tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ AND t0.ROWID =1
+ AND t0.Billnolen = len(tt.FBILLNO)
+ WHERE
+ tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.FMATERIALID)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID
+ WHERE 1 = 1
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ ROW_NUMBER() over(partition BY TOPID order by FSEQ) AS rowId,
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = t0.TOPBILLNO + t1.showlevel
+ FROM #TMP_MO t0 INNER JOIN #TMP_TOP_BOM_GROUP t1 on t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ --µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ SELECT t0.*,t1.fnumber
+ FROM #TMP_TOP_BOM_GROUP t0 INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+ --WHERE t0.OID = 6339745
+ order by t0.FSEQ,t0.BOMLEVEL
+ SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 AND topbillno='WO2308090009' --ѯʱ
+
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_查询.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_查询.sql
new file mode 100644
index 0000000..055f506
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_查询.sql
@@ -0,0 +1,218 @@
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ ,t0e.FFORECASTGROUPFRIST
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP = '' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ SELECT t0.*
+ ,t0_lk.FSTABLENAME
+ ,t0_lk.FSTABLEID
+ ,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITBILLNO
+ ,t0e_Q.FSRCSPLITID
+ ,t0e_Q.FSRCSPLITSEQ
+ ,t0e_Q.FSRCSPLITENTRYID
+ --INTO #TMP_MO_PART
+ FROM #TMP_MO_GROUP t0
+ LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_选中订单_更新层号_存储过程20240115.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
new file mode 100644
index 0000000..1b3bc9d
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
@@ -0,0 +1,231 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SELECT_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_SELECT_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_SELECT_UPDATE_BOMLEVEL
+ @billnoStr varchar(255)
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+ AND t0.FBILLNO in (SELECT b.billno FROM (SELECT CAST(''+REPLACE(@billnoStr,',','')+'' AS xml) billno ) a OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b ) --Ų
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ --SELECT t0.*
+ -- ,t0_lk.FSTABLENAME
+ -- ,t0_lk.FSTABLEID
+ -- ,t0_lk.FSBILLID
+ -- ,t0_lk.FSID
+ -- ,t0e_Q.FSRCSPLITBILLNO
+ -- ,t0e_Q.FSRCSPLITID
+ -- ,t0e_Q.FSRCSPLITSEQ
+ -- ,t0e_Q.FSRCSPLITENTRYID
+ -- --INTO #TMP_MO_PART
+ -- FROM #TMP_MO_GROUP t0
+ -- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ -- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ -- WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM更新层号_存储过程20240114.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM更新层号_存储过程20240114.sql
new file mode 100644
index 0000000..7b9536e
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/db/生产订单BOM更新层号_存储过程20240114.sql
@@ -0,0 +1,229 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ --SELECT t0.*
+ -- ,t0_lk.FSTABLENAME
+ -- ,t0_lk.FSTABLEID
+ -- ,t0_lk.FSBILLID
+ -- ,t0_lk.FSID
+ -- ,t0e_Q.FSRCSPLITBILLNO
+ -- ,t0e_Q.FSRCSPLITID
+ -- ,t0e_Q.FSRCSPLITSEQ
+ -- ,t0e_Q.FSRCSPLITENTRYID
+ -- --INTO #TMP_MO_PART
+ -- FROM #TMP_MO_GROUP t0
+ -- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ -- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ -- WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程.sql
new file mode 100644
index 0000000..c5fe217
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程.sql
@@ -0,0 +1,148 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_PLAN_BY_PAGE')
+ DROP PROCEDURE dbo.PROC_UPDATE_PLAN_BY_PAGE;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_PLAN_BY_PAGE
+ @ListCount int output
+AS
+BEGIN
+ SET NOCOUNT ON;
+ SET @ListCount = 0;
+ SELECT
+ TOP 5000
+ A.FID
+ ,A.FBILLNO AS 'ƻ'
+ ,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к'
+ ,A.F_SOURCE_ORDER_NUMBER as 'ƻ۶'
+ ,A.F_FORECASTNUMBER as 'ƻԤⵥ'
+ ,A.F_Linenumber as 'ƻԤⵥк'
+ ,E.FBILLNO AS 'Ԥⵥ'
+ ,D.FSEQ,D.F_SOURCE_ORDER_NUMBER as 'Ԥⵥ۶'
+ ,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+ INTO #TEMP1
+ FROM T_PLN_PLANORDER A
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID = C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST E ON E .FID=D.FID
+ WHERE A.F_FORECASTNUMBER = ''
+ --AND A.FBILLNO = @FBILLNO
+ --AND A.FBILLNO = 'MRP00260726'
+
+ SELECT FID
+ INTO #BillNoSet
+ FROM #TEMP1
+ GROUP BY FID
+
+ CREATE INDEX [#BillNoSet_INDEX_FID] ON #BillNoSet(FID);
+
+ SELECT @ListCount = count(1) FROM #BillNoSet
+ --SELECT @ListCount
+ IF(@ListCount > 0)
+ BEGIN
+ SELECT
+ --ƻ
+ t.FID
+ ,Ԥⵥ
+ ,'Ԥⵥк'=ISNULL(stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where ƻ=t.ƻ and Ԥⵥ = t.Ԥⵥ for xml path('')),1,1,''),'')
+ ,'۶'=ISNULL(stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶) from #TEMP1 where Ԥⵥ۶<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+ ,'۶к'=ISNULL(stuff((select distinct ','+CONVERT(nvarchar(100), Ԥⵥ۶к) from #TEMP1 where Ԥⵥ۶к<>'' and ƻ=t.ƻ and Ԥⵥ =t.Ԥⵥ for xml path('')),1,1,''),'')
+ INTO #TEMP3
+ FROM #TEMP1 t
+ WHERE t.Ԥⵥ = ''
+ GROUP BY t.FID,t.Ԥⵥ
+
+ UPDATE T_PLN_PLANORDER
+ SET F_FORECASTNUMBER = B.Ԥⵥ
+ ,F_Linenumber = B.Ԥⵥк
+ ,F_SOURCE_ORDER_LINE_NUMBER = b.۶к
+ ,F_SOURCE_ORDER_NUMBER = b.۶
+ FROM
+ T_PLN_PLANORDER A
+ INNER JOIN #BillNoSet tt ON tt.FID = A.FID
+ INNER JOIN #TEMP3 B ON A.FID=B.FID
+ --inner join #temp2 f on f.fname = a.FBILLNO
+
+ --DROP TABLE #TEMP1
+ DROP TABLE #temp3
+
+ UPDATE A SET
+ A.F_CUSTOMERNAME = D.FCUSTID
+ ,A.F_MATERIALCODE = D.FMATERIALID
+ from
+ T_PLN_PLANORDER A
+ INNER JOIN #BillNoSet tt ON tt.FID = A.FID
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST e on e.fid=d.FID
+ --inner join #temp2 f on f.fname = a.FBILLNO
+ --where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
+ --AND A.FBILLNO = @FBILLNO
+
+ UPDATE A
+ SET F_CUSTOMERNAME = D.FCUSTID
+ ,F_MATERIALCODE = D.FMATERIALID
+ ,F_FORECASTNUMBER = C.FBILLNO
+ ,F_LINENUMBER = D.FSEQ
+ ,F_SOURCE_ORDER_LINE_NUMBER = D.F_SOURCE_ORDER_LINE_NUMBER
+ ,F_SOURCE_ORDER_NUMBER = D.F_SOURCE_ORDER_NUMBER
+ FROM
+ T_PLN_PLANORDER A
+ INNER JOIN #BillNoSet tt ON tt.FID = A.FID
+ INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID
+ INNER JOIN T_PLN_FORECAST C ON C .FBILLNO = B.FSALEORDERNO
+ INNER JOIN T_PLN_FORECASTENTRY D ON D .FID= C.FID AND D.FSEQ=B.FSALEORDERENTRYSEQ
+ --INNER JOIN #temp2 e ON A.FBILLNO = e.Fname
+ --WHERE A.FBILLNO = 'MRP00640407'
+
+ --UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+ --from T_PLN_PLANORDER A
+ --INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+ --INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
+ --INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
+ --where ( a.F_Remark='' )
+
+ UPDATE E SET F_DESCRIPTION = ISNULL(C.FDESCRIPTION ,'' )
+ from T_PLN_PLANORDER A
+ INNER JOIN #BillNoSet tt ON tt.FID = A.FID
+ INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
+ INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
+ INNER JOIN T_PLN_FORECAST_L C ON C.FID = B.FID
+
+ --inner join #temp2 f on f.fname = a.FBILLNO
+ --where ( e.F_DESCRIPTION='' )
+ --AND A.FBILLNO = @FBILLNO
+
+ UPDATE T_PLN_PLANORDER
+ SET F_REMARK = ISNULL( DBO.GETFORECAST(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
+ FROM T_PLN_PLANORDER A
+ INNER JOIN #BillNoSet tt ON tt.FID = A.FID
+ --inner join #temp2 f on f.fname = a.FBILLNO
+ WHERE 1=1
+ --and ( a.F_Remark='' )
+ --AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = CONVERT(nvarchar(100),GETDATE(),23)
+ AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = CONVERT(nvarchar(100),'2024-01-17',23)
+ --AND A.FBILLNO = @FBILLNO
+
+ --UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
+ --CASE WHEN B. IS NULL THEN ELSE CONCAT(,'-',) END
+ -- from T_PLN_PLANORDER A
+ -- inner join
+ --(
+ --select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
+ --A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '' from T_PLN_PLANORDER A
+ --INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
+ --INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
+ ----WHERE a.F_WAUG_LAYER = ''
+
+ --) B ON A.FID = B.FID
+
+ --DROP TABLE #temp2
+ END
+
+ DROP TABLE #TEMP1
+ DROP TABLE #BillNoSet
+
+ SET NOCOUNT OFF
+END
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程_20240120.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程_20240120.sql
new file mode 100644
index 0000000..528eadf
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/更新计划订单_预测单信息_存储过程_20240120.sql
@@ -0,0 +1,187 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_PLAN_20240120')
+ DROP PROCEDURE dbo.PROC_UPDATE_PLAN_20240120;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_PLAN_20240120
+AS
+BEGIN
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t2.FID 'FORECAST_ID'
+ ,t2e.FENTRYID 'FORECASTENTRY_ID'
+ ,t2.FBILLNO 'F_FORECASTNUMBER'
+ ,t2e.FSEQ 'F_LINENUMBER'
+ ,t2e.FCUSTID 'F_CUSTOMERNAME'
+ ,t2e.FMATERIALID 'F_MATERIALCODE' --Ԥⵥid
+ ,t2e.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t2e.F_SOURCE_ORDER_NUMBER --۶#
+ ,t0.F_REMARK
+ INTO #TEMP_PLANORDER_ID_LIST
+ FROM T_PLN_PLANORDER t0
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0.FID
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID = t1e.FID
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FENTRYID = t1.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST t2 on t2.fid = t2e.FID
+ WHERE 1 = 1
+ AND t0.F_FORECASTNUMBER = ''
+ --AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
+
+ CREATE INDEX #TEMP_PLANORDER_ID_LIST_INDEX_FID ON #TEMP_PLANORDER_ID_LIST(FID);
+
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.FORECASTENTRY_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_LINENUMBER
+ ,t0.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE --Ԥⵥid
+ ,t0.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t0.F_SOURCE_ORDER_NUMBER --۶#
+ ,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION
+ --,t1_l.FDESCRIPTION F_DESCRIPTION
+ ,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --屸ע
+ --,t1e_l.FDESCRIPTION F_REMARK
+ ,t2.FNUMBER 'MATERIAL_NUMBER'
+ ,t2_l.FNAME 'MATERIAL_NAME'
+ ,t3.TOTAL
+ INTO #TEMP_PLANORDER_RESERVELINK
+
+ FROM #TEMP_PLANORDER_ID_LIST t0
+ INNER JOIN (SELECT FID,COUNT(1) TOTAL FROM #TEMP_PLANORDER_ID_LIST GROUP BY FID ) t3 on t3.FID = t0.FID
+ LEFT JOIN T_PLN_FORECAST_L t1_l on t0.FORECAST_ID = t1_l.FID AND t1_l.FLOCALEID = 2052
+ LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0.FORECASTENTRY_ID AND t1e_l.FLOCALEID = 2052
+ LEFT JOIN T_BD_MATERIAL t2 on t0.F_MATERIALCODE = t2.FMATERIALID
+ LEFT JOIN T_BD_MATERIAL_L t2_l on t0.F_MATERIALCODE = t2_l.FMATERIALID AND t2_l.FLOCALEID = 2052
+ WHERE 1=1
+ --AND t0.F_FORECASTNUMBER = ''
+
+ CREATE INDEX #TEMP_PLANORDER_RESERVELINK_INDEX ON #TEMP_PLANORDER_RESERVELINK(FID);
+
+ --ƻ һԴ---
+ UPDATE t0
+ SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
+ ,t0.F_LINENUMBER = tt.F_LINENUMBER
+ ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
+ ,t0.F_REMARK = tt.F_REMARK
+ ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
+ ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
+ FROM T_PLN_PLANORDER t0
+ INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0.FID = tt.FID AND tt.TOTAL = 1
+
+ --ƻչ һԴ---
+ UPDATE t0_l
+ SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
+ FROM T_PLN_PLANORDER_L t0_l
+ INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0_l.FID = tt.FID AND tt.TOTAL = 1
+
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.FORECASTENTRY_ID
+ ,t0.F_FORECASTNUMBER
+ ,DENSE_RANK() over(partition BY t0.FID order by t0.FORECAST_ID) 'FORECASTNUMBER_SEQ'
+ ,t0.F_LINENUMBER
+ ,ROW_NUMBER() over(partition BY t0.FID,t0.FORECAST_ID order by t0.F_LINENUMBER) 'LINENUMBER_SEQ'
+ ,t0.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE --Ԥⵥid
+ ,t0.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t0.F_SOURCE_ORDER_NUMBER --۶#
+ ,t0.F_REMARK
+ ,t0.F_DESCRIPTION
+ ,t0.MATERIAL_NUMBER
+ ,t0.MATERIAL_NAME
+ ,t0.TOTAL
+ ,DENSE_RANK() over(partition BY t0.FID order by t0.F_MATERIALCODE) 'DENSE_RANK_NUM'
+ INTO #TEMP_PLANORDER_RESERVELINK2
+ FROM
+ #TEMP_PLANORDER_RESERVELINK t0
+ WHERE 1 = 1
+ AND TOTAL > 1
+ ORDER BY FID
+
+ CREATE INDEX #TEMP_PLANORDER_RESERVELINK2_INDEX ON #TEMP_PLANORDER_RESERVELINK2(FID);
+
+ UPDATE t0 SET t0.F_MATERIALCODE = 0,t0.F_CUSTOMERNAME = 0
+ FROM #TEMP_PLANORDER_RESERVELINK2 t0,(SELECT FID FROM #TEMP_PLANORDER_RESERVELINK2 WHERE DENSE_RANK_NUM = 2) t1 WHERE t0.FID = t1.FID
+
+ SELECT
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_DESCRIPTION
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ ,ISNULL(stuff((select ','+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_LINENUMBER'
+ ,ISNULL(stuff((select distinct ';'+ ISNULL(tt.F_REMARK,'') from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_REMARK'
+ ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
+ ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
+ ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
+ ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
+ INTO #TEMP
+ FROM #TEMP_PLANORDER_RESERVELINK2 t0
+ GROUP BY
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_DESCRIPTION
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ CREATE INDEX #TEMP_INDEX ON #TEMP(FID);
+
+ SELECT
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_LINENUMBER'
+ ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_FORECASTNUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_FORECASTNUMBER'
+ ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
+ ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
+ ,ISNULL(stuff((select distinct ';' + tt.F_REMARK from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_REMARK'
+ ,ISNULL(stuff((select distinct ';' + ISNULL(tt.F_DESCRIPTION,'') from #TEMP tt where tt.FID = t0.FID for xml path('')),1,1,''),'') 'F_DESCRIPTION'
+ ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
+ ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
+ INTO #TEMP2
+ FROM #TEMP t0
+ --WHERE t0.fbillno ='MRP01679279'
+ GROUP BY
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ CREATE INDEX #TEMP2_INDEX ON #TEMP2(FID);
+
+ --UPDATE #TEMP2 SET F_REMARK = '' WHERE F_REMARK = ';'
+
+ --ƻ-Դ--
+ UPDATE t0
+ SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
+ ,t0.F_LINENUMBER = tt.F_LINENUMBER
+ ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
+ ,t0.F_REMARK = tt.F_REMARK
+ ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
+ ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
+ FROM T_PLN_PLANORDER t0
+ INNER JOIN #TEMP2 tt on t0.FID = tt.FID --AND tt.TOTAL = 1
+
+ --ƻչ-Դ--
+ UPDATE t0_l
+ SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
+ FROM T_PLN_PLANORDER_L t0_l
+ INNER JOIN #TEMP2 tt on t0_l.FID = tt.FID --AND tt.TOTAL = 1
+
+ SELECT * FROM #TEMP2
+ DROP TABLE #TEMP
+ DROP TABLE #TEMP2
+ DROP TABLE #TEMP_PLANORDER_ID_LIST
+ DROP TABLE #TEMP_PLANORDER_RESERVELINK
+ DROP TABLE #TEMP_PLANORDER_RESERVELINK2
+END
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询生产层号为空的生产用料清单202402261540.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询生产层号为空的生产用料清单202402261540.sql
new file mode 100644
index 0000000..59f1450
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询生产层号为空的生产用料清单202402261540.sql
@@ -0,0 +1,19 @@
+SELECT t0.FBILLNO,t0.FID,t0e.FENTRYID
+ ,t1.FDATE,t0.FMOBILLNO
+ ,t0e.FFORECASTGROUP,t0e.FFORECASTGROUPFRIST
+ ,t1e.FFORECASTGROUPFRIST AS MOGROUPFRIST,t1e.FFORECASTGROUP AS MOGROUP,
+--UPDATE t0e SET t0e.FFORECASTGROUP = t1e.FFORECASTGROUP
+-- ,t0e.FFORECASTGROUPFRIST =
+ CASE
+ WHEN CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0) = 0
+ THEN t1e.FFORECASTGROUP
+ ELSE SUBSTRING(t1e.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0))
+ END
+FROM T_PRD_PPBOM t0
+ INNER JOIN T_PRD_PPBOMENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_PRD_MO t1 on t1.FID = t0.FMOID
+ INNER JOIN T_PRD_MOENTRY t1e on t1e.FID = t0.FMOID
+WHERE 1 = 1 AND t1e.FFORECASTGROUP != ''
+ AND t0e.FFORECASTGROUP = ''
+ AND t0e.FFORECASTGROUPFRIST != t1e.FFORECASTGROUPFRIST
+ORDER BY t1.FDATE desc
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询语句.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询语句.sql
new file mode 100644
index 0000000..4c205c9
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/查询语句.sql
@@ -0,0 +1,117 @@
+--ƻԤⵥѯstart--
+SELECT
+ --TOP 5000
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.FBOMID
+ ,t0.FMATERIALID --ƻid
+ ,t0_b.FSALEORDERID --id
+ ,t0_b.FSALEORDERENTRYID --űid
+ ,t0_b.FSALEORDERENTRYSEQ --űк
+ ,t0.F_Linenumber 'Ԥⵥк#'
+ ,t0_b.FSALEORDERNO ''--
+ ,t1.FBILLNO 'Ԥⵥ'
+ ,t0.F_FORECASTNUMBER 'Ԥⵥ#'
+ ,t1e.FCUSTID
+ ,t0.F_CUSTOMERNAME
+ ,t1e.FMATERIALID AS F_MATERIALCODE --Ԥⵥid
+ ,t0.F_MATERIALCODE
+ ,t0.F_SOURCE_ORDER_LINE_NUMBER
+ ,t1e.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t0.F_SOURCE_ORDER_NUMBER
+ ,t1e.F_SOURCE_ORDER_NUMBER --۶#
+ ,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION --ͷע
+ ,t0_l.F_DESCRIPTION
+ ,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --屸ע
+ ,t0.F_REMARK
+FROM
+ T_PLN_PLANORDER t0
+ INNER JOIN T_PLN_PLANORDER_B t0_b on t0.FID = t0_b.FID
+ INNER JOIN T_PLN_PLANORDER_L t0_l on t0.FID = t0_l.FID
+ INNER JOIN T_PLN_FORECAST t1 on t0_b.FSALEORDERID = t1.FID --Ԥⵥ
+ LEFT JOIN T_PLN_FORECAST_L t1_l on t1_l.FID = t0_b.FSALEORDERID --ԤⵥעϢ
+ INNER JOIN T_PLN_FORECASTENTRY t1e on t1e.FID = t0_b.FSALEORDERID AND t0_b.FSALEORDERENTRYID = t1e.FENTRYID --Ԥⵥ
+ LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0_b.FSALEORDERENTRYID --Ԥⵥ屸עϢ
+ --INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = t0.FBILLNO
+ --INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID --Ԥϵ
+ --INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ --INNER JOIN T_PLN_FORECAST E ON E .FID=D.FID
+WHERE 1 = 1
+ AND t0.F_FORECASTNUMBER = ''
+ AND t0_b.FDEMANDTYPE = 2
+ AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
+ --AND t0.FCOMPUTERNO ='MRP000401'
+ --AND t0_b.FSALEORDERID = 0
+--ORDER BY t0_b.FSALEORDERID,t0_b.FSALEORDERENTRYSEQ
+
+--ƻԤⵥѯend--
+
+--ƻԤϵѯstart--
+SELECT A.FID
+ into #temp
+ FROM T_PLN_PLANORDER A
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+ WHERE 1=1
+ --AND A.F_FORECASTNUMBER=''
+ AND A.FCOMPUTERNO ='MRP000401'
+ AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = '2024-01-18'
+ GROUP BY A.FID
+ HAVing count(1) > 1
+ CREATE INDEX [#temp_INDEX_FID] ON #temp(FID);
+SELECT
+t0_b.FSALEORDERID --id
+,t0_b.FSALEORDERENTRYID --űid
+,t0_b.FSALEORDERENTRYSEQ --űк
+--,t0.F_Linenumber 'Ԥⵥк#'
+,t0_b.FSALEORDERNO ''--
+,t0.F_FORECASTNUMBER 'Ԥⵥ#'
+,d.FSEQ
+,case when t0_b.FSALEORDERENTRYSEQ = d.FSEQ then 1 else 0 end
+,t0.FBILLNO
+--SELECt *
+FROM T_PLN_PLANORDER t0
+ INNER JOIN T_PLN_PLANORDER_B t0_b on t0.FID = t0_b.FID
+ --INNER JOIN T_PLN_FORECAST t1 on t0_b.FSALEORDERID = t1.FID --Ԥⵥ
+ --LEFT JOIN T_PLN_FORECAST_L t1_l on t1_l.FID = t0_b.FSALEORDERID --ԤⵥעϢ
+ --INNER JOIN T_PLN_FORECASTENTRY t1e on t1e.FID = t0_b.FSALEORDERID AND t0_b.FSALEORDERENTRYID = t1e.FENTRYID --and t0_b.FSALEORDERENTRYSEQ = t1e.FSEQ--Ԥⵥ
+
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = t0.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+WHERE exists (SELECT 1 FROM #temp tt WHERE tt.FID = t0.FID) and (t0_b.FSALEORDERENTRYSEQ != d.FSEQ or t0_b.FSALEORDERNO != e.FBILLNO)
+
+DROP TABLE #TEMP
+--ƻԤϵѯend--
+
+--ֶβѯstart--
+
+SELECT
+ a.FBILLNO AS 'ƻ'
+ ,A.FSALENOROW
+ ,A.F_SOURCE_ORDER_LINE_NUMBER as 'ƻ۶к'
+ ,A.F_Source_order_number as 'ƻ۶'
+ ,A.F_FORECASTNUMBER as 'ƻԤⵥ'
+ ,A.F_Linenumber as 'ƻԤⵥк'
+ ,E.FBILLNO AS 'Ԥⵥ'
+ ,D.FSEQ,D.F_Source_order_number as 'Ԥⵥ۶'
+ ,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥⵥ۶к'
+--UPDATE A SET A.F_Forecastnumber = '',A.F_Linenumber='',A.F_MaterialCode = 0,A.F_Remark = ''
+SELECT A.*
+FROM T_PLN_PLANORDER A
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+WHERE 1=1
+ AND A.F_FORECASTNUMBER=''
+ AND a.fbillno='MRP01348067'
+ AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = '2024-01-18'
+ --AND A.F_Forecastnumber ='N+30000028'
+
+ --ֶβѯend--
+
+ 'WO2401220106,WO2401220362,WO2401220363,WO2401220364,WO2401220365,WO2401220366,WO2401220367,WO2401220368,WO2401220369,WO2401220370,WO2401220371,WO2401220372,WO2401220373,WO2401220374,WO2401220375,WO2401220376,WO2401220377,WO2401220378'
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM.sql
new file mode 100644
index 0000000..41aeddd
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM.sql
@@ -0,0 +1,49 @@
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID 'Դ'
+ ,t1.FSRCBILLNO 'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,'' BOMLevel
+ /*һʱ*/
+ --INTO #_MO
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID=t0e.FID AND t1e.FINTSUPPLYENTRYID=t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID='PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID=t1.FSRCINTERID AND t2e.FENTRYID=t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+
+ --CREATE INDEX [#PLid] ON #_MO (FSRCINTERID ASC,FSRCENTRYID ASC) /*ͬ*/
+ --CREATE INDEX [#BomId] ON #_MO (FBomId ASC) /*BOM༶չԼײſ*/
+
+ --SELECT FSRCINTERID,FSRCENTRYID,MO2.FBILLNO AS 'ײIJ'
+ --into #n_mo
+ --FROM #_MO MO INNER JOIN T_PRD_MOENTRY MO1 ON MO1.FID=MO.FID AND MO1.FENTRYID=MO.FENTRYID
+ --INNER JOIN T_PRD_MO MO2 ON MO2.FID=MO.FID
+ --CREATE INDEX [#n_mo] ON #n_mo (FSRCINTERID ASC,FSRCENTRYID ASC) /*ͬ*/
+
+ ----update mo set BOMLevel=nmo.ײIJ+'-'+'ֵIJ'
+ ----from #_MO mo left join #n_mo nmo on nmo.FSRCINTERID=mo.FSRCINTERID and nmo.FSRCENTRYID=mo.FSRCENTRYID
+ --/*-------------dbo.GetBomSeqΪֵ洢̣ذֶεı-----------------
+ -- BOM_ID(Ӧ#_MOеFBomId)
+ -- BOM_ID(Ӧ#_MOеMOBomId)
+ --
+ ----------------dbo.GetBomSeqΪֵ洢̣ذֶεı------------------*/
+ ----select dbo.GetBomSeq(7293846,3994919)
+
+ --select * from #_MO
+
+ --DROP TABLE #_MO
+ --DROP TABLE #n_mo
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_创建临时表.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_创建临时表.sql
new file mode 100644
index 0000000..ced761c
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_创建临时表.sql
@@ -0,0 +1,186 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ );
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ --AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO) order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FBOMID =MOBomId
+ ) t0 ON tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ AND t0.ROWID =1
+ AND t0.Billnolen = len(tt.FBILLNO)
+ WHERE
+ tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.FMATERIALID)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID
+ WHERE 1 = 1
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ ROW_NUMBER() over(partition BY TOPID order by FSEQ) AS rowId,
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = t0.TOPBILLNO + t1.showlevel
+ FROM #TMP_MO t0 INNER JOIN #TMP_TOP_BOM_GROUP t1 on t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ --µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ SELECT t0.*,t1.fnumber
+ FROM #TMP_TOP_BOM_GROUP t0 INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+ --WHERE t0.OID = 6339745
+ order by t0.FSEQ,t0.BOMLEVEL
+ SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 AND topbillno='WO2308090009' --ѯʱ
+
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_查询.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_查询.sql
new file mode 100644
index 0000000..45dd0b6
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_查询.sql
@@ -0,0 +1,219 @@
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ ,t0e.FFORECASTGROUPFRIST
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP = '' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,ISNULL(t0.FBILLNO,'') FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ LEFT JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = (CASE t0.TOPBILLNO WHEN '' THEN '' ELSE ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'') END)
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+ --WHERE t0e.FFORECASTGROUP = ''
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ SELECT t0.*
+ ,t0_lk.FSTABLENAME
+ ,t0_lk.FSTABLEID
+ ,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITBILLNO
+ ,t0e_Q.FSRCSPLITID
+ ,t0e_Q.FSRCSPLITSEQ
+ ,t0e_Q.FSRCSPLITENTRYID
+ --INTO #TMP_MO_PART
+ FROM #TMP_MO_GROUP t0
+ LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
new file mode 100644
index 0000000..0cdd553
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_选中订单_更新层号_存储过程20240115.sql
@@ -0,0 +1,231 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SELECT_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_SELECT_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_SELECT_UPDATE_BOMLEVEL
+ @billnoStr nvarchar(8000)
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+ AND t0.FBILLNO in (SELECT b.billno FROM (SELECT CAST(''+REPLACE(@billnoStr,',','')+'' AS xml) billno ) a OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b ) --Ų
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ --SELECT t0.*
+ -- ,t0_lk.FSTABLENAME
+ -- ,t0_lk.FSTABLEID
+ -- ,t0_lk.FSBILLID
+ -- ,t0_lk.FSID
+ -- ,t0e_Q.FSRCSPLITBILLNO
+ -- ,t0e_Q.FSRCSPLITID
+ -- ,t0e_Q.FSRCSPLITSEQ
+ -- ,t0e_Q.FSRCSPLITENTRYID
+ -- --INTO #TMP_MO_PART
+ -- FROM #TMP_MO_GROUP t0
+ -- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ -- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ -- WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM更新层号_存储过程20240114.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM更新层号_存储过程20240114.sql
new file mode 100644
index 0000000..cd9c330
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM更新层号_存储过程20240114.sql
@@ -0,0 +1,229 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
+ DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
+GO
+
+CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
+AS
+BEGIN
+ CREATE TABLE #TMP_MO --ʱ#TMP
+ (
+ FID INT
+ ,FBILLNO VARCHAR(255)
+ ,FDATE DATE
+ ,FENTRYID INT
+ ,FMATERIALID INT
+ ,OMATERAILID int
+ ,MOBOMID INT
+ ,FSRCFORMID VARCHAR(255)
+ ,FSRCBILLNO VARCHAR(255)
+ ,FSRCINTERID INT
+ ,FSRCENTRYID INT
+ ,FSEQ INT
+ ,FBOMID INT
+ ,BOMLEVEL VARCHAR(255)
+ ,TOPBILLNO VARCHAR(255)
+ ,FFORECASTGROUP varchar(255)
+ );
+
+ CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
+
+ --INSERT INTO #TMP_MO
+ /*ƻһͶţT_PLN_RESERVELINKENTRYƻתƵ */
+ SELECT
+ t0e.FID
+ ,t0.FBILLNO
+ ,t0.FDATE
+ ,t0e.FENTRYID
+ ,t0e.FMATERIALID
+ ,t0e.FBomId MOBomId
+ ,t1.FSRCFORMID --'Դ'
+ ,t1.FSRCBILLNO --'Դ'
+ ,t1.FSRCINTERID /*Դ*/
+ ,t1.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,t2e.FSEQ
+ ,t2e.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,t2e.FMATERIALID OMATERAILID
+ ,t0e.FFORECASTGROUP
+ --,t0_lk.FSTABLENAME
+ --,t0_lk.FSTABLEID
+ --,t0_lk.FSBILLID
+ ,t0_lk.FSID
+ ,t0e_Q.FSRCSPLITID
+ ,'' BOMLevel
+ INTO #TMP_MO_PART
+ FROM T_PRD_MO t0 --ͷ
+ INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --
+ INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
+ INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥͷ
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥⵥ
+ WHERE 1 = 1
+ --t0.FBILLNO='WO2401100002' /**/
+ AND t0e.FFORECASTGROUP='' /*Ϊ*/
+ --AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
+ AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷͨMRPƵĵ*/
+ AND t0e_Q.FSRCSPLITID = 0
+
+
+ INSERT INTO #TMP_MO
+ SELECT
+ tt.FID
+ ,tt.FBILLNO
+ ,tt.FDATE
+ ,tt.FENTRYID
+ ,tt.FMATERIALID
+ ,tt.OMATERAILID
+ ,tt.MOBomId
+ ,tt.FSRCFORMID --'Դ'
+ ,tt.FSRCBILLNO --'Դ'
+ ,tt.FSRCINTERID /*Դ*/
+ ,tt.FSRCENTRYID /*Դ¼*/ ---ԴͬһԤⵥͬһеֵһͬ
+ ,tt.FSEQ
+ ,tt.FBomId /*ԤⶩFBomIdȡƥBOM༶չײ*/
+ ,tt.BOMLevel
+ ,t0.FBILLNO
+ ,tt.FFORECASTGROUP
+ --into #TMP_MO
+ FROM
+ #TMP_MO_PART tt
+ INNER JOIN (
+ SELECT
+ FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
+ ,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
+ FROM
+ #TMP_MO_PART
+ WHERE FMATERIALID = OMATERAILID
+ ) t0 ON 1=1
+ AND tt.FBOMID = t0.FBOMID
+ AND tt.FSEQ = t0.FSEQ
+ AND tt.FSRCINTERID = t0.FSRCINTERID
+ AND tt.FSRCENTRYID = t0.FSRCENTRYID
+ AND tt.FDATE = t0.FDATE
+ --AND t0.ROWID =1
+ AND tt.OMATERAILID = t0.FMATERIALID
+ AND t0.Billnolen = len(tt.FBILLNO)
+ --AND tt.fsid = t0.FSID
+ WHERE 1 = 1
+ --AND tt.FFORECASTGROUP = ''
+
+ CREATE TABLE #TMP_TOP_BOM_SET(
+ FID int
+ ,FNUMBER varchar(80)
+ ,FMATERIALID int
+ ,FSEQ int
+ ,BOMLEVEL int
+ ,TOPID int
+ ,showlevel varchar(80)
+ ,oId int
+ )
+ CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
+
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
+ ,1 'BOMLEVEL'
+ ,t0.FID AS 'TOPID'
+ ,''
+ ,t0.FID
+ FROM
+ T_ENG_BOM t0
+ INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
+ WHERE 1 = 1
+ AND t3.FMATERIALID = t3.OMATERAILID
+ GROUP BY
+ t0.FID
+ ,t0.FNUMBER
+ ,t0.FMATERIALID
+
+
+ DECLARE @num INT,@level int,@LoopCount int
+ SET @num = 1
+ SET @level =1
+ SET @LoopCount = 0;
+ WHILE (@num <> 0 AND @LoopCount < 30)
+ BEGIN
+ INSERT INTO #TMP_TOP_BOM_SET
+ SELECT
+ t3.FID
+ ,t3.FNUMBER
+ ,t3.FMATERIALID
+ ,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
+ ,t0.BOMLEVEL + 1
+ ,t0.TOPID
+ ,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
+ ,t0.FID
+ FROM
+ #TMP_TOP_BOM_SET t0
+ INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
+ INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
+ INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
+ WHERE 1 = 1
+ AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
+ AND t0.BOMLEVEL = @level
+
+ SET @num = @@ROWCOUNT
+ SET @level += 1
+ SET @LoopCount += 1
+ END
+
+ SELECT
+ *
+ INTO #TMP_TOP_BOM_GROUP
+ FROM #TMP_TOP_BOM_SET
+ WHERE 1 = 1
+ GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
+
+ SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+ INTO #TMP_MO_GROUP
+ FROM #TMP_MO
+ GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
+
+ --ʱ
+ UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
+ FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
+
+ ----µݿ
+ --UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
+ --FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
+
+ --SELECT t0.*,t1.fnumber
+
+ --FROM #TMP_TOP_BOM_GROUP t0
+ --INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
+
+ ----WHERE t0.TOPID = 8062230
+ --order by t0.FSEQ,t0.BOMLEVEL
+ --SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'
+ --SELECT t0.*
+ -- ,t0_lk.FSTABLENAME
+ -- ,t0_lk.FSTABLEID
+ -- ,t0_lk.FSBILLID
+ -- ,t0_lk.FSID
+ -- ,t0e_Q.FSRCSPLITBILLNO
+ -- ,t0e_Q.FSRCSPLITID
+ -- ,t0e_Q.FSRCSPLITSEQ
+ -- ,t0e_Q.FSRCSPLITENTRYID
+ -- --INTO #TMP_MO_PART
+ -- FROM #TMP_MO_GROUP t0
+ -- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
+ -- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
+ -- WHERE 1 = 1
+ --AND FBOMID =8237478 AND MOBOMID =8237478
+ --AND topbillno='WO2311080183'
+ --SELECT * FROM #TMP_MO WHERE 1 = 1
+ --AND FBOMID <> MOBOMID
+ --AND FBOMID = 6339745 --AND topbillno='WO2308090009' --ѯʱ
+ DROP TABLE #TMP_MO_GROUP
+ DROP TABLE #TMP_MO_PART
+ DROP TABLE #TMP_TOP_BOM_SET
+ DROP TABLE #TMP_TOP_BOM_GROUP
+ DROP TABLE #TMP_MO --ɾʱ#TMP
+END
+
+--SET STATISTICS TIME ON
+--EXEC PROC_UPDATE_BOMLEVEL
+--SET STATISTICS TIME OFF
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/统计需要更新的数据.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/统计需要更新的数据.sql
new file mode 100644
index 0000000..e87a496
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/统计需要更新的数据.sql
@@ -0,0 +1,20 @@
+IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_COUNT_UPDATE_PLAN_LIST')
+ DROP PROCEDURE dbo.PROC_COUNT_UPDATE_PLAN_LIST;
+GO
+
+CREATE PROCEDURE PROC_COUNT_UPDATE_PLAN_LIST
+AS
+BEGIN
+ SELECT COUNT(1) as totalCount,5000 as pageSize
+ FROM (
+ SELECT A.FID
+ FROM T_PLN_PLANORDER A
+ INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
+ INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
+ INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
+ WHERE 1=1
+ AND A.F_FORECASTNUMBER = ''
+ GROUP BY A.FID
+ ) t
+END
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/英博尔测试20240220.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/英博尔测试20240220.sql
new file mode 100644
index 0000000..d9813e8
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/英博尔测试20240220.sql
@@ -0,0 +1,245 @@
+
+declare @FBILLNO NVARCHAR(1000)
+set @FBILLNO = 'WO2402200045,WO2402200046,WO2402200047'
+select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',')
+
+/*********************************ֶstart*****************************************/
+--UPDATE B SET FFORECASTGROUP = REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO)
+
+--FROM T_PRD_MO A
+--INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+--INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
+--INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
+--INNER JOIN T_PRD_MO E ON E.FID=D.FID
+--INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --ײ
+--INNER JOIN T_PRD_MOENTRY I ON I.FID=H.FID --ײ㵥
+--INNER JOIN T_PRD_MOENTRY_Q J ON J.FSRCSPLITENTRYID=I.FENTRYID
+--INNER JOIN T_PRD_MOENTRY K ON K.FENTRYID=J.FENTRYID
+--INNER JOIN T_PRD_MO L ON L.FID=K.FID AND SUBSTRING(L.FBILLNO, CHARINDEX('-',L.FBILLNO)+1,LEN(L.FBILLNO)) = SUBSTRING(A.FBILLNO, CHARINDEX('-',A.FBILLNO)+1,LEN(A.FBILLNO))
+--inner join #temp2 m on m.Fname=a.FBILLNO
+--WHERE 1=1
+--AND B.FFORECASTGROUP = ''
+
+UPDATE t0e SET t0e.FFORECASTGROUP = REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO)
+--SELECT REPLACE( t1e.FFORECASTGROUP,t2.FBILLNO,t3.FBILLNO)
+FROM T_PRD_MO t0
+ INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID
+ INNER JOIN T_PRD_MOENTRY_Q t0e_q on t0e_q.FENTRYID = t0e.FENTRYID
+ INNER JOIN T_PRD_MOENTRY t1e on t1e.FENTRYID = t0e_q.FSRCSPLITENTRYID
+ INNER JOIN T_PRD_MO t2 on t2.FBILLNO = t1e.FFORECASTGROUPFRIST
+ INNER JOIN T_PRD_MOENTRY t2e on t2e.FID = t2.FID
+ INNER JOIN T_PRD_MOENTRY_Q t3e_q on t3e_q.FSRCSPLITENTRYID = t2e.FENTRYID
+ INNER JOIN T_PRD_MOENTRY t3e on t3e.FENTRYID = t3e_q.FENTRYID
+ INNER JOIN T_PRD_MO t3 on t3.FID = t3e.FID AND SUBSTRING(t3.FBILLNO, CHARINDEX('-',t3.FBILLNO)+1,LEN(t3.FBILLNO)) = SUBSTRING(t0.FBILLNO, CHARINDEX('-',t0.FBILLNO)+1,LEN(t0.FBILLNO))
+WHERE 1=1
+ AND t0e.FFORECASTGROUP = ''
+/*********************************ֶend*****************************************/
+--2024-01-15 ,ʹÿ洢
+exec PROC_SELECT_UPDATE_BOMLEVEL @FBILLNO
+
+
+--(ζ)
+ UPDATE B SET FFORECASTGROUP = ISNULL( cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) ,'')
+ --SELECT
+ --F.FNUMBER,
+ --a.FBILLNO,
+ --B.FENTRYID ,
+ --D.fbomid,b.fmaterialid,
+ --cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) as 'Bom',
+ --CONVERT( nvarchar(1000),'') as 'ε',a.FBILLNO as '',e.FBILLNO as 'Դͷ'
+ FROM T_PRD_MO A
+ INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ INNER JOIN T_PRD_MOENTRY_LK C ON C .FENTRYID=B.FENTRYID
+ INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FSBILLID AND D.FENTRYID=C.FSID
+ INNER JOIN T_PRD_MO E ON E.FID=D.FID
+ INNER JOIN T_BD_MATERIAL F ON F.FMATERIALID=B.FMATERIALID
+ inner join #temp2 g on g.Fname=a.FBILLNO
+ WHERE B.FFORECASTGROUP = ''
+--AND A.FBILLNO =@FBILLNO
+
+
+--2024-01-23 1814 start--
+ ----(ûε,Ϊĵݱ)
+ --UPDATE B SET FFORECASTGROUP = A.FBILLNO
+ ----SELECT *
+ --FROM T_PRD_MO A
+ --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ --LEFT JOIN T_PRD_MOENTRY_LK D ON D.FENTRYID=B.FENTRYID AND D.FSTABLENAME = 'T_PRD_MOENTRY'
+ --inner join #temp2 f on f.Fname=a.FBILLNO
+ --WHERE
+ --1=1
+ --AND D.FSID IS NULL
+ --AND B.FFORECASTGROUP = ''
+ ----AND A.FBILLNO =@FBILLNO
+ --2024-01-23 1814 end--
+
+ --2024-01-23 1814 start--
+ UPDATE B SET FFORECASTGROUP = A.FBILLNO
+ --SELECT A.FBILLNO
+ FROM T_PRD_MO A
+ INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ INNER JOIN T_PRD_MOENTRY_A t0e_a on B.FENTRYID = t0e_a.FENTRYID
+ INNER JOIN #temp2 f on f.Fname=a.FBILLNO
+ WHERE
+ 1=1
+ AND B.FFORECASTGROUP = ''
+ AND t0e_a.FCREATETYPE != 3
+ --AND B.FFORECASTGROUPFRIST != ''
+ AND NOT EXISTS (
+ SELECT 1
+ FROM T_PRD_MOENTRY_LK t1_lk
+ WHERE 1=1
+ AND t1_lk.FSTABLENAME = 'T_PRD_MOENTRY'
+ AND t1_lk.FENTRYID = B.FENTRYID)
+ --2024-01-23 1814 end--
+
+
+
+
+ --ϵͳıעֶθµע2ֶ
+ update B set FNOTE2=c.FMEMO FROM T_PRD_MO A
+ INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ INNER JOIN T_PRD_MOENTRY_L C ON C.FENTRYID=B.FENTRYID
+ INNER JOIN #temp2 f on f.Fname=a.FBILLNO
+ --where FNOTE2 = ''
+ --AND A.FBILLNO =@FBILLNO
+
+--ȡԭע
+ UPDATE B SET FNOTE2 = D.FNOTE2
+FROM T_PRD_MO A
+INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
+INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
+inner join #temp2 f on f.Fname=a.FBILLNO
+ --where A.FBILLNO = 'WO2301050101'
+ where B.FNOTE2= ''
+ --AND A.FBILLNO =@FBILLNO
+
+
+
+
+ --εݵıע¼ıע
+ --UPDATE D SET D.FNOTE2 = B.FNOTE2
+ --SELECT a.FBILLNO,b.FNOTE2,c.FBILLNO ,d.FNOTE2
+ UPDATE B SET FNOTE2 = D.FNOTE2
+ FROM T_PRD_MO A
+ INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ INNER JOIN T_PRD_MO C ON C.FBILLNO= B.FFORECASTGROUPFRIST
+ INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FID
+ inner join #temp2 f on f.Fname=a.FBILLNO
+ --where A.FBILLNO = 'WO2301050101'
+ where B.FNOTE2= ''
+ AND A.FBILLNO <> B.FFORECASTGROUPFRIST
+ -- AND A.FBILLNO =@FBILLNO
+
+ --嵥
+ UPDATE D SET FFORECASTGROUP= c.FFORECASTGROUP
+ FROM T_PRD_PPBOM A
+ INNER JOIN T_PRD_PPBOMENTRY D ON A.FID=D.FID
+ INNER JOIN T_PRD_MO B ON B.FBILLNO=A.FMOBillNO
+ INNER JOIN T_PRD_MOENTRY C ON C.FID=B.FID
+ inner join #temp2 f on f.Fname=a.FMOBILLNO
+ where d.FFORECASTGROUP = ''
+ --AND A.FMOBILLNO =@FBILLNO
+
+
+
+ UPDATE A SET FINVSTOCKQTY=B.FBASEQTY
+ FROM T_PRD_MOENTRY A
+ INNER JOIN
+ (
+ SELECT B.FMATERIALID,SUM(FBASEQTY) AS 'FBASEQTY' FROM T_STK_INVENTORY A
+ INNER JOIN T_BD_MATERIAL B ON A.FMATERIALID=B.FMASTERID
+ WHERE A.FISEFFECTIVED=1
+ GROUP BY B.FMATERIALID
+ ) B ON A.FMATERIALID=B.FMATERIALID
+ inner join t_prd_mo c on c.fid=a.fid
+ inner join #temp2 f on f.Fname=c.FBILLNO WHERE FINVSTOCKQTY = 0
+
+ --AND c.FBILLNO =@FBILLNO
+
+
+
+ --UPDATE a SET a.FBILLNO = ISNULL( cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) ,'')
+ ----SELECT
+ ----F.FNUMBER,
+ ----a.FBILLNO,
+ ----B.FENTRYID ,
+ ----D.fbomid,b.fmaterialid,
+ ----cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) as 'Bom',
+ ----CONVERT( nvarchar(1000),'') as 'ε',a.FBILLNO as '',e.FBILLNO as 'Դͷ'
+ --FROM T_PRD_MO A
+ --INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ --INNER JOIN T_PRD_MOENTRY_LK C ON C .FENTRYID=B.FENTRYID
+ --INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FSBILLID AND D.FENTRYID=C.FSID
+ --INNER JOIN T_PRD_MO E ON E.FID=D.FID
+ --INNER JOIN T_BD_MATERIAL F ON F.FMATERIALID=B.FMATERIALID
+ --WHERE B.FFORECASTGROUP = ''
+
+
+--ײ㶩
+
+
+update a set FFORECASTGROUPFRIST =
+ CASE WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) = 0 THEN FFORECASTGROUP
+
+ WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID=0 THEN SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',1))
+ WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID>0 AND SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) IS NULL THEN FFORECASTGROUP
+ ELSE SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) END
+
+FROM T_PRD_MOENTRY A
+INNER JOIN T_PRD_MOENTRY_Q B ON A.FENTRYID=B.FENTRYID
+inner join T_PRD_MO c on c.fid =a.fid
+inner join #temp2 f on f.Fname=c.FBILLNO
+WHERE
+1=1
+AND FFORECASTGROUPFRIST= ''
+--AND c.FBILLNO =@FBILLNO
+
+
+--嵥ײ㶩
+update T_PRD_PPBOMENTRY set FFORECASTGROUPFRIST =
+ CASE
+ WHEN CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0) = 0
+ THEN A.FFORECASTGROUP
+ ELSE SUBSTRING(A.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0))
+ END
+FROM T_PRD_PPBOMENTRY a
+inner join T_PRD_PPBOM b on a.fid=b.fid
+inner join #temp2 f on f.Fname=b.FMOBILLNO
+WHERE FFORECASTGROUPFRIST= ''
+--and b.FMOBILLNO = @FBILLNO
+
+
+ --Ŀͻ¼Ŀͻ¼ӹ
+ UPDATE E SET E.F_PKGR_CUSTOMER= A.F_PKGR_CUSTOMER
+ --SELECT *
+ --D.FNOTE2,
+ --B.FNOTE2,*
+ FROM T_PRD_MO A
+ INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
+ INNER JOIN T_PRD_MOENTRY_LK C ON C.FSID=B.FENTRYID AND C.FSBILLID=B.FID
+ INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FENTRYID
+ INNER JOIN T_PRD_MO E ON E.FID=D.FID
+ inner join #temp2 f on f.Fname=a.FBILLNO
+ --where A.FBILLNO = 'TO2305300002'
+ AND ISNULL(E.F_PKGR_CUSTOMER,0)= 0
+ and E.F_PKGR_CUSTOMER<>A.F_PKGR_CUSTOMER
+
+
+
+ --嵥ĵλ
+ --SELECT FNUMERATOR,FDENOMINATOR,
+ --ROUND(FNUMERATOR/FDENOMINATOR,3), F_PKGR_CONSUMPTION,
+ --*
+ update T_PRD_PPBOMENTRY set FBomStdQty = ROUND(FNUMERATOR/FDENOMINATOR,3)
+
+ FROM T_PRD_PPBOMENTRY a
+ inner join T_PRD_PPBOM b on a.fid=b.fid
+ inner join #temp2 c on c.Fname=b.FMOBILLNO
+
+ WHERE FBomStdQty = 0
+ --and b.FMOBILLNO = @FBILLNO
+
+
+drop table #temp2
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/计划订单更新预测单信息新sql.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/计划订单更新预测单信息新sql.sql
new file mode 100644
index 0000000..3d68829
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/计划订单更新预测单信息新sql.sql
@@ -0,0 +1,179 @@
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t2.FID 'FORECAST_ID'
+ ,t2e.FENTRYID 'FORECASTENTRY_ID'
+ ,t2.FBILLNO 'F_FORECASTNUMBER'
+ ,t2e.FSEQ 'F_LINENUMBER'
+ ,t2e.FCUSTID 'F_CUSTOMERNAME'
+ ,t2e.FMATERIALID 'F_MATERIALCODE' --Ԥⵥid
+ ,t2e.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t2e.F_SOURCE_ORDER_NUMBER --۶#
+ ,t0.F_REMARK
+ INTO #TEMP_PLANORDER_ID_LIST
+ FROM T_PLN_PLANORDER t0
+ INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0.FID
+ INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID = t1e.FID
+ INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FENTRYID = t1.FSRCENTRYID
+ INNER JOIN T_PLN_FORECAST t2 on t2.fid = t2e.FID
+ WHERE 1 = 1
+ --AND t0.F_FORECASTNUMBER = ''
+ AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
+
+ CREATE INDEX #TEMP_PLANORDER_ID_LIST_INDEX_FID ON #TEMP_PLANORDER_ID_LIST(FID);
+
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.FORECASTENTRY_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_LINENUMBER
+ ,t0.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE --Ԥⵥid
+ ,t0.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t0.F_SOURCE_ORDER_NUMBER --۶#
+ ,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION
+ --,t1_l.FDESCRIPTION F_DESCRIPTION
+ ,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --屸ע
+ --,t1e_l.FDESCRIPTION F_REMARK
+ ,t2.FNUMBER 'MATERIAL_NUMBER'
+ ,t2_l.FNAME 'MATERIAL_NAME'
+ ,t3.TOTAL
+ INTO #TEMP_PLANORDER_RESERVELINK
+
+ FROM #TEMP_PLANORDER_ID_LIST t0
+ INNER JOIN (SELECT FID,COUNT(1) TOTAL FROM #TEMP_PLANORDER_ID_LIST GROUP BY FID ) t3 on t3.FID = t0.FID
+ LEFT JOIN T_PLN_FORECAST_L t1_l on t0.FORECAST_ID = t1_l.FID AND t1_l.FLOCALEID = 2052
+ LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0.FORECASTENTRY_ID AND t1e_l.FLOCALEID = 2052
+ LEFT JOIN T_BD_MATERIAL t2 on t0.F_MATERIALCODE = t2.FMATERIALID
+ LEFT JOIN T_BD_MATERIAL_L t2_l on t0.F_MATERIALCODE = t2_l.FMATERIALID
+ WHERE 1=1
+ --AND t0.F_FORECASTNUMBER = ''
+
+ CREATE INDEX #TEMP_PLANORDER_RESERVELINK_INDEX ON #TEMP_PLANORDER_RESERVELINK(FID);
+
+ ----ƻ һԴ---
+ --UPDATE t0
+ --SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
+ -- ,t0.F_LINENUMBER = tt.F_LINENUMBER
+ -- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
+ -- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
+ -- ,t0.F_REMARK = tt.F_REMARK
+ -- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
+ -- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
+ --FROM T_PLN_PLANORDER t0
+ -- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0.FID = tt.FID AND tt.TOTAL = 1
+
+ ----ƻչ һԴ---
+ --UPDATE t0_l
+ --SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
+ --FROM T_PLN_PLANORDER_L t0_l
+ -- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0_l.FID = tt.FID AND tt.TOTAL = 1
+
+ SELECT
+ t0.FID --id
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.FORECASTENTRY_ID
+ ,t0.F_FORECASTNUMBER
+ ,DENSE_RANK() over(partition BY t0.FID order by t0.FORECAST_ID) 'FORECASTNUMBER_SEQ'
+ ,t0.F_LINENUMBER
+ ,ROW_NUMBER() over(partition BY t0.FID,t0.FORECAST_ID order by t0.F_LINENUMBER) 'LINENUMBER_SEQ'
+ ,t0.F_CUSTOMERNAME
+ ,t0.F_MATERIALCODE --Ԥⵥid
+ ,t0.F_SOURCE_ORDER_LINE_NUMBER --۶к
+ ,t0.F_SOURCE_ORDER_NUMBER --۶#
+ ,t0.F_REMARK
+ ,t0.F_DESCRIPTION
+ ,t0.MATERIAL_NUMBER
+ ,t0.MATERIAL_NAME
+ ,t0.TOTAL
+ ,DENSE_RANK() over(partition BY t0.FID order by t0.F_MATERIALCODE) 'DENSE_RANK_NUM'
+ INTO #TEMP_PLANORDER_RESERVELINK2
+ FROM
+ #TEMP_PLANORDER_RESERVELINK t0
+ WHERE 1 = 1
+ AND TOTAL > 1
+ ORDER BY FID
+
+ CREATE INDEX #TEMP_PLANORDER_RESERVELINK2_INDEX ON #TEMP_PLANORDER_RESERVELINK2(FID);
+
+ UPDATE t0 SET t0.F_MATERIALCODE = 0,t0.F_CUSTOMERNAME = 0
+ FROM #TEMP_PLANORDER_RESERVELINK2 t0,(SELECT FID FROM #TEMP_PLANORDER_RESERVELINK2 WHERE DENSE_RANK_NUM = 2) t1 WHERE t0.FID = t1.FID
+
+ SELECT
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_DESCRIPTION
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ ,ISNULL(stuff((select ','+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_LINENUMBER'
+ ,ISNULL(stuff((select distinct ';'+ ISNULL(tt.F_REMARK,'') from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_REMARK'
+ ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
+ ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
+ ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
+ ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
+ INTO #TEMP
+ FROM #TEMP_PLANORDER_RESERVELINK2 t0
+ GROUP BY
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.FORECAST_ID
+ ,t0.F_FORECASTNUMBER
+ ,t0.F_DESCRIPTION
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ CREATE INDEX #TEMP_INDEX ON #TEMP(FID);
+
+ SELECT
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_LINENUMBER'
+ ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_FORECASTNUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_FORECASTNUMBER'
+ ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
+ ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
+ ,ISNULL(stuff((select distinct ';' + tt.F_REMARK from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_REMARK'
+ ,ISNULL(stuff((select distinct ';' + ISNULL(tt.F_DESCRIPTION,'') from #TEMP tt where tt.FID = t0.FID for xml path('')),1,1,''),'') 'F_DESCRIPTION'
+ ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
+ ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
+ INTO #TEMP2
+ FROM #TEMP t0
+ --WHERE t0.fbillno ='MRP01679279'
+ GROUP BY
+ t0.FID
+ ,t0.FBILLNO
+ ,t0.F_MATERIALCODE
+ ,t0.F_CUSTOMERNAME
+ CREATE INDEX #TEMP2_INDEX ON #TEMP2(FID);
+
+ --UPDATE #TEMP2 SET F_REMARK = '' WHERE F_REMARK = ';'
+
+ ----ƻ-Դ--
+ --UPDATE t0
+ --SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
+ -- ,t0.F_LINENUMBER = tt.F_LINENUMBER
+ -- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
+ -- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
+ -- ,t0.F_REMARK = tt.F_REMARK
+ -- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
+ -- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
+ --FROM T_PLN_PLANORDER t0
+ -- INNER JOIN #TEMP2 tt on t0.FID = tt.FID --AND tt.TOTAL = 1
+
+ ----ƻչ-Դ--
+ --UPDATE t0_l
+ --SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
+ --FROM T_PLN_PLANORDER_L t0_l
+ -- INNER JOIN #TEMP2 tt on t0_l.FID = tt.FID --AND tt.TOTAL = 1
+
+ SELECT * FROM #TEMP2
+ DROP TABLE #TEMP
+ DROP TABLE #TEMP2
+ DROP TABLE #TEMP_PLANORDER_ID_LIST
+ DROP TABLE #TEMP_PLANORDER_RESERVELINK
+ DROP TABLE #TEMP_PLANORDER_RESERVELINK2
\ No newline at end of file
diff --git a/07.珠海英搏尔/Enpower/Properties/AssemblyInfo.cs b/07.珠海英搏尔/Enpower/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7d85e53
--- /dev/null
+++ b/07.珠海英搏尔/Enpower/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Enpower")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Enpower")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("afef4e4d-92e3-4f04-9f19-ed01c0b2f24a")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/08.昶东/EastChanger.Python/STK_StockCountGain/ListEventPlugInEx.py b/08.昶东/EastChanger.Python/STK_StockCountGain/ListEventPlugInEx.py
index e69de29..4295394 100644
--- a/08.昶东/EastChanger.Python/STK_StockCountGain/ListEventPlugInEx.py
+++ b/08.昶东/EastChanger.Python/STK_StockCountGain/ListEventPlugInEx.py
@@ -0,0 +1,35 @@
+import clr
+clr.AddReference("System")
+clr.AddReference("System.Core")
+clr.AddReference("Kingdee.BOS")
+clr.AddReference("Kingdee.BOS.Core")
+clr.AddReference("EastChanger")
+
+from System import *
+from System.Linq import *
+from System.Collections.Generic import List
+from System.ComponentModel import *
+from Kingdee.BOS import*
+from Kingdee.BOS.Util import*
+from Kingdee.BOS.Core.DynamicForm import*
+from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import*
+from Kingdee.BOS.Core.List.PlugIn import*
+from Kingdee.BOS.Core.List import *
+from EastChanger.STK_StockCountGain import*
+
+
+def BarItemClick(e):
+ if e.BarItemKey.Equals("InventoryProfit"):
+ sellist = this.ListView.SelectedRowsInfo
+ if sellist == None or sellist.Count == 0:
+ this.View.ShowErrMessage("ѡҪͬĵ");
+ return
+ opResult = OperationResult()
+
+ fidList = List[str](set(map(lambda x:x.PrimaryKeyValue ,sellist)))
+
+ service = STKStockCountGainService(this.Context)
+ # raise Exception(str(type(fidList)))
+ service.HandleSyncData(fidList, opResult, 0)
+ if opResult.OperateResult.Count > 0:
+ this.View.ShowOperateResult(opResult.OperateResult)
\ No newline at end of file
diff --git a/08.昶东/EastChanger.Python/STK_StockCountLoss/ListEventPlugInEx.py b/08.昶东/EastChanger.Python/STK_StockCountLoss/ListEventPlugInEx.py
index c0a0456..349111f 100644
--- a/08.昶东/EastChanger.Python/STK_StockCountLoss/ListEventPlugInEx.py
+++ b/08.昶东/EastChanger.Python/STK_StockCountLoss/ListEventPlugInEx.py
@@ -14,12 +14,13 @@ from Kingdee.BOS.Util import*
from Kingdee.BOS.Core.DynamicForm import*
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import*
from Kingdee.BOS.Core.List.PlugIn import*
+from Kingdee.BOS.Core.List import *
from EastChanger.STK_StockCountLoss import*
def BarItemClick(e):
- if e.BarItemKey.Equals("InventoryProfit"):
+ if e.BarItemKey.Equals("InventoryLoss"):
sellist = this.ListView.SelectedRowsInfo
- if sellist != None and sellist.Any():
+ if sellist == None or sellist.Count == 0:
this.View.ShowErrMessage("ѡҪͬĵ");
return
opResult = OperationResult()
@@ -28,6 +29,6 @@ def BarItemClick(e):
service = STKStockCountLossService(this.Context)
# raise Exception(str(type(fidList)))
- # service.HandleSyncData(fidList, opResult, 0)
- # if opResult.OperateResult.Count > 0:
- # this.View.ShowOperateResult(opResult.OperateResult)
\ No newline at end of file
+ service.HandleSyncData(fidList, opResult, 0)
+ if opResult.OperateResult.Count > 0:
+ this.View.ShowOperateResult(opResult.OperateResult)
\ No newline at end of file
diff --git a/08.昶东/EastChanger/EastChanger.csproj b/08.昶东/EastChanger/EastChanger.csproj
index 9e7af6c..cbb891e 100644
--- a/08.昶东/EastChanger/EastChanger.csproj
+++ b/08.昶东/EastChanger/EastChanger.csproj
@@ -51,7 +51,7 @@
False
- ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Newtonsoft.Json.dll
+ ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Newtonsoft.Json.dll
diff --git a/GateDge2023.sln b/GateDge2023.sln
index 843c616..b3ed83a 100644
--- a/GateDge2023.sln
+++ b/GateDge2023.sln
@@ -62,14 +62,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UseGetFmaterialData", "02.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonthlyProductionSchedule", "04.天大药业(珠海)有限公司\MonthlyProductionSchedule\MonthlyProductionSchedule.csproj", "{548EE4F5-AFFE-425F-B1A7-4552902F12A6}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TNMB.PUR_RPT_POOrderTrace", "06.泰诺麦博\TNMB.PUR_RPT_POOrderTrace\TNMB.PUR_RPT_POOrderTrace.csproj", "{BCC79C5A-0154-4484-981E-13B7A4FFB4D3}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trinomab.PUR_RPT_POOrderTrace", "06.泰诺麦博\Trinomab.PUR_RPT_POOrderTrace\Trinomab.PUR_RPT_POOrderTrace.csproj", "{9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Enpower.PRD_MO", "07.珠海英搏尔\Enpower.PRD_MO\Enpower.PRD_MO.csproj", "{D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}"
-EndProject
-Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "Enpower.PRD_MO.Python", "07.珠海英搏尔\Enpower.PRD_MO.Python\Enpower.PRD_MO.Python.pyproj", "{EC6EC8C7-D066-4235-81EE-67D6F83B0330}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HW.PRD_MO", "03.珠海市汇威精密制造有限公司\HW.PRD_MO\HW.PRD_MO.csproj", "{3134279E-5C1B-421C-9E2D-5013D599FA53}"
EndProject
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "HW.PRD_MO.Python", "03.珠海市汇威精密制造有限公司\HW.PRD_MO.Python\HW.PRD_MO.Python.pyproj", "{63FA856A-E38D-4464-A164-11EED1DFE0F8}"
@@ -86,6 +78,24 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestProject2", "00.未
EndProject
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "HW.PRD_LackAnalyeBill.Python", "03.珠海市汇威精密制造有限公司\HW.PRD_LackAnalyeBill.Python\HW.PRD_LackAnalyeBill.Python.pyproj", "{0BC2F871-B50D-41C3-9267-ABDE125D9B17}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HW.PRD_LACKANAYLEBILL", "03.珠海市汇威精密制造有限公司\HW.PRD_LACKANAYLEBILL\HW.PRD_LACKANAYLEBILL.csproj", "{B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CYG", "05.长园\CYG\CYG.csproj", "{2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}"
+EndProject
+Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "CYG.Python", "05.长园\CYG.Python\CYG.Python.pyproj", "{62BC7EFA-7E95-4593-A146-8A6AC44278FB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trinomab", "06.泰诺麦博\Trinomab\Trinomab.csproj", "{45C22F98-7AAC-465E-B8BB-81A1A320D00A}"
+EndProject
+Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "Trinomab.Python", "06.泰诺麦博\Trinomab.Python\Trinomab.Python.pyproj", "{F1E2602E-2506-41B1-B696-4ED18316CB07}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZHSW", "02.珠海市供水有限公司\ZHSW\ZHSW.csproj", "{BF093890-EBF9-485C-A92E-49264B810108}"
+EndProject
+Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "ZHSW.Python", "02.珠海市供水有限公司\ZHSW.Python\ZHSW.Python.pyproj", "{0EFB3769-37F2-4D7A-9EFF-4C1CB749475C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Enpower", "07.珠海英搏尔\Enpower\Enpower.csproj", "{AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}"
+EndProject
+Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "Enpower.Python", "07.珠海英搏尔\Enpower.Python\Enpower.Python.pyproj", "{E16A75BC-5FB5-47FC-962D-4AD20E686D59}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -156,20 +166,6 @@ Global
{548EE4F5-AFFE-425F-B1A7-4552902F12A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{548EE4F5-AFFE-425F-B1A7-4552902F12A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{548EE4F5-AFFE-425F-B1A7-4552902F12A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {BCC79C5A-0154-4484-981E-13B7A4FFB4D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BCC79C5A-0154-4484-981E-13B7A4FFB4D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BCC79C5A-0154-4484-981E-13B7A4FFB4D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BCC79C5A-0154-4484-981E-13B7A4FFB4D3}.Release|Any CPU.Build.0 = Release|Any CPU
- {9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD}.Release|Any CPU.Build.0 = Release|Any CPU
- {D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}.Release|Any CPU.Build.0 = Release|Any CPU
- {EC6EC8C7-D066-4235-81EE-67D6F83B0330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EC6EC8C7-D066-4235-81EE-67D6F83B0330}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3134279E-5C1B-421C-9E2D-5013D599FA53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3134279E-5C1B-421C-9E2D-5013D599FA53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3134279E-5C1B-421C-9E2D-5013D599FA53}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -196,6 +192,34 @@ Global
{3F9DAEFD-D6AF-4FA8-B6B2-485832AB9B26}.Release|Any CPU.Build.0 = Release|Any CPU
{0BC2F871-B50D-41C3-9267-ABDE125D9B17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0BC2F871-B50D-41C3-9267-ABDE125D9B17}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {62BC7EFA-7E95-4593-A146-8A6AC44278FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {62BC7EFA-7E95-4593-A146-8A6AC44278FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F1E2602E-2506-41B1-B696-4ED18316CB07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F1E2602E-2506-41B1-B696-4ED18316CB07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF093890-EBF9-485C-A92E-49264B810108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF093890-EBF9-485C-A92E-49264B810108}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF093890-EBF9-485C-A92E-49264B810108}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF093890-EBF9-485C-A92E-49264B810108}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0EFB3769-37F2-4D7A-9EFF-4C1CB749475C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0EFB3769-37F2-4D7A-9EFF-4C1CB749475C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E16A75BC-5FB5-47FC-962D-4AD20E686D59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E16A75BC-5FB5-47FC-962D-4AD20E686D59}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -220,10 +244,6 @@ Global
{C7AACA24-410B-4497-8400-EAF0A81C2133} = {F03B5F75-6DCD-4FF8-989F-403C5EA0AA5B}
{7014B4E2-94AC-430F-BD20-72BA2BA6EBA3} = {F03B5F75-6DCD-4FF8-989F-403C5EA0AA5B}
{548EE4F5-AFFE-425F-B1A7-4552902F12A6} = {A362AFBC-FC73-46A6-9185-15C17E694538}
- {BCC79C5A-0154-4484-981E-13B7A4FFB4D3} = {0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}
- {9E2DDD7F-02EE-4BDF-A696-4CC6D310FEAD} = {0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}
- {D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073} = {CAE5A042-7B8F-49E7-8510-4B93DA85D6D8}
- {EC6EC8C7-D066-4235-81EE-67D6F83B0330} = {CAE5A042-7B8F-49E7-8510-4B93DA85D6D8}
{3134279E-5C1B-421C-9E2D-5013D599FA53} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
{63FA856A-E38D-4464-A164-11EED1DFE0F8} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
{89236B39-F2B6-4757-AB69-DF89FDBCE3A5} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
@@ -232,6 +252,15 @@ Global
{17EF8474-392A-4595-A4D4-D224F16AF8C4} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
{3F9DAEFD-D6AF-4FA8-B6B2-485832AB9B26} = {2217EA0E-E53F-4ECC-A49D-F38BC743F47A}
{0BC2F871-B50D-41C3-9267-ABDE125D9B17} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
+ {B6FD6277-A4DA-4FAC-BDA9-841D51E3D57F} = {42311C80-7B4C-4353-BCA9-4ABD024290C8}
+ {2F638D52-C946-4F1B-89A1-ADB47D5FDBD9} = {270F576A-EFFF-4728-8E5C-ABDF5C3F3C8B}
+ {62BC7EFA-7E95-4593-A146-8A6AC44278FB} = {270F576A-EFFF-4728-8E5C-ABDF5C3F3C8B}
+ {45C22F98-7AAC-465E-B8BB-81A1A320D00A} = {0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}
+ {F1E2602E-2506-41B1-B696-4ED18316CB07} = {0C4E3DC3-F1FA-4BD7-8D81-BF5EFD452A51}
+ {BF093890-EBF9-485C-A92E-49264B810108} = {F03B5F75-6DCD-4FF8-989F-403C5EA0AA5B}
+ {0EFB3769-37F2-4D7A-9EFF-4C1CB749475C} = {F03B5F75-6DCD-4FF8-989F-403C5EA0AA5B}
+ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A} = {CAE5A042-7B8F-49E7-8510-4B93DA85D6D8}
+ {E16A75BC-5FB5-47FC-962D-4AD20E686D59} = {CAE5A042-7B8F-49E7-8510-4B93DA85D6D8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {16F7DBDD-F487-41D6-A856-9E9B7B3F61C5}
diff --git a/Trinomab.Python/Trinomab.Python.pyproj b/Trinomab.Python/Trinomab.Python.pyproj
new file mode 100644
index 0000000..4be9b9b
--- /dev/null
+++ b/Trinomab.Python/Trinomab.Python.pyproj
@@ -0,0 +1,33 @@
+
+
+ Debug
+ 2.0
+ f1e2602e-2506-41b1-b696-4ed18316cb07
+ .
+
+
+
+
+ .
+ .
+ Trinomab.Python
+ Trinomab.Python
+
+
+ true
+ false
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/宝锐_更新富余量.sql b/宝锐_更新富余量.sql
new file mode 100644
index 0000000..54e851d
--- /dev/null
+++ b/宝锐_更新富余量.sql
@@ -0,0 +1,37 @@
+--UPDATE t1e SET t1e.F_UHIK_QTY_RE5 = t0e.FMOREQTYBASE
+SELECT t0e.FENTRYID
+ ,t0e.FMOREQTYBASE
+ ,t1e.F_UHIK_QTY_RE5
+ ,t1e.FENTRYID AS '˻֪ͨ'
+ ,DENSE_RANK() OVER (PARTITION BY t0e.FENTRYID ORDER BY t1e.FENTRYID DESC)
+FROM T_SAL_OUTSTOCKENTRY t0e
+ INNER JOIN T_SAL_RETURNNOTICEENTRY_LK t1e_lk on t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY'
+ INNER JOIN T_SAL_RETURNNOTICEENTRY t1e on t1e.FENTRYID = t1e_lk.FENTRYID
+WHERE t0e.FMOREQTYBASE != 0
+
+--UPDATE t2e SET t2e.F_UHIK_QTY_QTR = t0e.FMOREQTYBASE
+SELECT t0e.FENTRYID
+ ,t0e.FMOREQTYBASE
+ ,t1e.F_UHIK_QTY_RE5
+ ,t2e.F_UHIK_QTY_QTR
+ ,t1e.FENTRYID AS '˻֪ͨ'
+ ,DENSE_RANK() OVER (PARTITION BY t0e.FENTRYID ORDER BY t1e.FENTRYID DESC)
+ ,t2e.FENTRYID AS '˻'
+ ,ROW_NUMBER() OVER (PARTITION BY t1e.FENTRYID ORDER BY t2e.FENTRYID DESC)
+FROM T_SAL_OUTSTOCKENTRY t0e
+ INNER JOIN T_SAL_RETURNNOTICEENTRY_LK t1e_lk on t0e.FID = t1e_lk.FSBILLID AND t0e.FENTRYID = t1e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SAL_OUTSTOCKENTRY'
+ INNER JOIN T_SAL_RETURNNOTICEENTRY t1e on t1e.FENTRYID = t1e_lk.FENTRYID
+ INNER JOIN T_SAL_RETURNSTOCKENTRY_LK t2e_lk on t1e.FID = t2e_lk.FSBILLID AND t1e.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_RETURNNOTICEENTRY'
+ INNER JOIN T_SAL_RETURNSTOCKENTRY t2e on t2e_lk.FENTRYID = t2e.FENTRYID
+WHERE t0e.FMOREQTYBASE != 0
+
+
+UPDATE t0e SET t0e.F_UHIK_QTY_QTR = (CASE WHEN t0e.FBASEUNITID = 109724 AND t0e_f.FSALUNITID = 109592 THEN t0e.FMOREQTY * 1000 ELSE t0e.FMOREQTY END)
+--SELECT t0e.FBASEUNITID,t2.FNUMBER 'λ',t0e.F_UHIK_QTY_QTR
+-- ,t0e_f.FSALUNITID,t1.FNUMBER '',t0e.FMOREQTY
+-- ,(CASE WHEN t0e.FBASEUNITID = 109724 AND t0e_f.FSALUNITID = 109592 THEN t0e.FMOREQTY * 1000 ELSE t0e.FMOREQTY END)
+FROM T_SAL_RETURNSTOCKENTRY t0e
+ INNER JOIN T_SAL_RETURNSTOCKENTRY_F t0e_f on t0e.FENTRYID = t0e_f.FENTRYID
+ INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0e_f.FSALUNITID
+ INNER JOIN T_BD_UNIT t2 on t2.FUNITID = t0e.FBASEUNITID
+WHERE t0e.FMOREQTY != 0 AND F_UHIK_QTY_QTR = 0
\ No newline at end of file