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("收款核销5_2025-04-07")] //交互事件,在用 public class Bill5 : 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_yuyubo.GetWriteOrderDate3(this.Context, Convert.ToString(FOrgId)); var WriteReceiveDate = SQL.SqlManage_yuyubo.GetWriteReceiveDate3(this.Context, Convert.ToString(FOrgId)); SaleBILLLIS = WriteOrderDate.Select(item => new CombinaClass { Fid= Convert.ToInt32(item["FID"]), 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"]), BenCi = Convert.ToDouble(item["BenCi"]), }).ToList(); ReceiveBILLLIST = WriteReceiveDate.Select(item => new CombinaClass { Fid = Convert.ToInt32(item["FID"]), 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, BenCi=0, }).ToList(); SaleBILLLIS2 = SaleBILLLIS.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("F_BenCi", ReceiveBILLLIST[i].BenCi, RowindexNew); this.View.Model.SetValue("F_PendingAmount", ReceiveBILLLIST[i].FDAMOUNT, 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(); SaleBILLLIS = FEntity.Select(item => 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(), }).ToList(); ReceiveBILLLIST = FEntity2.Select(item => 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(), }).ToList(); //获取纸质合同号 List fString = new List(); //修改销售订单/应收单 foreach (var item in stringFBILLNOANDList[0].FBILLNOList) { var item2 = SaleBILLLIS.FirstOrDefault(h=>h.FBIllNO==item.FBILLNO); if (item2 != null) { 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; SaleBILLLIS = FEntity.Select(item => 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(), }).ToList(); var SaleBILLLISNew = SaleBILLLIS.Where(a => a.FISHX != "已核销配对").ToList(); var ReceiveBILLLIST2 = new List(); //获取收款单单据体数据 DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection; ReceiveBILLLIST2 = FEntity2.Select(item => 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"]) }).ToList(); //重置并只取父级树形数据 ReceiveBILLLIST = new List(); ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX != "已核销配对").OrderBy(t=>t.FClient).ThenBy(t=>t.FCONTRACTNUMBER).ThenBy(t=>t.FDate).ToList(); List FBILLNOLIST = new List(); List FClient = new List(); List result = new List(); var FStartTime = DateTime.Now; #region 旧版 //#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_yuyubo.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_yuyubo.GetCombinationsDataByList2(result, ReceiveBILLLIST[i].FDAMOUNT, ReceiveBILLLIST[i].FClient); // if (aaa.Count > 0) // { // //FBIllNO存放对应的销售订单编号、FBIllNO2存放对应收款单编号 // result = CombinationGenerator_yuyubo.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_yuyubo.GetCombinationsDataByList(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient); // if (resultNew2.Count > 0) // { // result = CombinationGenerator_yuyubo.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_yuyubo.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0); // result.AddRange(result2); //} ////1个销售订单对应多张收款单 //for (int i = 0; i < SaleBILLLIS2Sal.Count; i++) //{ // var resultNew2 = CombinationGenerator_yuyubo.GetCombinationsDataByListTK(result, SaleBILLLIS2Sal[i].FDAMOUNT, SaleBILLLIS2Sal[i].FClient); // if (resultNew2.Count > 0) // { // result = CombinationGenerator_yuyubo.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 #endregion #region 新版 2025-04-07 #region 匹配销售订单 var SaleBILLLIS2Sal = SaleBILLLIS2.Where(t => t.FType == "销售订单" && t.FISHX != "已核销配对").ToList(); //将销售订单根据客户分组 //var FClientList2 = SaleBILLLIS2Sal.GroupBy(t => t.FClient).ToList(); //var FClientReceiveBillList= ReceiveBILLLIST Dictionary shouKuanDetail = new Dictionary(); //先挑1张收款单对应一张销售订单 var oneToOneTemp = (from q in SaleBILLLIS2Sal join u in ReceiveBILLLIST on new { q.FClient, q.FDAMOUNT } equals new { u.FClient, u.FDAMOUNT } select new { q.FClient, q.FBIllNO, q.FCONTRACTNUMBER, u.FDAMOUNT, UFbillNo = u.FBIllNO }).ToList(); var saleList1 = oneToOneTemp.Select(t => t.FBIllNO).Distinct().ToList(); var ReceiveList1 = oneToOneTemp.Select(t => t.UFbillNo).Distinct().ToList(); if (saleList1.Count > ReceiveList1.Count) { List deleteFBIllNOList = new List(); ReceiveList1.ForEach(t => { var temp111 = oneToOneTemp.FirstOrDefault(h => h.UFbillNo == t && !deleteFBIllNOList.Contains(h.FBIllNO)); if (temp111 == null) return; var temp11 = temp111.FBIllNO; deleteFBIllNOList.Add(temp11); var item = SaleBILLLISNew.Where(h => h.FBIllNO == temp11).OrderBy(h=>h.FDate).FirstOrDefault(); //更新销售订单数据 item.FSKBIllNO = t; item.FISHX = "已核销配对"; item.BenCi = temp111.FDAMOUNT; item.FDAMOUNT = item.FDAMOUNT - item.BenCi; shouKuanDetail.Add(t + "," + item.FBIllNO, item.BenCi); //item.FYAMOUNT = item.FYAMOUNT + item.BenCi; //item.= List fString = new List(); fString.Add(item.FCONTRACTNUMBER); string fCONTRACTNUMBER = string.Join(",", fString); //更新收款单数据 var receiveItemTemp = ReceiveBILLLIST.FirstOrDefault(h => h.FBIllNO == t); if (receiveItemTemp != null) { receiveItemTemp.FCONTRACTNUMBER = fCONTRACTNUMBER; receiveItemTemp.FISHX = "已核销配对"; receiveItemTemp.BenCi = temp111.FDAMOUNT; receiveItemTemp.FDAMOUNT = receiveItemTemp.FDAMOUNT - receiveItemTemp.BenCi; //receiveItemTemp.FYAMOUNT = receiveItemTemp.FYAMOUNT + receiveItemTemp.BenCi; } }); } else { List deleteFBIllNOList = new List(); saleList1.ForEach(t => { var temp111 = oneToOneTemp.Where(h => h.FBIllNO == t && !deleteFBIllNOList.Contains(h.UFbillNo)).OrderBy(h=>h.UFbillNo).FirstOrDefault(); if (temp111 == null) return; var temp11 = temp111.UFbillNo; deleteFBIllNOList.Add(temp11); var item = SaleBILLLISNew.FirstOrDefault(h => h.FBIllNO == t); //更新销售订单数据 item.FSKBIllNO = t; item.FISHX = "已核销配对"; item.BenCi = temp111.FDAMOUNT; item.FDAMOUNT = item.FDAMOUNT - item.BenCi; //item.FYAMOUNT = item.FYAMOUNT + item.BenCi; List fString = new List(); fString.Add(item.FCONTRACTNUMBER); string fCONTRACTNUMBER = string.Join(",", fString); //更新收款单数据 var receiveItemTemp = ReceiveBILLLIST.FirstOrDefault(h => h.FBIllNO == temp11); if (receiveItemTemp != null) { receiveItemTemp.FCONTRACTNUMBER = fCONTRACTNUMBER; receiveItemTemp.FISHX = "已核销配对"; receiveItemTemp.BenCi = temp111.FDAMOUNT; receiveItemTemp.FDAMOUNT = receiveItemTemp.FDAMOUNT - receiveItemTemp.BenCi; //receiveItemTemp.FYAMOUNT = receiveItemTemp.FYAMOUNT + receiveItemTemp.BenCi; receiveItemTemp.FWeiYi = "是"; shouKuanDetail.Add(receiveItemTemp.FBIllNO + "," + item.FBIllNO, item.BenCi); } }); } //先挑1张收款单对应多张张销售订单 var SaleBILLLIS2Sa2 = SaleBILLLISNew.Where(t => t.FISHX != "已核销配对" && t.FDAMOUNT > 0).OrderBy(t => t.FClient).ThenByDescending(t => t.FBIllNO).ToList(); ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX != "已核销配对" && a.FDAMOUNT > 0 ).OrderBy(t => t.FClient).ThenByDescending(t => t.FBIllNO).ToList(); //打包式匹配法,按时间倒序逐一核销掉. ReceiveBILLLIST.ForEach(t => { var tempList = SaleBILLLIS2Sa2.Where(h => h.FClient == t.FClient && h.FISHX != "已核销配对" && t.FDAMOUNT > 0).OrderByDescending(h=>h.FBIllNO).ToList(); var FDAMOUNT = t.FDAMOUNT; List heTongList = new List(); if (t.FCONTRACTNUMBER!=null) heTongList = t.FCONTRACTNUMBER.Split(',').ToList().Distinct().ToList(); if(heTongList==null) heTongList = new List(); tempList.ForEach(sale => { if (FDAMOUNT == 0) { return; } double benCi = 0; List str = new List(); if (sale.FSKBIllNO != null) str = sale.FSKBIllNO.Split(',').ToList(); if (str == null) str = new List(); str.Add(t.FBIllNO); sale.FSKBIllNO = string.Join(",", str); if (FDAMOUNT >= sale.FDAMOUNT) { benCi= sale.FDAMOUNT; sale.BenCi = sale.FDAMOUNT; sale.FDAMOUNT = 0; sale.FISHX = "已核销配对"; } else { benCi = FDAMOUNT; sale.BenCi = FDAMOUNT; sale.FDAMOUNT = sale.FDAMOUNT - benCi; } //sale.FYAMOUNT = sale.FYAMOUNT + sale.BenCi; heTongList.Add(sale.FCONTRACTNUMBER); heTongList = heTongList.Distinct().ToList(); str = new List(); if (t.FSKBIllNO != null) str = t.FSKBIllNO.Split(',').ToList(); if (str == null) str = new List(); str.Add(sale.FBIllNO); shouKuanDetail.Add(t.FBIllNO + "," + sale.FBIllNO, benCi); FDAMOUNT = FDAMOUNT - sale.BenCi; t.FDAMOUNT = t.FDAMOUNT - benCi; //t.FYAMOUNT = t.FYAMOUNT + sale.BenCi; t.BenCi = t.BenCi+benCi; t.FCONTRACTNUMBER = string.Join(",", heTongList); if(heTongList.Count==1) t.FWeiYi = "是"; else t.FWeiYi = "否"; if (t.FDAMOUNT == 0) { t.FISHX = "已核销配对"; } }); }); #region ////1个销售订单对应多张收款单 //SaleBILLLIS2Sa2 = SaleBILLLISNew.Where(t => t.FISHX != "已核销配对").OrderBy(t => t.FClient).ThenBy(t => t.FCONTRACTNUMBER).ThenBy(t => t.FDate).ToList(); //ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX != "已核销配对").OrderBy(t => t.FClient).ThenBy(t => t.FDate).ToList(); //SaleBILLLIS2Sa2.ForEach(t => //{ // var tempList = ReceiveBILLLIST.Where(h => h.FClient == t.FClient && t.FDAMOUNT >= h.FDAMOUNT && h.FISHX != "已核销配对").OrderBy(h => h.FBIllNO).ToList(); // List sales1 = new List { t.FDAMOUNT }; // var payments2 = tempList.Select(k => k.FDAMOUNT).ToList(); // var matches = CombinationGenerator_yuyubo.MatchSalesAndPayments(sales1, payments2); // var FDAMOUNT = t.FDAMOUNT; // if (matches.Count > 0) // { // var FDAMOUNTList = matches[0].FirstOrDefault(); // tempList = tempList.Where(h => FDAMOUNTList.Contains(h.FDAMOUNT)).OrderBy(h => h.FDate).ToList(); // var fbillNoList = tempList.Select(h => h.FBIllNO).ToList(); // var ReceiveBILLLTempList = ReceiveBILLLIST.Where(h => fbillNoList.Contains(h.FBIllNO)).ToList(); // List fString = new List(); // ReceiveBILLLTempList.ForEach(item => // { // //更新收款单数据 // if (FDAMOUNT > 0) // { // //item.FSKBIllNO = t.FBIllNO; // item.FISHX = "已核销配对"; // item.FCONTRACTNUMBER = t.FCONTRACTNUMBER; // fString.Add(item.FBIllNO); // } // }); // //更新销售订单数据 // t.FISHX = "已核销配对"; // string fCONTRACTNUMBER = string.Join(",", fString); // //更新收款单数据 // t.FSKBIllNO = fCONTRACTNUMBER; // } //}); #endregion #endregion ////删除数据 //this.View.Model.DeleteEntryData("FEntity"); #region 绑定销售订单数据 ////绑定销售订单数据 //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 #endregion //获取已配对的数据 List SaleBILLLISNew2 = SaleBILLLISNew.Where(a => a.FSKBIllNO !="" && a.FSKBIllNO != null).ToList(); INDEXNumber = 1; //绑定收款单数据 foreach (var item in ReceiveBILLLIST) { if (!string.IsNullOrWhiteSpace(item.FCONTRACTNUMBER)) { this.View.Model.SetValue("FISHX2", item.FISHX, item.FRow); this.View.Model.SetValue("FCONTRACTNUMBER2", item.FCONTRACTNUMBER, item.FRow); this.View.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.View.Model.SetValue("F_MBBA_Decimal_qtr", sumAmount, item.FRow); this.View.Model.SetValue("F_PendingAmount", item.FDAMOUNT, item.FRow); this.View.Model.SetValue("F_BenCi", item.BenCi, item.FRow); this.View.Model.SetValue("F_MBBA_Decimal_3iy", item.FYAMOUNT, item.FRow); List strings = new List(); if (item.FCONTRACTNUMBER != null) strings = item.FCONTRACTNUMBER.Split(',').ToList(); var tempList2 = SaleBILLLISNew2.Where(h => strings.Contains(h.FCONTRACTNUMBER)).ToList(); var Rowindex = this.View.Model.GetEntryRowCount("FEntity2"); for (int i = 0; i < tempList2.Count; i++) { this.View.Model.SetValue("FPARENTROWID", FROWID, item.FRow); this.View.Model.CreateNewEntryRow("FEntity2"); this.View.Model.SetValue("FROWID", Guid.NewGuid().ToString(), Rowindex+i); this.View.Model.SetValue("FPARENTROWID", FROWID, Rowindex + i); this.View.Model.SetValue("FBILLNO2", tempList2[i].FBIllNO, Rowindex + i); if (DateTime.TryParseExact(item?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { this.View.Model.SetValue("FDate2", item?.FDate, Rowindex + i); } else { this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(item?.FDate)).ToString("yyyy-MM-dd"), Rowindex + i); } this.View.Model.SetValue("F_MBBA_Decimal_imu", tempList2[i].FALLAMOUNT, Rowindex + i); this.View.Model.SetValue("FClient2", tempList2[i].FClient, Rowindex + i); this.View.Model.SetValue("FCreated2", tempList2[i].FCreated, Rowindex + i); this.View.Model.SetValue("FCONTRACTNUMBER2", tempList2[i].FCONTRACTNUMBER, Rowindex + i); this.View.Model.SetValue("FSalesman2", tempList2[i].FSalesman, Rowindex + i); this.View.Model.SetValue("F_MBBA_Decimal_qtr", tempList2[i].FDAMOUNT, Rowindex + i); this.View.Model.SetValue("F_PendingAmount", tempList2[i].FDAMOUNT, Rowindex + i); double benci = shouKuanDetail[item.FBIllNO+","+ tempList2[i].FBIllNO]; this.View.Model.SetValue("F_BenCi", benci, Rowindex + i); this.View.Model.SetValue("F_MBBA_Decimal_3iy", tempList2[i].FYAMOUNT, Rowindex + i); } this.View.UpdateView("FEntity2"); //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,汇总类型数据行  } } }