{ ============================================================================== 方法名稱:GetDataDocNoPage 引用相依: 方法描述:從 DOC_INF_List 資料中查詢特定文件與版本的預設頁數設定。 ============================================================================== } Function TCB_IMGPSScanX.GetDataDocNoPage(MainDocNo,MainVersion:String):Integer; //取記錄的文件_版本頁數 var P : String; begin Result := 0; If FindSQLData(Doc_Inf_List,'FORM_PAGES','DOC_NO,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) Then begin P := GetFindResult('FORM_PAGES'); if P <> '' then Result := strtoint(P) else Result := 0; end; end; { ============================================================================== 方法名稱:CheckCaseDocNoPage 引用相依:LoadFromFile 方法描述:計算案件中特定文件與版本的實際頁數。透過讀取 upload 目錄下的 Context. dat 與 DocDir.dat,精確比對 FormID、DocNo、版本與頁碼索引,並排除入庫狀 態影像,回傳符合條件的影像總數。 ============================================================================== } Function TCB_IMGPSScanX.CheckCaseDocNoPage(CaseID,DocNo,Version:String;Pages:Integer):Integer; //取案件裡的文件_版本頁數 var i,n,Count : integer; S, S2 : TStringlist; FormCode,iPage : String; docInt,tempInt:integer; v,v2:integer; begin Count := 0; docInt:=0; tempInt:=0; S := TStringlist.Create; S2 := TStringlist.Create; //ShowMessage('page='+IntToStr(Pages)); try S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat'); S2.LoadFromFile(ImageSavePath+CaseID+'\upload\DocDir.dat'); //2017 1220 改成只承認第一份的 for I := 1 to pages do //從0到pages-1 改成 1到pages 20170316 這樣可以修改檢核的頁數問題 begin iPage := Add_Zoo(i,2); for n := 0 to S.Count - 1 do begin if (FWH_category='N') and (FIs_In_Wh='Y') then begin if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[n]) then begin Continue; end; end; if (Length(S2.Strings[n])>8) and (Pos(DocNo,S2.Strings[n])<>0) then //2017 1220 改成只承認第一份的 begin //LogFile1.LogToFile(logTimeString+'有進'+docno+','+S2.Strings[n]+IntToStr(Pos(DocNo,S2.Strings[n]))); v:=Pos('(',S2.Strings[n]); v2:=Pos(')',S2.Strings[n]); tempInt:=StrToInt(Copy(S2.Strings[n],v+1,v2-v-1)); if docInt=0 then begin docInt:=tempInt; end; if docInt<>tempInt then begin //LogFile1.LogToFile(logTimeString+'docInt='+IntToStr(docInt)+',tempInt='+IntToStr(tempInt)); Result := Count; Break; end; end; FormCode := FileName2FormCode(S.Strings[n]); //LogFile1.LogToFile(logTimeString+'S.Strings[n]='+S.Strings[n]); //Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode)); //LogFile1.LogToFile(logTimeString+'FormCode='+FormCode); LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode)); //ShowMessage(DocNo+','+IntToStr(docInt)+','+IntToStr(tempInt)); //LogFile1.LogToFile(logTimeString+'FormCode='+FormCode); if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then begin LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode)); //Showmessage(version+','+DocNo+',iPage='+iPage); //Showmessage(inttostr(Count+1)); Inc(Count); Break; //找到了...離開 end; end; end; finally S.Free; S2.free; end; Result := Count; end; { ============================================================================== 方法名稱:FindFormCodePages 引用相依:LoadFromFile 方法描述:計算案件中特定 FormID 的實際影像總數,可用於檢核。 ============================================================================== } Function TCB_IMGPSScanX.FindFormCodePages(CaseID,FormCode:String):Integer; //計算案件裡FormID的頁數 var i,Count : integer; S : TStringlist; iFormCode : String; begin Count := 0; S := TStringlist.Create; try S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat'); for i := 0 to S.Count - 1 do begin if FWH_category='N' then begin if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]) then begin Continue; end; end; iFormCode := FileName2FormCode(S.Strings[i]); if FormCode = iFormCode then begin Inc(Count); end; end; finally S.Free; end; Result := Count; end; { ============================================================================== 方法名稱:GetDataFormCodePages 引用相依: 方法描述:查詢特定表單 ID 的最大頁數限制,若未設定則回傳 9999。 ============================================================================== } Function TCB_IMGPSScanX.GetDataFormCodePages(FormCode:String):Integer; //取記錄的FormcID的頁數 begin If FindSQLData(FORM_INF_List,'T1.MAX_PAGE','T1.FORM_ID',FormCode,0,FindResult) Then begin IF GetFindResult('T1.MAX_PAGE') = '' Then Result := 9999 Else Result := Strtoint(GetFindResult('T1.MAX_PAGE')); end; end; { ============================================================================== 方法名稱:GetDocDir_Page 引用相依:FileExists, LoadFromFile 方法描述:取得特定文件目錄下的影像總頁數。 ============================================================================== } Function TCB_IMGPSScanX.GetDocDir_Page(CaseID,DocDir:String):Integer; var FileList : TStringlist; begin Result := 0; FileList := TStringlist.Create; try if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then begin FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat'); Result := FileList.Count; end; finally FileList.Free; end; end; { ============================================================================== 方法名稱:GetDocNoCount 引用相依:FileExists, LoadFromFile 方法描述:統計指定案件中某文件編號(DocNo)的總份數。讀取 CaseDocNo.dat 與 CaseDo cNo_Copies.dat 並累加匹配項目的份數值。 ============================================================================== } Function TCB_IMGPSScanX.GetDocNoCount(CaseID,DocNo:String):Integer; //取DocNo數量 var i : Integer; Doc_Ct:Integer; iDocNo : String; DocNoList,DocNo_CopiesList : TStringlist; begin DocNoList := TStringlist.Create; DocNo_CopiesList := TStringlist.Create; try if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then begin DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat'); DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat'); end; Doc_Ct := 0; for i := 0 to DocNoList.Count - 1 do begin iDocNo := DocNoDir2DocNo(DocNoList.Strings[i]); if iDocNo = DocNo then Doc_Ct := Doc_Ct + strtoint(DocNo_CopiesList.Strings[i]); end; Result := Doc_Ct; // Showmessage(DocNo+#13+inttostr(Doc_Ct)); finally DocNoList.Free; DocNo_CopiesList.Free; end; end; { ============================================================================== 方法名稱:GetDocDirCopies 引用相依:FileExists, LoadFromFile 方法描述:取得特定文件目錄(DocDir)目前的份數設定。 ============================================================================== } Function TCB_IMGPSScanX.GetDocDirCopies(CaseID,DocDir:String):Integer; //取DocDir數量 var i : Integer; DocNoList,DocNo_CopiesList : TStringlist; begin Result := 1; //預設回傳1 //20140521 由0改成1 DocNoList := TStringlist.Create; DocNo_CopiesList := TStringlist.Create; try if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat'); if FileExists(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat') then begin DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat'); for i := 0 to DocNoList.Count - 1 do begin if (DocDir = DocNoList.Strings[i]) and (i <= DocNo_CopiesList.Count-1) then begin Result := strtoint(DocNo_CopiesList.Strings[i]); Break; end; end; end; finally DocNoList.Free; DocNo_CopiesList.Free; end; end; { ============================================================================== 方法名稱:SetDocDirCopies 引用相依:FileExists, LoadFromFile, SaveToFile 方法描述:修改並儲存特定文件目錄的份數設定至 CaseDocNo_Copies.dat。 ============================================================================== } Procedure TCB_IMGPSScanX.SetDocDirCopies(CaseID,DocDir:String;NewCopies:Integer); //修改DocDir份數 var i : Integer; DocNoList,DocNo_CopiesList : TStringlist; begin DocNoList := TStringlist.Create; DocNo_CopiesList := TStringlist.Create; try if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then begin DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat'); DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat'); end; for i := 0 to DocNoList.Count - 1 do begin if DocDir = DocNoList.Strings[i] then begin DocNo_CopiesList.Strings[i] := inttostr(NewCopies); DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat'); Break; end; end; finally DocNoList.Free; DocNo_CopiesList.Free; end; end; { ============================================================================== 方法名稱:GetDocDirCopies_Rec 引用相依: 方法描述:從 FOldCaseInfo 記錄字串中解析並取得特定文件目錄在舊案中的份數。支援 自定義文件名稱與一般文件編號的匹配。 ============================================================================== } Function TCB_IMGPSScanX.GetDocDirCopies_Rec(Path,CaseID,DocDir:String):Integer; //取記錄裡的DocDir份數 var i,n,v,v1 : Integer; OldCaseInfoList,Caseinfolist : TStringlist; iCaseID,Year,iBS_No,iIS_Old,iDocNo,iCopies:String; begin Result := 1; OldCaseInfoList := TStringlist.Create; Caseinfolist := TStringlist.Create; try //OldCaseInfoList 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數] tab 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數] OldCaseInfoList.StrictDelimiter := true; OldCaseInfoList.Delimiter := #9; OldCaseInfoList.DelimitedText := FOldCaseInfo; for i := 0 to OldCaseInfoList.Count - 1 do begin Caseinfolist:=SplitString('@#,',OldCaseInfoList.Strings[i]); //Caseinfolist.Delimiter := '_'; //Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i]; iCaseID := Caseinfolist.Strings[0]; Year := Caseinfolist.Strings[1]; iBS_No := Caseinfolist.Strings[2]; iIS_Old := Caseinfolist.Strings[3]; if CaseID = iCaseID then begin for n := 6 to Caseinfolist.Count - 1 do begin v := Pos('[',Caseinfolist.Strings[n]); v1 := Pos(']',Caseinfolist.Strings[n]); iDocNo := Copy(Caseinfolist.Strings[n],1,v-1); iCopies := Copy(Caseinfolist.Strings[n],v+1,v1-v-1); if Copy(DocDir,1,5) = 'ZZZZZ' then begin if iDocNo = GetCustomDocName(Path,DocDir) then Result := strtoint(iCopies); end else begin if iDocNo = DocNoDir2DocNo(DocDir) then Result := strtoint(iCopies); end; end; end; end; finally OldCaseInfoList.Free; Caseinfolist.Free; end; end; { ============================================================================== 方法名稱:GetDocNoEdit 引用相依:FileExists, LoadFromFile 方法描述:檢查指定文件是否被異動。程序會載入已編輯目錄清單,並與原始的文件代號/ 名稱清單(FC_DocNoList)進行比對。若文件代號或名稱不在原始清單中,或存在 於已編輯清單內,則判定該文件已被異動並回傳 "Y"。 ============================================================================== } Function TCB_IMGPSScanX.GetDocNoEdit(CaseID,DocNo,DocName:String):String; //取出DocNo是否被異動 (Y/N) var i : Integer; EditedDocDirList : TStringlist; C_DocNoList,C_DocNameList : TStringlist; begin Result := 'N'; EditedDocDirList := TStringlist.Create; C_DocNoList := TStringlist.Create; C_DocNameList := TStringlist.Create; try if FileExists(ImageSavePath+CaseID+'\EditedDocDir.dat') then EditedDocDirList.LoadFromFile(ImageSavePath+CaseID+'\EditedDocDir.dat'); C_DocNoList.StrictDelimiter := True; C_DocNoList.Delimiter := #9; C_DocNoList.DelimitedText := FC_DocNoList; C_DocNameList.StrictDelimiter := True; C_DocNameList.Delimiter := #9; C_DocNameList.DelimitedText := FC_DocNameList; //Showmessage(C_DocNoList.Text); if (DocName = '') and (C_DocNoList.IndexOf(DocNo)=-1 ) then Result := 'Y'; if (DocName <> '') and (C_DocNameList.IndexOf(DocName)=-1) then Result := 'Y'; for i := 0 to EditedDocDirList.Count - 1 do begin if (DocNo = DocNoDir2DocNo(EditedDocDirList.Strings[i])) then begin Result := 'Y'; Break; end; end; finally EditedDocDirList.Free; C_DocNoList.Free; C_DocNameList.Free; end; end; { ============================================================================== 方法名稱:GetDocNo_Count 引用相依:LoadFromFile 方法描述:計算指定文件代號在案件中的份數。若文件不需分組則直接回傳 1。否則,遍歷 影像清單(Context.dat),根據檔案名稱解析出的頁碼是否為第一頁("01")來累 計該文件的份數。 ============================================================================== } Function TCB_IMGPSScanX.GetDocNo_Count(Path,DocNo:String):Integer; //取出文件份數 var i : Integer; iCopys : integer; S,S1 : TStringlist; iFormID : String; DocFirst : Boolean; begin Result := 0; if not DocnoNeedGroup(DocNo) then begin Result := 1; Exit; end; S := TStringlist.Create; S1 := TStringlist.Create; try S.LoadFromFile(Path+'Context.dat'); S1.LoadFromFile(Path+'Context_DocNo.dat'); iCopys := 0; for i := 0 to S.Count - 1 do begin iFormID := FileName2FormCode(S.Strings[i]); DocFirst := False; if FormCode2Page(iFormID) = '01' then DocFirst := True; if ((iCopys = 0) or DocFirst) and (Docno = S1.Strings[i]) then begin inc(iCopys); end; end; Result := iCopys; finally S.Free; S1.Free; end; end; { ============================================================================== 方法名稱:GetDocNo_Page 引用相依:LoadFromFile 方法描述:計算指定文件代號在案件中擁有的總影像頁數。遍歷影像對應的文件清單(Cont ext_DocNo.dat),統計與傳入代號相符的項目數量。 ============================================================================== } Function TCB_IMGPSScanX.GetDocNo_Page(Path,DocNo:String):Integer; //取出文件總頁數 var i : Integer; ipages : integer; S,S1 : TStringlist; begin Result := 0; S := TStringlist.Create; S1 := TStringlist.Create; try S.LoadFromFile(Path+'Context.dat'); S1.LoadFromFile(Path+'Context_DocNo.dat'); iPages := 0; for i := 0 to S.Count - 1 do begin if Docno = S1.Strings[i] then begin inc(iPages); end; end; Result := ipages; finally S.Free; S1.Free; end; end; { ============================================================================== 方法名稱:FormIDExists 引用相依: 方法描述:檢查指定的表單代碼(FormID)是否存在於系統資料庫中。支援日期檢核模式:若 啟用,則會進一步查詢該表單所屬文件的起迄效期(START_DATE, STOP_DATE), 並與伺服器當前日期比對,確保表單仍在有效期限內。 ============================================================================== } Function TCB_IMGPSScanX.FormIDExists(FormCode:String;CheckDate:Boolean;index:Integer):Boolean; //檢查FormID是否存在 var STDate,SPDate : String; Docno,Version : String; begin Result := False; If FormCode = '' then //附件不檢查 begin Result := True; Exit; end; if CheckDate then //要檢查日期 begin STDate := '00000000'; //沒設定 SPDate := '99999999'; //沒設定 IF FindSQLData(FORM_INF_List,'T1.FORM_ID,T1.DOC_NO','T1.FORM_ID',FormCode,index,FindResult) then begin DocNo := GetFindResult('T1.DOC_NO'); Version := FormCode2Version(FormCode); if FindSQLData(Doc_Inf_List,'START_DATE,STOP_DATE','DOC_NO,DOC_VERSION',DocNo+','+Version,0,FindResult) then begin Result := True; STDate := GetFindResult('START_DATE'); SPDate := GetFindResult('STOP_DATE'); if STDate = '' then STDate := '00000000'; //沒設定 if SPDate = '' then SPDate := '99999999'; //沒設定 if (ServerDate < STDate) or (ServerDate > SPDate) then Result := False; end; end; end Else begin Result := FindSQLData(FORM_INF_List,'T1.FORM_ID','T1.FORM_ID',FormCode,index,FindResult); end; end; { ============================================================================== 方法名稱:Case_DocNoExists 引用相依:LoadFromFile 方法描述:檢查指定的文件代號是否存在於特定案件的 Context.dat 影像清單中。 ============================================================================== } Function TCB_IMGPSScanX.Case_DocNoExists(CaseID,Docno:String):Boolean; //Docno是否存在案件裡 var i : Integer; S : TStringlist; iDocNo : String; begin Result := False; S := TStringlist.Create; try S.LoadFromFile(ImageSavePath + CaseID+'\Context.dat'); for i := 0 to S.Count - 1 do begin iDocNo := FormCode2DocNo(FileName2FormCode(S.Strings[i])); if Docno = iDocNo then begin Result := True; Break; end; end; finally S.Free; end; end;