public ParamNode(TablikKeeper keeper, ITerminalNode terminal, TablikCalcParam param, IEnumerable <IExprNode> args = null) : base(keeper, terminal) { Param = param; Args = args != null?args.ToArray() : new IExprNode[0]; if (Keeper.Module == param.Module && !Keeper.Param.UsedParams.ContainsKey(param)) { Keeper.Param.UsedParams.Add(param, terminal.Symbol); } }
//Загрузить параметры из таблицы private void LoadPars(DaoRec rec) { while (rec.Read()) { var par = new TablikCalcParam(this, rec, false, false); ParamsId.Add(par.ParamId, par); ParamsAll.Add(par.Code, par); if (par.CalcOn && !par.IsFatalError) { Params.Add(par.Code, par); } } }
//Определение типа данных public override void DefineType() { Type = new SimpleType(DataType.Void); if (!(Args[0].Type is TablikCalcParam) || ((TablikCalcParam)Args[0].Type).Params.Count == 0) { AddError("Аргументом функция Подпараметры может быть только параметр с подпараметрами"); } else { Param = (TablikCalcParam)Args[0].Type; Keeper.Param.BaseParams.Add(Param); } }
//Загрузить подпараметры из таблицы private void LoadSubPars(DaoRec rec) { while (rec.Read()) { var par = new TablikCalcParam(this, rec, true, false); SubParamsId.Add(par.ParamId, par); var opar = ParamsId[par.OwnerId]; opar.ParamsId.Add(par.ParamId, par); opar.ParamsAll.Add(par.Code, par); if (par.CalcOn && !par.IsFatalError) { opar.Params.Add(par.Code, par); } } }
//Добавляет параметр в дерево параметров private void JoinToParamTree() { if (Code == null) { return; } if (OwnerId != 0) { Owner = Module.ParamsId[OwnerId]; FullCode = Owner.FullCode + "." + Code; CalcOn &= Owner.CalcOn; } else { FullCode = Code; } var owner = OwnerId == 0 ? (ISubParams)Module : Owner; owner.ParamsId.Add(ParamId, this); if (!owner.ParamsAll.ContainsKey(Code) || !owner.ParamsAll[Code].CalcOn) { owner.ParamsAll.Add(Code, this, true); } if (CalcOn) { if (owner.Params.ContainsKey(Code)) { ErrMess += "Повтор кода расчетного параметра (" + Code + "); "; owner.Params[Code].ErrMess += "Повтор кода расчетного параметра (" + Code + "); "; } else { owner.Params.Add(Code, this); } } }
public TablikKeeper(TablikCalcParam param) { Param = param; }