unit SaleItemMst; 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 TSaleItemMst = class(TwItem) private { Private declarations } FOrdDate: string; FOrdCode: string; FQty: string; FGoodQty: string; FDefQty: string; FUnitt: string; FDescriptions: string; FReQty: string; FDeliveryQty: string; FStatus: string; FKind: string; FCustName: string; FMatKind: string; FManufact: string; FModel: string; FMatUnitPrice: string; FMatCost: string; protected { Protected declarations } public { Public declarations } class function xGetStrSqlSaleItemMstList(AQuery: TFDQuery; kind, cust, prodName, stDate, enDate: string): TList; class function xAddSqlMark(velStr: string): string; class function LoadFromSingleQuery(AQuery: TFDQuery): TList; class function xGetStrsGroupByColumn(AQuery: TFDQuery; column: string): TStrings; class function xAddSqlDoubleMark(velStr: String): String; class function LoadFromStringsQuery(AQuery: TFDQuery; column: string): TStrings; function xGetBalanceQtyByName(AQuery: TFDQuery; column: string): string; class function xGetObjsLikeMe(AQuery: TFDQuery; name: string): TList; class function xGetObjsLikeMeMatKind(AQuery: TFDQuery; name: string): TList; published { Published declarations } property OrdDate: string read FOrdDate write FOrdDate; property OrdCode: string read FOrdCode write FOrdCode; property Qty: string read FQty write FQty; property GoodQty: string read FGoodQty write FGoodQty; property DefQty: string read FDefQty write FDefQty; property Unitt: string read FUnitt write FUnitt; property Descriptions: string read FDescriptions write FDescriptions; property ReQty: string read FReQty write FReQty; property DeliveryQty: string read FDeliveryQty write FDeliveryQty; property Status: string read FStatus write FStatus; property Kind: string read FKind write FKind; property CustName: string read FCustName write FCustName; property MatKind: string read FMatKind write FMatKind; property Manufact: string read FManufact write FManufact; property Model: string read FModel write FModel; property MatUnitPrice: string read FMatUnitPrice write FMatUnitPrice; property MatCost: string read FMatCost write FMatCost; end; implementation { TSaleItemMst } class function TSaleItemMst.LoadFromSingleQuery(AQuery: TFDQuery): TList; var curSale: TSaleItemMst; begin Result := TList.Create; while not AQuery.Eof do begin curSale := TSaleItemMst.Create(nil); curSale.OBID := AQuery.FieldByName('OBID').AsString; curSale.Name := AQuery.FieldByName('Name').AsString; curSale.wClassName := AQuery.FieldByName('wClassName').AsString; curSale.CreateDate := AQuery.FieldByName('CreateDate').AsString; curSale.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime); curSale.CreatorID := AQuery.FieldByName('CreatorID').AsString; curSale.IsValid := AQuery.FieldByName('IsValid').AsString; curSale.LcStatus := AQuery.FieldByName('LcStatus').AsString; curSale.OrdDate := AQuery.FieldByName('OrdDate').AsString; curSale.OrdCode := AQuery.FieldByName('OrdCode').AsString; curSale.Qty := AQuery.FieldByName('Qty').AsString; curSale.GoodQty := AQuery.FieldByName('GoodQty').AsString; curSale.DefQty := AQuery.FieldByName('DefQty').AsString; curSale.Unitt := AQuery.FieldByName('Unitt').AsString; curSale.Descriptions := AQuery.FieldByName('Descriptions').AsString; curSale.ReQty := AQuery.FieldByName('ReQty').AsString; curSale.DeliveryQty := AQuery.FieldByName('DeliveryQty').AsString; curSale.Status := AQuery.FieldByName('Status').AsString; curSale.Kind := AQuery.FieldByName('Kind').AsString; curSale.CustName := AQuery.FieldByName('CustName').AsString; curSale.MatKind := AQuery.FieldByName('MatKind').AsString; Result.Add(curSale); AQuery.Next; end; end; class function TSaleItemMst.LoadFromStringsQuery(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 TSaleItemMst.xAddSqlDoubleMark(velStr: String): String; begin Result := ''; Result := '"' + velStr + '"'; end; class function TSaleItemMst.xAddSqlMark(velStr: string): string; begin Result := ''; Result := '''' + velStr + ''''; end; function TSaleItemMst.xGetBalanceQtyByName(AQuery: TFDQuery; column: string): string; var sql: string; begin Result := ''; sql := 'SELECT COALESCE(SUM("Qty") FILTER (WHERE "Kind" = ' + xAddSqlMark('ÀÔ°í') + '), 0)'; sql := sql + ' - COALESCE(SUM("Qty") FILTER (WHERE "Kind" = ' + xAddSqlMark('Ãâ°í') + '), 0) AS "Qty"'; sql := sql + ' FROM "SaleItemMst"'; sql := sql + ' WHERE "Name" = ' + xAddSqlMark(Name); try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetBalanceQtyByName Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; while not AQuery.Eof do begin Result := AQuery.FieldByName(column).AsString; AQuery.Next; end; end; class function TSaleItemMst.xGetObjsLikeMe(AQuery: TFDQuery; name: string): TList; var sql: string; tmpList: TList; begin Result := nil; sql := 'SELECT * FROM "SaleItemMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(name)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(name); sql := sql + ' LIMIT 1'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetObjsLikeMe Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromSingleQuery(AQuery); end; class function TSaleItemMst.xGetObjsLikeMeMatKind(AQuery: TFDQuery; name: string): TList; var sql: string; tmpList: TList; begin Result := nil; sql := 'SELECT * FROM "SaleItemMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(name)) > 0 then sql := sql + ' AND "MatKind"=' + xAddSqlMark(name); sql := sql + ' ORDER BY "OrdDate"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetObjsLikeMeMatKind Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromSingleQuery(AQuery); end; class function TSaleItemMst.xGetStrsGroupByColumn(AQuery: TFDQuery; column: string): TStrings; var sql: string; begin Result := nil; sql := 'SELECT DISTINCT ' + xAddSqlDoubleMark(column) + ' FROM "SaleItemMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrsGroupByColumn Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromStringsQuery(AQuery, column); end; class function TSaleItemMst.xGetStrSqlSaleItemMstList(AQuery: TFDQuery; kind, cust, prodName, stDate, enDate: string): TList; var sql: string; begin Result := nil; sql := 'SELECT * FROM "SaleItemMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(kind)) > 0 then sql := sql + ' AND "Kind"=' + xAddSqlMark(kind); if Length(Trim(cust)) > 0 then sql := sql + ' AND "CustName"=' + xAddSqlMark(cust); if Length(Trim(prodName)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(prodName); if Length(Trim(stDate)) > 0 then begin sql := sql + ' AND "OrdDate">=' + xAddSqlMark(stDate); sql := sql + ' AND "OrdDate"<=' + xAddSqlMark(enDate); end; sql := sql + ' ORDER BY "OrdDate"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrSqlSaleItemMstList Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromSingleQuery(AQuery); end; end.