⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invcomm.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
    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 + -