/* /// <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> /// 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(); 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; }