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

📄 inv600_02.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
unit Inv600_02;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BAS200_13, Mask, wwdbedit, Wwdotdot, Grids, Wwdbigrd, Wwdbgrid,
  DB, ADODB, wwdbdatetimepicker, StdCtrls, ActnList, Menus, ComCtrls,
  ToolWin, Buttons, DBGrids, FR_DSet;

type
  TInv600_02Form = class(TBas200_13Form)
    lblStatus: TLabel;
    lblName: TLabel;
    lblRemark: TLabel;
    lblFromDate: TLabel;
    lblFactFromDate: TLabel;
    lblFactToDate: TLabel;
    memRemark: TMemo;
    edtFactFromDate: TwwDBDateTimePicker;
    edtFromDate: TwwDBDateTimePicker;
    edtFactToDate: TwwDBDateTimePicker;
    edtStatus: TEdit;
    edtName: TEdit;
    dsInv600B: TDataSource;
    adsInv600B: TADODataSet;
    pmInv600B: TPopupMenu;
    mmiAdd: TMenuItem;
    mmiEdit: TMenuItem;
    mmiDel: TMenuItem;
    wwDBGrid1: TwwDBGrid;
    adsInv600BFNo: TIntegerField;
    adsInv600BFLocNo: TIntegerField;
    adsInv600BFLocID: TWideStringField;
    adsInv600BFLocName: TWideStringField;
    adsInv600BFItemNo: TIntegerField;
    adsInv600BFItemID: TWideStringField;
    adsInv600BFItemName: TWideStringField;
    adsInv600BFItemSpec: TWideStringField;
    adsInv600BFUnitID: TWideStringField;
    adsInv600BFUnitName: TWideStringField;
    adsInv600BFQty: TFloatField;
    adsInv600BFIsPrint: TBooleanField;
    adsInv600BFIsFinish: TBooleanField;
    edtItemID: TwwDBComboDlg;
    qryInv100: TADOQuery;
    qryInv501: TADOQuery;
    lblToDate: TLabel;
    edtToDate: TwwDBDateTimePicker;
    lblWhs: TLabel;
    edtWhs: TEdit;
    edtWhsName: TEdit;
    sbWhs: TSpeedButton;
    lblQty: TLabel;
    edtQty: TEdit;
    ADOQuery1I600A_001: TWideStringField;
    ADOQuery1I600A_002: TWideStringField;
    ADOQuery1I600A_003: TSmallintField;
    ADOQuery1I600A_004: TIntegerField;
    ADOQuery1I600A_005: TDateTimeField;
    ADOQuery1I600A_006: TDateTimeField;
    ADOQuery1I600A_007: TDateTimeField;
    ADOQuery1I600A_008: TDateTimeField;
    ADOQuery1I600A_009: TIntegerField;
    ADOQuery1I600A_010: TDateTimeField;
    ADOQuery1I600A_011: TWideStringField;
    ADOQuery1I600A_012: TDateTimeField;
    ADOQuery1I600A_013: TWideStringField;
    ADOQuery1I600A_014: TMemoField;
    ADOQuery1I100_002: TWideStringField;
    ADOQuery1I100_003: TWideStringField;
    qryInv100I100_001: TAutoIncField;
    qryInv100I100_002: TWideStringField;
    qryInv100I100_003: TWideStringField;
    ADODataSet1: TADODataSet;
    qryInv600B: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure edtItemIDCustomDlg(Sender: TObject);
    procedure sbWhsClick(Sender: TObject);
    procedure wwDBGrid1UpdateFooter(Sender: TObject);
    procedure edtWhsExit(Sender: TObject);
    procedure adsInv600BBeforePost(DataSet: TDataSet);
    procedure mmiAddClick(Sender: TObject);
    procedure mmiEditClick(Sender: TObject);
    procedure mmiDelClick(Sender: TObject);
    procedure wwDBGrid1Enter(Sender: TObject);
    procedure wwDBGrid1Exit(Sender: TObject);
    procedure pmInv600BPopup(Sender: TObject);
    procedure ActPrintExecute(Sender: TObject);
  private
    ALastNo:Integer;
    AStatus:array [0..2] of string;
    procedure GetDetailData;
    procedure UpdatePrintData;
    { Private declarations }
  public
    procedure OpenData(ACode:String);
    procedure SetInterface; override;
    procedure GetDataInfo; override;
    procedure InsertEvent; override;
    procedure UpdateEvent; override;
    procedure DeleteEvent; override;
    procedure SetEmptyInit; override;
    procedure TableBeforePost; override;
    procedure TableAfterPost; override;
    procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
    { Public declarations }
  end;

var
  Inv600_02Form: TInv600_02Form;

implementation

uses SYSDATA, CommFun, InvComm, HwSelData, HwSelDataA;

{$R *.dfm}

//更新盘点计划的库存数量
procedure UpdateInvQty;
var
  AWhsNo,ALocNo,AItemNo:String;
  AQuery:TADOQuery;
  AQty:Double;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select * from INV600A, INV600B where I600A_001=I600B_001');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AWhsNo:=AQuery.FieldByName('I600A_004').AsString;
    ALocNo:=AQuery.FieldByName('I600B_004').AsString;
    AItemNo:=AQuery.FieldByName('I600B_003').AsString;
    if ALocNo='' then ALocNo:='0';
    //取得最新库存余额
    AQty:=GetValue('select I501_005 from INV501 where I501_001='+AWhsNo+' and I501_002='+ALocNo+' and I501_003='+AItemNo);
    AQuery.Edit;
    AQuery.FieldByName('I600B_005').Value:=AQty;
    AQuery.Post;
    AQuery.Next;
  end;
  AQuery.Close;
  AQuery.Free;
end;

//更新盘点计划的状态及实际开始日期
procedure TInv600_02Form.UpdatePrintData;
begin
  //设置盘点计划明细表的已打印字段=True
  ExecSQL('update INV600B set I600B_006='+GetBoolean(True)+' where I600B_001='+''''+edtCode.text+'''');
  //设置盘点计划状态为“执行”状态,实际开始日期=当前打印日期
  ExecSQL('update INV600A set I600A_003=1,I600A_007='+GetDateString(GetServerDate)+' where I600A_001='+''''+edtCode.text+'''');
end;

procedure TInv600_02Form.SetInterface;
begin
  inherited;
  Caption:=GetDBString('INV60002001');  //盘点计划维护
  ADOQuery1I600A_001.DisplayLabel:=GetDBString('INV60002002');  //盘点单号
  ADOQuery1I600A_002.DisplayLabel:=GetDBString('INV60002003');  //盘点名称
  ADOQuery1I600A_003.DisplayLabel:=GetDBString('INV60002004');  //盘点状态
  ADOQuery1I100_002.DisplayLabel:=GetDBString('INV60002005');  //仓库编号
  ADOQuery1I100_003.DisplayLabel:=GetDBString('INV60002006');  //仓库名称
  ADOQuery1I600A_005.DisplayLabel:=GetDBString('INV60002007');  //预计开始
  ADOQuery1I600A_006.DisplayLabel:=GetDBString('INV60002008');  //预计完成
  ADOQuery1I600A_007.DisplayLabel:=GetDBString('INV60002009');  //实际开始
  ADOQuery1I600A_008.DisplayLabel:=GetDBString('INV60002010');  //实际完成
  ADOQuery1I600A_009.DisplayLabel:=GetDBString('INV60002011');  //项目数量
  ADOQuery1I600A_010.DisplayLabel:=GetDBString('INV60002012');  //制单日期
  ADOQuery1I600A_011.DisplayLabel:=GetDBString('INV60002013');  //制单人员
  ADOQuery1I600A_012.DisplayLabel:=GetDBString('INV60002014');  //修改日期
  ADOQuery1I600A_013.DisplayLabel:=GetDBString('INV60002015');  //修改人员
  ADOQuery1I600A_014.DisplayLabel:=GetDBString('INV60002016');  //备注说明
  AStatus[0]:=GetDBString('INV60002017');  //计划
  AStatus[1]:=GetDBString('INV60002018');  //执行
  AStatus[2]:=GetDBString('INV60002019');  //完成
  adsInv600B.FieldByName('FItemID').DisplayLabel:=GetDBString('INV60002020');  //料品编号
  adsInv600B.FieldByName('FItemName').DisplayLabel:=GetDBString('INV60002021');  //料品名称
  adsInv600B.FieldByName('FItemSpec').DisplayLabel:=GetDBString('INV60002022');  //规格型号
  adsInv600B.FieldByName('FUnitID').DisplayLabel:=GetDBString('INV60002023');  //单位编号
  adsInv600B.FieldByName('FUnitName').DisplayLabel:=GetDBString('INV60002024');  //单位名称
  adsInv600B.FieldByName('FLocID').DisplayLabel:=GetDBString('INV60002025');  //库位编号
  adsInv600B.FieldByName('FLocName').DisplayLabel:=GetDBString('INV60002026');  //库位名称
  adsInv600B.FieldByName('FQty').DisplayLabel:=GetDBString('INV60002027');  //库存数量
  adsInv600B.FieldByName('FIsPrint').DisplayLabel:=GetDBString('INV60002028');  //已打印否
  adsInv600B.FieldByName('FIsFinish').DisplayLabel:=GetDBString('INV60002029');  //已完成否
  lblCode.Caption:=GetDBString('INV60002030');  //盘点单号
  lblName.Caption:=GetDBString('INV60002031');  //盘点名称
  lblStatus.Caption:=GetDBString('INV60002032');  //盘点状态
  lblWhs.Caption:=GetDBString('INV60002033');  //仓库编号
  lblQty.Caption:=GetDBString('INV60002034');  //项目数量
  lblFromDate.Caption:=GetDBString('INV60002035');  //预计开始
  lblToDate.Caption:=GetDBString('INV60002036');  //预计完成
  lblFactFromDate.Caption:=GetDBString('INV60002037');  //实际开始
  lblFactToDate.Caption:=GetDBString('INV60002038');  //实际完成
  lblRemark.Caption:=GetDBString('INV60002039');  //备注说明
end;

procedure TInv600_02Form.FormCreate(Sender: TObject);      
begin
  inherited;
  ATableName:='INV600A';
  AFieldName:='I600A_001';
  qryInv100.Open;
  qryInv501.Open;
end;

procedure TInv600_02Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  qryInv100.Close;
  qryInv501.Close;
end;

procedure TInv600_02Form.OpenData(ACode: String);
begin
  inherited;
  if ACode='' then AMode:='ADD' else AMode:='UPD';
  ADOQuery1.DisableControls;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from INV600A,INV100 where I600A_004=I100_001 order by I600A_001');
  ADOQuery1.Open;
  ADOQuery1.Locate('I600A_001',ACode,[]);
  ADOQuery1.EnableControls;
  ADOQuery1AfterScroll(ADOQuery1);
end;

//从数据表中取得界面信息
procedure TInv600_02Form.GetDataInfo;
begin
  //显示数据信息
  edtCode.Text         :=ADOQuery1.FieldByName('I600A_001').AsString;  //盘点单号
  edtName.Text         :=ADOQuery1.FieldByName('I600A_002').AsString;  //盘点名称
  edtStatus.Text       :=AStatus[ADOQuery1.FieldByName('I600A_003').AsInteger];  //盘点状态
  edtWhs.Text          :=ADOQuery1.FieldByName('I100_002').AsString;  //预计开始
  edtWhsName.Text      :=ADOQuery1.FieldByName('I100_003').AsString;  //预计开始
  edtFromDate.Date     :=ADOQuery1.FieldByName('I600A_005').Value;  //预计开始
  edtToDate.Date       :=ADOQuery1.FieldByName('I600A_006').Value;  //预计完成
  if ADOQuery1.FieldByName('I600A_007').AsString<>'' then edtFactFromDate.Date :=ADOQuery1.FieldByName('I600A_007').Value;  //实际开始
  if ADOQuery1.FieldByName('I600A_008').AsString<>'' then edtFactToDate.Date   :=ADOQuery1.FieldByName('I600A_008').Value;  //实际完成
  edtQty.Text          :=ADOQuery1.FieldByName('I600A_009').AsString;  //项目数量
  edtCreateDate.Text   :=ADOQuery1.FieldByName('I600A_010').AsString;  //制单日期
  edtCreateBy.Text     :=ADOQuery1.FieldByName('I600A_011').AsString;  //制单人员
  edtUpdateDate.Text   :=ADOQuery1.FieldByName('I600A_012').AsString;  //修改日期
  edtUpdateBy.Text     :=ADOQuery1.FieldByName('I600A_013').AsString;  //修改人员
  memRemark.Text       :=ADOQuery1.FieldByName('I600A_014').AsString;  //备注说明
  //取得明细表数据
  GetDetailData;
end;

procedure TInv600_02Form.TableBeforePost;
var
  ADate:TDateTime;
begin
  inherited;
  if trim(edtName.Text)='' then
  begin
    ShowMsg('UMS10000438');  //盘点名称不能为空
    edtName.SetFocus;
    Abort;
  end;
  if trim(edtWhs.Text)='' then
  begin
    ShowMsg('UMS10000439');  //仓库编号不能为空
    edtWhs.SetFocus;
    Abort;
  end;
  if not qryInv100.Locate('I100_002',edtWhs.Text,[]) then
  begin
    ShowMsg('UMS10000440');  //无效的仓库编号,请重新输入
    edtWhs.SetFocus;
    Abort;
  end;
  if trim(edtFromDate.Text)='' then
  begin
    ShowMsg('UMS10000441');  //预计开始日期不能为空
    edtFromDate.SetFocus;
    Abort;
  end;
  if trim(edtToDate.Text)='' then
  begin
    ShowMsg('UMS10000442');  //预计完成日期不能为空
    edtToDate.SetFocus;
    Abort;
  end;
  if edtToDate.Date>edtToDate.Date then
  begin
    ShowMsg('UMS10000443');  //预计开始日期不能大于完成日期
    edtToDate.SetFocus;
    Abort;
  end;
  if adsInv600B.IsEmpty then
  begin
    ShowMsg('UMS10000444');  //盘点项目数量不能为空
    wwDBGrid1.SetFocus;
    Abort;
  end;

  qryInv600B.Close;
  qryInv600B.SQL.Clear;
  qryInv600B.SQL.Add('delete from INV600B where I600B_001='+''''+edtCode.Text+'''');
  qryInv600B.ExecSQL;
  if AMode='ADD' then
  begin
    ADOQuery1.Insert;
    ADOQuery1.FieldByName('I600A_003').Value:=0;  //
    ADOQuery1.FieldByName('I600A_010').AsString:=edtCreateDate.Text;  //制单日期
    ADOQuery1.FieldByName('I600A_011').AsString:=edtCreateBy.Text;  //制单人员
    ADOQuery1.FieldByName('I600A_012').AsString:=edtUpdateDate.Text;  //修改日期
    ADOQuery1.FieldByName('I600A_013').AsString:=edtUpdateBy.Text;  //修改人员
  end else
  begin
    ADate:=GetServerDate;
    ADOQuery1.Edit;
    ADOQuery1.FieldByName('I600A_012').Value:=ADate;  //修改日期
    ADOQuery1.FieldByName('I600A_013').Value:=AUserName;  //修改人员
  end;
  ADOQuery1.FieldByName('I600A_002').Value:=edtName.Text;  //
  ADOQuery1.FieldByName('I600A_004').Value:=qryInv100.FieldByName('I100_001').Value;  //
  ADOQuery1.FieldByName('I600A_005').Value:=edtFromDate.Date;  //
  ADOQuery1.FieldByName('I600A_006').Value:=edtToDate.Date;  //
  ADOQuery1.FieldByName('I600A_009').Value:=StrToInt(edtQty.Text);  //
  ADOQuery1.FieldByName('I600A_014').Value:=memRemark.Text;  //
end;

procedure TInv600_02Form.TableAfterPost;
begin
  inherited;
  qryInv600B.Close;
  qryInv600B.SQL.Clear;
  qryInv600B.SQL.Add('select * from INV600B where I600B_001='+''''+edtCode.Text+'''');
  qryInv600B.Open;
  adsInv600B.First;
  while not adsInv600B.Eof do
  begin
    qryInv600B.Append;
    qryInv600B.FieldByName('I600B_001').Value:=edtCode.Text;
    qryInv600B.FieldByName('I600B_002').Value:=adsInv600B.FieldByName('FNo').Value;
    qryInv600B.FieldByName('I600B_003').Value:=adsInv600B.FieldByName('FItemNo').Value;
    if adsInv600B.FieldByName('FLocNo').Value<>0 then
      qryInv600B.FieldByName('I600B_004').Value:=adsInv600B.FieldByName('FLocNo').Value;
    qryInv600B.FieldByName('I600B_005').Value:=adsInv600B.FieldByName('FQty').Value;
    qryInv600B.FieldByName('I600B_006').Value:=adsInv600B.FieldByName('FIsPrint').Value;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -