📄 paicheon.pas
字号:
unit paicheon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DBGrids, StdCtrls, DBCtrls, Mask, ExtCtrls,
Buttons,paichein_unit,ADODB, DB, DBClient,driverdata_unit,vehicledata_unit;
type
Tpaicheonfrm = class(TForm)
Panel1: TPanel;
Label18: TLabel;
DBGrid1: TDBGrid;
StatusBar1: TStatusBar;
Label20: TLabel;
Label21: TLabel;
Label5: TLabel;
Label9: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn4: TBitBtn;
BitBtn3: TBitBtn;
paiche_ds1: TDataSource;
paiche_cds1: TClientDataSet;
Memo1: TMemo;
Label17: TLabel;
Label13: TLabel;
ComboBox2: TComboBox;
Edit3: TEdit;
Label6: TLabel;
Label1: TLabel;
DateTimePicker1: TDateTimePicker;
Edit1: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label12: TLabel;
Label7: TLabel;
Label2: TLabel;
Label4: TLabel;
Label8: TLabel;
Label11: TLabel;
DateTimePicker2: TDateTimePicker;
ComboBox3: TComboBox;
ComboBox1: TComboBox;
Edit2: TEdit;
Label3: TLabel;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Edit6: TEdit;
Edit7: TEdit;
procedure FormShow(Sender: TObject);
procedure DBComboBox2DropDown(Sender: TObject);
procedure DBComboBox3DropDown(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure DBEdit8Click(Sender: TObject);
procedure DBComboBox2Click(Sender: TObject);
procedure paiche_ds1DataChange(Sender: TObject; Field: TField);
procedure Edit7Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure DBGrid1CellClick(Column: TColumn);
private
ID:string;
ss:real;
datestr:string;
paiche:Tpaichein;
driver:Tdriverdata;
vehicle:Tvehicledata;
sql:string;
{ Private declarations }
public
{ Public declarations }
end;
var
paicheonfrm: Tpaicheonfrm;
implementation
uses loginfrmUnit3;
{$R *.dfm}
procedure Tpaicheonfrm.FormShow(Sender: TObject);
var
reccount:integer;
begin
datestr:=datetostr(date); //当前日期
sql:='select * from WORK_INFO where (TIME_FROM is NULL) or ((TIME_TO is not NULL) AND (NUM_TO is NULL)) order by DATETIME';
reccount:=paiche.Find(sql);
paiche_cds1.Data:=paiche.Sel(sql); //显示当前允许修改的派车记录情况
if reccount<>0 then
StatusBar1.Panels[0].Text := '当前可修改的派车记录有'+ inttostr(reccount) +'条。'
else
StatusBar1.Panels[0].Text :='尚无可修改的派车记录。';
DBGrid1.SetFocus ; //激活显示
end;
procedure Tpaicheonfrm.DBComboBox2DropDown(Sender: TObject);
begin
//load 车辆编号
ComboBox2.Items.clear; //首先清空它的项目
ComboBox2.Items:=driver.GetDriverIDList1() ;
end;
procedure Tpaicheonfrm.DBComboBox3DropDown(Sender: TObject);
begin
//load 司机编号
ComboBox3.Items.Clear ; //首先清空它的项目
ComboBox3.Items:=vehicle.GetVehicleNOList1() ;
end;
procedure Tpaicheonfrm.BitBtn1Click(Sender: TObject);
begin
if (Edit1.Text='')or(Combobox1.Text='') then
begin
showmessage('用车单位、用车性质资料不全!');
exit;
end;
if Application.MessageBox('您确定要保存这条派车记录吗?','确定吗?',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
begin
sql:='update WORK_INFO set '
+'DATETIME='''+datetostr(datetimepicker1.DateTime)+''','
+'USER_COMPANY='''+edit1.Text+''',USER1='''+edit2.Text+''','
+'PURPOSE='''+combobox1.Text+''',PLACE_FROM='''+edit3.Text+''','
+'PLACE_TO='''+edit4.Text+''','
+'DAY_BOOKED='''+datetostr(datetimepicker2.DateTime)+''','
+'VEHICLE_NO='''+combobox1.Text+''',VEHICLE_TYPE='''+edit5.Text+''','
+'DRIVER_ID='''+combobox3.Text+''','
+'TIME_FROM='''+datetostr(datetimepicker3.DateTime)+''','
+'TIME_TO='''+datetostr(datetimepicker4.DateTime)+''','
+'NUM_FROM='''+edit6.Text+''',NUM_TO='''+edit7.Text+''','
+'NUM='''+floattostr(ss)+''',OPERTATOR='''+loginfrm.user+''','
+'REMARK='''+memo1.Text+''' where paiche_id='''+ID+''' ';
paiche.Execu(sql);
paicheonfrm.DoShow; //重新显示当前派车情况
end;
end;
procedure Tpaicheonfrm.BitBtn3Click(Sender: TObject);
begin
//不保存,不退出,重新修改派车单
if Application.MessageBox('您确实要取消修改这条派车记录吗?','确认吗?',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
begin
paicheonfrm.DoShow; //重新显示当前派车情况
end;
end;
procedure Tpaicheonfrm.BitBtn2Click(Sender: TObject);
begin
driver.Free;
vehicle.Free;
paiche.Free;
close;;
end;
procedure Tpaicheonfrm.BitBtn4Click(Sender: TObject);
begin
if Application.MessageBox('您确定要删除这条派车记录吗?','确定吗?',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
begin
sql:='delete from work_info where paiche_id='''+ID+'''';
paiche.Execu(sql);
paicheonfrm.DoShow; //重新显示当前派车情况
end;
end;
procedure Tpaicheonfrm.DBEdit8Click(Sender: TObject);
begin
edit6.Text:=paiche.GetNumTo(combobox2.Text);
end;
procedure Tpaicheonfrm.DBComboBox2Click(Sender: TObject);
var i:integer;
begin
if ComboBox2.Text <> '' then
begin
sql:='select VEHICLE_NO from WORK_INFO where (TIME_FROM is not NULL) AND (TIME_TO is NULL) AND (VEHICLE_NO='+''''+ComboBox2.Text+''')';
i:=paiche.Find(sql);
if i<>0 then //提示该车不在位
begin
if Application.MessageBox('此车外出未归,仍派此车吗?','确认吗?',
MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK then
begin
ComboBox2.Text:='';
edit5.Text:='';
exit;
end;
end;
sql:='select VEHICLE_NO from WORK_INFO where (DATETIME>='+''''+datetostr(date)+''') and (TIME_FROM is NULL) AND (VEHICLE_NO='+''''+ComboBox2.Text+''')';
i:=paiche.Find(sql);
if i<>0 then //提示该车已有安排
begin
if Application.MessageBox('此车已有安排,仍派此车吗?','确认吗?',
MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK then
begin
ComboBox2.Text:='';
edit5.Text:='';
exit;
end;
end;
// 按车辆编号,自动填入车型
edit5.Text:=vehicle.GetVehicleType(combobox2.Text);
end;
end;
procedure Tpaicheonfrm.paiche_ds1DataChange(Sender: TObject;
Field: TField);
begin //根据鼠标所指,修改相应派车记录
datestr:=datetostr(date); //当前日期
ID:=paiche_cds1.FieldByName('paiche_id').asstring ;
if (paiche_cds1.FieldByName('TIME_TO').asstring <> '') and (paiche_cds1.FieldByName('NUM_TO').asstring = '') then
begin //提示“出车已归,应及时填写里程尾数。”
DBGrid1.ShowHint:=False;
DBGrid1.Hint:='出车已归,应及时填写里程尾数。';
DBGrid1.ShowHint:=True;
end
else
begin
if (paiche_cds1.FieldByName('DATETIME').asstring < datestr) and (paiche_cds1.FieldByName('DATETIME').asstring <>'') and (paiche_cds1.FieldByName('TIME_FROM').asstring = '') then
begin //提示“日期已过且未出车,是否修改或删除此派车单?”
DBGrid1.ShowHint:=False;
DBGrid1.Hint:='日期已过且未出车,是否修改或删除此派车单?';
DBGrid1.ShowHint:=True;
end
else
begin
DBGrid1.ShowHint:=False; //正常情况不提示
end;
end;
if (paiche_cds1.FieldByName('TIME_FROM').asstring = '') then
begin //尚未出车,允许改、删派车记录
BitBtn4.Enabled:=True; //允许删除操作
Edit6.Enabled:=False; //不能填尾数
Label20.Enabled:=False;
Edit7.Enabled:=False; //不能填尾数
Label21.Enabled:=False;
Edit1.Enabled:=True; //用车单位
ComboBox1.Enabled:=True; //用车性质
ComboBox2.Enabled:=True; //车辆编号
Edit2.Enabled:=True; //带车人
ComboBox3.Enabled:=True; //司机编号
datetimepicker2.Enabled:=True; //用车日期
Edit5.Enabled:=True; //车型
//load 车辆编号
ComboBox2.Items.clear; //首先清空它的项目
ComboBox2.Items:=driver.GetDriverIDList1() ;
//load 司机编号
ComboBox3.Items.Clear ; //首先清空它的项目
ComboBox3.Items:=vehicle.GetVehicleNOList1() ;
end
else
begin //车已出过,只准补全派车记录
BitBtn4.Enabled:=False; //不允许删除操作
Edit6.Enabled:=True; //能填尾数
Label20.Enabled:=True;
Edit7.Enabled:=True; //能填尾数
Label21.Enabled:=True;
ComboBox2.Enabled:=False; //车辆编号
ComboBox3.Enabled:=False; //司机编号
datetimepicker2.Enabled:=False; //用车日期
Edit5.Enabled:=False; //车型
//下列几项若原派车单已填,则不允许改;若未填,则允许补填
if Edit1.Text='' then Edit1.Enabled:=True
else Edit1.Enabled:=False; //用车单位
if Edit2.Text='' then edit2.Enabled:=True
else Edit2.Enabled:=False; //带车人
if ComboBox1.Text='' then ComboBox1.Enabled:=True
else ComboBox1.Enabled:=False; //用车性质
end;
end;
procedure Tpaicheonfrm.Edit7Exit(Sender: TObject);
var
ccq,hch:real; //用于存放出场前尾数和回场后尾数
begin
if (paiche_cds1.FieldByName('TIME_FROM').asstring<>'')
and (paiche_cds1.FieldByName('TIME_TO').asstring<>'') then
begin
ccq:=strtofloat(paiche_cds1.FieldByName('TIME_FROM').asstring);
hch:=strtofloat(paiche_cds1.FieldByName('TIME_TO').asstring);
if ccq > hch then //出场前尾数不可能大于回场后尾数
begin
showmessage('尾数填写不正确!');
exit;
end;
if hch-100 > ccq then //提示本次出车超过100公里
begin
if Application.MessageBox('出车超过100公里,您确定吗?','确定吗?',
MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK then
begin
exit;
end;
end;
ss:=hch-ccq; //计算行驶里程
end
else //出场前尾数或回场后尾数未填全
begin
showmessage('请填入尾数!');
exit;
end;
end;
procedure Tpaicheonfrm.FormCreate(Sender: TObject);
begin
paiche:=Tpaichein.create;
driver:=Tdriverdata.create;
vehicle:=Tvehicledata.create;
ShortdateFormat:='YYYY-MM-DD'; //确定日期格式
LongDateFormat:='YYYY-MM-DD';
DateSeparator:='-';
end;
procedure Tpaicheonfrm.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in['0'..'9',#8])then
begin
Key :=#0; //清除Key中的字符
Beep;
end;
end;
procedure Tpaicheonfrm.DBGrid1CellClick(Column: TColumn);
begin
ID:= DBGrid1.Fields[0].AsString ;
datetimepicker1.DateTime:=DBGrid1.Fields[1].AsDateTime;
datetimepicker2.DateTime:=DBGrid1.Fields[5].AsDateTime;
datetimepicker3.DateTime:=DBGrid1.Fields[12].AsDateTime;
datetimepicker1.DateTime:=DBGrid1.Fields[13].AsDateTime;
combobox1.Text:=DBGrid1.Fields[4].AsString;
combobox2.Text:=DBGrid1.Fields[9].AsString;
combobox3.Text:=DBGrid1.Fields[11].AsString;
edit2.Text :=DBGrid1.Fields[3].AsString ;
edit3.Text :=DBGrid1.Fields[7].AsString ;
edit4.Text :=DBGrid1.Fields[8].AsString ;
edit5.Text :=DBGrid1.Fields[10].AsString ;
edit6.Text :=DBGrid1.Fields[14].AsString ;
edit7.Text :=DBGrid1.Fields[15].AsString ;
edit1.Text :=DBGrid1.Fields[2].AsString ;
memo1.Text :=DBGrid1.Fields[17].AsString ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -