diff --git a/.vscode/settings.json b/.vscode/settings.json index a6c2fdd..881a358 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "dotnet.preferCSharpExtension": true, - "python.analysis.typeCheckingMode": "off" + "python.analysis.typeCheckingMode": "off", + "marscode.chatLanguage": "cn" } \ No newline at end of file diff --git a/01.扩展/K3CExttensionMethods/Class1.cs b/01.扩展/K3CExttensionMethods/Class1.cs new file mode 100644 index 0000000..3b2c4c0 --- /dev/null +++ b/01.扩展/K3CExttensionMethods/Class1.cs @@ -0,0 +1,191 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Log; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; + +namespace K3CExttensionMethods +{ + internal class Class1 : AbstractOperationServicePlugIn + { + #region event + + /// + /// 选项设置 + /// 1.在操作服务初始化是执行 + /// 2.可以对操作的执行参数进行设置,比如是否是否启动事务,是否支持批量处理等 + /// + /// + public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e) + { + PrintEventInfo("OnPrepareOperationServiceOption", e); + base.OnPrepareOperationServiceOption(e); + } + + /// + /// 在执行保存操作前触发 + /// 1.此时数据包没有填充主键数据 + /// 2.只有继承了AbstractSave的保存服务才会触发此事件 + /// + /// + public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e) + { + PrintEventInfo("BeforeDoSaveExecute", e); + base.BeforeDoSaveExecute(e); + } + + /// + /// 加载指定字段到实体数据包里 + /// 1.在列表上执行操作时,单据的字段并没有被完全加载。 如果操作插件用到了未被加载的字段,一定会中断。 + /// 2.本事件允许插件,强制要求加载某些字段,避免中断 + /// + /// + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + PrintEventInfo("OnPreparePropertys", e); + base.OnPreparePropertys(e); + } + + /// + /// 初始化操作结果 + /// + /// + public override void InitializeOperationResult(Kingdee.BOS.Core.DynamicForm.IOperationResult result) + { + PrintEventInfo("InitializeOperationResult", result); + base.InitializeOperationResult(result); + } + + /// + /// 添加自定义数据校验器 + /// 在系统开始执行校验前,插件可以追加自己的校验器进入操作校验器集合 + /// + /// + public override void OnAddValidators(AddValidatorsEventArgs e) + { + PrintEventInfo("OnAddValidators", e); + base.OnAddValidators(e); + } + + /// + /// 执行操作事务前事件,通知插件对要处理的数据进行排序等预处理(事务外触发) + /// 1.此事件在操作校验之后、操作实现代码之前执行 + /// 2.此事件在操作事务之前,即此事件中的数据库处理,不受操作的事务保护 + /// 3.通常此事件,也可以用来进行数据校验 + /// + /// e.SelectedRows 准备要处理的扩展实体 e.DataEntitys 处理后的实体 + public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) + { + PrintEventInfo("BeforeExecuteOperationTransaction", e); + base.BeforeExecuteOperationTransaction(e); + } + + /// + /// 操作事物前事件(事务内触发) + /// + /// 1.此事件在操作校验之后 + /// 2.此事件在操作事务开始之后 + /// 3.此事件在操作执行代码之前 + /// 4.此事件中的数据库处理,受操作的事务保护 + /// 5.通常此事件,可以用来做数据准备,在操作之前,提前写数据到库 + /// + public override void BeginOperationTransaction(BeginOperationTransactionArgs e) + { + PrintEventInfo("BeginOperationTransaction", e); + base.BeginOperationTransaction(e); + } + + /// + /// 操作事物后事件(事务内触发) + /// 1.此事件在操作执行代码之后,操作的内部逻辑已经执行完毕 + /// 2.此事件在操作事务提交之前 + /// 3.此事件中的数据库处理,受操作的事务保护 + /// 4.通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护 + /// + /// + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + PrintEventInfo("EndOperationTransaction", e); + base.EndOperationTransaction(e); + } + + /// + /// 内部事务执行失败后,调用回滚数据事件(事务外触发) + /// 1.此事件只有在操作执行过程中发生异常时才触发 + /// 2.操作异常时,回滚内存中的数据 + /// 3.避免访问数据库造成事务状态无效的错误 + /// + /// + public override void RollbackData(OperationRollbackDataArgs e) + { + PrintEventInfo("RollbackData", e); + base.RollbackData(e); + } + + /// + /// 执行操作事务后事件,通知插件对象执行其它事务无关的业务逻辑(事务外触发) + /// 1.此事件在操作执行后,操作的内部逻辑已经执行完毕; + /// 2.此事件在操作事务提交之后; + /// 3.此事件中的数据库处理,不受操作的事务保护 + /// 4.通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作 + /// + /// + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + PrintEventInfo("AfterExecuteOperationTransaction", e); + base.AfterExecuteOperationTransaction(e); + } + #endregion + + #region private method + + /// + /// 事件执行次数计数器 + /// + private int counter; + + /// + /// 事件执行次数计数器 + /// + private int Counter + { + get { return ++counter; } + } + + /// + /// 输出事件执行日志 + /// + /// 事件名称 + /// 事件参数 + private void PrintEventInfo(string eventName, params object[] args) + { + var formId = GetFormId(); + var parameters = string.Empty; + try + { + parameters = JsonConvert.SerializeObject(args); + } + catch + { + } + var log = string.Format("序号:{0},执行时间:{1},表单Id:{2},事件名称:{3},事件参数:{4}", Counter, DateTime.Now.ToString("yyyy -MM-dd HH:mm:ss.fff"), formId, eventName, parameters); + Debug.Print(log); + Logger.Error("EVENT", log, null); + } + + /// + /// 获取业务对象标识 + /// + /// + private string GetFormId() + { + return this.BusinessInfo.GetForm().Id; + } + #endregion + + } +} diff --git a/01.扩展/K3CExttensionMethods/K3CExttensionMethods.csproj b/01.扩展/K3CExttensionMethods/K3CExttensionMethods.csproj index 5805968..02545d0 100644 --- a/01.扩展/K3CExttensionMethods/K3CExttensionMethods.csproj +++ b/01.扩展/K3CExttensionMethods/K3CExttensionMethods.csproj @@ -62,6 +62,7 @@ + diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/Invoice.cs b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/Invoice.cs index b9eb2ab..89d9e32 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/Invoice.cs +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Domain/Invoice.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Xml.Serialization; @@ -9,208 +10,63 @@ namespace HUIWEI.Lexmark.sftp.SDK.Domain // 注意: 生成的代码可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。 /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] [XmlRoot(elementName: "Invoice", Namespace = "", IsNullable = false)] public partial class Invoice { - private InvoiceHeader headerField; - - private InvoiceLineItem[] lineItemField; - - private InvoiceSummary summaryField; - /// - public InvoiceHeader Header - { - get - { - return this.headerField; - } - set - { - this.headerField = value; - } - } + public InvoiceHeader Header { get; set; } /// [System.Xml.Serialization.XmlElementAttribute("LineItem")] - public InvoiceLineItem[] LineItem - { - get - { - return this.lineItemField; - } - set - { - this.lineItemField = value; - } - } + public InvoiceLineItem[] LineItem { get; set; } /// - public InvoiceSummary Summary - { - get - { - return this.summaryField; - } - set - { - this.summaryField = value; - } - } + public InvoiceSummary Summary { get; set; } } /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] public partial class InvoiceHeader { - private string supplierField; - - private string buyerField; - - private string invoiceTypeField; - - - private string currencyField; - - private string paymentTermsField; - - private string incotermsField; - - private string customerNumberField; - - private object headerField1Field; - - private object headerField2Field; - /// - public string Supplier - { - get - { - return this.supplierField; - } - set - { - this.supplierField = value; - } - } + public string Supplier { get; set; } /// - public string Buyer - { - get - { - return this.buyerField; - } - set - { - this.buyerField = value; - } - } + public string Buyer { get; set; } /// - public string InvoiceType - { - get - { - return this.invoiceTypeField; - } - set - { - this.invoiceTypeField = value; - } - } + public string InvoiceType { get; set; } /// - public uint InvoiceDate { get; set; } + public string InvoiceDate { get; set; } /// - public uint InvoiceNumber { get; set; } + public string InvoiceNumber { get; set; } /// - public string Currency - { - get - { - return this.currencyField; - } - set - { - this.currencyField = value; - } - } + public string Currency { get; set; } /// - public string PaymentTerms - { - get - { - return this.paymentTermsField; - } - set - { - this.paymentTermsField = value; - } - } + public string PaymentTerms { get; set; } /// - public string Incoterms - { - get - { - return this.incotermsField; - } - set - { - this.incotermsField = value; - } - } + public string Incoterms { get; set; } /// - public string CustomerNumber - { - get - { - return this.customerNumberField; - } - set - { - this.customerNumberField = value; - } - } + public string CustomerNumber { get; set; } /// - public object HeaderField1 - { - get - { - return this.headerField1Field; - } - set - { - this.headerField1Field = value; - } - } + public string HeaderField1 { get; set; } /// - public object HeaderField2 - { - get - { - return this.headerField2Field; - } - set - { - this.headerField2Field = value; - } - } + public string HeaderField2 { get; set; } /// public InvoiceHeaderVendor Vendor { get; set; } @@ -220,13 +76,13 @@ namespace HUIWEI.Lexmark.sftp.SDK.Domain } /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] public partial class InvoiceHeaderVendor { /// - public object PartyId { get; set; } + public string PartyId { get; set; } /// public string Name { get; set; } @@ -235,25 +91,25 @@ namespace HUIWEI.Lexmark.sftp.SDK.Domain public string AddressLine1 { get; set; } /// - public object AddressLine2 { get; set; } + public string AddressLine2 { get; set; } /// public string City { get; set; } /// - public object State { get; set; } + public string State { get; set; } /// - public object PostalCode { get; set; } + public string PostalCode { get; set; } /// - public object Country { get; set; } + public string Country { get; set; } /// - public object ContactName { get; set; } + public string ContactName { get; set; } /// - public object Email { get; set; } + public string Email { get; set; } /// public string Telephone { get; set; } @@ -263,497 +119,125 @@ namespace HUIWEI.Lexmark.sftp.SDK.Domain } /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] public partial class InvoiceHeaderBillTo { - private string partyIdField; - - private string nameField; - - private string addressLine1Field; - - private string addressLine2Field; - - private string cityField; - - private object stateField; - - private ushort postalCodeField; - - private string countryField; - - private object contactNameField; - - private object emailField; - - private object telephoneField; - - private object faxField; + /// + public string PartyId { get; set; } /// - public string PartyId - { - get - { - return this.partyIdField; - } - set - { - this.partyIdField = value; - } - } + public string Name { get; set; } /// - public string Name - { - get - { - return this.nameField; - } - set - { - this.nameField = value; - } - } + public string AddressLine1 { get; set; } /// - public string AddressLine1 - { - get - { - return this.addressLine1Field; - } - set - { - this.addressLine1Field = value; - } - } + public string AddressLine2 { get; set; } /// - public string AddressLine2 - { - get - { - return this.addressLine2Field; - } - set - { - this.addressLine2Field = value; - } - } + public string City { get; set; } /// - public string City - { - get - { - return this.cityField; - } - set - { - this.cityField = value; - } - } - - /// - public object State - { - get - { - return this.stateField; - } - set - { - this.stateField = value; - } - } + public string State { get; set; } /// public string PostalCode { get; set; } /// - public string Country - { - get - { - return this.countryField; - } - set - { - this.countryField = value; - } - } + public string Country { get; set; } /// - public object ContactName - { - get - { - return this.contactNameField; - } - set - { - this.contactNameField = value; - } - } + public string ContactName { get; set; } /// - public object Email - { - get - { - return this.emailField; - } - set - { - this.emailField = value; - } - } + public string Email { get; set; } /// - public object Telephone - { - get - { - return this.telephoneField; - } - set - { - this.telephoneField = value; - } - } + public string Telephone { get; set; } /// - public object Fax - { - get - { - return this.faxField; - } - set - { - this.faxField = value; - } - } + public string Fax { get; set; } } /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] public partial class InvoiceLineItem { - private byte item_Line_NumberField; - - private ulong lXK_PONumberField; - - private object lXK_PODateField; - - private ulong vendorSONumberField; - - private uint deliveryNoteNumberField; - - private object billOfLadingNumberField; - - private object shipmentDateField; - - private string lEX_PNField; - - private ushort quantityField; - - private string unit_Of_MeasureField; - - private string lXK_DescriptionField; - - private decimal unitPriceField; - - private decimal totalAmountField; - - private object lineItemField1Field; - - private object lineItemField2Field; + /// + public string Item_Line_Number { get; set; } /// - public byte Item_Line_Number - { - get - { - return this.item_Line_NumberField; - } - set - { - this.item_Line_NumberField = value; - } - } + public string LXK_PONumber { get; set; } /// - public ulong LXK_PONumber - { - get - { - return this.lXK_PONumberField; - } - set - { - this.lXK_PONumberField = value; - } - } + public string LXK_PODate { get; set; } + /// + public string VendorSONumber { get; set; } /// - public object LXK_PODate - { - get - { - return this.lXK_PODateField; - } - set - { - this.lXK_PODateField = value; - } - } + public string DeliveryNoteNumber { get; set; } /// - public ulong VendorSONumber - { - get - { - return this.vendorSONumberField; - } - set - { - this.vendorSONumberField = value; - } - } + public string BillOfLadingNumber { get; set; } /// - public uint DeliveryNoteNumber - { - get - { - return this.deliveryNoteNumberField; - } - set - { - this.deliveryNoteNumberField = value; - } - } + public string ShipmentDate { get; set; } /// - public object BillOfLadingNumber - { - get - { - return this.billOfLadingNumberField; - } - set - { - this.billOfLadingNumberField = value; - } - } + public string LEX_PN { get; set; } /// - public object ShipmentDate - { - get - { - return this.shipmentDateField; - } - set - { - this.shipmentDateField = value; - } - } + public int Quantity { get; set; } /// - public string LEX_PN - { - get - { - return this.lEX_PNField; - } - set - { - this.lEX_PNField = value; - } - } + public string Unit_Of_Measure { get; set; } /// - public ushort Quantity - { - get - { - return this.quantityField; - } - set - { - this.quantityField = value; - } - } + public string LXK_Description { get; set; } /// - public string Unit_Of_Measure - { - get - { - return this.unit_Of_MeasureField; - } - set - { - this.unit_Of_MeasureField = value; - } - } + public decimal UnitPrice { get; set; } /// - public string LXK_Description - { - get - { - return this.lXK_DescriptionField; - } - set - { - this.lXK_DescriptionField = value; - } - } + public decimal TotalAmount { get; set; } /// - public decimal UnitPrice - { - get - { - return this.unitPriceField; - } - set - { - this.unitPriceField = value; - } - } + public string LineItemField1 { get; set; } /// - public decimal TotalAmount - { - get - { - return this.totalAmountField; - } - set - { - this.totalAmountField = value; - } - } - - /// - public object LineItemField1 - { - get - { - return this.lineItemField1Field; - } - set - { - this.lineItemField1Field = value; - } - } - - /// - public object LineItemField2 - { - get - { - return this.lineItemField2Field; - } - set - { - this.lineItemField2Field = value; - } - } + public string LineItemField2 { get; set; } } - /// - [System.SerializableAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + /// + /// + /// + [Serializable()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true)] public partial class InvoiceSummary { - - private decimal shippingChargeField; - - private decimal otherChargesField; - - private decimal taxAmountField; - - private decimal taxableAmountField; - - private decimal totalGrossAmountField; + /// + /// + /// + public decimal ShippingCharge { get; set; } /// - public decimal ShippingCharge - { - get - { - return this.shippingChargeField; - } - set - { - this.shippingChargeField = value; - } - } + public decimal OtherCharges { get; set; } /// - public decimal OtherCharges - { - get - { - return this.otherChargesField; - } - set - { - this.otherChargesField = value; - } - } + public decimal TaxAmount { get; set; } /// - public decimal TaxAmount - { - get - { - return this.taxAmountField; - } - set - { - this.taxAmountField = value; - } - } + public decimal TaxableAmount { get; set; } /// - public decimal TaxableAmount - { - get - { - return this.taxableAmountField; - } - set - { - this.taxableAmountField = value; - } - } - - /// - public decimal TotalGrossAmount - { - get - { - return this.totalGrossAmountField; - } - set - { - this.totalGrossAmountField = value; - } - } + public decimal TotalGrossAmount { get; set; } } diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql index 6518352..3ea6fe3 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Lexmark.sftp.SDK/Sql/物料查询.sql @@ -6,28 +6,55 @@ BEGIN ;WITH #LEX_MaterialNumber AS( SELECT b.billno + --FROM (SELECT CAST(''+REPLACE('41X6129,50X1203,B225X00',',','')+'' AS xml) billno) a 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 * + ,#ݴ AS ( + SELECT t1.* + FROM #LEX_MaterialNumber tt + CROSS APPLY ( + SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME + --,tt.billno 'FSPECIFICATION' + ,t0_l.FSPECIFICATION + ,t1.FNUMBER Unit + ,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID' + ,CONVERT(int,t0ap.FISENABLE) FISENABLE + ,tt.billno LexNumber + 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 = @ORGID --944852 + AND (CHARINDEX(tt.billno,t0_l.FNAME) > 0) + AND t0.FDOCUMENTSTATUS = 'C' + AND t0.FFORBIDSTATUS = 'A' + ) t0 + PIVOT + ( + SUM(t0.FISENABLE) FOR + t0.FAUXPROPERTYID IN (FF100001,FF100002) + ) t1 + ) + 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 + SELECT t0.LexNumber,COUNT(1) ls + FROM #ݴ t0 + GROUP BY t0.LexNumber ) t0 - PIVOT - ( - SUM(t0.FISENABLE) FOR - t0.FAUXPROPERTYID IN (FF100001,FF100002) + CROSS APPLY ( + SELECT t1.FMATERIALID,t1.FNUMBER,t1.FNAME,t1.LexNumber 'FSPECIFICATION' + ,t1.Unit,t1.FF100001,t1.FF100002 + FROM #ݴ t1 + WHERE t1.LexNumber = t0.LexNumber AND t0.ls = 1 + UNION ALL + SELECT t1.FMATERIALID,t1.FNUMBER,t1.FNAME,t1.FSPECIFICATION + ,t1.Unit,t1.FF100001,t1.FF100002 + FROM #ݴ t1 + WHERE t1.LexNumber = t0.LexNumber AND t0.ls > 1 + AND (t0.LexNumber = t1.FSPECIFICATION) ) 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 index c6b3df1..fd56c0b 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/AR_receivable/BillEventPlugInEx.py +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/AR_receivable/BillEventPlugInEx.py @@ -35,7 +35,7 @@ def BarItemClick(e): billObj = this.View.Model.DataObject; if billObj.CustomerID_Id != 957286: return - + # raise Exception(JsonUtil.Serialize(billObj)) sqlL = """/*dialect*/ WITH #辅助资料 AS ( SELECT t1_l.FNAME,t1e_l.FDATAVALUE,t1e.FENTRYID,t1e.FNUMBER @@ -95,16 +95,54 @@ WHERE 1=1 # raise Exception(FSFTPPutPath) # //存放地址 - sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/ASN/"; + sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/INV/"; helper = SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort) - PONumber = "" + InvoicObj = Invoice(); + InvoicHeader = InvoiceHeader() + InvoicHeader.Supplier = "Huiwei" + InvoicHeader.Buyer = "Lexmark"; + InvoicHeader.InvoiceType = "Debit" + InvoicHeader.InvoiceDate = (str(billObj["Date"])[0:10]).replace("-","") + InvoicHeader.InvoiceNumber = ""; + InvoicHeader.Currency = "USD"; - InvoicObj = A(); + PayConditon = billObj.PayConditon; + if PayConditon != None: + # InvoicHeader.PaymentTerms = "R135 Accumulation - 4th following Month/30th day"; + InvoicHeader.PaymentTerms = PayConditon["Name"][0]["Value"]; + InvoicHeader.Incoterms = "EXW"; + InvoicHeader.CustomerNumber = "R8610"; + InvoicHeader.HeaderField1 = ""; + InvoicHeader.HeaderField2 = ""; + + InvoicLineItem = List[InvoiceLineItem]() message = ""; + entry = billObj.AP_PAYABLEENTRY; + for item in entry: + invoicItem = InvoiceLineItem(); + invoicItem.Item_Line_Number = "" + invoicItem.LXK_PONumber = "" + invoicItem.LXK_PODate = "" + invoicItem.VendorSONumber = "5002008647" + # 发货单号 + invoicItem.DeliveryNoteNumber = "" + invoicItem.BillOfLadingNumber = "" + invoicItem.ShipmentDate = "" + invoicItem.LEX_PN = "" + invoicItem.Quantity = item["PriceQty"] + invoicItem.Unit_Of_Measure = "EA" + invoicItem.LXK_Description = "" + invoicItem.UnitPrice = item["TaxPrice"] + invoicItem.TotalAmount = item["FALLAMOUNTFOR"] + invoicItem.LineItemField1 = "" + invoicItem.LineItemField2 = "" + + InvoicObj.Header = InvoicHeader; + InvoicObj.LineItem = InvoicLineItem.ToArray(); # 转换成xml字符串 InvoicXmlStr = XmlSerializerHelper.Serialize(InvoicObj); @@ -113,17 +151,17 @@ WHERE 1=1 # 加载成XML文件 xmldoc.LoadXml(InvoicXmlStr) # 文件名 - fileName = "ASN" + PONumber + GetFileName() + fileName = "INV" + "" + GetFileName() # 保存XML文件 - xmldoc.Save(sendPath + fileName); + # xmldoc.Save(sendPath + fileName); # 推送到SFTP - helper.Put(sendPath + fileName, FSFTPPutPath + fileName); + # helper.Put(sendPath + fileName, FSFTPPutPath + fileName); - AddSftpOpRecord(fileName,sendPath,PONumber,billObj.BillNo,billObj.Id,"ASN") + # AddSftpOpRecord(fileName,sendPath,"",billObj.BillNo,billObj.Id,"INV") - this.View.ShowMessage("ASN推送完成,PO:{0},文件名:{1}".format(ASNHeader.LEX_PO,fileName)) + this.View.ShowMessage("INV推送完成,PO:{0},文件名:{1}".format("",fileName)) def GetFileName(): diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/HUIWEI.Python.pyproj b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/HUIWEI.Python.pyproj index 4b2a528..b117759 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/HUIWEI.Python.pyproj +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/HUIWEI.Python.pyproj @@ -23,6 +23,10 @@ false + + + + @@ -51,6 +55,7 @@ + @@ -58,6 +63,11 @@ + + + + + diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py index 2ec1e85..03ee6ab 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py +++ b/03.珠海市汇威精密制造有限公司/HUIWEI.Python/产品Bom层级缺料分析查询表/产品Bom缺料分析报表构造.py @@ -82,7 +82,7 @@ SELECT t0.FMATERIALID ,ISNULL(t3.sumQTY,0) AS 即时库存 ,ISNULL(t4.sumBASENOPICKEDQTY,0) AS 未发数 ,ISNULL(t5.sumNoStockInQty,0) AS 在制数 - ,CASE WHEN CHARINDEX('TC',t0.FNUMBER) = 1 THEN 0 WHEN CHARINDEX('TC',t0.FNUMBER) = 1 THEN 0 ELSE ISNULL(t1.数量 - t1.未发数量,0) END AS '受订量' + ,CASE WHEN CHARINDEX('TB',t0.FNUMBER) = 1 THEN 0 WHEN CHARINDEX('TC',t0.FNUMBER) = 1 THEN 0 ELSE ISNULL(t1.数量 - t1.未发数量,0) END AS '受订量' ,ISNULL(t2.数量 - t2.入库数量,0) AS '在途量' ,(ISNULL(t3.sumQTY,0) - ISNULL(t4.sumBASENOPICKEDQTY,0) + ISNULL(t5.sumNoStockInQty,0) - ISNULL(t1.数量 - t1.未发数量,0) + ISNULL(t2.数量 - t2.入库数量,0)) AS '可用库存' ,ISNULL(t6.进检量,0) AS '进检量' diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI/HUIWEI.csproj b/03.珠海市汇威精密制造有限公司/HUIWEI/HUIWEI.csproj index 5492780..bb8078d 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI/HUIWEI.csproj +++ b/03.珠海市汇威精密制造有限公司/HUIWEI/HUIWEI.csproj @@ -135,5 +135,8 @@ ExtensionMethods + + + \ No newline at end of file diff --git a/03.珠海市汇威精密制造有限公司/HUIWEI/SAL_SaleOrder/xml/INVOIC.xml b/03.珠海市汇威精密制造有限公司/HUIWEI/SAL_SaleOrder/xml/INVOIC.xml index de1dd34..964be5a 100644 --- a/03.珠海市汇威精密制造有限公司/HUIWEI/SAL_SaleOrder/xml/INVOIC.xml +++ b/03.珠海市汇威精密制造有限公司/HUIWEI/SAL_SaleOrder/xml/INVOIC.xml @@ -1,119 +1,119 @@ -
- Huiwei - Lexmark - Debit - 20240625 - 0901239766 - USD - R135 Accumulation - 4th following Month/30th day - EXW - R8610 - - - - - HUIWEI GLOBAL - LAI STREET SHTIN NT - - Hong Kong - - - - - - 852-00099918 - 852-00099950 - - - R8610 - lexmark International Technology Sà - 20, Route de Pré-Bois - ICC Building, Bloc A - Genève - - 1215 - Switzerland - - - - - -
- - 00010 - 4501007448 - - 5002008647 - 0081026633 - - - 58D3H0K - 2000 - EA - Black CRTG High Return - 14.22 - 28440.00 - - - - - 00020 - 4501007448 - - 5002008647 - 0081026633 - - - 18MJ441 - 10 - EA - Fujifilm A3410SD Low Volt TW - 168.44 - 1684.40 - - - - - 00040 - 4501007448 - - 5002008647 - 0081026633 - - - 62D3X0E - 126 - EA - MX71/81x Black CRTG Extra CORP - 19.12 - 2409.12 - - - - - 00080 - 4501007448 - - 5002008647 - 0081026633 - - - 78C30C0 - 288 - EA - Cyan CRTG Return - 5.19 - 1494.72 - - - - - 0.00 - 0.00 - 0.00 - 34028.24 - 34028.24 - +
+ Huiwei + Lexmark + Debit + 20240625 + 0901239766 + USD + R135 Accumulation - 4th following Month/30th day + EXW + R8610 + + + + + HUIWEI GLOBAL + LAI STREET SHTIN NT + + Hong Kong + + + + + + 852-00099918 + 852-00099950 + + + R8610 + lexmark International Technology Sà + 20, Route de Pré-Bois + ICC Building, Bloc A + Genève + + 1215 + Switzerland + + + + + +
+ + 00010 + 4501007448 + + 5002008647 + 0081026633 + + + 58D3H0K + 2000 + EA + Black CRTG High Return + 14.22 + 28440.00 + + + + + 00020 + 4501007448 + + 5002008647 + 0081026633 + + + 18MJ441 + 10 + EA + Fujifilm A3410SD Low Volt TW + 168.44 + 1684.40 + + + + + 00040 + 4501007448 + + 5002008647 + 0081026633 + + + 62D3X0E + 126 + EA + MX71/81x Black CRTG Extra CORP + 19.12 + 2409.12 + + + + + 00080 + 4501007448 + + 5002008647 + 0081026633 + + + 78C30C0 + 288 + EA + Cyan CRTG Return + 5.19 + 1494.72 + + + + + 0.00 + 0.00 + 0.00 + 34028.24 + 34028.24 +
diff --git a/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py index dd41562..f633d1a 100644 --- a/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py +++ b/05.长园/CYG.Python/CRM_Contract/ListEventPlugInEx.py @@ -22,7 +22,7 @@ def BarItemClick(e): # if this.Context.UserId != 134339: # raise Exception("没有此功能的操作权限!") - + # 销售合同计算 # 1.更新销售合同合同类型 sql1 = """/*dialect*/ UPDATE T_CRM_CONTRACT SET F_CYG_CONTRACTTYPE = '664cd624468638' WHERE F_CYG_CONTRACTTYPE = '' @@ -60,7 +60,7 @@ UPDATE t1 SET t1.FCRMCONTRACTID = t0.CONTRACT_ID FROM #查询数据 t0 INNER JOIN T_SAL_ORDER t1 on t1.FID = t0.FID INNER JOIN #单一数据 tt on tt.FID = t0.FID -WHERE 1=1 +WHERE 1 = 1 """ diff --git a/05.长园/CYG/销售合同数据计算/20241226.sql b/05.长园/CYG/销售合同数据计算/20241226.sql new file mode 100644 index 0000000..9a93907 --- /dev/null +++ b/05.长园/CYG/销售合同数据计算/20241226.sql @@ -0,0 +1,129 @@ +;WITH #۶ AS ( + SELECT t1.FSALES + ,SUM(t1e_f.FALLAMOUNT_LC) 'ۼ۶λ' + ,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 1=1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.F_CYG_CHECKBALANCE != '1' + AND t1e.F_CYG_CHECKBALANCE1 != '1' + AND t1.FBILLTYPEID != 'a300e2620037435492aed9842875b451' + AND t1e.FMRPTERMINATESTATUS != 'B' + GROUP BY t1.FSALES +) +SELECT t1.* + ,t2.ۼƷλ + ,t3.ۼƿƱ + INTO #۶ +FROM #۶ t1 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƷλ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '2'--ͣݹ + AND t3.FDOCUMENTSTATUS = 'C' + AND t3.FBYVERIFY = '0' + GROUP BY t3.FSALES + ) t2 + OUTER APPLY ( + SELECT SUM(t3e.FALLAMOUNT) AS 'ۼƿƱ' + FROM T_AR_RECEIVABLE t3 + INNER JOIN T_AR_RECEIVABLEENTRY t3e on t3e.FID = t3.FID + WHERE t1.FSALES = t3.FSALES + AND t3.FSETACCOUNTTYPE = '3'--ͣ + AND t3.FDOCUMENTSTATUS = 'C' + AND CHARINDEX('-',t3.FBILLNO) = 0 + GROUP BY t3.FSALES + ) t3 + +;WITH #ͬ AS ( + SELECT t4.FOldFId + ,CAST(t4.FJSONDATA AS nvarchar(4000)) AS 'FJSONDATA' + ,ROW_NUMBER() OVER (PARTITION BY t4.FOldFId ORDER BY t4.FVERSION DESC) RN + FROM T_SCM_BILLCHANGEVERSIONS t4 + WHERE 1 = 1 + AND t4.FFormId = 'CRM_Contract' + AND t4.FACTIVESTATUS != 'A' +) +,#ۺͬ AS ( + SELECT t0.FID,t0.FBILLNO,t0.F_CYG_SALESNUMBER + ,t0.FNAME as FName + ,t0.FDOCUMENTSTATUS + ,t0.F_CYG_ContractNoDL + ,'A' AS 'FFORBIDSTATUS' + ,t0f.FCONTRACTAMOUNT_LC AS 'ͬ' + ,ISNULL(t4.FCONTRACTAMOUNT_X,t0f.F_CYG_CONTRACTCHANGE) AS 'ͬ仯' + ,ISNULL(t1.ۼ۶λ,0) AS 'ۼ۶λ' + ,ISNULL(t1.С,0) AS 'С' + ,ISNULL(t1.⹺С,0) AS '⹺С' + ,ISNULL(t1.װС,0) AS 'װС' + ,ISNULL(t1.ɱС,0) AS 'ɱС' + ,ISNULL(t1.ۼƷλ,0) AS 'ۼƷλ' + ,ISNULL(t1.ۼƿƱ,0) AS 'ۼƿƱ' + FROM T_CRM_CONTRACT t0 + INNER JOIN T_CRM_CONTRACTFIN t0f on t0f.FID = t0.FID + LEFT JOIN #۶ t1 on t1.FSALES = t0.F_CYG_YSALESNUMBER + OUTER APPLY ( + SELECT CAST(JSON_VALUE(t4.FJSONDATA,'$.CRM_ContractFIN[0].FCONTRACTAMOUNT_LC') AS decimal(23,10)) - t0f.FCONTRACTAMOUNT_LC 'FCONTRACTAMOUNT_X' + FROM #ͬ t4 + WHERE t4.FOLDFID = t0.FID AND t4.RN = 2 + ) t4 + WHERE 1=1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t0f.FCONTRACTAMOUNT_LC > 0 + AND t0.F_CYG_CONTRACTTYPE = '664cd624468638' + AND CONVERT(int,CONVERT(varchar(4) ,t0.FDATE,112)) = 2024 --ֻ޸ͿԸ¶Ӧ +) +SELECT tt.FID,tt.FBILLNO,tt.F_CYG_SALESNUMBER,tt.FName + --,tt.FDOCUMENTSTATUS,tt.F_CYG_CONTRACTNODL,tt.FFORBIDSTATUS + ,tt.ͬ,tt.ͬ仯,tt.ۼ۶λ,tt.ͬ - tt.ۼ۶λ AS 'δµ۶λ' + ,tt.ۼƷλ,tt.ۼƿƱ + ,tt.ۼ۶λ - tt.ۼƷλ AS 'ʣδλ' + ,tt.ۼƷλ - tt.ۼƿƱ AS 'δƱ' + ,tt.װС,tt.ɱС,tt.С,tt.⹺С + INTO # +FROM #ۺͬ tt + INNER JOIN T_CRM_CONTRACTFIN t0 on t0.FID = tt.FID +WHERE NOT ( t0.F_CYG_CUMSALESORDERS = tt.ۼ۶λ + AND t0.F_CYG_NOORDERSALES = tt.ͬ - tt.ۼ۶λ + AND t0.F_CYG_CUMSHIPMENT = tt.ۼƷλ + AND t0.F_CYG_REMAINSHIPMENT = tt.ۼ۶λ - tt.ۼƷλ + AND t0.F_CYG_CONTRACTCHANGE = tt.ͬ仯 + AND t0.F_CYG_ACCUMULATEDINVOIC = tt.ۼƿƱ + AND t0.F_CYG_UNINVOICEDAMOUNT = tt.ۼƷλ - tt.ۼƿƱ + AND t0.F_CYG_OPENPRICE = tt.С + AND t0.F_CYG_OUTSOURCINGPRICE = tt.⹺С + AND t0.F_CYG_MOUNTINGCOST = tt.װС + AND t0.F_CYG_COST = tt.ɱС) + +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 + +UPDATE t0 SET t0.FDATE = GETDATE() +FROM T_CRM_CONTRACT t0 + INNER JOIN # tt on t0.FID = tt.FID + +--SELECT * +--FROM # +--ORDER BY FID +DROP TABLE #۶ +DROP TABLE # \ No newline at end of file diff --git a/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj index d83287f..83be733 100644 --- a/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj +++ b/07.珠海英搏尔/Enpower.Python/Enpower.Python.pyproj @@ -56,6 +56,7 @@ + diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj b/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj index 0e9998a..bd8859a 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/GZ.LJY000.Enpower.csproj @@ -83,7 +83,10 @@
+ + + @@ -102,7 +105,12 @@ + + + + + copy $(TargetPath) "D:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin" diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs new file mode 100644 index 0000000..d89e0f6 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_N3_Forecast/BillConvertPlugInEx/N3Forecast2PLN_FORECAST.cs @@ -0,0 +1,157 @@ +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.FieldElement; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Enpower.POSH_N3_Forecast.BillConvertPlugInEx +{ + [Description("N+3预测单转换预测单#"), HotUpdate] + public class N3Forecast2PLN_FORECAST : AbstractConvertPlugIn + { + public override void AfterConvert(AfterConvertEventArgs e) + { + base.AfterConvert(e); + if (e.Result.FindByEntityKey("FBillHead").Any()) + { + var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity; + var convertBillNo = billHead["FConvertBillNo"]; + if (!convertBillNo.IsNullOrEmptyOrWhiteSpace()) + { + + var sqlL = $@"/*dialect*/ +WITH #年度预测 AS ( + SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID + ,t1.FQTY,t1.FYEAR '年份' ,t1.FMONTH '月份' + ,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FN','') + t1.FMONTH 周期 + ,CONVERT(int,t1.FYEAR * 10000 + REPLACE(T1.DATEM,'FN','') *100 + t1.FMONTH * 100 + 1) AS '日期' + ,CONVERT(datetime,DATEFROMPARTS(t1.FYEAR,CONVERT(int,REPLACE(T1.DATEM,'FN',''))+ t1.FMONTH,1)) 'startDate' + FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSEQ,t0e.FYEAR,t0e.FMONTH,t0e.FMATERIALID,t0e.FUNITID,t0e.FN0,t0e.FN1,t0e.FN2,t0e.FN3 + FROM T_PLN_FORECAST2N3 t0 --表头 + INNER JOIN T_PLN_FORECAST2N3ENTRY t0e on t0.FID = t0e.FID --表体 + WHERE t0.FBILLNO = '{convertBillNo.ToString()}' + ) t0 + UNPIVOT ( + FQTY FOR dateM IN (FN0,FN1,FN2,FN3) + ) AS t1 +) +SELECT tt.* + ,DATEADD(SECOND,-1,DATEADD(MONTH, 1, tt.startDate)) AS 'endDate' + ,CASE WHEN ISNULL(t0.FQTY,0) > tt.FQTY THEN 0 ELSE tt.FQTY - ISNULL(t0.FQTY,0) END '最终数量' +FROM #年度预测 tt + OUTER APPLY ( + SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY + FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSTARTDATE,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID,t0e.FCUSTID + ,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 + FROM T_PLN_FORECAST2W5 t0 --表头 + INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID --表体 + WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FExecutionState = '1' + ) t0 + UNPIVOT ( + FQTY FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) + ) AS t1 + WHERE t1.FMATERIALID = tt.FMATERIALID AND CONVERT(INT,CONVERT(varchar(6),DATEADD(DAY,CONVERT(int,REPLACE(t1.dateM,'FD','')) - 1,t1.FSTARTDATE),112)) = tt.周期 + GROUP BY t1.FMATERIALID--,t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) + ) t0 + +ORDER BY tt.startDate,tt.FSEQ +"; + //throw new Exception(sqlL); + var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if (dataList != null && dataList.Count > 0) + { + var entrys = billHead["PLN_FORECASTENTRY"] as DynamicObjectCollection; + entrys.Clear(); + + var idx = 1; + + //#! 物料 + var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField; + ////#! 货主 + //var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField; + //#! 计量单位 + var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; + var unitBaseFId = e.TargetBusinessInfo.GetField("FBaseUnitID") as BaseDataField; + + ////仓库 + //var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; + + foreach (var item in dataList) + { + var entity = entrys.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + entity["Seq"] = idx; + + //# 物料 + var matId = item["FMATERIALID"].Long2Int(); + entity["MaterialId_Id"] = matId; + var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType); + entity["MaterialId"] = matObj; + //预留类型 + entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"]; + //均化周期 + entity["AveraCycle"] = 1; + var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject; + + var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); + var qty = decimal.Parse(item["最终数量"].ToString()); + entity["Qty"] = qty; + entity["StartDate"] = item["startDate"]; + entity["EndDate"] = item["endDate"]; + + ////# 货主类型 + //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; + ////# 货主 + //var ownerId = item["FOWNERID"].Long2Int(); + //if (ownerId > 0) + //{ + // var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); + // entity["FOwnerId_Id"] = ownerId; + // entity["FOwnerId"] = ownerObj; + //} + + //# 计量单位 + var unitId = item["FUNITID"].Long2Int(); + if (unitId > 0) + { + var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType); + entity["UnitID_Id"] = unitId; + entity["UnitID"] = unitObj; + + if (baseUnitId_Id != 0) + { + var baseUnitQty = ConvertServiceHelper.GetBaseUnitQty(this.Context, matId, unitId, qty); + var unitBaseObj = BusinessDataServiceHelper.LoadSingle(this.Context, baseUnitId_Id, unitBaseFId.RefFormDynamicObjectType); + entity["BaseUnitId_Id"] = MaterialBase["BaseUnitId_Id"]; + entity["BaseUnitId"] = unitBaseObj; + entity["BaseQty"] = baseUnitQty; + } + } + + var entity_Links = entity["FEntity_Link"] as DynamicObjectCollection; + var entityLink = entity_Links.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + + entity_Links.Add(entityLink); + + entityLink["RuleId"] = "ec1cd362-7d98-4a5c-b9bb-42a20f62a234"; + entityLink["STableName"] = "T_PLN_FORECAST2YEARENTRY"; + entityLink["SBillId"] = item["FID"].ToString(); + entityLink["SId"] = item["FEntryID"].ToString(); + + entrys.Add(entity); + idx++; + } + } + } + + } + } + } +} diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs new file mode 100644 index 0000000..43d863a --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_W5WagonPlan/BillConvertPlugInEx/W5WagonPlan2PLN_FORECAST.cs @@ -0,0 +1,167 @@ +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.FieldElement; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Enpower.POSH_W5WagonPlan.BillConvertPlugInEx +{ + [Description("W+5预测单转换预测单#"), HotUpdate] + public class W5WagonPlan2PLN_FORECAST : AbstractConvertPlugIn + { + public override void AfterConvert(AfterConvertEventArgs e) + { + base.AfterConvert(e); + if (e.Result.FindByEntityKey("FBillHead").Any()) + { + var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity; + var convertBillNo = billHead["FConvertBillNo"]; + if (!convertBillNo.IsNullOrEmptyOrWhiteSpace()) + { + + var sqlL = $@"/*dialect*/ +WITH #W5预测单 AS ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSTARTDATE,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID + ,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 + FROM T_PLN_FORECAST2W5 t0 --表头 + INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID --表体 + WHERE t0.FBILLNO = '{convertBillNo.ToString()}' +) +,#W5装车计划 AS ( + SELECT * + ,REPLACE(t1.dateM,'FD','') RN + ,DATEPART(WEEKDAY,t1.FSTARTDATE) '初始周天' + ,DATEPART(WEEKDAY,DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) -1,t1.FSTARTDATE)) '周天' + ,DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE) AS '日期' + FROM #W5预测单 t0 + UNPIVOT ( + FQTY FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) + ) AS t1 +) +, #数据二次处理 AS ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR + ,t0.FQTY + ,t0.RN + ,CASE t0.初始周天 WHEN 1 THEN 7 ELSE t0.初始周天 - 1 END '初始周天' + ,t0.FSTARTDATE + ,CASE t0.周天 WHEN 1 THEN 7 ELSE t0.周天 - 1 END '周天' + ,t0.日期 + ,DATEADD(SECOND,-1,DATEADD(DAY, 1, t0.日期)) AS 'endDate' + FROM #W5装车计划 t0 +) +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR,t1.groupby + FROM #W5预测单 t0 , + (SELECT 1 groupby UNION ALL SELECT 2 groupby UNION ALL SELECT 3 groupby + UNION ALL SELECT 4 groupby UNION ALL SELECT 5 groupby UNION ALL SELECT 6 groupby) t1 + +) tt +CROSS APPLY ( + SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR + ,SUM(t0.FQTY) '最终数量' + ,MIN(t0.日期) minDate + ,MAX(t0.endDate) maxDate + FROM #数据二次处理 t0 + WHERE tt.FEntryID = t0.FEntryID AND (t0.初始周天 + t0.RN - 1) > (tt.groupby -1) * 7 AND (t0.初始周天 + t0.RN-1) <= tt.groupby * 7 + GROUP BY t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR +) t0 +ORDER BY t0.minDate ASC +"; + //throw new Exception(sqlL); + var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if (dataList != null && dataList.Count > 0) + { + var entrys = billHead["PLN_FORECASTENTRY"] as DynamicObjectCollection; + entrys.Clear(); + + var idx = 1; + + //#! 物料 + var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField; + ////#! 货主 + //var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField; + //#! 计量单位 + var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; + var unitBaseFId = e.TargetBusinessInfo.GetField("FBaseUnitID") as BaseDataField; + + //仓库 + var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; + + foreach (var item in dataList) + { + var entity = entrys.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + entity["Seq"] = idx; + + //# 物料 + var matId = item["FMATERIALID"].Long2Int(); + entity["MaterialId_Id"] = matId; + var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType); + entity["MaterialId"] = matObj; + //预留类型 + entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"]; + //均化周期 + entity["AveraCycle"] = 1; + var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject; + + var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); + var qty = decimal.Parse(item["最终数量"].ToString()); + entity["Qty"] = qty; + entity["StartDate"] = item["minDate"]; + entity["EndDate"] = item["maxDate"]; + + ////# 货主类型 + //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; + ////# 货主 + //var ownerId = item["FOWNERID"].Long2Int(); + //if (ownerId > 0) + //{ + // var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); + // entity["FOwnerId_Id"] = ownerId; + // entity["FOwnerId"] = ownerObj; + //} + + //# 计量单位 + var unitId = item["FUNITID"].Long2Int(); + if (unitId > 0) + { + var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType); + entity["UnitID_Id"] = unitId; + entity["UnitID"] = unitObj; + + if (baseUnitId_Id != 0) + { + var baseUnitQty = ConvertServiceHelper.GetBaseUnitQty(this.Context, matId, unitId, qty); + var unitBaseObj = BusinessDataServiceHelper.LoadSingle(this.Context, baseUnitId_Id, unitBaseFId.RefFormDynamicObjectType); + entity["BaseUnitId_Id"] = MaterialBase["BaseUnitId_Id"]; + entity["BaseUnitId"] = unitBaseObj; + entity["BaseQty"] = baseUnitQty; + } + } + + var entity_Links = entity["FEntity_Link"] as DynamicObjectCollection; + var entityLink = entity_Links.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + + entity_Links.Add(entityLink); + + entityLink["RuleId"] = "5999083d-5e4a-4af9-93f8-32873ef4e9de"; + entityLink["STableName"] = "T_PLN_FORECAST2YEARENTRY"; + entityLink["SBillId"] = item["FID"].ToString(); + entityLink["SId"] = item["FEntryID"].ToString(); + + entrys.Add(entity); + idx++; + } + } + } + + } + } + } +} diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs new file mode 100644 index 0000000..a68e909 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.cs @@ -0,0 +1,156 @@ +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.FieldElement; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Enpower.POSH_Year_Forecast.BillConvertPlugInEx +{ + [Description("年度预测单转换预测单#"), HotUpdate] + public class YeacForecast2PLN_FORECAST : AbstractConvertPlugIn + { + public override void AfterConvert(AfterConvertEventArgs e) + { + base.AfterConvert(e); + if (e.Result.FindByEntityKey("FBillHead").Any()) + { + var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity; + var convertBillNo = billHead["FConvertBillNo"]; + if (!convertBillNo.IsNullOrEmptyOrWhiteSpace()) + { + + var sqlL = $@"/*dialect*/ +WITH #年度预测 AS ( + SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID + ,t1.FQTY,t1.FYEAR '年份' ,REPLACE(T1.DATEM,'FMONTH','') '月份' + ,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FMONTH','') 周期 + --,DATEADD(MONTH, DATEDIFF(MONTH, 0, ), 0) AS 'startDate' + ,CONVERT(datetime,CONCAT(T1.FYEAR,'-',REPLACE(T1.DATEM,'FMONTH',''),'-01')) 'startDate' + FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSEQ,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID,FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12 + FROM T_PLN_FORECAST2YEAR t0 --表头 + INNER JOIN T_PLN_FORECAST2YEARENTRY t0e on t0.FID = t0e.FID --表体 + ) t0 + UNPIVOT ( + FQTY FOR dateM IN (FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12) + ) AS t1 +) +SELECT tt.* + ,DATEADD(SECOND,-1,DATEADD(MONTH, 1, tt.startDate)) AS 'endDate' + --,t0.FQTY AS 'W5数量' + ,CASE WHEN ISNULL(t0.FQTY,0) > tt.FQTY THEN 0 ELSE tt.FQTY - ISNULL(t0.FQTY,0) END '最终数量' +FROM #年度预测 tt + OUTER APPLY ( + SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY + FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSTARTDATE,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 + FROM T_PLN_FORECAST2W5 t0 --表头 + INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID --表体 + WHERE t0.FDOCUMENTSTATUS = 'C' AND t0.FExecutionState = '1' + ) t0 + UNPIVOT ( + FQTY FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) + ) AS t1 + WHERE t1.FMATERIALID = tt.FMATERIALID AND t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) = tt.周期 + GROUP BY t1.FMATERIALID,t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) + ) t0 +WHERE tt.FBILLNO = '{convertBillNo.ToString()}' +ORDER BY tt.startDate,tt.FSEQ +"; + //throw new Exception(sqlL); + var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if (dataList != null && dataList.Count > 0) + { + var entrys = billHead["PLN_FORECASTENTRY"] as DynamicObjectCollection; + entrys.Clear(); + + var idx = 1; + + //#! 物料 + var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField; + ////#! 货主 + //var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField; + //#! 计量单位 + var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; + var unitBaseFId = e.TargetBusinessInfo.GetField("FBaseUnitID") as BaseDataField; + + //仓库 + var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; + + foreach (var item in dataList) + { + var entity = entrys.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + entity["Seq"] = idx; + + //# 物料 + var matId = item["FMATERIALID"].Long2Int(); + entity["MaterialId_Id"] = matId; + var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType); + entity["MaterialId"] = matObj; + //预留类型 + entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"]; + //均化周期 + entity["AveraCycle"] = 1; + var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject; + + var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); + var qty = decimal.Parse(item["最终数量"].ToString()); + entity["Qty"] = qty; + entity["StartDate"] = item["startDate"]; + entity["EndDate"] = item["endDate"]; + + ////# 货主类型 + //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; + ////# 货主 + //var ownerId = item["FOWNERID"].Long2Int(); + //if (ownerId > 0) + //{ + // var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); + // entity["FOwnerId_Id"] = ownerId; + // entity["FOwnerId"] = ownerObj; + //} + + //# 计量单位 + var unitId = item["FUNITID"].Long2Int(); + if (unitId > 0) + { + var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType); + entity["UnitID_Id"] = unitId; + entity["UnitID"] = unitObj; + + if (baseUnitId_Id != 0) + { + var baseUnitQty = ConvertServiceHelper.GetBaseUnitQty(this.Context, matId, unitId, qty); + var unitBaseObj = BusinessDataServiceHelper.LoadSingle(this.Context, baseUnitId_Id, unitBaseFId.RefFormDynamicObjectType); + entity["BaseUnitId_Id"] = MaterialBase["BaseUnitId_Id"]; + entity["BaseUnitId"] = unitBaseObj; + entity["BaseQty"] = baseUnitQty; + } + } + + var entity_Links = entity["FEntity_Link"] as DynamicObjectCollection; + var entityLink = entity_Links.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; + + entity_Links.Add(entityLink); + + entityLink["RuleId"] = "ec1cd362-7d98-4a5c-b9bb-42a20f62a234"; + entityLink["STableName"] = "T_PLN_FORECAST2YEARENTRY"; + entityLink["SBillId"] = item["FID"].ToString(); + entityLink["SId"] = item["FEntryID"].ToString(); + + entrys.Add(entity); + idx++; + } + } + } + + } + } + } +} diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.py b/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_Year_Forecast/BillConvertPlugInEx/YeacForecast2PLN_FORECAST.py new file mode 100644 index 0000000..e69de29 diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/SAL_RETURNSTOCK/BillEventPlugInEx.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/SAL_RETURNSTOCK/BillEventPlugInEx.cs index fbaebd8..17ec2c8 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/SAL_RETURNSTOCK/BillEventPlugInEx.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/SAL_RETURNSTOCK/BillEventPlugInEx.cs @@ -43,7 +43,9 @@ namespace GZ.LJY000.Enpower.SAL_RETURNSTOCK var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int(); DynamicObject entityLinkObj = null; - var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; + DynamicObjectCollection entityLinkObjList = null; + if (entry["FEntity_Link"] != null) + entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; if (entityLinkObjList != null && entityLinkObjList.Count > 0) entityLinkObj = entityLinkObjList[0]; diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs index a35f1ec..586d65d 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs @@ -73,12 +73,12 @@ namespace GZ.LJY000.Enpower.STK_MISCELLANEOUS } } - public override void AfterCreateNewEntryRow(CreateNewEntryEventArgs e) { base.AfterCreateNewEntryRow(e); } + private bool DoDetection() { var orgObj = this.View.Model.GetValue("FStockOrgId") as DynamicObject; diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_RETURNMTRL/BillEventPlugInEx.cs b/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_RETURNMTRL/BillEventPlugInEx.cs index bc7adae..362e930 100644 --- a/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_RETURNMTRL/BillEventPlugInEx.cs +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/SUB_RETURNMTRL/BillEventPlugInEx.cs @@ -41,9 +41,10 @@ namespace GZ.LJY000.Enpower.SUB_RETURNMTRL var materialObjValue = entry["MaterialId_Id"]; var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int(); - DynamicObject entityLinkObj = null; - var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; + DynamicObjectCollection entityLinkObjList = null; + if (entry["FEntity_Link"] != null) + entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; if (entityLinkObjList != null && entityLinkObjList.Count > 0) entityLinkObj = entityLinkObjList[0]; @@ -80,44 +81,46 @@ namespace GZ.LJY000.Enpower.SUB_RETURNMTRL { base.AfterCreateNewEntryRow(e); - if (DoDetection()) - { - var details = this.View.BusinessInfo.GetEntity("FEntity"); - if (details != null) - { - var entrys = this.View.Model.GetEntityDataObject(details); - if (entrys != null && entrys.Count > 0) - { - var dateObj = this.View.Model.GetValue("FDate"); - var dateValue = dateObj == null ? "" : dateObj.ToString(); - if (dateValue.IsNullOrEmptyOrWhiteSpace()) - return; + //if (DoDetection()) + //{ + // var details = this.View.BusinessInfo.GetEntity("FEntity"); + // if (details != null) + // { + // var entrys = this.View.Model.GetEntityDataObject(details); + // if (entrys != null && entrys.Count > 0) + // { + // var dateObj = this.View.Model.GetValue("FDate"); + // var dateValue = dateObj == null ? "" : dateObj.ToString(); + // if (dateValue.IsNullOrEmptyOrWhiteSpace()) + // return; - var tableSqlL = new List(); - foreach (var entry in entrys) - { - var rowIndex = this.View.Model.GetRowIndex(details, entry); - var materialObjValue = entry["MaterialId_Id"]; - var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int(); + // var tableSqlL = new List(); + // foreach (var entry in entrys) + // { + // var rowIndex = this.View.Model.GetRowIndex(details, entry); + // var materialObjValue = entry["MaterialId_Id"]; + // var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int(); - tableSqlL.Add($" SELECT {materialValue} AS 'FMATERIALID',{rowIndex} rowIdx "); + // tableSqlL.Add($" SELECT {materialValue} AS 'FMATERIALID',{rowIndex} rowIdx "); - DynamicObject entityLinkObj = null; - var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; + // DynamicObject entityLinkObj = null; + // DynamicObjectCollection entityLinkObjList = null; + // if (entry["FEntity_Link"] != null) + // entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; - if (entityLinkObjList != null && entityLinkObjList.Count > 0) - entityLinkObj = entityLinkObjList[0]; + // if (entityLinkObjList != null && entityLinkObjList.Count > 0) + // entityLinkObj = entityLinkObjList[0]; - var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int(); - var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int(); - var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString(); - } + // var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int(); + // var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int(); + // var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString(); + // } - if (tableSqlL.Any()) - GetPrdLot(dateValue, string.Join(" UNION ", tableSqlL)); - } - } - } + // if (tableSqlL.Any()) + // GetPrdLot(dateValue, string.Join(" UNION ", tableSqlL)); + // } + // } + //} } private bool DoDetection() diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单.sql new file mode 100644 index 0000000..8fb6245 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单.sql @@ -0,0 +1,32 @@ +-- +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FMATERIALID,FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12 + FROM T_PLN_FORECAST2YEAR t0 --ͷ + INNER JOIN T_PLN_FORECAST2YEARENTRY t0e on t0.FID = t0e.FID -- +) t0 +UNPIVOT ( + VALUE FOR dateM IN (FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12) +) AS t1 + +--N3 +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FMATERIALID,FN1,FN2,FN3 + FROM T_PLN_FORECAST2N3 t0 --ͷ + INNER JOIN T_PLN_FORECAST2N3ENTRY t0e on t0.FID = t0e.FID -- +) t0 +UNPIVOT ( + VALUE FOR dateM IN (FN1,FN2,FN3) +) AS t1 + +--W5 +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FMATERIALID,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 + FROM T_PLN_FORECAST2W5 t0 --ͷ + INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID -- +) t0 +UNPIVOT ( + VALUE FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) +) AS t1 diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/N3.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/N3.sql new file mode 100644 index 0000000..a2d343e --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/N3.sql @@ -0,0 +1,9 @@ +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FMATERIALID,FN1,FN2,FN3 + FROM T_PLN_FORECAST2N3 t0 --ͷ + INNER JOIN T_PLN_FORECAST2N3ENTRY t0e on t0.FID = t0e.FID -- +) t0 +UNPIVOT ( + VALUE FOR dateM IN (FN1,FN2,FN3) +) AS t1 \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/W5.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/W5.sql new file mode 100644 index 0000000..bfd03f9 --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/W5.sql @@ -0,0 +1,9 @@ +SELECT * +FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FMATERIALID,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 + FROM T_PLN_FORECAST2W5 t0 --ͷ + INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID -- +) t0 +UNPIVOT ( + VALUE FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) +) AS t1 \ No newline at end of file diff --git a/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/年度.sql b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/年度.sql new file mode 100644 index 0000000..4bf994a --- /dev/null +++ b/07.珠海英搏尔/GZ.LJY000.Enpower/预测单/年度.sql @@ -0,0 +1,18 @@ +WITH #Ԥ AS ( + SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID + ,t1.FQTY,t1.FYEAR '' ,REPLACE(T1.DATEM,'FMONTH','') '·' + ,DATEADD(MONTH, DATEDIFF(MONTH, 0, CONCAT(T1.FYEAR,'-',REPLACE(T1.DATEM,'FMONTH',''),'-01')), 0) AS 'startDate' + FROM ( + SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSEQ,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID,FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12 + FROM T_PLN_FORECAST2YEAR t0 --ͷ + INNER JOIN T_PLN_FORECAST2YEARENTRY t0e on t0.FID = t0e.FID -- + ) t0 + UNPIVOT ( + FQTY FOR dateM IN (FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12) + ) AS t1 + +) +SELECT * + ,DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(MONTH, 1, t0.startDate)), -1) AS 'endDate' +FROM #Ԥ t0 +ORDER BY t0.startDate,t0.FSEQ \ No newline at end of file diff --git a/08.昶东/EastChanger/EastChanger.csproj b/08.昶东/EastChanger/EastChanger.csproj index 2a50f00..5544741 100644 --- a/08.昶东/EastChanger/EastChanger.csproj +++ b/08.昶东/EastChanger/EastChanger.csproj @@ -88,6 +88,7 @@ + diff --git a/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj b/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj index 190a681..baba843 100644 --- a/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj +++ b/14.宝锐/GZ.LJY000.Biori/GZ.LJY000.Biori.csproj @@ -131,6 +131,9 @@ + + + @@ -158,20 +161,27 @@ + + + + + + + @@ -180,6 +190,7 @@ + diff --git a/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/ListEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/ListEventPlugInEx.py new file mode 100644 index 0000000..068ebd6 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PLN_FORECAST/ListEventPlugInEx.py @@ -0,0 +1,52 @@ +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") + +from Kingdee.BOS import * +from Kingdee.BOS.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.List.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Bill 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 * + +def BarItemClick(e): + # 条码档案 + if e.BarItemKey.Equals("tbBarCodeMainEx"): + + selectedRow = this.ListView.SelectedRowsInfo; + if selectedRow == None or selectedRow.Count == 0: + return; + # raise Exception(JsonUtil.Serialize(selectedRow)) + entryIds = List[str]() + for row in selectedRow: + entryIds.Add(str(row.EntryPrimaryKeyValue)) + text ="FBILLENTRYID IN ({0})".format(",".join(entryIds)); + # 条码扫描 + listShowParameter = ListShowParameter(); + listShowParameter.FormId = "UNW_WMS_BARCODEMAIN"; + listShowParameter.ParentPageId = this.View.PageId; + listShowParameter.OpenStyle.ShowType = ShowType.MainNewTabPage; + # listShowParameter.OpenStyle.TagetKey = "FEntryTab_Code"; + listShowParameter.HiddenCloseButton = True; + listShowParameter.ListFilterParameter.Filter = text; + listShowParameter.ListFilterParameter.OrderBy = "FPRINTENTRYID,FPRINTSORT"; + this.View.ShowForm(listShowParameter); + return; diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.cs index dc424e5..fb49317 100644 --- a/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.cs @@ -21,13 +21,20 @@ using Kingdee.BOS.Core.Metadata.FieldElement; namespace GZ.LJY000.Biori.PRD_MO { - [Description("生产汇报单下推生产入库单#"), HotUpdate] + [Description("生产订单装换插件#"), HotUpdate] public class BillConvertEventPlugInEx : AbstractConvertPlugIn { + #region 因使用优联系统,暂时停用 + + + /// + /// 转换后事件 + /// + /// public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); - + return; var paraDIC = this.Option.GetVariables(); if (!paraDIC.ContainsKey("ScanEntry")) return; @@ -79,7 +86,7 @@ namespace GZ.LJY000.Biori.PRD_MO } } } - + #endregion /// /// 创建单据视图 /// @@ -141,6 +148,10 @@ namespace GZ.LJY000.Biori.PRD_MO base.OnQueryBuilderParemeter(e); } + /// + /// 获取数据源 + /// + /// public override void OnBeforeGetSourceData(BeforeGetSourceDataEventArgs e) { base.OnBeforeGetSourceData(e); @@ -211,9 +222,23 @@ namespace GZ.LJY000.Biori.PRD_MO base.OnBeforeGroupBy(e); } + /// + /// 选单条件策略 + /// + /// public override void OnParseFilter(ParseFilterEventArgs e) { base.OnParseFilter(e); + var fromId = e.SourceBusinessInfo.GetForm().Id; + e.FilterPolicySQL = e.FilterPolicySQL + $@" +NOT EXISTS ( + SELECT 1 FROM T_UNW_WMS_BARCODE uwbc + WHERE uwbc.FBILLID = t1.FID + AND t1.FENTRYID = uwbc.FBILLENTRYID + AND uwbc.FBILLFORMID = '{fromId}' +) +"; + e.PlugFilterDesc = "已生成条码的数据不能重复打印!"; } public override void OnGetConvertBusinessService(ConvertBusinessServiceEventArgs e) diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.py new file mode 100644 index 0000000..c96931d --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillConvertEventPlugInEx.py @@ -0,0 +1,39 @@ +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.ServiceHelper") +clr.AddReference("Newtonsoft.Json") +from Kingdee.BOS import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.DynamicForm import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.Metadata import * +from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn import * +from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.FormElement import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Orm.Metadata.DataEntity import * +from Kingdee.BOS.ServiceHelper import * +from System import * +from System.Collections.Generic import * +from System.ComponentModel import * +from System.Linq import * + +# python:已生成条码的数据不能重复生成! +def OnParseFilter(e): + # raise Exception(e.FilterPolicySQL) + fromId = e.SourceBusinessInfo.GetForm().Id; + e.FilterPolicySQL = e.FilterPolicySQL + """ + NOT EXISTS ( + SELECT 1 FROM T_UNW_WMS_BARCODE uwbc + WHERE uwbc.FBILLID = t1.FID + AND t1.FENTRYID = uwbc.FBILLENTRYID + AND uwbc.FBILLFORMID = '{0}' + ) + """.format(fromId); + e.PlugFilterDesc = "已生成条码的数据不能重复生成!"; + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillEventPlugInEx.cs new file mode 100644 index 0000000..4f7e9d3 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/BillEventPlugInEx.cs @@ -0,0 +1,16 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.PRD_MO +{ + [HotUpdate, Description("生产订单表单插件")] + public class BillEventPlugInEx : AbstractDynamicFormPlugIn + { + + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.cs new file mode 100644 index 0000000..4dbb2dc --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.PRD_MO +{ + public class ListEventPlugInEx + { + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.py new file mode 100644 index 0000000..068ebd6 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/ListEventPlugInEx.py @@ -0,0 +1,52 @@ +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") + +from Kingdee.BOS import * +from Kingdee.BOS.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.List.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.Metadata.EntityElement import * +from Kingdee.BOS.Core.Bill 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 * + +def BarItemClick(e): + # 条码档案 + if e.BarItemKey.Equals("tbBarCodeMainEx"): + + selectedRow = this.ListView.SelectedRowsInfo; + if selectedRow == None or selectedRow.Count == 0: + return; + # raise Exception(JsonUtil.Serialize(selectedRow)) + entryIds = List[str]() + for row in selectedRow: + entryIds.Add(str(row.EntryPrimaryKeyValue)) + text ="FBILLENTRYID IN ({0})".format(",".join(entryIds)); + # 条码扫描 + listShowParameter = ListShowParameter(); + listShowParameter.FormId = "UNW_WMS_BARCODEMAIN"; + listShowParameter.ParentPageId = this.View.PageId; + listShowParameter.OpenStyle.ShowType = ShowType.MainNewTabPage; + # listShowParameter.OpenStyle.TagetKey = "FEntryTab_Code"; + listShowParameter.HiddenCloseButton = True; + listShowParameter.ListFilterParameter.Filter = text; + listShowParameter.ListFilterParameter.OrderBy = "FPRINTENTRYID,FPRINTSORT"; + this.View.ShowForm(listShowParameter); + return; diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs new file mode 100644 index 0000000..855ce2a --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.cs @@ -0,0 +1,115 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.PRD_MO +{ + [HotUpdate, Description("生产订单服务插件#")] + public class OperationEventPlugInEx : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + + e.FieldKeys.Add("FBillType"); + e.FieldKeys.Add("FPackSrcBillNo"); + e.FieldKeys.Add("FFPackSrcSeq"); + e.FieldKeys.Add("FPackSrcType"); + + e.FieldKeys.Add("F_UHIK_Text_re5"); + e.FieldKeys.Add("F_UHIK_TEXT8"); + e.FieldKeys.Add("F_BQGG_Text"); + e.FieldKeys.Add("F_UHIK_Date"); + e.FieldKeys.Add("F_UHIK_Date1"); + e.FieldKeys.Add("FLot"); + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + //保存8 提交9 审核1 反审核26 删除3 + //if (this.FormOperation.OperationId == 1) + if (this.FormOperation.OperationId == 8) + { + var dataEntityList = new List(); + + var sqlL = new List(); + + foreach (var data in e.DataEntitys) + { + var BillType_Id = data["BillType_Id"].ToString(); + + var where = string.Empty; + foreach (var entity in data["TreeEntity"] as DynamicObjectCollection) + { + if (BillType_Id.Equals("0e74146732c24bec90178b6fe16a2d1c")) + { + var FPackSrcBillNo = entity["FPackSrcBillNo"].ToString(); + var FFPackSrcSeq = entity["FFPackSrcSeq"].Long2Int(); + var FPackSrcType = entity["FPackSrcType"].Long2Int(); + + where = $@"WHERE t0.FBILLNO = '{FPackSrcBillNo}' AND t0e.FSEQ = {FFPackSrcSeq}"; + } + else + { + var entityLink = entity["FTREEENTITY_Link"] as DynamicObjectCollection; + if (entityLink.Any()) + { + var link = entityLink.FirstOrDefault(); + var entryId = link["SId"].Long2Int(); + if (entryId > 0 && link["STableName"].ToString().Equals("T_PLN_FORECASTENTRY")) + where = $@"WHERE t0e.FENTRYID = {entryId}"; + } + } + + if (where.IsNullOrEmpty()) + continue; + + var baseSql = $@" +SELECT t0e.FENTRYID + ,'{entity["F_UHIK_Text_re5"]}' '存储条件' + ,'{entity["F_UHIK_TEXT8"]}' '标签货号' + ,'{entity["F_UHIK_Text"]}' '标签规格' + ,'{entity["F_UHIK_Date"]}' '生产日期' + ,'{entity["F_UHIK_Date1"]}' '有效期至' + ,{entity["Lot_Id"]} '标签批号' + ,'{entity["Lot_Text"]}' '标签批号_Text' +FROM T_PLN_FORECAST t0 + INNER JOIN T_PLN_FORECASTENTRY t0e on t0.FID = t0e.FID AND t0e.FPRODUCTTYPE = 2 +{where} +"; + sqlL.Add(baseSql); + } + } + + + if (sqlL.Any()) + { + var sql = $@"/*dialect*/ +WITH #基础数据 AS( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t1e SET t1e.F_UHIK_TEXT8 = t0.存储条件 + ,t1e.F_UHIK_TEXT_RE5 = t0.标签货号 + ,t1e.F_UHIK_TEXT2 = t0.标签规格 + ,t1e.F_UHIK_DATE = t0.生产日期 + ,t1e.F_UHIK_DATE1 = t0.有效期至 + ,t1e.F_UHIK_LOT = t0.标签批号 + ,t1e.F_UHIK_LOT_Text = t0.标签批号_Text +FROM #基础数据 t0 + INNER JOIN T_PLN_FORECASTENTRY t1e on t0.FENTRYID = t1e.FENTRYID +"; + + var resData = DBUtils.Execute(this.Context, sql); + } + } + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.py index a8fefc1..4e13d16 100644 --- a/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/PRD_MO/OperationEventPlugInEx.py @@ -32,6 +32,15 @@ from System.Collections.Generic import List from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.App.Core import * +def OnPreparePropertys(e): + e.FieldKeys.Add("FBillType"); + e.FieldKeys.Add("FPackSrcBillNo"); + e.FieldKeys.Add("FFPackSrcSeq"); + e.FieldKeys.Add("FPackSrcType"); + +def EndOperationTransaction(e): + if this.FormOperation.OperationId == 8: + raise Exception(JsonUtil.Serialize(e.DataEntitys)) # def AfterDoOperation(e): # # 保存8提交9审核1反审核26 # # if e.Operation.Operation == "DoBarCodePrintEx": diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs index 8ed0def..86de54a 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs @@ -47,27 +47,9 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK var rows = result.ReturnData as DynamicObjectCollection; if (rows.Any()) { - //var parentRows = rows.Where(w => !w["FParentRowId"].ToString().IsNullOrEmpty()); - //var subRows = rows.Where(w => w["FParentRowId"].ToString().IsNullOrEmpty()); foreach (var item in entity) { - DynamicObject row = null; - //var parentRowId = item["ParentRowId"].ToString(); - //var rowId = item["RowId"].ToString(); - - //if (parentRowId.IsNullOrEmpty()) - //{ - // //var row = rows.FirstOrDefault(w => w["FRowId"].ToString() == item["RowId"].ToString()); - // row = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int()); - //} - //else - //{ - // var parentMatId = item["ParentMatId_Id"].Long2Int(); - // var parentRow = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == parentMatId); - // row = subRows.FirstOrDefault(w => w["FParentRowId"].ToString() == parentRow["FRowId"].ToString() && w["FMaterialID_Id"] == item["MaterialID_Id"]); - //} - - row = rows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int()); + DynamicObject row = rows.FirstOrDefault(w => w["FPackBillNo"].IsNullOrEmpty() && w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int()); if (row != null) { diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs index 38954b9..a6f018b 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs @@ -22,9 +22,10 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); - e.FieldKeys.Add("FPackBillSeq"); - e.FieldKeys.Add("FPackBillEntryId"); + //e.FieldKeys.Add("FPackBillSeq"); + //e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FRealQty"); + e.FieldKeys.Add("FPackBarCode"); } public override void OnAddValidators(AddValidatorsEventArgs e) @@ -33,12 +34,58 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK //添加检查校验器: if (this.FormOperation.OperationId == 1) { - var validator = new VaildatorEventPlugInEx();//新增的校验器 - validator.EntityKey = "FEntity"; - e.Validators.Add(validator);//添加校验器 + //var validator = new VaildatorEventPlugInEx();//新增的校验器 + //validator.EntityKey = "FEntity"; + //e.Validators.Add(validator);//添加校验器 } } + /// + /// + /// + /// + /// + private DynamicObjectCollection DoGetPackInfo(List sqlL) + { + var sqlUnion = string.Join(" UNION ALL ", sqlL); + var sql = $@"/*dialect*/ + +WITH #基础数据 AS ( + {sqlUnion} +) +SELECT tt.*,t0.FBARCODE,t0.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID + ,t1.*,t2.FNUMERATOR,t2.FDENOMINATOR +FROM #基础数据 tt + INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode + CROSS APPLY ( + SELECT t1.FBILLNO,t1e.FEntryID,t1e.FSeq,t1e.FQTY,t1e.FGZLQTY,t1e.FZGSQTY,t1e.FUNITID,t1e.FFYLQTY,t1.FBOMID,t1e.FMATERIALID + ,t1.FQTY AS 'MainQty' + FROM T_PRD_PACKAGEINSTOCK t1 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t1e on t1.FID = t1e.FID + WHERE t1.FSRCBILLENTRYID = t0.FBILLENTRYID + AND t1e.FMATERIALID = tt.MaterialId + AND tt.FRowType = t1e.FPRODUCTTYPE + UNION ALL + SELECT t1.FBILLNO,0 FEntryID,0,t1.FQTY,0,0,0,t1.FFYLQTY,t1.FBOMID,t1.FMATERIALID + ,t1.FQTY AS 'MainQty' + FROM T_PRD_PACKAGEINSTOCK t1 + WHERE t1.FSRCBILLENTRYID = t0.FBILLENTRYID + AND t1.FMATERIALID = tt.MaterialId + AND tt.FRowType = t1.FPRODUCTTYPE + ) t1 + LEFT JOIN T_ENG_BOMCHILD t2 on t2.FID = t1.FBOMID AND t1.FMATERIALID = t2.FMATERIALID +ORDER BY tt.EntrySeq + +"; + + var res = DBUtils.ExecuteDynamicObject(this.Context, sql); + if (res != null && res.Count > 0) + return res; + + return null; + } + + public override void EndOperationTransaction(EndOperationTransactionArgs e) { base.EndOperationTransaction(e); @@ -75,12 +122,67 @@ namespace GZ.LJY000.Biori.SAL_OUTSTOCK } } - if (isInStock) - DoComputePackgeInStockQty(sqlL); - else - DoComputePackgeOutStockQty(sqlL); + //if (isInStock) + // DoComputePackgeInStockQty(sqlL); + //else + // DoComputePackgeOutStockQty(sqlL); + + DoComputePackgeQty(sqlL, !isInStock); } + /// + /// 入库操作 + /// + /// + private void DoComputePackgeQty(List sqlL, bool isOutStock) + { + if (sqlL.Any()) + { + var minus = isOutStock ? -1 : 1; + + var updSqlL = $@"/*dialect*/ + +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0 SET t0.FQTY = t0.FQTY + (t1.QTY * {minus}) + ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - (t1.QTY * {minus}) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + +"; + + //更新组装单信 + var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t0e.FQTY / t3.FQTY * (t1.QTY * {minus} / t2.FDENOMINATOR * t2.FNUMERATOR)) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID + CROSS APPLY ( + SELECT SUM(t3e.FQTY) FQTY + FROM T_PRD_PACKAGEINSTOCKENTRY t3e + WHERE t3e.FID = t0e.FID AND t3e.FMATERIALID = t0e.FMATERIALID + GROUP BY t3e.FID,t3e.FMATERIALID + ) t3 +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } + return; + } + } + + /// /// 入库操作 /// @@ -105,6 +207,22 @@ WHERE 1 = 1 //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } @@ -127,13 +245,28 @@ UPDATE t0 SET t0.FQTY = t0.FQTY - t1.QTY FROM T_PRD_PACKAGEINSTOCK t0 INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO WHERE 1 = 1 - AND t0.FDOCUMENTSTATUS = 'C' - AND (t0.FQTY - t1.QTY) >= 0 - + AND t0.FDOCUMENTSTATUS = 'C' AND (t0.FQTY - t1.QTY) >= 0 "; //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY - (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID + AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' + +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py new file mode 100644 index 0000000..05d1972 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.py @@ -0,0 +1,96 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FRowType"); + e.FieldKeys.Add("FPackBillNo"); + # e.FieldKeys.Add("FPackBillSeq"); + # e.FieldKeys.Add("FPackBillEntryId"); + e.FieldKeys.Add("FRealQty"); + e.FieldKeys.Add("FPackBarCode"); + +def BeforeDoSaveExecute(e): + # if this.FormOperation.OperationId == 8: + for entity in e.DataEntities: + entries = entity["SAL_OUTSTOCKENTRY"] + sqlL = List[str](); + for idx,entry in enumerate(entries): + rowType = 1 if entry["RowType"] == "Parent" else 2; + if rowType == 2 or rowType == 1: + packBarCode = "" if entry["FPackBarCode"] == None else entry["FPackBarCode"].strip() + packBillNo = "" if entry["FPackBillNo"] == None else entry["FPackBillNo"].strip() + + if (rowType == 1 and packBillNo == "") or (rowType == 2 and packBarCode != "" and packBillNo == ""): + materialId = entry["MaterialID_Id"] + entryId = entry["Id"] + rowId = entry["RowId"] + pRowId = entry["ParentRowId"] + sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode',{4} AS 'FRowType','{5}' AS 'rowId','{6}' AS 'pRwoId'".format(materialId,entryId,idx,packBarCode,rowType,rowId,pRowId)); + + if sqlL.Count > 0: + sqlUnion = " UNION ALL ".join(sqlL); + sql = """/*dialect*/ + +WITH #基础数据 AS ( + {0} +) +, #初步处理 AS ( + SELECT t0.MaterialId,t0.EntryId,t0.EntrySeq + ,CASE WHEN t0.FRowType = 1 THEN ( + SELECT TOP 1 t1.PackBarCode FROM #基础数据 t1 WHERE t1.pRwoId = t0.rowId + ) ELSE t0.PackBarCode END 'PackBarCode' + ,t0.FRowType,t0.rowId,t0.pRwoId + FROM #基础数据 t0 +) +SELECT tt.* + ,t0.FBARCODE,t1.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID +FROM #初步处理 tt + INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode + INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FSRCBILLENTRYID = t0.FBILLENTRYID +WHERE t0.FBILLFORMID = 'PLN_FORECAST' +ORDER BY tt.EntrySeq + + """.format(sqlUnion); + # raise Exception(sql); + + res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql) + + if res != None and res.Count > 0: + for item in res: + seq = item["EntrySeq"]; + entries[seq]["FPackBarCode"] = item["PackBarCode"]; + entries[seq]["FPackBillNo"] = item["FBILLNO"]; + # entries[seq]["FPackBillSeq"] = item["FSeq"]; + # entries[seq]["FPackBillEntryId"] = item["FEntryID"]; + + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/SAL_RETURNSTOCK/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/SAL_RETURNSTOCK/OperationEventPlugInEx.cs index 0b49e54..748b5fb 100644 --- a/14.宝锐/GZ.LJY000.Biori/SAL_RETURNSTOCK/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/SAL_RETURNSTOCK/OperationEventPlugInEx.cs @@ -21,9 +21,10 @@ namespace GZ.LJY000.Biori.SAL_RETURNSTOCK e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); - e.FieldKeys.Add("FPackBillSeq"); - e.FieldKeys.Add("FPackBillEntryId"); + //e.FieldKeys.Add("FPackBillSeq"); + //e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FRealQty"); + e.FieldKeys.Add("FPackBarCode"); } public override void OnAddValidators(AddValidatorsEventArgs e) @@ -31,11 +32,10 @@ namespace GZ.LJY000.Biori.SAL_RETURNSTOCK base.OnAddValidators(e); if (this.FormOperation.OperationId == 1) { - - //添加检查校验器: - var validator = new VaildatorEventPlugInEx();//新增的校验器 - validator.EntityKey = "FEntity"; - e.Validators.Add(validator);//添加校验器 + ////添加检查校验器: + //var validator = new VaildatorEventPlugInEx();//新增的校验器 + //validator.EntityKey = "FEntity"; + //e.Validators.Add(validator);//添加校验器 } } @@ -75,10 +75,60 @@ namespace GZ.LJY000.Biori.SAL_RETURNSTOCK } } - if (isInStock) - DoComputePackgeInStockQty(sqlL); - else - DoComputePackgeOutStockQty(sqlL); + //if (isInStock) + // DoComputePackgeInStockQty(sqlL); + //else + // DoComputePackgeOutStockQty(sqlL); + + DoComputePackgeQty(sqlL, !isInStock); + } + + private void DoComputePackgeQty(List sqlL, bool isOutStock) + { + if (sqlL.Any()) + { + var minus = isOutStock ? -1 : 1; + + var updSqlL = $@"/*dialect*/ + +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0 SET t0.FQTY = t0.FQTY + (t1.QTY * {minus}) + ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - (t1.QTY * {minus}) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + +"; + + //更新组装单信 + var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t0e.FQTY / t3.FQTY * (t1.QTY * {minus} / t2.FDENOMINATOR * t2.FNUMERATOR)) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID + CROSS APPLY ( + SELECT SUM(t3e.FQTY) FQTY + FROM T_PRD_PACKAGEINSTOCKENTRY t3e + WHERE t3e.FID = t0e.FID AND t3e.FMATERIALID = t0e.FMATERIALID + GROUP BY t3e.FID,t3e.FMATERIALID + ) t3 +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } + return; + } } /// @@ -105,6 +155,22 @@ WHERE 1 = 1 //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } @@ -134,6 +200,23 @@ WHERE 1 = 1 //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY - (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } diff --git a/14.宝锐/GZ.LJY000.Biori/SQLServer/获取.sql b/14.宝锐/GZ.LJY000.Biori/SQLServer/获取.sql index 8bcf8d4..978e26d 100644 --- a/14.宝锐/GZ.LJY000.Biori/SQLServer/获取.sql +++ b/14.宝锐/GZ.LJY000.Biori/SQLServer/获取.sql @@ -151,4 +151,150 @@ FROM T_PRD_PACKAGEINSTOCK t0 LEFT JOIN # tt on tt.FENTRYID = t0e.FEntryID WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' - --AND t0.FBILLNO = 'ZZRK202411130003' \ No newline at end of file + --AND t0.FBILLNO = 'ZZRK202411130003' + + +WITH # AS ( + SELECT 100125 FENTRYID,'ZZRK202411130003' BillNo, 50 QTY +) +SELECT t0.FBILLNO,t0e.FEntryID,t0e.FID,t0.FQTY AS 'PQty' + ,t0.FOUTSTOCKQTY + ,t0e.FQTY,t0e.FZGSQTY,t0e.FGZLQty,t1.baseQty,t2.dataQty + ,t3e.FNUMERATOR,t3e.FDENOMINATOR +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + CROSS APPLY ( + SELECT COUNT(1) AS baseQty + FROM # t1 + WHERE t1.BillNo = t0.FBILLNO + GROUP BY t1.BillNo + ) t1 + CROSS APPLY ( + SELECT COUNT(1) AS dataQty + FROM T_PRD_PACKAGEINSTOCKENTRY t2e + WHERE t2e.FID = t0e.FID + ) t2 + INNER JOIN T_ENG_BOM t3 on t3.FID = t0.FBOMID + INNER JOIN T_ENG_BOMCHILD t3e on t3e.FID = t3.FID AND t3e.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + + + +SELECT t0e.FENTRYID,t0e.FQTY + ,ISNULL(t1.ѡϸ,0) 'ѡϸ' + --,ISNULL(t2.ѡϸ,0) 'δ˺ϸ' + ,t3e.FRPTQTY +FROM T_PRD_MO t0 + INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID + OUTER APPLY ( + SELECT t1e.FMOENTRYID,t1e.FMOBILLNO,SUM(t1e.FFINISHQTY) 'ѡϸ' + FROM T_PRD_MORPT t1 + INNER JOIN T_PRD_MORPTENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_PRD_MORPTENTRY_A t1e_a on t1e_a.FENTRYID = t1e.FENTRYID + WHERE t1e.FMOENTRYID = t0e.FENTRYID AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1e.FMOENTRYID,t1e.FMOBILLNO + ) t1 + --OUTER APPLY ( + -- SELECT t2e.FMOENTRYID,t2e.FMOBILLNO,SUM(t2e_a.FSTOCKINQUASELQTY) 'ѡϸ' + -- FROM T_PRD_MORPT t2 + -- INNER JOIN T_PRD_MORPTENTRY t2e on t2.FID = t2e.FID + -- INNER JOIN T_PRD_MORPTENTRY_A t2e_a on t2e_a.FENTRYID = t2e.FENTRYID + -- WHERE t2e.FMOENTRYID = t0e.FENTRYID AND t2.FDOCUMENTSTATUS != 'C' + -- GROUP BY t2e.FMOENTRYID,t2e.FMOBILLNO + --) t2 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t3e on t3e.FMOENTRYID = t0e.FENTRYID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + +--20241211 ۳ⵥ +WITH # AS ( + SELECT 156743 'MaterialId',144096 'EntryId',1 'EntrySeq' ,'' AS 'PackBarCode',1 'FRowType','3473790b-c91b-a08a-11ef-b7645430fc76' rowId,'' pRwoId + UNION ALL SELECT 125771 'MaterialId',144097 'EntryId',2 'EntrySeq' ,'000107' AS 'PackBarCode',2 'FRowType','3473790b-c91b-a08a-11ef-b76464352f75' rowId,'3473790b-c91b-a08a-11ef-b7645430fc76' pRwoId + UNION ALL SELECT 126471 'MaterialId',144098 'EntryId',3 'EntrySeq' ,'000107' AS 'PackBarCode',2 'FRowType','3473790b-c91b-a08a-11ef-b76464352f76' rowId,'3473790b-c91b-a08a-11ef-b7645430fc76' pRwoId + UNION ALL SELECT 126146 'MaterialId',144099 'EntryId',4 'EntrySeq' ,'000107' AS 'PackBarCode',2 'FRowType','3473790b-c91b-a08a-11ef-b76464352f77' rowId,'3473790b-c91b-a08a-11ef-b7645430fc76' pRwoId +) +, # AS ( + SELECT t0.MaterialId,t0.EntryId,t0.EntrySeq + ,CASE WHEN t0.PackBarCode = '' and t0.FRowType = 1 THEN ( + SELECT TOP 1 t1.PackBarCode FROM # t1 WHERE t1.pRwoId = t0.rowId + ) ELSE t0.PackBarCode END 'PackBarCode' + ,t0.FRowType,t0.rowId,t0.pRwoId + FROM # t0 +) +SELECT tt.*,t0.FBARCODE,t0.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID + ,t1.*,t2.FNUMERATOR,t2.FDENOMINATOR +FROM # tt + INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode + CROSS APPLY ( + SELECT t1.FBILLNO,t1e.FEntryID,t1e.FSeq,t1e.FQTY,t1e.FGZLQTY,t1e.FZGSQTY,t1e.FUNITID,t1e.FFYLQTY,t1.FBOMID,t1e.FMATERIALID + ,t1.FQTY AS 'MainQty' + FROM T_PRD_PACKAGEINSTOCK t1 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t1e on t1.FID = t1e.FID + WHERE t1.FSRCBILLENTRYID = t0.FBILLENTRYID + AND t1e.FMATERIALID = tt.MaterialId + AND tt.FRowType = t1e.FPRODUCTTYPE + UNION ALL + SELECT t1.FBILLNO,0 FEntryID,0,t1.FQTY,0,0,0,t1.FFYLQTY,t1.FBOMID,t1.FMATERIALID + ,t1.FQTY AS 'MainQty' + FROM T_PRD_PACKAGEINSTOCK t1 + WHERE t1.FSRCBILLENTRYID = t0.FBILLENTRYID + AND t1.FMATERIALID = tt.MaterialId + AND tt.FRowType = t1.FPRODUCTTYPE + ) t1 + LEFT JOIN T_ENG_BOMCHILD t2 on t2.FID = t1.FBOMID AND t1.FMATERIALID = t2.FMATERIALID +ORDER BY tt.EntrySeq + +--2024-12-13 +WITH # AS ( + SELECT 100304 FENTRYID,'ZZRK202412130001' BillNo, 0.100 QTY ,0 FYLCK + UNION ALL SELECT 100305 FENTRYID,'ZZRK202412130001' BillNo, 1.25 QTY ,0 FYLCK + UNION ALL SELECT 100306 FENTRYID,'ZZRK202412130001' BillNo, 0.051 QTY ,0 FYLCK +) +, # AS ( + SELECT t0.FBILLNO,t0e.FEntryID,t0e.FID + ,t0.FQTY AS 'PQty' + ,(t0e.FQTY - t0e.FFYLQTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR AS '' + ,(t6.QTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR * t5.F_UNITIDHS AS 'ʵʳ⸸' + ,(t0e.FFYLQTY) /t2e.FNUMERATOR * t2e.FDENOMINATOR AS '' + ,t0.FOUTSTOCKQTY + ,t0e.FQTY + ,t0e.FZGSQTY,t0e.FGZLQty + ,t0e.FFYLQTY + ,t2e.FNUMERATOR,t2e.FDENOMINATOR + ,t5.F_UNITIDHS + ,t6.FYLCK + ,ROW_NUMBER() OVER (PARTITION BY t0.FID ORDER BY t0e.FENTRYID) RN + FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_ENG_BOM t2 on t2.FID = t0.FBOMID + INNER JOIN T_ENG_BOMCHILD t2e on t2e.FID = t2.FID AND t2e.FMATERIALID = t0e.FMATERIALID + INNER JOIN T_BD_MATERIAL t5 on t5.FMATERIALID = t0e.FMATERIALID + INNER JOIN # t6 on t6.FENTRYID = t0e.FEntryID + WHERE 1 = 1 +) +UPDATE t1 SET t1.FQTY = t1.FQTY - t0.ʵʳ⸸ + ,t1.FOUTSTOCKQTY = t1.FOUTSTOCKQTY + t0.ʵʳ⸸ +FROM # t0 + INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FID = t0.FID + CROSS APPLY ( + SELECT COUNT(1) bQty + FROM # t2 + WHERE t2.FID = t0.FID + GROUP BY t2.FID + HAVING AVG(t2.ʵʳ⸸) = t0.ʵʳ⸸ + ) t2 + CROSS APPLY ( + SELECT COUNT(1) AS dQty + FROM T_PRD_PACKAGEINSTOCKENTRY t4e + WHERE t4e.FID = t0.FID + GROUP BY t4e.FID + ) t4 +WHERE t2.bQty = t4.dQty + AND t0.FYLCK = 0 + AND t0.RN = 1 + +--2024-12-16 ɨ¼ +SELECT t0.FTOROWID,t0.FBARCODEID,t0.FBOXCODEID,t0.* +FROM T_UNW_WMS_NORMALRECORD t0 +WHERE t0.FTOFORMID = 'SAL_OUTSTOCK' +ORDER BY t0.FTOROWID \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.cs index dbbdb79..ea1fda7 100644 --- a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.cs @@ -12,17 +12,27 @@ using System.Text; namespace GZ.LJY000.Biori.STK_MisDelivery { - [HotUpdate, Description("其他出库单服务操作插件")] + [HotUpdate, Description("其他出库单服务操作插件#")] public class OperationEventPlugInEx : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); + #region base + e.FieldKeys.Add("FStockDirect"); + #endregion + + #region item + e.FieldKeys.Add("FSeq"); e.FieldKeys.Add("FPackBillNo"); - e.FieldKeys.Add("FPackBillSeq"); - e.FieldKeys.Add("FPackBillEntryId"); + //e.FieldKeys.Add("FPackBillSeq"); + //e.FieldKeys.Add("FPackBillEntryId"); + e.FieldKeys.Add("FPackBarCode"); //套件码 e.FieldKeys.Add("FQty"); + e.FieldKeys.Add("F_QJCG_Assistant1"); //检料类型 + //e.FieldKeys.Add("FRowType"); + #endregion } public override void OnAddValidators(AddValidatorsEventArgs e) @@ -30,17 +40,15 @@ namespace GZ.LJY000.Biori.STK_MisDelivery base.OnAddValidators(e); if (this.FormOperation.OperationId == 1) { - - //添加检查校验器: - var validator = new VaildatorEventPlugInEx();//新增的校验器 - validator.EntityKey = "FEntity"; - e.Validators.Add(validator);//添加校验器 + ////添加检查校验器: + //var validator = new VaildatorEventPlugInEx();//新增的校验器 + //validator.EntityKey = "FEntity"; + //e.Validators.Add(validator);//添加校验器 } } public override void EndOperationTransaction(EndOperationTransactionArgs e) { - base.EndOperationTransaction(e); //保存8 提交9 审核1 反审核26 删除3 if (this.FormOperation.OperationId == 1) { @@ -50,6 +58,7 @@ namespace GZ.LJY000.Biori.STK_MisDelivery { DoComputePackgeQty(e.DataEntitys, true); } + base.EndOperationTransaction(e); } /// @@ -60,29 +69,34 @@ namespace GZ.LJY000.Biori.STK_MisDelivery private void DoComputePackgeQty(DynamicObject[] dataEntitys, bool isInStock) { var dataEntityList = new List(); - var sqlL = new Dictionary(); + var sqlL = new List(); //# ! 装管公式(毫升):管数 = 数量 / 装管量(ml) / 1.05 //# ! 装管公式(微升):管数 = 数量 / 装管量(ml) / 1000 / 1.05 foreach (var data in dataEntitys) { + var stockDirect = data["StockDirect"].ToString(); foreach (var item in data["BillEntry"] as DynamicObjectCollection) { var packBillNo = item["FPackBillNo"].ToString(); + //var packBillEntryId = item["FPackBillEntryId"].ToString(); + var materialId = item["MaterialId_Id"].Long2Int(); if (!packBillNo.IsNullOrEmpty()) { - if (sqlL.ContainsKey(packBillNo)) - continue; - sqlL.Add(packBillNo, $" SELECT '{packBillNo}' AS FBILLNO , {item["Qty"]} AS QTY "); + var fylck = item["F_QJCG_Assistant1_Id"].ToString().Equals("63876e213ea87e"); + var minus = stockDirect == "RETNRU" ? -1 : 1; + minus = minus * (isInStock ? -1 : 1); + sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO,{materialId} FMATERIALID, {item["Qty"]} * {minus} AS QTY ,{(fylck ? 1 : 0)} FYLCK"); } } } if (isInStock) - DoComputePackgeInStockQty(sqlL.Values.ToList()); + DoComputePackgeInStockQty(sqlL); else - DoComputePackgeOutStockQty(sqlL.Values.ToList()); + DoComputePackgeOutStockQty(sqlL); + } /// @@ -93,22 +107,80 @@ namespace GZ.LJY000.Biori.STK_MisDelivery { if (sqlL.Any()) { + var updHeadSql = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +, #关联数据 AS ( + SELECT t0.FBILLNO,t0e.FEntryID,t0e.FID + ,t0.FQTY AS 'PQty' + ,(t0e.FQTY - t0e.FFYLQTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR AS '父项数量' + ,(t6.QTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR * t5.F_UNITIDHS AS '实际出库父项数量' + ,(t0e.FFYLQTY) /t2e.FNUMERATOR * t2e.FDENOMINATOR AS '富余量' + ,t0.FOUTSTOCKQTY + ,t0e.FQTY + ,t0e.FZGSQTY,t0e.FGZLQty + ,t0e.FFYLQTY + ,t2e.FNUMERATOR,t2e.FDENOMINATOR + ,t5.F_UNITIDHS + ,t6.FYLCK + ,ROW_NUMBER() OVER (PARTITION BY t0.FID ORDER BY t0e.FENTRYID) RN + FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_ENG_BOM t2 on t2.FID = t0.FBOMID + INNER JOIN T_ENG_BOMCHILD t2e on t2e.FID = t2.FID AND t2e.FMATERIALID = t0e.FMATERIALID + INNER JOIN T_BD_MATERIAL t5 on t5.FMATERIALID = t0e.FMATERIALID + INNER JOIN #基础数据 t6 on t6.FENTRYID = t0e.FEntryID + WHERE 1 = 1 +) +UPDATE t1 SET t1.FQTY = t1.FQTY + t0.实际出库父项数量 + ,t1.FOUTSTOCKQTY = t1.FOUTSTOCKQTY - t0.实际出库父项数量 +FROM #关联数据 t0 + INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FID = t0.FID + CROSS APPLY ( + SELECT COUNT(1) bQty + FROM #关联数据 t2 + WHERE t2.FID = t0.FID + GROUP BY t2.FID + HAVING AVG(t2.实际出库父项数量) = t0.实际出库父项数量 + ) t2 + CROSS APPLY ( + SELECT COUNT(1) AS dQty + FROM T_PRD_PACKAGEINSTOCKENTRY t4e + WHERE t4e.FID = t0.FID + GROUP BY t4e.FID + ) t4 +WHERE t2.bQty = t4.dQty + AND t0.FYLCK = 0 + AND t0.RN = 1 +"; + //var res = DBUtils.Execute(this.Context, updHeadSql); var updSqlL = $@"/*dialect*/ WITH #基础数据 AS ( {string.Join(" UNION ALL ", sqlL)} ) -UPDATE t0 SET t0.FQTY = t0.FQTY + t1.QTY - ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - t1.QTY +, #汇总数据 AS ( + SELECT t0.BillNo,t0.FMATERIALID,SUM(t0.Qty) Qty + FROM #基础数据 t0 + GROUP BY t0.BillNo,t0.FMATERIALID +) +--SELECT t0.FBILLNO,t1.FMATERIALID,t1.Qty * t0e.FQTY / t2.总数量,t3.F_UNITIDHS +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t1.Qty * t0e.FQTY / t2.总数量 * t3.F_UNITIDHS) FROM T_PRD_PACKAGEINSTOCK t0 - INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO -WHERE 1 = 1 - AND t0.FDOCUMENTSTATUS = 'C' + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0e.FID = t0.FID + INNER JOIN #汇总数据 t1 on t1.BillNo = t0.FBILLNO AND t0e.FMATERIALID = t1.FMATERIALID + CROSS APPLY ( + SELECT SUM(t2e.FQTY) AS '总数量' + FROM T_PRD_PACKAGEINSTOCKENTRY t2e + WHERE t2e.FID = t0e.FID AND t2e.FMATERIALID = t0e.FMATERIALID + ) t2 + INNER JOIN T_BD_MATERIAL t3 on t3.FMATERIALID = t0e.FMATERIALID "; //更新组装单信 - var resData = DBUtils.Execute(this.Context, updSqlL); + //var resData = DBUtils.Execute(this.Context, updSqlL); return; } } @@ -121,23 +193,72 @@ WHERE 1 = 1 { if (sqlL.Any()) { + var updHeadSql = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +, #关联数据 AS ( + SELECT t0.FBILLNO,t0e.FEntryID,t0e.FID + ,t0.FQTY AS 'PQty' + ,(t0e.FQTY - t0e.FFYLQTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR AS '父项数量' + ,(t6.QTY)/ t2e.FNUMERATOR * t2e.FDENOMINATOR * t5.F_UNITIDHS AS '实际出库父项数量' + ,(t0e.FFYLQTY) /t2e.FNUMERATOR * t2e.FDENOMINATOR AS '富余量' + ,t0.FOUTSTOCKQTY + ,t0e.FQTY + ,t0e.FZGSQTY,t0e.FGZLQty + ,t0e.FFYLQTY + ,t2e.FNUMERATOR,t2e.FDENOMINATOR + ,t5.F_UNITIDHS + ,t6.FYLCK + ,ROW_NUMBER() OVER (PARTITION BY t0.FID ORDER BY t0e.FENTRYID) RN + FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_ENG_BOM t2 on t2.FID = t0.FBOMID + INNER JOIN T_ENG_BOMCHILD t2e on t2e.FID = t2.FID AND t2e.FMATERIALID = t0e.FMATERIALID + INNER JOIN T_BD_MATERIAL t5 on t5.FMATERIALID = t0e.FMATERIALID + INNER JOIN #基础数据 t6 on t6.FENTRYID = t0e.FEntryID + WHERE 1 = 1 +) +UPDATE t1 SET t1.FQTY = t1.FQTY - t0.实际出库父项数量 + ,t1.FOUTSTOCKQTY = t1.FOUTSTOCKQTY + t0.实际出库父项数量 +FROM #关联数据 t0 + INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FID = t0.FID + CROSS APPLY ( + SELECT COUNT(1) bQty + FROM #关联数据 t2 + WHERE t2.FID = t0.FID + GROUP BY t2.FID + HAVING AVG(t2.实际出库父项数量) = t0.实际出库父项数量 + ) t2 + CROSS APPLY ( + SELECT COUNT(1) AS dQty + FROM T_PRD_PACKAGEINSTOCKENTRY t4e + WHERE t4e.FID = t0.FID + GROUP BY t4e.FID + ) t4 +WHERE t2.bQty = t4.dQty + AND t0.FYLCK = 0 + AND t0.RN = 1 +"; + //var res = DBUtils.Execute(this.Context, updHeadSql); + var updSqlL = $@"/*dialect*/ WITH #基础数据 AS ( {string.Join(" UNION ALL ", sqlL)} ) -UPDATE t0 SET t0.FQTY = t0.FQTY - t1.QTY - ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY + t1.QTY -FROM T_PRD_PACKAGEINSTOCK t0 - INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO +UPDATE t0e SET t0e.FQTY = t0e.FQTY - (tt.QTY * t1.F_UNITIDHS) +FROM #基础数据 tt + INNER JOIN T_PRD_PACKAGEINSTOCK t0 on t0.FBILLNO = tt.BillNo + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on tt.FENTRYID = t0e.FEntryID + INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' - AND (t0.FQTY - t1.QTY) >= 0 "; //更新组装单信 - var resData = DBUtils.Execute(this.Context, updSqlL); + //var resData = DBUtils.Execute(this.Context, updSqlL); return; } } diff --git a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.py new file mode 100644 index 0000000..72e227a --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/OperationEventPlugInEx.py @@ -0,0 +1,80 @@ +#引入clr运行库 +import clr +#添加对cloud插件开发的常用组件引用 +clr.AddReference('System') +clr.AddReference('System.Data') +clr.AddReference('Kingdee.BOS') +clr.AddReference('Kingdee.BOS.Core') +clr.AddReference('Kingdee.BOS.App') +clr.AddReference('Kingdee.BOS.App.Core') +clr.AddReference('Kingdee.BOS.Contracts') +clr.AddReference('Kingdee.BOS.DataEntity') +clr.AddReference('Kingdee.BOS.ServiceHelper') +#dairycloud基础库中的常用实体对象(分命名空间导入,不会递归导入) +from Kingdee.BOS.Core import * +from Kingdee.BOS.Util import * +from Kingdee.BOS.Core.Bill import * +from Kingdee.BOS.Core.List import * +from Kingdee.BOS.Core.Bill.PlugIn import * +from Kingdee.BOS.Orm.DataEntity import * +from Kingdee.BOS.Core.DynamicForm.PlugIn import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * +from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * +from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import * +from System import * +from System.Data import * +from Kingdee.BOS.App.Data import * +from Kingdee.BOS.App import * +from Kingdee.BOS.Orm import * +from Kingdee.BOS.Contracts import * +from System.Collections.Generic import List +from Kingdee.BOS.ServiceHelper import * +from Kingdee.BOS.App.Core import * + +def OnPreparePropertys(e): + e.FieldKeys.Add("FSeq"); + e.FieldKeys.Add("FPackBillNo"); + e.FieldKeys.Add("FPackBarCode"); + +def BeforeDoSaveExecute(e): + for entity in e.DataEntities: + entries = entity["BillEntry"] + sqlL = List[str](); + for idx,entry in enumerate(entries): + packBarCode = "" if entry["FPackBarCode"] == None else entry["FPackBarCode"].strip() + packBillNo = "" if entry["FPackBillNo"] == None else entry["FPackBillNo"].strip() + + if packBarCode != "" and packBillNo == "": + materialId = entry["MaterialID_Id"] + entryId = entry["Id"] + sqlL.Add("SELECT {0} 'MaterialId',{1} 'EntryId',{2} 'EntrySeq','{3}' AS 'PackBarCode'".format(materialId,entryId,idx,packBarCode)); + + if sqlL.Count > 0: + sqlUnion = " UNION ALL ".join(sqlL); + sql = """/*dialect*/ + +WITH #基础数据 AS ( + {0} +) +SELECT tt.* + ,t0.FBARCODE,t1.FBILLNO,t0.FBILLID,t0.FBILLENTRYID,t0.FBILLSEQ,t0.FBILLFORMID +FROM #基础数据 tt + INNER JOIN T_UNW_WMS_BARCODE t0 on t0.FBARCODE = tt.PackBarCode + INNER JOIN T_PRD_PACKAGEINSTOCK t1 on t1.FSRCBILLENTRYID = t0.FBILLENTRYID +WHERE t0.FBILLFORMID = 'PLN_FORECAST' +ORDER BY tt.EntrySeq + + """.format(sqlUnion); + # raise Exception(sql); + + res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql) + + if res != None and res.Count > 0: + for item in res: + seq = item["EntrySeq"]; + entries[seq]["FPackBarCode"] = item["PackBarCode"]; + entries[seq]["FPackBillNo"] = item["FBILLNO"]; + # entries[seq]["FPackBillSeq"] = item["FSeq"]; + # entries[seq]["FPackBillEntryId"] = item["FEntryID"]; + + return; \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/更新组装单信息.sql b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/更新组装单信息.sql new file mode 100644 index 0000000..6e588b0 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/STK_MisDelivery/更新组装单信息.sql @@ -0,0 +1,26 @@ +WITH #ⵥ AS ( + SELECT t0.FBILLNO + --,CASE WHEN t0e.F_QJCG_ASSISTANT2 = '63876e213ea87e' THEN 1 ELSE 0 END '' + --,t0e.FENTRYID,t0e.FID,t0e.FSEQ + ,t0e.FMATERIALID + --,t0e.FSTOCKID,t0e.FSTOCKLOCID + ,SUM(t0e.FQTY) '' + ,t0e.FPACKBILLNO,t0e.FPACKBARCODE + FROM T_STK_MISDELIVERY t0 + INNER JOIN T_STK_MISDELIVERYENTRY t0e on t0.FID = t0e.FID + WHERE t0.FBILLNO = 'ZHBR-QTCK241224002' + GROUP BY t0.FBILLNO,t0e.FPACKBILLNO,t0e.FPACKBARCODE,t0e.FMATERIALID--,t0e.FSTOCKID,t0e.FSTOCKLOCID + --,t0e.F_QJCG_ASSISTANT2,t0.FBILLNO +) + +SELECT t0.FBILLNO,t1.FMATERIALID,t1. * t0e.FQTY / t2.,t3.F_UNITIDHS,t0e.FEntryID +--UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t1.Qty * t0e.FQTY / t2. * t3.F_UNITIDHS) +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0e.FID = t0.FID + INNER JOIN #ⵥ t1 on t1.FPACKBILLNO = t0.FBILLNO AND t0e.FMATERIALID = t1.FMATERIALID + CROSS APPLY ( + SELECT SUM(t2e.FQTY) AS '' + FROM T_PRD_PACKAGEINSTOCKENTRY t2e + WHERE t2e.FID = t0e.FID AND t2e.FMATERIALID = t0e.FMATERIALID + ) t2 + INNER JOIN T_BD_MATERIAL t3 on t3.FMATERIALID = t0e.FMATERIALID \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs index 643d2d2..dab9360 100644 --- a/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/OperationEventPlugInEx.cs @@ -12,7 +12,7 @@ using System.Text; namespace GZ.LJY000.Biori.STK_TransferDirect { - [HotUpdate, Description("直接调拨单服务操作插件")] + [HotUpdate, Description("直接调拨单服务操作插件#")] public class OperationEventPlugInEx : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) @@ -22,9 +22,15 @@ namespace GZ.LJY000.Biori.STK_TransferDirect e.FieldKeys.Add("FToWorkShop"); e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); - e.FieldKeys.Add("FPackBillSeq"); - e.FieldKeys.Add("FPackBillEntryId"); + //e.FieldKeys.Add("FPackBillSeq"); + //e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FQty"); + e.FieldKeys.Add("FPackBarCode"); + + DynamicObjectCollection Ab = null; + List aa = new List(); + aa.CopyTo(Ab.ToArray(), 0); + } public override void OnAddValidators(AddValidatorsEventArgs e) @@ -32,11 +38,10 @@ namespace GZ.LJY000.Biori.STK_TransferDirect base.OnAddValidators(e); if (this.FormOperation.OperationId == 1) { - - //添加检查校验器: - var validator = new VaildatorEventPlugInEx();//新增的校验器 - validator.EntityKey = "FEntity"; - e.Validators.Add(validator);//添加校验器 + ////添加检查校验器: + //var validator = new VaildatorEventPlugInEx();//新增的校验器 + //validator.EntityKey = "FEntity"; + //e.Validators.Add(validator);//添加校验器 } } @@ -107,6 +112,24 @@ WHERE 1 = 1 //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + updSqlL = $@"/*dialect*/ + +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY + (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) * 1.05 +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } @@ -136,6 +159,23 @@ WHERE 1 = 1 //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); + if (resData > 0) + { + + updSqlL = $@"/*dialect*/ +WITH #基础数据 AS ( + {string.Join(" UNION ALL ", sqlL)} +) +UPDATE t0e SET t0e.FQTY = t0e.FQTY - (t1.QTY / t2.FDENOMINATOR * t2.FNUMERATOR) * 1.05 +FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO + INNER JOIN T_ENG_BOMCHILD t2 on t2.FID = t0.FBOMID AND t2.FMATERIALID = t0e.FMATERIALID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' +"; + var res = DBUtils.Execute(this.Context, updSqlL); + } return; } } diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodePrint/BarCodePrintEditEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodePrint/BarCodePrintEditEx.cs index 952abaf..7e0167f 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodePrint/BarCodePrintEditEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodePrint/BarCodePrintEditEx.cs @@ -108,293 +108,6 @@ namespace GZ.LJY000.Biori.UHIK_BAR_BarCodePrint } } - public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e) - { - try - { - if (e.DataSourceId.Equals("FEntityToBar", StringComparison.OrdinalIgnoreCase)) - { - List list = new List(); - string value = e.BillIds.FirstOrDefault(); - if (newPrintDatas2 != null && newPrintDatas2.Count > 0) - { - DynamicObject dynamicObject = newPrintDatas2[Convert.ToInt32(value)]; - if (dynamicObject != null) - { - DynamicObject dynamicObject2 = new DynamicObject(e.DynamicObjectType); - foreach (object field2 in e.Fields) - { - string text = field2.ToString(); - if (text == "FExpPeriod") - { - continue; - } - - object obj = ""; - string text2 = ""; - bool flag = false; - bool flag2 = false; - string text3 = string.Empty; - if (text.Contains(".")) - { - string[] array = text.Split('.'); - string text4 = array[0]; - string text5 = array[1]; - if (array.Count() > 2) - { - text3 = array[2]; - } - - if (base.View.BusinessInfo.GetField(text4) == null) - { - continue; - } - - text2 = base.View.BusinessInfo.GetField(text4).PropertyName; - if (!(dynamicObject[text2] is DynamicObject dynamicObject3)) - { - if (text2.EqualsIgnoreCase("LotToBar") || text4.EqualsIgnoreCase("FLotToBar")) - { - obj = dynamicObject[text2 + "_Text"]; - text = $"{text4}_{text5}"; - dynamicObject2[text] = obj; - } - - continue; - } - - if (dynamicObject3.DynamicObjectType.Properties.Contains("Image") && dynamicObject3["Image"] == null) - { - RepackData(dynamicObject3); - } - - if (dynamicObject3.DynamicObjectType.Name.ToUpperInvariant() == "BD_FLEXSITEMDETAILV") - { - flag = true; - } - - if (dynamicObject3.DynamicObjectType.Name.ToUpperInvariant() == "BD_FLEXVALUESDETAIL") - { - flag2 = true; - } - - text = string.Format("{0}_{1}{2}", text4, text5, text3.IsNullOrEmptyOrWhiteSpace() ? "" : ("_" + text3)); - if (dynamicObject3.DynamicObjectType.Properties.Contains(text5.Remove(0, 1))) - { - obj = dynamicObject3[text5.Remove(0, 1)]; - } - else if (dynamicObject3.DynamicObjectType.Properties.Contains(text5)) - { - obj = dynamicObject3[text5]; - } - else if (field2.Equals("FMaterialIdToBar.FStockPlaceId") && dynamicObject3.DynamicObjectType.Properties.Contains("MaterialStock") && dynamicObject3["MaterialStock"] is DynamicObjectCollection) - { - obj = (dynamicObject3["MaterialStock"] as DynamicObjectCollection)[0]; - } - - if (obj.IsNullOrEmptyOrWhiteSpace() && base.View.BusinessInfo.GetField(text4) is BaseDataField) - { - string formId = ((BaseDataField)base.View.BusinessInfo.GetField(text4)).LookUpObject.FormId; - obj = GetBaseDataPropByBaseData(formId, text5, dynamicObject3); - } - } - else if (base.View.BusinessInfo.GetField(text) is BasePropertyField) - { - string controlFieldKey = base.View.BusinessInfo.GetField(text).ControlFieldKey; - text2 = base.View.BusinessInfo.GetField(text).PropertyName; - string name = base.View.BusinessInfo.GetField(text).ControlField.DynamicProperty.Name; - if (dynamicObject[name] is DynamicObject dynamicObject4) - { - obj = Convert.ToString(dynamicObject4[text2]); - } - } - else if (base.View.BusinessInfo.GetField(text) != null) - { - text2 = base.View.BusinessInfo.GetField(text).PropertyName; - obj = dynamicObject[text2]; - } - - if (obj is DynamicObject) - { - if (flag) - { - text3 = (text3.IsNullOrEmptyOrWhiteSpace() ? "FDataValue" : text3); - if ((obj as DynamicObject).DynamicObjectType.Properties.Contains(text3)) - { - dynamicObject2[text] = (obj as DynamicObject)[text3].ToString(); - string text6 = text.Split('_')[0]; - if (dynamicObject2.DynamicObjectType.Properties.Contains(text6)) - { - string propertyName = base.View.BusinessInfo.GetField(text6).PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName + "_Id")) - { - dynamicObject2[text6] = dynamicObject[propertyName + "_Id"]; - } - } - - if (dynamicObject2.DynamicObjectType.Properties.Contains("FMaterialIdToBar_Ref")) - { - string propertyName2 = base.View.BusinessInfo.GetField("FMaterialIdToBar").PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName2) && dynamicObject.DynamicObjectType.Properties.Contains(propertyName2 + "_Id")) - { - dynamicObject2["FMaterialIdToBar_Ref"] = dynamicObject[propertyName2]; - dynamicObject2["FMaterialIdToBar_Id"] = dynamicObject[propertyName2 + "_Id"]; - } - } - } - else - { - text3 = ((text3.IsNullOrEmptyOrWhiteSpace() || !text3.Contains("Number")) ? "Name" : "Number"); - if ((obj as DynamicObject).DynamicObjectType.Properties.Contains(text3)) - { - dynamicObject2[text] = (obj as DynamicObject)[text3].ToString(); - } - } - } - else if (flag2) - { - text3 = (text3.IsNullOrEmptyOrWhiteSpace() ? "Name" : text3); - if (text.StartsWith("FSTOCKLOCIDToBar_FF") && text.EndsWith("_FNumber")) - { - text3 = text3.Remove(0, 1); - } - - if ((obj as DynamicObject).DynamicObjectType.Properties.Contains(text3)) - { - dynamicObject2[text] = (obj as DynamicObject)[text3].ToString(); - string text7 = text.Split('_')[0]; - if (dynamicObject2.DynamicObjectType.Properties.Contains(text7)) - { - string propertyName3 = base.View.BusinessInfo.GetField(text7).PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName3 + "_Id")) - { - dynamicObject2[text7] = dynamicObject[propertyName3 + "_Id"]; - } - } - - if (dynamicObject2.DynamicObjectType.Properties.Contains("FStockIdToBar_Ref")) - { - string propertyName4 = base.View.BusinessInfo.GetField("FStockIdToBar").PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName4) && dynamicObject.DynamicObjectType.Properties.Contains(propertyName4 + "_Id")) - { - dynamicObject2["FStockIdToBar_Ref"] = dynamicObject[propertyName4]; - dynamicObject2["FStockIdToBar_Id"] = dynamicObject[propertyName4 + "_Id"]; - } - } - - if (dynamicObject2.DynamicObjectType.Properties.Contains("FINSTOCKIDToBar_Ref")) - { - string propertyName5 = base.View.BusinessInfo.GetField("FINSTOCKIDToBar").PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName5) && dynamicObject.DynamicObjectType.Properties.Contains(propertyName5 + "_Id")) - { - dynamicObject2["FINSTOCKIDToBar_Ref"] = dynamicObject[propertyName5]; - dynamicObject2["FINSTOCKIDToBar_Id"] = dynamicObject[propertyName5 + "_Id"]; - } - } - } - } - else if (field2.ToString() == "FSTOCKLOCIDToBar" || field2.ToString().Equals("FAuxPropIdToBar")) - { - string value2 = (obj as DynamicObject)["Id"].ToString(); - dynamicObject2[text] = value2; - } - else - { - text3 = (text3.IsNullOrEmptyOrWhiteSpace() ? "Name" : text3); - if ((obj as DynamicObject).DynamicObjectType.Properties.Contains(text3)) - { - dynamicObject2[text] = (obj as DynamicObject)[text3].ToString(); - } - else if (field2.Equals("FMaterialIdToBar.FStockPlaceId") && dynamicObject2.DynamicObjectType.Properties.Contains("FMaterialIdToBar_Ref")) - { - string propertyName6 = base.View.BusinessInfo.GetField("FMaterialIdToBar").PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName6) && dynamicObject.DynamicObjectType.Properties.Contains(propertyName6 + "_Id")) - { - dynamicObject2["FMaterialIdToBar_Ref"] = dynamicObject[propertyName6]; - dynamicObject2["FMaterialIdToBar_Id"] = dynamicObject[propertyName6 + "_Id"]; - } - } - } - } - else if (dynamicObject2.DynamicObjectType.Properties.Contains(text)) - { - if (obj.IsNullOrEmptyOrWhiteSpace() && text.Contains("_")) - { - string[] array2 = text.Split('_'); - string text8 = ""; - text8 = array2[1].Remove(0, 1); - if (!text8.Equals("") && dynamicObject.DynamicObjectType.Properties.Contains(text8)) - { - obj = dynamicObject[text8]; - } - } - - dynamicObject2[text] = obj; - if (flag) - { - dynamicObject2[text] = obj; - string text9 = text.Split('_')[0]; - Field field = base.View.BusinessInfo.GetField(text9); - if (field is RelatedFlexGroupField && obj != null) - { - RelatedFlexGroupField element = (RelatedFlexGroupField)field; - dynamicObject2[text] = GetElementValue(element, obj); - } - - if (dynamicObject2.DynamicObjectType.Properties.Contains(text9)) - { - string propertyName7 = base.View.BusinessInfo.GetField(text9).PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName7 + "_Id")) - { - dynamicObject2[text9] = dynamicObject[propertyName7 + "_Id"]; - } - } - - if (dynamicObject2.DynamicObjectType.Properties.Contains("FMaterialIdToBar_Ref")) - { - string propertyName8 = base.View.BusinessInfo.GetField("FMaterialIdToBar").PropertyName; - if (dynamicObject.DynamicObjectType.Properties.Contains(propertyName8) && dynamicObject.DynamicObjectType.Properties.Contains(propertyName8 + "_Id")) - { - dynamicObject2["FMaterialIdToBar_Ref"] = dynamicObject[propertyName8]; - dynamicObject2["FMaterialIdToBar_Id"] = dynamicObject[propertyName8 + "_Id"]; - } - } - } - } - - if (dynamicObject2[text] is LocaleValue && !dynamicObject2[text].IsNullOrEmptyOrWhiteSpace()) - { - List list2 = new List(); - list2.Add(dynamicObject2[text] as LocaleValue); - List value3 = list2; - dynamicObject2[text] = value3; - } - } - - if (dynamicObject2.Contains("FMaterialIdToBar_FImageFileServer")) - { - object ret = new object(); - GetImageByte(dynamicObject2["FMaterialIdToBar_FImageFileServer"], ref ret); - dynamicObject2["FMaterialIdToBar_FImageFileServer"] = ret; - } - - list.Add(dynamicObject2); - } - } - - e.DataObjects = list.ToArray(); - } - - base.OnPrepareNotePrintData(e); - } - catch (Exception ex) - { - UNWLogger.Error(base.Context, "BarCodePrintEdit", "OnPrepareNotePrintData error:" + ex.Message + ex.StackTrace, ex); - } - return; - base.OnPrepareNotePrintData(e); - } - private bool CheckPrintData(List printDatas) { bool flag = true; diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.cs index e2fcec2..835e0e6 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.cs @@ -2,6 +2,8 @@ using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; +using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; @@ -63,5 +65,35 @@ WHERE t0.FISCHECK = 1 } } + + public override void BeforeUpdateValue(BeforeUpdateValueEventArgs e) + { + base.BeforeUpdateValue(e); + if (e.Key.ToUpperInvariant().Equals("FAACVALUE")) + { + var barCode = e.Value.ToString(); + var sqlL = $@"/*dialect*/ +SELECT t0.FBARCODE,t0.FBillNo,t0.FBILLSEQ,t0.FBILLFORMID,t0.FLOT +FROM T_UNW_WMS_BARCODE t0 +WHERE t0.FBARCODE = '{barCode}' + AND t0.FBILLFORMID = 'PRD_MO' +"; + + var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if (dataList == null || dataList.Count == 0) + { + this.View.Model.SetValue("FverifyRes", "无效的二维码!"); + this.View.GetControl("FverifyRes").SetCustomPropertyValue("ForeColor", "#FF3300"); + } + else + { + } + + e.Value = ""; + var control = this.View.GetControl("FAACValue"); + control.SetFocus(); + e.Cancel = true; + } + } } } diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.py b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.py index 0ca4f1f..629b926 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.py +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_BAR_BarCodeVerify/BarCodeVerifyEdit.py @@ -141,43 +141,35 @@ def ButtonClick(e): def BeforeUpdateValue(e): if str(e.Key).upper() == "FAACVALUE": - val = e.Value - isLong = val.find("_") - if isLong == -1: + barCode = e.Value + if barCode != "": sqlL = """/*dialect*/ - SELECT FBARCODE - FROM T_BD_BARCODEMAINEX t0 - WHERE t0.FID = {0} +SELECT t0.FBARCODE,t0.FBillNo,t0.FBILLSEQ,t0.FBILLFORMID,t0.FLOT,t0.FLOT_TEXT,t1.FNUMBER +FROM T_UNW_WMS_BARCODE t0 + INNER JOIN T_BD_FMATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID +WHERE t0.FBARCODE = '{0}' + AND t0.FBILLFORMID = 'PRD_MO' """.format(e.Value) dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL) - val = dataList[0]["FBARCODE"] - - if val != "": - # raise Exception(JsonUtil.Serialize(this.View.Model.DataObject)) - infoList = val.split("_") - flag = False; - entity = this.View.Model.DataObject["FEntity"] - # raise Exception(JsonUtil.Serialize(entity)) - if infoList.Count < 3: + if dataList.Count == 0: this.View.Model.SetValue("FverifyRes","无效的二维码!") this.View.GetControl("FverifyRes").SetCustomPropertyValue("ForeColor", "#FF3300") - # this.View.Model.SetValue("FAACValue",""); - this.View.UpdateView(); - - e.Value = ""; - control = this.View.GetControl("FAACValue"); - control.SetFocus(); - e.Cancel = True; return; + + + # raise Exception(JsonUtil.Serialize(this.View.Model.DataObject)) + infoList = dataList[0] + flag = False; + entity = this.View.Model.DataObject["FEntity"] - materialNumber = infoList[0] + materialNumber = infoList["FNUMBER"] # qty = float(0) lot = "" oTId = this.View.Model.DataObject["FObjectTypeId_Id"] if oTId == "UHIK_PRD_PACKAGE_INSTOCK": # qty = float(infoList[1]) - lot = infoList[2] + lot = infoList["FLOT_TEXT"] for idx, item in enumerate(entity): # raise Exception(JsonUtil.Serialize(item)) entityNumber = item["FMaterialId"]["Number"] diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs index 47d6b77..9d7f724 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs @@ -18,8 +18,6 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK [Description("预测单下推组装入库单#"), HotUpdate] public class BillConvertEventPlugInEx : AbstractConvertPlugIn { - - public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); @@ -68,6 +66,7 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK ,ISNULL(t2.生产日期,'') '生产日期' ,ISNULL(t2.有效期至,'') '有效期至' ,ROW_NUMBER() OVER(ORDER BY t0.FSEQ) RN + ,ISNULL(t3.RptQty,0) 'RptQty' FROM #预测单数据 t0 INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052 @@ -88,12 +87,22 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK ,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至' FROM T_PRD_MO t2 INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID - INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID AND t2e_a.FREQSRC = 2 + INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID WHERE 1 = 1 AND t2e.FPackSrcBillNo = t0.FBILLNO AND t2e.FFPackSrcSeq = t0.FSEQ AND t2e.FPackSrcType = 1 AND t2e.FMATERIALID = t0.FMATERIALID ) t2 + OUTER APPLY ( + SELECT t3e_lk.FSID,SUM(t3e_a.FBASESTOCKINQUASELQTY) RptQty + FROM T_PRD_MORPT t3 + INNER JOIN T_PRD_MORPTENTRY t3e on t3.FID = t3e.FID + INNER JOIN T_PRD_MORPTENTRY_A t3e_a on t3e_a.FENTRYID = t3e.FENTRYID + INNER JOIN T_PRD_MORPTENTRY_LK t3e_lk on t3e_lk.FENTRYID = t3e.FENTRYID AND t3e_lk.FSTABLENAME = 'T_PRD_MOENTRY' + WHERE t3e_lk.FSID = t2.MoEntryId + GROUP BY t3e_lk.FSID + ) t3 "; + var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if (dataList != null && dataList.Any()) { @@ -210,7 +219,8 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK entry["FFYLQty"] = item["F_FYL_QTY"]; entry["FQty"] = item["FQTY"]; - entry["FRptQty"] = item["FQTY"]; + //entry["FRptQty"] = item["FQTY"]; + entry["FRptQty"] = item["RptQty"]; entry["FNoInStockQty"] = item["FQTY"]; entrys.Add(entry); @@ -226,11 +236,6 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK base.OnParseFilterOptions(e); } - public override void OnParseFilter(ParseFilterEventArgs e) - { - base.OnParseFilter(e); - } - public override void OnInitVariable(InitVariableEventArgs e) { base.OnInitVariable(e); diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.py index 5e9370f..19f9b11 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.py @@ -17,8 +17,19 @@ from System.Data import * from System.Collections.Generic import * from Kingdee.BOS.ServiceHelper import * -def OnParseFilterOptions(e): - raise Exception(e.FilterOptionsSQL) +# python:已生成条码的数据不能重复生成! +def OnParseFilter(e): + # raise Exception(e.FilterPolicySQL) + fromId = e.SourceBusinessInfo.GetForm().Id; + e.FilterPolicySQL = e.FilterPolicySQL + """ + AND NOT EXISTS ( + SELECT 1 FROM T_PRD_MOASSEMBLE_LK uwbc + WHERE uwbc.FSID = t0.FID + AND uwbc.FSTableName = 'T_PLN_FORECAST1' + ) + """ + e.PlugFilterDesc = "已生成组装单的数据不能重复生成!"; + return; # def OnParseFilter(e): # raise Exception(e.FilterPolicySQL) diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/BillEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/BillEventPlugInEx.cs index 61b2f13..b7889cb 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/BillEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/GET_PACKGE_INFO/BillEventPlugInEx.cs @@ -17,7 +17,6 @@ using System.ComponentModel; using System.IO; using System.Linq; using System.Text; -using static System.Net.Mime.MediaTypeNames; namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK.GET_PACKGE_INFO { @@ -34,34 +33,30 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK.GET_PACKGE_INFO } string scanCode = e.Value.ToString(); - scanCode = scanCode.Long2Int() == 0 ? scanCode : GetBarCode(scanCode); + //scanCode = scanCode.Long2Int() == 0 ? scanCode : GetBarCode(scanCode); if (scanCode.IsNullOrEmptyOrWhiteSpace()) { return; } - var scanCodeInfos = scanCode.Split('_'); - if (scanCodeInfos.Length < 4) - { - this.View.Model.SetValue("FMsg", "无效的二维码!"); - this.View.GetControl("FMsg").SetCustomPropertyValue("ForeColor", "#FF3300"); - return; - } - - var billNo = scanCodeInfos[0]; - var sqlL = $@"/*dialect*/ -WITH #基础数据 AS ( - SELECT t0.FBILLNO,t0e.FENTRYID,t0e.FSeq,t0e.FMATERIALID,t0e.FLOT,t0e.FLOT_Text,t0e.FPRINTMODEL +WITH #条码信息 AS ( + SELECT t0.FBARCODE,t0.FBillNo,t0.FBILLSEQ,t0.FBILLFORMID + FROM T_UNW_WMS_BARCODE t0 + WHERE t0.FBARCODE = '{scanCode}' + AND t0.FBILLFORMID = 'PLN_FORECAST' + AND t0.FBILLSEQ = 1 +) +, #基础数据 AS ( + SELECT t0.FBILLNO,t0.FSRCBILLNO,t0e.FENTRYID,t0e.FSeq,t0e.FMATERIALID,t0e.FLOT,t0e.FLOT_Text,t0e.FPRINTMODEL ,t0e.FGZLQTY,t0e.FZGSQTY,t0e.FQTY,t0e.FPRODUCEDDATE,t0e.FEXPIRYDATE - ,t0e.FFYLQTY,t0e.FUNITID - ,t0.FSRCBILLTYPE,t0e.FSRCBILLENTRYID + ,t0e.FFYLQTY,t0e.FUNITID,t0.FSRCBILLTYPE,t0e.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t0 INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID WHERE 1=1 AND t0.FDOCUMENTSTATUS = 'C' AND t0.FQTY > 0 UNION ALL - SELECT t0.FBILLNO,0,0 FSEQ,t0.FMATERIALID,t0.FLOT,t0.FLOT_Text,t0.FPRINTMODEL + SELECT t0.FBILLNO,t0.FSRCBILLNO,0,0 FSEQ,t0.FMATERIALID,t0.FLOT,t0.FLOT_Text,t0.FPRINTMODEL ,0,0,t0.FQTY,t0.FPRODUCTDATE,t0.FEXPIRYDATE,t0.FFYLQTY,t0.FUNITID ,t0.FSRCBILLTYPE,t0.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t0 @@ -69,7 +64,8 @@ WITH #基础数据 AS ( AND t0.FQTY > 0 ) SELECT t0.*,t1.* -FROM #基础数据 t0 +FROM #条码信息 tt + INNER JOIN #基础数据 t0 on tt.FBillNo = t0.FSRCBILLNO CROSS APPLY ( SELECT t1e.FROWID,t1e.FPARENTROWID,t1.FBILLNO FROM T_PLN_FORECAST t1 @@ -83,7 +79,7 @@ FROM #基础数据 t0 WHERE t0.FSRCBILLTYPE = 'SAL_ORDER' AND t1e.FENTRYID = t0.FSRCBILLENTRYID ) t1 WHERE 1 = 1 - AND t0.FBILLNO = '{billNo}' + --AND t0.FSRCBILLNO = 'FO00001306' ORDER BY FSeq "; @@ -147,14 +143,15 @@ ORDER BY FSeq this.View.Model.SetValue("FMsg", "取值成功!"); this.View.GetControl("FMsg").SetCustomPropertyValue("ForeColor", "#00994C"); - this.View.UpdateView("FEntity"); + //this.View.UpdateView("FEntity"); } else { - this.View.Model.SetValue("FMsg", "无效条码!"); + this.View.Model.SetValue("FMsg", "条码信息不存在或组转单信息不存在!"); this.View.GetControl("FMsg").SetCustomPropertyValue("ForeColor", "#FF3300"); - return; + //return; } + e.Value = ""; var control = this.View.GetControl("FScanBarCode"); control.SetFocus(); diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs index 6f642fb..ea8e854 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.cs @@ -19,10 +19,12 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; +using Kingdee.BOS.ServiceHelper; +using Kingdee.K3.BD.BarCode.Core.DataModel.WebApi; namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK { - [HotUpdate, Description("组装单生成汇报单")] + [HotUpdate, Description("组装单服务插件#")] public class OperationEventPlugInEx : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) @@ -30,34 +32,59 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK base.OnPreparePropertys(e); e.FieldKeys.Add("FPMoBillTypeId"); - e.FieldKeys.Add("FMoillTypeId_Id"); + e.FieldKeys.Add("FPSrcBillEntryId"); + e.FieldKeys.Add("FMoBillTypeId_Id"); e.FieldKeys.Add("FMoId"); e.FieldKeys.Add("FMoEntryId"); e.FieldKeys.Add("FMoBillTypeId"); e.FieldKeys.Add("FMOBillNo"); + e.FieldKeys.Add("FCreateMORpt"); + e.FieldKeys.Add("FQty"); + e.FieldKeys.Add("FRptQty"); } + /// + /// + /// + /// public override void EndOperationTransaction(EndOperationTransactionArgs e) { base.EndOperationTransaction(e); - + // 保存8提交9审核1反审核26 if (this.FormOperation.OperationId == 1) { - var dataEntityList = new List(); + var billNos = new List(); + //this.Context.UserId + //this.Context.CurrentOrganizationInfo.ID + #region 生成汇报单 + var dataEntityList = new List(); foreach (var data in e.DataEntitys) { - var srcBillEntryId = data["FPSrcBillEntryId"]; - if (srcBillEntryId != null && srcBillEntryId.Long2Int() > 0) - dataEntityList.Add(data); - if (dataEntityList.Any()) - DoCreateMoRpt(dataEntityList); + if (!Convert.ToBoolean(data["FCreateMORpt"])) + continue; + + var srcBillEntryId = data["FPSrcBillEntryId"]; + + if (srcBillEntryId != null && srcBillEntryId.Long2Int() > 0) + { + dataEntityList.Add(data); + } } + + if (dataEntityList.Any()) + DoCreateMoRpt(dataEntityList); + + #endregion + + #region 生成条码装箱单 + + #endregion } } - private void DoCreateMoRpt(List dataEntitys) + private void DoCreateMoRpt2(List dataEntitys) { try { @@ -89,10 +116,21 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK if (policie7009 == null) throw new Exception("转换单据中,单据类型属性类型值:7009不存在。"); + if (policie7002 == null) + throw new Exception("转换单据中,单据类型属性类型值:7002不存在。"); + + var ids = new List(); + foreach (var item in dataEntitys) { foreach (var entity in item["FEntity"] as DynamicObjectCollection) { + var rptQty = Convert.ToDecimal(entity["FRptQty"]); + var qty = Convert.ToDecimal(entity["FQty"]); + + if (qty <= rptQty) + continue; + var sourceBillTypeId = entity["FMoBillTypeId_Id"].ToString(); var billTypeMap = policie7009.BillTypeMaps.FirstOrDefault(x => x.SourceBillTypeId == sourceBillTypeId); @@ -131,9 +169,186 @@ namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + JsonUtil.SerializeWithOutNull(saveResult)); } + ids.Add(entity["Id"].Long2Int()); + + #endregion + + } + } + + if (ids.Any()) + { + + var updSql = $@"/*dialect*/ +UPDATE t3e SET t3e.FRPTQTY = ISNULL(t1.选单入库合格数量,0) +FROM T_PRD_MO t0 + INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID + OUTER APPLY ( + SELECT t1e.FMOENTRYID,t1e.FMOBILLNO,SUM(t1e.FFINISHQTY) '选单入库合格数量' + FROM T_PRD_MORPT t1 + INNER JOIN T_PRD_MORPTENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_PRD_MORPTENTRY_A t1e_a on t1e_a.FENTRYID = t1e.FENTRYID + WHERE t1e.FMOENTRYID = t0e.FENTRYID + AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1e.FMOENTRYID,t1e.FMOBILLNO + ) t1 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t3e on t3e.FMOENTRYID = t0e.FENTRYID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t3e.FEntryID IN ({string.Join(",", ids)}) + +"; + + var isOk = DBServiceHelper.Execute(this.Context, updSql); + } + } + } + catch (Exception ex) + { + throw ex; + } + + + } + + private void DoCreateMoRpt(List dataEntitys) + { + try + { + IConvertService service = ServiceHelper.GetService(); + + //获取元数据服务 + IMetaDataService metadataService = ServiceHelper.GetService(); + + //获取ViewService + IViewService viewService = ServiceHelper.GetService(); + //获取源单元数据 + + //# *源单据标识 + var sourceFormId = "PRD_MO"; + //# *目标单据标识 + var targetFormId = "PRD_MORPT"; + + var convertRuleId = "PRD_MO2MORPT"; + + var ruleMeta = service.GetConvertRule(this.Context, convertRuleId); + + if (ruleMeta != null) + { + FormMetadata sourceMetada = metadataService.Load(this.Context, sourceFormId) as FormMetadata; + + var policies = ruleMeta.Rule.Policies; + var policie7002 = policies.FirstOrDefault(x => x.ElementType == 7002) as DefaultConvertPolicyElement; + var policie7009 = policies.FirstOrDefault(x => x.ElementType == 7009) as BillTypeMapPolicyElement; + if (policie7009 == null) + throw new Exception("转换单据中,单据类型属性类型值:7009不存在。"); + + if (policie7002 == null) + throw new Exception("转换单据中,单据类型属性类型值:7002不存在。"); + + var ids = new List(); + + foreach (var item in dataEntitys) + { + + var sourceBillDict = new Dictionary>(); + var sourceBillTypeDict = new Dictionary(); + var packEntryIds = new Dictionary>(); + + foreach (var entity in item["FEntity"] as DynamicObjectCollection) + { + var rptQty = Convert.ToDecimal(entity["FRptQty"]); + var qty = Convert.ToDecimal(entity["FQty"]); + + if (qty <= rptQty) + continue; + + var sourceBillTypeId = entity["FMoBillTypeId_Id"].ToString(); + var billTypeMap = policie7009.BillTypeMaps.FirstOrDefault(x => x.SourceBillTypeId == sourceBillTypeId); + + if (billTypeMap == null) + throw new Exception($"转换规则中,{sourceBillTypeId}源单单据类型不存在!"); + + if (!sourceBillDict.ContainsKey(sourceBillTypeId)) + sourceBillDict.Add(sourceBillTypeId, new List()); + + sourceBillDict[sourceBillTypeId].Add(new ListSelectedRow("0", entity["FMoEntryId"].ToString(), 0, sourceFormId) { EntryEntityKey = policie7002.SourceEntryKey }); + + if (!sourceBillTypeDict.ContainsKey(sourceBillTypeId)) + sourceBillTypeDict.Add(sourceBillTypeId, billTypeMap.TargetBillTypeId); + + if (!packEntryIds.ContainsKey(sourceBillTypeId)) + packEntryIds.Add(sourceBillTypeId, new List()); + + packEntryIds[sourceBillTypeId].Add(entity["Id"].Long2Int()); + } + + foreach (var dict in sourceBillDict) + { + var selectedRows = dict.Value; + //selectedRows.Add(new ListSelectedRow("0", entity["FMoEntryId"].ToString(), 0, sourceFormId) { EntryEntityKey = policie7002.SourceEntryKey }); + var pushArgs = new PushArgs(ruleMeta.Rule, selectedRows.ToArray()); + //pushArgs.TargetBillTypeId = billTypeMap.TargetBillTypeId; + pushArgs.TargetBillTypeId = sourceBillTypeDict[dict.Key]; + OperateOption option = OperateOption.Create();//选项参数 + //不按照整单下推 + option.SetVariableValue(ConvertConst.SelectByBillId, false); + + //源单数据转换目标数据 + ConvertOperationResult convertResult = service.Push(this.Context, pushArgs, option); + + DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray(); + + FormMetadata destFormMetadata = metadataService.Load(this.Context, targetFormId) as FormMetadata; + + string msg = string.Empty; + + #region 自动保存 + IOperationResult saveResult = ServiceHelper.GetService().SaveAndAudit(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); + + if (!saveResult.IsSuccess) + { + if (saveResult.ValidationErrors != null && saveResult.ValidationErrors.Count > 0) + { + var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message)); + + throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + errorInfo); + } + + throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + JsonUtil.SerializeWithOutNull(saveResult)); + } + + ids.AddRange(packEntryIds[dict.Key]); + #endregion } } + + if (ids.Any()) + { + + var updSql = $@"/*dialect*/ +UPDATE t3e SET t3e.FRPTQTY = ISNULL(t1.选单入库合格数量,0) +FROM T_PRD_MO t0 + INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID + OUTER APPLY ( + SELECT t1e.FMOENTRYID,t1e.FMOBILLNO,SUM(t1e.FFINISHQTY) '选单入库合格数量' + FROM T_PRD_MORPT t1 + INNER JOIN T_PRD_MORPTENTRY t1e on t1.FID = t1e.FID + INNER JOIN T_PRD_MORPTENTRY_A t1e_a on t1e_a.FENTRYID = t1e.FENTRYID + WHERE t1e.FMOENTRYID = t0e.FENTRYID + AND t1.FDOCUMENTSTATUS = 'C' + GROUP BY t1e.FMOENTRYID,t1e.FMOBILLNO + ) t1 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t3e on t3e.FMOENTRYID = t0e.FENTRYID +WHERE 1 = 1 + AND t0.FDOCUMENTSTATUS = 'C' + AND t3e.FEntryID IN ({string.Join(",", ids)}) + +"; + + var isOk = DBServiceHelper.Execute(this.Context, updSql); + } } } catch (Exception ex) diff --git a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py index 0b3bff4..b0f6501 100644 --- a/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py +++ b/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/OperationEventPlugInEx.py @@ -42,100 +42,76 @@ def OnPreparePropertys(e): def EndOperationTransaction(e): # * 保存8提交9审核1反审核26删除3 if this.FormOperation.OperationId == 1: - # raise Exception(JsonUtil.Serialize(e.DataEntitys)) + billNos = List[str](); + for item in e.DataEntitys: + DoCreatePackCode(item["BillNo"]) + +# 建立条码组装单 +def DoCreatePackCode(billNo): + if billNo != "": + sqlL = """/*dialect*/ +WITH #基础数据 AS ( + SELECT t0.FBILLNO AS 'packBillNo',t0.FMATERIALID,0 packEntryId,0 packSeq + ,ISNULL(t2.FID,0) 'barCodeId' + ,t2.FBARCODE + ,ISNULL(t2.FQTY,0) FQTY,ISNULL(t3.FID,0) packId + ,t0.FBILLNO,1 IS_Main,1 FYLRate + FROM T_PRD_PACKAGEINSTOCK t0 + LEFT JOIN T_UNW_WMS_BARCODE t2 on t2.FBILLENTRYID = t0.FSRCBILLENTRYID AND t2.FBILLFORMID = 'PLN_FORECAST' + LEFT JOIN T_UNW_WMS_PACKING t3 on t3.FBOXCODEID = t2.FID + UNION ALL + SELECT t0.FBILLNO AS 'packBillNo',t0e.FMATERIALID + ,t0e.FEntryID + ,t0e.FSeq + ,ISNULL(t2.FID,0) 'barCodeId' + ,t2.FBARCODE + ,ISNULL(t2.FQTY,0) FQTY,ISNULL(t3e.FID,0) packId + ,t0.FBILLNO,0,1.05 + FROM T_PRD_PACKAGEINSTOCK t0 + INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t0e on t0.FID = t0e.FID + LEFT JOIN T_UNW_WMS_BARCODE t2 on t2.FBILLENTRYID = t0e.FMOENTRYID AND t2.FBILLFORMID = 'PRD_MO' + LEFT JOIN T_UNW_WMS_PACKINGENTRY t3e on t3e.FBARCODEID = t2.FID +) +SELECT t0.packBillNo,t0.IS_Main,t0.FMATERIALID,SUM(t0.FQTY) / t0.FYLRate FQTY,MAX(t0.barCodeId) barCodeId +FROM #基础数据 t0 +WHERE t0.FBILLNO = '{0}' +GROUP BY t0.packBillNo,t0.IS_Main,t0.FMATERIALID,t0.FYLRate +ORDER BY t0.IS_Main DESC + + """.format(billNo) + dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); + if dataList != None and dataList.Count > 0: + + formID = "UNW_WMS_PACKING"; + + meta = MetaDataServiceHelper.Load(this.Context, formID) + objType = meta.BusinessInfo.GetDynamicObjectType(); + newObj = DynamicObject(objType) + + main = dataList[0]; + if main["IS_Main"] == 1: + if main["barCodeId"] == 0: + raise Exception("条码装箱单套件码未生成!") + + newObj["BoxCodeId_Id"] = main["barCodeId"] + newObj["Capacity"] = main["FQTY"] + newObj["CreateOrgId_Id"] = this.Context.CurrentOrganizationInfo.ID + newObj["CreatorId_Id"] = this.Context.UserId + newObj["ModifierId_Id"] = this.Context.UserId + entry = newObj["List"] + for item in dataList: + if item["IS_Main"] == 0: + if item["barCodeId"] == 0: + raise Exception("分录【{0}】条码未生成!".format(item["packSeq"])) + + entity = entry.DynamicCollectionItemPropertyType.CreateInstance() + entity["BarCodeId_Id"] = item["barCodeId"] + entity["Qty"] = item["FQTY"] + entry.Add(entity) + + ObjList = List[DynamicObject]();#单据的数据包集合 + if entry.Count > 0: + ObjList.Add(newObj); + saveRslt = BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo ,ObjList.ToArray(), None, "Save"); + # raise Exception(JsonUtil.Serialize(newObj)) - dataEntityList = List[DynamicObject]() - - for data in e.DataEntitys: - srcBillEntryId = data["FPSrcBillEntryId"] - if srcBillEntryId != None and srcBillEntryId > 0: - dataEntityList.Add(data) - - if dataEntityList.Count > 0: - DoCreateMoRpt(dataEntityList) - -def DoCreateMoRpt(dataEntitys): - """组装入库单审核后生成汇报单 - - Args: - dataEntitys (_type_): 数据集 - - Raises: - Exception: _description_ - Exception: _description_ - Exception: _description_ - """ - # raise Exception(JsonUtil.Serialize(dataEntitys)) - # service = ServiceHelper.GetService[IConvertService](); - - ctx = this.Context; - service = ConvertService(); - # *源单据标识 - sourceFormId = "PRD_MO"; - - # *目标单据标识 - targetFormId = "PRD_MORPT"; - - # ruleMetaList = service.GetRulesByFormId(this.Context,sourceFormId,targetFormId) - - # raise Exception(JsonUtil.Serialize(ruleMetaList)) - convertRuleId = "PRD_MO2MORPT" - ruleMeta = service.GetConvertRule(this.Context,convertRuleId) - - # ! 装管公式(毫升):管数 = 数量 / 装管量(ml) / 1.05 - # ! 装管公式(微升):管数 = 数量 / 装管量(ml) / 1000 / 1.05 - if ruleMeta != None: - policies = ruleMeta.Rule.Policies - billTypeElement = FirstOrDefault(policies,lambda x: x.ElementType == 7009) - if billTypeElement == None: - raise Exception("转换单据中,单据类型属性类型值:7009不存在。") - - for item in dataEntitys: - for entity in item.FEntity: - raise Exception(JsonUtil.Serialize(entity)) - # 来源单据工单类型 - sourceBillTypeId = item["FPMoBillTypeId_Id"] - - # 单据转换匹配类型 - billTypeMap = FirstOrDefault(billTypeElement.BillTypeMaps,lambda x: x.SourceBillTypeId == sourceBillTypeId); - - if billTypeMap == None: - raise Exception("转换规则中,工单单据类型不存在!") - - # 单据下推设置 - selectedRows = List[ListSelectedRow](); - selectedRows.AddRange(list(map(lambda x : ListSelectedRow(str(x.FMoId), str(x.FMoEntryId) ,0 ,sourceFormId),item.FEntity))) - pushArgs = PushArgs(ruleMeta.Rule, selectedRows.ToArray()) - pushArgs.TargetBillTypeId = billTypeMap.TargetBillTypeId - - # !转换服务 - convertResult = service.Push(this.Context , pushArgs, OperateOption.Create()); - destObjs = List[DynamicObject]() - destObjs.AddRange(map(lambda x:x.DataEntity ,convertResult.TargetDataEntities)) - # raise Exception(JsonUtil.Serialize(destObjs)) - - # !单据加载服务 - metaDataService = MetaDataService() - destFormMetadata = metaDataService.Load(ctx, targetFormId) - - # !保存服务 - saveService = SaveService() - saveResult = saveService.Save(ctx, destFormMetadata.BusinessInfo, destObjs.ToArray(), OperateOption.Create()); - - msg = ""; - - # 操作结果校验 - if saveResult.ValidationErrors != None and saveResult.ValidationErrors.Count > 0: - errorInfoList = list(map(lambda x : x.Message,saveResult.ValidationErrors)) - errorInfo = ";".join(errorInfoList); - - raise Exception("未知原因导致自动保存失败原因:"+ errorInfo) - - # raise Exception(JsonUtil.Serialize(pushArgs)) - -def FirstOrDefault(collection, func): - result = filter(func, collection) - - if len(result) == 0: return None - - return result[0] \ No newline at end of file diff --git a/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.cs b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.cs new file mode 100644 index 0000000..d59e634 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.cs @@ -0,0 +1,35 @@ +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace GZ.LJY000.Biori.UNW_WMS_CUSTOMCODEGEN +{ + [HotUpdate, Description("自定义条码生成表单插件#")] + public class BillEventPlugInEx : AbstractBillPlugIn + { + + + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if (e.BarItemKey.StartsWith("tbConvUnit2PO", StringComparison.OrdinalIgnoreCase)) + { + var details = this.View.BusinessInfo.GetEntity("FBillEntry"); + var entrys = this.View.Model.GetEntityDataObject(details); + + foreach(var entry in entrys) + { + var rowIndex = this.View.Model.GetRowIndex(details, entry); + //this.View.Model.SetItemValueByID() + //JsonUtil.Serialize() + } + } + + } + } +} diff --git a/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.py b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.py new file mode 100644 index 0000000..0404655 --- /dev/null +++ b/14.宝锐/GZ.LJY000.Biori/UNW_WMS_CUSTOMCODEGEN/BillEventPlugInEx.py @@ -0,0 +1,45 @@ +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") + +from Kingdee.BOS import * +from Kingdee.BOS.Contracts import * +from Kingdee.BOS.Core import * +from Kingdee.BOS.Core.List 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.Bill 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 * + +def EntryBarItemClick(e): + if e.BarItemKey == "tbConvUnit2PO": + details = this.View.BusinessInfo.GetEntity("FEntity"); + entrys = this.View.Model.GetEntityDataObject(details); + if entrys != None and entrys.Count > 0: + for entry in entrys: + if entry["FMaterialId"] != None and entry["FUnitId"] != None: + if entry["FMaterialId"]["Id"] > 0 : + materialPurchase = entry["FMaterialId"]["MaterialPurchase"][0]; + if materialPurchase["PurchaseUnitID_Id"] != entry["FUnitId"]["Id"]: + rowIndex = this.View.Model.GetRowIndex(details, entry) + # raise Exception(JsonUtil.Serialize(entry["FUnitId"])) + this.View.Model.SetItemValueByID("FUnitId",materialPurchase["PurchaseUnitID_Id"],rowIndex); + this.View.InvokeFieldUpdateService("FUnitId", rowIndex); + + return; diff --git a/GZ.LJY000.PiLot/SAL_OUTSTOCK/UploadExtension/BillEventPlugInEx.cs b/GZ.LJY000.PiLot/SAL_OUTSTOCK/UploadExtension/BillEventPlugInEx.cs index e338d65..fa1c436 100644 --- a/GZ.LJY000.PiLot/SAL_OUTSTOCK/UploadExtension/BillEventPlugInEx.cs +++ b/GZ.LJY000.PiLot/SAL_OUTSTOCK/UploadExtension/BillEventPlugInEx.cs @@ -49,16 +49,18 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension this.View.ShowErrMessage("文件未加载完毕!"); return; } + if (e.Key.EndsWith("FDoUpLoad", StringComparison.OrdinalIgnoreCase)) { var entity = this.View.Model.BillBusinessInfo.GetEntryEntity("FEntity"); var rows = this.View.Model.GetEntityDataObject(entity); if (rows != null && rows.Any()) { - var path = HttpContext.Current.Request.PhysicalApplicationPath + @"\FileUpLoadServices\UploadFiles\"; + //var path = HttpContext.Current.Request.PhysicalApplicationPath + @"\FileUpLoadServices\UploadFiles\"; + var path = HttpContext.Current.Request.PhysicalApplicationPath + @"/FileUpLoadServices/UploadFiles/"; - if (!this.Context.DBId.Equals("6735f10547df64")) - path = "D:/Program Files (x86)/Kingdee/K3Cloud/WebSite/FileUpLoadServices/UploadFiles/"; + //if (!this.Context.DBId.Equals("6735f10547df64")) + // path = "D:/Program Files (x86)/Kingdee/K3Cloud/WebSite/FileUpLoadServices/UploadFiles/"; foreach (var row in rows) { @@ -101,7 +103,7 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension Rect region = new Rect(x, y, width, height); - resData = DecodeQRCodes(src, region, false); + resData = DecodeQRCodes(src, region, true); } } } @@ -118,7 +120,7 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension int height = srcHeight / 2; Rect region = new Rect(x, y, width, height); - resData = DecodeQRCodes(src, region, false); + resData = DecodeQRCodes(src, region, true); } if (resData != null) @@ -132,12 +134,19 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension var base64 = FileToBase64String(fullName); var resultJson = DoAttachmentUpload("SAL_OUTSTOCK", fileName, resData.name, fileBytesLength, fileSuffix, base64); - var result = JsonConvert.DeserializeObject(resultJson); - //var result = resultJson as JObject; - var responseData = result["Result"]["ResponseStatus"]; - isSuccess = responseData["IsSuccess"].Value(); + if (resultJson != null) + { + var result = JsonConvert.DeserializeObject(resultJson); + //var result = resultJson as JObject; + var responseData = result["Result"]["ResponseStatus"]; + isSuccess = responseData["IsSuccess"].Value(); - resMsg = JsonConvert.SerializeObject(responseData); + resMsg = JsonConvert.SerializeObject(responseData); + } + else + { + resMsg = "识别单号找不到对应销售出库单!"; + } } if (isSuccess) @@ -150,11 +159,18 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension { if (resMsg.IsNullOrEmpty()) resMsg = "识别失败!"; + row["FisSucceed"] = false; row["FResultMsg"] = resMsg; this.View.GetControl("FFileName").SetCustomPropertyValue("ForeColor", "#FF3300"); } } + else + { + row["FisSucceed"] = false; + row["FResultMsg"] = "未知错误导致识别失败!"; + this.View.GetControl("FFileName").SetCustomPropertyValue("ForeColor", "#FF3300"); + } } //fileUploaded = false; @@ -287,17 +303,29 @@ namespace GZ.LJY000.PiLot.SAL_OUTSTOCK.UploadExtension billNo = "ZHBR-XSCKD240911002"; var InterId = 0L; + var formBillNo = ""; var sqlL = $@"/*dialect*/ -SELECT t0.FBILLNO,t0.FID +SELECT t0.FBILLNO,t0.FID,t0e.FENTRYID,t0e.FSEQ,t0e_lk.FSTABLENAME,t0e_lk.FSBILLID FROM T_SAL_OUTSTOCK t0 -WHERE t0.FBILLNO = '{billNo}' + INNER JOIN T_SAL_OUTSTOCKENTRY t0e on t0.FID = t0e.FID + INNER JOIN T_SAL_OUTSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID + AND t0e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY' + INNER JOIN T_SAL_DELIVERYNOTICE t1 on t1.FID = t0e_lk.FSBILLID +WHERE t1.FBILLNO = '{billNo}' "; var data = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if (data != null && data.Any()) + { InterId = data[0]["FID"].Long2Int(); + formBillNo = data[0]["FBILLNO"].ToString(); + } + else + { + return null; + } var fileSql = @"/*dialect*/ SELECT * @@ -316,7 +344,7 @@ ORDER BY FENABLE DESC"; ""FormId"": ""{formId}"", ""IsLast"": true, ""InterId"": {InterId}, - ""BillNO"": ""{billNo}"", + ""BillNO"": ""{formBillNo}"", ""AliasFileName"": """", ""SendByte"": ""{base64}"" }} @@ -333,7 +361,7 @@ ORDER BY FENABLE DESC"; ""FAttachmentName"": ""{fileName}"", ""FBillType"": ""{formId}"", ""FInterID"": ""{InterId}"", - ""FBillNo"": ""{billNo}"", + ""FBillNo"": ""{formBillNo}"", ""FAttachmentSize"": {fileBytesLength}, ""FAttachment"":""{base64}"", ""FFILESTORAGE"":0, @@ -381,7 +409,7 @@ ORDER BY FENABLE DESC"; var row = new DynamicObject(entity.DynamicObjectType); var fileName = fileInfo["FileName"].ToString(); var suffix = Path.GetExtension(fileName); - if (suffix.ToUpper().Equals(".PDF")|| suffix.ToUpper().Equals(".JPG")) + if (suffix.ToUpper().Equals(".PDF") || suffix.ToUpper().Equals(".JPG")) { row["FFileName"] = fileName; row["FServerFileName"] = fileInfo["ServerFileName"]; diff --git a/GZ.LJY00001.HuiWei/GAT_zpjjlr/BillEventPlugInEx.cs b/GZ.LJY00001.HuiWei/GAT_zpjjlr/BillEventPlugInEx.cs new file mode 100644 index 0000000..e43e823 --- /dev/null +++ b/GZ.LJY00001.HuiWei/GAT_zpjjlr/BillEventPlugInEx.cs @@ -0,0 +1,56 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace GZ.LJY00001.HuiWei.GAT_zpjjlr +{ + [HotUpdate, Description("装配计件录入表单插件")] + public class BillEventPlugInEx : AbstractDynamicFormPlugIn + { + public override void DataChanged(DataChangedEventArgs e) + { + base.DataChanged(e); + if (e.Field.Key.ToUpperInvariant().Equals("F_YGNO3")) + { + var ygNo = e.NewValue.Long2Int(); + var isSyq = 0; + var hw_xygzjj_id = 0; + + if (ygNo > 0) + { + var date = this.View.Model.GetValue("F_DATE").ToString(); + var sql = $@"/*dialect*/ + +SELECT t0e.F_YGNM,CASE t0e.F_ISSYQ WHEN '是' THEN 1 ELSE 0 END 'ISSYQ',ISNULL(t1.FID,0) hw_xygzjj_id +FROM GAT_YGCQ t0 + INNER JOIN GAT_YGCQs t0e on t0.FID = t0e.FID + LEFT JOIN hw_xygzjj t1 on t1.F_YGID = t0e.F_YGNM +WHERE t0.F_Date = '{date}' + AND t0e.F_YGNM = {ygNo} + +"; + + var result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + + if (result != null && result.Count > 0) + { + var data = result[0]; + isSyq = data["ISSYQ"].Long2Int(); + hw_xygzjj_id = data["hw_xygzjj_id"].Long2Int(); + } + } + + this.View.Model.SetValue("FIsSYQ", isSyq, e.Row); + this.View.Model.SetItemValueByID("FxygjjdjbId", hw_xygzjj_id, e.Row); + } + + } + } +} diff --git a/GZ.LJY00001.HuiWei/GZ.LJY00001.HuiWei.csproj b/GZ.LJY00001.HuiWei/GZ.LJY00001.HuiWei.csproj new file mode 100644 index 0000000..7a74bad --- /dev/null +++ b/GZ.LJY00001.HuiWei/GZ.LJY00001.HuiWei.csproj @@ -0,0 +1,60 @@ + + + + + Debug + AnyCPU + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605} + Library + Properties + GZ.LJY00001.HuiWei + GZ.LJY00001.HuiWei + v4.0 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\00.未分类\AllOperation\bin\Debug\Kingdee.BOS.dll + + + ..\00.未分类\AllOperation\bin\Debug\Kingdee.BOS.Core.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.DataEntity.dll + + + ..\..\..\..\..\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.ServiceHelper.dll + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GZ.LJY00001.HuiWei/Properties/AssemblyInfo.cs b/GZ.LJY00001.HuiWei/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2088603 --- /dev/null +++ b/GZ.LJY00001.HuiWei/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("GZ.LJY00001.HuiWei")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("GZ.LJY00001.HuiWei")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("bb639bc5-bacc-48d1-b9a6-96f3c7ddd605")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/GateDge2023.sln b/GateDge2023.sln index 2c9ba08..1e4eca8 100644 --- a/GateDge2023.sln +++ b/GateDge2023.sln @@ -116,6 +116,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GZ.LJY000.PiLot", "GZ.LJY00 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestProject1", "UnitTestProject1\UnitTestProject1.csproj", "{29BDA1D3-0416-4C53-8809-F0A1735208A8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GZ.LJY00001.HuiWei", "GZ.LJY00001.HuiWei\GZ.LJY00001.HuiWei.csproj", "{BB639BC5-BACC-48D1-B9A6-96F3C7DDD605}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -262,6 +264,10 @@ Global {29BDA1D3-0416-4C53-8809-F0A1735208A8}.Debug|Any CPU.Build.0 = Debug|Any CPU {29BDA1D3-0416-4C53-8809-F0A1735208A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {29BDA1D3-0416-4C53-8809-F0A1735208A8}.Release|Any CPU.Build.0 = Release|Any CPU + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -307,6 +313,7 @@ Global {67ACDBF1-6213-42F5-8F76-7E85B0C58936} = {8A3E73AC-BCAD-4485-A956-5B7F5E559D81} {EED214C8-4253-44D0-B2B7-39245D2C023D} = {AFDA0A08-FEAD-4570-A650-E95470CF8F2C} {29BDA1D3-0416-4C53-8809-F0A1735208A8} = {2217EA0E-E53F-4ECC-A49D-F38BC743F47A} + {BB639BC5-BACC-48D1-B9A6-96F3C7DDD605} = {42311C80-7B4C-4353-BCA9-4ABD024290C8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {16F7DBDD-F487-41D6-A856-9E9B7B3F61C5}