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