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 + -
显示快捷键?