From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照
---
reassemble/CB_IMGPSScanImp.docq.pas | 553 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 553 insertions(+), 0 deletions(-)
diff --git a/reassemble/CB_IMGPSScanImp.docq.pas b/reassemble/CB_IMGPSScanImp.docq.pas
new file mode 100644
index 0000000..c13a05d
--- /dev/null
+++ b/reassemble/CB_IMGPSScanImp.docq.pas
@@ -0,0 +1,553 @@
+{ ==============================================================================
+ 方法名稱: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;
+
+
--
Gitblit v1.8.0