/// <summary>Выполнение формул С объёмом</summary> public KeyValuePair <uint, decimal> RunFormula(clValue value, uint volumeID = 0) { decimal result = 0; string formulaText = value.CalculationFormula.Formula; var formula = Helpers.CalcHelper.GetFormula(formulaText); if (SetConst(formula, value)) { if (volumeID > 0) { Volume volume = _sample.Volumes.First(x => x.ID == volumeID); var period = Helpers.LogicHelper.PeiodLogic.FirstModel(volume.PeriodID); if (value.PriceNorm == null) { formula.TrySetValue(Const_Class.Tariff, period.Price); } formula.TrySetValue(Const_Class.Volume, (decimal)volume.Value); result += GetRoundedFormulaSumm(formula); } else if (Norm.CurtName.Contains("621")) { foreach (var volume in _sample.Volumes) { var period = Helpers.LogicHelper.PeiodLogic.FirstModel(volume.PeriodID); if (value.PriceNorm == null) { formula.TrySetValue(Const_Class.Tariff, period.Price); } formula.TrySetValue(Const_Class.Volume, (decimal)volume.Value); result += Math_Class.CalculateStroku(formulaText, 7); } } else { result = GetRoundedFormulaSumm(formula); } } return(new KeyValuePair <uint, decimal>(value.Pollution.ID, result)); }
/// <summary>Протестит значения на косяки</summary> public static HitModePollution[] TestValues(BaseCalc_Class calc) { var last = LastHitObject(calc.Objecte.ID); List <HitModePollution> result = new List <HitModePollution>(); foreach (var mode in HitModePollutions.Where(x => x.Joint && x.Formula.Length > 0)) { string formula = mode.Formula; HitSelectPollution joint = last.FirstOrDefault(x => x.IDHitModePollution == mode.ID); //formula = formula.Replace(Const_Class.Multiplier, mode.Multi(joint == null ? 0 : joint.Number).ToString()); //formula = formula.Replace(Const_Class.Summa, calc.Answer.Sum(x=>x.Value.Summ).ToString()); formula = formula.Replace(Const_Class.Limit, AdditionnTable.ListPeriod.Last(x => x.YM <= DateControl_Class.SelectMonth).MinLimits.ToString()); if (mode.PollutionID > 0) { if (calc.Value.FirstOrDefault(x => x.Pollution.ID == mode.PollutionID) != null) { BaseCalc_Class.SetConst(ref formula, calc.Value.First(x => x.Pollution.ID == mode.PollutionID)); if (Math_Class.Get_Comparison_Calc(formula)) { result.Add(mode); } } } else { foreach (var one in calc.Value) { BaseCalc_Class.SetConst(ref formula, one); if (Math_Class.Get_Comparison_Calc(formula)) { result.Add(mode); } } } } return(result.ToArray()); }