using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; using Kingdee.BOS.App.Core.Report; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Permission; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Performance.Publisher; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Newtonsoft.Json; using Pilot_KD_Parino.Common; using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using static Pilot_KD_Parino.QPHY_AutoWrire.Bill3; namespace Pilot_KD_Parino.QPHY_AutoWrire { [HotUpdate] [Description("收款核销2")] //核销在用的 public class Bill2 : AbstractDynamicFormPlugIn { //全局存储单据体数据 public List SaleBILLLIS = new List(); public List ReceiveBILLLIST = new List(); //拿来匹配的集合 public List SaleBILLLIS2 = new List(); int INDEXNumber = 0; /// /// 开始 /// /// public override void OnLoad(EventArgs e) { base.OnLoad(e); SaleBILLLIS = new List(); ReceiveBILLLIST = new List(); List SaleBILLLISnew = new List(); List ReceiveBILLLISTNew = new List(); //删除四个单据体 this.View.Model.DeleteEntryData("FEntity"); this.View.Model.DeleteEntryData("FEntity2"); var FOrgId = this.Context.CurrentOrganizationInfo.ID; var FShuaXin = this.View.Model.GetValue("FShuaXin"); //调用SQL获取数据 var WriteOrderDate = SQL.SqlManage.GetWriteOrderDate3(this.Context, Convert.ToString(FOrgId)); var WriteReceiveDate = SQL.SqlManage.GetWriteReceiveDate3(this.Context, Convert.ToString(FOrgId)); foreach (var item in WriteOrderDate) { SaleBILLLIS.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBIllNO"]), FCONTRACTNUMBER = Convert.ToString(item["F_CONTRACTNUMBER"]), FClient = Convert.ToInt32(item["FCUSTID"]), FDate = Convert.ToString(item["FDate"]), FALLAMOUNT = Convert.ToDouble(item["FALLAMOUNT"]), FYAMOUNT = Convert.ToDouble(item["FYAMOUNT"]), FDAMOUNT = Convert.ToDouble(item["FDAMOUNT"]), FCreated = Convert.ToInt32(item["FCREATORID"]), FSalesman = Convert.ToInt32(item["FSALERID"]), FIs30 = Convert.ToBoolean(item["FIs30"]), FType = Convert.ToString(item["FType"]), }); } foreach (var item in WriteReceiveDate) { ReceiveBILLLIST.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBIllNO"]), FDate = Convert.ToString(item["FDate"]), FALLAMOUNT = Convert.ToDouble(item["FALLAMOUNT"]), FYAMOUNT = Convert.ToDouble(item["FYAMOUNT"]), FDAMOUNT = Convert.ToDouble(item["FDAMOUNT"]), FClient = Convert.ToInt32(item["FCONTACTUNIT"]), FCreated = Convert.ToInt32(item["FCREATORID"]), FRemark = Convert.ToString(item["FREMARK"]), FSalesman = Convert.ToInt32(item["FSALEERID"]), //FALLAMOUNTY = Convert.ToDouble(item["FALLAMOUNTY"]), //FCurr = Convert.ToInt32(item["FCurr"]) }); } SaleBILLLIS2 = SaleBILLLIS.Where(t => t.FIs30 == true).ToList(); //绑定销售订单数据 for (int i = 0; i < SaleBILLLIS2.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity"); this.View.Model.CreateNewEntryRow("FEntity"); //单据编号 this.View.Model.SetValue("FBILLNO", SaleBILLLIS2[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate", DateTime.Now.AddDays(-1 * Convert.ToInt32(SaleBILLLIS2[i].FDate)).ToString("yyyy-MM-dd"), i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS2[i].FALLAMOUNT, i); //类型 this.View.Model.SetValue("FType", SaleBILLLIS2[i].FType, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS2[i].FCONTRACTNUMBER, i); //客户名称 this.View.Model.SetValue("FClient", SaleBILLLIS2[i].FClient, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS2[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS2[i].FDAMOUNT, i); //商务人员 this.View.Model.SetValue("FCreated", SaleBILLLIS2[i].FCreated, i); //销售员 this.View.Model.SetValue("FSalesman", SaleBILLLIS2[i].FSalesman, i); this.View.UpdateView("FEntity"); } //绑定收款单数据 for (int i = 0; i < ReceiveBILLLIST.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.CreateNewEntryRow("FEntity2"); //单据编号 this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(ReceiveBILLLIST[i].FDate)).ToString("yyyy-MM-dd"), i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i); //客户名称 this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i); //备注 this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i); //商务人员 this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i); //销售员 this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, i); this.View.UpdateView("FEntity2"); } } /// /// 编辑按钮点击事件 /// /// public override void BeforeF7Select(BeforeF7SelectEventArgs e) { base.BeforeF7Select(e); if (e.FieldKey.EqualsIgnoreCase("FCONTRACTNUMBER2")) { //获取收款单号 var fBillNo = this.View.Model.GetValue("FBILLNO2", e.Row).ToString(); //获取收款单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; //新建存储类 List stringFBILLNO = new List(); foreach (var item in FEntity) { if (!string.IsNullOrWhiteSpace(item["FISHX"]?.ToString())) { StringFBILLNO stringFBILLNO1 = new StringFBILLNO(); stringFBILLNO1.FBILLNO = item["FBILLNO"]?.ToString(); stringFBILLNO.Add(stringFBILLNO1); } } ShowDynamicForm(stringFBILLNO, fBillNo); } } /// /// 存储为配对核销的销售订单号 /// public class StringFBILLNO { /// /// 销售订单号/应收单号(纸质合同号) /// public string FBILLNO { get; set; } } /// /// 弹出动态表单窗口 /// private void ShowDynamicForm(List stringFBILLNO, string fBillNo) { // 将列表序列化为JSON字符串 string jsonFBILLNO = JsonConvert.SerializeObject(stringFBILLNO); // 创建动态表单显示参数 DynamicFormShowParameter dynamicFormShowParameter = new DynamicFormShowParameter(); //dynamicFormShowParameter.FormId = "VRYF_WriteoffWindow"; // 表单ID dynamicFormShowParameter.FormId = "MBBA_WriteoffWindow"; // 替换为实际动态表单ID dynamicFormShowParameter.OpenStyle.ShowType = ShowType.Modal; // 以模态窗口形式显示 // 添加自定义参数,用于传递数据 dynamicFormShowParameter.CustomParams.Add("fBillNo", fBillNo); // 根据需要设置参数 dynamicFormShowParameter.CustomParams.Add("stringFBILLNO", jsonFBILLNO); // 根据需要设置参数 dynamicFormShowParameter.CustomParams.Add("IsEditable", "true"); // 确保表单是可编辑的 var stringFBILLNOANDList = new List(); // 显示动态表单 this.View.ShowForm(dynamicFormShowParameter, result => { if (result != null && result.ReturnData != null) { stringFBILLNOANDList.Add((StringFBILLNOANDList)result.ReturnData); } //判断是否获取到数据 if (stringFBILLNOANDList[0].FBILLNOList.Count > 0) { //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; //获取收款单单据体数据 DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; SaleBILLLIS = new List(); ReceiveBILLLIST = new List(); foreach (var item in FEntity) { SaleBILLLIS.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBILLNO"]), FCONTRACTNUMBER = Convert.ToString(item["FCONTRACTNUMBER"]), FClient = Convert.ToInt32(item["FClient_Id"]), FDate = Convert.ToString(item["FDate"]), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]), FSKBIllNO = Convert.ToString(item["FSKBILLNO"]), FCreated = Convert.ToInt32(item["FCreated_Id"]), FSalesman = Convert.ToInt32(item["FSalesman_Id"]), FType = Convert.ToString(item["FType"]), FISHX = item["FISHX"]?.ToString(), FWeiYi = item["FWeiYi"]?.ToString(), }); } foreach (var item in FEntity2) { ReceiveBILLLIST.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBILLNO2"]), FDate = Convert.ToString(item["FDate2"]), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_jdx"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_391"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_mjq"]), FClient = Convert.ToInt32(item["FClient2_Id"]), FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(), FRemark = Convert.ToString(item["FRemark"]), FCreated = Convert.ToInt32(item["FCreated2_Id"]), FSalesman = Convert.ToInt32(item["FSalesman2_Id"]), FISHX = item["FISHX2"]?.ToString(), FWeiYi = item["FWeiYi2"]?.ToString(), }); } //获取纸质合同号 List fString = new List(); //修改销售订单/应收单 foreach (var item in stringFBILLNOANDList[0].FBILLNOList) { foreach (var item2 in SaleBILLLIS) { if (item2.FBIllNO == item.FBILLNO) { item2.FSKBIllNO = stringFBILLNOANDList[0].FBILLNO; fString.Add(item2.FCONTRACTNUMBER); item2.FISHX = "已核销配对"; } } } string fCONTRACTNUMBER = string.Join(",", fString); //修改收款单 foreach (var item in ReceiveBILLLIST) { if (item.FBIllNO == stringFBILLNOANDList[0].FBILLNO) { item.FCONTRACTNUMBER = fCONTRACTNUMBER; item.FISHX = "已核销配对"; } } //删除数据 this.View.Model.DeleteEntryData("FEntity"); this.View.Model.DeleteEntryData("FEntity2"); //绑定销售订单数据 for (int i = 0; i < SaleBILLLIS.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity"); this.View.Model.CreateNewEntryRow("FEntity"); //单据编号 this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i); //类型 this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i); //客户名称 this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i); //单据编号(收款单) this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i); //是否核销匹对 this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated", SaleBILLLIS[i].FCreated, i); //销售员 this.View.Model.SetValue("FSalesman", SaleBILLLIS[i].FSalesman, i); } this.View.UpdateView("FEntity"); //绑定收款单数据 for (int i = 0; i < ReceiveBILLLIST.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.CreateNewEntryRow("FEntity2"); //单据编号 this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i].FDate, i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i); //客户名称 this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i); //备注 this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i].FCONTRACTNUMBER, i); //是否核销匹对 this.View.Model.SetValue("FISHX2", ReceiveBILLLIST[i].FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi2", ReceiveBILLLIST[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i); //销售员 this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, i); } this.View.UpdateView("FEntity2"); } }); } /// /// 弹出动态表单窗口2 /// private void ShowDynamicForm2(List stringFBILLNO, string fBillNo) { // 将列表序列化为JSON字符串 string jsonFBILLNO = JsonConvert.SerializeObject(stringFBILLNO); // 创建动态表单显示参数 DynamicFormShowParameter dynamicFormShowParameter = new DynamicFormShowParameter(); //dynamicFormShowParameter.FormId = "VRYF_OrderWindow"; // 表单ID dynamicFormShowParameter.FormId = "MBBA_OrderWindow"; // 替换为实际动态表单ID dynamicFormShowParameter.OpenStyle.ShowType = ShowType.Modal; // 以模态窗口形式显示 // 添加自定义参数,用于传递数据 dynamicFormShowParameter.CustomParams.Add("fBillNo", fBillNo); // 根据需要设置参数 dynamicFormShowParameter.CustomParams.Add("stringFBILLNO", jsonFBILLNO); // 根据需要设置参数 dynamicFormShowParameter.CustomParams.Add("IsEditable", "true"); // 确保表单是可编辑的 var stringFBILLNOANDList = new List(); // 显示动态表单 this.View.ShowForm(dynamicFormShowParameter); } /// /// 单据体双击事件 /// /// public override void EntityRowDoubleClick(EntityRowClickEventArgs e) { base.EntityRowDoubleClick(e); if (e.Key == "FENTITY2") { //获取收款单号 var fBillNo = this.View.Model.GetValue("FBILLNO2", e.Row).ToString(); //获取收款单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; List stringFBILLNO = new List(); foreach (var item in FEntity) { //判断如果有多个收款单的情况 var stringNo = item["FSKBILLNO"]?.ToString(); if (!string.IsNullOrWhiteSpace(stringNo)) { string[] stringNosp = stringNo?.Split(','); if (stringNosp.Contains(fBillNo)) { StringFBILLNO stringFBILLNO1 = new StringFBILLNO(); stringFBILLNO1.FBILLNO = item["FBILLNO"]?.ToString(); stringFBILLNO.Add(stringFBILLNO1); } } } //判断是否存在纸质合同号 var fCONTRACTNUMBER = this.View.Model.GetValue("FCONTRACTNUMBER2", e.Row)?.ToString(); if (!string.IsNullOrEmpty(fCONTRACTNUMBER)) { ShowDynamicForm2(stringFBILLNO, fBillNo); } } } /// /// 点击按钮操作 /// /// public override void AfterBarItemClick(AfterBarItemClickEventArgs e) { base.AfterBarItemClick(e); //自动匹配 if (e.BarItemKey.ToString().Equals("MBBA_tbButton_2")) { //销售订单绑定数据 var SaleBILLLISNew = new List(SaleBILLLIS); List FBILLNOLIST = new List(); List FClient = new List(); List result = new List(); var FStartTime = DateTime.Now; #region 匹配销售订单 //var SaleBILLLIS2Sal = SaleBILLLIS2.Where(t => t.FType == "销售订单" && t.FISHX != "已核销配对").ToList(); var SaleBILLLIS2Sal = SaleBILLLIS2.Where(t => t.FType == "销售订单").ToList(); //-----------20250117--------------------↓ //将销售订单根据客户分组 var FClientList = SaleBILLLIS2Sal.GroupBy(t => t.FClient).ToList(); //计算分组汇总合计金额用于配对收款单 for (int i = 0; i < FClientList.Count; i++) { List result2 = new List(); var SaleSumAmount = SaleBILLLIS2Sal.Where(a => a.FClient == FClientList[i].Key).ToList(); CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0); result.AddRange(result2); } //------------20250117-------------------↑ //存储收款单用于核销 List ReceiveBILLLISTNew = new List(ReceiveBILLLIST); //存储对应销售订单/应收单以及收款单的 List resultNew = new List(); //先挑1张收款单对应一张销售订单 for (int i = 0; i < ReceiveBILLLIST.Count; i++) { var aaa = CombinationGenerator.GetCombinationsDataByList2(result, ReceiveBILLLIST[i].FDAMOUNT, ReceiveBILLLIST[i].FClient); if (aaa.Count > 0) { //FBIllNO存放对应的销售订单编号、FBIllNO2存放对应收款单编号 result = CombinationGenerator.DeleteCombinationsDataByList(result, aaa[0].FBIllNO); foreach (var item in SaleBILLLIS.Where(t => aaa[0].FBIllNO.Contains(t.FBIllNO))) { SaleBILLLIS2Sal.Remove(item); } //获取纸质合同号 List fString = new List(); foreach (var item in SaleBILLLISNew) { if (item.FBIllNO.Equals(aaa[0].FBIllNO[0].ToString())) { //更新销售订单数据 item.FSKBIllNO = ReceiveBILLLIST[i].FBIllNO; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; fString.Add(item.FCONTRACTNUMBER); } } string fCONTRACTNUMBER = string.Join(",", fString); //更新收款单数据 ReceiveBILLLIST[i].FCONTRACTNUMBER = fCONTRACTNUMBER; //if (ReceiveBILLLIST[i].FDAMOUNT != 0) //{ // ReceiveBILLLIST[i].FYAMOUNT = ReceiveBILLLIST[i].FDAMOUNT; //} //ReceiveBILLLIST[i].FDAMOUNT = 0; ReceiveBILLLIST[i].FISHX = "已核销配对"; //删除已核销匹对的收款单 ReceiveBILLLISTNew.Remove(ReceiveBILLLIST[i]); } } //先挑1张收款单对应多张张销售订单 for (int i = 0; i < ReceiveBILLLISTNew.Count; i++) { var resultNew2 = CombinationGenerator.GetCombinationsDataByList(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient); if (resultNew2.Count > 0) { result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO); foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO))) { SaleBILLLIS2Sal.Remove(item); } //获取纸质合同号 List fString = new List(); //循环销售订单 foreach (var item in resultNew2[0].FBIllNO) { foreach (var item2 in SaleBILLLISNew) { if (item2.FBIllNO.Equals(item)) { item2.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO; //if (item2.FDAMOUNT != 0) //{ // item2.FYAMOUNT = item2.FDAMOUNT; //} //item2.FDAMOUNT = 0; item2.FISHX = "已核销配对"; fString.Add(item2.FCONTRACTNUMBER); } } } string fCONTRACTNUMBER = string.Join(",", fString); //循环收款单 foreach (var item in ReceiveBILLLIST.Where(t => t.FBIllNO == ReceiveBILLLISTNew[i].FBIllNO)) { item.FCONTRACTNUMBER = fCONTRACTNUMBER; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; } //删除已核销匹对的收款单 ReceiveBILLLISTNew.Remove(ReceiveBILLLISTNew[i]); } } //-----------20250118--------------------↓ //将收款单根据客户分组 var SKFClientList = ReceiveBILLLISTNew.GroupBy(t => t.FClient).ToList(); result = new List(); for (int i = 0; i < SKFClientList.Count; i++) { List result2 = new List(); var SaleSumAmount = ReceiveBILLLISTNew.Where(a => a.FClient == SKFClientList[i].Key).ToList(); CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0); result.AddRange(result2); } //1个销售订单对应多张收款单 for (int i = 0; i < SaleBILLLIS2Sal.Count; i++) { var resultNew2 = CombinationGenerator.GetCombinationsDataByListTK(result, SaleBILLLIS2Sal[i].FDAMOUNT, SaleBILLLIS2Sal[i].FClient); if (resultNew2.Count > 0) { result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO2); foreach (var item in ReceiveBILLLIST.Where(t => resultNew2[0].FBIllNO2.Contains(t.FBIllNO))) { ReceiveBILLLISTNew.Remove(item); } foreach (var item in SaleBILLLISNew.Where(a => a.FBIllNO == SaleBILLLIS2Sal[i].FBIllNO)) { string fCONTRACTNUMBER = string.Join(",", resultNew2[0].FBIllNO2); item.FSKBIllNO = fCONTRACTNUMBER; item.FWeiYi = "是"; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; } foreach (var item in resultNew2[0].FBIllNO2) { foreach (var item2 in ReceiveBILLLIST) { if (item2.FBIllNO.Equals(item)) { item2.FCONTRACTNUMBER = SaleBILLLIS2Sal[i].FCONTRACTNUMBER; item2.FWeiYi = "否"; //if (item2.FDAMOUNT != 0) //{ // item2.FYAMOUNT = item2.FDAMOUNT; //} //item2.FDAMOUNT = 0; item2.FISHX = "已核销配对"; } } } SaleBILLLIS2Sal.Remove(SaleBILLLIS2Sal[i]); } } //-----------20250118--------------------↑ #endregion #region 匹配应收单 //var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单" && t.FISHX != "已核销配对").ToList(); var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单").ToList(); result = new List(); //-----------20250117--------------------↓ var FClientList2 = SaleBILLLIS2Receive.GroupBy(t => t.FClient).ToList(); //计算分组汇总合计金额用于配对收款单 for (int i = 0; i < FClientList2.Count; i++) { List result2 = new List(); var SaleSumAmount = SaleBILLLIS2Receive.Where(a => a.FClient == FClientList2[i].Key).ToList(); CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0); result.AddRange(result2); } //------------20250117-------------------↑ //先挑1张收款单对应一张应收单 for (int i = 0; i < ReceiveBILLLISTNew.Count; i++) { var aaa = CombinationGenerator.GetCombinationsDataByList2(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient); if (aaa.Count > 0) { result = CombinationGenerator.DeleteCombinationsDataByList(result, aaa[0].FBIllNO); foreach (var item in SaleBILLLIS.Where(t => aaa[0].FBIllNO.Contains(t.FBIllNO))) { SaleBILLLIS2Receive.Remove(item); } //获取纸质合同号 List fString = new List(); foreach (var item in SaleBILLLISNew) { if (item.FBIllNO.Equals(aaa[0].FBIllNO[0].ToString())) { //更新销售订单数据 item.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; fString.Add(item.FCONTRACTNUMBER); } } string fCONTRACTNUMBER = string.Join(",", fString); //更新收款单数据 ReceiveBILLLIST[i].FCONTRACTNUMBER = fCONTRACTNUMBER; //if (ReceiveBILLLIST[i].FDAMOUNT != 0) //{ // ReceiveBILLLIST[i].FYAMOUNT = ReceiveBILLLIST[i].FDAMOUNT; //} //ReceiveBILLLIST[i].FDAMOUNT = 0; ReceiveBILLLIST[i].FISHX = "已核销配对"; //删除已核销匹对的收款单 ReceiveBILLLISTNew.Remove(ReceiveBILLLIST[i]); } } //先挑1张收款单对应多张应收单 for (int i = 0; i < ReceiveBILLLISTNew.Count; i++) { var resultNew2 = CombinationGenerator.GetCombinationsDataByList(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient); if (resultNew2.Count > 0) { result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO); foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO))) { SaleBILLLIS2Receive.Remove(item); } //获取纸质合同号 List fString = new List(); foreach (var item in resultNew2[0].FBIllNO) { foreach (var item2 in SaleBILLLISNew) { if (item2.FBIllNO.Equals(item)) { item2.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO; //if (item2.FDAMOUNT != 0) //{ // item2.FYAMOUNT = item2.FDAMOUNT; //} //item2.FDAMOUNT = 0; item2.FISHX = "已核销配对"; fString.Add(item2.FCONTRACTNUMBER); } } } string fCONTRACTNUMBER = string.Join(",", fString); foreach (var item in ReceiveBILLLIST.Where(t => t.FBIllNO == ReceiveBILLLISTNew[i].FBIllNO)) { //更新收款单数据 item.FCONTRACTNUMBER = fCONTRACTNUMBER; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; } //删除已核销匹对的收款单 ReceiveBILLLISTNew.Remove(ReceiveBILLLISTNew[i]); } } //-----------20250118--------------------↓ //将收款单根据客户分组 var SKFClientList2 = ReceiveBILLLISTNew.GroupBy(t => t.FClient).ToList(); result = new List(); for (int i = 0; i < SKFClientList2.Count; i++) { List result2 = new List(); var SaleSumAmount = ReceiveBILLLISTNew.Where(a => a.FClient == SKFClientList2[i].Key).ToList(); CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0); result.AddRange(result2); } //1个应收单对应多张收款单 for (int i = 0; i < SaleBILLLIS2Receive.Count; i++) { var resultNew2 = CombinationGenerator.GetCombinationsDataByListTK(result, SaleBILLLIS2Receive[i].FDAMOUNT, SaleBILLLIS2Receive[i].FClient); if (resultNew2.Count > 0) { result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO2); foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO))) { SaleBILLLIS2Receive.Remove(item); } foreach (var item in SaleBILLLISNew.Where(a => a.FBIllNO == SaleBILLLIS2Sal[i].FBIllNO)) { string fCONTRACTNUMBER = string.Join(",", resultNew2[0].FBIllNO2); item.FSKBIllNO = fCONTRACTNUMBER; item.FWeiYi = "是"; //if (item.FDAMOUNT != 0) //{ // item.FYAMOUNT = item.FDAMOUNT; //} //item.FDAMOUNT = 0; item.FISHX = "已核销配对"; } foreach (var item in resultNew2[0].FBIllNO2) { foreach (var item2 in ReceiveBILLLIST) { if (item2.FBIllNO.Equals(item)) { item2.FCONTRACTNUMBER = SaleBILLLIS2Sal[i].FCONTRACTNUMBER; item2.FWeiYi = "否"; //if (item2.FDAMOUNT != 0) //{ // item2.FYAMOUNT = item2.FDAMOUNT; //} //item2.FDAMOUNT = 0; item2.FISHX = "已核销配对"; } } } SaleBILLLIS2Sal.Remove(SaleBILLLIS2Sal[i]); } } //-----------20250118--------------------↑ #endregion //删除数据 this.View.Model.DeleteEntryData("FEntity"); this.View.Model.DeleteEntryData("FEntity2"); #region 二次过滤数据 //第二次自动配对(是否有误)[收款单为主] for (int i = 0; i < ReceiveBILLLIST.Count; i++) { //过滤除了1对1、1对多的数据 if (!string.IsNullOrWhiteSpace(ReceiveBILLLIST[i].FISHX?.ToString()) && string.IsNullOrWhiteSpace(ReceiveBILLLIST[i].FWeiYi?.ToString())) { string[] strings = ReceiveBILLLIST[i].FCONTRACTNUMBER.Split(','); //获取收款单核销金额 decimal amount1 = Convert.ToDecimal(ReceiveBILLLIST[i].FDAMOUNT); //获取销售订单/应收单(汇总后金额) var number = SaleBILLLISNew.Where(a => strings.Contains(a.FCONTRACTNUMBER)).ToList(); decimal amount2 = Convert.ToDecimal(number.Sum(a => a.FDAMOUNT)); //如果自动配对的值不相同就重置为未匹对状态 if (amount1 != amount2) { //收款单修改 ReceiveBILLLIST[i].FCONTRACTNUMBER = ""; ReceiveBILLLIST[i].FISHX = ""; //销售订单修改 foreach (var item in number) { item.FSKBIllNO = ""; item.FISHX = ""; } } } } //第二次自动配对(是否有误)[销售订单为主] for (int i = 0; i < SaleBILLLISNew.Count; i++) { //过滤未匹对上的数据/过滤不是唯一的数据 if (!string.IsNullOrWhiteSpace(SaleBILLLISNew[i].FISHX?.ToString()) && !string.IsNullOrWhiteSpace(SaleBILLLISNew[i].FWeiYi?.ToString())) { string[] strings = SaleBILLLISNew[i].FSKBIllNO.Split(','); //获取收款单核销金额(汇总后金额) var number = ReceiveBILLLIST.Where(a => strings.Contains(a.FBIllNO)).ToList(); decimal amount2 = Convert.ToDecimal(number.Sum(a => a.FDAMOUNT)); //获取销售订单/应收单 decimal amount1 = Convert.ToDecimal(SaleBILLLISNew[i].FDAMOUNT); //如果自动配对的值不相同就重置为未匹对状态 if (amount1 != amount2) { //销售订单修改 SaleBILLLISNew[i].FSKBIllNO = ""; SaleBILLLISNew[i].FISHX = ""; SaleBILLLISNew[i].FWeiYi = ""; //收款单修改 foreach (var item in number) { item.FCONTRACTNUMBER = ""; item.FISHX = ""; item.FWeiYi = ""; } } } } #endregion //绑定销售订单数据 for (int i = 0; i < SaleBILLLISNew.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity"); this.View.Model.CreateNewEntryRow("FEntity"); //单据编号 this.View.Model.SetValue("FBILLNO", SaleBILLLISNew[i]?.FBIllNO, i); //日期 string dateFormat = "yyyy-MM-dd HH:mm:ss"; // 指定的日期格式 if (DateTime.TryParseExact(SaleBILLLISNew[i]?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { this.View.Model.SetValue("FDate", SaleBILLLISNew[i]?.FDate, i); } else { this.View.Model.SetValue("FDate", DateTime.Now.AddDays(-1 * Convert.ToInt32(SaleBILLLISNew[i]?.FDate)).ToString("yyyy-MM-dd"), i); } //金额 this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLISNew[i]?.FALLAMOUNT, i); //类型 this.View.Model.SetValue("FType", SaleBILLLISNew[i]?.FType, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLISNew[i]?.FCONTRACTNUMBER, i); //客户名称 this.View.Model.SetValue("FClient", SaleBILLLISNew[i]?.FClient, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLISNew[i]?.FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLISNew[i]?.FDAMOUNT, i); //单据编号(收款单) this.View.Model.SetValue("FSKBILLNO", SaleBILLLISNew[i]?.FSKBIllNO, i); //是否核销匹对 this.View.Model.SetValue("FISHX", SaleBILLLISNew[i]?.FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi", SaleBILLLISNew[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated", SaleBILLLISNew[i]?.FCreated, i); //销售员 this.View.Model.SetValue("FSalesman", SaleBILLLISNew[i]?.FSalesman, i); } INDEXNumber = 1; this.View.UpdateView("FEntity"); //绑定收款单数据 for (int i = 0; i < ReceiveBILLLIST.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.CreateNewEntryRow("FEntity2"); //单据编号 this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i]?.FBIllNO, i); //日期 string dateFormat = "yyyy-MM-dd HH:mm:ss"; // 指定的日期格式 if (DateTime.TryParseExact(ReceiveBILLLIST[i]?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i]?.FDate, i); } else { this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(ReceiveBILLLIST[i]?.FDate)).ToString("yyyy-MM-dd"), i); } //金额 this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i]?.FALLAMOUNT, i); //客户名称 this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i]?.FClient, i); //备注 this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i]?.FRemark, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i]?.FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i]?.FDAMOUNT, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i]?.FCONTRACTNUMBER, i); //是否核销匹对 this.View.Model.SetValue("FISHX2", ReceiveBILLLIST[i]?.FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi2", ReceiveBILLLIST[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i]?.FCreated, i); //销售员 this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i]?.FSalesman, i); } this.View.UpdateView("FEntity2"); var FEndTime = DateTime.Now; TimeSpan timeSpan = FEndTime - FStartTime; this.View.ShowMessage(string.Format("匹配成功,匹配耗费时长为:{0}s", Math.Round(timeSpan.TotalMilliseconds / 1000))); } //生成核销记录单 if (e.BarItemKey.ToString().Equals("MBBA_tbButton_5")) { // 弹出确认框 View.ShowMessage("确定要生成核销记录单吗?", MessageBoxOptions.YesNo, result => { if (result == MessageBoxResult.Yes) { #region 隐藏代码 //存储销售订单/应收单 var fCombinaAddClass1 = new List(); //存储收款单 var fCombinaAddSK = new List(); var FOrgId = this.Context.CurrentOrganizationInfo.ID; string Message = string.Empty; bool ErrMessage = false; //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; //获取收款单单据体数据 DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; SaleBILLLIS = new List(); ReceiveBILLLIST = new List(); foreach (var item in FEntity) { SaleBILLLIS.Add(new CombinaClass() { FBIllNO = item["FBILLNO"]?.ToString(), FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(), FClient = Convert.ToInt32(item["FClient_Id"]), FDate = item["FDate"]?.ToString(), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]), FSKBIllNO = item["FSKBILLNO"]?.ToString(), FCreated = Convert.ToInt32(item["FCreated_Id"]), FSalesman = Convert.ToInt32(item["FSalesman_Id"]), FType = item["FType"]?.ToString(), FISHX = item["FISHX"]?.ToString(), FWeiYi = item["FWeiYi"]?.ToString(), }); } foreach (var item in FEntity2) { ReceiveBILLLIST.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBILLNO2"]), FDate = Convert.ToString(item["FDate2"]), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_jdx"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_391"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_mjq"]), FClient = Convert.ToInt32(item["FClient2_Id"]), FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(), FRemark = Convert.ToString(item["FRemark"]), FCreated = Convert.ToInt32(item["FCreated2_Id"]), FSalesman = Convert.ToInt32(item["FSalesman2_Id"]), FISHX = item["FISHX2"]?.ToString(), FWeiYi = item["FWeiYi2"]?.ToString(), }); } //循环收款单 foreach (var item in FEntity2) { //创建对象存储 var SKList = new CombinaAddSK(); //过滤未匹对上的数据/过滤除了收款单1对1、1对多的数据 if (item["F_ISHX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX2"]?.ToString()) && string.IsNullOrWhiteSpace(item["FWeiYi2"]?.ToString())) { //获取纸质合同号 var stringSplit = (item["FCONTRACTNUMBER2"])?.ToString()?.Split(','); //找到对应销售订单 foreach (var item2 in FEntity.Where(a => stringSplit.Contains(a["FCONTRACTNUMBER"]))) { var nTestList = new CombinaAddClass1(); nTestList.FBIllNO = item2["FBILLNO"]?.ToString(); nTestList.FClient = Convert.ToInt32(item2["FClient_Id"]); nTestList.FDate = item2["FDate"]?.ToString(); nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_emq"]); nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER"]?.ToString(); nTestList.FType = item2["FTYPE"]?.ToString(); nTestList.FCreated = Convert.ToInt32(item2["FCreated_Id"]); nTestList.FSalesman = Convert.ToInt32(item2["FSalesman_Id"]); SKList.XSAPList.Add(nTestList); } SKList.FBIllNO = item["FBILLNO2"]?.ToString(); SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(); SKList.FClient = Convert.ToInt32(item["FClient2_Id"]); SKList.FDate = item["FDate2"]?.ToString(); SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_mjq"]); SKList.FRemark = item["FRemark"]?.ToString(); SKList.FCreated = Convert.ToInt32(item["FCreated2_Id"]); SKList.FSalesman = Convert.ToInt32(item["FSalesman2_Id"]); fCombinaAddSK.Add(SKList); } } //循环销售订单/应收单 foreach (var item in FEntity) { //创建对象存储 var SKList = new CombinaAddClass1(); //过滤未匹对上的数据/过滤不是唯一的数据 if (item["F_ISGX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX"]?.ToString()) && !string.IsNullOrWhiteSpace(item["FWeiYi"]?.ToString())) { //获取纸质合同号 var stringSplit = (item["FSKBILLNO"])?.ToString()?.Split(','); //找到对应销售订单 foreach (var item2 in FEntity2.Where(a => stringSplit.Contains(a["FBILLNO2"]))) { var nTestList = new CombinaAddSK(); nTestList.FBIllNO = item2["FBILLNO2"]?.ToString(); nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER2"]?.ToString(); nTestList.FClient = Convert.ToInt32(item2["FClient2_Id"]); nTestList.FDate = item2["FDate2"]?.ToString(); nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_mjq"]); nTestList.FRemark = item2["FRemark"]?.ToString(); nTestList.FSalesman = Convert.ToInt32(item2["FSalesman2_Id"]); nTestList.FCreated = Convert.ToInt32(item2["FCreated2_Id"]); SKList.SKList.Add(nTestList); } SKList.FBIllNO = item["FBILLNO"]?.ToString(); SKList.FClient = Convert.ToInt32(item["FClient_Id"]); SKList.FDate = item["FDate"]?.ToString(); SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_emq"]); SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(); SKList.FType = item["FType"]?.ToString(); SKList.FCreated = Convert.ToInt32(item["FCreated_Id"]); SKList.FSalesman = Convert.ToInt32(item["FSalesman_Id"]); fCombinaAddClass1.Add(SKList); } } #endregion if (fCombinaAddClass1.Count == 0 && fCombinaAddSK.Count == 0) { this.View.ShowWarnningMessage("未选择核销数据!"); return; } //用于存储生成成功的收款单 List strings1 = new List(); //用于存储生成成功的销售订单 List strings2 = new List(); //循环收款单/新增核销记录 foreach (var item in fCombinaAddSK) { //获取销售订单/应收单 var list = item.XSAPList; //汇总金额 var Amount = list.Sum(a => a.FALLAMOUNT); //应收单/销售订单判断字段 int isTrue1 = list.GroupBy(t => t.FType).Count(); //收款单/销售订单-应收单判断客户字段 int isTrue2 = list.GroupBy(t => t.FClient).Count(); //判断是否存在应收单跟销售订单汇总核销 if (isTrue1 > 1) { ErrMessage = true; Message = Message + string.Format("收款单号:'{0}'存在销售订单与应收单合并核销的记录,不允许核销\r\n", item.FBIllNO); continue; } //判断是否是同一个客户 else if (isTrue2 > 1 || item.FClient != list[0].FClient) { ErrMessage = true; Message = Message + string.Format("收款单号:'{0}'配对的(销售订单/应收单)的客户不一致,不允许核销\r\n", item.FBIllNO); continue; } //判断是否存在两个销售订单/应收单汇总核销(不能小于汇总数) else if (list.Count > 1 && item.FALLAMOUNT < Amount) { ErrMessage = true; Message = Message + string.Format("收款单号:'{0}'的核销金额小于多个(销售订单/应收单)的核销金额,不允许核销\r\n", item.FBIllNO); continue; } else { //创建核销记录单 string FBILLNO = CommonHelper.CreateAutoWrireRecord2(this.Context, Convert.ToString(FOrgId), item.XSAPList, item); Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO); strings1.Add(item.FBIllNO); } } //循环(销售订单/应收单)/新增核销记录 foreach (var item in fCombinaAddClass1) { strings2.Add(item.FBIllNO); //创建核销记录单 string FBILLNO = CommonHelper.CreateAutoWrireRecord3(this.Context, Convert.ToString(FOrgId), item, item.SKList); Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO); } if (!ErrMessage) { this.View.ShowMessage(Message); //this.View.Model.SetValue("FShuaXin", "需要刷新"); } else { this.View.ShowErrMessage(Message); } //如果存在生成成功的、也有生成失败的不走刷新功能直接将成功的单据体数据删除! for (int i = 0; i < SaleBILLLIS.Count; i++) { if (strings2.Contains(SaleBILLLIS[i].FBIllNO)) { string[] strings = SaleBILLLIS[i].FSKBIllNO?.Split(','); SaleBILLLIS.Remove(SaleBILLLIS[i]); for (int j = 0; j < ReceiveBILLLIST.Count; j++) { if (strings.Contains(ReceiveBILLLIST[j]?.FBIllNO)) { ReceiveBILLLIST.Remove(ReceiveBILLLIST[j]); } } } } for (int i = 0; i < ReceiveBILLLIST.Count; i++) { if (strings1.Contains(ReceiveBILLLIST[i].FBIllNO)) { string[] strings = ReceiveBILLLIST[i].FCONTRACTNUMBER?.Split(','); ReceiveBILLLIST.Remove(ReceiveBILLLIST[i]); for (int j = 0; j < SaleBILLLIS.Count; j++) { if (strings.Contains(SaleBILLLIS[j]?.FCONTRACTNUMBER)) { SaleBILLLIS.Remove(SaleBILLLIS[j]); } } } } //删除数据 this.View.Model.DeleteEntryData("FEntity"); this.View.Model.DeleteEntryData("FEntity2"); //绑定销售订单数据 for (int i = 0; i < SaleBILLLIS.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity"); this.View.Model.CreateNewEntryRow("FEntity"); //单据编号 this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i); //类型 this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i); //客户名称 this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i); //单据编号(收款单) this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i); //是否核销匹对 this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated", SaleBILLLIS[i]?.FCreated, i); //销售员 this.View.Model.SetValue("FSalesman", SaleBILLLIS[i]?.FSalesman, i); } this.View.UpdateView("FEntity"); //绑定收款单数据 for (int i = 0; i < ReceiveBILLLIST.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.CreateNewEntryRow("FEntity2"); //单据编号 this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i].FDate, i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i); //客户名称 this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i); //备注 this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i].FCONTRACTNUMBER, i); //商务人员 this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i); //销售员 this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i]?.FSalesman, i); } this.View.UpdateView("FEntity2"); } else { return; } }); } } /// /// 生成记录单自动刷新 /// /// public override void DataChanged(DataChangedEventArgs e) { if (e.Field.Key.Equals("FShuaXin")) { //文本字段触发值更新时,模拟用户点击菜单,此处模拟点击“选项”菜单: ((IDynamicFormViewService)this.View).MainBarItemClick("MBBA_tbButton_1"); } if (e.Field.Key.Equals("FCONTRACTNUMBER2")) { if (INDEXNumber == 0) { //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; SaleBILLLIS = new List(); foreach (var item in FEntity) { SaleBILLLIS.Add(new CombinaClass() { FBIllNO = item["FBILLNO"]?.ToString(), FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(), FClient = Convert.ToInt32(item["FClient_Id"]), FDate = item["FDate"]?.ToString(), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]), FSKBIllNO = item["FSKBILLNO"]?.ToString(), FCreated = Convert.ToInt32(item["FCreated_Id"]), FSalesman = Convert.ToInt32(item["FSalesman_Id"]), FType = item["FType"]?.ToString(), FISHX = item["FISHX"]?.ToString(), FWeiYi = item["FWeiYi"]?.ToString(), }); } var fBILLNO = this.Model.GetValue("FBILLNO2", e.Row); var fCONTRACTNUMBER = this.Model.GetValue("FCONTRACTNUMBER2", e.Row); //判断是否为空 if (string.IsNullOrWhiteSpace(fCONTRACTNUMBER?.ToString())) { this.Model.SetValue("FISHX2", "", e.Row); foreach (var item in SaleBILLLIS) { if (!string.IsNullOrEmpty(item.FSKBIllNO)) { string[] strings = item.FSKBIllNO?.ToString()?.Split(','); //判断假如是一个收款单对应多个销售订单 if (strings.Contains(fBILLNO?.ToString()) && strings.Count() == 1) { item.FSKBIllNO = ""; item.FISHX = ""; item.FWeiYi = ""; } //判断多个收款单对应一个销售订单 else if (strings.Contains(fBILLNO?.ToString()) && strings.Count() > 1) { List strings1 = new List(strings); strings1.Remove(fBILLNO?.ToString()); string strings2 = string.Join(",", strings1); item.FSKBIllNO = strings2; } } } } int n = 1; //判断多个销售订单对应1个收款单(只删除一个或多个但不是空的情况) if (!string.IsNullOrWhiteSpace(fCONTRACTNUMBER?.ToString())) { string[] strings = fCONTRACTNUMBER?.ToString()?.Split(','); foreach (var item in SaleBILLLIS) { if (!string.IsNullOrEmpty(item.FSKBIllNO) && item.FSKBIllNO == fBILLNO?.ToString()) { if (!strings.Contains(item.FCONTRACTNUMBER)) { item.FSKBIllNO = ""; item.FISHX = ""; item.FWeiYi = ""; } } if (strings.Contains(item.FCONTRACTNUMBER)) { item.FSKBIllNO = fBILLNO?.ToString(); item.FISHX = "已核销配对"; this.Model.SetValue("FISHX2", "已核销配对", e.Row); } } n = SaleBILLLIS.Count(a => strings.Contains(a.FCONTRACTNUMBER)); } if (n == 0) { this.Model.SetValue("FISHX2", "", e.Row); } //删除数据 this.View.Model.DeleteEntryData("FEntity"); //绑定销售订单数据 for (int i = 0; i < SaleBILLLIS.Count; i++) { int rowindex = this.View.Model.GetEntryRowCount("FEntity"); this.View.Model.CreateNewEntryRow("FEntity"); //单据编号 this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i); //日期 this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i); //金额 this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i); //类型 this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i); //纸质合同号 this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i); //客户名称 this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i); //已核销金额 this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i); //待核销金额 this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i); //单据编号(收款单) this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i); //是否核销匹对 this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i); //是否唯一 this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i); //商务人员 this.View.Model.SetValue("FCreated", SaleBILLLIS[i]?.FCreated, i); //销售员 this.View.Model.SetValue("FSalesman", SaleBILLLIS[i]?.FSalesman, i); } this.View.UpdateView("FEntity"); } } if (e.Field.Key.Equals("F_ISHX")) { //获取当前复选框的值 var IsHX = this.Model.GetValue("F_ISHX", e.Row)?.ToString(); var ISWeiYi = this.Model.GetValue("FWeiYi2", e.Row)?.ToString(); //查询对应的销售订单/应收单-》勾选复选框 var fc = this.Model.GetValue("FCONTRACTNUMBER2", e.Row)?.ToString(); if (IsHX == "True") { //查看是否为唯一 if (!string.IsNullOrEmpty(ISWeiYi) && ISWeiYi == "否") { //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; for (int i = 0; i < FEntity.Count; i++) { if (FEntity[i]["FCONTRACTNUMBER"]?.ToString() == fc) { this.Model.SetValue("F_ISGX", "True", i); } } } } if (IsHX == "False") { //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; int n = 0; //判断其他收款单是否勾选 foreach (var item in FEntity2) { if (item["F_ISHX"]?.ToString() == "True" && item["FCONTRACTNUMBER2"]?.ToString() == fc) { n++; } } if (n == 0) { //查看是否为唯一 if (!string.IsNullOrEmpty(ISWeiYi) && ISWeiYi == "否") { //获取销售订单/应收单单据体数据 DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; for (int i = 0; i < FEntity.Count; i++) { if (FEntity[i]["FCONTRACTNUMBER"]?.ToString() == fc) { this.Model.SetValue("F_ISGX", "False", i); } } } } } } } } }