Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 //Генерация расчетных параметров для одного модуля
 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);
         }
     }
 }
Esempio n. 3
0
 //Конструктор для подчиненной таблицы
 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;
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        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);
            }
        }