using DocumentFormat.OpenXml.Drawing.Spreadsheet; using Kingdee.BOS.App.Core.Utils; using Kingdee.BOS.BusinessEntity.BusinessFlow; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Core.Enums; using Kingdee.BOS.Core.Msg; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Orm.Exceptions; using Kingdee.BOS.Util; using Newtonsoft.Json; using NPOI.SS.Formula.Functions; 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 System.Web.UI.WebControls; using static Pilot_KD_Parino.QPHY_AutoWrire.Bill2; using static Pilot_KD_Parino.QPHY_AutoWrire.Bill3; namespace Pilot_KD_Parino.QPHY_AutoWrire { [HotUpdate] [Description("收款核销6_05版本的备份")] //交互事件,在用 public class Bill6 : AbstractDynamicFormPlugIn { //全局存储单据体数据 public List SaleBILLLIS = new List(); public List ReceiveBILLLIST = new List(); //拿来匹配的集合 public List SaleBILLLIS2 = new List(); int INDEXNumber = 0; private int level = 0;//层级 private string parentRowId = "";//父项ID string dateFormat = "yyyy-MM-dd HH:mm:ss"; // 指定的日期格式 /// /// 开始 /// /// 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"]), F_RowNew = 1 //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"); int RowindexNew = Rowindex; this.View.Model.CreateNewEntryRow("FEntity2"); string FROWID = SequentialGuid.NewGuid().ToString(); this.View.Model.SetValue("FROWID", FROWID, RowindexNew); this.View.Model.SetValue("FPARENTROWID", FROWID, RowindexNew); this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, RowindexNew); this.View.Model.SetValue("FDATE2", DateTime.Now.AddDays(-1 * Convert.ToInt32(ReceiveBILLLIST[i].FDate)).ToString("yyyy-MM-dd"), RowindexNew); this.View.Model.SetValue("F_MBBA_Decimal_imu", ReceiveBILLLIST[i].FALLAMOUNT, RowindexNew); this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, RowindexNew); this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, RowindexNew); this.View.Model.SetValue("F_MBBA_Decimal_3iy", ReceiveBILLLIST[i].FYAMOUNT, RowindexNew); this.View.Model.SetValue("F_MBBA_Decimal_lsn", ReceiveBILLLIST[i].FDAMOUNT, RowindexNew); this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, RowindexNew); this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, RowindexNew); this.View.Model.SetValue("F_RowNew", ReceiveBILLLIST[i].F_RowNew, RowindexNew); } 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(); var fRow = e.Row; //获取收款单单据体数据 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, fRow); } } /// /// 弹出动态表单窗口 /// private void ShowDynamicForm(List stringFBILLNO, string fBillNo, int fRow) { // 将列表序列化为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(); //用于存储子树形的数据 var SaleBILLLIS2 = 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_imu"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_3iy"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_lsn"]), 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) { SaleBILLLIS2.Add(item2); item2.FSKBIllNO = stringFBILLNOANDList[0].FBILLNO; fString.Add(item2.FCONTRACTNUMBER); item2.FISHX = "已核销配对"; } } } //获取纸质合同号 string fCONTRACTNUMBER = string.Join(",", fString); //修改收款单 INDEXNumber = 1; this.Model.SetValue("FCONTRACTNUMBER2", fCONTRACTNUMBER, fRow); this.Model.SetValue("FISHX2", "已核销配对", fRow); double sumAmount = 0; int CurrentIndex2 = this.View.Model.GetEntryCurrentRowIndex("FEntity2"); var FROWID = Convert.ToString(this.View.Model.GetValue("FROWID", CurrentIndex2)); for (int i = 0; i < SaleBILLLIS2.Count; i++) { var Rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.SetValue("FPARENTROWID", FROWID, CurrentIndex2); this.View.Model.CreateNewEntryRow("FEntity2"); this.View.Model.SetValue("FROWID", SequentialGuid.NewGuid().ToString(), Rowindex); this.View.Model.SetValue("FPARENTROWID", FROWID, Rowindex); this.View.Model.SetValue("FBILLNO2", SaleBILLLIS2[i].FBIllNO, Rowindex); this.View.Model.SetValue("FDATE2", SaleBILLLIS2[i].FDate, Rowindex); this.View.Model.SetValue("F_MBBA_Decimal_imu", SaleBILLLIS2[i].FALLAMOUNT, Rowindex); this.View.Model.SetValue("FClient2", SaleBILLLIS2[i].FClient, Rowindex); this.View.Model.SetValue("FCreated2", SaleBILLLIS2[i].FCreated, Rowindex); this.View.Model.SetValue("FCONTRACTNUMBER2", SaleBILLLIS2[i].FCONTRACTNUMBER, Rowindex); this.View.Model.SetValue("FSalesman2", SaleBILLLIS2[i].FSalesman, Rowindex); this.View.UpdateView("FEntity2"); sumAmount += SaleBILLLIS2[i].FALLAMOUNT; } this.Model.SetValue("F_MBBA_Decimal_qtr", sumAmount, fRow); //删除数据 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"); INDEXNumber = 0; } }); } /// /// 点击按钮操作 /// /// public override void AfterBarItemClick(AfterBarItemClickEventArgs e) { base.AfterBarItemClick(e); //自动匹配 if (e.BarItemKey.ToString().Equals("MBBA_tbButton_2")) { #region 全部 //销售订单绑定数据 SaleBILLLIS = new List(); DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection; 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(), }); } var SaleBILLLISNew = SaleBILLLIS.Where(a => a.FISHX != "已核销配对").ToList(); var ReceiveBILLLIST2 = new List(); //获取收款单单据体数据 DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; foreach (var item in FEntity2) { ReceiveBILLLIST2.Add(new CombinaClass() { FBIllNO = item["FBILLNO2"]?.ToString(), FDate = item["FDate2"]?.ToString(), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_imu"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_3iy"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_lsn"]), FClient = Convert.ToInt32(item["FClient2_Id"]), FCreated = Convert.ToInt32(item["FCreated2_Id"]), FRemark = item["FRemark"]?.ToString(), FSalesman = Convert.ToInt32(item["FSalesman2_Id"]), FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(), FRow = Convert.ToInt32(item["Seq"]) - 1, F_RowNew = Convert.ToInt32(item["F_RowNew"]) }); } //重置并只取父级树形数据 ReceiveBILLLIST = new List(); ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX != "已核销配对").ToList(); 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(); //-----------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; item.FISHX = "已核销配对"; fString.Add(item.FCONTRACTNUMBER); } } string fCONTRACTNUMBER = string.Join(",", fString); //更新收款单数据 ReceiveBILLLIST[i].FCONTRACTNUMBER = fCONTRACTNUMBER; ReceiveBILLLIST[i].FISHX = "已核销配对"; //删除已核销匹对的收款单 ReceiveBILLLISTNew.Remove(ReceiveBILLLIST[i]); } } #region 隐藏代码 //先挑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 #endregion #region 匹配应收单 //var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单" && t.FISHX != "已核销配对").ToList(); var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单" && t.FISHX != "已核销配对").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 ReceiveBILLLIST.Where(t => resultNew2[0].FBIllNO2.Contains(t.FBIllNO))) { ReceiveBILLLISTNew.Remove(item); } foreach (var item in SaleBILLLISNew.Where(a => a.FBIllNO == SaleBILLLIS2Receive[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 = SaleBILLLIS2Receive[i].FCONTRACTNUMBER; item2.FWeiYi = "否"; //if (item2.FDAMOUNT != 0) //{ // item2.FYAMOUNT = item2.FDAMOUNT; //} //item2.FDAMOUNT = 0; item2.FISHX = "已核销配对"; } } } SaleBILLLIS2Receive.Remove(SaleBILLLIS2Receive[i]); } } //-----------20250118--------------------↑ #endregion //删除数据 this.View.Model.DeleteEntryData("FEntity"); #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); 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); } this.View.UpdateView("FEntity"); #endregion //获取已配对的数据 List SaleBILLLISNew2 = SaleBILLLISNew.Where(a => a.FISHX == "已核销配对").ToList(); INDEXNumber = 1; //绑定收款单数据 foreach (var item in ReceiveBILLLIST) { if (!string.IsNullOrWhiteSpace(item.FCONTRACTNUMBER)) { this.Model.SetValue("FISHX2", item.FISHX, item.FRow); this.Model.SetValue("FCONTRACTNUMBER2", item.FCONTRACTNUMBER, item.FRow); this.Model.SetValue("FWeiYi2", item.FWeiYi, item.FRow); var FROWID = Convert.ToString(this.View.Model.GetValue("FROWID", item.FRow)); var sumAmount = this.Model.GetValue("F_MBBA_Decimal_imu", item.FRow); this.Model.SetValue("F_MBBA_Decimal_qtr", sumAmount, item.FRow); string[] strings = item.FCONTRACTNUMBER.Split(','); if (strings.Count() == 1 && item.FWeiYi == "否") { for (int i = 0; i < SaleBILLLISNew2.Count; i++) { if (strings.Contains(SaleBILLLISNew2[i].FCONTRACTNUMBER)) { var Rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.SetValue("FPARENTROWID", FROWID, item.FRow); this.View.Model.CreateNewEntryRow("FEntity2"); this.View.Model.SetValue("FROWID", SequentialGuid.NewGuid().ToString(), Rowindex); this.View.Model.SetValue("FPARENTROWID", FROWID, Rowindex); this.View.Model.SetValue("FBILLNO2", SaleBILLLISNew2[i].FBIllNO, Rowindex); if (DateTime.TryParseExact(item?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { this.View.Model.SetValue("FDate2", item?.FDate, Rowindex); } else { this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(item?.FDate)).ToString("yyyy-MM-dd"), Rowindex); } this.View.Model.SetValue("F_MBBA_Decimal_imu", item.FDAMOUNT, Rowindex); this.View.Model.SetValue("FClient2", SaleBILLLISNew2[i].FClient, Rowindex); this.View.Model.SetValue("FCreated2", SaleBILLLISNew2[i].FCreated, Rowindex); this.View.Model.SetValue("FCONTRACTNUMBER2", SaleBILLLISNew2[i].FCONTRACTNUMBER, Rowindex); this.View.Model.SetValue("FSalesman2", SaleBILLLISNew2[i].FSalesman, Rowindex); this.View.Model.SetValue("F_MBBA_Decimal_qtr", SaleBILLLISNew2[i].FALLAMOUNT, Rowindex); this.View.UpdateView("FEntity2"); } } } else { for (int i = 0; i < SaleBILLLISNew2.Count; i++) { if (strings.Contains(SaleBILLLISNew2[i].FCONTRACTNUMBER)) { var Rowindex = this.View.Model.GetEntryRowCount("FEntity2"); this.View.Model.SetValue("FPARENTROWID", FROWID, item.FRow); this.View.Model.CreateNewEntryRow("FEntity2"); this.View.Model.SetValue("FROWID", SequentialGuid.NewGuid().ToString(), Rowindex); this.View.Model.SetValue("FPARENTROWID", FROWID, Rowindex); this.View.Model.SetValue("FBILLNO2", SaleBILLLISNew2[i].FBIllNO, Rowindex); if (DateTime.TryParseExact(item?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { this.View.Model.SetValue("FDate2", item?.FDate, Rowindex); } else { this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(item?.FDate)).ToString("yyyy-MM-dd"), Rowindex); } this.View.Model.SetValue("F_MBBA_Decimal_imu", SaleBILLLISNew2[i].FALLAMOUNT, Rowindex); this.View.Model.SetValue("FClient2", SaleBILLLISNew2[i].FClient, Rowindex); this.View.Model.SetValue("FCreated2", SaleBILLLISNew2[i].FCreated, Rowindex); this.View.Model.SetValue("FCONTRACTNUMBER2", SaleBILLLISNew2[i].FCONTRACTNUMBER, Rowindex); this.View.Model.SetValue("FSalesman2", SaleBILLLISNew2[i].FSalesman, Rowindex); this.View.Model.SetValue("F_MBBA_Decimal_qtr", SaleBILLLISNew2[i].FALLAMOUNT, Rowindex); this.View.UpdateView("FEntity2"); } } } this.Model.SetValue("FROWEXPANDTYPE", (int)ENUM_ROWTYPE.Expand, item.FRow); } } TreeEntryGrid entryGrid = this.View.GetControl("FEntity2") as TreeEntryGrid; DynamicObjectCollection entryGrid2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; if (entryGrid != null) { for (int i = 0; i < entryGrid2.Count; i++) { entryGrid.ExpandedRow(i); } } var FEndTime = DateTime.Now; TimeSpan timeSpan = FEndTime - FStartTime; this.View.ShowMessage(string.Format("匹配成功,匹配耗费时长为:{0}s", Math.Round(timeSpan.TotalMilliseconds / 1000))); INDEXNumber = 0; } //生成核销记录单 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(); var ReceiveBILLLIST2 = 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) { ReceiveBILLLIST2.Add(new CombinaClass() { FBIllNO = Convert.ToString(item["FBILLNO2"]), FDate = Convert.ToString(item["FDate2"]), FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_imu"]), FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_3iy"]), FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_lsn"]), 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(), FRow = Convert.ToInt32(item["Seq"]) - 1, F_RowNew = Convert.ToInt32(item["F_RowNew"]) }); } ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX == "已核销配对").ToList(); //循环收款单 foreach (var item in FEntity2) { var s1 = Convert.ToInt32(item["F_RowNew"]); var s2 = item["F_ISHX"]?.ToString(); var s3 = string.IsNullOrWhiteSpace(item["FISHX2"]?.ToString()); var s4 = string.IsNullOrWhiteSpace(item["FWeiYi2"]?.ToString()); //创建对象存储 var SKList = new CombinaAddSK(); //过滤未匹对上的数据/过滤除了收款单1对1、1对多的数据 if (Convert.ToInt32(item["F_RowNew"]) == 1 && 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_lsn"]); 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_lsn"]); 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(); int ISXSNUM = 0; //循环收款单/新增核销记录 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.FCONTRACTNUMBER); ISXSNUM++; } } //循环(销售订单/应收单)/新增核销记录 foreach (var item in fCombinaAddClass1) { //获取收款单 var list = item.SKList; //汇总金额 var Amount = list.Sum(a => a.FALLAMOUNT); //收款单/销售订单-应收单判断客户字段 int isTrue2 = list.GroupBy(t => t.FClient).Count(); //判断是否是同一个客户 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 { //创建核销记录单 strings2.Add(item.FBIllNO); strings1.Add(item.FCONTRACTNUMBER); //创建核销记录单 string FBILLNO = CommonHelper.CreateAutoWrireRecord3(this.Context, Convert.ToString(FOrgId), item, item.SKList); Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO); ISXSNUM++; } } if (!ErrMessage) { this.View.ShowMessage(Message); } else { this.View.ShowErrMessage(Message); } //如果存在生成成功的、也有生成失败的不走刷新功能直接将成功的单据体数据删除! List SaleBILLLIStext = new List(); foreach (var item in SaleBILLLIS) { if (strings2.Contains(item?.FBIllNO) || strings1.Contains(item?.FCONTRACTNUMBER)) { SaleBILLLIStext.Add(item); } } foreach (var item in SaleBILLLIStext) { SaleBILLLIS.Remove(item); } if (ISXSNUM == 1) { //删除只有一条数据的收款单 foreach (var item in strings1) { for (int i = 0; i < ReceiveBILLLIST.Count; i++) { if (ReceiveBILLLIST[i]?.FCONTRACTNUMBER == item?.ToString()) { this.Model.DeleteEntryRow("FEntity2", ReceiveBILLLIST[i].FRow); } } } //删除数据 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"); } else { this.Model.SetValue("FShuaXin", "需要更新"); } } else { return; } }); } } /// /// 单据体值更新事件 /// /// public override void DataChanged(DataChangedEventArgs e) { base.DataChanged(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); this.Model.SetValue("F_MBBA_Decimal_qtr", 0, e.Row); //获取当前的父id var fPARENTROWID = this.Model.GetValue("FPARENTROWID", e.Row)?.ToString(); DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; //获取行数 List ints = new List(); foreach (var fEntity in FEntity2) { if (fEntity["PARENTROWID"]?.ToString() == fPARENTROWID && fEntity["F_RowNew"]?.ToString() == "0") { ints.Add(Convert.ToInt32(fEntity["seq"]) - 1); } } //循环删除子项 for (int i = 0; i < ints.Count; i++) { this.View.Model.DeleteEntryRow("FEntity2", ints[0]); } 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())) { double sumAmount = 0; string[] strings = fCONTRACTNUMBER?.ToString()?.Split(','); var FROWID = Convert.ToString(this.View.Model.GetValue("FROWID", e.Row)); var Rowindex = this.View.Model.GetEntryRowCount("FEntity2"); 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); //this.View.Model.SetValue("FPARENTROWID", FROWID, item.FRow); //this.View.Model.CreateNewEntryRow("FEntity2"); //this.View.Model.SetValue("FROWID", SequentialGuid.NewGuid().ToString(), Rowindex); //this.View.Model.SetValue("FPARENTROWID", FROWID, Rowindex); //this.View.Model.SetValue("FBILLNO2", item.FBIllNO, Rowindex); //if (DateTime.TryParseExact(item?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) //{ // this.View.Model.SetValue("FDate2", item?.FDate, Rowindex); //} //else //{ // this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(item?.FDate)).ToString("yyyy-MM-dd"), Rowindex); //} //this.View.Model.SetValue("F_MBBA_Decimal_imu", item.FALLAMOUNT, Rowindex); //this.View.Model.SetValue("FClient2", item.FClient, Rowindex); //this.View.Model.SetValue("FCreated2", item.FCreated, Rowindex); //this.View.Model.SetValue("FCONTRACTNUMBER2", item.FCONTRACTNUMBER, Rowindex); //this.View.Model.SetValue("FSalesman2", item.FSalesman, Rowindex); //this.View.UpdateView("FEntity2"); sumAmount += item.FALLAMOUNT; } } this.Model.SetValue("F_MBBA_Decimal_qtr", sumAmount, 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); } } } } } } } public enum ENUM_ROWTYPE : int { Default = 0, Header = 1,/// 0000 0000 0001,表头类型数据行  Normal = 16,///0000 0001 0000,普通数据行 Expand = 32,///0000 0010 0000,包含展开控件数据行 ExpandWaiting = 64,///0000 0100 0000,包含展开等待数据请求行 Summary = 128///0001 0000 000,汇总类型数据行  } } }