{ ============================================================================== 方法名稱:GetNewCustomDocNo 引用相依:FileExists, LoadFromFile, SaveToFile 方法描述:產生一個全新的自定義文件編號。讀取 CustomDocNo.ini 中的計數器,根據入 庫/非入庫性質產生 ZZZZZ 或 YYYYY 開頭的編號,並預設其內部的第一個表單 代碼,最後將新設定寫回 INI 檔。 ============================================================================== } Function TCB_IMGPSScanX.GetNewCustomDocNo(Path,DocName:String):String; //取出未使用的自訂文件代號 var ini : Tinifile; Ct:Integer; DocNo,FormID : String; {i,n,v,ln : Integer; C_No,C_Name : String; CNo : Integer; S : TStringlist; NewDocNo : String;} begin ini := Tinifile.Create(Path+'CustomDocNo.ini'); try Ct := ini.ReadInteger('CustomCount','Count',0); inc(Ct); DocNo := 'ZZZZZ'+Add_Zoo(Ct,3); if FIs_In_Wh <> 'Y' then //不是入庫文件 DocNo := 'YYYYY'+Add_Zoo(Ct,3); if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件 begin DocNo := 'YYYYY'+Add_Zoo(Ct,3); end; FormID := DocNo+'010101A'; ini.WriteInteger('CustomCount','Count',Ct); ini.WriteString(DocNo,'FormID',FormID); ini.WriteString(DocNo,'Name',DocName); Result := DocNo; finally ini.Free; end; {S := TStringlist.Create; try NewDocNo :='ZZZZZ001'; if FileExists(Path+'CustomDocNo.dat') then begin /// ZZZZZ001_自定文件名稱 001_自定文件名稱 S.LoadFromFile(Path+'CustomDocNo.dat'); for i := 0 to S.Count - 1 do begin v := Pos('_',S.Strings[i]); ln := Length(S.Strings[i]); C_No := Copy(S.Strings[i],1,v-1); C_Name := Copy(S.Strings[i],v+1,ln-v); if DocName = C_Name then begin Showmessage('文件名稱已存在'); Result := ''; Exit; end; end; CNo := strtoint(Copy(C_No,6,3))+1; NewDocNo := 'ZZZZZ'+Add_Zoo(CNo,3); end; S.Add(NewDocNo+'_'+DocName); S.SaveToFile(Path+'CustomDocNo.dat'); Result := NewDocNo; finally S.Free; end; } end; { ============================================================================== 方法名稱:GetCustomDocName 引用相依: 方法描述:從 CustomDocNo.ini 中讀取指定自定義文件編號對應的顯示名稱。 ============================================================================== } Function TCB_IMGPSScanX.GetCustomDocName(Path,DocNo:String):String; //取出自定文件名稱 var ini : Tinifile; begin ini := Tinifile.Create(Path+'CustomDocNo.ini'); try Result := ini.ReadString(DocNo,'Name',''); finally ini.Free; end; end; { ============================================================================== 方法名稱:GetCustomFormID 引用相依: 方法描述:從 CustomDocNo.ini 中讀取指定自定義文件編號對應的表單代碼(FormID)。 ============================================================================== } Function TCB_IMGPSScanX.GetCustomFormID(Path,DocNo:String):String; //取出自定文件FormID var ini : Tinifile; begin ini := Tinifile.Create(Path+'CustomDocNo.ini'); try Result := ini.ReadString(DocNo,'FormID',''); finally ini.Free; end; end; { ============================================================================== 方法名稱:GetCustomDocDir 引用相依: 方法描述:根據自定義文件名稱尋找對應的目錄代號(如 ZZZZZ001)。遍歷 CustomDocNo.i ni 中的所有區段,讀取 Name 欄位進行比對,成功則回傳該編號。 ============================================================================== } Function TCB_IMGPSScanX.GetCustomDocDir(Path,DocName:String):String; //取出自定文件DocDir var i,ct:integer; ini : Tinifile; begin Result := ''; ini := Tinifile.Create(Path+'CustomDocNo.ini'); try ct := ini.ReadInteger('CustomCount','Count',0); for i := 1 to ct do begin if ini.ReadString('ZZZZZ'+Add_Zoo(i,3),'Name','') = DocName then begin Result := 'ZZZZZ'+Add_Zoo(i,3); Break; end; if ini.ReadString('YYYYY'+Add_Zoo(i,3),'Name','') = DocName then begin Result := 'YYYYY'+Add_Zoo(i,3); Break; end; end; finally ini.Free; end; end; { ============================================================================== 方法名稱:FindCustomDocName 引用相依: 方法描述:檢查指定的自定義文件名稱是否已存在於 CustomDocNo.ini 設定檔中。 ============================================================================== } Function TCB_IMGPSScanX.FindCustomDocName(Path,DocName:String):Boolean; //尋找自定文件名稱是否存在 var ini : Tinifile; Ct,i:Integer; DocNo,FormID : String; begin Result := False; ini := Tinifile.Create(Path+'CustomDocNo.ini'); try Ct := ini.ReadInteger('CustomCount','Count',0); for I := 1 to Ct do begin DocNo := 'ZZZZZ'+Add_Zoo(i,3); if DocName = ini.ReadString(DocNo,'Name','') then begin Result := True; Break; end; end; finally ini.Free; end; end; { ============================================================================== 方法名稱:Create_Cust_DocDir 引用相依:DirectoryExists 方法描述:根據外部傳入的清單(FC_DocNoList 或 FC_DocNameList)預先產生案件所需的 文件目錄。會自動處理分份文件的命名、檢查是否已存在,並在 CustomDocNo.in i 中註冊新名稱。 ============================================================================== } Procedure TCB_IMGPSScanX.Create_Cust_DocDir(CaseID:String); //產生外面傳入的文件代號及自定文件 var i,n : Integer; C_DocNoList,C_DocNameList : TStringlist; DocNo,DocName,DocDir : String; DocNo_Ct,NowDocNo_Ct :integer; DocName_Ct : Integer; inx : Integer; begin C_DocNoList := TStringlist.Create; C_DocNameList := TStringlist.Create; try if FC_DocNoList <> '' then begin C_DocNoList.StrictDelimiter := True; C_DocNoList.Delimiter := #9; C_DocNoList.DelimitedText := FC_DocNoList; //Showmessage(C_DocNoList.Text); for i := 0 to C_DocNoList.Count - 1 do begin DocNo := C_DocNoList.Strings[i]; //舊件不長出錯誤的文件出來 if (FIs_OldCase = 'Y') and (FWork_no='HLN') and (DocNo = FormCode2DocNo('10000001011112A')) then Continue; NowDocNo_Ct := GetDocNoCount(CaseID,DocNo); if DocNoNeedDiv(DocNo) then begin DocNo_Ct := 0; for n := 0 to i do begin if C_DocNoList.Strings[n] = DocNo then inc(DocNo_Ct); end; if DocNo_CT <= NowDocNo_Ct then Continue; if DirectoryExists(ImageSavePath+CaseID+'\'+DocNo+'('+inttostr(DocNo_Ct)+')') then //存在了 Continue; if (DocNo_Ct = 1) and DirectoryExists(ImageSavePath+CaseID+'\'+DocNo) then //存在了 20140327加 Continue; DocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',DocNo) end else begin DocDir := DocNo; end; if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then begin MkDir(ImageSavePath+CaseID+'\'+DocDir); SetDocNoList('A',-1,CaseID,DocDir,'1'); end; if not DocNoNeedDiv(DocNo) then //不分份的秀數 SetDocDirCopies(CaseID,DocNo,GetCustomDocNoCount(DocNo)); end; end; if FC_DocNameList <> '' then begin C_DocNameList.StrictDelimiter := True; C_DocNameList.Delimiter := #9; C_DocNameList.DelimitedText := FC_DocNameList; //Showmessage(C_DocNameList.Text); for i := 0 to C_DocNameList.Count - 1 do begin DocName := C_DocNameList.Strings[i]; DocName_Ct := GetCustomNameCount(DocName); if not FindCustomDocName(ImageSavePath+CaseID+'\',DocName) then begin DocDir := GetNewCustomDocNo(ImageSavePath+CaseID+'\',DocName); if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then begin MkDir(ImageSavePath+CaseID+'\'+DocDir); SetDocNoList('A',-1,CaseID,DocDir,inttostr(DocName_Ct)); end; end Else begin DocDir := GetCustomDocDir(ImageSavePath+CaseID+'\',DocName); //inx := DocNoDir2Index(ImageSavePath+CaseID+'\',DocDir); SetDocDirCopies(CaseID,DocDir,DocName_Ct); end; end; end; finally C_DocNoList.Free; C_DocNameList.Free; end; end; { ============================================================================== 方法名稱:GetCustomNameCount 引用相依: 方法描述:統計外部傳入清單中,特定自定義文件名稱出現的次數。 ============================================================================== } Function TCB_IMGPSScanX.GetCustomNameCount(CustomName:String):Integer; //取外傳的名稱數量 var i,ct : Integer; C_DocNameList : TStringlist; begin C_DocNameList := TStringlist.Create; try C_DocNameList.StrictDelimiter := True; C_DocNameList.Delimiter := #9; C_DocNameList.DelimitedText := FC_DocNameList; ct := 0; for i := 0 to C_DocNameList.Count - 1 do begin if C_DocNameList.Strings[i] = CustomName then begin inc(ct); end; end; Result := ct; finally C_DocNameList.Free; end; end; { ============================================================================== 方法名稱:GetCustomDocNoCount 引用相依: 方法描述:統計外部傳入清單中,特定文件編號(DocNo)出現的次數。 ============================================================================== } Function TCB_IMGPSScanX.GetCustomDocNoCount(Docno:String):Integer; //取外傳的DocNo數量 var i,ct : Integer; C_DocNoList : TStringlist; begin C_DocNoList := TStringlist.Create; try C_DocNoList.StrictDelimiter := True; C_DocNoList.Delimiter := #9; C_DocNoList.DelimitedText := FC_DocNoList; ct := 0; for i := 0 to C_DocNoList.Count - 1 do begin if C_DocNoList.Strings[i] = Docno then begin inc(ct); end; end; Result := ct; finally C_DocNoList.Free; end; end;