ucheck.pas

来自「DELPHI编程入门篇.从基础入手,浅显易懂,一定物有所值.」· PAS 代码 · 共 315 行

PAS
315
字号
unit Ucheck;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Grids, StdCtrls, Buttons, ExtCtrls, DB, ADODB, RpCon,
  RpConDS, RpDefine, RpRave;

type
  Tfrmcheck = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    StringGrid1: TStringGrid;
    Label3: TLabel;
    Edit2: TEdit;
    SpeedButton4: TSpeedButton;
    ADOQuery1: TADOQuery;
    DatePicker: TDateTimePicker;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    ADOQuery2: TADOQuery;
    ADOQuery3: TADOQuery;
    RvProject1: TRvProject;
    checkConnection1: TRvDataSetConnection;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure ComboBox1Select(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure SpeedButton3Click(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure StringGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure CheckBox1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmcheck: Tfrmcheck;
  sqlstr:string;

implementation

uses Udatamodule, Uaddcheck;

{$R *.dfm}

procedure Tfrmcheck.FormCreate(Sender: TObject);
begin
  stringgrid1.Cells[0,0]:='盘点单号';
  stringgrid1.Cells[1,0]:='商品编号';
  stringgrid1.Cells[2,0]:='商品名称';
  stringgrid1.Cells[3,0]:='帐面数量';
  stringgrid1.Cells[4,0]:='实际数量';
  stringgrid1.Cells[5,0]:='盘点差额';
  adoquery1.SQL.Text:='select filname from filiale';
  adoquery1.Open;
  if adoquery1.RecordCount > 0 then
    while not adoquery1.Eof do
    begin
      combobox1.Items.Add(adoquery1.Fields[0].asstring);
      adoquery1.Next;
    end;
  adoquery1.Close;
  combobox1.ItemIndex:=-1;
  datepicker.Date:=date;
end;

procedure Tfrmcheck.SpeedButton1Click(Sender: TObject);
var
  i,arow:integer;
begin
  if ((edit1.Text = '') and (edit2.Text = '') and (not (checkbox1.Checked))) then
  begin
    showmessage('请输入查询条件');
    exit;
  end;
  for i:=1 to stringgrid1.RowCount-1 do
    stringgrid1.Rows[i].Clear;
  stringgrid1.RowCount:=2;
  adoquery1.SQL.Text:='SELECT scheck1.prid, pluinfo.prname, scheck1.tabstock,'+
  'scheck1.realstock,scheck1.checkid FROM ([scheck] INNER JOIN scheck1 ON scheck.checkid ='+
  ' scheck1.checkid) INNER JOIN pluinfo ON scheck1.prid = pluinfo.prid where 1=1';
  if edit1.Text <> '' then
    adoquery1.SQL.Add('and filid = '''+edit1.Text+'''');
  if edit2.Text <> '' then
    adoquery1.SQL.Add('and scheck1.checkid = '''+edit2.Text+'''');
  if checkbox1.Checked then
    adoquery1.SQL.Add('and scheck.checkdate = #'+datetostr(datepicker.Date)+'#');
  adoquery1.SQL.Add('order by scheck1.checkid');
  adoquery1.Open;
  if adoquery1.RecordCount > 0 then
  begin
    arow:=1;
    stringgrid1.RowCount:=adoquery1.RecordCount+1;
    sqlstr:=adoquery1.SQL.Text;
    while not adoquery1.Eof do
    begin
      with stringgrid1 do
      begin
        cells[0,arow]:=adoquery1.FieldValues['checkid'];
        Cells[1,arow]:=adoquery1.Fields[0].AsString;
        Cells[2,arow]:=adoquery1.Fields[1].AsString;
        Cells[3,arow]:=adoquery1.Fields[2].AsString;
        Cells[4,arow]:=adoquery1.Fields[3].AsString;
        Cells[5,arow]:=currtostr(strtocurr(cells[3,arow])-strtocurr(cells[4,arow]));
      end;
      adoquery1.Next;
      inc(arow);
    end;
  end;
  adoquery1.Close;
end;

procedure Tfrmcheck.ComboBox1Select(Sender: TObject);
begin
  adoquery1.SQL.Text:='select filid from filiale where filname = '''+combobox1.Text+'''';
  adoquery1.Open;
  edit1.Text:=adoquery1.Fields[0].AsString;
  adoquery1.Close;
end;

procedure Tfrmcheck.SpeedButton4Click(Sender: TObject);
var
  ayear,amonth,adate:word;
  smonth,sdate,maxid:string;
  i:integer;
begin
  datepicker.Date:=date;
  decodedate(date,ayear,amonth,adate);
  smonth:=inttostr(amonth);sdate:=inttostr(adate);
  if length(smonth) < 2 then smonth:= '0'+smonth;
  if length(sdate) < 2 then sdate:='0'+sdate;
  maxid:=inttostr(ayear)+smonth+sdate;
  adoquery1.Close;
  adoquery1.SQL.Text:='select max(checkid) as maxid from scheck where checkid like '''+maxid+'%''';
  adoquery1.Open;
  if adoquery1.FieldByName('maxid').AsString = '' then
    edit2.Text:=maxid+'0001'
  else
    edit2.Text:=inttostr(strtoint64(adoquery1.Fields[0].AsString)+1);
  adoquery1.Close;
  edit1.Text:='';combobox1.ItemIndex:=-1;
  for i:=1 to stringgrid1.RowCount-1 do
    stringgrid1.Rows[i].Clear;
  stringgrid1.Rowcount:=2;
  speedbutton5.Enabled:=true;
  speedbutton6.Enabled:=true;
  speedbutton3.Enabled:=false;
  speedbutton4.Enabled:=false;
  speedbutton1.Enabled:=false;
  speedbutton2.Enabled:=false;
  combobox1.Enabled:=false;
  Application.CreateForm(Tfrmcheckadd, frmcheckadd);
  frmcheckadd.ShowModal;
  frmcheckadd.Release;
end;

procedure Tfrmcheck.SpeedButton6Click(Sender: TObject);
var
  i:integer;
begin
  speedbutton5.Enabled:=false;
  speedbutton6.Enabled:=false;
  speedbutton3.Enabled:=true;
  speedbutton4.Enabled:=true;
  speedbutton1.Enabled:=true;
  speedbutton2.Enabled:=true;
  combobox1.Enabled:=true;
  for i:=1 to stringgrid1.RowCount-1 do
    stringgrid1.Rows[i].Clear;
  stringgrid1.RowCount:=2;
end;

procedure Tfrmcheck.SpeedButton5Click(Sender: TObject);
var
  i:integer;
begin
  for i:=1 to stringgrid1.RowCount-1 do
    if stringgrid1.Cells[4,i] = '' then
    begin
      showmessage('请输入实际库存数量');
      exit;
    end;
  try
    adoquery1.Connection.BeginTrans;
    adoquery1.SQL.Text:='insert into scheck values("'+edit2.Text+'","'+
    datetostr(date)+'","'+edit1.Text+'")';
    adoquery2.Connection.BeginTrans;
    for i:=1 to stringgrid1.RowCount-1 do
    begin
      adoquery2.SQL.Text:='insert into scheck1 values("'+edit2.Text+'","'+stringgrid1.Cells[1,i]
      +'",'+stringgrid1.Cells[3,i]+','+stringgrid1.Cells[4,i]+')';
      adoquery2.ExecSQL;
      adoquery3.SQL.Text:='update busary set busanum = '''+stringgrid1.Cells[4,i]+
      ''' where filid = '''+edit1.Text+''' and prid = '''+stringgrid1.Cells[1,i]+'''';
      adoquery3.ExecSQL;
    end;
    adoquery2.Connection.CommitTrans;
    adoquery2.Close;
    adoquery1.ExecSQL;
    adoquery1.Connection.CommitTrans;
    adoquery1.Close;
    sqlstr:='select scheck1.prid,pluinfo.prname,scheck1.tabstock,scheck1.realstock'
    +',scheck1.checkid FROM ([scheck] INNER JOIN scheck1 ON scheck.checkid = '
    +'scheck1.checkid) INNER JOIN pluinfo ON scheck1.prid = pluinfo.prid '
    +'where scheck1.checkid = '''+edit2.Text+'''';
    showmessage('保存成功!');
    speedbutton5.Enabled:=false;
    speedbutton6.Enabled:=false;
    speedbutton3.Enabled:=true;
    speedbutton4.Enabled:=true;
    speedbutton1.Enabled:=true;
    speedbutton2.Enabled:=true;
    combobox1.Enabled:=true;
  except
    adoquery2.Connection.RollbackTrans;
    adoquery2.Close;
    adoquery1.Connection.RollbackTrans;
    adoquery1.Close;
  end;
end;

procedure Tfrmcheck.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if not speedbutton3.Enabled then
  begin
    Application.MessageBox('请保存数据以后再退出','操作提示',MB_ICONWARNING+MB_OK);
    canclose:=false;
  end;
end;

procedure Tfrmcheck.SpeedButton3Click(Sender: TObject);
begin
  modalresult:=mrcancel;
end;

procedure Tfrmcheck.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if acol = 4 then
    stringgrid1.Options:=stringgrid1.Options+[goediting]
  else
    stringgrid1.Options:=stringgrid1.Options-[goediting];
end;

procedure Tfrmcheck.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  arow:integer;
begin
  arow:=stringgrid1.Row;
  stringgrid1.Cells[5,arow]:=currtostr(strtocurr(stringgrid1.Cells[4,arow])-strtocurr(stringgrid1.Cells[3,arow]));
end;

procedure Tfrmcheck.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
  srealnum:string;
  acol,i,pnum:integer;
begin
  acol:=stringgrid1.Col;
  if ((not (key in ['0'..'9'])) and (key <> '.') and (key <>#8 ) and (key <>#3)) then
  begin
    showmessage('请输入数字或小数点');
    key:=chr(0);
  end
  else begin
    srealnum:=stringgrid1.Cells[acol,stringgrid1.Row];
    pnum:=0;
    for i:=1 to length(srealnum) do
      if srealnum[i] = '.' then inc(pnum);
    if (((pnum >0) or (srealnum = '')) and (key = '.'))  then
      key:=chr(0);
  end;
end;

procedure Tfrmcheck.CheckBox1Click(Sender: TObject);
begin
  if checkbox1.Checked then
    datepicker.Enabled:=true
  else
    datepicker.Enabled:=false;  
end;

procedure Tfrmcheck.SpeedButton2Click(Sender: TObject);
begin
  if stringgrid1.Cells[0,1]<> '' then
  begin
    adoquery1.SQL.Text:=sqlstr;
    adoquery1.Open;
    rvproject1.Execute;
    rvproject1.Close;
    adoquery1.Close;
  end
  else
    showmessage('请先查询要打印的数据');  
end;

end.

⌨️ 快捷键说明

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