(* 关键工序控制开始处 *)
(* 检查送下一工序内容时,前面应该做的工序是否都做了 *)
(* ------------------------------------------------------------------------------------- *)
bmemProcedure := true;
if memProcedure.Text = '' then
begin
Application.Messagebox(Pchar('获取当前工序流程出现错误,将不能正常检查提示未做工序!'),Pchar('提示'),Mb_IconInforMation+MB_OK);
bmemProcedure := false;
end;
//针织->验布->备布->染色(缸内不过软)->新开幅机开幅轧水->SANTEX 烘干(涂层前测试)->中检->定型过软->
//反面抓毛->SANTEX过水抛干->剪毛->涂层(反面涂层)->干拉->中检->定型->打包->后检
strTempProcedure := Trim(memProcedure.Text);
i := Pos(StrProcedure+'-', strTempProcedure); //加一个"-"符号是为了分割下一工序之前的工序;否则比如"定型",可能取到"定型过软"
if i < 1 then bmemProcedure := false;
//进入处理
if bmemProcedure then
begin
strTempProcedure := copy(strTempProcedure,
1,
i-1);
strTempProcedure := StringReplace(strTempProcedure,'>', '', [rfReplaceAll, rfIgnoreCase]); //去掉这个符号
//strTempProcedure := StringReplace(strTempProcedure,'-', ',', [rfReplaceAll, rfIgnoreCase]);
//Delete(strTempProcedure, '>', 1);
//ShowMessage(strTempProcedure);
// 放到 TStringList
ListProcedure := TStringList.Create;
ListProcedure.Clear;
ListProcedure.Delimiter := '-'; //以 "-" 为分割符号切割字串
//ListProcedure.CommaText:= Trim(memProcedure.Text);
//StringReplace(strTempProcedure,'>','', [rfReplaceAll]);
//ListProcedure.CommaText := strTempProcedure;
ListProcedure.DelimitedText := strTempProcedure;
//已配置该检查的工序列表
strSQL := 'SELECT a.Operation_Code_Next, b.Operation FROM pdfncheckProcedureList a ' +
'INNER JOIN systemdb.dbo.pboperationlist b ON a.Operation_Code_Next=b.Operation_Code ' +
'WHERE a.Operation_Code=''' + Code + ''' ';
adoqryQuery.Close;
adoqryQuery.SQL.Clear;
adoqryQuery.SQL.Add(strSQL);
adoqryQuery.Open;
//要不要提示的标识
bShowOperationHits := false;
strOperationList := '';
//取出工序流程和已配置的工序都存在的工序,并保存在 UndoProcedureList 下
//二者都有的,表示是等会需要检查的工序
UndoProcedureList := TStringList.Create;
while not adoqryQuery.Eof do
begin
for i:=0 to ListProcedure.Count - 1 do
begin
//ShowMessage(ListProcedure[i]);
if adoqryQuery.fieldbyname('Operation').AsString = ListProcedure[i] then
UndoProcedureList.Add(adoqryQuery.fieldbyname('Operation_Code_Next').AsString + '-'+ ListProcedure[i]);
end;
adoqryQuery.Next;
end;
//开始检查配置的工序内容
for i:=0 to UndoProcedureList.Count - 1 do
begin
//看跟踪表的工序有没有进行
strSQL := 'SELECT 1 FROM PdFnJobTrace WHERE Batch_No=''' + Trim(edtBatchNo.Text) + ''' AND Operation_Code=''' +
Copy(UndoProcedureList[i], 1, Pos('-', UndoProcedureList[i])-1) + '''';
qryExistsProcedure.Close;
qryExistsProcedure.SQL.Clear;
qryExistsProcedure.SQL.Add(strSQL);
qryExistsProcedure.Open;
if qryExistsProcedure.Eof or qryExistsProcedure.IsEmpty then
begin
//有多个工序未做时,更改为集中一次性弹出
bShowOperationHits := true;
strOperationList := strOperationList + UndoProcedureList[i] + '、';
// if Application.Messagebox(Pchar('工序【' + adoqryQuery.fieldbyname('Operation').AsString + '】还没进行,你确定要送下一工序【' + StrProcedure+'】吗?'),
// Pchar('提示'),MB_ICONWARNING+MB_YesNo) = IDNo then Exit;
end;
end;
//释放StringList
ListProcedure.Free;
UndoProcedureList.Free;
//提示工序未做
if bShowOperationHits then
begin
//strOperationList := Copy(strOperationList, 1, Length(strOperationList)-1);
Delete(strOperationList, Length(strOperationList), 1);
// strOperationList := '以下工序还没进行:' + #13#10 +
// strOperationList + #13#10 + #13#10 +
// '你确定要继续送下一工序【' + StrProcedure+'】吗?' + #13#10 +
// '提示讯息:'+ #13#10 +
// '--> 输入 "OK" 进行确认!' + #13#10 +
// '--> 输入其它任何信息则取消退出!';
// strConfirmationOK := InputBox('请注意!!!', strOperationList, '');
// if not (UpperCase(strConfirmationOK) = 'OK') then Exit;
//弹出提示框,新增了一个form,方便控制
iRetvalMsg := TfrmCheckProcedureMsgBox.Create(Application).ShowModal;
if iRetvalMsg <> mrOK then Exit;
end;
end;
(* 关键工序控制结束处 *)
(* ------------------------------------------------------------------------------------- *)
转载于:https://blog.51cto.com/kinwar/1604129