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

173 lines
4.9 KiB
ObjectPascal
Raw Permalink Blame History

unit PurchasePlan;
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
TPurchasePlan = class(TwItem)
private
{ Private declarations }
FOrdNum: string;
FQty: string;
FUnitt: string;
FUnitPrice: string;
FAmount: string;
FOrdDate: string;
protected
{ Protected declarations }
public
{ Public declarations }
class function xGetPurchasePlanLastNumber(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 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;
end;
implementation
{ TPurchasePlan }
class function TPurchasePlan.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 TPurchasePlan.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 TPurchasePlan.xAddSqlMark(velStr: string): string;
begin
Result := '';
Result := '''' + velStr + '''';
end;
class function TPurchasePlan.xGetPurchasePlanLastNumber(AQuery: TFDQuery;
column: string): string;
var
sql: string;
resStrs: TStrings;
begin
Result := '';
sql := 'SELECT COUNT(*) FROM "PurchasePlan"';
try
AQuery.Close;
AQuery.SQL.Text := sql;
AQuery.Open;
except
on E: Exception do ShowMessage('xGetPurchasePlanLastNumber <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;
class function TPurchasePlan.xGetStrsDistinctProductName(
AQuery: TFDQuery): TStrings;
var
sql, column: string;
begin
Result := nil;
sql := 'SELECT DISTINCT "Name" FROM "PurchasePlan"';
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 TPurchasePlan.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 "PurchasePlan"';
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;
end.