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.api.pas |  987 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 987 insertions(+), 0 deletions(-)

diff --git a/reassemble/CB_IMGPSScanImp.api.pas b/reassemble/CB_IMGPSScanImp.api.pas
new file mode 100644
index 0000000..6e4905a
--- /dev/null
+++ b/reassemble/CB_IMGPSScanImp.api.pas
@@ -0,0 +1,987 @@
+{ ==============================================================================
+  方法名稱:GetServerDate
+  引用相依:ProcessServlet_Get
+  方法描述:從伺服器獲取伺服器時間。透過 HTTPS 請求取得時間字串,解析日期與時間,並
+            計算 Server 與本機的時間差(Balance)供後續校時使用。
+============================================================================== }
+Function TCB_IMGPSScanX.GetServerDate : Boolean;
+begin
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/servertimeforocx','',FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    ServerDate := memo1.Lines.Strings[1];
+    ServerTime := Copy(ServerDate,9,6);
+    ServerDate := Copy(ServerDate,1,8);
+    Balance := GetBalance(ServerTime); //Server 跟Local的時間差
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSampleInf
+  引用相依:ProcessServlet_Get
+  方法描述:從伺服器獲取已註冊的範本表單 ID 清單,並存入 SampleFormIDList。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSampleInf : Boolean;
+var
+  str:String;
+begin
+  Result := False;
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/serversampleforocx','work_no='+FWork_no,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    str := memo1.Lines.Strings[1];
+    SampleFormIDList.CommaText:=str;
+    
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf1
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 DOC_INF 資料表資訊(模式 1)。方法會加密目前伺服器時間戳記
+            並發送 HTTP GET 請求。若成功取得資料(狀態碼 '0'),則利用 SetSQLData 將
+            結果解析並存入本地快取 Doc_Inf_List;若發生通訊錯誤或 Session 逾時(偵
+            測到登入頁面標籤),則會記錄對應的 HttpErrStr 並返回 False。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf1 : Boolean; //取系統設定資訊Mode1 DOC_INF
+Var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT %s FROM DOC_INF WHERE WORK_NO = '%s' ORDER BY DOC_TYPE, DOC_NO, DOC_VERSION"
+
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
+  ColumeStr := 'WORK_NO,DOC_NO,DOC_U_DESC,DOC_TYPE,DOC_VERSION,FORM_PAGES,START_DATE,STOP_DATE,IS_DOC_DIV,IS_IN_WH';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=1&col='+Doc_Inf_Colume+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=1&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,Doc_Inf_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf2
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 DM_FORM_INF 表單關聯資訊(模式 2)。流程包含加密請求參數與
+            發送 GET 請求。此方法負責取得表單間的主從關係、相依性以及互斥規則,並將
+            回傳的資料行解析後存入本地的 DM_FORM_INF_List。若通訊失敗或 Session 
+            過期,會設定錯誤訊息並中斷流程。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf2 : Boolean; //取系統設定資訊Mode2  DM_FORM_INF
+var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT %s FROM DM_FORM_INF
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  ColumeStr := 'WORK_NO,MAIN_FORM_ID,DOC_VERSION,DEPE_FORM_ID,MUTEX_FORM_ID';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=2&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+   If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=2&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,DM_FORM_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf3
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 FORM_INF 表單詳細資料(模式 3)。方法會取得包含表單名稱、說
+            明、分類、定位點類型(ANCHOR/FRAME)、最大頁數及預設高寬等中繼數據。取得的
+            資料會被快取至 FORM_INF_List,作為影像處理(如自動縮放與 OMR 檢核)的重
+            要依據。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf3 : Boolean; //取系統設定資訊mode3  FORM_INF
+var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT distinct %s FROM FORM_INF T1 LEFT JOIN DOC_INF T2 ON T2.DOC_NO = T1.DOC_NO AND T1.DOC_VERSION = T2.DOC_VERSION AND T1.WORK_NO = T2.WORK_NO WHERE T2.IS_USE = 'Y' AND T2.WORK_NO = %s
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  //ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_KIND,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.MERGE_IMAGE,T1.CC_FORM_ID,T1.CC_MERGE_FORMID,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
+  ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.IS_PRINT,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=3&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=3&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,FORM_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf4
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 CHECK_RULE_INF 檢核規則資訊(模式 4)。此方法取得包含檢核
+            代號、描述及顯示類型在內的驗證規則,並將其儲存於 CHECK_RULE_INF_List。
+            最後會呼叫 CheckRule2OMRErrInfo,將取得的規則同步更新至 OMR 錯誤資訊
+            記錄中,以確保前端檢核邏輯與伺服器同步。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf4 : Boolean; //取系統設定資訊mode4  CHECK_RULE_INF
+var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT %s FROM CHECK_RULE_INF WHERE CHECK_TYPE = 'S'
+
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  ColumeStr := 'WORK_NO,CHECK_NO,CHECK_RULE_DESC,MESG_SHOW_TYPE,MESG_DISP_TYPE,CHECK_MESG,SCAN_MODE';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=4&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=4&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,CHECK_RULE_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+  CheckRule2OMRErrInfo;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf5
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 MEMO_INF 註記資訊(模式 5)。方法會取得預設的註記內容及其
+            對應的類型名稱,並將其快取至 MEMO_INF_List。這些資料通常用於 UI 上的註
+            記選擇選單,方便掃瞄人員在影像處理過程中快速標註預設的說明文字。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf5 : Boolean; //取系統設定資訊mode5  MEMO_INF
+  var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT %s FROM MEMO_INF T1 LEFT JOIN MEMO_TYPE_INF T2 ON T2.MEMO_TYPE_NO = T1.MEMO_TYPE WHERE T1.MEMO_SOURCE = '01'
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  ColumeStr := 'T1.WORK_NO,T1.MEMO_TYPE,T1.MEMO_CONTENT,T2.MEMO_TYPE_NAME';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=5&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,MEMO_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf6
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 WORK_INF 工作參數資訊(模式 6)。此方法取得當前工作項目的
+            全域參數(如 PARA_NO 與 PARA_CONTENT),並儲存於 WORK_INF_List。這些參數
+            控制了掃瞄器的預設行為(如 DPI、雙面掃瞄等),是系統初始化環境設定的關鍵
+            步驟。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf6 : Boolean; //取系統設定資訊mode5  WORK_INF
+var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT %s FROM WORK_INF
+
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  ColumeStr := 'WORK_NO,PARA_NO,PARA_CONTENT';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=6&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,WORK_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetSetInf7
+  引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
+  方法描述:向伺服器請求 LASTEST_FORM_INF 最新表單版本資訊(模式 7)。方法會獲取各
+            文件編號對應的最新表單 ID 與版本號,並儲存於 LASTEST_FORM_INF_List。此
+            資訊用於確保使用者掃瞄的是最新版表單,或是用於舊案件轉檔時與歷史版本
+            對照。
+============================================================================== }
+Function TCB_IMGPSScanX.GetSetInf7 : Boolean; //取系統設定資訊mode5  LASTEST_FORM_INF
+var
+  ColumeStr : String;
+  S : TStringlist;
+  EnCodeDateTime : String;
+begin
+  //SELECT FORM_ID,DOC_NO,DOC_VERSION FROM FORM_INF WHERE (DOC_NO,DOC_VERSION) in (SELECT DOC_NO, MAX(DOC_VERSION) FROM FORM_INF GROUP BY DOC_NO) ORDER BY DOC_NO
+
+  Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+  ColumeStr := 'FORM_ID,DOC_NO';
+  //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=7&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else IF memo1.Lines.Strings[0] = '0' Then
+  begin
+    S := TStringlist.Create;
+    S.Text := Memo1.Lines.Text;
+    SetSQLData(ColumeStr,S,LASTEST_FORM_INF_List);
+    S.Free;
+    Result := True;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:TransOldCaseFile
+  引用相依:FileExists, upFile
+  方法描述:處理舊件引用的檔案傳送。遍歷舊件清單,若發現有引用記錄,則透過 HTTPS 將
+            引用資訊上傳至伺服器,並處理伺服器回傳狀態。
+============================================================================== }
+Function TCB_IMGPSScanX.TransOldCaseFile(Path:String):Boolean;
+var
+  i : Integer;
+  OldCaseID,Year,Data,Verify:String;
+  SendData : String;
+  OldCaseInfoList,Caseinfolist : TStringlist;
+  OldCasePath : String;
+begin
+  Result := True;
+  OldCaseInfoList := TStringlist.Create;
+  Caseinfolist := TStringlist.Create;
+  try
+    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];
+      OldCaseID := Caseinfolist.Strings[0];
+      Year := Caseinfolist.Strings[1];
+      Data := Caseinfolist.Strings[4];
+      Verify := Caseinfolist.Strings[5];
+      OldCasePath := Path+OldCaseID+'\';
+      if FileExists(OldCasePath+'UseCase.dat') and FileExists(OldCasePath+'UseCase.ini') then
+      begin
+        //////壓檔/////
+        //ZipMainFile(Path,Path,'Img.zip');
+
+        ////上傳/////
+        SendData:='data='+HTTPEncode(UTF8Encode(Data))+'&verify='+Verify+'&other_case_no='+OldCaseID;
+        //Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
+        if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
+        begin
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+          Result := False;
+          Exit;
+        end;
+        if memo1.Lines.Strings[0] = '1' then
+        begin
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
+          Result := False;
+          Exit;
+        end
+        Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+        begin
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
+          Result := False;
+          Exit;
+        end;
+      end;
+
+  ////上傳////
+    end;
+  finally
+  OldCaseInfoList.Free;
+  Caseinfolist.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:Writelog
+  引用相依:
+  方法描述:透過 ProcessServlet 向伺服器發送列印日誌記錄。傳送案件編號與 FData 等
+            參數,並檢查伺服器回傳是否成功或 Session 是否失效。
+============================================================================== }
+Function TCB_IMGPSScanX.Writelog(CaseID : String):Boolean;
+var
+  SendData : String;
+begin
+  Result := True;
+  SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID;
+  If not ProcessServlet(HTTPSClient,FURL+'service/imgpsc/IMGPSC06/printlog',SendData,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:DownLanguage
+  引用相依:dnFile, dnFile_Get
+  方法描述:從伺服器下載多國語言設定檔 Language.Lng。使用 HTTPS 客戶端執行 GET 請
+            求,下載至本地語系路徑。下載後會檢查回傳內容,驗證是否發生錯誤、伺服器回
+            傳錯誤訊息,或是因為閒置過久導致 Session 過期被導向登入頁面,並設定對
+            應的錯誤字串。
+============================================================================== }
+Function TCB_IMGPSScanX.DownLanguage:Boolean;  //下載多國語言檔
+begin
+  Result := True;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+  //dnFile(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite.Text,Memo1,False,DownImgStatus)
+  If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,DownImgStatus) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+  
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetOMRCheckSet
+  引用相依:FileExists, LoadFromFile, SaveToFile, dnFile, dnFile_Get
+  方法描述:從伺服器下載並更新 OMR 檢核設定檔(OMRSet.zip)。程序會檢查本地 LastDat
+            eTime.dat 取得最後更新時間,並發送請求。若伺服器有新資料,則下載後解壓
+            縮並更新本地時間戳記;若無更新則維持現狀,並包含完整的錯誤處理邏輯。
+============================================================================== }
+Function TCB_IMGPSScanX.GetOMRCheckSet : Boolean; //下載OMR檢核XML檔
+var
+  SendData : String;
+  LastDateTime : String;
+  S : TStringlist;
+begin
+  Result := True;
+  S := TStringlist.Create;
+  Try
+    if FileExists(CheckXmlPath+'OMRSet.zip') then
+      DeleteFile(CheckXmlPath+'OMRSet.zip');
+
+    LastDateTime := '00000000000000';
+    if FileExists(CheckXmlPath+'LastDateTime.dat') then
+    begin
+      S.LoadFromFile(CheckXmlPath+'LastDateTime.dat');
+      LastDateTime := S.Strings[0];
+    end;
+
+    SendData := 'settype=3&lastupdate='+LastDateTime;
+    if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC01/settings',SendData,CheckXmlPath+'OMRSet.zip',FReWrite,Memo1,False,DownImgStatus) then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+    if FileExists(CheckXmlPath+'OMRSet.zip') then   //有更新
+    begin
+      ExecuteUnZip(CheckXmlPath+'OMRSet.zip',CheckXmlPath,True);
+      S.Clear;
+      S.Add(ServerDate+GetBalance2Time(Balance));
+      S.SaveToFile(CheckXmlPath+'LastDateTime.dat');
+    end
+    Else
+    begin
+      if (Memo1.Lines.Strings[0] = 'nodata') Then   //沒更新
+      begin
+        Result := True;
+      end
+      Else if (Memo1.Lines.Strings[0] = '1') Then
+      begin
+        HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+        Result := False;
+        Exit;
+      end
+      Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+      begin
+        HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+        Result := False;
+        Exit;
+      end;
+    end;
+
+  Finally
+  S.Free;
+  End;
+
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetKeyinSet
+  引用相依:FileExists, LoadFromFile, SaveToFile, dnFile, dnFile_Get
+  方法描述:從伺服器下載並更新登打設定檔(KeyinSet.zip)。運作機制與 GetOMRCheckSet
+             相同,透過比對時間戳記決定是否執行下載與解壓縮,確保本地的登打定位資
+            訊與伺服器同步。
+============================================================================== }
+Function TCB_IMGPSScanX.GetKeyinSet : Boolean; //取登打設定
+var
+  SendData : String;
+  LastDateTime : String;
+  S : TStringlist;
+begin
+  Result := True;
+  S := TStringlist.Create;
+  Try
+    if FileExists(SitePath+'KeyinSet.zip') then
+      DeleteFile(SitePath+'KeyinSet.zip');
+
+    LastDateTime := '00000000000000';
+    if FileExists(SitePath+'LastDateTime.dat') then
+    begin
+      S.LoadFromFile(SitePath+'LastDateTime.dat');
+      LastDateTime := S.Strings[0];
+    end;
+    SendData := 'settype=2&lastupdate='+LastDateTime;
+    if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC01/settings',SendData,SitePath+'KeyinSet.zip',FReWrite,Memo1,False,DownImgStatus) then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+    if FileExists(SitePath+'KeyinSet.zip') then  //有更新
+    begin
+      ExecuteUnZip(SitePath+'KeyinSet.zip',SitePath,True);
+      S.Clear;
+      S.Add(ServerDate+GetBalance2Time(Balance));
+      S.SaveToFile(SitePath+'LastDateTime.dat');
+    end
+    Else
+    begin
+      if (Memo1.Lines.Strings[0] = 'nodata') Then   //沒更新
+      begin
+        Result := True;
+      end
+      Else if (Memo1.Lines.Strings[0] = '1') Then
+      begin
+        HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+        Result := False;
+        Exit;
+      end
+      Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+      begin
+        HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+        Result := False;
+        Exit;
+      end;
+    end;
+
+  Finally
+  S.Free;
+  End;
+
+end;
+
+
+
+{ ==============================================================================
+  方法名稱:CaseAsk
+  引用相依:ProcessServlet_Get
+  方法描述:在上傳案件前,向伺服器詢問該案件是否可進行傳送。針對 NSCAN 或 DSCAN 模
+            式,會封裝案件編號與加密驗證資訊發送至 IMGPSC05/isnew 服務。根據伺服器
+            回傳結果(0 表示可上傳,1 表示重複),決定後續的上傳流程。
+============================================================================== }
+Function TCB_IMGPSScanX.CaseAsk(CaseID: string):Integer;
+var
+  SendData : String;
+begin
+//Memo1.Clear;
+  SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID+'&work_no='+FWork_no;
+  if (FMode = 'NSCAN') or (FMode = 'DSCAN') then
+  begin
+//ShowMessage('JJJJJ');
+    If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC05/isnew',SendData,FReWrite,Memo1,False) Then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := -1;
+      Exit;
+    end;
+  end;
+//ShowMessage(SendData);
+
+  IF memo1.Lines.Strings[0] <> '0' Then
+  begin
+    HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
+    Result := -1;
+    Exit;
+  end
+  Else
+  begin
+    if (memo1.Lines.Count < 2) then
+    begin
+      HttpErrStr := _Msg('')+'OCX:Index Count error';
+      Result := -1;
+      Exit;
+    end
+    Else
+    begin
+      if memo1.Lines.Strings[1] = '0' then
+      begin
+        Result := 0;
+      end
+      Else if memo1.Lines.Strings[1] = '1' then
+        Result := 1
+      Else
+      begin
+        HttpErrStr := _Msg('')+'OCX:Value error';
+        Result := -1;
+        Exit;
+      end;
+    end;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CaseComplete
+  引用相依:En_DecryptionStr_Base64, FileExists, LoadFromFile
+  方法描述:通知伺服器案件傳送完成。函式會收集案件的各項元數據,包含總頁數、主表單 
+            ID、經辦資訊、被保人資料等,並根據不同的業務模式(如 NSCAN, ESCAN)格式化
+            發送數據。若包含 OMR 檢核失敗資訊或備註,也會一併封裝傳送,最後根據伺服
+            器回傳值判定作業是否成功。
+============================================================================== }
+Function TCB_IMGPSScanX.CaseComplete(Path,CaseID:String;MainCase:Boolean):Boolean;  //通知傳送完成
+var
+  OMRValue,Batchnum,Usermemo,Checkmemo,UpformID,ReMoveMemo: String;
+  Case_type,Handle_no,Format_id,Cen_Uid,Cen_Cliname,Cen_Platno,Cen_Apolyno,Case_priority : String;
+  Pages : Integer;
+  EnCodeDateTime : String;
+  SendData : String;
+  S : TStringlist;
+  i,v,v1 : Integer;
+  UpSortID : String;
+begin
+  Result := True;
+  S := TStringlist.Create;
+  try
+    EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
+    UpformID := GetCaseFormID(Path);
+
+
+    Case_type := '0';
+    if FileExists(Path+'Context.dat') then    //掃描頁數
+    begin
+      S.LoadFromFile(Path+'Context.dat');
+      Pages := S.Count;
+    end;
+    if not FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then //如果沒這個檔就重產生預設值
+    begin
+      ClearCaseIndex;
+      WriteCaseIndex(ImageSavePath+CaseID+'\');
+    end;
+    {if FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then
+    begin
+      S.LoadFromFile(ImageSavePath+CaseID+'\CaseIndex.dat');
+
+      Handle_No := S.Strings[0];    //經辦代號
+      Cen_Uid := S.Strings[1];      //被保人ID
+      Cen_Cliname := S.Strings[2];  //被保人姓名
+      Cen_Platno := S.Strings[3];   //車號
+      Case_Priority := S.Strings[4];//案件等級
+      if FMode = 'SSCAN' then  //簽署章件的時候一律傳Format_ID
+      begin
+        Format_ID := S.Strings[5];    //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
+      end
+      Else
+      begin
+        if (Length(UpformID) = 12) and (UpformID[2] = '-') then
+          Format_ID := S.Strings[5]    //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
+        else
+          Cen_Apolyno := S.Strings[5]; //強制證號
+      end;
+      if (FMode = 'MSCAN') and (length(Format_ID) = 16) and (Copy(Format_ID,1,2) = '05') then
+      begin
+        Format_ID := Copy(Format_ID,3,14);   //20130606 yuu說監理站件的主鍵值為16碼且開開為05的要去掉
+      end;
+
+    end; }
+    if FileExists(ImageSavePath+CaseID+'\GetValue.xml') then    //掃描帶值
+    begin
+      S.LoadFromFile(ImageSavePath+CaseID+'\GetValue.xml');
+      OMRValue := Trim(S.Text);
+    end;
+    if MainCase then    //雙主約的主要案件
+    begin
+      if FileExists(ImageSavePath+CaseID+'\Batchnum.dat') then
+      begin
+        S.LoadFromFile(ImageSavePath+CaseID+'\Batchnum.dat');
+        Batchnum := Trim(S.Text);
+      end;
+    end
+    Else    //雙主約的第二案件
+    begin
+      if FileExists(ImageSavePath+CaseID+'\SecBatchnum.dat') then
+      begin
+        S.LoadFromFile(ImageSavePath+CaseID+'\SecBatchnum.dat');
+        Batchnum := Trim(S.Text);
+      end;
+    end;
+    if FileExists(ImageSavePath+CaseID+'\Scan_Memo.dat') then
+    begin
+      S.LoadFromFile(ImageSavePath+CaseID+'\Scan_Memo.dat');
+      Usermemo := Trim(S.Text);
+    end;
+    if FileExists(ImageSavePath+CaseID+'\CheckMemo.dat') then
+    begin
+      S.LoadFromFile(ImageSavePath+CaseID+'\CheckMemo.dat');
+      Checkmemo := Trim(S.Text);
+    end;
+
+    if FileExists(ImageSavePath+CaseID+'\RemoveMemo.dat') then
+    begin
+      S.LoadFromFile(ImageSavePath+CaseID+'\RemoveMemo.dat');
+      ReMoveMemo := Trim(S.Text);
+    end;
+
+
+  finally
+  S.Free;
+  end;
+  case_priority:='0';
+  if (FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') then
+  begin
+    SendData := 'checktime='+EnCodeDateTime
+                +'&work_no='+FWork_No                                  //作業別
+                +'&case_id='+CaseID                                    //受理編號
+                +'&form_id='+UpformID                                  //表單代號
+                +'&scan_page='+inttostr(pages)                         //掃描頁數
+                +'&scan_get_value='+HTTPEncode(UTF8Encode(OMRValue))   //掃描帶值
+                +'&case_priority='+case_priority                       //案件等級
+                +'&batch_no='+batchnum                                 //車隊批號
+                +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))        //使用者註記
+                +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))      //檢核註記
+                +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))    //檢核移除註記
+                +'&case_type='+Case_type                               //進件種類    進件0 歸檔1
+                +'&handle_no='+Handle_no                               //經辦代號
+                +'&format_id='+Format_id                               //案件主鍵值
+                +'&cen_uid='+Cen_Uid                                   //被保人ID
+                +'&cen_cliname='+HTTPEncode(UTF8Encode(Cen_Cliname))   //被保人姓名
+                +'&cen_platno='+Cen_Platno                             //車牌
+                +'&cen_apolyno='+Cen_Apolyno                           //強制證號
+                +'&has_authorize='+Has_Authorize;                      //是否有授權書影像
+                Showmessage(SendData);
+    if not RejectCase then
+    begin
+      If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC05',SendData,FReWrite,Memo1,False) Then
+      begin
+        HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+        Result := False;
+        Exit;
+      end;
+    end
+    Else
+    begin
+      If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC06',SendData,FReWrite,Memo1,False) Then
+      begin
+        HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+        Result := False;
+        Exit;
+      end;
+    end;
+
+
+  end
+  Else if FMode = 'ISCAN' then
+  begin
+    SendData := 'checktime='+EnCodeDateTime
+                +'&work_no='+FWork_No
+                +'&case_id='+CaseID
+                +'&form_id='+UpformID
+                +'&format_id='+Format_id
+                +'&scan_page='+inttostr(pages)
+                +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
+                +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
+                +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+                +'&has_authorize='+Has_Authorize;    //是否有授權書影像
+    //Showmessage(SendData);
+    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC08',SendData,FReWrite,Memo1,False) Then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+  end
+  Else if FMode = 'FSCAN' then
+  begin
+    SendData := 'checktime='+EnCodeDateTime
+                +'&work_no='+FWork_No
+                +'&case_id='+CaseID
+                +'&scan_page='+inttostr(pages)
+                +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
+                +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
+                +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+                +'&has_authorize='+Has_Authorize;     //是否有授權書影像
+    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC09',SendData,FReWrite,Memo1,False) Then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+  end
+  Else if FMode = 'RSCAN' then
+  begin
+    SendData := 'checktime='+EnCodeDateTime
+                +'&act=rescan'
+                +'&workno='+FWork_No
+                +'&caseid='+CaseID
+                +'&formid='+UpformID
+                +'&scanpage='+inttostr(pages)
+               // +'&areano='+FUserArea
+                +'&scangetvalue='+HTTPEncode(UTF8Encode(OMRValue))
+                +'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
+                +'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
+                +'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+                +'&has_authorize='+Has_Authorize;        //是否有授權書影像
+    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+  end
+  Else if FMode = 'ESCAN' then
+  begin
+    SendData := 'checktime='+EnCodeDateTime
+                    +'&act=escan'
+                    +'&workno='+FWork_No
+                    +'&caseid='+CaseID
+                    +'&formid='+UpformID
+                    +'&scanpage='+inttostr(pages)
+                    +'&batchnum='+batchnum
+                    +'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
+                    +'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
+                    +'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+                    +'&has_authorize='+Has_Authorize;      //是否有授權書影像
+    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
+    begin
+      HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+      Result := False;
+      Exit;
+    end;
+  end;
+
+  if Memo1.Lines.Strings[0] <> '0'then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+Memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end;
+end;
+
+

--
Gitblit v1.8.0