示例#1
0
//#endif
        public object get(int i, int j)
        {
            object v = null;
            try { v = _matr[i, j]; }
            catch { Log.FATAL("ошибка при обращении к Matr[" + i + "," + j + "]"); }
            return v;
        }
示例#2
0
        /// <param name="fetch_rqst"></param>
        /// <example>FetchInit("SFacc/2:3")</example>
        public void FetchInit(string fetch_rqst)
        {
            Log.set("FetchInit(fetch_rqst)");
            try
            {
                if (string.IsNullOrEmpty(fetch_rqst)) { FetchInit(); return; }
                string[] ar_rqst = fetch_rqst.Split('/');
                if (!Documents.ContainsKey(ar_rqst[0])) Log.FATAL("нет такого Документа");
                string strFetch = ar_rqst[0] + "/" + ar_rqst[1];
                if (docDic.ContainsKey(strFetch)) return; // уже инициирован -> return
                Document doc = getDoc(ar_rqst[0]);
                string[] cols = ar_rqst[1].Split(':');
                int key = Lib.ToInt(cols[0]);
                int val = Lib.ToInt(cols[1]);
                Dictionary<string, string> keyDic = new Dictionary<string, string>();
                docDic.Add(strFetch, keyDic);
                DateTime t0 = DateTime.Now;
                for (int i = 1; i <= doc.Body.iEOL(); i++)
                {

                    string s1 = doc.Body.Strng(i, key);
                    if (s1 != "") try { keyDic.Add(s1, doc.Body.Strng(i, val)); }
                        catch
                        {
                            Log.Warning("Запрос \"" + fetch_rqst + " Строка " + i
                                + " неуникальное значение \"" + s1 + "\" в ключевом поле запроса!");
                        }
                }
                DateTime t1 = DateTime.Now;
                new Log("-> " + (t1 - t0));
            }
            catch { Log.FATAL("ошибка запроса \"" + fetch_rqst + "\" для Документа \"" + name + "\""); }
            finally { Log.exit(); }
        }
示例#3
0
        public static Docs UpgradeFrExcel(Docs doc, string strToDo)
        {
            Log.set("UpgradeFrExcel(" + doc.name + ", " + strToDo + ")");
            if (strToDo != "DelEqPar1")
            {
                Log.FATAL("не написано!");
            }
//!!            List<string> Comp = getComp(doc);
            //////int i = doc.i0;
            //////foreach (string s in Comp)
            //////{
            //////    string str = Lib.ToLat(s);
            //////    List<int> pars = Mtch.GetPars(s);
            //////    if (pars[0] == pars[1])
            //////    {
            //////        string toDel = pars[0].ToString() + " x ";
            //////        str = str.Replace(toDel + toDel, toDel);
            //////    }
            //////    doc.Body[i++, 1] = str;
            //////}
            //////doc.isChanged = true;
            //////Docs.saveDoc(doc);

            //for (int i = doc.i0, iComp = 0; i <= doc.il; i++)
            //{
            //    // doc.Body.Strng(i, 1) = Copm;
            //}
            Log.exit();
            return(doc);
        }
示例#4
0
        public static void txt(Severity type, string msgcode, object p0 = null, object p1 = null, object p2 = null)
        {
            Message msg = Messages.Find(x => x.MessageID == msgcode);

            if (msg == null)
            {
                log.Fatal("TSmatch internal Message system error: Message \n\t" + msgcode
                          + "\nnot foung in collection Messages."
                          + " Possibly Message system not initiated yet, or this message not listed in TSmatch.xlsx/Message");
                Log.FATAL("ERR_03 - Message Code Not Found");
            }
            string str = string.Format(msg.text, p0, p1, p2);

            mes(str, (int)type);

            //////bool ok = false;
            //////foreach (var v in Messages)
            //////{
            //////    if (v.MessageID == msgcode)
            //////    {
            //////        string s = String.Format(v.text, p0, p1, p2);
            //////        mes(s, (int)type);
            //////        ok = true;
            //////        break;
            //////    }
            ////////////////////}
            ////////////////////if (!ok)
            ////////////////////    if (Messages.Count > 0) F("ERR_03_NOMSG", msgcode);
            ////////////////////    else Log.FATAL("Internal ERROR: Message system is not initiated");
        }
示例#5
0
 public static void mes(string str, int severity = 0)
 {
     if (severity == (int)Severity.FATAL)
     {
         Log.FATAL(str);
     }
     if (severity == (int)Severity.WARNING ||
         severity == (int)Severity.INFO)
     {
         new Log(str);
     }
     return;
 }
示例#6
0
 /// <summary>
 /// Fetch(fetch_rqst, x) -- извлекает значение по строкам х и ftch_rqst
 /// </summary>
 /// <example>Fetch("SFacc/2:3/0", "ООО «ОРБИТА СПб»") </example>
 /// <example>Fetch("SF/2:3/0", "ООО «ОРБИТА СПб»") </example>
 /// <param name="fetch_rqst"></param>
 /// <param name="x"></param>
 /// <returns></returns>
 /// <history>5.4.2014</history>
 public string Fetch(string fetch_rqst, string x)
 {
     Log.set("Fetch");
     string result = null;
     try
     {
         string[] ar_rqst = fetch_rqst.Split('/');
         Document doc = getDoc(ar_rqst[0]);
         Dictionary<string, string> Dic = doc.docDic[ar_rqst[0] + "/" + ar_rqst[1]];
         result = Dic[x];
     }
     catch { Log.FATAL("ошибка Fetch( \"" + fetch_rqst + "\", \"" + x + "\")"); }
     finally { Log.exit(); }
     return result;
 }
示例#7
0
        public static void Txt(Severity severity_type, string msgcode, object p0 = null, object p1 = null, object p2 = null)
        {
            Message msg = Messages.Find(x => x.MessageID == msgcode);

            if (msg == null)
            {
                log.Fatal("TSmatch internal Message system error: Message \n\t" + msgcode
                          + "\nnot foung in collection Messages."
                          + " Possibly Message system not initiated yet, or this message not listed in TSmatch.xlsx/Message");
                Log.FATAL("ERR_03 - Message Code Not Found");
            }
            string str = string.Format(msg.text, p0, p1, p2);

            mes(str, (int)severity_type);
        }
示例#8
0
 public int Int(int i, int j, string msg = "wrong int")
 {
     object v = get(i, j);
     if (v == null) return 0;
     if (v.GetType() == typeof(int)) { return (int)v; }
     try
     {
         int value;
         string val = v.ToString();
         if (int.TryParse(val, out value)) return value;
         Log.FATAL(msg);
     }
     catch { Log.FATAL(msg); }
     return 0;
 }
示例#9
0
 public object this[int i, int j]
 {
     get
     {
         try { var v = _matr[i, j]; }
         catch { Log.FATAL("ошибка при обращении get к Matr[" + i + "," + j + "]"); }
         return _matr[i, j];
     }
     set
     {
         try { var v = _matr[i, j]; }
         catch { Log.FATAL("ошибка при обращении set к Matr[" + i + "," + j + "]"); }
         _matr[i, j] = value;
     }
 }
示例#10
0
        /*        /// <summary>
                /// recognizeDoc(wb)        - распознавание Документа в Листе[1] wb
                /// </summary>
                /// <param name="wb"></param>
                /// <returns>имя распознанного документа или null, если Документ не распознан</returns>
                /// <history> 14.12.2013
                /// 16.12.13 (ПХ) переписано распознавание с учетом if( is_wbSF(wb) )
                /// 18.01.14 (ПХ) с использование Matrix
                /// </history>
                public static string recognizeDoc(Excel.Workbook wb)
                {
                    Log.set("recognizeDoc(wb)");
                    Mtr wbMtr = FileOp.getSheetValue(wb.Worksheets[1]);
                    // вначале проверим где у wb Штамп - в теле или в пятке? Штамп в пятке бывает только у SF
                    // отделим от wbMtr область пятки SF -- переложим SFresLines строк wbMtr в wdSFsummary
                    int iEOL = wbMtr.iEOL();
                    int iEOC = wbMtr.iEOC();
                    object[,] tmp = new object [Decl.SFresLines + 1, iEOC + 1];
                    for (int rw = 1; rw <= Decl.SFresLines; rw++)
                        for (int col = 1; col <= iEOC; col++)
                           tmp[rw, col] = wbMtr.get(iEOL - Decl.SFresLines + rw - 1, col);
                    Mtr wbSFsummary = new Mtr(tmp);

                            Mtr rng = (Documents["SFDC"].stamp.Check(wbSFsummary))? wbSFsummary: wbMtr;

                    try 
                    {
                        foreach (var doc in Documents)  // ищем подходящий документ по Штампам
                            if (doc.Value.stamp.Check(rng)) return doc.Value.name;
                        return null;                    // если ничего не нашли -> вовращаем null
                    }
                    finally { Log.exit(); }                  
                }
        */ //2.1.16
#if FETCH
        /// <summary>
        /// инициирует Fetch-структуру Документа для Запроса fetch_rqst.
        /// Если fetch_rqst не указан - для всех Запросов Документа.
        /// </summary>
        /// <param name="fetch_rqst"></param>
        /// <history>11.1.2014 PKh
        /// 15.1.2014 - дописан FetchInit() - просмотр всех Fetch Документа</history>
        public void FetchInit()
        {
            Log.set("FetchInit");
            try
            {
                for (int col = 1; col <= ptrn.iEOC(); col++)
                {
                    string ftch = ptrn.Strng(Decl.PTRN_FETCH, col);
                    string[] ar = ftch.Split('/');
                    if (ar.Length <= 2) continue;
                    Document doc = getDoc(ar[0]);
                    doc.FetchInit(ftch);
                }
            }
            catch { Log.FATAL("ошибка FetchInit() для Документа \"" + name + "\""); }
            finally { Log.exit(); }
        }
示例#11
0
 /// <summary>
 /// ComputeMD5() по private матрице _matr
 /// </summary>
 /// <returns>строку контрольной суммы MD5 из 32 знаков</returns>
 /// <history>12.1.2016 PKh</history>
 public string ComputeMD5()
 {
     Log.set("ComputeMD5");
     string result = "";
     string str="";
     try
     {
         int min_i = _matr.GetLowerBound(0), max_i = iEOL(),
             min_j = _matr.GetLowerBound(1), max_j = iEOC();
         for (int i = min_i; i <= max_i; i++)
             for (int j = min_j; j <= max_j; j++)
                 str += _matr[i, j] == null? "" : _matr[i,j].ToString();
         result = Lib.MatchLib.ComputeMD5(str);
     } catch (Exception e) { Log.FATAL("ошибка MD5: _matr[" + iEOL() + ", " + iEOC() + "]"); return null; }
     Log.exit();
     return result;
 }
示例#12
0
        /// <summary>
        /// saveDoc(doc [,BodySave, string MD5]) - сохраняет Документ в Excel файл, если он изменялся
        /// </summary>
        /// <param name="name">имя документа</param>
        /// <param name="BodySave>true - doc.Body нужно сохранить, false - уже в Excel</param>
        /// <param name="MD5">MD5 документа. Если BodySave = false - обязательно</param>
        /// <history>10.1.2016
        /// 18.1.16 - аккуратная обработка BodySave=false и MD5
        /// 20.1.16 - fix bug: not write EOLinTOC for TSmatch type Documents
        /// 1.04.16 - overlay saveDoc(..)
        /// </history>
        public static void saveDoc(Document doc, bool BodySave = true, string MD5 = "", int EOL = 0)
        {
            Log.set("saveDoc(\"" + doc.name + "\")");
            try
            {
                Document toc = Documents[Decl.DOC_TOC];
                if (doc.type == Decl.DOC_TYPE_N) doc.isChanged = true;
                if (doc.isChanged)
                {
                    int EOLinTOC = EOL;
                    if (BodySave)
                    {
                        FileOp.setRange(doc.Sheet);
                        FileOp.saveRngValue(doc.Body);
//24/4/17                        doc.chkSum = doc.Body.ComputeMD5();
//2/8/17 removed EOLinTOC                       doc.EOLinTOC = doc.Body.iEOL();
                        doc.il = doc.Body.iEOL();
                        FileOp.fileSave(doc.Wb);
                        doc.isChanged = false;
                    }
                    else
                    {
                        if (MD5.Length < 20 || EOL == 0) { Message.Message Msg = new Message.Message(); Msg.F("ERR_05.8_saveDoc_NOMD5"); }
                        //2/8/17 removed EOLinTOC                        else { doc.chkSum = MD5; doc.EOLinTOC = EOLinTOC; }
                        else { doc.chkSum = MD5; doc.il = EOLinTOC; }
                    }
                    Mtr tmp = FileOp.getSheetValue(toc.Sheet);
                    for (int n = toc.i0; n <= toc.il; n++)
                    {   // находим и меняем строку документа doc TOC
                        if ((string)toc.Body[n, Decl.DOC_NAME] != doc.name) continue;
                        tmp[1, 1] = Lib.timeStr();
                        tmp[n, Decl.DOC_TIME] = Lib.timeStr();
                        tmp[n, Decl.DOC_MD5] = doc.chkSum;
                        if (doc.type == "N") tmp[n, Decl.DOC_CREATED] = Lib.timeStr();
//2/8/17 removed EOLinTOC                        if (doc.type != Decl.TSMATCH_TYPE) tmp[n, Decl.DOC_EOL] = doc.EOLinTOC;
                        if (doc.type != Decl.TSMATCH_TYPE) tmp[n, Decl.DOC_EOL] = doc.il;
                        FileOp.setRange(toc.Sheet);
                        FileOp.saveRngValue(tmp, AutoFit: false);  //======= save TОC in TSmatch.xlsx
                        break;
                    }
                }
            }
            catch (Exception e) { Log.FATAL("Ошибка \"" + e.Message + "\" сохранения файла \"" + doc.name + "\""); }
            Log.exit();
        }
示例#13
0
        /// <summary>
        /// loadDoc(name, wb)   - загрузка содержимого Документа name из файла wb
        /// </summary>
        /// <param name="name"></param>
        /// <param name="wb"></param>
        /// <returns>Document   - при необходимости читает name из файла в match и сливает его с данными в wb</returns>
        /// <history> Не дописано
        /// 15.12.2013 - взаимодействие с getDoc(name)
        /// 7.1.13 - выделяем в Документе Body и пятку посредством splitBodySummary
        /// </history>
        public static Document loadDoc(string name, Excel.Workbook wb)
        {
            Log.set("loadDoc(" + name + ", " + wb.Name + ")");
            Document doc = getDoc(name);
            doc.LastUpdateFromFile = wb.Name;
            string oldRepName = "Old_" + doc.SheetN;
            try
            {
                /*                wb.Worksheets[1].Name = "TMP";
                                wb.Worksheets[1].Move(doc.Sheet);
                                 // если Old_ уже есть, но еще не обработан - уничтожаем прежний "частичный" отчет
                                if (FileOp.sheetExists(doc.Wb, oldRepName))
                                {
                                    FileOp.DisplayAlert(false);
                                    doc.Wb.Worksheets[doc.name].Delete();
                                    FileOp.DisplayAlert(true);
                                } else doc.Sheet.Name = "Old_" + doc.SheetN;
                                doc.Wb.Worksheets["TMP"].Name = doc.SheetN;
                */
            }
            catch
            {
                Log.FATAL("Не удалось перенести лист [1] из входного файла "
                    + doc.LastUpdateFromFile + " в Документ " + name);
            }
            ////           doc.Sheet = doc.Wb.Worksheets[name];
            doc.splitBodySummary();
//24/5/17            doc.FetchInit();

            ////// если есть --> запускаем Handler
            ////if (doc.Loader != null) Proc.Reset(doc.Loader);
            ////// если нужно --> делаем Merge name с oldRepName
            ////if (FileOp.sheetExists(doc.Wb, oldRepName))
            ////{
            ////    // еще не написано!!
            ////    // NB: в таблице Процессов есть Шаг MergeReps
            ////}
            Log.exit();
            return doc;
        }
示例#14
0
 public object set(int i, int j)   //2.1.16
 {
     try { _matr[i, j] = this; }
     catch { Log.FATAL("ошибка при обращении к Matr[" + i + "," + j + "]"); }
     return _matr[i, j];
 }