📄 salemanage.~pas
字号:
unit SaleManage;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls,DB,DBTables;
type
TSaleManageFrm = class(TForm)
LblPurchaseID: TLabel;
LblPurchaseDate: TLabel;
LblPurchaser: TLabel;
LblFrmTitle: TLabel;
DBGridBookInfo: TDBGrid;
BtbOK: TButton;
BtnClose: TButton;
EdtPurchaseID: TEdit;
DtpPurchaseDate: TDateTimePicker;
DBNavigator1: TDBNavigator;
CBoxpurhcaser: TComboBox;
LblTatolText: TLabel;
LblTotal: TLabel;
LblNum: TLabel;
procedure BtnCloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBGridBookInfoKeyPress(Sender: TObject; var Key: Char);
procedure BtbOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
TmpTableName:String;
IFTotal:Boolean;
procedure GetBookInfo(StrBID:String); //取得相应的图书信息
procedure GetPurchaserAndCurTime; //取得采购员和当前时间
Function GetPID:String; //自动生成采购单号
{ Private declarations }
public
{ Public declarations }
end;
var
SaleManageFrm: TSaleManageFrm;
implementation
uses DataModuel, Main;
{$R *.dfm}
procedure TSaleManageFrm.BtnCloseClick(Sender: TObject);
begin
MainForm.Saleing_Sub.Enabled:=True;
close;
end;
procedure TSaleManageFrm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DM.SaleManageTable.Close;
DM.SaleManageTable.TableName:='';
Action:=caFree;
end;
procedure TSaleManageFrm.DBGridBookInfoKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
if DBGridBookInfo.SelectedIndex<>DBGridBookInfo.FieldCount-1 then
begin
if DBGridBookInfo.SelectedIndex=0 then
begin
if DBGridBookInfo.Fields[0].IsNull then
begin
MessageDlg('图书编号不能为空',mtinformation,[mbok],0);
exit;
end;
GetBookInfo(DBGridBookInfo.Fields[0].Value);
IFTotal:=True;
key:=#0;
exit;
end;
//**如果在数量一行,并且数量和单价都不为0时,计算金额
if DBGridBookInfo.SelectedIndex=5 then
begin
//***检查库存是不是足够!
with DM.SaleManageQry do
begin
Close;
SQL.Clear;
SQL.Text:='Select BookNum from BookNum where BookID='''+Trim(DBGridBookInfo.Fields[0].Value)+'''';
Open;
if FieldByName('BookNum').AsInteger<DBGridBookInfo.Fields[5].Value then
begin
MessageDlg('库存数量不足!',mtInformation,[mbOk],0);
exit;
end;
Close;
end;
LblNum.Caption:=IntToStr(StrToInt(Trim(LblNum.Caption))+DBGridBookInfo.Fields[5].Value);
if (DBGridBookInfo.Fields[4].Value>0.0) and (DBGridBookInfo.Fields[5].Value<>0) then
begin
DBGridBookInfo.Fields[6].Value:=DBGridBookInfo.Fields[4].Value*DBGridBookInfo.Fields[5].Value;
if IFTotal then
begin
LblTotal.Caption:=FloatToStr(StrToFloat(Trim(LblTotal.Caption))+DBGridBookInfo.Fields[6].Value);
IFTotal:=False;
end;
end;
end;
if DBGridBookInfo.Fields[0].IsNull then
begin
MessageDlg('图书编号不能为空',mtinformation,[mbok],0);
exit;
end;
DBGridBookInfo.SelectedIndex:=DBGridBookInfo.SelectedIndex+1;
end
else
DBGridBookInfo.SelectedIndex:=0;
key:=#0;
exit;
end;
end;
//****查找所输入的图书编号在图书库中是否存在,如存在则显示
procedure TSaleManageFrm.GetBookInfo(StrBID: String);
begin
StrBID:=Trim(StrBID);
With DM.TempQry do
begin
Close;
SQL.Text:='Select * from BookInfo where BookID='''+StrBID+'''';
Open;
if RecordCount<>0 then
begin
DM.SaleManageTable.Edit;
DM.SaleManageTable['BookID1']:=StrBID;
DM.SaleManageTable['BookName1']:=FieldByName('BookName').AsString;
DM.SaleManageTable['Author']:=FieldByName('Author').AsString;
DM.SaleManageTable['Press']:=FieldByName('Press').AsString;
DM.SaleManageTable['Price']:=FieldByName('Price').AsString;
DM.SaleManageTable['SaleQuantity1']:=0;
DM.SaleManageTable['SaleAmount1']:=0.0;
DM.SaleManageTable.Post;
DBGridBookInfo.SelectedIndex:=5;
end
else
begin
MessageDlg('图书库中不存在此书号的图书'+#13+'请先在图书库中新增此书号。',mtInformation,[mbOK],0);
DBGridBookInfo.SelectedIndex:=0;
end;
Close;
end;
end;
procedure TSaleManageFrm.BtbOKClick(Sender: TObject);
var
SID:String; //销售员ID
IsNum:Integer;
begin
if Trim(EdtPurchaseID.Text)='' then
begin
MessageDlg('销售单号不能为空',mtInformation,[mbOK],0);
exit;
EdtPurchaseID.SetFocus;
end;
with DM.PurchaseQry do
begin
close;
SQL.Text:='select SaleID from SalesMaster where SaleID='''+Trim(EdtPurchaseID.Text)+'''';
open;
if DM.PurchaseQry.RecordCount<>0 then
begin
MessageDlg('此销售单已存在,请检查是否有误输入!',mtinformation,[mbOK],0);
exit;
end;
close;
end;
if Trim(CBoxpurhcaser.Text)='' then
begin
MessageDlg('销售员没有选中,请先选中!',mtInformation,[mbOk],0);
CBoxpurhcaser.SetFocus;
exit;
end
else
begin
with DM.PurchaseQry do
begin
close;
SQL.Text:='select SalerID from Saler where SalerName='''+Trim(CBoxpurhcaser.Text)+'''';
Open;
if RecordCount<>0 then
SID:=FieldByName('SalerID').AsString
else
begin
MessageDlg('此销售员不存在,请确认!',mtInformation,[mbOk],0);
exit;
end;
close;
end;
end;
with DM.SaleManageTable do
begin
if Active=False then
Active:=True;
if RecordCount=0 then
begin
Messagedlg('此采购单没有采购的图书信息!'+#13+'请输入图书信息',mtInformation,[mbOK],0);
exit;
end;
end;
try
with DM.PurchaseQry do
begin
Close;
SQL.Clear;
SQL.Text:='Insert into SalesMaster(SaleID,SaleDate,SalerID)';
SQL.Add('Values');
SQL.Add('(:SaleID,:SaleDate,:SalerID)');
Params.ParamByName('SaleID').Value:=Trim(EdtPurchaseID.Text);
Params.ParamByName('SaleDate').Value:=DtpPurchaseDate.Date;
Params.ParamByName('SalerID').Value:=SID;
ExecSQL;
close;
end;
DM.SaleManageTable.First;
while not DM.SaleManageTable.Eof do
begin
with DM.PurchaseQry do
begin
Close;
SQL.Text:='Insert into SalesSub(SaleID,BookID,SaleQuantity,SaleAmount)';
SQL.Add('Values');
SQL.Add('(:SaleID,:BookID,:SaleQuantity,:SaleAmount)');
Params.ParamByName('SaleID').Value:=Trim(EdtPurchaseID.Text);
Params.ParamByName('BookID').Value:=DM.SaleManageTable['BookID1'];
Params.ParamByName('SaleQuantity').Value:=DM.SaleManageTable['SaleQuantity1'];
Params.ParamByName('SaleAmount').Value:=DM.SaleManageTable['SaleAmount1'];
ExecSQL;
close;
end;
IsNum:=0;
with DM.SaleManageQry do
begin
close;
SQL.Text:='Select * from BookNum where BookID='''+DM.SaleManageTable['BookID1']+'''';
Open;
IsNum:=RecordCount;
close;
end;
if IsNum<>0 then
begin
with DM.SaleManageQry do
begin
close;
SQL.Clear;
SQL.Text:='Update BookNum set BookNum=BookNum-:Num';
SQL.Add(' Where BookID=:BID');
Params.ParamByName('Num').Value:=DM.SaleManageTable['SaleQuantity1'];
Params.ParamByName('BID').Value:=DM.SaleManageTable['BookID1'];
ExecSQL;
close;
end;
end;
DM.SaleManageTable.Next;
end;
except
MessageDlg('数据保存出错,请检查是否数据录入是否有误!',mtInformation,[mbOK],0);
exit;
end;
GetPID;
DM.SaleManageTable.Close;
DM.SaleManageTable.EmptyTable;
DM.SaleManageTable.Active:=True;
MessageDlg('出售成功!!',mtInformation,[mbOK],0);
end;
procedure TSaleManageFrm.FormCreate(Sender: TObject);
var
Perent:TDateTime;
Year, Month, Day, Hour, Min, Sec,MSec: Word;
begin
GetPurchaserAndCurTime;
//****使用日期加时间作为数据库表名和采购单号******
TmpTableName:=GetPID;
TmpTableName:=TmpTableName+'.db';
if FileExists('Temp\SaleTemp.db') then
begin
TmpTableName:='SaleTemp.db';
DM.SaleManageTable.TableName:='Temp\'+TmpTableName;
DM.SaleManageTable.EmptyTable;
DM.SaleManageTable.Active:=True;
end
else
begin
//****创建临时数据库表,使其处于插入状态******
DM.SaleManageTable.TableName:='Temp\'+TmpTableName;
DM.SaleManageTable.FieldDefs.Clear;
DM.SaleManageTable.FieldDefs.Add('BookID1',ftString,15,True);
DM.SaleManageTable.FieldDefs.Add('BookName1',ftString,20,False);
DM.SaleManageTable.FieldDefs.Add('Author',ftString,8,False);
DM.SaleManageTable.FieldDefs.Add('Press',ftString,20,False);
DM.SaleManageTable.FieldDefs.Add('Price',ftCurrency,0,False);
DM.SaleManageTable.FieldDefs.Add('SaleQuantity1',ftfloat,0,False);
DM.SaleManageTable.FieldDefs.Add('SaleAmount1',ftCurrency,0,False);
DM.SaleManageTable.CreateTable;
DM.SaleManageTable.Active:=True;
end;
end;
procedure TSaleManageFrm.GetPurchaserAndCurTime;
begin
//****添加销售员
with DM.PurchaseQry do
begin
Close;
SQL.Text:='Select SalerName from Saler';
Open;
While not Eof do
begin
CBoxpurhcaser.Items.Add(FieldByName('SalerName').AsString);
Next;
end;
Close;
end;
//***取得当前日期
DtpPurchaseDate.Date:=Date();
end;
procedure TSaleManageFrm.FormDestroy(Sender: TObject);
begin
SaleManageFrm:=nil;
end;
function TSaleManageFrm.GetPID: String;
var
Perent:TDateTime;
Year, Month, Day, Hour, Min, Sec,MSec: Word;
begin
//****使用日期加时间作为数据库表名和采购单号******
Perent:=Now();
DecodeDate(Perent,Year,Month,Day);
DecodeTime(Perent,Hour,Min,Sec,MSec);
EdtPurchaseID.Text:=IntToStr(Year)+IntToStr(Month)+IntToStr(Day)+IntToStr(Hour)+IntToStr(Min);
Result:=Trim(EdtPurchaseID.Text);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -