public GenRow(ModuleGenerator generator, //Ссылка на генератор TablsList dataTabls, //Исходные таблицы для генерации GenTemplateTable table, DaoRec rec, //Рекортсет и поля таблицы GenTemplateTable subTable, DaoRec subRec) //Рекордсет и и поля подтаблицы : base(generator, table, rec) { Id = rec.GetInt(table.IdField); var dataTabl = Rule == null ? null : ((NodeRTabl)Rule).Check(dataTabls, null); foreach (var key in Fields.Keys) { Keeper.SetFieldName(key); Fields[key].Check(dataTabl); } if (subRec != null && !subRec.EOF) { Keeper.SetFieldName(""); bool subErr = false; while (subRec.GetInt(subTable.ParentIdField) == Id) { var row = new GenSubRow(generator, dataTabls, dataTabl, subTable, subRec); if (row.Keeper.Errors.Count != 0 && !subErr) { Keeper.AddError("Ошибки в рядах подтаблицы", (IToken)null); subErr = true; } SubRows.Add(row); if (!subRec.MoveNext()) { break; } } } rec.Put(table.ErrField, Keeper.ErrMess); }
//Генерация расчетных параметров для одного модуля public void GenerateParams(string moduleDir) //Каталог модуля { using (StartLog("Генерация параметров", moduleDir)) { try { var dir = moduleDir.EndDir(); var table = new GenTemplateTable("GenParams", "GenRule", "ErrMess", "CalcOn", "ParamId"); var subTable = new GenTemplateTable("GenSubParams", table, "GenRule", "ErrMess", "CalcOn", "SubParamId", "ParamId"); var dataTabls = new TablsList(); AddEvent("Загрузка структуры исходных таблиц", dir + "Tables.accdb"); using (var db = new DaoDb(dir + "Tables.accdb")) { dataTabls.AddDbStructs(db); AddEvent("Загрузка значений из исходных таблиц"); dataTabls.LoadValues(db, true); } AddEvent("Загрузка и проверка генерирующих параметров"); var generator = new ModuleGenerator(Logger, dataTabls, dir + "CalcParams.accdb", table, subTable); generator.Generate(dir + "Compiled.accdb", "GeneratedParams", "GeneratedSubParams"); AddEvent("Генерация завершена", generator.GenErrorsCount + " ошибок"); if (generator.GenErrorsCount != 0) { SetLogResults(generator.GenErrorsCount + " ошибок"); AddCollectResult("Шаблон генерации содержит " + generator.GenErrorsCount + " ошибок"); } } catch (Exception ex) { AddError("Ошибка при генерации параметров", ex); } } }
public GenSubRow(ModuleGenerator generator, //Ссылка на генератор TablsList dataTabls, //Исходные таблицы для генерации ITablStruct dataTabl, //Таблица - шаблон генерации GenTemplateTable table, //Поля таблицы - шаблона генерации DaoRec rec) //Рекордсет таблицы результатов : base(generator, table, rec) { var subTabl = Rule == null ? dataTabl : ((INodeRTabl)Rule).Check(dataTabls, dataTabl); foreach (var key in Fields.Keys) { Keeper.SetFieldName(key); Fields[key].Check(subTabl); } rec.Put(table.ErrField, Keeper.ErrMess); }
public GenBaseRow(ModuleGenerator generator, //Ссылка на генератор GenTemplateTable table, //Описание полей таблицы-шаблона DaoRec rec) //Рекордсет таблицы шаблона генерации { Table = table; Keeper = new GenKeeper(generator); RuleString = rec.GetString(Table.RuleField); if (!RuleString.IsEmpty()) { var parse = Table.IsSub ? new SubRuleParsing(Keeper, Table.RuleField, RuleString) : new RuleParsing(Keeper, Table.RuleField, RuleString); Rule = parse.ResultTree; } foreach (Field field in rec.Recordset.Fields) { var name = field.Name; if (!Table.IsSpecial(name) && !rec.IsNull(name)) { var dataType = field.Type.ToDataType(); if (dataType != DataType.String) { Fields.Add(name, new GenConstNode(rec.GetMean(dataType, name))); } else { string s = rec.GetString(name); if (!s.Contains("[")) { Fields.Add(name, new GenConstNode(null, s)); } else { var fparse = new FieldsParsing(Keeper, name, rec.GetString(name)); var f = (IExprNode)fparse.ResultTree; if (f != null) { Fields.Add(name, f); } } } } } }
public GenKeeper(ModuleGenerator generator) { Generator = generator; }