SmartFactory_NEOL/SOURCE/Lib/base_20251105_old/ProcessMst.pas
2026-09-04 14:06:10 +09:00

212 lines
6.7 KiB
ObjectPascal
Raw Blame History

unit ProcessMst;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
wItem,
FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,
FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
FireDAC.Phys.PGDef, FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.PG,
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
type
TProcessMst = class(TwItem)
private
{ Private declarations }
FOrdNum: string;
FDescriptions: string;
FManufact: string;
FqDetList: TList;
protected
{ Protected declarations }
public
{ Public declarations }
property qDetList: TList read FqDetList write FqDetList;
constructor Create(AOwner: TObject);// override;
destructor Destroy; override;
class function xAddSqlMark(velStr: string): string;
class function xGetStrSqlProcessToDetailList(AQuery: TFDQuery; manuStr, procStr: string): TList;
class function LoadFromQuery(AQuery: TFDQuery): TList;
published
{ Published declarations }
property OrdNum: string read FOrdNum write FOrdNum;
property Descriptions: string read FDescriptions write FDescriptions;
property Manufact: string read FManufact write FManufact;
end;
implementation
uses
ProcessDetail;
{ TProcessMst }
constructor TProcessMst.Create(AOwner: TObject);
begin
//inherited Create;
// FClassName := 'area';
// FOBID := QuerySet.qCreateGetUniqueString(FClassName);
// FIsValid := '1';
// FCreateDate := FormatDateTime('yyyy-MM-dd',Now);
// FCreateTime := FormatDateTime('HH:mm:ss',Now);
FqDetList := TList.Create;
end;
destructor TProcessMst.Destroy;
var
i, j: Integer;
tmpStrs: TStrings;
tmpList, delList, strList: TList;
tmpObj: TObject;
begin
if FqDetList <> nil then begin
i := 0;
while i < FqDetList.Count do begin
tmpObj := FqDetList.Items[i];
if tmpObj <> nil then tmpObj.Free;
tmpObj := nil;
FqDetList.Delete(i);
end;
FqDetList.Free; FqDetList:=nil;
end;
{
if FqShopGroup <> nil then begin
i := 0;
while FqShopGroup.Count > i do begin
tmpStrs := TStrings(FqShopGroup.Objects[i]);
j := 0;
while tmpStrs.Count > j do begin
tmpList := TList(tmpStrs.Objects[j]);
while tmpList.Count > 0 do begin
tmpList.Delete(0);
end;
tmpList.Free;
Inc(j);
end;
tmpStrs.Free;
Inc(i);
end;
FqShopGroup.Free; FqShopGroup:=nil;
end;
}
inherited;
end;
class function TProcessMst.LoadFromQuery(AQuery: TFDQuery): TList;
var
i, j, k, idx, cnt, nidx: Integer;
claName, valName, fieName, obidStr, obidVal, valClass, valClass1: string;
curProc, tmpProc: TProcessMst;
curDet: TProcessDetail;
begin
Result := TList.Create;
AQuery.First;
nidx := -1;
for i := 0 to AQuery.FieldCount-1 do begin
fieName := AQuery.Fields[i].FieldName;
if Pos('_1',fieName) > 0 then begin
nidx := i;
Break;
end;
end;
AQuery.First;
while not AQuery.Eof do begin
obidVal := AQuery.FieldByName('OBID').AsString;
idx := -1;
for i := 0 to Result.Count - 1 do begin
tmpProc := TProcessMst(Result[i]);
if SameText(obidVal, tmpProc.OBID) then begin
idx := i;
Break;
end;
end;
if idx = -1 then begin
curProc := TProcessMst.Create(nil);
for i := 0 to nidx-1 do begin
fieName := AQuery.Fields[i].FieldName;
valName := AQuery.Fields[i].AsString;
if SameText(fieName, 'OBID') then curProc.OBID := valName
else if SameText(fieName, 'Name') then curProc.Name := valName
else if SameText(fieName, 'wClassName') then curProc.wClassName := valName
else if SameText(fieName, 'CreateDate') then curProc.CreateDate := valName
else if SameText(fieName, 'CreateTime') then curProc.CreateTime := valName
else if SameText(fieName, 'CreatorID') then curProc.CreatorID := valName
else if SameText(fieName, 'IsValid') then curProc.IsValid := valName
else if SameText(fieName, 'LcStatus') then curProc.LcStatus := valName
else if SameText(fieName, 'OrdNum') then curProc.OrdNum := valName
else if SameText(fieName, 'Descriptions') then curProc.Descriptions := valName
else if SameText(fieName, 'Manufact') then curProc.Manufact := valName;
end;
Result.Add(curProc);
end else begin
curProc := TProcessMst(Result.Items[idx]);
end;
curDet := TProcessDetail.Create(nil);
for i := nidx to AQuery.FieldCount-1 do begin
//fieName := AQuery.Fields[i].FieldName;
//fieName := StringReplace(fieName, '_1', '', [rfReplaceAll]);
fieName := StringReplace(AQuery.Fields[i].FieldName, '_1', '', [rfReplaceAll]);
valName := AQuery.Fields[i].AsString;
if SameText(fieName, 'OBID') then curDet.OBID := valName
else if SameText(fieName, 'Name') then curDet.Name := valName
else if SameText(fieName, 'wClassName') then curDet.wClassName := valName
else if SameText(fieName, 'CreateDate') then curDet.CreateDate := valName
else if SameText(fieName, 'CreateTime') then curDet.CreateTime := valName
else if SameText(fieName, 'CreatorID') then curDet.CreatorID := valName
else if SameText(fieName, 'IsValid') then curDet.IsValid := valName
else if SameText(fieName, 'LcStatus') then curDet.LcStatus := valName
else if SameText(fieName, 'OrdNum') then curDet.OrdNum := valName
else if SameText(fieName, 'Descriptions') then curDet.Descriptions := valName
else if SameText(fieName, 'Kind') then curDet.Kind := valName;
end;
curProc.qDetList.Add(curDet);
AQuery.Next;
end;
end;
class function TProcessMst.xAddSqlMark(velStr: string): string;
begin
Result := '';
Result := '''' + velStr + '''';
end;
class function TProcessMst.xGetStrSqlProcessToDetailList(AQuery: TFDQuery;
manuStr, procStr: string): TList;
var
sql: string;
begin
Result := nil;
sql := 'SELECT obj0.*, obj2.* FROM "ProcessMst"obj0, "ProcessMstDetailR"obj1, "ProcessDetail"obj2';
sql := sql + ' WHERE obj0."IsValid"=' + xAddSqlMark('t');
if Length(Trim(manuStr)) > 0 then sql := sql + ' AND obj0."Manufact"=' + xAddSqlMark(manuStr);
if Length(Trim(procStr)) > 0 then sql := sql + ' AND obj0."Name"=' + xAddSqlMark(procStr);
sql := sql + ' AND obj1."IsValid"=' + xAddSqlMark('t');
sql := sql + ' AND obj1."LOBID"=obj0."OBID"';
sql := sql + ' AND obj2."IsValid"=' + xAddSqlMark('t');
sql := sql + ' AND obj2."OBID"=obj1."ROBID"';
try
AQuery.Close;
AQuery.SQL.Text := sql;
AQuery.Open;
except
on E: Exception do ShowMessage('xGetProcessToDetailAllList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
end;
Result := LoadFromQuery(AQuery);
end;
end.