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 GenTemplateTable(string tableName, GenTemplateTable parent, string ruleField, string errField, string otmField, string idField, string parentIdField) { Name = tableName; Parent = parent; IsSub = true; RuleField = ruleField; ErrField = errField; OtmField = otmField; IdField = idField; ParentIdField = parentIdField; }
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 ModuleGenerator(Logger logger, //Логгер TablsList dataTabls, //Таблицы с данными для генерации string templateFile, //Файл шаблона генерации GenTemplateTable table, //Главная таблица шаблона генерации GenTemplateTable subTable = null) //Подчиненная таблица шаблона генерации : base(logger) { GenErrorsCount = 0; AddEvent("Загрузка списка функций"); FunsChecker = new FunsChecker(FunsCheckType.Gen); Functions = new GenFunctions(); DataTabls = dataTabls; try { AddEvent("Загрузка таблиц шаблона генерации", templateFile + ", " + table.Name); bool hasSub = subTable != null; using (var rec = new DaoRec(templateFile, table.QueryString)) using (var subRec = !hasSub ? null : new DaoRec(rec.DaoDb, subTable.QueryString)) { if (hasSub && !subRec.EOF) { subRec.MoveFirst(); } while (rec.Read()) { var row = new GenRow(this, dataTabls, table, rec, subTable, subRec); GenErrorsCount += row.Keeper.Errors.Count; _rowsGen.Add(row.Id, row); } } } catch (Exception ex) { AddError("Ошибка при загрузке шаблона генерации", ex, templateFile); } }