diff --git a/.vscode/settings.json b/.vscode/settings.json index 013007b..a6c2fdd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "dotnet.preferCSharpExtension": true + "dotnet.preferCSharpExtension": true, + "python.analysis.typeCheckingMode": "off" } \ No newline at end of file diff --git a/00.未分类/UnitTestProject2/AESHelp.cs b/00.未分类/UnitTestProject2/AESHelp.cs new file mode 100644 index 0000000..f2419c4 --- /dev/null +++ b/00.未分类/UnitTestProject2/AESHelp.cs @@ -0,0 +1,210 @@ +using Microsoft.VisualBasic; +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace RB_MES_API.Context +{ + /// + /// 密码管理 + /// + public class AESHelp + { + private static string appkey = "RB@8636926"; + /// + /// 加密 + /// + /// 原文 + /// 密文(Base64字符串) + public static string Encrypt(string sourceText) + { + return Encrypt(sourceText, appkey); + } + /// + /// 加密 + /// Key和IV将被转换为MD5值 + /// + /// 原文 + /// 密匙 + /// 密文(Base64字符串) + private static string Encrypt(string sourceText, string sKey) + { + var des = DES.Create(); + byte[] inputByteArray; + inputByteArray = Encoding.Default.GetBytes(sourceText); + des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); + des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); + MemoryStream ms = new MemoryStream(); + CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + StringBuilder ret = new StringBuilder(); + foreach (byte b in ms.ToArray()) + { + ret.AppendFormat("{0:X2}", b); + } + ms.Dispose(); + cs.Dispose(); + des.Dispose(); + return ret.ToString(); + } + + + /// + /// 解密 + /// + /// 密文 + /// 原文 + public static string Decrypt(string cipherText) + { + if (!string.IsNullOrEmpty(cipherText)) + { + return Decrypt(cipherText, appkey); + } + else + { + return ""; + } + } + /// + /// 解密 + /// + /// 加密文本 + /// 密匙 + /// + private static string Decrypt(string sourceText, string sKey) + { + var des = DES.Create(); + int len; + len = sourceText.Length / 2; + byte[] inputByteArray = new byte[len]; + int x, i; + for (x = 0; x < len; x++) + { + i = Convert.ToInt32(sourceText.Substring(x * 2, 2), 16); + inputByteArray[x] = (byte)i; + } + des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); + des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8)); + MemoryStream ms = new MemoryStream(); + CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + byte[] msstr = ms.ToArray(); + cs.Dispose(); + ms.Dispose(); + des.Dispose(); + return Encoding.Default.GetString(msstr); + } + /// + /// 32位MD5加密 + /// + /// 要转为byte[]的文本 + /// + private static string Md5Hash(string input) + { + MD5 md5Hasher = MD5.Create(); + byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); + StringBuilder sBuilder = new StringBuilder(); + for (int i = 0; i < data.Length; i++) + { + sBuilder.Append(data[i].ToString("x2")); + } + md5Hasher.Dispose(); + return sBuilder.ToString(); + } + /// + /// 金蝶K3、KIS系列用户解密。想要加密算法的,联系13823037922 + /// + /// + /// + public static string K3Decrypt(string password) + { + if (password == null) return string.Empty; + int lenint, ASCInt1, ASCInt2, iMod, i; + string UnEncryptStrt, sMidStr; + UnEncryptStrt = ""; + i = 1; + iMod = 1; + + password = Strings.Mid(password, 51, (Strings.Len(password) - 50)); + lenint = Strings.Len(password); + while (i < lenint) + { + sMidStr = Strings.Mid(password, i, 1); + ASCInt1 = Strings.Asc(sMidStr); + i = i + 1; + + sMidStr = Strings.Mid(password, i, 1); + ASCInt2 = Strings.Asc(sMidStr); + + iMod = iMod % 3; + + if (iMod == 1) + { + UnEncryptStrt = UnEncryptStrt + Strings.Chr((ASCInt1 - 32) * 64 + ASCInt2 - 32); + i = i + 1; + } + + if (iMod == 2) + { + UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 16 + (ASCInt2 - 32) / (double)4)); + i = i + 1; + } + + if (iMod == 0) + UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 4 + (ASCInt2 - 32) / (double)16)); + + i = i + 1; + iMod = iMod + 1; + } + + return UnEncryptStrt; + } + + /// + /// AES 加密 + /// + /// 明文(待加密) + /// 密文 + /// + public static string AesEncrypt(string str, string key) + { + if (string.IsNullOrEmpty(str)) return null; + Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str); + + var rm = Aes.Create(); + rm.Key = Encoding.UTF8.GetBytes(key); + rm.Mode = CipherMode.ECB; + rm.Padding = PaddingMode.PKCS7; + + ICryptoTransform cTransform = rm.CreateEncryptor(); + Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + return Convert.ToBase64String(resultArray, 0, resultArray.Length); + } + + /// + /// AES 解密 + /// + /// 明文(待解密) + /// 密文 + /// + public static string AesDecrypt(string str, string key) + { + if (string.IsNullOrEmpty(str)) return null; + Byte[] toEncryptArray = Convert.FromBase64String(str); + + var rm = Aes.Create(); + rm.Key = Encoding.UTF8.GetBytes(key); + rm.Mode = CipherMode.ECB; + rm.Padding = PaddingMode.PKCS7; + + ICryptoTransform cTransform = rm.CreateDecryptor(); + Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + + return Encoding.UTF8.GetString(resultArray); + } + } +} diff --git a/00.未分类/UnitTestProject2/UnitTest1.cs b/00.未分类/UnitTestProject2/UnitTest1.cs index ecefb42..0b8de57 100644 --- a/00.未分类/UnitTestProject2/UnitTest1.cs +++ b/00.未分类/UnitTestProject2/UnitTest1.cs @@ -6,7 +6,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Windows.Forms; using HandleUtils; using System.Data.SqlClient; using Kingdee.BOS.Util; @@ -17,6 +16,9 @@ using Kingdee.BOS.Core.Util; using LexmarkSFTPSDK.Response; using System.Globalization; using System.Xml; +using System.Text; +using HUIWEI.Lexmark.sftp.SDK.Doamin; +using Microsoft.Office.Interop.Excel; namespace UnitTestProject2 { @@ -39,27 +41,30 @@ namespace UnitTestProject2 // var item = a[key]; // item.Add("ttt", "1232"); //} - var rowList = new List(); - var rowList2 = new List>(); - var aaa = rowList2.ToArray(); - Random rd = new Random(); - var r1 = rd.Next(200, 1000); + //var rowList = new List(); + //var rowList2 = new List>(); + //var aaa = rowList2.ToArray(); + //Random rd = new Random(); + //var r1 = rd.Next(200, 1000); - for (int i = 0; i < r1; i++) - { - rowList.Add($"100123,{i},100123,2024-04-07 00:00:00,100123,100123,T_STK_STKTRANSFERINENTRY1"); - } + //for (int i = 0; i < r1; i++) + //{ + // rowList.Add($"100123,{i},100123,2024-04-07 00:00:00,100123,100123,T_STK_STKTRANSFERINENTRY1"); + //} - var len = rowList.Max(x => x.Length); - var num = 8000 / 100; - int ii = 0; - var flag = rowList.Any(); - while (flag) - { - ii++; - var t = rowList.Skip(num * ii).Take(num).ToList(); - flag = num * ii > 8000; - } + //var len = rowList.Max(x => x.Length); + //var num = 8000 / 100; + //int ii = 0; + //var flag = rowList.Any(); + //while (flag) + //{ + // ii++; + // var t = rowList.Skip(num * ii).Take(num).ToList(); + // flag = num * ii > 8000; + //} + var num = 2.00000001; + var res = Math.Ceiling(num); + var t = DateTime.Now.ToShortDateString(); return; } @@ -84,13 +89,132 @@ namespace UnitTestProject2 } + [TestMethod] + public void TestMethod3XML() + { + var receivePath = @"C:\Users\Fareoh\Desktop\对比\新建文件夹\22\"; + var diInfos = new DirectoryInfo(receivePath); + var fileInfos = diInfos.GetFiles(); + var encoding = 65001; + + Application excelApp = new Application(); + Workbook workbook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); + Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; + var allRowNum = 1; + var titleNum = 1; + worksheet.Cells[allRowNum, titleNum++].Value = "PurchaseOrderNumber"; + worksheet.Cells[allRowNum, titleNum++].Value = "PurchaseOrderDate"; + worksheet.Cells[allRowNum, titleNum++].Value = "RequestedDeliveryDate"; + worksheet.Cells[allRowNum, titleNum++].Value = "Currency"; + worksheet.Cells[allRowNum, titleNum++].Value = "TotalAmount"; + worksheet.Cells[allRowNum, titleNum++].Value = "Incoterms"; + worksheet.Cells[allRowNum, titleNum++].Value = "SalesOrganisation"; + worksheet.Cells[allRowNum, titleNum++].Value = "Vendor.PartyId"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.PartyId"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.Name"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.AddressLine1"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.City"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.PostalCode"; + worksheet.Cells[allRowNum, titleNum++].Value = "ShipTo.Country"; + + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.PartyId"; + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.Name"; + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.AddressLine1"; + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.City"; + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.PostalCode"; + worksheet.Cells[allRowNum, titleNum++].Value = "BillTo.Country"; + + worksheet.Cells[allRowNum, titleNum++].Value = "ItemLineNumber"; + worksheet.Cells[allRowNum, titleNum++].Value = "MaterialNumber"; + worksheet.Cells[allRowNum, titleNum++].Value = "EANorUPCNumber"; + worksheet.Cells[allRowNum, titleNum++].Value = "ItemQuantity"; + worksheet.Cells[allRowNum, titleNum++].Value = "ItemUnitPrice"; + worksheet.Cells[allRowNum, titleNum++].Value = "NetPrice"; + worksheet.Cells[allRowNum, titleNum++].Value = "ItemUOM"; + worksheet.Cells[allRowNum, titleNum++].Value = "ItemDescription"; + worksheet.Cells[allRowNum, titleNum++].Value = "ItemCustomField1"; + + allRowNum = 2; + foreach (var fileInfo in fileInfos) + { + var fileName = fileInfo.Name; + using (StreamReader sr = new StreamReader(receivePath + fileName, Encoding.GetEncoding(encoding))) + { + var xml = XmlUtils.LoadSecureXmlDocByReader(sr); + + var purchase = XmlSerializerHelper.Deserialize(xml.InnerXml); + + var header = purchase.Header; + var pItem = purchase.LineItem; + var colNum = 1; + var rowNum = 1; + foreach (var item in pItem) + { + if (rowNum == 1) + { + worksheet.Cells[allRowNum, colNum++].Value = header.PurchaseOrderNumber; + worksheet.Cells[allRowNum, colNum++].Value = header.PurchaseOrderDate; + worksheet.Cells[allRowNum, colNum++].Value = header.RequestedDeliveryDate; + worksheet.Cells[allRowNum, colNum++].Value = header.Currency; + worksheet.Cells[allRowNum, colNum++].Value = header.TotalAmount; + worksheet.Cells[allRowNum, colNum++].Value = header.Incoterms; + worksheet.Cells[allRowNum, colNum++].Value = header.SalesOrganisation; + worksheet.Cells[allRowNum, colNum++].Value = header.Vendor.PartyId; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.PartyId; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.Name; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.AddressLine1; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.City; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.PostalCode; + worksheet.Cells[allRowNum, colNum++].Value = header.ShipTo.Country; + + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.PartyId; + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.Name; + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.AddressLine1; + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.City; + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.PostalCode; + worksheet.Cells[allRowNum, colNum++].Value = header.BillTo.Country; + } + else + { + colNum = 21; + } + + worksheet.Cells[allRowNum, colNum++].Value = item.ItemLineNumber; + worksheet.Cells[allRowNum, colNum++].Value = item.MaterialNumber; + worksheet.Cells[allRowNum, colNum++].Value = item.EANorUPCNumber; + worksheet.Cells[allRowNum, colNum++].Value = item.ItemQuantity; + worksheet.Cells[allRowNum, colNum++].Value = item.ItemUnitPrice; + worksheet.Cells[allRowNum, colNum++].Value = item.NetPrice; + worksheet.Cells[allRowNum, colNum++].Value = item.ItemUOM; + worksheet.Cells[allRowNum, colNum++].Value = item.ItemDescription; + worksheet.Cells[allRowNum, colNum++].Value = item.ItemCustomField1; + + rowNum++; + allRowNum++; + } + } + } + + var guid = Guid.NewGuid().ToString("N"); + workbook.SaveAs($@"C:\Users\Fareoh\Desktop\对比\新建文件夹\{guid}.xlsx"); + + workbook.Close(); + excelApp.Quit(); + } [TestMethod] public void TestMethodSetXml() { + var path = @"C:\Users\Fareoh\Desktop\对比\新建文件夹\LEXMK_Encode.LEXMK_SFTP_PRD.HUIWE_SFTP_PRD.ORDERSUTF8.PO202408080352.20240808035231.45840"; + using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding(65001))) + { + var xml2 = XmlUtils.LoadSecureXmlDocByReader(sr); + var purchase = XmlSerializerHelper.Deserialize(xml2.InnerXml); + } + var dateTIme = DateTime.Now.GetTimestamp(); var date = dateTIme.ToString("yyyyMMdd"); - var xml = XmlUtils.LoadSecureXmlDocByFile(@"D:\Work\GateDge\VS\GateDge2023\00.未分类\UnitTestProject2\POSH_CB_PRODUCTCOSTREDUCTION.xml"); + var xml = XmlUtils.LoadSecureXmlDocByFile(@"C:\Users\Fareoh\Desktop\对比\新建文件夹\LEXMK_Encode.LEXMK_SFTP_PRD.HUIWE_SFTP_PRD.ORDCHGUTF8.POC20240805134.20240805134419.9060.U"); var x2 = JsonUtil.Serialize(""); var x = XmlSerializerHelper.Deserialize(xml.InnerXml); var fieldList = x.BusinessInfo.BusinessInfo.Elements.SysReportForm.SQLDataSource.SQLDataSource.FieldList; @@ -193,27 +317,27 @@ namespace UnitTestProject2 [TestMethod] public void ConvertHTMLtoWord() { - OpenFileDialog dialog = new OpenFileDialog(); - dialog.Filter = "Word|*.docx"; - DialogResult result = dialog.ShowDialog(); - if (result == DialogResult.OK) - { - string filepath = dialog.FileName; - //创建 Document 对象 - Document document = new Document(); + //OpenFileDialog dialog = new OpenFileDialog(); + //dialog.Filter = "Word|*.docx"; + //DialogResult result = dialog.ShowDialog(); + //if (result == DialogResult.OK) + //{ + // string filepath = dialog.FileName; + // //创建 Document 对象 + // Document document = new Document(); - document.LoadFromFile(filepath); - string fileExs = System.IO.Path.GetExtension(filepath); - string fileName = System.IO.Path.GetFileNameWithoutExtension(filepath); - string newFilePath = ""; - //newFilePath = filepath.Replace(fileExs, ".html"); - //document.SaveToFile(newFilePath, FileFormat.Html); - //document.Close(); - newFilePath = filepath.Replace(fileExs, ".xml"); - //document.LoadFromFile(newFilePath, FileFormat.Html); - document.SaveToFile(newFilePath, FileFormat.Xml); - document.Close(); - } + // document.LoadFromFile(filepath); + // string fileExs = System.IO.Path.GetExtension(filepath); + // string fileName = System.IO.Path.GetFileNameWithoutExtension(filepath); + // string newFilePath = ""; + // //newFilePath = filepath.Replace(fileExs, ".html"); + // //document.SaveToFile(newFilePath, FileFormat.Html); + // //document.Close(); + // newFilePath = filepath.Replace(fileExs, ".xml"); + // //document.LoadFromFile(newFilePath, FileFormat.Html); + // document.SaveToFile(newFilePath, FileFormat.Xml); + // document.Close(); + //} } } diff --git a/00.未分类/UnitTestProject2/UnitTestProject2.csproj b/00.未分类/UnitTestProject2/UnitTestProject2.csproj index 440a259..8ae7c0a 100644 --- a/00.未分类/UnitTestProject2/UnitTestProject2.csproj +++ b/00.未分类/UnitTestProject2/UnitTestProject2.csproj @@ -66,6 +66,11 @@ ..\..\..\..\..\..\Program Files\SupportClient\ReceivedFiles\Kingdee.K3.SCM.App.Stock.Report.dll + + + ..\..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll + True + ..\..\packages\Microsoft.Office.Interop.Word.15.0.4797.1004\lib\net20\Microsoft.Office.Interop.Word.dll True @@ -114,6 +119,10 @@ {d6a5e5a0-7529-4ffa-9f9d-b2c610919bf6} HandleUtils + + {1452970B-B4C7-4B42-803E-9DB6EE63ED91} + HUIWEI.Lexmark.sftp.SDK + diff --git a/00.未分类/UnitTestProject2/packages.config b/00.未分类/UnitTestProject2/packages.config index 9603563..e73c552 100644 --- a/00.未分类/UnitTestProject2/packages.config +++ b/00.未分类/UnitTestProject2/packages.config @@ -1,5 +1,7 @@  + + diff --git a/01.扩展/HandleUtils/HandleUtils.csproj b/01.扩展/HandleUtils/HandleUtils.csproj index 8d8cbd3..5f0c2e9 100644 --- a/01.扩展/HandleUtils/HandleUtils.csproj +++ b/01.扩展/HandleUtils/HandleUtils.csproj @@ -64,6 +64,7 @@ + diff --git a/01.扩展/HandleUtils/SFTPHelper.cs b/01.扩展/HandleUtils/SFTPHelper.cs index 761a8ac..6af4cf3 100644 --- a/01.扩展/HandleUtils/SFTPHelper.cs +++ b/01.扩展/HandleUtils/SFTPHelper.cs @@ -154,6 +154,9 @@ namespace HandleUtils var result = new List(); foreach (var file in files) { + if (file.Name.Contains("%LEXMK_SFTP_PRD%HUIWE_SFTP_PRD%BINARY%")) + continue; + using (var fs = File.OpenWrite(localPath + file.Name)) { result.Add(file.Name); diff --git a/01.扩展/HandleUtils/sql/批号来源.sql b/01.扩展/HandleUtils/sql/批号来源.sql new file mode 100644 index 0000000..7998ff7 --- /dev/null +++ b/01.扩展/HandleUtils/sql/批号来源.sql @@ -0,0 +1,7 @@ +SELECT t0.FLOTID,t0.FLOTSTATUS,t0.FNUMBER + ,t1.FBILLDATE,t1.FINSTOCKDATETMP,t1.FORDERTYPE,t1.FBILLFORMID +FROM T_BD_LOTMASTER t0 + INNER JOIN T_BD_LOTMASTERBILLTRACE t1 on t0.FLOTID = t1.FLOTID +WHERE t1.FSTOCKDIRECT = 1 + --AND t0.FLOTID in (9078222,9139693) +ORDER BY t0.FLOTID,t1.FBILLDATE DESC \ No newline at end of file diff --git a/01.扩展/HandleUtils/sql/查询字段所在表.sql b/01.扩展/HandleUtils/sql/查询字段所在表.sql index d610d22..f79fe06 100644 --- a/01.扩展/HandleUtils/sql/查询字段所在表.sql +++ b/01.扩展/HandleUtils/sql/查询字段所在表.sql @@ -6,7 +6,7 @@ FROM syscolumns b WHERE a.id= b.id - AND (b.name LIKE '%appSecret' + AND (b.name LIKE '%FALLAMOUNT_D%' --OR b.name LIKE '%appid' ) AND a.type= 'U' diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/ASN/BillEventPlugInEx.cs b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/ASN/BillEventPlugInEx.cs index e48ce8f..4de3632 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/ASN/BillEventPlugInEx.cs +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/ASN/BillEventPlugInEx.cs @@ -1,9 +1,13 @@ using Kingdee.BOS.App; using Kingdee.BOS.Contracts; +using Kingdee.BOS.Core.CommonFilter; using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; @@ -11,7 +15,7 @@ using System.Text; namespace HUIWEI.Lexmark.sftp.SDK.ASN { - public class BillEventPlugInEx : AbstractOperationServicePlugIn + public class BillEventPlugInEx : AbstractDynamicFormPlugIn { @@ -29,10 +33,24 @@ namespace HUIWEI.Lexmark.sftp.SDK.ASN ISaveService saveService = ServiceHelper.GetService(); //获取加载数据服务 - IViewService viewService = ServiceHelper.GetService(); + var showParameter = new FilterShowParameter(); + showParameter.FormId = "POSH_CB_PROCOSTRESULTREC_FILTER"; + showParameter.ParentPageId = this.View.PageId; + showParameter.CustomComplexParams.Add("", ""); + //showParameter.FilterSchemeId + this.View.ShowForm(showParameter, result => + { + + }); + /*JsonUtil.Serialize*/ + //MainWorker.QuequeTask(Action(setData), Action[AsynResult](showRslt)); + var t = new List(); + //t.AddRange + var ttt = this.View.GetControl("FBatchFilterGrid"); + var jobj = JsonUtil.DeserializeObject(""); //获取物料元数据 FormMetadata materialMetadata = metadataService.Load(this.Context, "ora_SftpOperationRecord") as FormMetadata; @@ -46,6 +64,8 @@ namespace HUIWEI.Lexmark.sftp.SDK.ASN //保存id为10001的物料 saveService.Save(this.Context, materialMetadata.BusinessInfo, objs); + //this.View.ShowMessage(); + } } } diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/PurchaseOrderDoamin.cs b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/PurchaseOrderDoamin.cs index 46a44d4..4bf441f 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/PurchaseOrderDoamin.cs +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/PurchaseOrderDoamin.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Xml.Serialization; -namespace HUIWEI.Lexmark.sftp.SDK.Doamin +namespace HUIWEI.Lexmark.sftp.SDK.Domain { [Serializable()] [DesignerCategory("code")] diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/HUIWEI.Lexmark.sftp.SDK.csproj b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/HUIWEI.Lexmark.sftp.SDK.csproj index 0ad2a84..c9e0852 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/HUIWEI.Lexmark.sftp.SDK.csproj +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/HUIWEI.Lexmark.sftp.SDK.csproj @@ -110,5 +110,10 @@ Settings.Designer.cs + + + + + \ No newline at end of file diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/PO/GetPurchaseOrderFromSFTP.cs b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/PO/GetPurchaseOrderFromSFTP.cs index dccdd3d..8eef4ed 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/PO/GetPurchaseOrderFromSFTP.cs +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/PO/GetPurchaseOrderFromSFTP.cs @@ -1,5 +1,5 @@ using HandleUtils; -using HUIWEI.Lexmark.sftp.SDK.Doamin; +using HUIWEI.Lexmark.sftp.SDK.Domain; using Kingdee.BOS; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core; @@ -18,9 +18,11 @@ using Newtonsoft.Json; using System.Data; using System.IO; using System.ComponentModel; -using HUIWEI.Lexmark.sftp.SDK.Domain; using Kingdee.BOS.WebApi.DataEntities; using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.App; +using Kingdee.BOS.Orm; namespace HUIWEI.Lexmark.sftp.SDK.PO { @@ -46,6 +48,7 @@ SELECT t0.FID,t0.FNUMBER,t0.FSALEORGID ,t0.FSFTPUSER,t0.FSFTPCLIENT,t0.FSFTPPASSWORD,t0.FSFTPLINKPATH,t0.FSFTPPORT ,t0.FSFTPPUTPATH,t0.FSFTPGETPATH ,t0.FSFTPBEFORESAVEPATH,t0.FSFTPAFTERSAVEPATH + ,t0.FEncoding ,t1.FNUMBER AS 'OrgNumber' ,t2.FNUMBER AS 'CustNumber' ,t3.FNUMBER AS 'DeliveryWay' @@ -94,11 +97,21 @@ WHERE 1=1 //文件接收地址 var receivePath = row["FSFTPBEFORESAVEPATH"].ToString() + "/RECEIVE/"; + var encoding = row["FEncoding"].Long2Int(); + + //设置上下文组织 + ctx.CurrentOrganizationInfo = new OrganizationInfo(); + ctx.CurrentOrganizationInfo.ID = row["FSALEORGID"].Long2Int(); + + if (encoding == 0) + encoding = 65001; + //encoding = 1252; + if (!Directory.Exists(receivePath)) Directory.CreateDirectory(receivePath); SFTPHelper helper = new SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort); - + //%LEXMK_SFTP_PRD%HUIWE_SFTP_PRD%BINARY% helper.Mget(FSFTPGetPath, receivePath, (List fileNames) => { var diInfos = new DirectoryInfo(receivePath); @@ -106,12 +119,10 @@ WHERE 1=1 foreach (var fileInfo in fileInfos) { - var fileName = fileInfo.Name; var result = false; var orderTypePath = ""; - var moveReceivePath = ""; var poNo = ""; var billNo = ""; @@ -119,7 +130,7 @@ WHERE 1=1 var resMsg = ""; try { - using (StreamReader sr = new StreamReader(receivePath + fileName, Encoding.GetEncoding(1252))) + using (StreamReader sr = new StreamReader(receivePath + fileName, Encoding.GetEncoding(encoding))) { var xml = XmlUtils.LoadSecureXmlDocByReader(sr); @@ -153,7 +164,11 @@ WHERE 1=1 Logger.Error($"服务器插件:{schedule.Name}", ex.Message, ex); } - ReceiveLog(ctx, fileName, moveReceivePath, poNo, billNo, billId, orderTypePath, result ? "1" : "-1", resMsg); + var receiveResult = ReceiveLog(ctx, fileName, moveReceivePath, poNo, billNo, billId, orderTypePath, result ? "1" : "-1", resMsg); + if (receiveResult != null && !receiveResult.IsSuccess) + { + Logger.Info($"服务器插件:{schedule.Name},日志记录", JsonUtil.Serialize(receiveResult)); + } } return true; @@ -176,36 +191,64 @@ WHERE 1=1 BillNo = ""; BillId = 0; - var sqlL = $@"/*dialect*/ -SELECT t0.FID,t0f.FENTRYID AS FINID,t0e.FENTRYID,t0e.FCPOITEMNO,t0.FHeadPO -FROM T_SAL_ORDER t0 - INNER JOIN T_SAL_ORDERFIN t0f on t0f.FID = t0.FID - INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID -WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}' -"; - - // sqlL = $@"/*dialect*/ - //SELECT * FROM TMP_SALEORDER_20240628 t0 - //WHERE t0.FHeadPO = '{header.PurchaseOrderNumber}' + // var sqlL = $@"/*dialect*/ + //SELECT t0.FID,t0f.FENTRYID AS FINID,t0e.FENTRYID,t0e.FCPOITEMNO,t0.FHeadPO + // ,t0.FDOCUMENTSTATUS + //FROM T_SAL_ORDER t0 + // INNER JOIN T_SAL_ORDERFIN t0f on t0f.FID = t0.FID + // INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID + //WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}' //"; + + var sqlL = $@"/*dialect*/ +EXEC PROC_SELECT_SAL_ORDER_BY_LEX '{purchaseOrder.Header.PurchaseOrderNumber}' +"; var dbSet = DBServiceHelper.ExecuteDynamicObject(ctx, sqlL); string result = string.Empty; - + //Logger.Info("AAAAAA", purchaseOrder.Header.OrderType); if (purchaseOrder.Header.OrderType.Equals("ORDERS")) { if (dbSet == null || dbSet.Count == 0) result = Add(ctx, purchaseOrder, sftpBaseInfo); } - else if (purchaseOrder.Header.OrderType.Equals("ORDCHG")) + else { - result = Update(ctx, purchaseOrder, sftpBaseInfo, dbSet); + if (dbSet != null && dbSet.Count > 0) + { + var data = dbSet[0]; + var documentStatus = data["FDOCUMENTSTATUS"] == null ? "" : data["FDOCUMENTSTATUS"].ToString(); + var doUnAudit = data["DoUnAudit"] == null ? "" : data["DoUnAudit"].ToString(); + + //如果但是是审核状态先反审核 + if (doUnAudit.Equals("Y") && (documentStatus.Equals("C"))) + { + //审核\反审核id为10001的物料数据 + //获取单据状态转换服务 + ISetStatusService setStatusService = ServiceHelper.GetService(); + //获取元数据服务 + IMetaDataService metaDataService = ServiceHelper.GetService(); + //构建id为10001的数据集合 + List> lstKeyValuePairs = new List>(); + KeyValuePair keyValuePair = new KeyValuePair(data["FID"], ""); + lstKeyValuePairs.Add(keyValuePair); + //获取物料元数据 + FormMetadata materialMetaData = metaDataService.Load(ctx, "SAL_SaleOrder") as FormMetadata; + //反审核 + IOperationResult unAuditResult = setStatusService.SetBillStatus(ctx, materialMetaData.BusinessInfo, lstKeyValuePairs, null, "UnAudit"); + } + + result = Update(ctx, purchaseOrder, sftpBaseInfo, dbSet); + } } - if (result.IsNullOrEmpty()) + if (!result.Contains("{")) + { + resMsg = result; return false; + } - var resultData = JsonConvert.DeserializeObject(result); + ResultData resultData = JsonConvert.DeserializeObject(result); if (resultData != null) { @@ -219,16 +262,162 @@ WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}' BillNo = resReturn.FBillNo; Logger.Info("EID转换", $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber},销售订单号:{res.Number},类型:{purchaseOrder.Header.OrderType}"); - return res.ResponseStatus.IsSuccess; + } + else + { + resMsg = JsonUtil.SerializeWithOutNull(res.ResponseStatus.Errors); + Logger.Info("EID转换", $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber},错误信息:{resMsg}"); } - resMsg = JsonUtil.SerializeWithOutNull(res.ResponseStatus); + + return res.ResponseStatus.IsSuccess; } - return false; } + /// + /// app层代码 + /// + /// + /// + /// + /// + /// + /// + /// + private bool AddOrUpdate(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, ref string BillNo, ref long BillId, ref string resMsg) + { + BillNo = ""; + BillId = 0; + resMsg = ""; + + var header = purchaseOrder.Header; + var lineItem = purchaseOrder.LineItem; + + try + { + var sqlL = $@"/*dialect*/ +EXEC PROC_SELECT_SAL_ORDER_BY_LEX '{purchaseOrder.Header.PurchaseOrderNumber}' +"; + var dbSet = DBServiceHelper.ExecuteDynamicObject(ctx, sqlL); + + string result = string.Empty; + + + //获取元数据服务 + IMetaDataService metaDataService = ServiceHelper.GetService(); + //获取物料元数据 + FormMetadata saleOrderMetaData = metaDataService.Load(ctx, "SAL_SaleOrder") as FormMetadata; + + DynamicObject dataObj = null; + var dynaicObjType = saleOrderMetaData.BusinessInfo.GetDynamicObjectType(); + if (purchaseOrder.Header.OrderType.Equals("ORDERS")) + { + if (dbSet == null || dbSet.Count == 0) + { + ////代码调用的话再Option中传入忽略警告参数 + //OperateOption operation = OperateOption.Create(); operation.SetIgnoreWarning(true); + dataObj = new DynamicObject(dynaicObjType); + result = AddSalOrder(ctx, purchaseOrder, sftpBaseInfo, dataObj); + } + else + { + var data = dbSet[0]; + resMsg = $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber}已存在,ERP销售订单号:{data["FBILLNO"]},请重新核对数据!"; + return false; + } + } + else + { + if (dbSet != null && dbSet.Count > 0) + { + var data = dbSet[0]; + var documentStatus = data["FDOCUMENTSTATUS"] == null ? "" : data["FDOCUMENTSTATUS"].ToString(); + var doUnAudit = data["DoUnAudit"] == null ? "" : data["DoUnAudit"].ToString(); + BillId = data["FID"].Long2Int(); + + //如果但是是审核状态先反审核 + if (doUnAudit.Equals("Y") && (documentStatus.Equals("C"))) + { + //审核\反审核id为10001的物料数据 + //获取单据状态转换服务 + ISetStatusService setStatusService = ServiceHelper.GetService(); + + var lstDict = new Dictionary + { + { BillId, "" } + }; + + //反审核 + IOperationResult unAuditResult = setStatusService.SetBillStatus(ctx, saleOrderMetaData.BusinessInfo, lstDict.ToList(), null, "UnAudit"); + + if (unAuditResult == null || !unAuditResult.IsSuccess) + { + var unAuditResMsg = unAuditResult.OperateResult.ToList(); + var r = unAuditResMsg[0]; + } + } + + //获取加载数据服务 + IViewService viewService = ServiceHelper.GetService(); + + + + var option = OperateOption.Create(); + option.SetThrowExceptionWhenNotFind(false);//内码不存在时返回null + + //var saleOrderObj = viewService.LoadSingle(ctx, BillId, dynaicObjType, option); + dataObj = viewService.LoadSingle(ctx, BillId, dynaicObjType, option); + + result = UpdateSalOrder(ctx, purchaseOrder, sftpBaseInfo, dataObj); + } + } + } + catch (Exception ex) + { + throw ex; + } + + return true; + } + + private string AddSalOrder(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, DynamicObject dataObj) + { + try + { + + } + catch (Exception ex) + { + + } + finally + { + + } + + return ""; + } + + private string UpdateSalOrder(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, DynamicObject dataObj) + { + try + { + + } + catch (Exception ex) + { + + } + finally + { + + } + + return ""; + } + /// /// 更新 /// @@ -335,26 +524,7 @@ WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}' var materials = lineItem.Select(x => x.MaterialNumber).ToList(); var materialSqlL = $@"/*dialect*/ -SELECT * -FROM ( - SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME,t0_l.FSPECIFICATION,t1.FNUMBER Unit - ,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID' - ,CONVERT(int,t0ap.FISENABLE) FISENABLE - FROM T_BD_MATERIAL t0 - INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID - AND t0_l.FLOCALEID = 2052 - INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID - INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID - LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID - WHERE 1=1 - AND t0.FUSEORGID = {sftpBaseInfo["FSALEORGID"].Long2Int()} - AND t0_l.FSPECIFICATION IN ('{string.Join("','", materials)}') -) t0 -PIVOT -( - SUM(t0.FISENABLE) FOR - t0.FAUXPROPERTYID IN (FF100001,FF100002) -) t1 +EXEC CHECK_MATERIAL_BY_LEX {sftpBaseInfo["FSALEORGID"].Long2Int()},'{string.Join(",", materials)}' "; // materialSqlL = $@"/*dialect*/ @@ -379,6 +549,7 @@ PIVOT if (dbEntry != null) entryRow.Add("FENTRYID", dbEntry["FENTRYID"].Long2Int()); + entryRow.Add("FLexMaterialNumber", item.MaterialNumber); //要货日期 entryRow.Add("F_PAEZ_Datetime", requestedDeliveryDate); //客户订单号 @@ -529,34 +700,11 @@ PIVOT var materials = lineItem.Select(x => x.MaterialNumber).ToList(); var materialSqlL = $@"/*dialect*/ -SELECT * -FROM ( - SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME,t0_l.FSPECIFICATION,t1.FNUMBER Unit - ,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID' - ,CONVERT(int,t0ap.FISENABLE) FISENABLE - FROM T_BD_MATERIAL t0 - INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID - AND t0_l.FLOCALEID = 2052 - INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID - INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID - LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID - WHERE 1=1 - AND t0.FUSEORGID = {sftpBaseInfo["FSALEORGID"].Long2Int()} - AND t0_l.FSPECIFICATION IN ('{string.Join("','", materials)}') -) t0 -PIVOT -( - SUM(t0.FISENABLE) FOR - t0.FAUXPROPERTYID IN (FF100001,FF100002) -) t1 +EXEC CHECK_MATERIAL_BY_LEX {sftpBaseInfo["FSALEORGID"].Long2Int()},'{string.Join(",", materials)}' "; - // materialSqlL = $@"/*dialect*/ - //SELECT * FROM TMP_MATERIAL_20240628 WHERE FSPECIFICATION IN ('{string.Join("','", materials)}') - //"; - var datas = DBServiceHelper.ExecuteDynamicObject(ctx, materialSqlL); if (datas == null || datas.Count == 0) - return ""; + return $"对应客户产品:{string.Join(",", materials)},不存在。"; // 通过循环创建单据体行: foreach (var item in lineItem) @@ -569,6 +717,9 @@ PIVOT var materialNumber = item.MaterialNumber; var material = datas.FirstOrDefault(w => w["FSPECIFICATION"].ToString().Equals(materialNumber)); + if (material == null) + return $"对应客户产品:{materialNumber},不存在。"; + //要货日期 entryRow.Add("F_PAEZ_Datetime", requestedDeliveryDate); //客户订单号 @@ -576,6 +727,8 @@ PIVOT //客户订单行号 entryRow.Add("FCPOItemNo", item.ItemLineNumber); + entryRow.Add("FLexMaterialNumber", item.MaterialNumber); + entryRow.Add("FMaterialId", new JObject { { "FNumber", material["FNUMBER"].ToString() } }); entryRow.Add("FUnitID", new JObject { { "FNumber", material["Unit"].ToString() } }); entryRow.Add("FPriceUnitId", new JObject { { "FNumber", material["Unit"].ToString() } }); @@ -600,10 +753,10 @@ PIVOT entryRow.Add("FOUTLMTUNIT", "SAL"); } - var dataJson = jsonRoot.ToString(); - //Logger.Info("测试EDI转换", jsonRoot.ToString()); + Logger.Info("测试EDI转换", jsonRoot.ToString()); var result = Save("SAL_SaleOrder", jsonRoot.ToString(), ctx); + Logger.Info($"服务器插件:EDI 返回结果日志记录", result); return result; } @@ -613,7 +766,6 @@ PIVOT } } - /// /// 时间格式转换 /// @@ -668,7 +820,7 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi return result; } - private bool ReceiveLog(Context ctx, string FFileName, string FFilePath, string FPO, string FERPBillNo, long FERPBillId, string FFileTypeText, string FIsSuccess, string msg) + private IOperationResult ReceiveLog(Context ctx, string FFileName, string FFilePath, string FPO, string FERPBillNo, long FERPBillId, string FFileTypeText, string FIsSuccess, string msg) { //AddSftpOpRecord(FFileName, FFilePath, FPO, FERPBillNo, FERPBillId, FFileTypeText): @@ -681,6 +833,7 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi newObj["FReceiveOrSend"] = "1"; newObj["FFileName"] = FFileName; newObj["FFilePath"] = FFilePath; + newObj["FDate"] = DateTime.Now; newObj["FPO"] = FPO; newObj["FERPBillNo"] = FERPBillNo; newObj["FERPBillId"] = FERPBillId; @@ -696,7 +849,9 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi //# 例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库 var saveRslt = BusinessDataServiceHelper.Save(ctx, meta.BusinessInfo, ObjList.ToArray(), null, "Save"); - return true; + Logger.Info($"服务器插件:EDI日志记录信息(ReceiveLog)", JsonUtil.SerializeWithOutNull(saveRslt)); + + return saveRslt; } } diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/查询销售订单存储过程.sql b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/查询销售订单存储过程.sql new file mode 100644 index 0000000..ac88b21 --- /dev/null +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/查询销售订单存储过程.sql @@ -0,0 +1,11 @@ +ALTER PROCEDURE [dbo].[PROC_SELECT_SAL_ORDER_BY_LEX] + @PurchaseOrderNumber varchar(100) +AS +BEGIN + SELECT t0.FID,t0f.FENTRYID AS FINID,t0e.FENTRYID,t0e.FCPOITEMNO,t0.FHeadPO + ,t0.FDOCUMENTSTATUS,'Y' AS 'DoUnAudit' + FROM T_SAL_ORDER t0 + INNER JOIN T_SAL_ORDERFIN t0f on t0f.FID = t0.FID + INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID + WHERE t0.FHeadPO = @PurchaseOrderNumber +END \ No newline at end of file diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql new file mode 100644 index 0000000..6518352 --- /dev/null +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql @@ -0,0 +1,33 @@ +CREATE PROC CHECK_MATERIAL_BY_LEX + @ORGID int, + @materialNumber varchar(2000) +AS +BEGIN + + ;WITH #LEX_MaterialNumber AS( + SELECT b.billno + FROM (SELECT CAST(''+REPLACE(@materialNumber,',','')+'' AS xml) billno) a + OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b + ) + SELECT * + FROM ( + SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME,t0_l.FSPECIFICATION,t1.FNUMBER Unit + ,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID' + ,CONVERT(int,t0ap.FISENABLE) FISENABLE + FROM T_BD_MATERIAL t0 + INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID + AND t0_l.FLOCALEID = 2052 + INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID + INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID + INNER JOIN #LEX_MaterialNumber tx on CHARINDEX(tx.billno,t0_l.FNAME) > 0 + LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID + WHERE 1=1 + AND t0.FUSEORGID = @ORGID + ) t0 + PIVOT + ( + SUM(t0.FISENABLE) FOR + t0.FAUXPROPERTYID IN (FF100001,FF100002) + ) t1 + +END \ No newline at end of file diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/AR_receivable/BillEventPlugInEx.py b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/AR_receivable/BillEventPlugInEx.py new file mode 100644 index 0000000..c6b3df1 --- /dev/null +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/AR_receivable/BillEventPlugInEx.py @@ -0,0 +1,166 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Xml") +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("HandleUtils") +clr.AddReference("HUIWEI.Lexmark.sftp.SDK") + +from Kingdee.BOS import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Contracts import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Util import * +from System import * +from System.Xml import * +from System.ComponentModel import * +from System.Collections.Generic import * +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from HandleUtils import * +from HUIWEI.Lexmark.sftp.SDK.Domain import * + +def BarItemClick(e): + if e.BarItemKey == "tbSendPoInvoicToSFTP": + + billObj = this.View.Model.DataObject; + if billObj.CustomerID_Id != 957286: + return + + sqlL = """/*dialect*/ +WITH #辅助资料 AS ( + SELECT t1_l.FNAME,t1e_l.FDATAVALUE,t1e.FENTRYID,t1e.FNUMBER + FROM T_BAS_ASSISTANTDATA_L t1_l + INNER JOIN T_BAS_ASSISTANTDATAENTRY t1e on t1_l.FID = t1e.FID + INNER JOIN T_BAS_ASSISTANTDATAENTRY_L t1e_l on t1e_l.FENTRYID = t1e.FENTRYID AND t1e_l.FLOCALEID = 2052 + WHERE t1_l.FLOCALEID = 2052 +) +SELECT t0.FID,t0.FNUMBER + ,t0.FSFTPUSER,t0.FSFTPCLIENT,t0.FSFTPPASSWORD,t0.FSFTPLINKPATH,t0.FSFTPPORT + ,t0.FSFTPPUTPATH,t0.FSFTPGETPATH + ,t0.FSFTPBEFORESAVEPATH,t0.FSFTPAFTERSAVEPATH + ,t1.FNUMBER AS 'OrgNumber' + ,t2.FNUMBER AS 'CustNumber' + ,t3.FNUMBER AS 'DeliveryWay' + ,t4.FNUMBER AS 'DeptNumber' + ,t5.FNUMBER AS 'SalerNumber' + ,t6.FNUMBER AS 'SaleType' + ,t7.FNUMBER AS 'CurrNumber' + ,t8.FNUMBER AS 'RateType' + ,t9.FNUMBER AS 'FMODESOFPACKING' + ,t10.FNUMBER AS 'FMODESOFPACKING1' +FROM T_CLIENT_SFTP_LINK t0 + INNER JOIN T_ORG_ORGANIZATIONS t1 on t1.FORGID = t0.FSALEORGID + INNER JOIN T_BD_CUSTOMER t2 on t2.FCUSTID = t0.FCUSTID + LEFT JOIN #辅助资料 t3 on t3.FNAME = '交货方式' AND t3.FENTRYID = t0.FHEADDELIVERYWAY + LEFT JOIN T_BD_DEPARTMENT t4 on t4.FDEPTID = t0.FSALEDEPTID + LEFT JOIN V_BD_SALESMAN t5 on t5.fid = t0.FSALERID + LEFT JOIN #辅助资料 t6 on t6.FNAME = '销售类别' AND t6.FENTRYID = t0.FSALETYPE + LEFT JOIN T_BD_CURRENCY t7 on t7.FCURRENCYID = t0.FSETTLECURRID + LEFT JOIN T_BD_RATETYPE t8 on t8.FRATETYPEID = t0.FEXCHANGETYPEID + LEFT JOIN #辅助资料 t9 on t9.FNAME = '包装方式' AND t9.FENTRYID = t0.FMODESOFPACKING + LEFT JOIN #辅助资料 t10 on t10.FNAME = '包装方式' AND t10.FENTRYID = t0.FMODESOFPACKING1 +WHERE 1=1 + AND t0.FNUMBER = 'SFTP202407071' + AND t0.FDOCUMENTSTATUS = 'C' + AND t0.FFORBIDSTATUS = 'A' + """; + + data = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + row = data[0] + + # //用户 + FSFTPUser = row["FSFTPUSER"]; + # //客户 + FSFTPClient = row["FSFTPCLIENT"]; + # //密码 + FSFTPPassword = row["FSFTPPASSWORD"]; + # //登录地址 + FSFTPLinkPath = row["FSFTPLINKPATH"]; + # //端口号 + FSFTPPort = int(row["FSFTPPORT"]); + # //推送地址 /HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKASNXML + FSFTPPutPath = str(row["FSFTPPUTPATH"]); + FSFTPPutPath = FSFTPPutPath + '/LEXMKASNXML/' + # FSFTPPutPath = '/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKASNXML/' + # raise Exception(FSFTPPutPath) + + # //存放地址 + sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/ASN/"; + + helper = SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort) + + PONumber = "" + + InvoicObj = A(); + + message = ""; + + # 转换成xml字符串 + InvoicXmlStr = XmlSerializerHelper.Serialize(InvoicObj); + + # 创建XML文件 + xmldoc = XmlDocument(); + # 加载成XML文件 + xmldoc.LoadXml(InvoicXmlStr) + # 文件名 + fileName = "ASN" + PONumber + GetFileName() + + # 保存XML文件 + xmldoc.Save(sendPath + fileName); + + # 推送到SFTP + helper.Put(sendPath + fileName, FSFTPPutPath + fileName); + + AddSftpOpRecord(fileName,sendPath,PONumber,billObj.BillNo,billObj.Id,"ASN") + + this.View.ShowMessage("ASN推送完成,PO:{0},文件名:{1}".format(ASNHeader.LEX_PO,fileName)) + + +def GetFileName(): + fileName = "" + dateTime = DateTime.Now + # fileName = fileName + dateTime.ToString("yyyyMMdd") + str(DateTimeFormatUtils.GetTimestamp(dateTime)) + fileName = "{0}_{1}_{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime))) + + return fileName + +# 写记录 +def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText): + + formID="ora_SftpOperationRecord";#单据FormId + meta = MetaDataServiceHelper.Load(this.Context, formID);#读取单据的元数据 + + objType=meta.BusinessInfo.GetDynamicObjectType();#获取单据数据包的对象类型 + + newObj = DynamicObject(objType) + newObj["FReceiveOrSend"] = "2" + newObj["FFileName"] = FFileName + newObj["FFilePath"] = FFilePath + newObj["FDate"] = DateTime.Now + newObj["FPO"] = FPO + newObj["FERPBillNo"] = FERPBillNo + newObj["FERPBillId"] = FERPBillId + newObj["FFileTypeText"] = FFileTypeText + newObj["FIsSuccess"] = "1"; + newObj["FResMsg"] = ""; + + ObjList=List[DynamicObject]();#单据的数据包集合 + + ObjList.Add(newObj); + #注意!调用保存时,传入的必须是完整的单据数据包 + #Q:既然是Save方法,为什么还要传操作代码"Save"呢? + #A:Save方法调用的是单据操作列表中,"操作类型=保存"的操作,可以为单据添加多个"操作类型=保存"的操作。 + #例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库 + saveRslt = BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save"); + + # raise Exception(JsonUtil.Serialize(newObj)) \ No newline at end of file diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/SAL_SaleOrder/BillEventPlugInEx.py b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/SAL_SaleOrder/BillEventPlugInEx.py index 9448861..c484e93 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/SAL_SaleOrder/BillEventPlugInEx.py +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/SAL_SaleOrder/BillEventPlugInEx.py @@ -11,7 +11,6 @@ clr.AddReference("HandleUtils") clr.AddReference("HUIWEI.Lexmark.sftp.SDK") from Kingdee.BOS import * -# from Kingdee.BOS.App import * from Kingdee.BOS.Core import * from Kingdee.BOS.Contracts import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * @@ -36,7 +35,6 @@ def BarItemClick(e): billObj = this.View.Model.DataObject; if billObj.CustId_Id != 957286: return - # raise Exception(JsonUtil.Serialize(billObj)) sqlL = """/*dialect*/ WITH #辅助资料 AS ( @@ -72,7 +70,8 @@ FROM T_CLIENT_SFTP_LINK t0 LEFT JOIN #辅助资料 t9 on t9.FNAME = '包装方式' AND t9.FENTRYID = t0.FMODESOFPACKING LEFT JOIN #辅助资料 t10 on t10.FNAME = '包装方式' AND t10.FENTRYID = t0.FMODESOFPACKING1 WHERE 1=1 - AND t0.FNUMBER = 'SFTP202407071' + --AND t0.FNUMBER = 'SFTP202407071' --测试 + AND t0.FNUMBER = 'SFTP202407311' AND t0.FDOCUMENTSTATUS = 'C' AND t0.FFORBIDSTATUS = 'A' """; @@ -91,11 +90,16 @@ WHERE 1=1 FSFTPLinkPath = row["FSFTPLINKPATH"]; # //端口号 FSFTPPort = int(row["FSFTPPORT"]); - # //推送地址/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKORDERACK - FSFTPPutPath = row["FSFTPPUTPATH"] + "/LEXMKORDERACK"; - + + # FSFTPPutPath = str(row["FSFTPPUTPATH"]); + # FSFTPPutPath = FSFTPPutPath + '/LEXMKORDERACK/' + # 测试地址 + # FSFTPPutPath = '/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKORDERACK/' + # 正式地址 + FSFTPPutPath = '/HUIWE_SFTP_PRD/LEXMK_SFTP_PRD/LEXMKORDERACK/' + # //存放地址 - sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/POACK/"; + sendPath = row["FSFTPBEFORESAVEPATH"] + "/SEND/POACK/"; helper = SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort) @@ -112,15 +116,20 @@ WHERE 1=1 POAckHeader.EndUserOrderNumber = billObj["BillNo"] POAckHeader.PurchaseOrderDate = (str(billObj["Date"])[0:10]).replace("-","") + if POAckHeader.PurchaseOrderNumber == None or POAckHeader.PurchaseOrderNumber.strip() == "": + raise Exception("回复交期失败!PO#:不能为空!") + POAckLineItem = List[PurchaseOrderAckLineItem]() saleOrderEntry = billObj.SaleOrderEntry message = ""; + tempNum = 0 for saleOrder in saleOrderEntry: # 已回复交期 IsReplyDelDate = saleOrder["FIsReplyDeliveryDate"] if IsReplyDelDate == 1: + tempNum = tempNum + 1; continue; POAckItem = PurchaseOrderAckLineItem() @@ -128,26 +137,47 @@ WHERE 1=1 if requestDate != None: if message == "": POAckItem.DeliveryDate = str(DateTimeFormatUtils.ToString(requestDate,"yyyyMMdd")) - POAckItem.ItemLineNumber = saleOrder["FCPOItemNo"] + + poItemNo = saleOrder["FCPOItemNo"] + + if poItemNo == None or poItemNo == "": + message += "第{0}行,产品编码:{1},客户序列号不存在!",format(saleOrder["Seq"] ,POAckItem.MaterialNumber) + # poItemNo = str(saleOrder["Seq"]).rjust(4,'0').ljust(5,'0') + continue; + + POAckItem.ItemLineNumber = poItemNo POAckItem.ItemQuantity = saleOrder["Qty"] POAckItem.ItemUOM = "EA" - materialId = saleOrder["MaterialId"] - specification = materialId["Specification"] - - for speci in specification: - if speci.Key == 2052: - POAckItem.MaterialNumber = speci.Value - break; + + materialNumber= saleOrder["FLexMaterialNumber"] + # if materialNumber == None or materialNumber == "": + # message += "产品编码:{0},客户产品编码无效!/r/n".format(saleOrder["MaterialId"]["Number"]) + # break; + # POAckItem.MaterialNumber = materialNumber + + if materialNumber != None or materialNumber != "": + POAckItem.MaterialNumber = materialNumber + else: + materialId = saleOrder["MaterialId"] + specification = materialId["Specification"] + + for speci in specification: + if speci.Key == 2052: + POAckItem.MaterialNumber = speci.Value + break; POAckLineItem.Add(POAckItem) else: - message += "物料编码:{0},回复交期未填写!/r/n".format(saleOrder["MaterialId"]["Number"]) + message += "产品编码:{0},回复交期未填写!/r/n".format(saleOrder["MaterialId"]["Number"]) + + if tempNum == saleOrderEntry.Count: + raise Exception("交期均已回复!"); if message != "": raise Exception(message) if POAckLineItem.Count == 0: - return; + raise Exception("无提交数据"); purchaseOrderAck.Header = POAckHeader purchaseOrderAck.LineItem = POAckLineItem @@ -164,28 +194,30 @@ WHERE 1=1 xmldoc.Save(sendPath + fileName); # 推送对应文件到SFTP - helper.Put(sendPath + fileName, FSFTPPutPath); + helper.Put(sendPath + fileName, FSFTPPutPath + fileName); -# updSql = """ -# UPDATE t0e SET t0e.FIsReplyDeliveryDate = '1' -# FROM T_SAL_ORDER t0 -# INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID -# WHERE t0.FID = {0} -# AND t0e.FIsReplyDeliveryDate != '1' -# """.format(billObj.Id) + # raise Exception(FSFTPPutPath) -# num = DBServiceHelper.Execute(this.Context, updSql) + updSql = """/*dialect*/ +UPDATE t0e SET t0e.FIsReplyDeliveryDate = '1' +FROM T_SAL_ORDER t0 + INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID +WHERE t0.FID = {0} + AND t0e.FIsReplyDeliveryDate != '1' + """.format(billObj.Id) + + num = DBServiceHelper.Execute(this.Context, updSql) AddSftpOpRecord(fileName,sendPath,POAckHeader.PurchaseOrderNumber,billObj.BillNo,billObj.Id,"PoAck") this.View.ShowMessage("POACK推送完成,PO:{0},文件名:{1}".format(POAckHeader.PurchaseOrderNumber,fileName)) - + def GetFileName(): fileName = "" dateTime = DateTime.Now # fileName = fileName + dateTime.ToString("yyyyMMdd") + str(DateTimeFormatUtils.GetTimestamp(dateTime)) - fileName = "{0}{1}{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime))) + fileName = "{0}_{1}_{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime))) return fileName @@ -201,6 +233,7 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText) newObj["FReceiveOrSend"] = "2" newObj["FFileName"] = FFileName newObj["FFilePath"] = FFilePath + newObj["FDate"] = DateTime.Now newObj["FPO"] = FPO newObj["FERPBillNo"] = FERPBillNo newObj["FERPBillId"] = FERPBillId @@ -215,6 +248,6 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText) #Q:既然是Save方法,为什么还要传操作代码"Save"呢? #A:Save方法调用的是单据操作列表中,"操作类型=保存"的操作,可以为单据添加多个"操作类型=保存"的操作。 #例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库 - saveRslt=BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save"); + saveRslt = BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save"); # raise Exception(JsonUtil.Serialize(newObj)) diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/Sal_OutStock/BillEventPlugInEx.py b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/Sal_OutStock/BillEventPlugInEx.py index ea691f5..1613be1 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/Sal_OutStock/BillEventPlugInEx.py +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/Sal_OutStock/BillEventPlugInEx.py @@ -12,10 +12,12 @@ clr.AddReference("HUIWEI.Lexmark.sftp.SDK") 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.Contracts import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Util import * from Kingdee.BOS.Core.Util import * from System import * @@ -29,13 +31,13 @@ from HUIWEI.Lexmark.sftp.SDK.Domain import * def BarItemClick(e): if e.BarItemKey == "tbSendPoASNToSFTP": - # raise Exception(JsonUtil.Serialize(billObj)) + billObj = this.View.Model.DataObject; if billObj.CustomerID_Id != 957286: return - if billObj["FIsReplyASN"] == "1": - return + # if billObj["FIsReplyASN"] == "1": + # return sqlL = """/*dialect*/ WITH #辅助资料 AS ( @@ -71,9 +73,11 @@ FROM T_CLIENT_SFTP_LINK t0 LEFT JOIN #辅助资料 t9 on t9.FNAME = '包装方式' AND t9.FENTRYID = t0.FMODESOFPACKING LEFT JOIN #辅助资料 t10 on t10.FNAME = '包装方式' AND t10.FENTRYID = t0.FMODESOFPACKING1 WHERE 1=1 - AND t0.FNUMBER = 'SFTP202407071' + --AND t0.FNUMBER = 'SFTP202407071' --测试 + AND t0.FNUMBER = 'SFTP202407311' AND t0.FDOCUMENTSTATUS = 'C' AND t0.FFORBIDSTATUS = 'A' +ORDER BY t0.FID """; data = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) @@ -90,7 +94,10 @@ WHERE 1=1 # //端口号 FSFTPPort = int(row["FSFTPPORT"]); # //推送地址 /HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKASNXML - FSFTPPutPath = row["FSFTPPUTPATH"] + "/LEXMKASNXML"; + FSFTPPutPath = str(row["FSFTPPUTPATH"]); + FSFTPPutPath = FSFTPPutPath + '/LEXMKASNXML/' + # FSFTPPutPath = '/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKASNXML/' + # raise Exception(FSFTPPutPath) # //存放地址 sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/ASN/"; @@ -175,7 +182,7 @@ WHERE 1=1 # 箱数 palletsObj = item["F_ora_Text"]; - pallets = 1 if palletsObj == None or palletsObj == "" else int(palletsObj); + pallets = 1 if palletsObj == None or palletsObj.strip() == "" else int(palletsObj); asnItem.Pallets = pallets; # 每箱数量 @@ -197,6 +204,7 @@ WHERE 1=1 asnItem.LXK_Description = nameItem.Value break; + asnItem.Serial_No = item.FLexSN+item.FLexSN1 ASNLineItem.Add(asnItem); if message != "": @@ -206,20 +214,24 @@ WHERE 1=1 ASNObj.LineItem = ASNLineItem.ToArray(); # 转换成xml字符串 - ackXmlStr = XmlSerializerHelper.Serialize(ASNObj); + ASNXmlStr = XmlSerializerHelper.Serialize(ASNObj); # 创建XML文件 + xmldoc = XmlDocument(); + # 加载成XML文件 + xmldoc.LoadXml(ASNXmlStr) # 文件名 fileName = "ASN" + ASNHeader.LEX_PO + GetFileName() - xmldoc = XmlDocument(); - xmldoc.LoadXml(ackXmlStr) + # 保存XML文件 xmldoc.Save(sendPath + fileName); # 推送到SFTP - helper.Put(sendPath + fileName, FSFTPPutPath); + helper.Put(sendPath + fileName, FSFTPPutPath + fileName); - updSql = """ + # raise Exception(FSFTPPutPath) + + updSql = """/*dialect*/ UPDATE t0 SET t0.FIsReplyASN = '1' FROM T_SAL_OUTSTOCK t0 WHERE t0.FID = {0} @@ -228,10 +240,9 @@ WHERE t0.FID = {0} num = DBServiceHelper.Execute(this.Context, updSql) - billObj["FIsReplyASN"] == "1"; - - AddSftpOpRecord(fileName,sendPath,ASNHeader.LEX_PO,billObj.BillNo,billObj.Id,"ASN ") + # billObj["FIsReplyASN"] = "1"; + AddSftpOpRecord(fileName,sendPath,ASNHeader.LEX_PO,billObj.BillNo,billObj.Id,"ASN") this.View.ShowMessage("ASN推送完成,PO:{0},文件名:{1}".format(ASNHeader.LEX_PO,fileName)) @@ -240,7 +251,7 @@ def GetFileName(): fileName = "" dateTime = DateTime.Now # fileName = fileName + dateTime.ToString("yyyyMMdd") + str(DateTimeFormatUtils.GetTimestamp(dateTime)) - fileName = "{0}{1}{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime))) + fileName = "{0}_{1}_{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime))) return fileName @@ -256,6 +267,7 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText) newObj["FReceiveOrSend"] = "2" newObj["FFileName"] = FFileName newObj["FFilePath"] = FFilePath + newObj["FDate"] = DateTime.Now newObj["FPO"] = FPO newObj["FERPBillNo"] = FERPBillNo newObj["FERPBillId"] = FERPBillId @@ -270,6 +282,6 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText) #Q:既然是Save方法,为什么还要传操作代码"Save"呢? #A:Save方法调用的是单据操作列表中,"操作类型=保存"的操作,可以为单据添加多个"操作类型=保存"的操作。 #例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库 - saveRslt=BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save"); + saveRslt = BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save"); # raise Exception(JsonUtil.Serialize(newObj)) \ No newline at end of file diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/AutoWriteOffWizardEditEx.cs b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/AutoWriteOffWizardEditEx.cs new file mode 100644 index 0000000..aea7a5d --- /dev/null +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/AutoWriteOffWizardEditEx.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args.WizardForm; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.K3.FIN.AP.Business.PlugIn; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Log; + +namespace CYG.AutoWriteOffWizardEditPlugInEx +{ + [HotUpdate, Description("转销处理EX")] + public class AutoWriteOffWizardEditEx : AutoWriteOffWizardEdit + { + public override void WizardStepChanging(WizardStepChangingEventArgs e) + { + base.WizardStepChanging(e); + if (e.OldWizardStep.Key.Equals("FWizard1") && e.NewWizardStep.Key.Equals("FWizard2") && !e.Cancel) + { + try + { + //获取进行转销的单据 + var dieObjs = this.DebitDate; + foreach (var debitObj in dieObjs.Values) + { + var billId = debitObj.BillId; + + var cSqlL = $@"/*dialect*/ + SELECT t1e.FSRCBILLID,t3.FBILLNO + FROM T_AR_RECMACTHLOG t1 + INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID + INNER JOIN T_AR_RECEIVABLE t3 on t3.FID = t1e.FSRCBILLID + WHERE 1 = 1 + AND t2e.FSRCBILLID = {billId} + AND t2e.FSOURCEFROMID = 'AR_receivable' + AND t1e.FISADIBILL = 1 + AND t1.FMATCHFIELDNAME = 'FMatchAmount' +"; + //判断是否转销成功 + var cResObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, cSqlL); + + if (cResObjs != null && cResObjs.Count == 2) + { + var sqlL = $@"/*dialect*/ EXEC PROC_UPDATE_AR_WRITEOFFMATCH {billId} "; + DBServiceHelper.Execute(this.Context, sqlL); + } + } + } + catch (Exception ex) + { + Logger.Error("应收转销后更新对应数据", ex.Message, ex); + } + } + } + } +} diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj new file mode 100644 index 0000000..c9c7aa4 --- /dev/null +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/CYG.AutoWriteOffWizardEditPlugInEx.csproj @@ -0,0 +1,94 @@ + + + + + Debug + AnyCPU + {FF4006B6-E4D9-4007-BC97-F6CBADD0BCF3} + Library + Properties + CYG.AutoWriteOffWizardEditPlugInEx + CYG.AutoWriteOffWizardEditPlugInEx + 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.App.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.DataEntity.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.AP.Business.PlugIn.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.AP.ServiceHelper.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.App.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.App.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Business.PlugIn.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Contracts.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.ServiceHelper.dll + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/Properties/AssemblyInfo.cs b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1a75bfb --- /dev/null +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("CYG.AutoWriteOffWizardEditPlugInEx")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CYG.AutoWriteOffWizardEditPlugInEx")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("ff4006b6-e4d9-4007-bc97-f6cbadd0bcf3")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/应收转销数据更新.sql b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/应收转销数据更新.sql new file mode 100644 index 0000000..4daf083 --- /dev/null +++ b/05.长园/CYG.AutoWriteOffWizardEditPlugInEx/应收转销数据更新.sql @@ -0,0 +1,127 @@ +DECLARE @billNo varchar(100) +SET @billNo = 'FBILL2024040437' +SET @billNo = 'FBILL2024041172' +DECLARE @billId int +SET @billId = 0 +;WITH #Ӧյ AS ( + SELECT t0.FBILLNO AS '񵥾ݱ' + ,t0.FID,t0e.FENTRYID,t0e.FSRCROWID,t0e.FSEQ + ,t0e_lk.FSBILLID,t0e_lk.FSID + FROM T_AR_RECEIVABLE t0 + INNER JOIN T_AR_RECEIVABLEENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID + WHERE 1=1 + AND t0e_lk.FSTABLENAME = 't_AR_receivableEntry' + --AND t0.FBILLNO = @billNo + AND t0.FID = @billId + AND t0.FDOCUMENTSTATUS = 'C' +) +, #ݹӦյ AS ( + SELECT tt.񵥾ݱ + ,tt.FID AS 'ID' + ,tt.FSEQ + ,tt.FENTRYID AS 'ENTRYID' + ,t0.FBILLNO AS 'ݹݱ' + ,t0.FID AS 'ݹID',t0e.FENTRYID AS 'ݹENTRYID' + ,t0e.FCOSTAMTSUM ,t0e.FBASICUNITQTY + ,CAST(t0e.FCOSTAMTSUM / t0e.FBASICUNITQTY AS decimal(23,6)) AS 'ݹɱ' + ,t1.FID AS 'ݹID',t1e.FENTRYID AS 'ݹENTRYID' + ,t1.FBILLNO AS 'ݹصݱ' + ,t1e.FCOSTAMTSUM 'FCOSTAMTSUM1',t1e.FBASICUNITQTY 'FBASICUNITQTY1' + ,CAST(t1e.FCOSTAMTSUM / t1e.FBASICUNITQTY AS decimal(23,6)) AS 'ݹسɱ' + FROM #Ӧյ tt + INNER JOIN T_AR_RECEIVABLEENTRY t0e on tt.FSBILLID = t0e.FID AND tt.FSID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t0 on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY t1e on t1e.FSRCROWID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t1 on t1.FID = t1e.FID + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t1.FDOCUMENTSTATUS = 'C' +) +, # AS ( + SELECT t1.*,t0.* + FROM #ݹӦյ t0 + CROSS APPLY ( + SELECT t3e.FENTRYID AS 'ENTRYID' + ,t1e.FSRCBILLID,t3.FBILLNO--,t3e.FSEQ + ,t3e.FALLAMOUNT,t3e.FALLAMOUNTFOR + ,t3e.FTAXAMOUNT,t3e.FTAXAMOUNTFOR + ,t3e.FNOTAXAMOUNT,t3e.FNOTAXAMOUNTFOR + --,t3e.FBASICUNITQTY + ,t3e.F_CYG_TECost + ,t3e.F_CYG_TEAmount + ,t3e.F_CYG_TECBCost + ,t3e.F_CYG_TECBAmount + FROM T_AR_RECMACTHLOG t1 + INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID + INNER JOIN T_AR_RECEIVABLE t3 on t3.FID = t1e.FSRCBILLID + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID AND t3e.FSEQ = t0.FSEQ + WHERE 1=1 + AND t2e.FSRCBILLID = t0.ID + AND t2e.FSOURCEFROMID = 'AR_receivable' + AND t1e.FISADIBILL = 1 + AND t1.FMATCHFIELDNAME = 'FMatchAmount' + ) t1 +) +--SELECT * FROM # +--ORDER BY ENTRYID,FSEQ +UPDATE t0e SET t0e.F_CYG_TECost = t1.ݹɱ + ,t0e.F_CYG_TEAmount = t1.FCOSTAMTSUM + ,t0e.F_CYG_TECBCost = t1.ݹسɱ + ,t0e.F_CYG_TECBAmount = t1.FCOSTAMTSUM1 +FROM T_AR_RECEIVABLEENTRY t0e + INNER JOIN # t1 on t1.ENTRYID = t0e.FENTRYID + + +--DECLARE @billNo varchar(100) +--SET @billNo = 'FBILL2024040437' +----SET @billNo = 'FBILL2024041172' +--SET @billNo = 'FBILL2024040438' +--DECLARE @billId int +--SET @billId = 0 +--;WITH #Ӧյ AS ( +-- SELECT t0.FBILLNO AS '񵥾ݱ' +-- ,t0.FID,t0.FISPRICEEXCLUDETAX +-- ,t0f.FALLAMOUNT,t0.FALLAMOUNTFOR +-- ,t0f.FNOTAXAMOUNT,t0f.FNOTAXAMOUNTFOR +-- ,t0f.FTAXAMOUNT,t0f.FTAXAMOUNTFOR +-- ,t2e.FSRCBILLID +-- --,t3f.FALLAMOUNT,t3.FALLAMOUNTFOR +-- --,t3f.FNOTAXAMOUNT,t3f.FNOTAXAMOUNTFOR +-- --,t3f.FTAXAMOUNT,t3f.FTAXAMOUNTFOR +-- ,t2e.FISWRITEAMOUNT +-- FROM T_AR_RECEIVABLE t0 +-- INNER JOIN T_AR_RECEIVABLEFIN t0f on t0.FID = t0f.FID +-- INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1e.FSRCBILLID = t0.FID +-- INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID +-- WHERE 1=1 +-- AND t0.FBILLNO = @billNo +-- --AND t0.FID = @billId +-- --AND t2e.FSRCBILLID != t1e.FSRCBILLID +-- AND t1e.FSOURCEFROMID = 'AR_receivable' +-- AND t2e.FISADIBILL = 1 +-- AND t0.FDOCUMENTSTATUS = 'C' +--) +--SELECT t0.* +-- ,t3f.FNOTAXAMOUNT,t3f.FNOTAXAMOUNTFOR +-- ,t3f.FTAXAMOUNT,t3f.FTAXAMOUNTFOR +-- ,t3e.FENTRYTAXRATE +-- ,t3e.FALLAMOUNT,t3e.FALLAMOUNTFOR +-- ,t3e.FNOTAXAMOUNT,t3e.FNOTAXAMOUNTFOR +-- ,t3e.FTAXAMOUNT,t3e.FTAXAMOUNTFOR +-- ,t3e.FALLAMOUNTFOR / (t3e.FENTRYTAXRATE / 100 + 1) --˰˰ +-- ,t3e.FALLAMOUNTFOR / (t3e.FENTRYTAXRATE / 100 + 1) * t3e.FENTRYTAXRATE / 100 --˰˰ +-- ,t3e.FALLAMOUNTFOR * (1 - t3e.FENTRYTAXRATE / 100) --˰˰ +-- ,t3e.FALLAMOUNTFOR * t3e.FENTRYTAXRATE / 100 --˰˰ +-- ,t0.FISPRICEEXCLUDETAX +--FROM #Ӧյ t0 +-- INNER JOIN T_AR_RECEIVABLEFIN t3f on t3f.FID = t0.FSRCBILLID +-- INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3f.FID +----ORDER BY ENTRYID,FSEQ +----UPDATE t0e SET t0e.F_CYG_TECost = t1.ݹɱ +---- ,t0e.F_CYG_TEAmount = t1.FCOSTAMTSUM +---- ,t0e.F_CYG_TECBCost = t1.ݹسɱ +---- ,t0e.F_CYG_TECBAmount = t1.FCOSTAMTSUM1 +----FROM T_AR_RECEIVABLEENTRY t0e +---- INNER JOIN # t1 on t1.ENTRYID = t0e.FENTRYID \ No newline at end of file diff --git a/05.长园/CYG.Python/AR_Write_Off/AutoWriteOffWizardEditEx.py b/05.长园/CYG.Python/AR_Write_Off/AutoWriteOffWizardEditEx.py new file mode 100644 index 0000000..dbfa092 --- /dev/null +++ b/05.长园/CYG.Python/AR_Write_Off/AutoWriteOffWizardEditEx.py @@ -0,0 +1,132 @@ +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("Kingdee.K3.FIN.AP.Business.PlugIn") + +from Kingdee.BOS import* +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core 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.CommonFilter import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from Kingdee.K3.FIN.AP.Business.PlugIn import * + +def WizardStepChanging(e): + if e.OldWizardStep.Key == "FWizard1" and e.NewWizardStep.Key == "FWizard2" and e.Cancel == False: + dieObjs = this.DebitDate.Values; + for dObj in dieObjs: + if dObj != None and dObj.TheIsMatch: + billId = dObj.BillId + + checkSqlL = """/*dialect*/ + SELECT t3e.FENTRYID AS 'ENTRYID' + ,t1e.FSRCBILLID,t3.FBILLNO + ,t3e.FALLAMOUNT,t3e.FALLAMOUNTFOR + ,t3e.FTAXAMOUNT,t3e.FTAXAMOUNTFOR + ,t3e.FNOTAXAMOUNT,t3e.FNOTAXAMOUNTFOR + ,t3e.F_CYG_TECost + ,t3e.F_CYG_TEAmount + ,t3e.F_CYG_TECBCost + ,t3e.F_CYG_TECBAmount + FROM T_AR_RECMACTHLOG t1 + INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID + INNER JOIN T_AR_RECEIVABLE t3 on t3.FID = t1e.FSRCBILLID + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID AND t3e.FSEQ = t0.FSEQ + WHERE 1 = 1 + AND t2e.FSRCBILLID = {0} + AND t2e.FSOURCEFROMID = 'AR_receivable' + AND t1e.FISADIBILL = 1 + AND t1.FMATCHFIELDNAME = 'FMatchAmount' + + """.format(billId) + + checkObj = DBServiceHelper.ExecuteDynamicObject(this.Context,checkSqlL) + + if checkObj != None and checkObj.Count > 0: + sqlL = """/*dialect*/ +DECLARE @billId int +SET @billId = {0} +;WITH #财务应收单 AS ( + SELECT t0.FBILLNO AS '财务单据编号' + ,t0.FID,t0e.FENTRYID,t0e.FSRCROWID,t0e.FSEQ + ,t0e_lk.FSBILLID,t0e_lk.FSID + FROM T_AR_RECEIVABLE t0 + INNER JOIN T_AR_RECEIVABLEENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID + WHERE 1=1 + AND t0e_lk.FSTABLENAME = 't_AR_receivableEntry' + AND t0.FID = @billId + AND t0.FDOCUMENTSTATUS = 'C' +) +, #暂估应收单 AS ( + SELECT tt.财务单据编号 + ,tt.FID AS '财务ID' + ,tt.FSEQ + ,tt.FENTRYID AS '财务ENTRYID' + ,t0.FBILLNO AS '暂估单据编号' + ,t0.FID AS '暂估ID',t0e.FENTRYID AS '暂估ENTRYID' + ,t0e.FCOSTAMTSUM ,t0e.FBASICUNITQTY + ,CAST(t0e.FCOSTAMTSUM / t0e.FBASICUNITQTY AS decimal(23,6)) AS '暂估成本价' + ,t1.FID AS '暂估冲回ID',t1e.FENTRYID AS '暂估冲回ENTRYID' + ,t1.FBILLNO AS '暂估冲回单据编号' + ,t1e.FCOSTAMTSUM 'FCOSTAMTSUM1',t1e.FBASICUNITQTY 'FBASICUNITQTY1' + ,CAST(t1e.FCOSTAMTSUM / t1e.FBASICUNITQTY AS decimal(23,6)) AS '暂估冲回成本价' + FROM #财务应收单 tt + INNER JOIN T_AR_RECEIVABLEENTRY t0e on tt.FSBILLID = t0e.FID AND tt.FSID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t0 on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY t1e on t1e.FSRCROWID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t1 on t1.FID = t1e.FID + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t1.FDOCUMENTSTATUS = 'C' +) +, #最终数据 AS ( + SELECT t1.*,t0.* + FROM #暂估应收单 t0 + CROSS APPLY ( + SELECT t3e.FENTRYID AS 'ENTRYID' + ,t1e.FSRCBILLID,t3.FBILLNO--,t3e.FSEQ + ,t3e.FALLAMOUNT,t3e.FALLAMOUNTFOR + ,t3e.FTAXAMOUNT,t3e.FTAXAMOUNTFOR + ,t3e.FNOTAXAMOUNT,t3e.FNOTAXAMOUNTFOR + --,t3e.FBASICUNITQTY + ,t3e.F_CYG_TECost + ,t3e.F_CYG_TEAmount + ,t3e.F_CYG_TECBCost + ,t3e.F_CYG_TECBAmount + FROM T_AR_RECMACTHLOG t1 + INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID + INNER JOIN T_AR_RECEIVABLE t3 on t3.FID = t1e.FSRCBILLID + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID AND t3e.FSEQ = t0.FSEQ + WHERE 1 = 1 + AND t2e.FSRCBILLID = t0.财务ID + AND t2e.FSOURCEFROMID = 'AR_receivable' + AND t1e.FISADIBILL = 1 + AND t1.FMATCHFIELDNAME = 'FMatchAmount' + ) t1 +) +UPDATE t0e SET t0e.F_CYG_TECost = t1.暂估成本价 + ,t0e.F_CYG_TEAmount = t1.FCOSTAMTSUM + ,t0e.F_CYG_TECBCost = t1.暂估冲回成本价 + ,t0e.F_CYG_TECBAmount = t1.FCOSTAMTSUM1 +FROM T_AR_RECEIVABLEENTRY t0e + INNER JOIN #最终数据 t1 on t1.ENTRYID = t0e.FENTRYID + + """.format(billId) + + raise Exception(sqlL); + # DBServiceHelper.Execute(this.Context,sqlL) + \ No newline at end of file diff --git a/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py new file mode 100644 index 0000000..ccb96dd --- /dev/null +++ b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py @@ -0,0 +1,129 @@ +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 System 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.ServiceHelper import * + +def BarItemClick(e): + if e.BarItemKey.Equals("tbCRMCompute"): + sqlL = """/*dialect*/ +;WITH #销售合同计算 AS ( + SELECT + t0.FID,t0.FBILLNO + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT' + ,ISNULL(t4.FCONTRACTAMOUNT_X,0) AS 'FCONTRACTAMOUNT_X' + ,ISNULL(t1.SAL_ORDER_AMOUNT,0) AS 'SAL_ORDER_AMOUNT' + ,ISNULL(t1.公开价小计,0) AS '公开价小计' + ,ISNULL(t1.外购价小计,0) AS '外购价小计' + ,ISNULL(t1.安装费小计,0) AS '安装费小计' + ,ISNULL(t1.成本小计,0) AS '成本小计' + ,ISNULL(t2.AR_RECEIVABLE_AMOUNT,0) AS 'AR_RECEIVABLE_AMOUNT' + ,ISNULL(t3.AR_RECEIVABLE_AMOUNT2,0) AS 'AR_RECEIVABLE_AMOUNT2' + --,ISNULL(t3.FIVALLAMOUNTFOR,0) AS 'FIVALLAMOUNTFOR' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + OUTER APPLY ( + SELECT t0.FID AS 'CONTRACT_ID' + ,SUM(t1e_f.FALLAMOUNT_LC) SAL_ORDER_AMOUNT + ,SUM(t1e.F_CYG_OPENTOTAL) AS '公开价小计' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '外购价小计' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS '安装费小计' + ,SUM(t1e.F_CYG_COSTTOTAL) AS '成本小计' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID + WHERE t1.FCRMContractId = t0.FID + AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1.FCRMContractId + ) t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT,tt.FCRMContractId + --,SUM(t3e.FALLAMOUNTFOR) AS 'FALLAMOUNTFOR' + FROM T_SAL_ORDER tt + INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t3.FSETACCOUNTTYPE = '2'--立账类型:暂估 + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY tt.FCRMContractId + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT2,tt.FCRMContractId + --,SUM(t3e.FALLAMOUNTFOR) AS 'FALLAMOUNTFOR' + FROM T_SAL_ORDER tt + INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t3.FSETACCOUNTTYPE = '3'--立账类型:财务 + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY tt.FCRMContractId + ) t3 + OUTER APPLY ( + SELECT TOP 1 t4f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT_X' + FROM T_CRM_XCONTRACT t4 + INNER JOIN T_CRM_XCONTRACTFIN t4f on t4.FID = t4f.FID + WHERE t4.FPKIDX = t0.FID + ORDER BY t4.FID DESC + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' +) +, #最终数据 AS ( + SELECT t0.FID,t0.FBILLNO + ,t0.FCONTRACTAMOUNT AS '合同金额' + ,t0.FCONTRACTAMOUNT_X AS '合同变化金额' + ,t0.SAL_ORDER_AMOUNT AS '累计销售订单本位币' + ,t0.FCONTRACTAMOUNT - t0.SAL_ORDER_AMOUNT AS '未下单销售订单本位币' + ,t0.AR_RECEIVABLE_AMOUNT AS '累计发货本位币' + ,t0.SAL_ORDER_AMOUNT - t0.AR_RECEIVABLE_AMOUNT AS '剩余未发货本位币' + ,0 AS '合同收款金额' + ,0 AS '合同发货未收款金额' + ,t0.AR_RECEIVABLE_AMOUNT2 AS '累计开票金额' + ,t0.AR_RECEIVABLE_AMOUNT - t0.AR_RECEIVABLE_AMOUNT2 AS '未开票金额' + ,t0.公开价小计 + ,t0.外购价小计 + ,t0.安装费小计 + ,t0.成本小计 + FROM #销售合同计算 t0 +) +--SELECT * FROM #最终数据 t0 +--WHERE t0.FBILLNO = 'XSHT106734' +UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.累计销售订单本位币 + ,t0.F_CYG_NOORDERSALES = tt.未下单销售订单本位币 + ,t0.F_CYG_CUMSHIPMENT = tt.累计发货本位币 + ,t0.F_CYG_REMAINSHIPMENT = tt.剩余未发货本位币 + ,t0.F_CYG_CONTRACTCOLLECTION = tt.合同收款金额 + ,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.合同发货未收款金额 + ,t0.F_CYG_CONTRACTCHANGE = tt.合同变化金额 + ,t0.F_CYG_ACCUMULATEDINVOIC = tt.累计开票金额 + ,t0.F_CYG_UNINVOICEDAMOUNT = tt.未开票金额 + ,t0.F_CYG_OPENPRICE = tt.公开价小计 + ,t0.F_CYG_OUTSOURCINGPRICE = tt.外购价小计 + ,t0.F_CYG_MOUNTINGCOST = tt.安装费小计 + ,t0.F_CYG_COST = tt.成本小计 +FROM T_CRM_CONTRACTFIN t0 + INNER JOIN #最终数据 tt on t0.FID = tt.FID + """ + + num = DBServiceHelper.Execute(this.Context, sqlL) \ No newline at end of file diff --git a/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py b/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py index 254ae71..03dc59e 100644 --- a/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py +++ b/05.长园/CYG.Python/SAL_SaleOrder/OperationEventPlugInEx.py @@ -27,7 +27,7 @@ from Kingdee.BOS.ServiceHelper import * def EndOperationTransaction(e): # 8ύ9126ɾ3 if this.FormOperation.OperationId == 8: - Audit2DoUpdDownstreamDocument(e) + Save2DoUpdDownstreamDocument(e) def Save2DoUpdDownstreamDocument(e): for data in e.DataEntitys: diff --git a/05.长园/CYG/CYG.csproj b/05.长园/CYG/CYG.csproj index b784b76..2ee3608 100644 --- a/05.长园/CYG/CYG.csproj +++ b/05.长园/CYG/CYG.csproj @@ -53,9 +53,35 @@ ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.DataEntity.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.Core.dll + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.CRM.OPP.Business.PlugIn.dll + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.AP.Business.PlugIn.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.App.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Business.PlugIn.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Contracts.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Core.dll + + + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.ServiceHelper.dll + @@ -79,6 +105,7 @@ + @@ -91,6 +118,11 @@ + + + + + diff --git a/05.长园/CYG/应收转销存储过程V1.0.sql b/05.长园/CYG/应收转销存储过程V1.0.sql new file mode 100644 index 0000000..43fed94 --- /dev/null +++ b/05.长园/CYG/应收转销存储过程V1.0.sql @@ -0,0 +1,74 @@ +CREATE PROC PROC_UPDATE_AR_WRITEOFFMATCH + @billId int +AS +BEGIN + ;WITH #Ӧյ AS ( + SELECT t0.FBILLNO AS '񵥾ݱ' + ,t0.FID,t0e.FENTRYID,t0e.FSRCROWID,t0e.FSEQ + ,t0e_lk.FSBILLID,t0e_lk.FSID + FROM T_AR_RECEIVABLE t0 + INNER JOIN T_AR_RECEIVABLEENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID + WHERE 1=1 + AND t0e_lk.FSTABLENAME = 't_AR_receivableEntry' + --AND t0.FBILLNO = @billNo + AND t0.FID = @billId + AND t0.FDOCUMENTSTATUS = 'C' + ) + , #ݹӦյ AS ( + SELECT tt.񵥾ݱ + ,tt.FID AS 'ID' + ,tt.FSEQ + ,tt.FENTRYID AS 'ENTRYID' + ,t0.FBILLNO AS 'ݹݱ' + ,t0.FID AS 'ݹID',t0e.FENTRYID AS 'ݹENTRYID' + ,t0e.FCOSTAMTSUM ,t0e.FBASICUNITQTY + ,CAST(t0e.FCOSTAMTSUM / t0e.FBASICUNITQTY AS decimal(23,6)) AS 'ݹɱ' + ,t1.FID AS 'ݹID',t1e.FENTRYID AS 'ݹENTRYID' + ,t1.FBILLNO AS 'ݹصݱ' + ,t1e.FCOSTAMTSUM 'FCOSTAMTSUM1',t1e.FBASICUNITQTY 'FBASICUNITQTY1' + ,CAST(t1e.FCOSTAMTSUM / t1e.FBASICUNITQTY AS decimal(23,6)) AS 'ݹسɱ' + FROM #Ӧյ tt + INNER JOIN T_AR_RECEIVABLEENTRY t0e on tt.FSBILLID = t0e.FID AND tt.FSID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t0 on t0.FID = t0e.FID + INNER JOIN T_AR_RECEIVABLEENTRY t1e on t1e.FSRCROWID = t0e.FENTRYID + INNER JOIN T_AR_RECEIVABLE t1 on t1.FID = t1e.FID + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t1.FDOCUMENTSTATUS = 'C' + ) + , # AS ( + SELECT t1.*,t0.* + FROM #ݹӦյ t0 + CROSS APPLY ( + SELECT t3e.FENTRYID AS 'ENTRYID' + ,t1e.FSRCBILLID,t3.FBILLNO--,t3e.FSEQ + ,t3e.FALLAMOUNT,t3e.FALLAMOUNTFOR + ,t3e.FTAXAMOUNT,t3e.FTAXAMOUNTFOR + ,t3e.FNOTAXAMOUNT,t3e.FNOTAXAMOUNTFOR + --,t3e.FBASICUNITQTY + ,t3e.F_CYG_TECost + ,t3e.F_CYG_TEAmount + ,t3e.F_CYG_TECBCost + ,t3e.F_CYG_TECBAmount + FROM T_AR_RECMACTHLOG t1 + INNER JOIN T_AR_RECMACTHLOGENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_AR_RECMACTHLOGENTRY t2e on t2e.FID = t1e.FID + INNER JOIN T_AR_RECEIVABLE t3 on t3.FID = t1e.FSRCBILLID + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID AND t3e.FSEQ = t0.FSEQ + WHERE 1=1 + AND t2e.FSRCBILLID = t0.ID + AND t2e.FSOURCEFROMID = 'AR_receivable' + AND t1e.FISADIBILL = 1 + AND t1.FMATCHFIELDNAME = 'FMatchAmount' + ) t1 + ) + --SELECT * FROM # + --ORDER BY ENTRYID,FSEQ + UPDATE t0e SET t0e.F_CYG_TECost = t1.ݹɱ + ,t0e.F_CYG_TEAmount = t1.FCOSTAMTSUM + ,t0e.F_CYG_TECBCost = t1.ݹسɱ + ,t0e.F_CYG_TECBAmount = t1.FCOSTAMTSUM1 + FROM T_AR_RECEIVABLEENTRY t0e + INNER JOIN # t1 on t1.ENTRYID = t0e.FENTRYID +END \ No newline at end of file diff --git a/05.长园/CYG/转销应收单触发器.sql b/05.长园/CYG/转销应收单触发器.sql new file mode 100644 index 0000000..a6e3894 --- /dev/null +++ b/05.长园/CYG/转销应收单触发器.sql @@ -0,0 +1,20 @@ +ALTER TRIGGER [dbo].[TRIG_MATCH_ALTER_AR_RECEIVABLEENTRY] ON [dbo].[T_AR_RECEIVABLEENTRY] +AFTER INSERT +AS +BEGIN + DECLARE @FID INT,@FENTRYID INT + SELECT @FID = FID,@FENTRYID = FENTRYID FROM inserted + + DECLARE @FISWRITEOFF CHAR(1) + SELECT @FISWRITEOFF = t0.FISWRITEOFF FROM T_AR_RECEIVABLE t0 WHERE t0.FID = @FID + + IF(@FISWRITEOFF = '1') + BEGIN + UPDATE t1e SET t1e.FNOTAXAMOUNTFOR = t1e.FALLAMOUNTFOR - CASE WHEN t1e.FALLAMOUNTFOR < 0 THEN 0 - t1e.FTAXAMOUNTFOR ELSE t1e.FTAXAMOUNTFOR END + ,t1e.FNOTAXAMOUNT = t1e.FALLAMOUNT - CASE WHEN t1e.FALLAMOUNT < 0 THEN 0 - t1e.FTAXAMOUNT ELSE t1e.FTAXAMOUNT END + ,t1e.FTAXAMOUNTFOR = CASE WHEN t1e.FALLAMOUNTFOR < 0 THEN 0 - t1e.FTAXAMOUNTFOR ELSE t1e.FTAXAMOUNTFOR END + ,t1e.FTAXAMOUNT = CASE WHEN t1e.FALLAMOUNT < 0 THEN 0 - t1e.FTAXAMOUNT ELSE t1e.FTAXAMOUNT END + FROM T_AR_RECEIVABLEENTRY t1e + WHERE t1e.FENTRYID = @FENTRYID + END +END diff --git a/05.长园/CYG/销售合同数据更新_202408161550.sql b/05.长园/CYG/销售合同数据更新_202408161550.sql new file mode 100644 index 0000000..47f91c6 --- /dev/null +++ b/05.长园/CYG/销售合同数据更新_202408161550.sql @@ -0,0 +1,93 @@ +--SELECT * INTO T_CRM_CONTRACT_20240816164533 FROM T_CRM_CONTRACT --ݸǰ +--SELECT * INTO T_CRM_CONTRACT_20240816164533_AFTER FROM T_CRM_CONTRACT --ݸº +;WITH # AS ( + SELECT t1_l.FNAME,t1e_l.FDATAVALUE,t1e.FENTRYID + FROM T_BAS_ASSISTANTDATA_L t1_l + INNER JOIN T_BAS_ASSISTANTDATAENTRY t1e on t1_l.FID = t1e.FID + INNER JOIN T_BAS_ASSISTANTDATAENTRY_L t1e_l on t1e_l.FENTRYID = t1e.FENTRYID AND t1e_l.FLOCALEID = 2052 + WHERE t1_l.FLOCALEID = 2052 +) +, #ǩԼ AS ( + SELECT t0.FMASTERID,t0_l.FNAME + FROM T_BD_STAFF t0 + INNER JOIN T_BD_STAFF_L t0_l on t0.FMASTERID = t0_l.FSTAFFID AND t0_l.FLocaleID = 2052 + WHERE t0.FDOCUMENTSTATUS = 'C' + AND t0.FFORBIDSTATUS = 'A' +) +, #öٱ AS ( + SELECT t0.FID,t0_l.FNAME,t0e.FENUMID,t0e.FSEQ,t0e.FVALUE,t0e_l.FCAPTION + FROM T_META_FORMENUM t0 + INNER JOIN T_META_FORMENUMITEM t0e on t0e.FID = t0.FID + INNER JOIN T_META_FORMENUM_L t0_l on t0.FID = t0_l.FID AND t0_l.FLOCALEID = 2052 + INNER JOIN T_META_FORMENUMITEM_L t0e_l on t0e.FENUMID = t0e_l.FENUMID AND t0e_l.FLOCALEID = 2052 +) +,# AS ( + SELECT t0.FBILLNO + ,t0.FID + + ,t0.F_CYG_YSALESNUMBER AS 'ԭ۶' + ,ISNULL(tt.Դ۵,'') AS [O_ԭ۶] + + ,t0.F_CYG_ORDERCONTACT AS 'ͻϵ' + ,ISNULL(tt.[ͻϵ],t0.F_CYG_ORDERCONTACT) AS [O_ͻϵ] + + ,t0.F_CYG_ORDERPHONENO AS 'ͻϵ绰' + ,ISNULL(tt.ͻϵ绰,t0.F_CYG_ORDERPHONENO) AS [O_ͻϵ绰] + + ,t0.F_CYG_CONTACTADDRESS AS 'ͻϵַ' + ,ISNULL(tt.ͻϵַ,t0.F_CYG_CONTACTADDRESS) AS [O_ͻϵַ] + + ,t0.F_CYG_PAPERRETURNDATE AS 'ֽʺͬ' + ,tt.[ֽʺͬ] AS [O_ֽʺͬ] + + ,t0.F_CYG_SIGNINGDATE AS 'ͬǩԼ' + ,tt.[ͬǩԼ] AS [O_ͬǩԼ] + + ,t0.F_CYG_SIGNATORY AS 'ͬǩԼ' + ,ISNULL(t4.FMASTERID,0) AS [O_ͬǩԼ_ID] + ,tt.[ͬǩԼ] AS [O_ͬǩԼ] + + ,t0.F_CYG_CONTRACTSTATUSNEW AS 'ͬ״̬' + ,ISNULL(t6.FVALUE, '') AS [O_ͬ״̬_ID] + ,tt.[ͬ״̬] AS [O_ͬ״̬] + + ,t0.F_CYG_HTFSZTBZ AS 'ͬ״̬ע' + ,ISNULL(tt.ͬ״̬ע,'') AS [O_ͬ״̬ע] + + ,t0.F_CYG_STATISTICALDATE AS 'ͳ' + ,ISNULL(tt.[ͳ],'') AS [O_ͳ] + + ,t0.FMODIFYDATE AS [޸] + ,GETDATE() AS [O_޸] + + ,t0.FMODIFIERID [޸_ID] + ,1562754 AS [O_޸_ID] + + FROM ۺͬݸ_202408161550 tt + INNER JOIN T_CRM_CONTRACT t0 on tt.ݱ = t0.FBILLNO + INNER JOIN T_CRM_CONTRACTFIN t0f on t0.FID = t0f.FID + OUTER APPLY ( + SELECT TOP 1 * FROM #ǩԼ + WHERE FNAME = tt.[ͬǩԼ] + ORDER BY FMASTERID ASC + ) t4 + LEFT JOIN #öٱ t6 on t6.FNAME = 'ͬ״̬' AND t6.FCAPTION = tt.[ͬ״̬] +) +--SELECT FID,COUNT(1) FROM # GROUP BY FID HAVING COUNT(1) >1 +--SELECT * FROM # t0 +--WHERE 1 = 1 + +UPDATE t0 SET t0.F_CYG_YSALESNUMBER = tt.[O_ԭ۶] + ,t0.F_CYG_ORDERCONTACT = tt.[O_ͻϵ] + ,t0.F_CYG_ORDERPHONENO = tt.[O_ͻϵ绰] + ,t0.F_CYG_CONTACTADDRESS = tt.[O_ͻϵַ] + ,t0.F_CYG_PAPERRETURNDATE = tt.[O_ֽʺͬ] + ,t0.F_CYG_SIGNINGDATE = tt.[O_ͬǩԼ] + ,t0.F_CYG_SIGNATORY = tt.[O_ͬǩԼ_ID] + ,t0.F_CYG_CONTRACTSTATUSNEW = tt.[O_ͬ״̬_ID] + ,t0.F_CYG_HTFSZTBZ = tt.[O_ͬ״̬ע] + ,t0.F_CYG_STATISTICALDATE = tt.[O_ͳ] + ,t0.FMODIFIERID = tt.[O_޸_ID] + ,t0.FMODIFYDATE = tt.O_޸ +FROM T_CRM_CONTRACT t0 + INNER JOIN # tt on tt.FID = t0.FID \ No newline at end of file diff --git a/05.长园/CYG/销售合同金额计算.sql b/05.长园/CYG/销售合同金额计算.sql new file mode 100644 index 0000000..f67c02d --- /dev/null +++ b/05.长园/CYG/销售合同金额计算.sql @@ -0,0 +1,97 @@ +WITH #ۺͬ AS ( + SELECT + t0.FID,t0.FBILLNO + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT + ,ISNULL(t4.FCONTRACTAMOUNT_X,0) AS 'FCONTRACTAMOUNT_X' + ,ISNULL(t1.SAL_ORDER_AMOUNT,0) AS 'SAL_ORDER_AMOUNT' + ,ISNULL(t1.С,0) AS 'С' + ,ISNULL(t1.⹺С,0) AS '⹺С' + ,ISNULL(t1.װС,0) AS 'װС' + ,ISNULL(t1.ɱС,0) AS 'ɱС' + ,ISNULL(t2.SAL_OUTSTOCK_AMOUNT,0) AS 'SAL_OUTSTOCK_AMOUNT' + ,ISNULL(t3.AR_RECEIVABLE_AMOUNT,0) AS 'AR_RECEIVABLE_AMOUNT' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + OUTER APPLY ( + SELECT t0.FID AS 'CONTRACT_ID' + ,SUM(t1e_f.FALLAMOUNT_LC) SAL_ORDER_AMOUNT + ,SUM(t1e.F_CYG_OPENTOTAL) AS 'С' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '⹺С' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS 'װС' + ,SUM(t1e.F_CYG_COSTTOTAL) AS 'ɱС' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FID = t1.FID + WHERE t1.FCRMContractId = t0.FID + AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1.FCRMContractId + ) t1 + OUTER APPLY ( + SELECT SUM(t2e_f.FAMOUNT_LC) AS SAL_OUTSTOCK_AMOUNT,tt.FCRMContractId + FROM T_SAL_ORDER tt + INNER JOIN T_SAL_OUTSTOCK t2 on tt.FBILLNO = t2.FBILLNOS + INNER JOIN T_SAL_OUTSTOCKENTRY_F t2e_f on t2e_f.FID = t2.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t2.FDOCUMENTSTATUS = 'C' + GROUP BY tt.FCRMContractId + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FOPENAMOUNTFOR) AS AR_RECEIVABLE_AMOUNT,tt.FCRMContractId + FROM T_SAL_ORDER tt + INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t3.FSETACCOUNTTYPE = '3' + AND t3.FDOCUMENTSTATUS = 'C' + GROUP BY tt.FCRMContractId + ) t3 + OUTER APPLY ( + SELECT TOP 1 t4f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT_X' + FROM T_CRM_XCONTRACT t4 + INNER JOIN T_CRM_XCONTRACTFIN t4f on t4.FID = t4f.FID + WHERE t4.FPKIDX = t0.FID + ORDER BY t4.FID DESC + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' +) +, # AS ( + SELECT t0.FID,t0.FBILLNO + ,t0.FCONTRACTAMOUNT AS 'ͬ' + ,t0.FCONTRACTAMOUNT_X AS 'ͬ仯' + ,t0.SAL_ORDER_AMOUNT AS 'ۼ۶λ' + ,t0.FCONTRACTAMOUNT - t0.SAL_ORDER_AMOUNT AS 'δµ۶λ' + ,t0.SAL_OUTSTOCK_AMOUNT AS 'ۼƷλ' + ,t0.SAL_ORDER_AMOUNT - t0.SAL_OUTSTOCK_AMOUNT AS 'ʣδλ' + ,0 AS 'ͬտ' + ,0 AS 'ͬδտ' + ,t0.AR_RECEIVABLE_AMOUNT AS 'ۼƿƱ' + ,t0.SAL_OUTSTOCK_AMOUNT - t0.AR_RECEIVABLE_AMOUNT AS 'δƱ' + ,t0.С + ,t0.⹺С + ,t0.װС + ,t0.ɱС + FROM #ۺͬ t0 +) +SELECT * FROM # +--UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ +-- ,t0.F_CYG_NOORDERSALES = tt.δµ۶λ +-- ,t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ +-- ,t0.F_CYG_REMAINSHIPMENT = tt.ʣδλ +-- ,t0.F_CYG_CONTRACTCOLLECTION = tt.ͬտ +-- ,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.ͬδտ +-- ,t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 +-- ,t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ +-- ,t0.F_CYG_UNINVOICEDAMOUNT = tt.δƱ +-- ,t0.F_CYG_OPENPRICE = tt.С +-- ,t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С +-- ,t0.F_CYG_MOUNTINGCOST = tt.װС +-- ,t0.F_CYG_COST = tt.ɱС +--FROM T_CRM_CONTRACTFIN t0 +-- INNER JOIN # tt on t0.FID = tt.FID \ No newline at end of file diff --git a/05.长园/CYG/销售合同金额计算_20240723.sql b/05.长园/CYG/销售合同金额计算_20240723.sql new file mode 100644 index 0000000..2e5f42b --- /dev/null +++ b/05.长园/CYG/销售合同金额计算_20240723.sql @@ -0,0 +1,35 @@ +WITH #ۺͬ AS ( + SELECT + t0.FID,t0.FBILLNO AS 'FNumber' + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + WHERE t0.FDOCUMENTSTATUS = 'C' +) +, #۶ AS ( + SELECT t0.FID AS 'CONTRACT_ID' + ,t1.FID AS 'SALID' + ,t1.FBILLNO + ,t1f.FBILLAMOUNT + FROM #ۺͬ t0 + INNER JOIN T_SAL_ORDER t1 on t1.FCRMContractId = t0.FID + INNER JOIN T_SAL_ORDERFIN t1f on t1f.FID = t1.FID +) +, #۳ⵥ AS ( + SELECT SUM(t2e_f.FAMOUNT) AS DEBILLAMOUNT,t0.CONTRACT_ID + FROM #۶ t0 + INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk --֪ͨϵ + ON t0.SALID = t1e_lk.FSBILLID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' + INNER JOIN T_SAL_OUTSTOCKENTRY_LK t2e_lk --۳ⵥϵ + ON t1e_lk.FENTRYID = t2e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY' + INNER JOIN T_SAL_OUTSTOCKENTRY_F t2e_f on t2e_f.FENTRYID = t2e_lk.FENTRYID + GROUP BY t0.CONTRACT_ID +) +SELECT t0.*,ISNULL(t1.FBILLNO,''),ISNULL(t1.FBILLAMOUNT,0),ISNULL(t2.DEBILLAMOUNT,0) +FROM #ۺͬ t0 + LEFT JOIN #۶ t1 on t0.FID = t1.CONTRACT_ID + LEFT JOIN #۳ⵥ t2 on t0.FID = t2.CONTRACT_ID \ No newline at end of file diff --git a/05.长园/CYG/销售合同金额计算_20240725.sql b/05.长园/CYG/销售合同金额计算_20240725.sql new file mode 100644 index 0000000..5bbaef6 --- /dev/null +++ b/05.长园/CYG/销售合同金额计算_20240725.sql @@ -0,0 +1,104 @@ +;WITH #ۺͬ AS ( + SELECT + t0.FID,t0.FBILLNO + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT' + ,ISNULL(t4.FCONTRACTAMOUNT_X,0) AS 'FCONTRACTAMOUNT_X' + ,ISNULL(t1.SAL_ORDER_AMOUNT,0) AS 'SAL_ORDER_AMOUNT' + ,ISNULL(t1.С,0) AS 'С' + ,ISNULL(t1.⹺С,0) AS '⹺С' + ,ISNULL(t1.װС,0) AS 'װС' + ,ISNULL(t1.ɱС,0) AS 'ɱС' + ,ISNULL(t2.AR_RECEIVABLE_AMOUNT,0) AS 'AR_RECEIVABLE_AMOUNT' + ,ISNULL(t3.AR_RECEIVABLE_AMOUNT2,0) AS 'AR_RECEIVABLE_AMOUNT2' + --,ISNULL(t3.FIVALLAMOUNTFOR,0) AS 'FIVALLAMOUNTFOR' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + OUTER APPLY ( + SELECT t0.FID AS 'CONTRACT_ID' + ,SUM(t1e_f.FALLAMOUNT_LC) SAL_ORDER_AMOUNT + ,SUM(t1e.F_CYG_OPENTOTAL) AS 'С' + ,SUM(t1e.F_CYG_OUTSOURCINGTOTAL) AS '⹺С' + ,SUM(t1e.F_CYG_MOUNTINGTOTAL) AS 'װС' + ,SUM(t1e.F_CYG_COSTTOTAL) AS 'ɱС' + FROM T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e on t1e.FID = t1.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f on t1e_f.FENTRYID = t1e.FENTRYID + WHERE t1.FCRMContractId = t0.FID + AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1.FCRMContractId + ) t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT,tt.FCRMContractId + --,SUM(t3e.FALLAMOUNTFOR) AS 'FALLAMOUNTFOR' + FROM T_SAL_ORDER tt + INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t3.FSETACCOUNTTYPE = '2'--ͣݹ + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY tt.FCRMContractId + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS AR_RECEIVABLE_AMOUNT2,tt.FCRMContractId + --,SUM(t3e.FALLAMOUNTFOR) AS 'FALLAMOUNTFOR' + FROM T_SAL_ORDER tt + INNER JOIN T_AR_RECEIVABLE t3 on tt.FBILLNO = t3.FBILLNOS + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE tt.FCRMContractId = t0.FID + AND tt.FDOCUMENTSTATUS = 'C' + AND t3.FSETACCOUNTTYPE = '3'--ͣ + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY tt.FCRMContractId + ) t3 + OUTER APPLY ( + SELECT TOP 1 t4f.FCONTRACTAMOUNT_LC AS 'FCONTRACTAMOUNT_X' + FROM T_CRM_XCONTRACT t4 + INNER JOIN T_CRM_XCONTRACTFIN t4f on t4.FID = t4f.FID + WHERE t4.FPKIDX = t0.FID + ORDER BY t4.FID DESC + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' +) +, # AS ( + SELECT t0.FID,t0.FBILLNO + ,t0.FCONTRACTAMOUNT AS 'ͬ' + ,t0.FCONTRACTAMOUNT_X AS 'ͬ仯' + ,t0.SAL_ORDER_AMOUNT AS 'ۼ۶λ' + ,t0.FCONTRACTAMOUNT - t0.SAL_ORDER_AMOUNT AS 'δµ۶λ' + ,t0.AR_RECEIVABLE_AMOUNT AS 'ۼƷλ' + ,t0.SAL_ORDER_AMOUNT - t0.AR_RECEIVABLE_AMOUNT AS 'ʣδλ' + ,0 AS 'ͬտ' + ,0 AS 'ͬδտ' + ,t0.AR_RECEIVABLE_AMOUNT2 AS 'ۼƿƱ' + ,t0.AR_RECEIVABLE_AMOUNT - t0.AR_RECEIVABLE_AMOUNT2 AS 'δƱ' + ,t0.С + ,t0.⹺С + ,t0.װС + ,t0.ɱС + FROM #ۺͬ t0 +) +--SELECT * FROM # t0 +--WHERE t0.FBILLNO = 'XSHT106734' +UPDATE t0 SET t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ + ,t0.F_CYG_NOORDERSALES = tt.δµ۶λ + ,t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ + ,t0.F_CYG_REMAINSHIPMENT = tt.ʣδλ + ,t0.F_CYG_CONTRACTCOLLECTION = tt.ͬտ + ,t0.F_CYG_SHIPMENTUNCOLLECTION = tt.ͬδտ + ,t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 + ,t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ + ,t0.F_CYG_UNINVOICEDAMOUNT = tt.δƱ + ,t0.F_CYG_OPENPRICE = tt.С + ,t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С + ,t0.F_CYG_MOUNTINGCOST = tt.װС + ,t0.F_CYG_COST = tt.ɱС +FROM T_CRM_CONTRACTFIN t0 + INNER JOIN # tt on t0.FID = tt.FID \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj index c49056b..288c095 100644 --- a/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj +++ b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj @@ -31,6 +31,7 @@ + @@ -43,13 +44,21 @@ + + + + + + + + diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_不分解.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_不分解.py new file mode 100644 index 0000000..7577002 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_不分解.py @@ -0,0 +1,239 @@ +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.Util import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.KDThread import * +# 产品成本汇总快捷查询 +# POSH_PRODUCTCOSTQUICKQUERY +# showParameter = None +_whereSql = "" +def BarItemClick(e): + # 新增过滤窗口 + if e.BarItemKey == "tbShowFilterForm": + # global showParameter + # if showParameter == None: + showParameter = FilterShowParameter(); + showParameter.FormId = "POSH_PRODUCTCOSTQUICKQUERY_FILTER"; + showParameter.ParentPageId = this.View.PageId; + + this.View.ShowForm(showParameter,lambda x:DoSetData(x)); + +def DoSetData(resultData): + dateVal = "" + whereSql = "" + if resultData.ReturnData is None: + return + else: + + filterString = resultData.ReturnData.FilterString; + if filterString != None and filterString != "": + whereSql = whereSql + " AND " + filterString.replace("FBILLNO","t0.FPRODUCTNO"); + + customFilter = resultData.ReturnData.CustomFilter; + if customFilter != None: + dateVal = str(int(customFilter["FYear"]) * 100 + int(customFilter["FPeriod"])) + + # raise Exception(whereSql) + + moSqlL = """/*dialect*/ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 1 +SET @period = {0} + +;WITH #列表数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FQUALIFIEDINQTY AS '本期完工数量' + ,t3.FCURRINPUTQTY AS '本期投入数量' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) = @period + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' + {1} +) + +,#初始数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t0.本期完工数量 + ,t0.本期投入数量 + ,t1.FPRODUCTDIMEID + ,t3.FCURRINPUTQTY + ,t3.FQUALIFIEDINQTY + ,t3d.FCURRINPUTAMOUNT + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3d.FQUALIFIEDINAMOUNT + FROM #列表数据 t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTCALEXPENSEDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' + {1} +) +, #成本转换 AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID--,t1.FMATERIALID,t1.FEXPTYPE + ,t1.FCURRINPUTAMOUNT,t1.本期完工数量,t1.本期投入数量 + ,t1.O0,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t0.FCURRINPUTAMOUNT + ,t0.本期完工数量,t0.本期投入数量 + ,t1.fieldName + FROM #初始数据 t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t1 on t0.FEXPENSESITEMID = t1.FEXPID + ) t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) AS t1 +) +, #物料属性 AS ( + SELECT t0e.FENUMID,t0e.FSEQ,t0e.FVALUE,t0e_l.FCAPTION + FROM T_META_FORMENUMITEM t0e + INNER JOIN T_META_FORMENUMITEM_L t0e_l on t0e.FENUMID = t0e_l.FENUMID AND t0e_l.FLOCALEID = 2052 + WHERE 1 = 1 + AND t0e.FID = 'ac14913e-bd72-416d-a50b-2c7432bbff63' +) +SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,ROW_NUMBER() OVER (ORDER BY t0.FPRODUCTNO) FRN + ,t0.FBILLID,t0.FBILLENTRYID + ,t3_l.FNAME,t3.FNUMBER + ,t0.本期投入数量 + ,t0.本期完工数量 + ,t1.累计投入数量 + ,t1.累计完工数量 + ,t0.累计投入成本 + ,t0.材料成本Q + t0.制造费用O + t0.直接人工S AS '料工费R' + ,t0.材料成本Q + ,t0.直接人工S + ,t0.制造费用O + ,t0.制造费用_职工薪酬,t0.制造费用_股份支付,t0.制造费用_劳动保护费,t0.制造费用_差旅费,t0.制造费用_业务招待费,t0.制造费用_办公费,t0.制造费用_折旧与摊销,t0.制造费用_租赁费,t0.制造费用_水电费,t0.制造费用_物料消耗,t0.制造费用_加工_修理_检测费,t0.制造费用_车辆使用费,t0.制造费用_其他,t0.制造费用_委外加工费 +FROM ( SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + ,AVG(t0.本期完工数量) AS '本期完工数量' + ,AVG(t0.本期投入数量) AS '本期投入数量' + ,SUM(ISNULL(t0.FCURRINPUTAMOUNT,0)) AS '累计投入成本' + ,SUM(ISNULL(t0.O0,0)) AS '直接人工S' + ,SUM(ISNULL(t0.O1,0)) AS '材料成本Q' + ,SUM(ISNULL(t0.O2,0) + ISNULL(t0.O3,0)+ISNULL(t0.O4,0)+ISNULL(t0.O5,0)+ISNULL(t0.O6,0)+ISNULL(t0.O7,0)+ISNULL(t0.O8,0)+ISNULL(t0.O9,0)+ISNULL(t0.O10,0)+ISNULL(t0.O11,0)+ISNULL(t0.O12,0)+ISNULL(t0.O13,0)+ISNULL(t0.O14,0)+ISNULL(t0.O15,0)) AS '制造费用O' + ,SUM(ISNULL(t0.O2,0)) AS '制造费用_职工薪酬' + ,SUM(ISNULL(t0.O3,0)) AS '制造费用_股份支付' + ,SUM(ISNULL(t0.O4,0)) AS '制造费用_劳动保护费' + ,SUM(ISNULL(t0.O5,0)) AS '制造费用_差旅费' + ,SUM(ISNULL(t0.O6,0)) AS '制造费用_业务招待费' + ,SUM(ISNULL(t0.O7,0)) AS '制造费用_办公费' + ,SUM(ISNULL(t0.O8,0)) AS '制造费用_折旧与摊销' + ,SUM(ISNULL(t0.O9,0)) AS '制造费用_租赁费' + ,SUM(ISNULL(t0.O10,0)) AS '制造费用_水电费' + ,SUM(ISNULL(t0.O11,0)) AS '制造费用_物料消耗' + ,SUM(ISNULL(t0.O12,0)) AS '制造费用_加工_修理_检测费' + ,SUM(ISNULL(t0.O13,0)) AS '制造费用_车辆使用费' + ,SUM(ISNULL(t0.O14,0)) AS '制造费用_其他' + ,SUM(ISNULL(t0.O15,0)) AS '制造费用_委外加工费' + FROM #成本转换 t0 + GROUP BY t0.FPRODUCTNO,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + ) t0 + CROSS APPLY ( + SELECT SUM(t3.FCURRINPUTQTY) AS '累计投入数量',SUM(t3.FQUALIFIEDINQTY) AS '累计完工数量' + FROM V_CB_PROORDERINFO t1 + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + WHERE t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + ) t1 + INNER JOIN T_BD_MATERIAL t3 on t0.FPRODUCTID = t3.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t3_l on t3_l.FMATERIALID = t0.FPRODUCTID AND t3_l.FLOCALEID = 2052 + + """.format(dateVal,whereSql) + + # raise Exception(moSqlL); + datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL); + if datas != None and datas.Count > 0: + # raise Exception(str(datas.Count)); + proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity") + proRows = this.View.Model.GetEntityDataObject(proEntity) + + this.View.Session["ProcessRateValue"] = 1 + this.View.Model.BeginIniti(); + proRows.Clear() + + for data in datas: + row = DynamicObject(proEntity.DynamicObjectType) + + row["FRN"] = data["FRN"] + row["FMoBillNo"] = data["FPRODUCTNO"] + row["FProMaterialNumber"] = data["FNUMBER"] + row["FProMaterialName"] = data["FNAME"] + row["FQUALIFIEDINQTY"] = data["本期完工数量"] + row["FMaterialCostQ"] = data["材料成本Q"] + row["FLaborCostS"] = data["直接人工S"] + row["FProcessCostO"] = data["制造费用O"] + row["FQ_O_S_T_R"] = data["料工费R"] + row["FO2"] = data["制造费用_职工薪酬"] + row["FO3"] = data["制造费用_股份支付"] + row["FO4"] = data["制造费用_劳动保护费"] + row["FO5"] = data["制造费用_差旅费"] + row["FO6"] = data["制造费用_业务招待费"] + row["FO7"] = data["制造费用_办公费"] + row["FO8"] = data["制造费用_折旧与摊销"] + row["FO9"] = data["制造费用_租赁费"] + row["FO10"] = data["制造费用_水电费"] + row["FO11"] = data["制造费用_物料消耗"] + row["FO12"] = data["制造费用_加工_修理_检测费"] + row["FO13"] = data["制造费用_车辆使用费"] + row["FO14"] = data["制造费用_其他"] + row["FO15"] = data["制造费用_委外加工费"] + # row["FO16"] = data["O16"] + + proRows.Add(row) + + this.View.UpdateView("FEntity") + this.View.Model.EndIniti(); \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_只分解第一层.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_只分解第一层.py new file mode 100644 index 0000000..21eb623 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本汇总表_只分解第一层.py @@ -0,0 +1,265 @@ +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.Util import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.KDThread import * +# 产品成本汇总快捷查询 +# POSH_PRODUCTCOSTQUICKQUERY +# showParameter = None +_whereSql = "" +def BarItemClick(e): + # 新增过滤窗口 + if e.BarItemKey == "tbShowFilterForm": + # global showParameter + # if showParameter == None: + showParameter = FilterShowParameter(); + showParameter.FormId = "POSH_PRODUCTCOSTQUICKQUERY_FILTER"; + showParameter.ParentPageId = this.View.PageId; + + this.View.ShowForm(showParameter,lambda x:DoSetData(x)); + +def DoSetData(resultData): + dateVal = "" + whereSql = "" + if resultData.ReturnData is None: + return + else: + + filterString = resultData.ReturnData.FilterString; + if filterString != None and filterString != "": + whereSql += " AND " + filterString.replace("FBILLNO","t0.FPRODUCTNO"); + + customFilter = resultData.ReturnData.CustomFilter; + if customFilter != None: + FYear = customFilter["FYear"] + FPeriod = customFilter["FPeriod"] + yearVal = 0 if FYear == None or FYear == "" else int(FYear) + periodVal = 0 if FPeriod == None or FPeriod == "" else int(FPeriod) + if yearVal > 0: + if periodVal > 0: + dateVal = str(yearVal * 100 + periodVal) + whereSql += " AND (t2.FYEAR * 100 + t2.FPERIOD) = {0} ".format(dateVal) + else: + whereSql += " AND t2.FYEAR = {0} ".format(yearVal) + + FSelMoBillNo = customFilter["FSelMoBillNo"] + moBillNo = "" if FSelMoBillNo == None else FSelMoBillNo + if moBillNo != "": + whereSql += " AND t0.FPRODUCTNO = '{0}' ".format(moBillNo) + + # raise Exception(dataWhere) + + if whereSql == "": + raise Exception("查询条件不能为空!") + + moSqlL = """/*dialect*/ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 1 + +;WITH #列表数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FQUALIFIEDINQTY AS '本期完工数量' + ,t3.FCURRINPUTQTY AS '本期投入数量' + ,t3.FSUMCURRINPUTQTY AS '累计投入数量' + ,t3.FSUMQUALIFIEDINQTY AS '累计完工数量' + ,RANK() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' + {0} +) + +,#初始数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t0.本期完工数量 + ,t0.本期投入数量 + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FCURRINPUTQTY + ,t3.FQUALIFIEDINQTY + ,t3d.FCURRINPUTAMOUNT + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3d.FQUALIFIEDINAMOUNT + FROM #列表数据 t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD + LEFT JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t0.RN = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' +) +, #成本转换 AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID--,t1.FMATERIALID + ,t1.FEXPTYPE + ,t1.FCURRINPUTAMOUNT,t1.本期完工数量,t1.本期投入数量,t1.FQUALIFIEDINQTY + ,t1.O0,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t0.FCURRINPUTAMOUNT,t0.FEXPTYPE + ,t0.FQUALIFIEDINQTY + ,t0.本期完工数量,t0.本期投入数量 + ,t1.fieldName + FROM #初始数据 t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t1 on t0.FEXPENSESITEMID = t1.FEXPID + ) t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) AS t1 +) +, #物料属性 AS ( + SELECT t0e.FENUMID,t0e.FSEQ,t0e.FVALUE,t0e_l.FCAPTION + FROM T_META_FORMENUMITEM t0e + INNER JOIN T_META_FORMENUMITEM_L t0e_l on t0e.FENUMID = t0e_l.FENUMID AND t0e_l.FLOCALEID = 2052 + WHERE 1 = 1 + AND t0e.FID = 'ac14913e-bd72-416d-a50b-2c7432bbff63' +) +SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,ROW_NUMBER() OVER (ORDER BY t0.FPRODUCTNO) FRN + ,t0.FBILLID,t0.FBILLENTRYID + ,t3_l.FNAME,t3.FNUMBER + ,t1.本期投入数量 + ,t1.本期完工数量 + ,t1.累计投入数量 + ,t1.累计完工数量 + ,t0.累计投入成本 + ,t0.总工时 + ,t0.材料成本Q + t0.制造费用O + t0.直接人工S AS '料工费R' + ,t0.原材料Q1 + ,t0.直接人工S AS '直接人工S' + ,t0.直接人工S1 + ,t0.间接人工S2 + ,t0.制造费用O + t0.间接材料Q2 AS '制造费用O' + ,t0.间接材料Q2 + ,t0.制造费用_职工薪酬,t0.制造费用_股份支付,t0.制造费用_劳动保护费,t0.制造费用_差旅费,t0.制造费用_业务招待费,t0.制造费用_办公费,t0.制造费用_折旧与摊销,t0.制造费用_租赁费,t0.制造费用_水电费,t0.制造费用_物料消耗,t0.制造费用_加工_修理_检测费,t0.制造费用_车辆使用费 + ,t0.制造费用_其他 AS '制造费用_其他' + ,t0.制造费用_委外加工费 +FROM ( SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + --,AVG(t0.本期完工数量) AS '本期完工数量' + --,AVG(t0.本期投入数量) AS '本期投入数量' + ,SUM(CASE t0.FEXPTYPE WHEN 9 THEN ISNULL(t0.FQUALIFIEDINQTY,0) ELSE 0 END) AS '总工时' + ,SUM(ISNULL(t0.FCURRINPUTAMOUNT,0)) AS '累计投入成本' + ,SUM(ISNULL(t0.O0,0)) AS '直接人工S' + ,SUM(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O0,0) ELSE 0 END) AS '直接人工S1' + ,SUM(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O0,0) ELSE 0 END) AS '间接人工S2' + ,SUM(ISNULL(t0.O1,0)) AS '材料成本Q' + ,SUM(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS '原材料Q1' + ,SUM(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS '间接材料Q2' + ,SUM(ISNULL(t0.O2,0) + ISNULL(t0.O3,0)+ISNULL(t0.O4,0)+ISNULL(t0.O5,0)+ISNULL(t0.O6,0)+ISNULL(t0.O7,0)+ISNULL(t0.O8,0)+ISNULL(t0.O9,0)+ISNULL(t0.O10,0)+ISNULL(t0.O11,0)+ISNULL(t0.O12,0)+ISNULL(t0.O13,0)+ISNULL(t0.O14,0)+ISNULL(t0.O15,0)) AS '制造费用O' + ,SUM(ISNULL(t0.O2,0)) AS '制造费用_职工薪酬' + ,SUM(ISNULL(t0.O3,0)) AS '制造费用_股份支付' + ,SUM(ISNULL(t0.O4,0)) AS '制造费用_劳动保护费' + ,SUM(ISNULL(t0.O5,0)) AS '制造费用_差旅费' + ,SUM(ISNULL(t0.O6,0)) AS '制造费用_业务招待费' + ,SUM(ISNULL(t0.O7,0)) AS '制造费用_办公费' + ,SUM(ISNULL(t0.O8,0)) AS '制造费用_折旧与摊销' + ,SUM(ISNULL(t0.O9,0)) AS '制造费用_租赁费' + ,SUM(ISNULL(t0.O10,0)) AS '制造费用_水电费' + ,SUM(ISNULL(t0.O11,0)) AS '制造费用_物料消耗' + ,SUM(ISNULL(t0.O12,0)) AS '制造费用_加工_修理_检测费' + ,SUM(ISNULL(t0.O13,0)) AS '制造费用_车辆使用费' + ,SUM(ISNULL(t0.O14,0)) AS '制造费用_其他' + ,SUM(ISNULL(t0.O15,0)) AS '制造费用_委外加工费' + FROM #成本转换 t0 + GROUP BY t0.FPRODUCTNO,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + ) t0 + INNER JOIN #列表数据 t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t1.RN = 1 + INNER JOIN T_BD_MATERIAL t3 on t0.FPRODUCTID = t3.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t3_l on t3_l.FMATERIALID = t0.FPRODUCTID AND t3_l.FLOCALEID = 2052 + + """.format(whereSql) + + # raise Exception(moSqlL); + proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity") + proRows = this.View.Model.GetEntityDataObject(proEntity) + this.View.Model.BeginIniti(); + proRows.Clear() + datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL); + if datas != None and datas.Count > 0: + # raise Exception(str(datas.Count)); + + # this.View.Session["ProcessRateValue"] = 1 + + for data in datas: + row = DynamicObject(proEntity.DynamicObjectType) + + row["FRN"] = data["FRN"] + row["FMoBillNo"] = data["FPRODUCTNO"] + row["FProMaterialNumber"] = data["FNUMBER"] + row["FProMaterialName"] = data["FNAME"] + row["FQUALIFIEDINQTY"] = data["本期完工数量"] + row["FMaterialCostQ"] = data["原材料Q1"] + row["FMaterialCostT"] = data["间接材料Q2"] + row["FLaborCostS"] = data["直接人工S"] + row["FProcessCostO"] = data["制造费用O"] + row["FQ_O_S_T_R"] = data["料工费R"] + row["FO2"] = data["制造费用_职工薪酬"] + row["FO3"] = data["制造费用_股份支付"] + row["FO4"] = data["制造费用_劳动保护费"] + row["FO5"] = data["制造费用_差旅费"] + row["FO6"] = data["制造费用_业务招待费"] + row["FO7"] = data["制造费用_办公费"] + row["FO8"] = data["制造费用_折旧与摊销"] + row["FO9"] = data["制造费用_租赁费"] + row["FO10"] = data["制造费用_水电费"] + row["FO11"] = data["制造费用_物料消耗"] + row["FO12"] = data["制造费用_加工_修理_检测费"] + row["FO13"] = data["制造费用_车辆使用费"] + row["FO14"] = data["制造费用_其他"] + row["FO15"] = data["制造费用_委外加工费"] + row["FALLHRWORKTIME"] = data["总工时"] + # row["FO16"] = data["O16"] + + proRows.Add(row) + + this.View.UpdateView("FEntity") + this.View.Model.EndIniti(); \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原构造程序.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原构造程序.py index a8490c3..a74e7e4 100644 --- a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原构造程序.py +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原构造程序.py @@ -6,84 +6,293 @@ 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.Util import * from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter 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 +from Kingdee.BOS.KDThread import * -def ButtonClick(e): - if e.Key.EndsWith("FToSelectBtn", StringComparison.OrdinalIgnoreCase): +# showParameter = None +_whereSql = "" +def BarItemClick(e): + # 新增过滤窗口 + if e.BarItemKey == "tbShowFilterForm": + # global showParameter + # if showParameter == None: + showParameter = FilterShowParameter(); + showParameter.FormId = "POSH_CB_PROCOSTRESULTREC_FILTER"; + showParameter.ParentPageId = this.View.PageId; + + this.View.ShowForm(showParameter,lambda x:ShowReturnData(x)); + +def ShowReturnData(result): + global _whereSql + _whereSql = ""; + if result.ReturnData is None: + return + else: + whereSql = ""; + MoBills = List[str]() + BatchFilterRows = result.ReturnData.BatchFilterRows; + if BatchFilterRows != None and BatchFilterRows.Count > 0: + for item in BatchFilterRows: + if item.Value.find("[") == -1: + MoBills.Add(item.Value) + else: + vals = JsonUtil.DeserializeObject[List[str]](item.Value) + MoBills.AddRange(vals) + + FilterRows = result.ReturnData.FilterRows + if FilterRows != None and FilterRows.Count > 0: + for item in FilterRows: + MoBills.Add(item.Value) - billNos = List[str]() - billNos.Add("RO2403280019") - SelectData(); + if MoBills.Count > 0: + whereSql = " AND t0.FBILLNO IN ('{0}') ".format("','".join(MoBills)) + + _whereSql = whereSql + ShowProgressBar(); + # DoSetData(whereSql) -def SelectData(billNos): - jsons = [] - - sqlL = """/*dialect*/ +def DoSetData(whereSql): + date = DateTime.Now; + dateVal = (str(date)[0:7]).replace("-","") + # raise Exception(str(date)) + if whereSql == "": + whereSql = " AND CONVERT(INT, CONVERT(VARCHAR(6),t0.FDATE,112)) = @period " -SELECT t0.FPRODUCTNO - ,t0.FPRODUCTID - ,SUM(t1.FAMOUNT) AS '领料成本' - ,SUM(t1.FQTY) AS '领料数量' - ,t2.FMATERIALID - ,ISNULL(t4.FNUMBER,'') 'FLOT_TEXT' - ,ROW_NUMBER() OVER (PARTITION BY t0.FPRODUCTNO,t0.FPRODUCTID ORDER BY t2.FMATERIALID) RN - ,0 plevel -FROM T_CB_PROORDERDIME t0 - INNER JOIN V_CB_COSTALLORESULTSEND t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID - INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t2.FENTRYID = t1.FDIMEENTRYID - INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID - LEFT JOIN T_BD_LOTMASTER t4 on t4.FLOTID = t2.FLOT -WHERE t0.FPRODUCTNO IN ('{0}') -GROUP BY t0.FPRODUCTNO,t0.FPRODUCTID,t2.FMATERIALID,t4.FNUMBER + moSqlL = """/*dialect*/ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int - """ +SET @ACCTGORGID = 100039 +SET @period = 201801 +SELECT @dbName = DB_NAME() - datas = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL.format("','".join(billNos))); +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202406 + SET @ACCTGORGID = 1 +END + +;WITH #初始数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FPRODUCTID + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FFORMID + ,t0.FPRODUCTDIMEID + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t2.FID = t1.FACCTGID + WHERE 1=1 + AND (t2.FYEAR * 100 + t2.FPERIOD) = @period + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t0.FFORMID = 'PRD_MO' + AND t1.FENDINITKEY = 1 --期末标识 +) +, #成本数据 AS ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t1.FCOSTITEMID + ,(CASE WHEN t1.FEXPENSESITEMID = 4655037 AND t1.FCOSTITEMID = 20523 THEN 4655093 ELSE t1.FEXPENSESITEMID END) AS 'FEXPENSESITEMID' + ,t1.FEXPTYPE + ,t1.FQUALIFIEDINAMOUNT + ,t1.FCURRINPUTAMOUNT + FROM #初始数据 t0 + CROSS APPLY ( + SELECT t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ,SUM(t3d.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINAMOUNT' + ,SUM(t3d.FCURRINPUTAMOUNT) 'FCURRINPUTAMOUNT' + FROM V_CB_PROORDERINFO t1 + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + AND t1.FENDINITKEY = 1 + GROUP BY t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ) t1 +) +, #成本转换 AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID + ,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15,t1.O16 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t1.fieldName + FROM #成本数据 t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE t1 on t0.FEXPENSESITEMID = t1.FEXPID + WHERE NOT (t0.FCOSTITEMID = 20522 AND t0.FEXPENSESITEMID = 20045) + )t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15,O16) + ) AS t1 +) +SELECT t0.* + ,ISNULL(t1.O1,0) AS 'O1' + ,ISNULL(t1.O2,0) AS 'O2' + ,ISNULL(t1.O3,0) AS 'O3' + ,ISNULL(t1.O4,0) AS 'O4' + ,ISNULL(t1.O5,0) AS 'O5' + ,ISNULL(t1.O6,0) AS 'O6' + ,ISNULL(t1.O7,0) AS 'O7' + ,ISNULL(t1.O8,0) AS 'O8' + ,ISNULL(t1.O9,0) AS 'O9' + ,ISNULL(t1.O10,0) AS 'O10' + ,ISNULL(t1.O11,0) AS 'O11' + ,ISNULL(t1.O12,0) AS 'O12' + ,ISNULL(t1.O13,0) AS 'O13' + ,ISNULL(t1.O14,0) AS 'O14' + ,ISNULL(t1.O15,0) AS 'O15' + ,ISNULL(t1.O16,0) AS 'O16' + ,ISNULL(t1.O1,0) +ISNULL(t1.O2,0) + ISNULL(t1.O3,0) + ISNULL(t1.O4,0) + + ISNULL(t1.O5,0) + ISNULL(t1.O6,0) + ISNULL(t1.O7,0) + ISNULL(t1.O8,0) + + ISNULL(t1.O9,0) + ISNULL(t1.O10,0) + ISNULL(t1.O11,0) + ISNULL(t1.O12,0) + + ISNULL(t1.O13,0) + ISNULL(t1.O14,0) + ISNULL(t1.O15,0) + ISNULL(t1.O16,0) AS 'CostAll' + ,t2.FNUMBER + ,t2_l.FNAME + ,t2_l.FDESCRIPTION +FROM #初始数据 t0 + LEFT JOIN #成本转换 t1 on t0.FBILLID = t1.FBILLID + AND t0.FBILLENTRYID = t1.FBILLENTRYID + INNER JOIN T_BD_MATERIAL t2 on t0.FPRODUCTID = t2.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 + + """.format(str(dateVal),whereSql) + # raise Exception(moSqlL); + datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL); if datas != None and datas.Count > 0: + # raise Exception(str(datas.Count)); + proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity") + proRows = this.View.Model.GetEntityDataObject(proEntity) + + this.View.Session["ProcessRateValue"] = 1 + this.View.Model.BeginIniti(); + proRows.Clear() + num = 0; + count = datas.Count + for data in datas: + row = DynamicObject(proEntity.DynamicObjectType) + costQ = 0 + costT = 0 + billno = data["FPRODUCTNO"] + + num = num + 1 + + this.View.Session["ProcessRateValue"] = int(num * 100/ count); + this.View.Session["ProcessTips"] = "共{0}条数据,已处理{1}条数据,正在处理{2}".format(count,(num-1),billno); + resCost = GetExecCost(data["FPRODUCTNO"]) + + if resCost != None and resCost.Count > 0: + resCostRow = resCost[0] + costQ = resCostRow["costQ"] + costT = resCostRow["costT"] + + row["FMoBillNo"] = data["FPRODUCTNO"] + row["FProMaterialNumber"] = data["FNUMBER"] + row["FProMaterialName"] = data["FNAME"] + row["FQUALIFIEDINQTY"] = data["FSTOCKINQUASELAUXQTY"] + row["FMaterialCostQ"] = costQ + row["FLaborCostS"] = data["O1"] + row["FProcessCostO"] = data["O"] + costT + row["FQ_O_S_T_R"] = data["R"] + costQ + costT + row["FSysCostP"] = data["P"] + # row["FO1"] = data["O1"] + row["FMaterialCostT"] = costT + row["FO2"] = data["O2"] + row["FO3"] = data["O3"] + row["FO4"] = data["O4"] + row["FO5"] = data["O5"] + row["FO6"] = data["O6"] + row["FO7"] = data["O7"] + row["FO8"] = data["O8"] + row["FO9"] = data["O9"] + row["FO10"] = data["O10"] + row["FO11"] = data["O11"] + row["FO12"] = data["O12"] + row["FO13"] = data["O13"] + row["FO14"] = data["O14"] + row["FO15"] = data["O15"] + row["FO16"] = data["O16"] - itemBillNos = List[str]() - for item in datas: - lotObjVal = item["FLOT_TEXT"] - lotVal = '' if lotObjVal == None else str(lotObjVal) - jsonData = {"工单编号": item["FPRODUCTNO"],"批号": lotVal} + proRows.Add(row) - if lotVal != '': - itemBillNos.Add(lotVal); + this.View.UpdateView("FEntity") + this.View.Model.EndIniti(); - jsons.append(jsonData); - - if itemBillNos.Count > 0: - return SelectData(itemBillNos) - - return None - - else : - return None - - - - +def DoComputeData(billNo): + return { "CostQ" : 0,"CostT": 0 ,"CostA": 0 } + +def GetExecCost(billNo): + sqlL = """/*dialect*/ + EXEC PROC_CB_PRODUCT_COST_SELECT_SINGLE '{0}' + """.format(billNo) + res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + return res; + +# 检查批号是否符合类型 +def CheckLotText(lotText): + if len(lotText) < 12: + return False + lotFlag = lotText[:2] + if lotFlag == "WO" or lotFlag == "RO" or lotFlag == "TO" or lotFlag == "RT" : + return True + + return False; + +def showRslt(asynResult): + if (asynResult != None and asynResult.Exception != None): + this.View.ShowErrMessage(asynResult.Exception.Message); +#进度条达到100%之后,关闭进度条弹窗,回调此方法,弹出提示信息 +def showFinishMsg(formResult): + this.View.ShowMessage("数据加载完成!"); - \ No newline at end of file +def ShowProgressBar(): + #调试执行任务时,可以先通过这两行调试任务执行代码 + #因为启用进度条之后,是在子线程中运行,不方便分析代码问题。调试成功之后,再屏蔽这两行,启用进度条 + # setData(); + # return; + progressFormParameter = DynamicFormShowParameter(); + progressFormParameter.PageId = Guid.NewGuid().ToString(); + progressFormParameter.FormId = "BOS_ReportProgressMsg"; + progressFormParameter.OpenStyle.ShowType = ShowType.Modal; + progressFormParameter.Caption = "正在加载数据..."; + progressFormParameter.HiddenCloseButton = True; + #true表示使用真实进度,在执行任务的方法中更新进度值:代码示例,this.View.Session["ProcessRateValue"] =10 + progressFormParameter.CustomParams.Add("UseTruePro", "true"); + this.View.ShowForm(progressFormParameter,Action[FormResult](showFinishMsg)); + MainWorker.QuequeTask(this.Context,Action(setData),Action[AsynResult](showRslt)); +#自定义方法,在这里实现加载数据的任务,需要根据自己的个性化编写代码 +def setData(): + DoSetData(_whereSql) + #根据代码执行过程大致估算出进度值,整数,最后一定要有100%,否则进度弹窗无法自动关闭 + this.View.Session["ProcessRateValue"] = 100; +#本案例是通过值更新事件,选择年份或者月份的时候,动态加载出对应的数据 \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原查询报表_20240819.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原查询报表_20240819.py new file mode 100644 index 0000000..acd600d --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原查询报表_20240819.py @@ -0,0 +1,208 @@ +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.Util import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.KDThread import * +# 产品成本汇总快捷查询 +# POSH_PRODUCTCOSTQUICKQUERY +# showParameter = None +_whereSql = "" +def BarItemClick(e): + # 新增过滤窗口 + if e.BarItemKey == "tbShowFilterForm": + # global showParameter + # if showParameter == None: + showParameter = FilterShowParameter(); + showParameter.FormId = "POSH_PRODUCTCOSTQUICKQUERY_FILTER"; + showParameter.ParentPageId = this.View.PageId; + + this.View.ShowForm(showParameter,lambda x:ShowReturnData(x)); + +def GetExecCost(billNo,period,acctgOrgId): + sqlL = """/*dialect*/ + EXEC TEST_CB_CPCBHYFXIBB_COMPUTE '{0}',{1},{2} + """.format(billNo,period,acctgOrgId) + res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + return res; + +def ShowReturnData(resultData): + global _whereSql + dateVal = "" + whereSql = "" + if resultData.ReturnData is None: + return + else: + filterString = resultData.ReturnData.FilterString; + if filterString != None and filterString != "": + whereSql += " AND " + filterString.replace("FBILLNO","t0.FPRODUCTNO"); + + customFilter = resultData.ReturnData.CustomFilter; + if customFilter != None: + FYear = customFilter["FYear"] + FPeriod = customFilter["FPeriod"] + yearVal = 0 if FYear == None or FYear == "" else int(FYear) + periodVal = 0 if FPeriod == None or FPeriod == "" else int(FPeriod) + if yearVal > 0: + if periodVal > 0: + dateVal = str(yearVal * 100 + periodVal) + whereSql += " AND (t2.FYEAR * 100 + t2.FPERIOD) = {0} ".format(dateVal) + else: + whereSql += " AND t2.FYEAR = {0} ".format(yearVal) + + FSelMoBillNo = customFilter["FSelMoBillNo"] + moBillNo = "" if FSelMoBillNo == None else FSelMoBillNo + if moBillNo != "": + whereSql += " AND t0.FPRODUCTNO = '{0}' ".format(moBillNo) + + # raise Exception(whereSql) + + if whereSql == "": + raise Exception("查询条件不能为空!") + else: + _whereSql = whereSql + ShowProgressBar(); + +def DocCompute(whereSql): + # whereSql = _whereSql + moSqlL = """/*dialect*/ +DECLARE @ACCTGORGID int +SET @ACCTGORGID = 1 +;WITH #列表数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FQUALIFIEDINQTY AS '本期完工数量' + ,t3.FCURRINPUTQTY AS '本期投入数量' + ,t3.FSUMCURRINPUTQTY AS '累计投入数量' + ,t3.FSUMQUALIFIEDINQTY AS '累计完工数量' + ,RANK() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' + {0} +) +SELECT t0.*,t1.FNUMBER,t1_l.FNAME +FROM #列表数据 t0 + INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FPRODUCTID + INNER jOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FPRODUCTID AND t1_l.FLOCALEID = 2052 +WHERE t0.RN = 1 + + """.format(whereSql) + + # raise Exception(moSqlL); + proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity") + proRows = this.View.Model.GetEntityDataObject(proEntity) + this.View.Model.BeginIniti(); + proRows.Clear() + datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL); + if datas != None and datas.Count > 0: + # raise Exception(str(datas.Count)); + + # this.View.Session["ProcessRateValue"] = 1 + num = 0; + count = datas.Count + for data in datas: + row = DynamicObject(proEntity.DynamicObjectType) + + period = data["FPERIOD"] + billNo = data["FPRODUCTNO"] + + # row["FRN"] = data["FRN"] + row["FMoBillNo"] = billNo + row["FProMaterialNumber"] = data["FNUMBER"] + row["FProMaterialName"] = data["FNAME"] + row["FQUALIFIEDINQTY"] = data["本期完工数量"] + # raise Exception("AAAA2"); + num = num + 1 + this.View.Session["ProcessRateValue"] = int(num * 100/ count); + this.View.Session["ProcessTips"] = "共{0}条数据,已处理{1}条数据,正在处理{2}".format(count,(num-1),billNo); + + costDataList = GetExecCost(billNo,period,1) + + if costDataList != None and costDataList.Count > 0: + costData = costDataList[0] + row["FMaterialCostQ"] = float(costData["原材料Q1"]) + row["FLaborCostS"] = costData["直接人工S"] + row["FProcessCostO"] = costData["制造费用O"] + row["FQ_O_S_T_R"] = costData["原材料Q1"] + costData["直接人工S"] + costData["制造费用O"] + row["FMaterialCostT"] = costData["间接材料Q2"] + row["FO2"] = costData["制造费用_职工薪酬"] + row["FO3"] = costData["制造费用_股份支付"] + row["FO4"] = costData["制造费用_劳动保护费"] + row["FO5"] = costData["制造费用_差旅费"] + row["FO6"] = costData["制造费用_业务招待费"] + row["FO7"] = costData["制造费用_办公费"] + row["FO8"] = costData["制造费用_折旧与摊销"] + row["FO9"] = costData["制造费用_租赁费"] + row["FO10"] = costData["制造费用_水电费"] + row["FO11"] = costData["制造费用_物料消耗"] + row["FO12"] = costData["制造费用_加工_修理_检测费"] + row["FO13"] = costData["制造费用_车辆使用费"] + row["FO14"] = costData["制造费用_其他"] + row["FO15"] = costData["制造费用_委外加工费"] + row["FALLHRWORKTIME"] = costData["总工时"] + + proRows.Add(row) + # raise Exception("AAAA3"); + this.View.UpdateView("FEntity") + this.View.Model.EndIniti(); + + +def showRslt(asynResult): + if (asynResult != None and asynResult.Exception != None): + this.View.ShowErrMessage(asynResult.Exception.Message); +#进度条达到100%之后,关闭进度条弹窗,回调此方法,弹出提示信息 +def showFinishMsg(formResult): + this.View.ShowMessage("数据加载完成!"); + +def ShowProgressBar(): + #调试执行任务时,可以先通过这两行调试任务执行代码 + #因为启用进度条之后,是在子线程中运行,不方便分析代码问题。调试成功之后,再屏蔽这两行,启用进度条 + # setData(); + # return; + progressFormParameter = DynamicFormShowParameter(); + progressFormParameter.PageId = Guid.NewGuid().ToString(); + progressFormParameter.FormId = "BOS_ReportProgressMsg"; + progressFormParameter.OpenStyle.ShowType = ShowType.Modal; + progressFormParameter.Caption = "正在加载数据..."; + progressFormParameter.HiddenCloseButton = True; + #true表示使用真实进度,在执行任务的方法中更新进度值:代码示例,this.View.Session["ProcessRateValue"] =10 + progressFormParameter.CustomParams.Add("UseTruePro", "true"); + this.View.ShowForm(progressFormParameter,Action[FormResult](showFinishMsg)); + MainWorker.QuequeTask(this.Context,Action(setData),Action[AsynResult](showRslt)); +#自定义方法,在这里实现加载数据的任务,需要根据自己的个性化编写代码 +def setData(): + DocCompute(_whereSql) + #根据代码执行过程大致估算出进度值,整数,最后一定要有100%,否则进度弹窗无法自动关闭 + this.View.Session["ProcessRateValue"] = 100; +#本案例是通过值更新事件,选择年份或者月份的时候,动态加载出对应的数据 \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原过滤.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原过滤.py new file mode 100644 index 0000000..0625138 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品成本还原过滤.py @@ -0,0 +1,93 @@ +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("Newtonsoft.Json") + +from Kingdee.BOS import* +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter import * +from Kingdee.BOS.Core.CommonFilter.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from Newtonsoft.Json.Linq import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * + +# def OnInitialize(e): +# model = this.Model +# if model != None: +# if this.View.ParentFormView != None and this.View.ParentFormView.BusinessInfo != None: +# model.FormId = this.View.ParentFormView.BusinessInfo.GetForm().Id; +# return; +# model.FormId = this.View.BusinessInfo.GetForm().Id; + +def TreeNodeClick(e): + modelService = this.CommonFilterModel; + if modelService == None: + return; + # modelService.SchemeEntity.BatchFilterSetting = setting; + this.CommonFilterModel.BatchFilterObject.Setting = modelService.SchemeEntity.BatchFilterSetting; + jsonObj = JsonUtil.DeserializeObject[JObject](modelService.SchemeEntity.BatchFilterSetting) + batchFilterGrid = this.View.GetControl[BatchFilterGrid]("FBatchFilterGrid") + batchFilterGrid.SetFilterRowsWithMakeUpType(jsonObj) + + +def AfterBindData(e): + SetYearComboList(); + + batchFilterGrid = this.View.GetControl[BatchFilterGrid]("FBatchFilterGrid") + if batchFilterGrid == None: + return; + + if this.CommonFilterModel.FilterObject == None or this.CommonFilterModel.BatchFilterObject == None: + return; + + this.CommonFilterModel.BatchFilterObject.FilterMetaData = this.CommonFilterModel.FilterObject.FilterMetaData; + + for filterField in this.CommonFilterModel.FilterObject.FilterFieldList: + if filterField.ElementTypeID != 60015 and filterField.ElementTypeID != 1011: + this.CommonFilterModel.BatchFilterObject.AddField(filterField); + + batchFilterGrid.SetFilterFields(this.CommonFilterModel.BatchFilterObject.GetAllFilterFieldList()); + +# 设置年份表 +def SetYearComboList(): + enumList = List[EnumItem](); + # 开始年份23023 + startYear = 2023; + # 最后日期是今年 + lastYear=int(DateTime.Now.Year); + year = startYear; + flag = True + while flag: + flag = year < lastYear; + + enumItem = EnumItem(); + enumItem.Caption=LocaleValue(str(year), 2052);#下拉选项显示标题 + enumItem.EnumId = str(year);#下拉选项值,记录到数据库 + enumItem.Invalid = False; + enumItem.Value = str(year); + enumList.Add(enumItem); + + year += 1; + + comboList = this.View.GetFieldEditor[ComboFieldEditor]("FYear", 0); + if comboList != None: + comboList.SetComboItems(enumList); + + if this.View.OpenParameter.Status == OperationStatus.ADDNEW: + this.View.Model.SetValue("FYear", str(lastYear), 0);#如果单据打开为新增,设置年份默认值为当前年份 diff --git a/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品还原过滤2.py b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品还原过滤2.py new file mode 100644 index 0000000..a74e7e4 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/POSH_CB_PROCOSTRESULTREC/产品还原过滤2.py @@ -0,0 +1,298 @@ +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.Util import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.DependencyRules 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.Core.CommonFilter import * +from System import * +from System.ComponentModel import* +from System.Collections.Generic import* +from System.Text import* +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.KDThread import * + +# showParameter = None +_whereSql = "" +def BarItemClick(e): + # 新增过滤窗口 + if e.BarItemKey == "tbShowFilterForm": + # global showParameter + # if showParameter == None: + showParameter = FilterShowParameter(); + showParameter.FormId = "POSH_CB_PROCOSTRESULTREC_FILTER"; + showParameter.ParentPageId = this.View.PageId; + + this.View.ShowForm(showParameter,lambda x:ShowReturnData(x)); + +def ShowReturnData(result): + global _whereSql + _whereSql = ""; + if result.ReturnData is None: + return + else: + whereSql = ""; + MoBills = List[str]() + BatchFilterRows = result.ReturnData.BatchFilterRows; + if BatchFilterRows != None and BatchFilterRows.Count > 0: + for item in BatchFilterRows: + if item.Value.find("[") == -1: + MoBills.Add(item.Value) + else: + vals = JsonUtil.DeserializeObject[List[str]](item.Value) + MoBills.AddRange(vals) + + FilterRows = result.ReturnData.FilterRows + if FilterRows != None and FilterRows.Count > 0: + for item in FilterRows: + MoBills.Add(item.Value) + + if MoBills.Count > 0: + whereSql = " AND t0.FBILLNO IN ('{0}') ".format("','".join(MoBills)) + + _whereSql = whereSql + ShowProgressBar(); + # DoSetData(whereSql) + +def DoSetData(whereSql): + date = DateTime.Now; + dateVal = (str(date)[0:7]).replace("-","") + # raise Exception(str(date)) + if whereSql == "": + whereSql = " AND CONVERT(INT, CONVERT(VARCHAR(6),t0.FDATE,112)) = @period " + + moSqlL = """/*dialect*/ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int + +SET @ACCTGORGID = 100039 +SET @period = 201801 +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202406 + SET @ACCTGORGID = 1 +END + +;WITH #初始数据 AS ( + SELECT t0.FPRODUCTNO + ,t0.FPRODUCTID + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FFORMID + ,t0.FPRODUCTDIMEID + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t2.FID = t1.FACCTGID + WHERE 1=1 + AND (t2.FYEAR * 100 + t2.FPERIOD) = @period + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t0.FFORMID = 'PRD_MO' + AND t1.FENDINITKEY = 1 --期末标识 +) +, #成本数据 AS ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t1.FCOSTITEMID + ,(CASE WHEN t1.FEXPENSESITEMID = 4655037 AND t1.FCOSTITEMID = 20523 THEN 4655093 ELSE t1.FEXPENSESITEMID END) AS 'FEXPENSESITEMID' + ,t1.FEXPTYPE + ,t1.FQUALIFIEDINAMOUNT + ,t1.FCURRINPUTAMOUNT + FROM #初始数据 t0 + CROSS APPLY ( + SELECT t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ,SUM(t3d.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINAMOUNT' + ,SUM(t3d.FCURRINPUTAMOUNT) 'FCURRINPUTAMOUNT' + FROM V_CB_PROORDERINFO t1 + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + AND t1.FENDINITKEY = 1 + GROUP BY t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ) t1 +) +, #成本转换 AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID + ,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15,t1.O16 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t1.fieldName + FROM #成本数据 t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE t1 on t0.FEXPENSESITEMID = t1.FEXPID + WHERE NOT (t0.FCOSTITEMID = 20522 AND t0.FEXPENSESITEMID = 20045) + )t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15,O16) + ) AS t1 +) +SELECT t0.* + ,ISNULL(t1.O1,0) AS 'O1' + ,ISNULL(t1.O2,0) AS 'O2' + ,ISNULL(t1.O3,0) AS 'O3' + ,ISNULL(t1.O4,0) AS 'O4' + ,ISNULL(t1.O5,0) AS 'O5' + ,ISNULL(t1.O6,0) AS 'O6' + ,ISNULL(t1.O7,0) AS 'O7' + ,ISNULL(t1.O8,0) AS 'O8' + ,ISNULL(t1.O9,0) AS 'O9' + ,ISNULL(t1.O10,0) AS 'O10' + ,ISNULL(t1.O11,0) AS 'O11' + ,ISNULL(t1.O12,0) AS 'O12' + ,ISNULL(t1.O13,0) AS 'O13' + ,ISNULL(t1.O14,0) AS 'O14' + ,ISNULL(t1.O15,0) AS 'O15' + ,ISNULL(t1.O16,0) AS 'O16' + ,ISNULL(t1.O1,0) +ISNULL(t1.O2,0) + ISNULL(t1.O3,0) + ISNULL(t1.O4,0) + + ISNULL(t1.O5,0) + ISNULL(t1.O6,0) + ISNULL(t1.O7,0) + ISNULL(t1.O8,0) + + ISNULL(t1.O9,0) + ISNULL(t1.O10,0) + ISNULL(t1.O11,0) + ISNULL(t1.O12,0) + + ISNULL(t1.O13,0) + ISNULL(t1.O14,0) + ISNULL(t1.O15,0) + ISNULL(t1.O16,0) AS 'CostAll' + ,t2.FNUMBER + ,t2_l.FNAME + ,t2_l.FDESCRIPTION +FROM #初始数据 t0 + LEFT JOIN #成本转换 t1 on t0.FBILLID = t1.FBILLID + AND t0.FBILLENTRYID = t1.FBILLENTRYID + INNER JOIN T_BD_MATERIAL t2 on t0.FPRODUCTID = t2.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 + + """.format(str(dateVal),whereSql) + + # raise Exception(moSqlL); + datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL); + if datas != None and datas.Count > 0: + # raise Exception(str(datas.Count)); + proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity") + proRows = this.View.Model.GetEntityDataObject(proEntity) + + this.View.Session["ProcessRateValue"] = 1 + this.View.Model.BeginIniti(); + proRows.Clear() + num = 0; + count = datas.Count + for data in datas: + row = DynamicObject(proEntity.DynamicObjectType) + costQ = 0 + costT = 0 + billno = data["FPRODUCTNO"] + + num = num + 1 + + this.View.Session["ProcessRateValue"] = int(num * 100/ count); + this.View.Session["ProcessTips"] = "共{0}条数据,已处理{1}条数据,正在处理{2}".format(count,(num-1),billno); + resCost = GetExecCost(data["FPRODUCTNO"]) + + if resCost != None and resCost.Count > 0: + resCostRow = resCost[0] + costQ = resCostRow["costQ"] + costT = resCostRow["costT"] + + row["FMoBillNo"] = data["FPRODUCTNO"] + row["FProMaterialNumber"] = data["FNUMBER"] + row["FProMaterialName"] = data["FNAME"] + row["FQUALIFIEDINQTY"] = data["FSTOCKINQUASELAUXQTY"] + row["FMaterialCostQ"] = costQ + row["FLaborCostS"] = data["O1"] + row["FProcessCostO"] = data["O"] + costT + row["FQ_O_S_T_R"] = data["R"] + costQ + costT + row["FSysCostP"] = data["P"] + # row["FO1"] = data["O1"] + row["FMaterialCostT"] = costT + row["FO2"] = data["O2"] + row["FO3"] = data["O3"] + row["FO4"] = data["O4"] + row["FO5"] = data["O5"] + row["FO6"] = data["O6"] + row["FO7"] = data["O7"] + row["FO8"] = data["O8"] + row["FO9"] = data["O9"] + row["FO10"] = data["O10"] + row["FO11"] = data["O11"] + row["FO12"] = data["O12"] + row["FO13"] = data["O13"] + row["FO14"] = data["O14"] + row["FO15"] = data["O15"] + row["FO16"] = data["O16"] + + proRows.Add(row) + + this.View.UpdateView("FEntity") + this.View.Model.EndIniti(); + +def DoComputeData(billNo): + + + + return { "CostQ" : 0,"CostT": 0 ,"CostA": 0 } + +def GetExecCost(billNo): + sqlL = """/*dialect*/ + EXEC PROC_CB_PRODUCT_COST_SELECT_SINGLE '{0}' + """.format(billNo) + res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) + return res; + +# 检查批号是否符合类型 +def CheckLotText(lotText): + if len(lotText) < 12: + return False + + lotFlag = lotText[:2] + if lotFlag == "WO" or lotFlag == "RO" or lotFlag == "TO" or lotFlag == "RT" : + return True + + return False; + +def showRslt(asynResult): + if (asynResult != None and asynResult.Exception != None): + this.View.ShowErrMessage(asynResult.Exception.Message); +#进度条达到100%之后,关闭进度条弹窗,回调此方法,弹出提示信息 +def showFinishMsg(formResult): + this.View.ShowMessage("数据加载完成!"); + +def ShowProgressBar(): + #调试执行任务时,可以先通过这两行调试任务执行代码 + #因为启用进度条之后,是在子线程中运行,不方便分析代码问题。调试成功之后,再屏蔽这两行,启用进度条 + # setData(); + # return; + progressFormParameter = DynamicFormShowParameter(); + progressFormParameter.PageId = Guid.NewGuid().ToString(); + progressFormParameter.FormId = "BOS_ReportProgressMsg"; + progressFormParameter.OpenStyle.ShowType = ShowType.Modal; + progressFormParameter.Caption = "正在加载数据..."; + progressFormParameter.HiddenCloseButton = True; + #true表示使用真实进度,在执行任务的方法中更新进度值:代码示例,this.View.Session["ProcessRateValue"] =10 + progressFormParameter.CustomParams.Add("UseTruePro", "true"); + this.View.ShowForm(progressFormParameter,Action[FormResult](showFinishMsg)); + MainWorker.QuequeTask(this.Context,Action(setData),Action[AsynResult](showRslt)); +#自定义方法,在这里实现加载数据的任务,需要根据自己的个性化编写代码 +def setData(): + DoSetData(_whereSql) + #根据代码执行过程大致估算出进度值,整数,最后一定要有100%,否则进度弹窗无法自动关闭 + this.View.Session["ProcessRateValue"] = 100; +#本案例是通过值更新事件,选择年份或者月份的时候,动态加载出对应的数据 \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/PlanService/ListEventPlugInEx.py b/07.珠海英搏尔/Enpower.Python/PlanService/ListEventPlugInEx.py new file mode 100644 index 0000000..cb2dac2 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/PlanService/ListEventPlugInEx.py @@ -0,0 +1,27 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Core") +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 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.List.PlugIn import* +from Kingdee.BOS.Core.List.PlugIn.Args import* +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import* +from Kingdee.BOS.ServiceHelper import* +from Kingdee.BOS.Orm.DataEntity import* + +def AfterDoOperation(e): + if e.Operation.Operation == "FDoUpdate240116": + sql = "/*dialect*/ exec P_UpdatePlan2 '' "; + # //执行SQL语句 + dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/SQLQuery2.sql b/07.珠海英搏尔/Enpower.Python/SQLQuery2.sql new file mode 100644 index 0000000..d605af3 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/SQLQuery2.sql @@ -0,0 +1,50 @@ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202305 + SET @ACCTGORGID = 1 + + SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + --SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' +END + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FMATERIALID + ,t3.FEXPTYPE + ,SUM(t3.FQUALIFIEDINQTY) 'FQUALIFIEDINQTY',SUM(t3.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINQTY' + ,t3.FCURRINPUTQTY,t3.FCURRINPUTAMOUNT + ,MAX(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + GROUP BY t0.FPRODUCTNO + ,t0.FBILLID,t0.FBILLENTRYID + ,t0.FPRODUCTID,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FMATERIALID,t3.FEXPTYPE +) +SELECT * FROM #ʼ \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程报表_存储过程V9.2_20240819.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程报表_存储过程V9.2_20240819.sql new file mode 100644 index 0000000..9afd82d --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程报表_存储过程V9.2_20240819.sql @@ -0,0 +1,366 @@ +ALTER PROC TEST_CB_CPCBHYFXIBB3 + @billNo varchar(100) + ,@YEAR int + ,@M int + ,@ACCTGORGID int +AS +BEGIN +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) +BEGIN + DROP TABLE [dbo].[#ѯ] +END + +DECLARE @period int +SET @period = (@YEAR * 100 + @M) + +CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + [ʹñ] decimal(23,10) NOT NULL, + [ֱ˹S] decimal(23,10) NOT NULL, + --[˹S2] decimal(23,10) NOT NULL, + [ϳɱQ] decimal(23,10) NOT NULL, + --[ӲQ2] decimal(23,10) NOT NULL, + [_ְн] decimal(23,10) NOT NULL, + [_ɷ֧] decimal(23,10) NOT NULL, + [_Ͷ] decimal(23,10) NOT NULL, + [_÷] decimal(23,10) NOT NULL, + [_ҵд] decimal(23,10) NOT NULL, + [_칫] decimal(23,10) NOT NULL, + [_۾̯] decimal(23,10) NOT NULL, + [_޷] decimal(23,10) NOT NULL, + [_ˮ] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ӹ__] decimal(23,10) NOT NULL, + [_ʹ÷] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ίӹ] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + [FAMOUNT] decimal(23,10) NULL, + [FQTY] decimal(23,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + [MPATH] nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + [FLEVEL] int not null +) + +CREATE INDEX idx_ѯ_fuhesuoyin ON #ѯ([SubBillEntryId]); + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,CAST(t3.FSUMQUALIFIEDINQTY AS decimal(23,10)) '깤' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,t3d.FSUMQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + --AND t4.FSUMQUALIFIEDINQTY != 0 +) +, #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 +) +INSERT INTO #ѯ +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END 'ʹñ' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,0 +FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID +WHERE t0.RN = 1 +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE(@num!=0 AND @LoopCount < 30) +BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (PARTITION BY t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,tt.ʹñ + ,tt.깤ɱ AS 'ϼ깤ɱ' + ,CAST(CASE WHEN t4.FSUMQUALIFIEDINAMOUNT = 0 THEN 1 ELSE tt.깤ɱ / t4.FSUMQUALIFIEDINAMOUNT END AS decimal(23,10)) AS '깤ռ' + ,t3d.FSUMQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillId = t0.FBILLID AND tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + --AND t4.FSUMQUALIFIEDINQTY != 0 + --AND tt.FLEVEL < 2 + ) + , #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CAST(CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END AS decimal(23,10)) * CAST(t0.ʹñ * t0.깤ռ AS decimal(23,10)) 'ʹñ' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,@level AS 'Flevel' + FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 +END + +;WITH # AS ( + SELECT t0.FPRODUCTNO AS '' + ,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӲ' WHEN 1 THEN 'Ӳ' WHEN 2 THEN 'ӹ' WHEN 9 THEN 'ʱ' ELSE '' END AS '' + ,CASE t0.FEXPTYPE WHEN 9 THEN t0.깤 * t0.ʹñ ELSE 0 END AS 'ܹʱ' + ,ROUND(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,6) AS 'ԭQ1' + ,ROUND(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,6) 'ӲQ2' + ,ROUND(CASE WHEN t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2 THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,6) 'ֱ˹S' + ,ROUND(CASE WHEN t0.FEXPTYPE != 0 AND t0.FEXPTYPE != 2 THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,6) AS '˹S2' + ,ROUND(t0.ʹñ * t0._ְн ,6) AS '_ְн' + ,ROUND(t0.ʹñ * t0._ɷ֧ ,6) AS '_ɷ֧' + ,ROUND(t0.ʹñ * t0._Ͷ ,6) AS '_Ͷ' + ,ROUND(t0.ʹñ * t0._÷ ,6) AS '_÷' + ,ROUND(t0.ʹñ * t0._ҵд ,6) AS '_ҵд' + ,ROUND(t0.ʹñ * t0._칫 ,6) AS '_칫' + ,ROUND(t0.ʹñ * t0._۾̯ ,6) AS '_۾̯' + ,ROUND(t0.ʹñ * t0._޷ ,6) AS '_޷' + ,ROUND(t0.ʹñ * t0._ˮ ,6) AS '_ˮ' + ,ROUND(t0.ʹñ * t0._ ,6) AS '_' + ,ROUND(t0.ʹñ * t0._ӹ__ ,6) AS '_ӹ__' + ,ROUND(t0.ʹñ * t0._ʹ÷ ,6) AS '_ʹ÷' + ,ROUND(t0.ʹñ * t0._ ,6) AS '_' + ,ROUND(t0.ʹñ * t0._ίӹ ,6) AS '_ίӹ' + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.ƷͶɱ + ,t0.Ʒ깤ɱ + ,t0.FNUMBER AS '' + ,t0.FPERIOD AS '' + ,t0.FGOON AS 'ִзֽ' + ,t0.FLEVEL AS '㼶' + ,t0.MPATH AS 'ֽ·' + ,t0.Ͷ + ,t0.깤 + ,t0.ƷͶ + ,t0.Ʒ깤 + ,t0.FAMOUNT AS 'ϳɱ' + ,t0.FQTY AS '' + ,t0.FLOT + ,t0.SubBillId + ,t0.SubBillEntryId + ,t0.SubPRODUCTDIMEID + FROM #ѯ t0 + WHERE 1=1 + AND t0.FGOON = 0 +) +SELECT t0. + ,t2.FNUMBER AS 'Ʒ' + ,t2_l.FNAME AS 'Ʒ' + ,t1.FNUMBER AS 'ϱ' + ,t1_l.FNAME AS '' + ,t0. + ,t0.ԭQ1 ,t0.ֱ˹S + ,t0._ְн + t0._ɷ֧ + t0._Ͷ + t0._÷ + t0._ҵд + + t0._칫 + t0._۾̯ + t0._޷ + t0._ˮ + t0._ + + t0._ӹ__ + t0._ʹ÷ + t0._ + t0._ίӹ + t0.ӲQ2 + t0.˹S2 AS 'O' + ,t0.ӲQ2 + ,t0._ְн + ,t0._ɷ֧ + ,t0._Ͷ + ,t0._÷ + ,t0._ҵд + ,t0._칫 + ,t0._۾̯ + ,t0._޷ + ,t0._ˮ + ,t0._ + ,t0._ӹ__ + ,t0._ʹ÷ + ,t0._ + t0.˹S2 AS '_' + ,t0._ίӹ + ,t0.ܹʱ + ,t0.Ʒ깤ɱ + ,t0.ִзֽ + ,t0. + ,t0.㼶 + ,t0.ֽ· +FROM # t0 + LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 + LEFT JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t0.FPRODUCTID + LEFT JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 +ORDER BY t0.㼶 + ,t0.FPRODUCTID DESC + ,t0.FEXPTYPE + ,t0.FMATERIALID + +END \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程结果汇总_存储过程V9.2_20240819.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程结果汇总_存储过程V9.2_20240819.sql new file mode 100644 index 0000000..6320383 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原分解过程结果汇总_存储过程V9.2_20240819.sql @@ -0,0 +1,321 @@ +ALTER PROC TEST_CB_CPCBHYFXIBB_COMPUTE + @billNo varchar(100) + ,@period int + ,@ACCTGORGID int +AS +BEGIN + IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) + BEGIN + DROP TABLE [dbo].[#ѯ] + END + + CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + [ʹñ] decimal(23,10) NOT NULL, + [ֱ˹S] decimal(23,10) NOT NULL, + --[˹S2] decimal(23,10) NOT NULL, + [ϳɱQ] decimal(23,10) NOT NULL, + --[ӲQ2] decimal(23,10) NOT NULL, + [_ְн] decimal(23,10) NOT NULL, + [_ɷ֧] decimal(23,10) NOT NULL, + [_Ͷ] decimal(23,10) NOT NULL, + [_÷] decimal(23,10) NOT NULL, + [_ҵд] decimal(23,10) NOT NULL, + [_칫] decimal(23,10) NOT NULL, + [_۾̯] decimal(23,10) NOT NULL, + [_޷] decimal(23,10) NOT NULL, + [_ˮ] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ӹ__] decimal(23,10) NOT NULL, + [_ʹ÷] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ίӹ] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + [FAMOUNT] decimal(23,10) NULL, + [FQTY] decimal(23,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + [MPATH] nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + [FLEVEL] int not null + ) + + CREATE INDEX idx_ѯ_fuhesuoyin ON #ѯ([SubBillEntryId]); + + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,CAST(t3.FSUMQUALIFIEDINQTY AS decimal(23,10)) '깤' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,t3d.FSUMQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + --AND t4.FSUMQUALIFIEDINQTY != 0 + ) + , #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END 'ʹñ' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,0 + FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + DECLARE @num INT,@level int,@LoopCount int + SET @num = 1 + SET @level =1 + SET @LoopCount = 0; + WHILE(@num!=0 AND @LoopCount < 30) + BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (PARTITION BY t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,tt.ʹñ + ,tt.깤ɱ AS 'ϼ깤ɱ' + ,CAST(CASE WHEN t4.FSUMQUALIFIEDINAMOUNT = 0 THEN 1 ELSE tt.깤ɱ / t4.FSUMQUALIFIEDINAMOUNT END AS decimal(23,10)) AS '깤ռ' + ,t3d.FSUMQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillId = t0.FBILLID AND tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + ) + , #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CAST(CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END AS decimal(23,10)) * CAST(t0.ʹñ * t0.깤ռ AS decimal(23,10)) 'ʹñ' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,@level AS 'Flevel' + FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 + END + + ;WITH # AS ( + SELECT t0.FPRODUCTNO AS '' + ,CASE t0.FEXPTYPE WHEN 9 THEN t0.깤 ELSE 0 END * t0.ʹñ AS 'ܹʱ' + ,ROUND(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,6) AS 'ԭQ1' + ,ROUND(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,6) 'ӲQ2' + ,ROUND(CASE WHEN t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2 THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,6) 'ֱ˹S' + ,ROUND(CASE WHEN t0.FEXPTYPE != 0 AND t0.FEXPTYPE != 2 THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,6) AS '˹S2' + ,ROUND(t0.ʹñ * t0._ְн ,6) AS '_ְн' + ,ROUND(t0.ʹñ * t0._ɷ֧ ,6) AS '_ɷ֧' + ,ROUND(t0.ʹñ * t0._Ͷ ,6) AS '_Ͷ' + ,ROUND(t0.ʹñ * t0._÷ ,6) AS '_÷' + ,ROUND(t0.ʹñ * t0._ҵд ,6) AS '_ҵд' + ,ROUND(t0.ʹñ * t0._칫 ,6) AS '_칫' + ,ROUND(t0.ʹñ * t0._۾̯ ,6) AS '_۾̯' + ,ROUND(t0.ʹñ * t0._޷ ,6) AS '_޷' + ,ROUND(t0.ʹñ * t0._ˮ ,6) AS '_ˮ' + ,ROUND(t0.ʹñ * t0._ ,6) AS '_' + ,ROUND(t0.ʹñ * t0._ӹ__ ,6) AS '_ӹ__' + ,ROUND(t0.ʹñ * t0._ʹ÷ ,6) AS '_ʹ÷' + ,ROUND(t0.ʹñ * t0._ ,6) AS '_' + ,ROUND(t0.ʹñ * t0._ίӹ ,6) AS '_ίӹ' + FROM #ѯ t0 + WHERE 1=1 + AND t0.FGOON = 0 + ) + SELECT SUM(t0.ԭQ1) AS 'ԭQ1' + ,SUM(t0.ֱ˹S) AS 'ֱ˹S' + ,SUM(t0._ְн + t0._ɷ֧ + t0._Ͷ + t0._÷ + t0._ҵд + + t0._칫 + t0._۾̯ + t0._޷ + t0._ˮ + t0._ + + t0._ӹ__ + t0._ʹ÷ + t0._ + t0._ίӹ + + t0.˹S2 + t0.ӲQ2) AS 'O' + ,SUM(t0.ӲQ2) AS 'ӲQ2' + ,SUM(t0._ְн) AS '_ְн' + ,SUM(t0._ɷ֧) AS '_ɷ֧' + ,SUM(t0._Ͷ) AS '_Ͷ' + ,SUM(t0._÷) AS '_÷' + ,SUM(t0._ҵд) AS '_ҵд' + ,SUM(t0._칫) AS '_칫' + ,SUM(t0._۾̯) AS '_۾̯' + ,SUM(t0._޷) AS '_޷' + ,SUM(t0._ˮ) AS '_ˮ' + ,SUM(t0._) AS '_' + ,SUM(t0._ӹ__) AS '_ӹ__' + ,SUM(t0._ʹ÷) AS '_ʹ÷' + ,SUM(t0._ίӹ) AS '_ίӹ' + ,SUM(t0._ + t0.˹S2) AS '_' + ,SUM(t0.ܹʱ) AS 'ܹʱ' + FROM # t0 + +END \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报AAAAAAAAAAAA.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报AAAAAAAAAAAA.sql new file mode 100644 index 0000000..44a5799 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报AAAAAAAAAAAA.sql @@ -0,0 +1,312 @@ +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) +BEGIN + DROP TABLE [dbo].[#ѯ] +END + + +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) + + +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202407 + --SET @period = 202308 + SET @ACCTGORGID = 1 + + SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + --SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' + --SET @billNo = 'WO2311020005' + --SET @billNo = 'WO2312050303' + + --SET @billNo = 'WO2403270354' + --SET @billNo = 'WO2406050001' + --SET @billNo = 'WO2404170154' +END + + +CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + --[FFORMID] varchar(36) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [INFOID] int NOT NULL, + [FACCTGID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + --[] decimal(23,10) NULL, + --[] decimal(23,10) NULL, + [ʹñ] decimal(23,10) NOT NULL, + --[ɱռ] decimal(23,10) NOT NULL, + --[] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + + [FAMOUNT] decimal(23,10) NULL, + [FQTY] decimal(23,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + [MPATH] nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + [FLEVEL] int not null +) + +CREATE INDEX idx_ѯ_fuhesuoyin ON #ѯ([SubBillEntryId]); + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t1.FACCTGID + ,t1.FID AS 'INFOID' + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,CAST(t3.FSUMQUALIFIEDINQTY AS decimal(23,10)) '깤' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + AND t4.FSUMQUALIFIEDINQTY != 0 +) +INSERT INTO #ѯ +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.INFOID + ,t0.FACCTGID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END 'ʹñ' + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,0 +FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID +WHERE t0.RN = 1 +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE(@num!=0 AND @LoopCount < 30) +BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t1.FACCTGID + ,t1.FID AS 'INFOID' + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (PARTITION BY t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,tt.ʹñ + ,tt.깤ɱ AS 'ϼ깤ɱ' + ,CAST(CASE WHEN t4.FSUMQUALIFIEDINAMOUNT = 0 THEN 1 ELSE tt.깤ɱ / t4.FSUMQUALIFIEDINAMOUNT END AS decimal(23,10)) AS '깤ռ' + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubBillId = t0.FBILLID AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + --AND t4.FSUMQUALIFIEDINQTY != 0 + --AND tt.FLEVEL < 2 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.INFOID + ,t0.FACCTGID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CAST(CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END AS decimal(23,10)) * CAST(t0.ʹñ * t0.깤ռ AS decimal(23,10)) 'ʹñ' + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,@level AS 'Flevel' + FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 + + UPDATE STATISTICS #ѯ idx_ѯ_fuhesuoyin; +END + +SELECT t0.FPRODUCTNO AS '' + ,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FACCTGID,t0.INFOID + ,t0.FMATERIALID + --,t1.FNUMBER AS 'ϱ' + --,t1_l.FNAME AS '' + ,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӲ' WHEN 1 THEN 'Ӳ' WHEN 2 THEN 'ӹ' WHEN 9 THEN 'ʱ' ELSE '' END AS '' + ,t0.ʹñ + ,t0.ʹñ * t0.깤ɱ AS 'Ϲ' + --,ROUND(t0.ʹñ * t0.깤ɱ,2) AS 'Ϲ' + ,CASE t0.FEXPTYPE WHEN 9 THEN t0.깤 ELSE 0 END * t0.ʹñ AS 'ܹʱ' + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.ƷͶɱ + ,t0.Ʒ깤ɱ + ,t0.FNUMBER AS '' + ,t0.FPERIOD AS '' + ,t0.FGOON AS 'ִзֽ' + ,t0.FLEVEL AS '㼶' + ,t0.MPATH AS 'ֽ·' + ,t0.Ͷ + ,t0.깤 + ,t0.ƷͶ + ,t0.Ʒ깤 + ,t0.FAMOUNT AS 'ϳɱ' + ,t0.FQTY AS '' + ,t0.FLOT + ,t0.SubBillId + ,t0.SubBillEntryId + ,t0.SubPRODUCTDIMEID +FROM #ѯ t0 + --INNER JOIN V_CB_COSTMATTERIAL t1 on t1.FID = t0.INFOID + --INNER JOIN V_CB_COSTMATTERIALDETAIL t1d on t1d.FENTRYID = t1.FENTRYID + --LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID + --LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 + --LEFT JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t0.FPRODUCTID + --LEFT JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 +WHERE 1=1 +ORDER BY t0.FLEVEL + ,t0.FPRODUCTID DESC + ,t0.FEXPTYPE + ,t0.FMATERIALID \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V8.0.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V8.0.sql index 3379372..1d1e712 100644 --- a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V8.0.sql +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V8.0.sql @@ -82,7 +82,7 @@ SET @num = 1 SET @level =1 SET @LoopCount = 0; -INSERT INTO # +INSERT INTO # SELECT tt.FBILLNO,'',0,1,0,0 ,tt.FID,tt.FENTRYID,tt.FMATERIALID,'' ,CONVERT(varchar(1000),ROW_NUMBER() OVER (ORDER BY tt.FID,tt.FENTRYID)) diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.0_20240801.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.0_20240801.sql new file mode 100644 index 0000000..e959e1d --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.0_20240801.sql @@ -0,0 +1,138 @@ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202305 + SET @ACCTGORGID = 1 + + SET @billNo = 'WO2403210039' + SET @billNo = 'WO2403210048' + SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' +END + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FMATERIALID + ,t3.FQUALIFIEDINQTY + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ,t3d.FQUALIFIEDINAMOUNT + ,t3.FCURRINPUTAMOUNT + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + --AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 +) +, #ɱת AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID,t1.FMATERIALID,t1.FEXPTYPE + ,t1.FCURRINPUTAMOUNT,t1.FQUALIFIEDINQTY,t1.FPERIOD + ,t1.O0,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID,t0.FEXPTYPE + ,t0.FMATERIALID,t0.FQUALIFIEDINAMOUNT,t0.FCURRINPUTAMOUNT,t0.FQUALIFIEDINQTY,t0.FPERIOD + ,t1.fieldName + FROM #ʼ t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t1 on t0.FEXPENSESITEMID = t1.FEXPID + ) t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) AS t1 +) +, # AS ( + SELECT t0e.FENUMID,t0e.FSEQ,t0e.FVALUE,t0e_l.FCAPTION + FROM T_META_FORMENUMITEM t0e + INNER JOIN T_META_FORMENUMITEM_L t0e_l on t0e.FENUMID = t0e_l.FENUMID AND t0e_l.FLOCALEID = 2052 + WHERE 1 = 1 + AND t0e.FID = 'ac14913e-bd72-416d-a50b-2c7432bbff63' +) +SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FMATERIALID,t0.FEXPTYPE,t0.FBILLID,t0.FBILLENTRYID + ,t3_l.FNAME,t3.FNUMBER + ,ISNULL(t2_l.FNAME,'') AS '',ISNULL(t2.FNUMBER,'') AS 'ϱ' + ,ISNULL(t2w.FCAPTION,'') AS '',ISNULL(t2b.FERPCLSID,'') AS 'ֵ' + ,t0.FMATERIALID '' + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ',ISNULL(t4.FQTY,0) AS '',ISNULL(t4.FLOT,0) AS 'FLOT',ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,ISNULL(t4.FPERIOD,'') AS 'FPERIOD' + ,t0.ۼͶɱ + ,t0.ۼ깤 + ,t0.ϳɱQ + t0.O + t0.ֱ˹S AS 'ϹR' + ,t0.,t0.ֱ˹S,t0.ϳɱQ,t0.ԭQ1,t0.ӲQ2,t0.O + ,t0._ְн,t0._ɷ֧,t0._Ͷ,t0._÷,t0._ҵд,t0._칫,t0._۾̯,t0._޷,t0._ˮ,t0._,t0._ӹ__,t0._ʹ÷,t0._,t0._ίӹ +FROM ( SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FMATERIALID,t0.FEXPTYPE,t0.FBILLID,t0.FBILLENTRYID + ,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӷ' WHEN 1 THEN 'ӷ' WHEN 2 THEN '' ELSE '' END '' + ,SUM(t0.FCURRINPUTAMOUNT) AS 'ۼͶɱ' + ,SUM(t0.FQUALIFIEDINQTY) AS 'ۼ깤' + ,MAX(t0.FPERIOD) AS 'FPERIOD' + ,SUM(ISNULL(t0.O0,0)) AS 'ֱ˹S' + ,SUM(ISNULL(t0.O1,0)) AS 'ϳɱQ' + --,CASE t0.FEXPTYPE WHEN 0 THEN SUM(ISNULL(t0.O1,0)) ELSE 0 END AS 'ԭQ1' + --,CASE WHEN t0.FEXPTYPE != 0 THEN SUM(ISNULL(t0.O1,0)) ELSE 0 END AS 'ӲQ2' + ,SUM(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS 'ԭQ1' + ,SUM(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS 'ӲQ2' + ,SUM(ISNULL(t0.O2,0) + ISNULL(t0.O3,0)+ISNULL(t0.O4,0)+ISNULL(t0.O5,0)+ISNULL(t0.O6,0)+ISNULL(t0.O7,0)+ISNULL(t0.O8,0)+ISNULL(t0.O9,0)+ISNULL(t0.O10,0)+ISNULL(t0.O11,0)+ISNULL(t0.O12,0)+ISNULL(t0.O13,0)+ISNULL(t0.O14,0)+ISNULL(t0.O15,0)) AS 'O' + ,SUM(ISNULL(t0.O2,0)) AS '_ְн' + ,SUM(ISNULL(t0.O3,0)) AS '_ɷ֧' + ,SUM(ISNULL(t0.O4,0)) AS '_Ͷ' + ,SUM(ISNULL(t0.O5,0)) AS '_÷' + ,SUM(ISNULL(t0.O6,0)) AS '_ҵд' + ,SUM(ISNULL(t0.O7,0)) AS '_칫' + ,SUM(ISNULL(t0.O8,0)) AS '_۾̯' + ,SUM(ISNULL(t0.O9,0)) AS '_޷' + ,SUM(ISNULL(t0.O10,0)) AS '_ˮ' + ,SUM(ISNULL(t0.O11,0)) AS '_' + ,SUM(ISNULL(t0.O12,0)) AS '_ӹ__' + ,SUM(ISNULL(t0.O13,0)) AS '_ʹ÷' + ,SUM(ISNULL(t0.O14,0)) AS '_' + ,SUM(ISNULL(t0.O15,0)) AS '_ίӹ' + FROM #ɱת t0 + GROUP BY t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FMATERIALID,t0.FEXPTYPE,t0.FBILLID,t0.FBILLENTRYID + ) t0 + LEFT JOIN T_BD_MATERIAL t2 on t0.FMATERIALID = t2.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FMATERIALID AND t2_l.FLOCALEID = 2052 + LEFT JOIN T_BD_MATERIALBASE t2b on t2b.FMATERIALID = t0.FMATERIALID + LEFT JOIN # t2w on t2w.FVALUE = t2b.FERPCLSID + INNER JOIN T_BD_MATERIAL t3 on t0.FPRODUCTID = t3.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t3_l on t3_l.FMATERIALID = t0.FPRODUCTID AND t3_l.FLOCALEID = 2052 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',SUM(t6.FQTY) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_20240810.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_20240810.sql new file mode 100644 index 0000000..7c2ccb7 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_20240810.sql @@ -0,0 +1,289 @@ +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) +BEGIN + DROP TABLE [dbo].[#ѯ] +END + + +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) + + +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202407 + --SET @period = 202308 + SET @ACCTGORGID = 1 + + --SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + --SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' + SET @billNo = 'WO2311020005' + --SET @billNo = 'WO2312050303' + + --SET @billNo = 'WO2403270354' + --SET @billNo = 'WO2406050001' + --SET @billNo = 'WO2404170154' +END + +CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + --[FFORMID] varchar(36) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + [] decimal(23,10) NULL, + [ʹñ] decimal(23,10) NOT NULL, + [] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [FAMOUNT] decimal(38,10) NULL, + [FQTY] decimal(38,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + MPATH nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + FLEVEL int not null +) + + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 +) +INSERT INTO #ѯ +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤 / t0.Ʒ깤 ELSE 1 END '' + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END 'ʹñ' + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤ɱ / t0.깤 ELSE t0.깤ɱ / t0.Ʒ깤 END AS '' + ,t0.[Ͷ] + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.[ƷͶ] + ,t0.[ƷͶɱ] + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID + ,t6.FBILLENTRYID + ,t6.FPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 ELSE 1 END 'FGOON' + ,0 + --,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӷ' WHEN 1 THEN 'ӷ' WHEN 2 THEN '' ELSE '' END '' +FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',SUM(t6.FQTY) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID +WHERE t0.RN = 1 +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE(@num!=0 AND @LoopCount < 30) +BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + --,(tt.깤 / tt.Ͷ) * (tt.FQTY / tt.Ͷ) 'ʹñ' + ,tt.ʹñ + ,tt. + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillId = t0.FBILLID AND tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + --AND tt.FLEVEL < 2 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤 / t0.Ʒ깤 * t0. ELSE t0. END * CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END * t0.ʹñ '' + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END * t0.ʹñ 'ʹñ' + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤ɱ / t0.깤 ELSE t0.깤ɱ / t0.Ʒ깤 END '' + ,t0.[Ͷ] + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.[ƷͶ] + ,t0.[ƷͶɱ] + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID + ,t6.FBILLENTRYID + ,t6.FPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 ELSE 1 END 'FGOON' + ,@level + --,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӷ' WHEN 1 THEN 'ӷ' WHEN 2 THEN '' ELSE '' END '' + FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',SUM(t6.FQTY) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 +END + +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,t1.FNUMBER + ,t1_l.FNAME + ,t0. + ,t0.ʹñ + ,t0. + ,t0. * t0. AS 'Ϲ' + ,t0.ʹñ * t0.깤ɱ AS 'Ϲ2' + ,t0.깤 * t0.ʹñ AS 'ܹʱ' + ,t0.Ͷ + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.ƷͶ + ,t0.ƷͶɱ + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,t0.FAMOUNT + ,t0.FQTY + ,t0.FLOT + ,t0.FPERIOD + ,t0.FNUMBER + ,t0.SubBillId + ,t0.SubBillEntryId + ,t0.SubPRODUCTDIMEID + ,t0.MPATH,t0.FGOON,t0.FLEVEL +FROM #ѯ t0 + LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 + --LEFT JOIN T_PRD_MORPTENTRY t2e on t2e.FMOID = t0.FBILLID AND t2e.FMOENTRYID = t0.FBILLENTRYID AND t0.FEXPTYPE = 9 +WHERE 1=1 + --AND t0.FGOON = 0 + --AND t0.FPRODUCTNO = 'RO2308220002' + --AND t0.FEXPTYPE = 9 +ORDER BY t0.FLEVEL + ,t0.FMATERIALID \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_存储过程_20240810.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_存储过程_20240810.sql new file mode 100644 index 0000000..803c326 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.1_存储过程_20240810.sql @@ -0,0 +1,296 @@ +ALTER PROC TEST_CB_CPCBHYFXIBB + @billNo varchar(100) +AS +BEGIN + +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) +BEGIN + DROP TABLE [dbo].[#ѯ] +END + + +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +--DECLARE @billNo varchar(100) + + +SET @ACCTGORGID = 100039 +SET @period = 201801 +--SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202407 + --SET @period = 202308 + SET @ACCTGORGID = 1 + + --SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + --SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' + --SET @billNo = 'WO2311020005' + --SET @billNo = 'WO2312050303' + + --SET @billNo = 'WO2403270354' + --SET @billNo = 'WO2406050001' + --SET @billNo = 'WO2404170154' +END + +CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + --[FFORMID] varchar(36) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + [] decimal(23,10) NULL, + [ʹñ] decimal(23,10) NOT NULL, + [] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [FAMOUNT] decimal(38,10) NULL, + [FQTY] decimal(38,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + MPATH nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + FLEVEL int not null +) + + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 +) +INSERT INTO #ѯ +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤 / t0.Ʒ깤 ELSE 1 END '' + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END 'ʹñ' + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤ɱ / t0.깤 ELSE t0.깤ɱ / t0.Ʒ깤 END AS '' + ,t0.[Ͷ] + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.[ƷͶ] + ,t0.[ƷͶɱ] + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID + ,t6.FBILLENTRYID + ,t6.FPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 ELSE 1 END 'FGOON' + ,0 + --,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӷ' WHEN 1 THEN 'ӷ' WHEN 2 THEN '' ELSE '' END '' +FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',SUM(t6.FQTY) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID +WHERE t0.RN = 1 +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE(@num!=0 AND @LoopCount < 30) +BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + --,(tt.깤 / tt.Ͷ) * (tt.FQTY / tt.Ͷ) 'ʹñ' + ,tt.ʹñ + ,tt. + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillId = t0.FBILLID AND tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + --AND tt.FLEVEL < 2 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤 / t0.Ʒ깤 * t0. ELSE t0. END * CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END * t0.ʹñ '' + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) THEN (ISNULL(t4.FQTY, 0) / t0.Ͷ) ELSE 1 END * t0.ʹñ 'ʹñ' + ,CASE WHEN t0.FEXPTYPE = 0 THEN t0.깤ɱ / t0.깤 ELSE t0.깤ɱ / t0.Ʒ깤 END '' + ,t0.[Ͷ] + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.[ƷͶ] + ,t0.[ƷͶɱ] + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID + ,t6.FBILLENTRYID + ,t6.FPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 ELSE 1 END 'FGOON' + ,@level + --,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӷ' WHEN 1 THEN 'ӷ' WHEN 2 THEN '' ELSE '' END '' + FROM #ʼ t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',SUM(t6.FQTY) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 +END + +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,t1.FNUMBER + ,t1_l.FNAME + ,t0. + ,t0.ʹñ + ,t0. + ,t0. * t0. AS 'Ϲ' + ,t0.ʹñ * t0.깤ɱ AS 'Ϲ2' + ,t0.깤 * t0.ʹñ AS 'ܹʱ' + ,t0.Ͷ + ,t0.Ͷɱ + ,t0.깤 + ,t0.깤ɱ + ,t0.ƷͶ + ,t0.ƷͶɱ + ,t0.Ʒ깤 + ,t0.Ʒ깤ɱ + ,t0.FAMOUNT + ,t0.FQTY + ,t0.FLOT + ,t0.FPERIOD + ,t0.FNUMBER + ,t0.SubBillId + ,t0.SubBillEntryId + ,t0.SubPRODUCTDIMEID + ,t0.MPATH,t0.FGOON,t0.FLEVEL +FROM #ѯ t0 + LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 + --LEFT JOIN T_PRD_MORPTENTRY t2e on t2e.FMOID = t0.FBILLID AND t2e.FMOENTRYID = t0.FBILLENTRYID AND t0.FEXPTYPE = 9 +WHERE 1=1 + --AND t0.FGOON = 0 + --AND t0.FPRODUCTNO = 'RO2308220002' + --AND t0.FEXPTYPE = 9 +ORDER BY t0.FLEVEL + ,t0.FMATERIALID + +END \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.2_20240819.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.2_20240819.sql new file mode 100644 index 0000000..371e3dd --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原报表V9.2_20240819.sql @@ -0,0 +1,366 @@ +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#ѯ') IS NOT NULL) +BEGIN + DROP TABLE [dbo].[#ѯ] +END + +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) + + +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202407 + --SET @period = 202308 + SET @ACCTGORGID = 1 + + --SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' + --SET @billNo = 'WO2311020005' + --SET @billNo = 'WO2312050303' + + --SET @billNo = 'WO2403270354' + --SET @billNo = 'WO2406050001' + --SET @billNo = 'WO2404170154' +END + + +CREATE TABLE #ѯ( + [FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FBILLID] int NOT NULL, + [FBILLENTRYID] int NOT NULL, + [FPRODUCTID] int NOT NULL, + [FPRODUCTDIMEID] int NOT NULL, + [FMATERIALID] int NOT NULL, + [FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL, + [ʹñ] decimal(23,10) NOT NULL, + [ֱ˹S] decimal(23,10) NOT NULL, + --[˹S2] decimal(23,10) NOT NULL, + [ϳɱQ] decimal(23,10) NOT NULL, + --[ӲQ2] decimal(23,10) NOT NULL, + [_ְн] decimal(23,10) NOT NULL, + [_ɷ֧] decimal(23,10) NOT NULL, + [_Ͷ] decimal(23,10) NOT NULL, + [_÷] decimal(23,10) NOT NULL, + [_ҵд] decimal(23,10) NOT NULL, + [_칫] decimal(23,10) NOT NULL, + [_۾̯] decimal(23,10) NOT NULL, + [_޷] decimal(23,10) NOT NULL, + [_ˮ] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ӹ__] decimal(23,10) NOT NULL, + [_ʹ÷] decimal(23,10) NOT NULL, + [_] decimal(23,10) NOT NULL, + [_ίӹ] decimal(23,10) NOT NULL, + [Ͷɱ] decimal(23,10) NOT NULL, + [깤ɱ] decimal(23,10) NOT NULL, + [ƷͶɱ] decimal(23,10) NOT NULL, + [Ʒ깤ɱ] decimal(23,10) NOT NULL, + [Ͷ] decimal(23,10) NOT NULL, + [깤] decimal(23,10) NOT NULL, + [ƷͶ] decimal(23,10) NOT NULL, + [Ʒ깤] decimal(23,10) NOT NULL, + [FAMOUNT] decimal(23,10) NULL, + [FQTY] decimal(23,10) NULL, + [FLOT] int NULL, + [FPERIOD] int NULL, + [FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL, + [SubBillId] int NULL, + [SubBillEntryId] int NULL, + [SubPRODUCTDIMEID] int NULL, + [MPATH] nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL, + [FGOON] int NOT NULL, + [FLEVEL] int not null +) + +CREATE INDEX idx_ѯ_fuhesuoyin ON #ѯ([SubBillEntryId]); + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,CAST(t3.FSUMQUALIFIEDINQTY AS decimal(23,10)) '깤' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,t3d.FQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period + AND t1.FENDINITKEY = 1 + AND t4.FSUMQUALIFIEDINQTY != 0 +) +, #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 +) +INSERT INTO #ѯ +SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END 'ʹñ' + --,CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O1,0) ELSE 0 END AS 'ԭ' + --,CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O1,0) ELSE 0 END 'Ӳ' + --,CASE WHEN t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2 THEN ISNULL(t0.O0,0) ELSE 0 END 'ֱ˹' + --,CASE WHEN NOT (t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2) THEN ISNULL(t0.O0,0) ELSE 0 END AS '˹' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,0 +FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID +WHERE t0.RN = 1 +ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE(@num!=0 AND @LoopCount < 30) +BEGIN + ;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t3.FMATERIALID + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FSUMCURRINPUTQTY 'Ͷ' + ,t3.FSUMCURRINPUTAMOUNT 'Ͷɱ' + ,t3.FSUMQUALIFIEDINQTY '깤' + ,t3.FSUMQUALIFIEDINAMOUNT '깤ɱ' + ,t4.FSUMCURRINPUTQTY 'ƷͶ' + ,t4.FSUMCURRINPUTAMOUNT 'ƷͶɱ' + ,t4.FSUMQUALIFIEDINQTY 'Ʒ깤' + ,t4.FSUMQUALIFIEDINAMOUNT 'Ʒ깤ɱ' + ,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + ,RANK() OVER (PARTITION BY t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,tt.ʹñ + ,tt.깤ɱ AS 'ϼ깤ɱ' + ,CAST(CASE WHEN t4.FSUMQUALIFIEDINAMOUNT = 0 THEN 1 ELSE tt.깤ɱ / t4.FSUMQUALIFIEDINAMOUNT END AS decimal(23,10)) AS '깤ռ' + ,t3d.FQUALIFIEDINAMOUNT AS '깤' + ,t5.fieldName + FROM #ѯ tt + INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillId = t0.FBILLID AND tt.SubBillEntryId = t0.FBILLENTRYID + AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t5 on t3d.FEXPENSESITEMID = t5.FEXPID + WHERE 1 = 1 + AND tt.FGOON = 1 + AND tt.FLEVEL = @level - 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD + AND t1.FENDINITKEY = 1 + --AND t4.FSUMQUALIFIEDINQTY != 0 + --AND tt.FLEVEL < 2 + ) + , #ɱת AS ( + SELECT * + FROM #ʼ t0 + PIVOT ( + SUM(t0.깤) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) t1 + ) + INSERT INTO #ѯ + SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FMATERIALID + ,t0.FEXPTYPE + ,CAST(CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0.Ͷɱ != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.Ͷɱ) ELSE 1 END AS decimal(23,10)) * CAST(t0.ʹñ * t0.깤ռ AS decimal(23,10)) 'ʹñ' + --,CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O1,0) ELSE 0 END AS 'ԭ' + --,CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O1,0) ELSE 0 END 'Ӳ' + --,CASE WHEN t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2 THEN ISNULL(t0.O0,0) ELSE 0 END 'ֱ˹' + --,CASE WHEN NOT (t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2) THEN ISNULL(t0.O0,0) ELSE 0 END AS '˹' + ,ISNULL(t0.O0,0),ISNULL(t0.O1,0),ISNULL(t0.O2,0),ISNULL(t0.O3,0),ISNULL(t0.O4,0),ISNULL(t0.O5,0),ISNULL(t0.O6,0) + ,ISNULL(t0.O7,0),ISNULL(t0.O8,0),ISNULL(t0.O9,0),ISNULL(t0.O10,0),ISNULL(t0.O11,0),ISNULL(t0.O12,0) + ,ISNULL(t0.O13,0),ISNULL(t0.O14,0),ISNULL(t0.O15,0) + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.[ƷͶɱ] + ,t0.Ʒ깤ɱ + ,t0.[Ͷ] + ,t0.깤 + ,t0.[ƷͶ] + ,t0.Ʒ깤 + ,ISNULL(t4.FAMOUNT, 0) 'ϳɱ' + ,ISNULL(t4.FQTY,0) AS '' + ,ISNULL(t4.FLOT,0) AS 'FLOT' + ,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD' + ,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT' + ,t6.FBILLID SUBFBILLID + ,t6.FBILLENTRYID SUBFBILLENTRYID + ,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID + ,t0.MPATH AS 'MPATH' + ,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0 + WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0 + WHEN t0.깤 = 0 THEN 0 + ELSE 1 END 'FGOON' + ,@level AS 'Flevel' + FROM #ɱת t0 + OUTER APPLY ( + SELECT t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD' + ,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY' + FROM V_CB_COSTALLORESULTSEND t4 + INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0 + INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID + WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID + AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD + GROUP BY t5.FLOT + ,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) + ) t4 + LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT + LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID + WHERE t0.RN = 1 + ORDER BY t0.FPRODUCTDIMEID + ,t0.FEXPTYPE DESC + ,t0.FMATERIALID ASC + ,t4.FLOT ASC + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 +END + +SELECT t0.FPRODUCTNO AS '' + ,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FMATERIALID + ,t1.FNUMBER AS 'ϱ' + ,t1_l.FNAME AS '' + ,CASE t0.FEXPTYPE WHEN 0 THEN 'ֱӲ' WHEN 1 THEN 'Ӳ' WHEN 2 THEN 'ӹ' WHEN 9 THEN 'ʱ' ELSE '' END AS '' + --,t0.ʹñ + ,CASE t0.FEXPTYPE WHEN 9 THEN t0.깤 ELSE 0 END * t0.ʹñ AS 'ܹʱ' + --,ROUND(t0.ʹñ * t0.깤ɱ,2) AS 'Ϲ' + --,t0.ʹñ * t0.ϳɱQ AS 'ԭQ1' + --,t0.ʹñ * t0.ӲQ2 AS 'ӲQ2' + --,t0.ʹñ * t0.ֱ˹S AS 'ֱ˹S' + --,t0.ʹñ * t0.˹S2 AS '˹S2' + ,ROUND(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,2) AS 'ԭ' + ,ROUND(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.ϳɱQ,0) ELSE 0 END * t0.ʹñ,2) 'Ӳ' + ,ROUND(CASE WHEN t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2 THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,2) 'ֱ˹' + ,ROUND(CASE WHEN NOT (t0.FEXPTYPE = 0 OR t0.FEXPTYPE = 2) THEN ISNULL(t0.ֱ˹S,0) ELSE 0 END * t0.ʹñ,2) AS '˹' + ,ROUND(t0.ʹñ * t0._ְн ,2) AS '_ְн' + ,ROUND(t0.ʹñ * t0._ɷ֧ ,2) AS '_ɷ֧' + ,ROUND(t0.ʹñ * t0._Ͷ ,2) AS '_Ͷ' + ,ROUND(t0.ʹñ * t0._÷ ,2) AS '_÷' + ,ROUND(t0.ʹñ * t0._ҵд ,2) AS '_ҵд' + ,ROUND(t0.ʹñ * t0._칫 ,2) AS '_칫' + ,ROUND(t0.ʹñ * t0._۾̯ ,2) AS '_۾̯' + ,ROUND(t0.ʹñ * t0._޷ ,2) AS '_޷' + ,ROUND(t0.ʹñ * t0._ˮ ,2) AS '_ˮ' + ,ROUND(t0.ʹñ * t0._ ,2) AS '_' + ,ROUND(t0.ʹñ * t0._ӹ__ ,2) AS '_ӹ__' + ,ROUND(t0.ʹñ * t0._ʹ÷ ,2) AS '_ʹ÷' + ,ROUND(t0.ʹñ * t0._ ,2) AS '_' + ,ROUND(t0.ʹñ * t0._ίӹ ,2) AS '_ίӹ' + ,t0.Ͷɱ + ,t0.깤ɱ + ,t0.ƷͶɱ + ,t0.Ʒ깤ɱ + ,t0.FNUMBER AS '' + ,t0.FPERIOD AS '' + ,t0.FGOON AS 'ִзֽ' + ,t0.FLEVEL AS '㼶' + ,t0.MPATH AS 'ֽ·' + ,t0.Ͷ + ,t0.깤 + ,t0.ƷͶ + ,t0.Ʒ깤 + ,t0.FAMOUNT AS 'ϳɱ' + ,t0.FQTY AS '' + ,t0.FLOT + ,t0.SubBillId + ,t0.SubBillEntryId + ,t0.SubPRODUCTDIMEID +FROM #ѯ t0 + LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID + LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 + LEFT JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t0.FPRODUCTID + LEFT JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 +WHERE 1=1 +ORDER BY t0.FLEVEL + ,t0.FPRODUCTID DESC + ,t0.FEXPTYPE + ,t0.FMATERIALID \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/产品成本还原汇总表(不分解)V1.0_20240802.sql b/07.珠海英搏尔/Enpower.Python/产品成本还原汇总表(不分解)V1.0_20240802.sql new file mode 100644 index 0000000..5e2e427 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/产品成本还原汇总表(不分解)V1.0_20240802.sql @@ -0,0 +1,144 @@ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 1 + +;WITH #б AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FQUALIFIEDINQTY AS '깤' + ,t3.FCURRINPUTQTY AS 'Ͷ' + ,t3.FSUMCURRINPUTQTY AS 'ۼͶ' + ,t3.FSUMQUALIFIEDINQTY AS 'ۼ깤' + ,RANK() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN' + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + --{1} + AND t2.FYEAR = 2023 + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' + --{0} +) + +,#ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t0.깤 + ,t0.Ͷ + ,t1.FPRODUCTDIMEID + ,t3.FEXPTYPE + ,t3.FCURRINPUTQTY + ,t3.FQUALIFIEDINQTY + ,t3d.FCURRINPUTAMOUNT + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3d.FQUALIFIEDINAMOUNT + FROM #б t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD + LEFT JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + LEFT JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t0.RN = 1 + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + AND t0.FFORMID = 'PRD_MO' +) +, #ɱת AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID--,t1.FMATERIALID + ,t1.FEXPTYPE + ,t1.FCURRINPUTAMOUNT,t1.깤,t1.Ͷ,t1.FQUALIFIEDINQTY + ,t1.O0,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t0.FCURRINPUTAMOUNT,t0.FEXPTYPE + ,t0.FQUALIFIEDINQTY + ,t0.깤,t0.Ͷ + ,t1.fieldName + FROM #ʼ t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE_V2 t1 on t0.FEXPENSESITEMID = t1.FEXPID + ) t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15) + ) AS t1 +) +, # AS ( + SELECT t0e.FENUMID,t0e.FSEQ,t0e.FVALUE,t0e_l.FCAPTION + FROM T_META_FORMENUMITEM t0e + INNER JOIN T_META_FORMENUMITEM_L t0e_l on t0e.FENUMID = t0e_l.FENUMID AND t0e_l.FLOCALEID = 2052 + WHERE 1 = 1 + AND t0e.FID = 'ac14913e-bd72-416d-a50b-2c7432bbff63' +) +SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,ROW_NUMBER() OVER (ORDER BY t0.FPRODUCTNO) FRN + ,t0.FBILLID,t0.FBILLENTRYID + ,t3_l.FNAME,t3.FNUMBER + ,t1.Ͷ + ,t1.깤 + ,t1.ۼͶ + ,t1.ۼ깤 + ,t0.ۼͶɱ + ,t0.ܹʱ + ,t0.ϳɱQ + t0.O + t0.ֱ˹S AS 'ϹR' + ,t0.ԭQ1 + ,t0.ֱ˹S AS 'ֱ˹S' + ,t0.ֱ˹S1 + ,t0.˹S2 + ,t0.O + t0.ӲQ2 AS 'O' + ,t0.ӲQ2 + ,t0._ְн,t0._ɷ֧,t0._Ͷ,t0._÷,t0._ҵд,t0._칫,t0._۾̯,t0._޷,t0._ˮ,t0._,t0._ӹ__,t0._ʹ÷ + ,t0._ AS '_' + ,t0._ίӹ +FROM ( SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + --,AVG(t0.깤) AS '깤' + --,AVG(t0.Ͷ) AS 'Ͷ' + ,SUM(CASE t0.FEXPTYPE WHEN 9 THEN ISNULL(t0.FQUALIFIEDINQTY,0) ELSE 0 END) AS 'ܹʱ' + ,SUM(ISNULL(t0.FCURRINPUTAMOUNT,0)) AS 'ۼͶɱ' + ,SUM(ISNULL(t0.O0,0)) AS 'ֱ˹S' + ,SUM(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O0,0) ELSE 0 END) AS 'ֱ˹S1' + ,SUM(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O0,0) ELSE 0 END) AS '˹S2' + ,SUM(ISNULL(t0.O1,0)) AS 'ϳɱQ' + ,SUM(CASE t0.FEXPTYPE WHEN 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS 'ԭQ1' + ,SUM(CASE WHEN t0.FEXPTYPE != 0 THEN ISNULL(t0.O1,0) ELSE 0 END) AS 'ӲQ2' + ,SUM(ISNULL(t0.O2,0) + ISNULL(t0.O3,0)+ISNULL(t0.O4,0)+ISNULL(t0.O5,0)+ISNULL(t0.O6,0)+ISNULL(t0.O7,0)+ISNULL(t0.O8,0)+ISNULL(t0.O9,0)+ISNULL(t0.O10,0)+ISNULL(t0.O11,0)+ISNULL(t0.O12,0)+ISNULL(t0.O13,0)+ISNULL(t0.O14,0)+ISNULL(t0.O15,0)) AS 'O' + ,SUM(ISNULL(t0.O2,0)) AS '_ְн' + ,SUM(ISNULL(t0.O3,0)) AS '_ɷ֧' + ,SUM(ISNULL(t0.O4,0)) AS '_Ͷ' + ,SUM(ISNULL(t0.O5,0)) AS '_÷' + ,SUM(ISNULL(t0.O6,0)) AS '_ҵд' + ,SUM(ISNULL(t0.O7,0)) AS '_칫' + ,SUM(ISNULL(t0.O8,0)) AS '_۾̯' + ,SUM(ISNULL(t0.O9,0)) AS '_޷' + ,SUM(ISNULL(t0.O10,0)) AS '_ˮ' + ,SUM(ISNULL(t0.O11,0)) AS '_' + ,SUM(ISNULL(t0.O12,0)) AS '_ӹ__' + ,SUM(ISNULL(t0.O13,0)) AS '_ʹ÷' + ,SUM(ISNULL(t0.O14,0)) AS '_' + ,SUM(ISNULL(t0.O15,0)) AS '_ίӹ' + FROM #ɱת t0 + GROUP BY t0.FPRODUCTNO,t0.FPRODUCTID + ,t0.FPRODUCTDIMEID + ,t0.FBILLID,t0.FBILLENTRYID + ) t0 + INNER JOIN #б t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t1.RN = 1 + INNER JOIN T_BD_MATERIAL t3 on t0.FPRODUCTID = t3.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t3_l on t3_l.FMATERIALID = t0.FPRODUCTID AND t3_l.FLOCALEID = 2052 diff --git a/07.珠海英搏尔/Enpower.Python/批量查询.sql b/07.珠海英搏尔/Enpower.Python/批量查询.sql new file mode 100644 index 0000000..3316f69 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/批量查询.sql @@ -0,0 +1,141 @@ +DECLARE @period int +declare @dbName varchar(100) + + +SET @period = 201801 +select @dbName = DB_NAME() +if @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202406 +END + +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#') IS NOT NULL) +BEGIN + DROP TABLE # +END + +IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#') IS NOT NULL) +BEGIN + DROP TABLE # +END + +CREATE TABLE # ( + MOBILLNO NVARCHAR(255) NOT NULL + ,PMOBILLNO NVARCHAR(255) NOT NULL + ,ֱӲ DECIMAL(23,10) NOT NULL + ,FPRODUCTDIMEID INT NOT NULL + ,ALEVEL INT NOT NULL + ,PLEVEL INT NOT NULL + ,BILLID INT NOT NULL + ,BILLENTRYID INT NOT NULL + ,FPRODUCTID INT NOT NULL + ,FMATERIALID INT NOT NULL + ,LOT_TEXT VARCHAR(255) NULL + ,FPERIOD INT NOT NULL + ,APATH VARCHAR(1000) NULL + ,PPATH VARCHAR(1000) NULL + ,MPATH VARCHAR(8000) NULL +) + +INSERT INTO # +SELECT t0.FBILLNO + ,'' + ,0 + ,t1.FPRODUCTDIMEID + ,1 + ,0 + ,t1.FBILLID + ,t1.FBILLENTRYID + ,t1.FPRODUCTID + ,t0e.FMATERIALID + ,t0.FBILLNO + ,t5.FPERIOD + ,CONVERT(varchar(1000),ROW_NUMBER() OVER (ORDER BY t0e.FID,t0e.FENTRYID,t0e.FMATERIALID)) AS 'aPATH' + ,CONVERT(varchar(1000),'0') AS 'PPATH' + ,CONVERT(VARCHAR(8000),'') AS 'MPath' +FROM T_PRD_MO t0 + INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID + INNER jOIN T_CB_PROORDERDIME t1 on t1.FBILLID = t0e.FID AND t1.FBILLENTRYID = t0e.FENTRYID + INNER JOIN V_CB_PROORDERINFO t2 on t2.FPRODUCTDIMEID = t1.FPRODUCTDIMEID + CROSS APPLY( + SELECT TOP 1 1 AS 'val',t5.FYEAR *100 + t5.FPERIOD AS 'FPERIOD' + FROM V_HS_OUTACCTG t5 + WHERE t5.FID = t2.FACCTGID + AND t5.FYEAR *100 + t5.FPERIOD <= @period + ORDER BY t5.FYEAR *100 + t5.FPERIOD DESC + ) t5 +WHERE 1 = 1 + --AND t0.FBILLNO = 'WO2403210039' + AND t1.FFORMID = 'PRD_MO' + --AND (CONVERT(INT,CONVERT(varchar(6),t0.FDATE,112))) = @period + +DECLARE @num INT,@level int,@LoopCount int +SET @num = 1 +SET @level =1 +SET @LoopCount = 0; +WHILE (@num <> 0 AND @LoopCount < 30) +BEGIN + ;WITH #ѯ AS ( + SELECT t0.FPRODUCTNO + ,t0.FPRODUCTID + ,t0.FBILLID + ,t0.FBILLENTRYID + ,SUM(t1.FAMOUNT) AS 'ϳɱ' + ,SUM(t1.FQTY) AS '' + ,t2.FMATERIALID + ,ISNULL(t4.FNUMBER,'') 'FLOT_TEXT' + ,SUM(t1m.FQUALIFIEDINAMOUNT) '깤' + ,SUM(t1m.FQUALIFIEDINQTY) '깤' + ,t5.FPERIOD + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t0e on t0e.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_CB_COSTALLORESULTSEND t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID + INNER JOIN V_CB_COSTMATTERIAL t1m on t1m.FID = t0e.FID + INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t2.FENTRYID = t1.FDIMEENTRYID AND t1m.FMATERIALID = t2.FMATERIALID + INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID + LEFT JOIN T_BD_LOTMASTER t4 on t4.FLOTID = t2.FLOT + CROSS APPLY( + SELECT TOP 1 1 AS 'val',(t5.FYEAR * 100 + t5.FPERIOD) AS 'FPERIOD' + FROM V_HS_OUTACCTG t5 + WHERE t5.FID = t0e.FACCTGID + AND t5.FYEAR *100 + t5.FPERIOD <= 202407 + ORDER BY t5.FYEAR *100 + t5.FPERIOD DESC + ) t5 + WHERE t0.FPRODUCTNO IN ( + SELECT DISTINCT tt.LOT_TEXT FROM # tt + WHERE 1=1 + AND tt.ALEVEL = @level + AND tt.LOT_TEXT != '') + GROUP BY t0.FPRODUCTNO + ,t0.FPRODUCTID + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t2.FMATERIALID + ,t4.FNUMBER + ,t5.FPERIOD + ) + INSERT INTO # + SELECT t0.FPRODUCTNO + ,t1.MOBILLNO + ,CONVERT(decimal(23,10),t0.깤) + ,t1.FPRODUCTDIMEID + ,@level + ,@level - 1 + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FMATERIALID + ,t0.FLOT_TEXT + ,t0.FPERIOD + ,CONVERT(varchar(1000),CONCAT(t1.APATH,'.',ROW_NUMBER() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY t0.FMATERIALID))) AS 'aPATH' + ,t1.APATH + ,CONVERT(varchar(8000),CONCAT(t1.MPath,ISNULL(t1.MoBillNo,''),'>')) + FROM #ѯ t0 + INNER JOIN # t1 on t0.FPRODUCTNO = t1.LOT_TEXT AND t1.LOT_TEXT != '' + + SET @num = @@ROWCOUNT + SET @level += 1 + SET @LoopCount += 1 +END + +SELECT * FROM # \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/批量还原产品成本_V1.0.sql b/07.珠海英搏尔/Enpower.Python/批量还原产品成本_V1.0.sql new file mode 100644 index 0000000..629dda0 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/批量还原产品成本_V1.0.sql @@ -0,0 +1,106 @@ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int + +SET @ACCTGORGID = 100039 +SET @period = 201801 +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202406 + SET @ACCTGORGID = 1 +END + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FPRODUCTID + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FFORMID + ,t0.FPRODUCTDIMEID + ,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t2.FID = t1.FACCTGID + WHERE 1=1 + AND (t2.FYEAR * 100 + t2.FPERIOD) = @period + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t0.FFORMID = 'PRD_MO' + AND t1.FENDINITKEY = 1 --ĩʶ +) +, #ɱ AS ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t1.FCOSTITEMID + ,(CASE WHEN t1.FEXPENSESITEMID = 4655037 AND t1.FCOSTITEMID = 20523 THEN 4655093 ELSE t1.FEXPENSESITEMID END) AS 'FEXPENSESITEMID' + ,t1.FEXPTYPE + ,t1.FQUALIFIEDINAMOUNT + ,t1.FCURRINPUTAMOUNT + FROM #ʼ t0 + CROSS APPLY ( + SELECT t1.FID + ,t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ,SUM(t3d.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINAMOUNT' + ,SUM(t3d.FCURRINPUTAMOUNT) 'FCURRINPUTAMOUNT' + FROM V_CB_PROORDERINFO t1 + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + AND (t2.FYEAR * 100 + t2.FPERIOD) <= t0.FPERIOD + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + INNER JOIN V_CB_COSTMATTERIALDETAIL t3d on t3d.FENTRYID = t3.FENTRYID + WHERE 1 = 1 + AND t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + AND t1.FENDINITKEY = 1 + GROUP BY t1.FPRODUCTDIMEID + ,t3d.FCOSTITEMID + ,t3d.FEXPENSESITEMID + ,t3.FEXPTYPE + ) t1 +) +, #ɱת AS ( + SELECT t1.FPRODUCTNO,t1.FPRODUCTID,t1.FPRODUCTDIMEID,t1.FBILLID,t1.FBILLENTRYID + ,t1.O1,t1.O2,t1.O3,t1.O4,t1.O5,t1.O6,t1.O7,t1.O8,t1.O9,t1.O10,t1.O11,t1.O12,t1.O13,t1.O14,t1.O15,t1.O16 + FROM ( + SELECT t0.FPRODUCTNO,t0.FPRODUCTID,t0.FPRODUCTDIMEID,t0.FBILLID,t0.FBILLENTRYID + ,t0.FQUALIFIEDINAMOUNT,t1.fieldName + FROM #ɱ t0 + LEFT JOIN V_BD_COST_RESTORE_EXPENSE t1 on t0.FEXPENSESITEMID = t1.FEXPID + WHERE NOT (t0.FCOSTITEMID = 20522 AND t0.FEXPENSESITEMID = 20045) + )t0 + PIVOT + ( + SUM(t0.FQUALIFIEDINAMOUNT) FOR + t0.fieldName IN (O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15,O16) + ) AS t1 +) +SELECT t0.* + ,ISNULL(t1.O1,0) AS 'O1' + ,ISNULL(t1.O2,0) AS 'O2' + ,ISNULL(t1.O3,0) AS 'O3' + ,ISNULL(t1.O4,0) AS 'O4' + ,ISNULL(t1.O5,0) AS 'O5' + ,ISNULL(t1.O6,0) AS 'O6' + ,ISNULL(t1.O7,0) AS 'O7' + ,ISNULL(t1.O8,0) AS 'O8' + ,ISNULL(t1.O9,0) AS 'O9' + ,ISNULL(t1.O10,0) AS 'O10' + ,ISNULL(t1.O11,0) AS 'O11' + ,ISNULL(t1.O12,0) AS 'O12' + ,ISNULL(t1.O13,0) AS 'O13' + ,ISNULL(t1.O14,0) AS 'O14' + ,ISNULL(t1.O15,0) AS 'O15' + ,ISNULL(t1.O16,0) AS 'O16' + ,ISNULL(t1.O2,0) + ISNULL(t1.O3,0) + ISNULL(t1.O4,0) + ISNULL(t1.O5,0) + ISNULL(t1.O6,0) + ISNULL(t1.O7,0) + ISNULL(t1.O8,0) + ISNULL(t1.O9,0) + ISNULL(t1.O10,0) + ISNULL(t1.O11,0) + ISNULL(t1.O12,0) + ISNULL(t1.O13,0) + ISNULL(t1.O14,0) + ISNULL(t1.O15,0) + ISNULL(t1.O16,0) AS 'O' + ,ISNULL(t1.O1,0) + ISNULL(t1.O2,0) + ISNULL(t1.O3,0) + ISNULL(t1.O4,0) + ISNULL(t1.O5,0) + ISNULL(t1.O6,0) + ISNULL(t1.O7,0) + ISNULL(t1.O8,0) + ISNULL(t1.O9,0) + ISNULL(t1.O10,0) + ISNULL(t1.O11,0) + ISNULL(t1.O12,0) + ISNULL(t1.O13,0) + ISNULL(t1.O14,0) + ISNULL(t1.O15,0) + ISNULL(t1.O16,0) AS 'R' + ,0 P + ,t2.FNUMBER + ,t2_l.FNAME + ,t2_l.FDESCRIPTION +FROM #ʼ t0 + LEFT JOIN #ɱת t1 on t0.FBILLID = t1.FBILLID + AND t0.FBILLENTRYID = t1.FBILLENTRYID + INNER JOIN T_BD_MATERIAL t2 on t0.FPRODUCTID = t2.FMATERIALID + INNER JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052 \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/费用类目视图_V2.sql b/07.珠海英搏尔/Enpower.Python/费用类目视图_V2.sql new file mode 100644 index 0000000..eee64e7 --- /dev/null +++ b/07.珠海英搏尔/Enpower.Python/费用类目视图_V2.sql @@ -0,0 +1,18 @@ +CREATE VIEW V_BD_COST_RESTORE_EXPENSE_V2 AS +SELECT 'ֱ˹' AS 'FNAME',4655037 AS 'FEXPID','O0' AS 'fieldName' +UNION ALL SELECT 'ϳɱ',20045,'O1' +UNION ALL SELECT 'ְн',4655057,'O2' +UNION ALL SELECT 'ɷ֧',0,'O3' +UNION ALL SELECT 'Ͷ',0,'O4' +UNION ALL SELECT '÷',20138,'O5' +UNION ALL SELECT '÷',4655087,'O5' +UNION ALL SELECT 'ҵд',20137,'O6' +UNION ALL SELECT '칫',20142,'O7' +UNION ALL SELECT '۾̯',4655095,'O8' +UNION ALL SELECT '޷',20602,'O9' +UNION ALL SELECT 'ˮ',4655100,'O10' +UNION ALL SELECT '',4655098,'O11' +UNION ALL SELECT 'ӹ__',0,'O12' +UNION ALL SELECT 'ʹ÷',0,'O13' +UNION ALL SELECT '',4655093,'O14' +UNION ALL SELECT 'ίӹ',20048,'O15' \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower/Enpower.csproj b/07.珠海英搏尔/Enpower/Enpower.csproj index 884b709..53c194f 100644 --- a/07.珠海英搏尔/Enpower/Enpower.csproj +++ b/07.珠海英搏尔/Enpower/Enpower.csproj @@ -7,8 +7,8 @@ {AFEF4E4D-92E3-4F04-9F19-ED01C0B2F24A} Library Properties - Enpower - Enpower + Enpower_GZ_LJY + Enpower_GZ_LJY v4.0 512 true @@ -31,6 +31,10 @@ 4 + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\FarPoint.Excel.dll + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.dll @@ -40,6 +44,10 @@ ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.App.Core.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Business.DynamicForm.dll + False ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Business.PlugIn.dll @@ -59,6 +67,30 @@ ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.VerificationHelper.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.Web.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.BD.ServiceHelper.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.Core.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.App.Core.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Business.PlugIn.dll + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.App.Report.dll @@ -66,9 +98,37 @@ False ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.Business.PlugIn.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.Common.BusinessEntity.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.Common.Core.dll + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.Report.PlugIn.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.CB.ServiceHelper.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Contracts.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.Core.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.HS.ServiceHelper.dll + + + False + ..\..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.ServiceHelper.dll + @@ -78,6 +138,8 @@ + + diff --git a/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/BillEventPlugInEx.cs b/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/BillEventPlugInEx.cs new file mode 100644 index 0000000..917ccbd --- /dev/null +++ b/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/BillEventPlugInEx.cs @@ -0,0 +1,62 @@ +using Kingdee.BOS.App; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.CommonFilter.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; +using Kingdee.BOS.KDThread; +using Kingdee.BOS.ServiceHelper.ManagementCenter; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; + +namespace Enpower.POSH_CB_PROCOSTRESULTREC +{ + public class BillEventPlugInEx : AbstractCommonFilterPlugIn + { + public override void AfterBindData(EventArgs e) + { + base.AfterBindData(e); + var _commonFilterModel = this.CommonFilterModel; + var t = this.View.BusinessInfo.GetForm(); + + + IDBService dBService = ServiceFactory.GetDBService(this.Context); + + DataSet result = null; + try + { + result = dBService.ExecuteDataSet(this.Context, new List { }, (new List { }).ToArray()); + } + finally + { + ServiceFactory.CloseService(dBService); + + } + + var table = result.Tables; + var tableName = table[0]; + var rows = tableName.Rows; + //return; + + var batchFilterGrid = this.View.GetControl("FBatchFilterGrid"); + + + MainWorker.QuequeTask(this.Context, () => + { + var tt = Math.Ceiling(0.1); + }, (a) => + { + + }); + } + + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + } + } +} diff --git a/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/PCBP_PRT.cs b/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/PCBP_PRT.cs new file mode 100644 index 0000000..098a1bc --- /dev/null +++ b/07.珠海英搏尔/Enpower/POSH_CB_PROCOSTRESULTREC/PCBP_PRT.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.BusinessEntity.BusinessFlow; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.Util; +using Kingdee.BOS.KDThread; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; + +namespace Enpower.POSH_CB_PROCOSTRESULTREC +{ + public class PCBP_PRT : AbstractDynamicFormPlugIn + { + public override void ButtonClick(ButtonClickEventArgs e) + { + base.ButtonClick(e); + + List list = new List(); + var a = list.Contains("1"); + + var proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FAnalyzeProEntity"); + + var materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("FAnalyzeMaterialEntity"); + var materialRows = this.View.Model.GetEntityDataObject(materialEntity); + materialRows.Clear(); + var tempRow =new List(); + + var row = new DynamicObject(materialEntity.DynamicObjectType); + + DBServiceHelper.Execute(this.Context, ""); + //DBUtils.ExecuteScalar(this.Context, ""); + + var b = "aaaaa"; + //var c = b.Contains(","); + } + + private void Test() + { + + DBServiceHelper.ExecuteDynamicObject(null, ""); + } + + + /// + + /// 显示进度条 + + /// + + /// 是否使用真的进度值 + + private void ShowProgressBar(bool userTruePro) + + { + + this.View.ShowProcessForm(formResult => { }, userTruePro, "正在执行xxx"); + + // 启动线程执行耗时操作,同时更新执行进度 + + MainWorker.QuequeTask(this.View.Context, () => + + { + + try + + { + + var counter = 30; + + for (var x = 1; x < counter; ++x) + + { + + // TODO + + Thread.Sleep(1000); + + // 报告下执行进度 + + var rate = Convert.ToInt32(x * 100 / counter); + + this.View.Session["ProcessRateValue"] = rate; + + // 进度条界面增加文字提示信息 + + //this.View.Session["ProcessTips"] = string.Format("任务{0}已处理", x); + + } + + + + this.View.ShowMessage("操作已完成。"); + + } + + catch (Exception ex) + + { + + this.View.ShowErrMessage(ex.Message); + + } + + finally + + { + + // 此句必不可少,进度值100时进度条自动关闭 + + this.View.Session["ProcessRateValue"] = 100; + + this.View.SendDynamicFormAction(this.View); + + } + + }, null); + + } + + } +} diff --git a/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/SQLQuery2.sql b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/SQLQuery2.sql new file mode 100644 index 0000000..d605af3 --- /dev/null +++ b/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/SQLQuery2.sql @@ -0,0 +1,50 @@ +DECLARE @period int +DECLARE @dbName varchar(100) +DECLARE @ACCTGORGID int +DECLARE @billNo varchar(100) +SET @ACCTGORGID = 100039 +SET @period = 201801 +SET @billNo = 'MO000019' +SELECT @dbName = DB_NAME() + +IF @dbName != 'AIS20231110222743' +BEGIN + SET @period = 202305 + SET @ACCTGORGID = 1 + + SET @billNo = 'WO2403210039' + --SET @billNo = 'WO2403210048' + --SET @billNo = 'WO2304230023' + --SET @billNo = 'WO2405290121' + --SET @billNo = 'WO2406220013' + --SET @billNo = 'TO2302060061' +END + +;WITH #ʼ AS ( + SELECT t0.FPRODUCTNO + ,t0.FBILLID + ,t0.FBILLENTRYID + ,t0.FPRODUCTID + ,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FMATERIALID + ,t3.FEXPTYPE + ,SUM(t3.FQUALIFIEDINQTY) 'FQUALIFIEDINQTY',SUM(t3.FQUALIFIEDINAMOUNT) 'FQUALIFIEDINQTY' + ,t3.FCURRINPUTQTY,t3.FCURRINPUTAMOUNT + ,MAX(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD' + FROM T_CB_PROORDERDIME t0 + INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID + INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID + INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID + WHERE 1 = 1 + AND t0.FPRODUCTNO = @billNo + AND t2.FACCTGORGID = @ACCTGORGID + AND t2.FCOMPUTEID != '' + AND t1.FENDINITKEY = 1 + GROUP BY t0.FPRODUCTNO + ,t0.FBILLID,t0.FBILLENTRYID + ,t0.FPRODUCTID,t0.FFORMID + ,t1.FPRODUCTDIMEID + ,t3.FMATERIALID,t3.FEXPTYPE +) +SELECT * FROM #ʼ \ No newline at end of file diff --git a/11.910华南洁能(中山)石化有限公司/910HNJNSH/Class1.cs b/11.910华南洁能(中山)石化有限公司/910HNJNSH/Class1.cs deleted file mode 100644 index 77ca4d9..0000000 --- a/11.910华南洁能(中山)石化有限公司/910HNJNSH/Class1.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace _910HNJNSH -{ - public class Class1 - { - } -} diff --git a/11.910华南洁能(中山)石化有限公司/HNJNSH909/GDHNJN.BusinessForm.BusinessPlugIn/ImportCommon.cs b/11.910华南洁能(中山)石化有限公司/HNJNSH909/GDHNJN.BusinessForm.BusinessPlugIn/ImportCommon.cs new file mode 100644 index 0000000..791c293 --- /dev/null +++ b/11.910华南洁能(中山)石化有限公司/HNJNSH909/GDHNJN.BusinessForm.BusinessPlugIn/ImportCommon.cs @@ -0,0 +1,982 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Linq; +using System.Text; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.BusinessEntity; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Bill; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; +using Kingdee.BOS.Core.Interaction; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.FormElement; +using Kingdee.BOS.JSON; +using Kingdee.BOS.KDThread; +using Kingdee.BOS.Log; +using Kingdee.BOS.Orm; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.ServiceHelper.Excel; +using Kingdee.BOS.Util; + +namespace HNJNSH910.GDHNJN.BusinessForm.BusinessPlugIn +{ + [HotUpdate] + [Description("加油接口--上传文件")] + public class ImportCommon : AbstractDynamicFormPlugIn + { + private DataTable dtexcel; + + private string _filePath; + + private List _dataObjs; + + private IBillView _billView; + + private string importObjectId = ""; + + private string billTypeId = ""; + + private string btnStr = ""; + + private List coverBaseNumers; + + public override void ButtonClick(ButtonClickEventArgs e) + { + base.ButtonClick(e); + importObjectId = View.Model.GetValue("F_PCMT_importObjectId").ToString(); + billTypeId = View.Model.GetValue("F_PCMT_billTypeId").ToString(); + if ((btnStr = e.Key.ToUpperInvariant()) == null) + { + return; + } + + string text = btnStr; + if (text != "F_PCMT_IMPORTDATA") + { + if (text == "F_PCMT_COVERIMPORTDATA" && IsNotNull()) + { + StartAsyncTaskAction(); + } + } + else if (IsNotNull()) + { + StartAsyncTaskAction(); + } + } + + private bool IsNotNull() + { + //IL_0001: Unknown result type (might be due to invalid IL or missing references) + //IL_0007: Expected O, but got Unknown + ExcelOperation val = new ExcelOperation(); + DataSet val2 = null; + val2 = val.ReadFromFile(_filePath, 0, 0); + dtexcel = val2.Tables[0]; + if (dtexcel == null) + { + View.ShowMessage("没有找到模板请重新选择!"); + return false; + } + + return true; + } + + private void Import() + { + //IL_0001: Unknown result type (might be due to invalid IL or missing references) + //IL_0007: Expected O, but got Unknown + ExcelOperation val = new ExcelOperation(); + DataSet val2 = null; + val2 = val.ReadFromFile(_filePath, 2, 1); + dtexcel = val2.Tables[0]; + string importIndexStr = GetImportIndexStr(); + List list = new List(); + for (int i = 0; i < dtexcel.Rows.Count; i++) + { + if (!list.Contains(dtexcel.Rows[i][importIndexStr])) + { + list.Add(dtexcel.Rows[i][importIndexStr].ToString()); + } + } + + _dataObjs = new List(); + foreach (string item in list) + { + DataRow[] array = dtexcel.Select(importIndexStr + "='" + item + "'"); + DataTable dt = DataTableExtensions.CopyToDataTable(array); + ImportData(dt, importObjectId, billTypeId); + } + + OperateOption operateOption = OperateOption.Create(); + int num = _dataObjs.Count / 1000 + ((_dataObjs.Count % 1000 != 0) ? 1 : 0); + IOperationResult operationResult = null; + DynamicObject[] arrObjs = _dataObjs.ToArray(); + for (int j = 0; j < num; j++) + { + DynamicObject[] currentObjs = GetCurrentObjs(arrObjs, j, 1000); + IOperationResult operationResult2 = BusinessDataServiceHelper.Save(base.Context, _billView.BillBusinessInfo, currentObjs, operateOption, "Save"); + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is true."); + if (operationResult == null) + { + operationResult = operationResult2; + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is success."); + } + else + { + operationResult.MergeResult(operationResult2); + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is success."); + } + } + + if (operationResult == null) + { + View.ShowErrMessage("未知原因导致单据保存失败!"); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult == null."); + return; + } + + if (operationResult.IsSuccess) + { + View.ShowOperateResult(operationResult.OperateResult); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsSuccess == true."); + return; + } + + if (operationResult.InteractionContext != null && operationResult.InteractionContext.Option.GetInteractionFlag().Count > 0) + { + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.InteractionContext != null."); + } + + if (operationResult.IsShowMessage) + { + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsShowMessage."); + operationResult.MergeValidateErrors(); + View.ShowOperateResult(operationResult.OperateResult); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsShowMessage执行完成."); + } + else + { + View.ShowMessage("上传完成"); + } + } + + private void CoverImport() + { + //IL_0001: Unknown result type (might be due to invalid IL or missing references) + //IL_0007: Expected O, but got Unknown + ExcelOperation val = new ExcelOperation(); + DataSet val2 = null; + val2 = val.ReadFromFile(_filePath, 2, 1); + dtexcel = val2.Tables[0]; + string importIndexStr = GetImportIndexStr(); + List list = new List(); + for (int i = 0; i < ((InternalDataCollectionBase)dtexcel.Rows).Count; i++) + { + if (!list.Contains(dtexcel.Rows[i][importIndexStr])) + { + list.Add(dtexcel.Rows[i][importIndexStr].ToString()); + } + } + + _dataObjs = new List(); + coverBaseNumers = new List(); + foreach (string item in list) + { + DataRow[] array = dtexcel.Select(importIndexStr + "='" + item + "'"); + DynamicObjectCollection dynamicObjectCollection = CoverImportData(item, array); + if (dynamicObjectCollection == null || dynamicObjectCollection.Count == 0) + { + DataTable dt = DataTableExtensions.CopyToDataTable((IEnumerable)array); + ImportData(dt, importObjectId, billTypeId); + } + } + + OperateOption operateOption = OperateOption.Create(); + IOperationResult operationResult = null; + int num = _dataObjs.Count / 1000 + ((_dataObjs.Count % 1000 != 0) ? 1 : 0); + DynamicObject[] arrObjs = _dataObjs.ToArray(); + for (int j = 0; j < num; j++) + { + DynamicObject[] currentObjs = GetCurrentObjs(arrObjs, j, 1000); + IOperationResult operationResult2 = BusinessDataServiceHelper.Save(base.Context, _billView.BillBusinessInfo, currentObjs, operateOption, "Save"); + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is true."); + if (operationResult == null) + { + operationResult = operationResult2; + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is success."); + } + else + { + operationResult.MergeResult(operationResult2); + Logger.Info(importObjectId + " " + billTypeId + " 第" + (j + 1) + "批导入执行Save操作", "is success."); + } + } + + IOperationResult operationResult3 = null; + bool flag = false; + if (coverBaseNumers.Count != 0) + { + string text = ""; + foreach (string coverBaseNumer in coverBaseNumers) + { + if (operationResult3 == null) + { + text = text + "编码" + coverBaseNumer + ":修改覆盖完成!" + Environment.NewLine; + } + else + { + operationResult3.OperateResult.Add(new OperateResult + { + Name = coverBaseNumer, + Message = "覆盖完成", + MessageType = MessageType.Normal, + SuccessStatus = true + }); + operationResult.MergeResult(operationResult3); + } + } + + flag = true; + if (operationResult3 == null) + { + View.ShowMessage(text); + } + } + + if (operationResult == null) + { + if (!flag) + { + View.ShowErrMessage("未知原因导致单据保存失败!"); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult == null."); + return; + } + } + else + { + if (operationResult.IsSuccess) + { + View.ShowOperateResult(operationResult.OperateResult); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsSuccess == true."); + return; + } + + if (operationResult.InteractionContext != null && operationResult.InteractionContext.Option.GetInteractionFlag().Count > 0) + { + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.InteractionContext != null."); + } + + if (operationResult.IsShowMessage) + { + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsShowMessage."); + operationResult.MergeValidateErrors(); + View.ShowOperateResult(operationResult.OperateResult); + Logger.Info(importObjectId + " " + billTypeId + "导入执行Save操作", "saveResult.IsShowMessage执行完成."); + return; + } + } + + View.ShowMessage("上传完成"); + } + + private DynamicObjectCollection CoverImportData(string billNo, DataRow[] dr) + { + DynamicObjectCollection dynamicObjectCollection = null; + switch (importObjectId) + { + case "BD_CUSTOMER": + dynamicObjectCollection = GetCoverBillObjs(billNo, "T_BD_CUSTOMER"); + if (dynamicObjectCollection != null && dynamicObjectCollection.Count != 0) + { + updateCust(dr, billNo); + if (!coverBaseNumers.Contains(billNo)) + { + coverBaseNumers.Add(billNo); + } + } + + break; + case "BD_MATERIAL": + dynamicObjectCollection = GetCoverBillObjs(billNo, "T_BD_MATERIAL"); + if (dynamicObjectCollection != null && dynamicObjectCollection.Count != 0) + { + updateMaterial(dr, billNo); + if (!coverBaseNumers.Contains(billNo)) + { + coverBaseNumers.Add(billNo); + } + } + + break; + case "WISE_ItemClass_3003": + dynamicObjectCollection = GetCoverBillObjs(billNo, "Wise_t_Cust100018"); + if (dynamicObjectCollection != null && dynamicObjectCollection.Count != 0) + { + updateOilCard(dr, billNo); + if (!coverBaseNumers.Contains(billNo)) + { + coverBaseNumers.Add(billNo); + } + } + + break; + } + + return dynamicObjectCollection; + } + + private DynamicObjectCollection GetCoverBillObjs(string billNo, string tableName) + { + List list = new List(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("/*dialect*/select * from {0} where FNUMBER='{1}'", tableName, billNo); + return DBUtils.ExecuteDynamicObject(base.Context, stringBuilder.ToString(), null, null, (CommandType)1); + } + + private void updateCust(DataRow[] dr, string billNo) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("/*dialect*/update T_BD_CUSTOMER_L set FNAME='{1}'\r\n from T_BD_CUSTOMER_L a\r\n inner join T_BD_CUSTOMER b on a.FCUSTID=b.FCUSTID\r\n where FNUMBER='{0}';\r\n\r\n update T_BD_CUSTOMER set FADDRESS ='{2}' ,FMODIFYDATE =GETDATE()\r\n from T_BD_CUSTOMER a\r\n where FNUMBER='{0}'", billNo, dr[0]["客户名称"].ToString(), dr[0]["地址"].ToString()); + DBUtils.Execute(base.Context, stringBuilder.ToString()); + } + + private void updateMaterial(DataRow[] dr, string billNo) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("/*dialect*/update T_BD_MATERIAL_L set FNAME='{1}' ,FSPECIFICATION='{2}' \r\n from T_BD_MATERIAL_L a \r\n inner join T_BD_MATERIAL b on a.FMATERIALID=b.FMATERIALID \r\n where FNUMBER='{0}';\r\n --update t_BD_MaterialBase set FBASEUNITID=(select FUNITID from T_BD_UNIT_L where FNAME='xx' )\r\n --from t_BD_MaterialBase a\r\n --inner join T_BD_MATERIAL b on a.FMATERIALID=b.FMATERIALID \r\n --where b.FNUMBER='xx' ;", billNo, dr[0]["名称"].ToString(), dr[0]["规格型号"].ToString()); + DBUtils.Execute(base.Context, stringBuilder.ToString()); + } + + private void updateOilCard(DataRow[] dr, string billNo) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("/*dialect*/update Wise_t_Cust100018 set F_103='{1}' ,F_104='{2}' \r\n from Wise_t_Cust100018 a \r\n where FNUMBER='{0}'", billNo, dr[0]["车牌号码"].ToString(), dr[0]["客户代码"].ToString()); + DBUtils.Execute(base.Context, stringBuilder.ToString()); + } + + private DynamicObject[] GetCurrentObjs(DynamicObject[] arrObjs, int startIndexBatch, int count) + { + if (arrObjs.Length < count) + { + return arrObjs; + } + + int num = startIndexBatch * count; + int num2 = num + (count - 1); + if (arrObjs.Length < num2) + { + num2 = arrObjs.Length - 1; + } + + Logger.Info("分批导入序号:", num + " -" + num2); + DynamicObject[] array = new DynamicObject[num2 - num + 1]; + for (int i = 0; i < num2 - num + 1; i++) + { + array[i] = arrObjs[num + i]; + } + + return array; + } + + private string GetImportIndexStr() + { + string result = ""; + switch (importObjectId) + { + case "BD_MATERIAL": + result = "代码"; + break; + case "BD_CUSTOMER": + result = "客户代码"; + break; + case "WISE_ItemClass_3003": + result = "卡片代码"; + break; + case "BD_Supplier": + result = "代码"; + break; + case "SAL_OUTSTOCK": + if (billTypeId == "SAL_OUTSTOCK_OIL") + { + result = "油单号"; + } + + if (billTypeId == "SAL_OUTSTOCK_SHOP") + { + result = "单据编号"; + } + + break; + case "STK_INSTOCK": + result = "单据编号"; + break; + } + + return result; + } + + public override void CustomEvents(CustomEventsArgs e) + { + if (e.Key.EqualsIgnoreCase("F_PCMT_FileUpdate")) + { + if (e.EventName.EqualsIgnoreCase("FILECHANGED")) + { + JSONObject jSONObject = KDObjectConverter.DeserializeObject(e.EventArgs); + if (jSONObject != null) + { + JSONArray jSONArray = new JSONArray(jSONObject["NewValue"].ToString()); + if (jSONArray.Count > 0) + { + string text = (jSONArray[0] as Dictionary)["ServerFileName"].ToString(); + if (CheckFile(text)) + { + _filePath = GetFilePath(text); + EnableButton("F_PCMT_ImportData", bEnable: true); + EnableButton("F_PCMT_CoverImportData", bEnable: true); + } + } + else + { + EnableButton("F_PCMT_ImportData", bEnable: false); + EnableButton("F_PCMT_CoverImportData", bEnable: false); + } + } + } + else if (e.EventName.EqualsIgnoreCase("STATECHANGED")) + { + JSONObject jSONObject2 = KDObjectConverter.DeserializeObject(e.EventArgs); + if (jSONObject2["State"].ToString() != "2") + { + EnableButton("F_PCMT_ImportData", bEnable: false); + EnableButton("F_PCMT_CoverImportData", bEnable: false); + } + } + } + + base.CustomEvents(e); + } + + private bool CheckFile(string fileName) + { + bool flag = false; + string[] array = fileName.Split('.'); + if (array.Length == 2 && (array[1].EqualsIgnoreCase("xls") || array[1].EqualsIgnoreCase("xlsx"))) + { + flag = true; + } + + if (!flag) + { + View.ShowWarnningMessage("请选择正确的文件进行引入。"); + } + + return flag; + } + + private void EnableButton(string key, bool bEnable) + { + View.GetControl