//#endif public object get(int i, int j) { object v = null; try { v = _matr[i, j]; } catch { Log.FATAL("ошибка при обращении к Matr[" + i + "," + j + "]"); } return v; }
/// <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(); } }
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); }
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"); }
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; }
/// <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; }
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); }
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; }
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; } }
/* /// <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(); } }
/// <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; }
/// <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(); }
/// <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; }
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]; }