📄 invcomm.pas.svn-base
字号:
ADataSet.FieldByName('FItemSpec').Value:=ADOQuery.FieldByName('I150_004').AsString;
ADataSet.FieldByName('FUnitName').Value:=ADOQuery.FieldByName('I140_003').AsString;
ABanlance:=0;
APrice:=0;
AAmount:=0;
GetItemOpenValue(AWhsNo,ALocNo,AItemNo,AFromDate,ABanlance,APrice,AAmount); //期初数量
ADataSet.FieldByName('FQty1').AsFloat:=ADataSet.FieldByName('FQty1').AsFloat+ABanlance;
ADataSet.Post;
ADOQuery.Next;
end;
ADOQuery.Close;
ADOQuery.Free;
end;
//入仓&出仓数量
procedure GetInOutData(ADataSet:TADODataSet;AWhsNo,ALocNo:Integer;AFromDate,AToDate:TDateTime);
var
ADOQuery:TADOQuery;
begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:=SYSDM.ADOC;
ADOQuery.CacheSize:=1000;
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('select I500_009,I150_002,I150_003,I150_004,I500_004,I140_003,sum(I500_011) as FQty');
ADOQuery.SQL.Add('from INV500,INV150,INV140');
ADOQuery.SQL.Add('where I500_009=I150_001 and I500_010=I140_001 and I500_004<>0 and I500_005>='+GetDateString(AFromDate)+' and I500_005<='+GetDateString(AToDate));
if AWhsNo<>0 then ADOQuery.SQL.Add(' and I500_007='+IntToStr(AWhsNo)); //仓库
if ALocNo<>0 then ADOQuery.SQL.Add(' and I500_008='+IntToStr(ALocNo)); //库位
ADOQuery.SQL.Add('group by I500_009,I150_002,I150_003,I150_004,I500_004,I140_003,I500_004');
ADOQuery.SQL.Add('order by I150_002,I500_004');
ADOQuery.Open;
while not ADOQuery.Eof do
begin
if ADataSet.Locate('FItemNo',ADOQuery.FieldByName('I500_009').Value,[]) then ADataSet.Edit else ADataSet.Append;
ADataSet.FieldByName('FItemNo').Value:=ADOQuery.FieldByName('I500_009').Value;
ADataSet.FieldByName('FItemID').Value:=ADOQuery.FieldByName('I150_002').Value;
ADataSet.FieldByName('FItemName').Value:=ADOQuery.FieldByName('I150_003').Value;
ADataSet.FieldByName('FItemSpec').Value:=ADOQuery.FieldByName('I150_004').Value;
ADataSet.FieldByName('FUnitName').Value:=ADOQuery.FieldByName('I140_003').Value;
case ADOQuery.FieldByName('I500_004').AsInteger of
1,3:ADataSet.FieldByName('FQty2').AsFloat:=ADataSet.FieldByName('FQty2').AsFloat+ADOQuery.FieldByName('FQty').AsFloat; //入仓数量
2:ADataSet.FieldByName('FQty3').AsFloat:=ADataSet.FieldByName('FQty3').AsFloat+ADOQuery.FieldByName('FQty').AsFloat; //出仓数量
end;
ADataSet.Post;
ADOQuery.Next;
end;
ADOQuery.Close;
ADOQuery.Free;
end;
//取得所有仓库和库位列表
procedure GetAllWhs(AcbWhs:TComboBox);
begin
AcbWhs.Clear;
AcbWhs.Items.Add(GetDBString('INVW0001033')); //所有仓库
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
//取得所要的数据
if ASuper then
begin
SYSDM.qryQuery.SQL.Add('select I100_001 as FNo,''[''+I100_002+'']''+I100_003 as FName,0 as FParent,I100_002 as FCode from INV100 ');
SYSDM.qryQuery.SQL.Add('order by I100_002');
end else
begin
SYSDM.qryQuery.SQL.Add('select I100_001 as FNo,''[''+I100_002+'']''+I100_003 as FName,0 as FParent,I100_002 as FCode from SYS500C,INV100 ');
SYSDM.qryQuery.SQL.Add('where S500C_002=I100_001*-1 and ');
SYSDM.qryQuery.SQL.Add(' S500C_003=''WHS'' and S500C_004='+GetBoolean(True));
SYSDM.qryQuery.SQL.Add(' and S500C_001='+IntToStr(AUserID));
SYSDM.qryQuery.SQL.Add('order by I100_002');
end;
SYSDM.qryQuery.Open;
while not SYSDM.qryQuery.Eof do
begin
AcbWhs.Items.Add(SYSDM.qryQuery.FieldByName('FName').AsString);
SYSDM.qryQuery.Next;
end;
AcbWhs.ItemIndex:=0;
end;
//取得所有仓库和库位列表
procedure GetAllWhs(ADataSet:TADODataSet;AcbClass:TComboBox);
begin
ADataSet.Close;
ADataSet.LockType:=ltBatchOptimistic;
ADataSet.FieldDefs.Clear;
ADataSet.FieldDefs.Add('FNo',ftInteger,0);
ADataSet.FieldDefs.Add('FName',ftString,100);
ADataSet.FieldDefs.Add('FParent',ftInteger,0);
ADataSet.CreateDataSet;
ADataSet.DisableControls;
//建立root
ADataSet.Append;
ADataSet.FieldByName('FNo').Value:=0;
ADataSet.FieldByName('FName').Value:=GetDBString('INVW0001033'); //所有仓库
ADataSet.FieldByName('FParent').Value:=0;
ADataSet.Post;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
//取得所要的数据
if ASuper then
begin
SYSDM.qryQuery.SQL.Add('select I100_001*-1 as FNo,''[''+I100_002+'']''+I100_003 as FName,0 as FParent,I100_002 as FSeq from INV100 ');
SYSDM.qryQuery.SQL.Add('union ');
SYSDM.qryQuery.SQL.Add('select I110_001 as FNo,''[''+I110_003+'']''+I110_004 as FName,I110_002*-1 as FParent,I110_003 as FSeq from INV110 ');
SYSDM.qryQuery.SQL.Add('order by FSeq');
end else
begin
SYSDM.qryQuery.SQL.Add('select I100_001*-1 as FNo,''[''+I100_002+'']''+I100_003 as FName,0 as FParent,I100_002 as FSeq from SYS500C,INV100 ');
SYSDM.qryQuery.SQL.Add('where S500C_002=I100_001*-1 and ');
SYSDM.qryQuery.SQL.Add(' S500C_003=''WHS'' and S500C_004='+GetBoolean(True));
SYSDM.qryQuery.SQL.Add(' and S500C_001='+IntToStr(AUserID));
SYSDM.qryQuery.SQL.Add('union ');
SYSDM.qryQuery.SQL.Add('select I110_001 as FNo,''[''+I110_003+'']''+I110_004 as FName,I110_002*-1 as FParent,I110_003 as FSeq from SYS500C,INV110 ');
SYSDM.qryQuery.SQL.Add('where S500C_002=I110_001 and ');
SYSDM.qryQuery.SQL.Add(' S500C_003=''WHS'' and S500C_004='+GetBoolean(True));
SYSDM.qryQuery.SQL.Add(' and S500C_001='+IntToStr(AUserID));
SYSDM.qryQuery.SQL.Add('order by FSeq');
end;
SYSDM.qryQuery.Open;
while not SYSDM.qryQuery.Eof do
begin
ADataSet.Append;
ADataSet.FieldByName('FNo').Value:=SYSDM.qryQuery.FieldByName('FNo').Value;
ADataSet.FieldByName('FName').Value:=SYSDM.qryQuery.FieldByName('FName').Value;
ADataSet.FieldByName('FParent').Value:=SYSDM.qryQuery.FieldByName('FParent').Value;
SYSDM.qryQuery.Next;
end;
ADataSet.First;
AcbClass.Clear;
while not ADataSet.Eof do
begin
AcbClass.Items.Add(ADataSet.FieldByName('FName').AsString);
ADataSet.Next;
end;
ADataSet.First;
AcbClass.ItemIndex:=0;
ADataSet.EnableControls;
end;
//取得最后的盘点日期
function GetLastCountDate(AItemNo:Integer):TDateTime;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select max(I610A_004) from INV610A,INV610B,INV600B where I610A_001=I610B_001 and I610A_002=I600B_001 and I610B_002=I600B_002 and I600B_003='+IntToStr(AItemNo));
SYSDM.qryQuery.Open;
Result:=SYSDM.qryQuery.Fields[0].AsDateTime;
end;
//反写料品资料表中的盘点日期字段 INV150.I150_038=INV610A.I610A_004
//AType:类型, INV600,INV610
//ACode:单号, 盘点计划单号,盘点汇报单号
procedure UpdateLastDate(AType,ACode:String);
var
AItemNo:Integer;
AQuery:TADOQuery;
ADate:TDateTime;
begin
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
AQuery.Close;
AQuery.SQL.Clear;
if AType='INV600' then //盘点计划单号
begin
AQuery.SQL.Add('select I150_001,I150_038 from INV150');
AQuery.SQL.Add('where exists(select 1 from INV600A,INV600B');
AQuery.SQL.Add('where I600A_001=I600B_001 and I600B_003=I150_001 and I600A_001='+''''+ACode+''''+')');
end else
if AType='INV610' then //盘点汇报单号
begin
AQuery.SQL.Add('select I150_001,I150_038 from INV150');
AQuery.SQL.Add('where exists(select 1 from INV610B,INV610A,INV600B');
AQuery.SQL.Add(' where I610B_001=I610A_001 and I610A_002=I600B_001 and I610B_002=I600B_002 and');
AQuery.SQL.Add(' I600B_003=I150_001 and I610A_001='+''''+ACode+''''+')');
end;
AQuery.Open;
while not AQuery.Eof do
begin
AItemNo:=AQuery.FieldByName('I150_001').Value;
ADate:=GetLastCountDate(AItemNo);
AQuery.Edit;
if ADate<>0 then AQuery.FieldByName('I150_038').Value:=ADate else AQuery.FieldByName('I150_038').Value:=null;
AQuery.Post;
AQuery.Next;
end;
AQuery.Close;
AQuery.Free;
end;
//判断库存是否足够出库 足够:True 不足:False
//ACustNo:供应商的电脑编号 如果是其他单据则为-1
function CheckQty(ACustNo,AWhsNo,ALocNo,AItemNo,AUnitNo,AType:Integer;ANum:double;AOrderNo:string):Boolean;
var
FqryInv500:TAdoQuery;
strSQL:string;
AOldNum:double;
AQty,APrice,AAmount:Double;
begin
Result:=True;
//取得单据旧有数据
FqryInv500:=TAdoQuery.Create(nil);
FqryInv500.Connection:=SYSDM.ADOC;
strSQL:='select * from INV500 where I500_001='+''''+AOrderNO+''''+' and I500_007='+inttostr(AWhsNo)+' and I500_008='+inttostr(ALocNO)+' and I500_009='+inttostr(AItemNo);
FqryInv500.SQL.Add(strSQL);
FqryInv500.Open;
AOldNum:=0;
if not FqryInv500.IsEmpty then AOldNum:=FqryInv500.FieldByName('I500_011').AsFloat;
//以库存单位为料品的进出单位,计算料品的进出数量
ANum:=ANum*GetUnitRate(ACustNo,AItemNo,AUnitNo);
if (AType=2) or (AType=4) then
begin
GetItemQPA(AWhsNo,ALocNo,AItemNo,AQty,APrice,AAmount);
if ANum>AQty+AOldNum then
Result:=False
else
Result:=True;
end;
FqryInv500.Close;
FqryInv500.Free;
end;
//查看料品是否已经设置了期初建账
function IsItemIni(AWhsNo,ALocNo,AItemNo:Integer):Boolean;
var
FQryInv500:TAdoQuery;
AInOutType:Integer;
begin
FQryInv500:=TAdoQuery.Create(nil);
FQryInv500.Connection:=SYSDM.ADOC;
FQryInv500.Close;
FQryInv500.SQL.Clear;
FQryInv500.SQL.Add('select I500_004 from INV500');
FQryInv500.SQL.Add('where I500_007='+IntToStr(AWhsNo)+' and I500_008='+IntToStr(ALocNo)+' and I500_009='+IntToStr(AItemNo));
FQryInv500.Open;
AInOutType:=FQryInv500.FieldByName('I500_004').AsInteger;
if (not FQryInv500.IsEmpty) and (AInOutType=0) then
Result:=True
else
Result:=False;
FQryInv500.Close;
FQryInv500.Free;
end;
//设置了期初建账的料品是否已经被其他单据使用
function IsItemUsed(AwhsNo,AlocNo,AItemNo:Integer):Boolean;
var
FQryInv500:TAdoQuery;
begin
FQryInv500:=TAdoQuery.Create(nil);
FQryInv500.Connection:=SYSDM.ADOC;
FQryInv500.Close;
FQryInv500.SQL.Clear;
FQryInv500.SQL.Add('select 1 from INV500');
FQryInv500.SQL.Add(' where I500_007='+Inttostr(AwhsNo)+' and I500_008='+IntToStr(AlocNo)+' and I500_009='+IntToStr(AItemNo)+' and I500_004<>0');
FQryInv500.Open;
if not FQryInv500.IsEmpty then
Result:=True
else
Result:=False;
FQryInv500.Close;
FQryInv500.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -