{ ==============================================================================
|
方法名稱:CheckRule2OMRErrInfo
|
引用相依:
|
方法描述:將檢核規則清單(CHECK_RULE_INF_List)中的資料轉換為內部的 OMRErrInfo R
|
ecord 陣列,設定各項規則的顯示類型(Display)、是否可忽略(Ignore)及提示
|
訊息與掃瞄模式。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.CheckRule2OMRErrInfo; //檢核規則填入OMRErrINFo Record
|
var i : Integer;
|
CheckNo : String;
|
begin
|
for I := 1 to 11 do
|
begin
|
CheckNo := Add_Zoo(i,3);
|
|
if FindSQLData(CHECK_RULE_INF_List,'MESG_SHOW_TYPE,MESG_DISP_TYPE,CHECK_MESG,SCAN_MODE','CHECK_NO',CheckNo,0,FindResult) then
|
begin
|
if GetFindResult('MESG_SHOW_TYPE') = '1' then
|
OMRErrInfo[i].Display := True //顯示
|
Else if GetFindResult('MESG_SHOW_TYPE') = '2' then
|
OMRErrInfo[i].Display := False; //不顯示
|
|
if GetFindResult('MESG_DISP_TYPE') = '1' then
|
OMRErrInfo[i].Ignore := True //可忽略
|
Else if GetFindResult('MESG_DISP_TYPE') = '2' then
|
OMRErrInfo[i].Ignore := False; //不可忽略
|
|
OMRErrInfo[i].Info := GetFindResult('CHECK_MESG');
|
OMRErrInfo[i].Mode := GetFindResult('SCAN_MODE');
|
end;
|
end;
|
end;
|
|
|
|
|
{ ==============================================================================
|
方法名稱:DistinctFormCode
|
引用相依:LoadFromFile, LoadFileGetMD5
|
方法描述:從案件的 Context.dat 檔案中提取不重複的表單代碼(FormCode)並存入 OMRF
|
ileList。程序會遍歷上傳目錄下的所有檔案,檢查檔案是否存在且未被處理過。
|
接著比對 OMRFileList 中已有的表單代碼,若為新出現的表單代碼且檔案有效
|
,則將其加入清單中,用於後續 OMR 處理。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.DistinctFormCode(CaseID:String); //從案件裡的FormCode取出第一頁
|
var
|
i,n : Integer;
|
LForm,OForm : String;
|
Addok : Boolean;
|
S : TStringlist;
|
begin
|
S := TStringlist.Create;
|
try
|
S.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
|
for i := 0 to S.Count - 1 do
|
begin
|
LogFile1.LogToFile(logTimeString+S.Strings[i]+' ISExistImg='+BoolToStr(ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]),true));
|
LogFile1.LogToFile(logTimeString+S.Strings[i]+' reSizeExistImgList='+BoolToStr(reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1,true));
|
if FWH_category='N' then
|
begin
|
if (ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))
|
or (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1) then
|
begin
|
Continue;
|
end;
|
end;
|
|
LForm := FileName2FormCode(S.Strings[i]);
|
AddOk := True;
|
for n := 0 to OMRFileList.Count - 1 do
|
begin
|
OForm := FileName2FormCode(OMRFileList.Strings[n]);
|
if (LForm <> '') and (LForm = OForm) then
|
begin
|
AddOk := False;
|
Break;
|
end;
|
end;
|
if AddOk then
|
begin
|
OMRFileList.Add(S.Strings[i]);
|
end;
|
end;
|
finally
|
S.Free;
|
end;
|
|
end;
|
|
|
|
{ ==============================================================================
|
方法名稱:OMRCheckCase
|
引用相依:ImageReSize_FormID, GetSiteOMR, FindPoint, LoadFromFile, FileExists,
|
SaveToFile
|
方法描述:執行案件的自動化 OMR 規則檢核,這是確保掃瞄案件合規性的核心邏輯。程序
|
流程:
|
1. 初始化檢核日誌。
|
2. 識別主文件並驗證必要文件是否缺漏、相依與互斥文件是否衝突、以及表單
|
是否已停用。
|
3. 檢查各文件類型是否超過預設的最大頁數。
|
4. 針對案件內每張影像,執行十字定位點縮放 (ImageReSize_FormID) 後,載
|
入對應表單的 XML 規則檔。
|
5. 執行欄位級檢核,包含必填項 (settype1)、跨文件欄位關聯 (settype3/set
|
type8)、相依文件需求 (settype4) 及備註填寫要求 (settype6) 等。
|
6. 將所有檢核失敗原因紀錄至 Checkerr.ini。最終返回案件是否通過所有檢
|
核規則。
|
============================================================================== }
|
Function TCB_IMGPSScanX.OMRCheckCase(CaseID:String):Boolean; //OMR檢核
|
var
|
i,n,m,v,v1 : Integer;
|
XT,RelaXT,ValueXT : TXmltool;
|
OMRFormCode,OMRFile,OMRFormName,ColEName,ColCName,Site : String;
|
Pixel : Integer;
|
RelaFormCode,RelaFile,RelaFormName,RelaColEName,RelaColCName,RelaSite : String;
|
RelaDocNo,RelaDocName : string;
|
RelaPixel : Integer;
|
s : String;
|
nodename : String;
|
OMROK : Boolean;
|
CaseOk : Boolean;
|
ErrStr : String;
|
SiteRec,RelaSiteRec : String; //多組位置記錄
|
OMRValue : String;
|
MainFormID,MainDocNo,MainVersion : String; //主FormID
|
MainFormPage,CaseFormPage : Integer; //主要文件需要的頁數
|
NeedDocNoStr,NoDocNoStr : String; //相依 互斥文件字串
|
List : TStringlist;
|
FormCode : String;
|
FormDataPages : Integer;
|
NoSite : Boolean; //未定位
|
Anchor,Anchor1 : String;
|
OMROkCount : Integer;
|
//Casecheck : Boolean; //是否要做檢核
|
//AllCheck : Boolean; //是否要做完整檢核
|
|
ISB8W,ISB8H:integer;
|
begin
|
///OMRErrInfo 1: 必要文件 2:相依文件 3:互斥文件 4:必填 5:欄位有值附文件 6:欄位有值不附文件
|
/// 7: 欄位有值相關欄位也要有值 8:欄位有值要寫備註 9:停用日期 10:最大頁數
|
//Casecheck := True;
|
//Allcheck := True;
|
//if (FMode = 'ISCAN') then
|
//Allcheck := False;
|
CaseOk := True;
|
//if Casecheck then
|
//begin
|
DeleteFile(ImageSavePath+CaseID+'\upload\Checkerr.ini');
|
DeleteFile(ImageSavePath+CaseID+'\upload\CheckMemo.dat');
|
//DeleteFile(ImageSavePath+CaseID+'\upload\ReSize.dat');
|
DeleteFile(ImageSavePath+CaseID+'\upload\RemoveMemo.dat');
|
DeleteFile(ImageSavePath+CaseID+'\upload\OMRCheckOk.dat');
|
Memo1.Lines.Clear;
|
OMRFileList.Clear;
|
|
MainFormID := GetCaseFormID(ImageSavePath+CaseID+'\upload\');
|
List := TStringlist.Create;
|
try
|
//if AllCheck then
|
//begin
|
if GetCasePage(ImageSavePath,CaseID) =0 then
|
begin
|
|
end;
|
//ShowMessage('MainFormID='+MainFormID);
|
LogFile1.LogToFile(logTimeString+' '+FModeName+' '+CaseID+' '+'MainFormID='+MainFormID);
|
if MainFormID = ''then
|
begin
|
//20131203 yuu說不檢查這個,先拿掉 20170315 楷琳說未歸類要擋 20170726 因此有檢查必要FormID 所以 可以拿掉
|
{if FCheck_main_form='Y' then
|
begin
|
if (FMode <> 'SSCAN') AND (FMode<>'ESCAN') then //簽署章件會換主FormID,先跳過 20170629 ESCAN 也不檢查
|
begin
|
ErrStr:=_Msg('找不到分案文件'); //找不到主文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
|
CaseOk := false;
|
//ShowMessage('AAAAA');
|
end;
|
end;
|
}
|
end
|
Else
|
begin
|
//////主要非主要文件//////
|
DistinctDocinCase(ImageSavePath+CaseID+'\upload\');
|
//ShowMessage(DocNo_VerinCase.Text);
|
//DocNo_VerinCase.Add('31A00101_1706A');
|
LogFile1.LogToFile(logTimeString+' '+CaseID+' '+'DocNo_VerinCase.Text='+DocNo_VerinCase.Text);
|
if ModeNeedCheck(OMRErrInfo[1].Mode,FMode) then //是否要檢核
|
begin
|
for i := 0 to DocNo_VerinCase.Count - 1 do
|
begin
|
v := Pos('_', DocNo_VerinCase.Strings[i]);
|
v1 := length(DocNo_VerinCase.Strings[i]);
|
MainDocNo := Copy(DocNo_VerinCase.Strings[i],1,v-1); //FormCode2DocNo(MainFormID);
|
MainVersion :=Copy(DocNo_VerinCase.Strings[i],v+1,v1-v); //FormCode2Version(MainFormID);
|
MainFormPage := GetDataDocNoPage(MainDocNo,MainVersion); //資料庫記錄主文件頁數
|
CaseFormPage := CheckCaseDocNoPage(CaseID,MainDocNo,MainVersion,MainFormPage); //案件主文件的頁數
|
LogFile1.LogToFile(logTimeString+CaseID+',MainDocNo='+MainDocNo+',MainVersion='+MainVersion+',MainFormPage='+IntToStr(MainFormPage)+',CaseFormPage='+IntToStr(CaseFormPage));
|
//CheckFirstDocNoPage
|
IF (MainFormPage > 0) and (MainFormPage <> CaseFormPage) then
|
begin
|
ErrStr:=MainDocNo+Format(OMRErrInfo[1].Info,[Inttostr(MainFormPage),Inttostr(CaseFormPage)]); //主要文件需有XX頁僅附XX頁
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[1].Ignore,OMRErrInfo[1].Display);
|
if OMRErrInfo[1].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////主要非主要文件/////
|
//showmessage(MainFormID);
|
MainDocNo := FormCode2DocNo(MainFormID);
|
MainVersion := FormCode2Version(MainFormID);
|
if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
|
begin
|
NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
|
NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
|
end
|
Else if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
|
begin
|
NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
|
NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
|
end;
|
|
//////相依文件/////
|
if ModeNeedCheck(OMRErrInfo[2].Mode,FMode) then //是否要檢核
|
begin
|
List.CommaText := NeedDocNoStr;
|
for I := 0 to List.Count - 1 do
|
begin
|
if not Case_DocNoExists(CaseID,List.Strings[i]) then //沒附相依文件
|
begin
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
ErrStr:=Format(OMRErrInfo[2].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //沒附相依文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[2].Ignore,OMRErrInfo[2].Display);
|
if OMRErrInfo[2].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////相依文件/////
|
|
//////互斥文件/////
|
if ModeNeedCheck(OMRErrInfo[3].Mode,FMode) then //是否要檢核
|
begin
|
List.CommaText := NoDocNoStr;
|
for I := 0 to List.Count - 1 do
|
begin
|
if Case_DocNoExists(CaseID,List.Strings[i]) then //附了互斥文件
|
begin
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
ErrStr:=Format(OMRErrInfo[3].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //有附互斥文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[3].Ignore,OMRErrInfo[3].Display);
|
if OMRErrInfo[3].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////互斥文件/////
|
end; //MainFormID結束
|
//end;
|
List.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
|
for i := 0 to List.Count - 1 do
|
begin
|
FormCode := FileName2FormCode(List.Strings[i]);
|
/////未歸類///
|
{IF FormCode = 'Attach' Then //20140211 yuu說不檢查了
|
begin
|
ErrStr:=_Msg('尚有文件未歸類');
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
|
CaseOk := false;
|
end; }
|
/////未歸類//////
|
|
/////未註冊文件/////
|
{IF not FormIDExists(FormCode,False) then //未註冊文件
|
begin
|
ErrStr:=FormCode+_Msg('不為此業務的表單代碼');
|
OMRErr2ini(CaseID,ErrStr,'','','','',False,False,True);
|
CaseOk := false;
|
end }
|
/////未註冊文件/////
|
//////停用文件//
|
{Else} IF ModeNeedCheck(OMRErrInfo[9].Mode,FMode) and (not FormIDExists(FormCode,True,0)) and (not checkFormCodeIsCustom(ImageSavePath + CaseID+'\upload\',FormCode)) then //有停用的文件
|
begin
|
//ShowMessage('AAAA');
|
ErrStr:=Format(OMRErrInfo[9].Info,[FormCode2FormName(CaseID,FormCode)]); //有停用文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[9].Ignore,OMRErrInfo[9].Display);
|
//ShowMessage('ErrStr='+ErrStr);
|
if OMRErrInfo[9].Display then
|
CaseOk := false;
|
end;
|
//////停用文件////
|
end;
|
finally
|
List.Free;
|
end;
|
//if AllCheck then
|
//begin
|
//////最大頁數///
|
LogFile1.LogToFile(logTimeString+'最大頁數A段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
DistinctFormCode(CaseID);
|
if ModeNeedCheck(OMRErrInfo[10].Mode,FMode) then //是否要檢核
|
begin
|
//ShowMessage('AAA'+OMRFileList.Text);
|
LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
For i := 0 to OMRFileList.Count - 1 do
|
begin
|
if FModeName=_Msg('異動件') then Continue;
|
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+OMRFileList.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
FormCode := FileName2FormCode(OMRFileList.Strings[i]);
|
FormDataPages := GetDataFormCodePages(FormCode);
|
|
IF (FormCode <> '') and (FormDataPages > 0) and (FindFormCodePages(CaseID,FormCode) > FormDataPages) then //有超過最大頁數的文件
|
begin
|
ErrStr:=Format(OMRErrInfo[10].Info,[FormCode2FormName(CaseID,FormCode),inttostr(FormDataPages)]); //有超過最大頁數文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[10].Ignore,OMRErrInfo[10].Display);
|
if OMRErrInfo[10].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
/////最大頁數/////
|
//end;
|
ImageScrollBox1.FileName := '';
|
//if FWork_No = 'CW' then //理賠就不做下面的檢核了
|
//begin
|
//////OMR檢核///////
|
ContextList.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
|
DistinctFormCode(CaseID);
|
ValueXT := TXmltool.Create;
|
Try
|
//ShowMessage('必填'+OMRFileList.Text);
|
LogFile1.LogToFile(logTimeString+'必填 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
For i := 0 to OMRFileList.Count - 1 do
|
begin
|
//ShowMessage('OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
if CheckRequiredColumnValues(FWork_NO,CaseID) then Continue;
|
|
OMRFile := OMRFileList.Strings[i];
|
OMRFormCode := FileName2FormCode(OMRFileList.Strings[i]);
|
OMRFormName := FormCode2FormName(CaseID,OMRFormCode);
|
Anchor := FormID2Anchor(OMRFormCode);
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile);
|
////依十字定位點縮放///
|
//Display1.Lines.Add('OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
|
LogFile1.LogToFile(logTimeString+'OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
|
//ShowMessage('KKKKK');
|
if not FileExists(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml') then //沒有Xml就不用檢核
|
Continue;
|
|
//ShowMessage('11638 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
XT := TXmltool.Create(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml');
|
RelaXT := TXmltool.Create;
|
//ShowMessage('ModeNeedCheck='+BoolToStr(ModeNeedCheck(OMRErrInfo[4].Mode,FMode),true));
|
try
|
//*******必填********
|
if ModeNeedCheck(OMRErrInfo[4].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype1/'].First then
|
Repeat
|
OMROK := False;
|
SiteRec := ''; //清掉
|
ColEName := XT.SubNodes['/form/settype1/'].NodeName;
|
ColCName := XT.Node['/form/settype1/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
if XT.SubNodes['/form/settype1/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype1/'+ColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
Pixel := Strtoint(XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
|
Site := XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
//有填就ok
|
//Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
|
//SafePixel:=90000;
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
//Showmessage('oh');
|
OMROK := True;
|
Break;
|
end;
|
end
|
Else
|
begin
|
//ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
|
end;
|
Until not XT.SubNodes['/form/settype1/'+ColEName+'/'].Next;
|
if not OMROk then
|
begin
|
ErrStr:=Format(OMRErrInfo[4].Info,[ColCName]); //XX欄位未填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[4].Ignore,OMRErrInfo[4].Display);
|
if OMRErrInfo[4].Display then
|
CaseOk := false;
|
end;
|
Until not XT.SubNodes['/form/settype1/'].Next ;
|
end;
|
//*******必填********
|
//ShowMessage('11692 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
//if AllCheck then
|
//begin
|
//*******有值相關文件的欄位也要有值*******
|
if ModeNeedCheck(OMRErrInfo[7].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype3/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype3/'].NodeName;
|
ColCName := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
|
if XT.SubNodes['/form/settype3/'+ColEName+'/'].First then
|
Repeat
|
RelaSiteRec := '';
|
nodename := XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeName;
|
If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
RelaFormCode := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaColEName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
|
RelaColCName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
|
RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
|
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
|
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
|
Anchor1 := FormID2Anchor(RelaFormCode);
|
RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
|
Display1.Lines.Add(RelaFile+','+RelaFormName);
|
//ShowMessage(RelaFile);
|
//ShowMessage(ImageSavePath+CaseID+'\upload\'+RelaFile);
|
if RelaFile<>'' then
|
begin
|
ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
|
ISB8W:= ISB8.Graphic.Width;
|
ISB8H:= ISB8.Graphic.Height;
|
FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
|
end;
|
|
OMROK := False;
|
//OMROK := False;
|
//if RelaXT.SubNodes['/form/settype2/'].First then
|
//Repeat
|
NoSite := True;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
|
NoSite := False;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
|
Repeat
|
nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
|
RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if RelaSiteRec= '' then //記錄位置
|
RelaSiteRec := RelaSite
|
else
|
RelaSiteRec := RelaSiteRec+'@'+RelaSite;
|
if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
begin
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
|
begin
|
OMROK := True;
|
Break;
|
end;
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile); //20170815 重新抓定位
|
////依十字定位點縮放////
|
end;
|
end;
|
|
Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
|
if not OMROk then
|
begin
|
if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位未填寫
|
Else if NoSite then
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
|
Else
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位未填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
|
if OMRErrInfo[7].Display then
|
CaseOk := false;
|
end;
|
//Until not RelaXT.SubNodes['/form/settype2/'].Next ;
|
|
end;
|
Until not XT.SubNodes['/form/settype3/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype3/'].Next ;
|
end;
|
//*******有值相關文件的欄位也要有值*******
|
//ShowMessage('11788 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
|
//*******有值相關文件的欄位不能有值*******
|
if ModeNeedCheck(OMRErrInfo[11].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype8/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
OMROkCount := 0;
|
ColEName := XT.SubNodes['/form/settype8/'].NodeName;
|
ColCName := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫// //
|
inc(OMROkCount);
|
end;
|
if XT.SubNodes['/form/settype8/'+ColEName+'/'].First then
|
Repeat
|
RelaSiteRec := '';
|
nodename := XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeName;
|
If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
RelaFormCode := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaColEName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
|
RelaColCName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
|
RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
|
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
|
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
|
Anchor1 := FormID2Anchor(RelaFormCode);
|
RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
|
|
if RelaFile<>'' then
|
begin
|
ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
|
ISB8W:= ISB8.Graphic.Width;
|
ISB8H:= ISB8.Graphic.Height;
|
FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
|
end;
|
|
OMROK := False;
|
//OMROK := False;
|
//if RelaXT.SubNodes['/form/settype2/'].First then
|
//Repeat
|
NoSite := True;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
|
NoSite := False;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
|
Repeat
|
nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
|
RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if RelaSiteRec= '' then //記錄位置
|
RelaSiteRec := RelaSite
|
else
|
RelaSiteRec := RelaSiteRec+'@'+RelaSite;
|
if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
begin
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
|
begin
|
inc(OMROkCount);
|
//OMROK := True;
|
//Break;
|
end;
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile);
|
////依十字定位點縮放////
|
end;
|
end;
|
//Else
|
//begin
|
//ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
|
//end;
|
Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
|
if OMROkCount > 1 then
|
begin
|
if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位也填寫
|
Else if NoSite then
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
|
Else
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位也填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
|
if OMRErrInfo[11].Display then
|
CaseOk := false;
|
end;
|
//Until not RelaXT.SubNodes['/form/settype2/'].Next ;
|
|
end;
|
Until not XT.SubNodes['/form/settype8/'+ColEName+'/'].Next;
|
Until not XT.SubNodes['/form/settype8/'].Next ;
|
end;
|
//*******有值相關文件的欄位不能有值*******
|
|
//ShowMessage('11889 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
|
//*******有值相依文件*******
|
if ModeNeedCheck(OMRErrInfo[5].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype4/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype4/'].NodeName;
|
ColCName := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if XT.SubNodes['/form/settype4/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeName;
|
If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
{RelaFormCode := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := FormCode2FileName(RelaFormCode);
|
RelaFormName := FormCode2FormName(RelaFormCode); }
|
RelaDocNo := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := DocNo2FileName(RelaDocNo,ContextList);
|
RelaDocName := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
|
if RelaFile='' then
|
begin
|
ErrStr:=Format(OMRErrInfo[5].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,需附XX文件
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[5].Ignore,OMRErrInfo[5].Display);
|
if OMRErrInfo[5].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype4/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype4/'].Next ;
|
end;
|
//*******有值相依文件*******
|
|
//*******有值互斥文件*******
|
if ModeNeedCheck(OMRErrInfo[6].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype5/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype5/'].NodeName;
|
ColCName := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if XT.SubNodes['/form/settype5/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeName;
|
If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
{RelaFormCode := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := FormCode2FileName(RelaFormCode);
|
RelaFormName := FormCode2FormName(RelaFormCode);}
|
RelaDocNo := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := DocNo2FileName(RelaDocNo,ContextList);
|
RelaDocName := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
|
if RelaFile<>'' then //有附 20130604看到(='')改的(未測)
|
begin
|
ErrStr:=Format(OMRErrInfo[6].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,不能附XX文件
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[6].Ignore,OMRErrInfo[6].Display);
|
if OMRErrInfo[6].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype5/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype5/'].Next ;
|
end;
|
//*******有值互斥文件*******
|
|
//*******有值寫備註*******
|
if ModeNeedCheck(OMRErrInfo[8].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype6/'].First then
|
Repeat
|
SiteRec := '';
|
ColEName := XT.SubNodes['/form/settype6/'].NodeName;
|
ColCName := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['colxy'];
|
Pixel := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['pixel'];
|
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if not FileExists(ImageSavePath+CaseID+'ScanMemo.dat') then
|
begin
|
ErrStr:=Format(OMRErrInfo[8].Info,[ColCName]); //XX文件XX欄位填寫時,需寫備註
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[8].Ignore,OMRErrInfo[8].Display);
|
if OMRErrInfo[8].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype6/'].Next ;
|
end;
|
//*******有值寫備註*******
|
|
//*******OMR帶值********
|
if XT.SubNodes['/form/settype7/'].First then
|
Repeat
|
ColEName := XT.SubNodes['/form/settype7/'].NodeName;
|
ValueXT['/content/'+ColEName+'/@savevalue'] := ''; //先給預設空白
|
if XT.SubNodes['/form/settype7/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype7/'+ColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
Pixel := Strtoint(XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
|
Site := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
|
OMRValue := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['getvalue'];
|
|
//有填就ok
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
ValueXT['/content/'+ColEName+'/@savevalue'] := OMRValue; //有填就換成設定的值
|
Break;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype7/'+ColEName+'/'].Next;
|
Until not XT.SubNodes['/form/settype7/'].Next ;
|
|
//*******OMR帶值********
|
//end;
|
Finally
|
if (OMRValue <> '') then
|
ValueXT.SaveToFile(ImageSavePath+CaseID+'/GetValue.xml');
|
XT.Free;
|
RelaXT.Free;
|
end;
|
end;
|
//必填迴圈結束
|
Finally
|
ValueXT.Free;
|
end;
|
//end;
|
//end;
|
Result := CaseOk;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:OMRErr2ini
|
引用相依:FileExists, LoadFromFile, SaveToFile
|
方法描述:紀錄 OMR 檢核失敗的詳細資訊。方法根據 Display 旗標決定紀錄方式:若為 T
|
rue,則在案件目錄下的 Checkerr.ini 中建立新的錯誤序號區段,詳細紀錄失
|
敗原因、檔案路徑、OMR 座標點、關聯檔案及定位點類型,用於後續 UI 呈現;若
|
為 False,則僅將錯誤原因字串附加於 CheckMemo.dat 純文字日誌中,作為背
|
景紀錄之用。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini
|
var
|
ini : Tinifile;
|
Errcount : Integer;
|
S : TStringlist;
|
begin
|
if Display then
|
begin
|
ini := Tinifile.Create(ImageSavePath + CaseID+'\upload\Checkerr.ini');
|
try
|
Errcount := ini.ReadInteger('OMRCount','Count',0); //透過Errcount來對應
|
inc(ErrCount);
|
ini.WriteString(inttostr(ErrCount),'Reason',Reason);
|
ini.WriteBool(inttostr(ErrCount),'Ingnore',Ingnore);
|
ini.writeString(inttostr(ErrCount),'FileName',FileName);
|
ini.WriteString(inttostr(ErrCount),'Site',Site);
|
ini.WriteString(inttostr(ErrCount),'RelaFileName',RelaFileName);
|
ini.WriteString(inttostr(ErrCount),'RelaSite',RelaSite);
|
ini.WriteString(inttostr(ErrCount),'Anchor',Anchor);
|
ini.WriteString(inttostr(ErrCount),'RelaAnchor',Anchor1);
|
ini.WriteBool(inttostr(ErrCount),'Del',Del);
|
ini.WriteInteger('OMRCount','Count',ErrCount);
|
finally
|
ini.Free;
|
end;
|
end
|
Else
|
begin
|
S := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath + CaseID+'\CheckMemo.dat') then
|
S.LoadFromFile(ImageSavePath + CaseID+'\CheckMemo.dat');
|
S.Add(Reason);
|
S.SaveToFile(ImageSavePath + CaseID+'\CheckMemo.dat');
|
finally
|
S.Free;
|
end;
|
end;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:OMRErrini2List
|
引用相依:
|
方法描述:將檢核失敗紀錄從 INI 設定檔載入至 UI 介面。方法會讀取 Checkerr.ini,遍
|
歷所有錯誤紀錄,並過濾掉已標記為刪除 (Del) 的項目。將符合條件的錯誤原
|
因填入 ErrlistForm 中的 ListView 元件,供使用者查看與修正。若清單中仍
|
存在錯誤,會同步停用介面上的上傳按鈕以防止不合規案件送出。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.OMRErrini2List(CaseID:String;ErrlistForm:TErrlistForm); //OMR檢核失敗從ini寫入ListView
|
var
|
ini : Tinifile;
|
Errcount : Integer;
|
Del : Boolean;
|
i : Integer;
|
begin
|
ini := Tinifile.Create(ImageSavePath + CaseID+'\upload\Checkerr.ini');
|
try
|
Errcount := ini.ReadInteger('OMRCount','Count',0);
|
|
for i := 1 to ErrCount do
|
begin
|
Del := ini.ReadBool(inttostr(i),'Del',False); //是否被移除了
|
if Not Del then
|
begin
|
With ErrlistForm.ErrListLV.Items.Add do
|
begin
|
Caption := ini.ReadString(inttostr(i),'Reason','');
|
SubItems.Add(inttostr(i));
|
end;
|
end;
|
end;
|
if Errlistform.ErrListLV.Items.Count > 0 then
|
Errlistform.ImmediateBt.Enabled := False;
|
finally
|
ini.Free;
|
end;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:OMRErrini2List
|
引用相依:
|
方法描述:將 OMR 檢核失敗的記錄從 Checkerr.ini 讀取並顯示在 ListView 中。程序會
|
開啟指定案件目錄下的設定檔,讀取錯誤總數後逐一檢查每筆記錄是否已被移
|
除(Del 標記)。若記錄有效,則將錯誤原因及索引值新增至傳入的 ErrlistForm
|
中的 ErrListLV 列表。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.OMRErrini2List(CaseID:String;ErrlistForm:TErrlistForm); //OMR檢核失敗從ini寫入ListView
|
var
|
ini : Tinifile;
|
Errcount : Integer;
|
Del : Boolean;
|
i : Integer;
|
begin
|
ini := Tinifile.Create(ImageSavePath + CaseID+'\upload\Checkerr.ini');
|
try
|
Errcount := ini.ReadInteger('OMRCount','Count',0);
|
|
for i := 1 to ErrCount do
|
begin
|
Del := ini.ReadBool(inttostr(i),'Del',False); //是否被移除了
|
if Not Del then
|
begin
|
With ErrlistForm.ErrListLV.Items.Add do
|
begin
|
Caption := ini.ReadString(inttostr(i),'Reason','');
|
SubItems.Add(inttostr(i));
|
end;
|
end;
|
end;
|
if Errlistform.ErrListLV.Items.Count > 0 then
|
Errlistform.ImmediateBt.Enabled := False;
|
finally
|
ini.Free;
|
end;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:OMRErrini2ListForLog
|
引用相依:LoadFromFile
|
方法描述:彙整系統中所有活動案件的 OMR 檢核錯誤訊息。方法讀取全域的 CaseList.da
|
t,依次遍歷每個案件子目錄下的 Checkerr.ini,收集所有未被移除的錯誤原因
|
,並將其合併為一個完整的文字區塊返回。此功能主要用於產生系統運行日誌,
|
方便追蹤與審查多案件的檢核狀態。
|
============================================================================== }
|
function TCB_IMGPSScanX.OMRErrini2ListForLog(CaseID: String): String;
|
var
|
ini : Tinifile;
|
Errcount : Integer;
|
Del : Boolean;
|
i,j : Integer;
|
ST,CaseList:TStringList;
|
|
begin
|
Result:='';
|
//CaseList.dat
|
ST:=TStringList.Create;
|
CaseList:=TStringList.Create;
|
CaseList.LoadFromFile(ImageSavePath+'CaseList.dat');
|
for I := 0 to CaseList.Count - 1 do
|
begin
|
ini := Tinifile.Create(ImageSavePath + CaseList.Strings[i]+'\upload\Checkerr.ini');
|
try
|
Errcount := ini.ReadInteger('OMRCount','Count',0);
|
|
for j := 1 to ErrCount do
|
begin
|
Del := ini.ReadBool(inttostr(j),'Del',False); //是否被移除了
|
if Not Del then
|
begin
|
ST.Add(ini.ReadString(inttostr(j),'Reason','')) ;
|
end;
|
end;
|
finally
|
ini.Free;
|
end;
|
end;
|
Result:=ST.Text;
|
ST.Free;
|
CaseList.Free;
|
end;
|