该问题来自社区帖: https://bbs.csdn.net/topics/618205801.为符合问答规范, 该问题经过ChatGPT优化
<html><body>
<html><body>
优化后的问题:
产品是有是否计算库存的设置,我现在用的方案是获取当前数据集的产品的总数量
function TFPOrderIn.GetProQty(ProNo: String): Real;
var
FDMemTable1: TFDMemTable;
ProQty: Real;
begin
FDMemTable1 := TFDMemTable.Create(nil);
ProQty := 0;
if DetailData.RecordCount > 0 then
begin
FDMemTable1.Close;
FDMemTable1.Data := DetailData.Data;
FDMemTable1.Open;
FDMemTable1.Filtered := False;
FDMemTable1.Filter := 'ProNO=''' + ProNo + '''';
FDMemTable1.Filtered := True;
FDMemTable1.Open;
FDMemTable1.First;
while not FDMemTable1.Eof do
begin
ProQty := ProQty + FDMemTable1.FieldByName('Qty').AsFloat +
FDMemTable1.FieldByName('ZQty').AsFloat;
FDMemTable1.Next;
end;
end;
Result := ProQty
end;
然后把当前的产品数量传到后台进行库存判断
//UserNo--用户名
//ProNo--产品编号
//WHNO--仓库编号
//TableName--单据类型
//BillNo--单据编号
//BillQty--前端产品数量
function CheckStockQty(UserNo, ProNo: String; WHNO: String; TableName: String;
BillNo: String; BillQty: Real): Boolean;
var
DSRestConnection: TDSRestConnection;
Server: TServerMethods1Client;
DSlIST: TFDJSONDataSets;
FDMemTable: TFDMemTable;
SQL: String;
begin
try
DSRestConnection := ConnectData();
FDMemTable := TFDMemTable.Create(nil);
Server := TServerMethods1Client.Create(DSRestConnection);
SQL := 'select 1 from ProductInfo where ProNO=''' + ProNo + ''' and IsWH=1';
DSlIST := Server.ServerGetTable(SQL, UserNo);
FDMemTable.Close;
FDMemTable.Data := TFDJSONDataSetsReader.GetListValue(DSlIST, 0).Data;
FDMemTable.Open;
//判断是否要计算库存
if FDMemTable.RecordCount = 0 then
begin
Result := True;
end
else
begin
//计算库存(库存数量-单据产品数量)
SQL := 'select a.Qty-isnull(b.qty,0) ReQty from Sys_Stock a left join ' +
'(select ProNo,sum(qty) qty from V_Tran where DNo=''' + BillNo + ''' and DType=''' +
TableName + ''' and ProNO=''' + ProNo + ''' group by ProNo) b on a.ProNo=b.ProNo' + ' where a.ProNO=''' + ProNo + ''' and WHNO=''' +
WHNO + ''';';
DSlIST := Server.ServerGetTable(SQL, UserNo);
FDMemTable.Close;
FDMemTable.Data := TFDJSONDataSetsReader.GetListValue(DSlIST, 0).Data;
FDMemTable.Open;
//库存数量-前端产品数量
//计算库存数量是否足够如果足够返回True,不足返回False
if FDMemTable.FieldByName('ReQty').AsFloat+BillQty>=0 then
Result := True
else
Result := False;
end;
finally
Server.Free;
DSRestConnection.Free;
end;
end;
这样处理的时候,数据多了反应就特别慢,有什么好的办法
</body></html>