180 lines
5.1 KiB
ObjectPascal
180 lines
5.1 KiB
ObjectPascal
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.
|
||
|