📄 stock_u.pas
字号:
unit Stock_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, StdCtrls, Buttons, Grids, DBGridEh, Mask, DB,
ADODB, ComCtrls, Menus;
type
TStockfrm = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
BitBtn2: TBitBtn;
BitBtn6: TBitBtn;
OrderNoQuery: TADOQuery;
DetailsQuery: TADOQuery;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
DateTimePicker1: TDateTimePicker;
Edit1: TEdit;
Edit2: TEdit;
DBLookupComboBox2: TDBLookupComboBox;
Label11: TLabel;
StockManDs: TDataSource;
StockManQuery: TADOQuery;
Button1: TButton;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
BitBtn3: TBitBtn;
DetailsQueryDSDesigner: TAutoIncField;
DetailsQueryBillCode: TWideStringField;
DetailsQuerygoodsCode: TWideStringField;
DetailsQuerygoodsName: TWideStringField;
DetailsQuerygoodsType: TWideStringField;
DetailsQuerygoodsUnit: TWideStringField;
DetailsQueryNum: TIntegerField;
DetailsQueryPrice: TIntegerField;
DetailsQueryTMoney: TBCDField;
DetailsQueryDSDesigner2: TWideStringField;
DetailsQueryDSDesigner3: TWideStringField;
DetailsQueryOthers: TWideStringField;
StringGrid1: TStringGrid;
MainQuery: TADOQuery;
PopupMenu1: TPopupMenu;
NewMenu: TMenuItem;
N2: TMenuItem;
DelMenu: TMenuItem;
BitBtn1: TBitBtn;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox3: TDBLookupComboBox;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
ADOQuery3: TADOQuery;
procedure BitBtn6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBLookupComboBox2Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure ClearEdit();
procedure ClearStringGrid();
Function MyOrderNo():integer; //取得单号
Procedure UpdateOrderNo(); //更新单号
procedure NewMenuClick(Sender: TObject);
procedure DelMenuClick(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure DBLookupComboBox3Exit(Sender: TObject);
procedure DBLookupComboBox1Exit(Sender: TObject);
procedure StringGrid1Exit(Sender: TObject);
procedure StringGrid1RowMoved(Sender: TObject; FromIndex,
ToIndex: Integer);
procedure StringGrid1ColumnMoved(Sender: TObject; FromIndex,
ToIndex: Integer);
Procedure CalculateTotalMoney(); //金额=单价 x 数量
Function SumTotalMoney():currency; //合计金额
Function UpdateDataToTable():Boolean;
procedure BitBtn1Click(Sender: TObject); //保存数据
Function IsStorage():BOOLEAN; //入库仓
private
{ Private declarations }
public
{ Public declarations }
end;
var
Stockfrm: TStockfrm;
i :integer;
implementation
uses select_goods, MainFrm_u, stockMain_u;
{$R *.dfm}
procedure TStockfrm.BitBtn6Click(Sender: TObject);
begin
close;
end;
procedure TStockfrm.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
colCount:=11;
Cells[1,0]:='物品编号';
Cells[2,0]:='物品名称';
Cells[3,0]:='规格|型号';
Cells[4,0]:='单位';
Cells[5,0]:='数量';
Cells[6,0]:='单价(RMB元)';
Cells[7,0]:='金额(RMB元)';
Cells[8,0]:='入库仓';
Cells[9,0]:='仓位';
Cells[10,0]:='简单摘要';
end;
ClearEdit();
DateTimePicker1.DateTime :=date;
StockManQuery.Active :=True;
ADOQuery1.Active :=True;
end;
procedure TStockfrm.DBLookupComboBox2Click(Sender: TObject);
begin
if DBLookupComboBox2.Text ='' then
edit2.Text :=''
else
edit2.Text :=DBLookupComboBox2.Text;
end;
procedure TStockfrm.BitBtn2Click(Sender: TObject); //保存数据
begin
//数据合法性检查
if (Edit2.Text ='')and(Edit4.Text ='')and(Edit1.Text ='')and(Edit5.Text ='') then
begin
application.MessageBox('单据录入不完整,请认真填写!','错误',mb_ok+mb_iconExclamation);
exit;
end;
if (edit6.Text ='') or(edit6.Text ='0') then
begin
application.MessageBox('明细表数据为空!','提示',mb_ok+mb_iconExclamation);
exit;
end;
if (edit7.Text ='') or(edit7.Text ='0') then
begin
application.MessageBox('本单金额为零!','提示',mb_ok+mb_iconExclamation);
exit;
end;
if not IsStorage then
begin
application.MessageBox('明细表数据填写不完整,『物品编号』及『入库仓』等为必填项!','提示',mb_ok+mb_iconExclamation);
exit;
end;
//选进行金额、合计金额统计
CalculateTotalMoney();
Edit7.Text:=FloatToStr(SumTotalMoney());
if UpdateDataToTable then
begin
application.MessageBox('数据已成功保存!','确认',mb_ok+mb_IconInformation);
UpdateOrderNo(); //更新单号
frmstockMain.ADOQuery1.Requery;
BitBtn1.Enabled :=True;
BitBtn2.Enabled :=False;
BitBtn3.Enabled :=False;
end
else
application.MessageBox('数据保存时发错误,保存失败!','错误',mb_ok+mb_IconError);
end;
procedure TStockfrm.ClearEdit();
begin
Edit3.Text :=copy('A0000000',1,8-length(INTTOSTR(MyOrderNo)))+IntTOStr(MyOrderNo);
Edit2.Clear ;
Edit1.Clear ;
Edit4.Clear ;
Edit5.Clear ;
Edit6.Text :='0';
Edit7.Text :='0';
Edit8.Text :=Mainfrm.str_uid;
Edit9.Text :='';
end;
procedure TStockfrm.ClearStringGrid();
var
C,R:integer;
begin
for C:=1 to stringGrid1.ColCount do
for R:=1 to StringGrid1.RowCount do
stringGrid1.Cells[C,R]:='';
stringGrid1.RowCount:=2;
I:=1;
end;
Function TStockfrm.IsStorage():BOOLEAN; //“物品编码”、“入库仓”字段是否有没填写
var
I:integer;
begin
for I:=1 to StringGrid1.RowCount -1 do
if (StringGrid1.Cells[1,i]='')or(StringGrid1.Cells[8,i]='') then
begin
result:=False;
break;
end
else
result:=True;
end;
Function TStockfrm.MyOrderNo():integer;
begin
with OrderNoQuery do
begin
close;
sql.Clear ;
sql.Add('select * from orderID where tableName=:a0 and theType=:a1');
parameters[0].Value :='goodsi';
parameters[1].Value :='IA';
open ;
end;
if OrderNoQuery.RecordCount <=0 then
result:=1
else
result:=OrderNoQuery.fieldbyname('IndexID').AsInteger ;
end;
Procedure TStockfrm.UpdateOrderNo();
begin
with OrderNoQuery do
begin
close;
sql.Clear ;
sql.Add('Update orderID set IndexID=IndexID+1 where tableName=:a0 and theType=:a1');
parameters[0].Value :='goodsi';
parameters[1].Value :='IA';
ExecSQL;
end;
end;
procedure TStockfrm.NewMenuClick(Sender: TObject);
var
n:integer;
begin
//增加采购明细项
with stringGrid1 do
begin
n:=RowCount; //行数
if n=2 then
begin
if (Cells[1,n-1]='') then
begin
selectgoodsfrm:=Tselectgoodsfrm.Create(self);
selectgoodsfrm.Edit2.Text :=IntToStr(n);
selectgoodsfrm.ShowModal ;
selectgoodsfrm.Free ;
end
else
begin
stringgrid1.RowCount:=stringgrid1.RowCount+1;
selectgoodsfrm:=Tselectgoodsfrm.Create(self);
selectgoodsfrm.Edit2.Text :=IntToStr(stringGrid1.RowCount);
selectgoodsfrm.ShowModal ;
selectgoodsfrm.Free ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -