SmartFactory_NEOL/SOURCE/Agent,Kiosk/Lib/base/SubOrder.pas
2026-09-04 14:08:41 +09:00

180 lines
5.1 KiB
ObjectPascal
Raw Blame History

unit SubOrder;
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
TSubOrder = class(TwItem)
private
{ Private declarations }
FOrdNum: string;
FOrdCode: string;
FQty: string;
FUnitt: string;
FUnitPrice: string;
FAmount: string;
FOrdDate: string;
FMatKind: string;
FManufact: string;
protected
{ Protected declarations }
public
{ Public declarations }
class function xGetSubOrderLastNumber(AQuery: TFDQuery; column: string): string;
class function LoadFromStringQuery(AQuery: TFDQuery; column: string): TStrings;
class function xGetStrsDistinctProductName(AQuery: TFDQuery): TStrings;
class function xAddSqlMark(velStr: string): string;
class function xGetStrsProdNameBySumQty(AQuery: TFDQuery; prod, stDate, enDate: string): TStrings;
class function LoadFromStringsQuery(AQuery: TFDQuery; columns: TStrings): TStrings;
published
{ Published declarations }
property OrdNum: string read FOrdNum write FOrdNum;
property OrdCode: string read FOrdCode write FOrdCode;
property Qty: string read FQty write FQty;
property Unitt: string read FUnitt write FUnitt;
property UnitPrice: string read FUnitPrice write FUnitPrice;
property Amount: string read FAmount write FAmount;
property OrdDate: string read FOrdDate write FOrdDate;
property MatKind: string read FMatKind write FMatKind;
property Manufact: string read FManufact write FManufact;
end;
implementation
{ TSubOrder }
class function TSubOrder.LoadFromStringQuery(AQuery: TFDQuery;
column: string): TStrings;
var
valStr: string;
begin
Result := TStringList.Create;
while not AQuery.Eof do begin
valStr := AQuery.FieldByName(column).AsString;
Result.Add(valStr);
AQuery.Next;
end;
end;
class function TSubOrder.LoadFromStringsQuery(AQuery: TFDQuery;
columns: TStrings): TStrings;
var
i: Integer;
valStr, sumval: string;
begin
Result := TStringList.Create;
AQuery.First;
while not AQuery.Eof do begin
sumval := '';
for i := 0 to columns.Count-1 do begin
valStr := AQuery.FieldByName(columns.Strings[i]).AsString;
if i = 0 then sumval := valStr
else sumval := sumval + ';' + valStr;
end;
Result.Add(sumval);
AQuery.Next;
end;
end;
class function TSubOrder.xAddSqlMark(velStr: string): string;
begin
Result := '';
Result := '''' + velStr + '''';
end;
class function TSubOrder.xGetStrsDistinctProductName(
AQuery: TFDQuery): TStrings;
var
sql, column: string;
begin
Result := nil;
sql := 'SELECT DISTINCT "Name" FROM "SubOrder"';
sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t');
try
AQuery.Close;
AQuery.SQL.Text := sql;
AQuery.Open;
except
on E: Exception do ShowMessage('xGetStrsDistinctProductName <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
end;
column := 'Name';
Result := LoadFromStringQuery(AQuery, column);
end;
class function TSubOrder.xGetStrsProdNameBySumQty(AQuery: TFDQuery; prod,
stDate, enDate: string): TStrings;
var
sql: string;
columns: TStrings;
begin
sql := 'SELECT "Name" AS prodname,';
sql := sql + ' TO_CHAR(DATE_TRUNC(' + xAddSqlMark('month') + ', "OrdDate"), ' + xAddSqlMark('YYYY-MM') + ') AS mon,';
sql := sql + ' TO_CHAR(DATE_TRUNC(' + xAddSqlMark('month') + ', "OrdDate"), '
+ xAddSqlMark('FMMM') + ') || ' + xAddSqlMark('<27><>') + ' AS montext,';
sql := sql + ' SUM("Amount") AS sumqty';
sql := sql + ' FROM "SubOrder"';
sql := sql + ' WHERE "IsValid" =' + xAddSqlMark('t');
if Length(prod) > 0 then sql := sql + ' AND "Name" =' + xAddSqlMark(prod);
if Length(Trim(stDate)) > 0 then begin
sql := sql + ' AND "OrdDate">=' + xAddSqlMark(stDate);
sql := sql + ' AND "OrdDate"<=' + xAddSqlMark(enDate);
end;
sql := sql + ' GROUP BY "prodname", DATE_TRUNC(' + xAddSqlMark('month') + ', "OrdDate")';
sql := sql + ' ORDER BY "prodname", mon';
try
AQuery.Close;
AQuery.SQL.Text := sql;
AQuery.Open;
except
on E: Exception do ShowMessage('xGetStrsProdNameBySumQty <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
end;
columns := TStringList.Create;
columns.Add('prodname'); columns.Add('mon'); columns.Add('montext'); columns.Add('sumqty');
Result := LoadFromStringsQuery(AQuery, columns);
columns.Free;
end;
class function TSubOrder.xGetSubOrderLastNumber(AQuery: TFDQuery;
column: string): string;
var
sql: string;
resStrs: TStrings;
begin
Result := '';
sql := 'SELECT COUNT(*) FROM "SubOrder"';
try
AQuery.Close;
AQuery.SQL.Text := sql;
AQuery.Open;
except
on E: Exception do ShowMessage('xGetSubOrderLastNumber <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
end;
resStrs := LoadFromStringQuery(AQuery, column);
if resStrs.Count > 0 then begin
Result := resStrs.Strings[0];
end;
resStrs.Free;
end;
end.