?? unit_input_xsth.~pas
字號:
unit Unit_input_xsth;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit_jc_child, Grids, DBGrids, ExtCtrls, StdCtrls, Mask, DBCtrls,
ToolEdit, RXDBCtrl, Buttons, DB, ADODB, RM_dset, RM_dbset, RM_class;
type
Tform_input_xsth = class(TForm_jc_child)
Panel1: TPanel;
DBGrid1: TDBGrid;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBDateEdit1: TDBDateEdit;
Label3: TLabel;
Edit_gys: TEdit;
SpeedButton1: TSpeedButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
DBComboBox3: TDBComboBox;
Label7: TLabel;
DBEdit2: TDBEdit;
Label8: TLabel;
DBEdit3: TDBEdit;
Label9: TLabel;
DBEdit4: TDBEdit;
Panel2: TPanel;
BitBtn_new_dj: TBitBtn;
BitBtn_save: TBitBtn;
BitBtn_delete_dj: TBitBtn;
BitBtn_new_sp: TBitBtn;
BitBtn_delete_sp: TBitBtn;
BitBtn_print: TBitBtn;
BitBtn_quit: TBitBtn;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
ADOQuery2: TADOQuery;
ADOQuery3: TADOQuery;
BitBtn_prior: TBitBtn;
BitBtn_next: TBitBtn;
BitBtn_end: TBitBtn;
Panel3: TPanel;
Label11: TLabel;
Edit_dh: TEdit;
BitBtn_find: TBitBtn;
RMReport1: TRMReport;
RMDBDataSet1: TRMDBDataSet;
procedure BitBtn_quitClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ADOQuery1AfterClose(DataSet: TDataSet);
procedure BitBtn_priorClick(Sender: TObject);
procedure BitBtn_nextClick(Sender: TObject);
procedure BitBtn_new_djClick(Sender: TObject);
procedure BitBtn_saveClick(Sender: TObject);
procedure ADOQuery1AfterInsert(DataSet: TDataSet);
procedure ADOQuery2AfterInsert(DataSet: TDataSet);
procedure BitBtn_delete_djClick(Sender: TObject);
procedure BitBtn_new_spClick(Sender: TObject);
procedure BitBtn_delete_spClick(Sender: TObject);
procedure BitBtn_endClick(Sender: TObject);
procedure Edit_dhKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn_findClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ADOQuery1AfterScroll(DataSet: TDataSet);
procedure DBDateEdit1Change(Sender: TObject);
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn_printClick(Sender: TObject);
private
{ Private declarations }
sqlstr,sqlstr2 : string;
function f_get_bh(strdate:string):STRING; //跟據日期得到單號
public
{ Public declarations }
main_tab,child_tab,main_key,child_key : string;
end;
var
form_input_xsth: Tform_input_xsth;
implementation
uses Unit_main, Unit_get_kh, Unit_get_xssp;
{$R *.dfm}
procedure Tform_input_xsth.BitBtn_quitClick(Sender: TObject);
begin
self.Close;
end;
procedure Tform_input_xsth.SpeedButton1Click(Sender: TObject);
begin
if ADOQuery1.Active = false then exit;
if ADOQuery1.RecordCount = 0 then exit;
Form_get_kh.ShowModal;
if Form_get_kh.kh_id = 0 then exit;
ADOQuery1.edit;
ADOQuery1.FieldByName('t1803').AsInteger := Form_get_kh.kh_id;
Edit_gys.Text := Form_get_kh.kh_mc;
end;
procedure Tform_input_xsth.FormCreate(Sender: TObject);
begin
inherited;
sqlstr := ADOQuery1.sql.text;
sqlstr2 := ADOQuery2.sql.text;
end;
procedure Tform_input_xsth.ADOQuery1AfterClose(DataSet: TDataSet);
begin
Edit_gys.Text := '';
ADOQuery2.Close;
end;
procedure Tform_input_xsth.BitBtn_priorClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1800) as id from t18 where t1800<'+ADOQuery1.fieldbyname('t1800').AsString;
ADOQuery3.Open;
if ADOQuery3.fieldbyname('id').asstring = '' then
showmessage('當前已經是第一張單據!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xsth.BitBtn_nextClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select min(t1800) as id from t18 where t1800>'+ADOQuery1.fieldbyname('t1800').AsString;
ADOQuery3.Open;
if ADOQuery3.fieldbyname('id').asstring = '' then
showmessage('當前已經是最后一張單據!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xsth.BitBtn_new_djClick(Sender: TObject);
var id : integer;
begin
//插入記錄到主表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'insert into t18(t1801,t1809) values('''+f_get_bh(formatdatetime('YYYYMMDD',form_main.f_get_now))+
''','''+gs_username+''')';
ADOQuery3.ExecSQL;
//得到剛插入那條記錄的ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1800) as id from t18';
ADOQuery3.Open;
id := ADOQuery3.fieldbyname('id').AsInteger;
//刷新主表顯示
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+inttostr(id);
ADOQuery1.open;
end;
function Tform_input_xsth.f_get_bh(strdate:string):STRING;
var i : integer;
begin
//得到最大的單號
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1801) as bh from t18 where left(t1801,8)='''+strdate+'''';
ADOQuery3.Open;
if ADOQuery3.fieldbyname('bh').AsString='' then //當天沒有單子賦001
f_get_bh := strdate+'001'
else
begin //加一
i := strtoint(copy(ADOQuery3.fieldbyname('bh').AsString,10,3))+1;
if i<10 then f_get_bh := strdate+'00'+inttostr(i);
if (i<100) and (i>9) then f_get_bh := strdate+'0'+inttostr(i);
if i>99 then f_get_bh := strdate+inttostr(i);
end;
end;
procedure Tform_input_xsth.BitBtn_saveClick(Sender: TObject);
begin
if ADOQuery1.RecordCount = 0 then exit;
ADOQuery1.Edit;
ADOQuery1.Post;
if ADOQuery2.Active = false then exit;
if ADOQuery2.RecordCount = 0 then exit;
ADOQuery2.Edit;
ADOQuery2.Post;
//合計金額
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select sum(t1905) as je from t19 where t1901='+ADOQuery1.fieldbyname('t1800').AsString;
ADOQuery3.Open;
ADOQuery1.Edit;
ADOQuery1.FieldByName('t1806').AsFloat := ADOQuery3.fieldbyname('je').AsFloat;
ADOQuery1.Post;
//刷新顯示
ADOQuery1.AfterScroll(ADOQuery1);
end;
procedure Tform_input_xsth.ADOQuery1AfterInsert(DataSet: TDataSet);
begin
dataset.Delete;
end;
procedure Tform_input_xsth.ADOQuery2AfterInsert(DataSet: TDataSet);
begin
dataset.Delete;
end;
procedure Tform_input_xsth.BitBtn_delete_djClick(Sender: TObject);
var id : string;
begin
if not ADOQuery1.Active then exit;
if ADOQuery1.RecordCount = 0 then exit;
if MessageDlg('你確定要刪除這張單據嗎?', mtconfirmation,[mbYes,mbNo], 0)<>mrYes then exit;
id := ADOQuery1.fieldbyname('t1800').AsString;
//刪除主單,在此不用刪除子單,因為有級聯更新
ADOQuery1.Delete;
ADOQuery1.Close;
ADOQuery2.Close;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select min(t1800) as id from t18 where t1800>'+id;
ADOQuery3.Open;
if ADOQuery3.FieldByName('id').AsString = '' then
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1800) as id from t18 where t1800<'+id;
ADOQuery3.Open;
if ADOQuery3.FieldByName('id').AsString <> '' then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.FieldByName('id').AsString;
ADOQuery1.open;
end;
end
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.FieldByName('id').AsString;
ADOQuery1.open;
end;
end;
procedure Tform_input_xsth.BitBtn_new_spClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
if ADOQuery1.RecordCount = 0 then exit;
if ADOQuery1.fieldbyname('t1803').AsInteger = 0 then
begin
showmessage('請選擇客戶!');
SpeedButton1.Click;
exit;
end;
Form_get_xssp.khid := ADOQuery1.fieldbyname('t1803').AsInteger;
Form_get_xssp.ShowModal;
if Form_get_xssp.spid = 0 then exit;
//插入子表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'insert into t19(t1901,t1902,t1907) values('+ADOQuery1.fieldbyname('t1800').AsString+','+
inttostr(Form_get_xssp.spid)+','+inttostr(Form_get_xssp.jlid)+')';
ADOQuery3.ExecSQL;
//刷新顯示
BitBtn_save.Click;
ADOQuery2.Close;
ADOQuery2.Open;
ADOQuery2.Last;
DBGrid1.SetFocus;
DBGrid1.SelectedIndex := 2;
end;
procedure Tform_input_xsth.BitBtn_delete_spClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
if ADOQuery2.Active = false then exit;
if ADOQuery2.RecordCount > 0 then ADOQuery2.Delete;
end;
procedure Tform_input_xsth.BitBtn_endClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最后的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1800) as id from t18';
ADOQuery3.Open;
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
procedure Tform_input_xsth.Edit_dhKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key <> 13 then exit;
BitBtn_find.Click;
end;
procedure Tform_input_xsth.BitBtn_findClick(Sender: TObject);
begin
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select t1800 as id from t18 where t1801='''+trim(Edit_dh.Text)+'''';
ADOQuery3.Open;
if ADOQuery3.RecordCount = 0 then
showmessage('找不到您輸入的單據!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xsth.FormShow(Sender: TObject);
begin
inherited;
//產生付款類型列表
ADOQuery3.close;
ADOQuery3.SQL.text := 'select * from t10';
ADOQuery3.Open;
while not ADOQuery3.Eof do
begin
DBComboBox1.items.Add(ADOQuery3.fieldbyname('t1001').AsString);
ADOQuery3.Next;
end;
//產生付款方式列表
ADOQuery3.close;
ADOQuery3.SQL.text := 'select * from t11';
ADOQuery3.Open;
while not ADOQuery3.Eof do
begin
DBComboBox2.items.Add(ADOQuery3.fieldbyname('t1101').AsString);
ADOQuery3.Next;
end;
//產生業務員列表
ADOQuery3.close;
ADOQuery3.SQL.text := 'select * from t02 where t0205=''業務員''';
ADOQuery3.Open;
while not ADOQuery3.Eof do
begin
DBComboBox3.items.Add(ADOQuery3.fieldbyname('t0202').AsString);
ADOQuery3.Next;
end;
//顯示主表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t1800) as id from t18';
ADOQuery3.Open;
ADOQuery1.Close;
if ADOQuery3.FieldByName('id').AsString <> '' then
begin
ADOQuery1.SQL.Text := sqlstr + ' where t1800='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xsth.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
//刷新顯示供應商
Edit_gys.Text := '';
if DataSet.fieldbyname('t1803').AsString <> '' then
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select * from t05 where t0500='+DataSet.fieldbyname('t1803').AsString;
ADOQuery3.Open;
Edit_gys.Text := ADOQuery3.fieldbyname('t0501').AsString;
end;
//刷新顯示子表
ADOQuery2.Close;
if DataSet.fieldbyname('t1800').AsString <> '' then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := sqlstr2 + ' where t1901='+DataSet.fieldbyname('t1800').AsString;
ADOQuery2.Open;
end;
end;
procedure Tform_input_xsth.DBDateEdit1Change(Sender: TObject);
begin
if ADOQuery1.Active = false then exit;
if ADOQuery1.RecordCount = 0 then exit;
if copy(ADOQuery1.FieldByName('t1801').AsString,1,8)<>formatdatetime('YYYYMMDD',ADOQuery1.fieldbyname('t1802').AsDateTime) then
begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('t1801').AsString := f_get_bh(formatdatetime('YYYYMMDD',ADOQuery1.fieldbyname('t1802').AsDateTime));
ADOQuery1.Post;
end;
end;
procedure Tform_input_xsth.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not ADOQuery1.Active then exit;
if ADOQuery2.RecordCount = 0 then exit;
if key <> 13 then exit;
if DBGrid1.SelectedIndex + 1 < DBGrid1.FieldCount then
begin
if DBGrid1.SelectedIndex = 3 then //產生金額
begin
ADOQuery2.Edit;
ADOQuery2.Post;
ADOQuery2.Edit;
ADOQuery2.FieldByName('t1905').AsFloat := ADOQuery2.FieldByName('t1903').AsFloat * ADOQuery2.FieldByName('t1904').AsFloat;
end;
DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
end
else
if ADOQuery2.RecNo = ADOQuery2.RecordCount then
BitBtn_new_sp.Click
else
begin
ADOQuery2.Next;
DBGrid1.SelectedIndex := 2;
end;
end;
procedure Tform_input_xsth.BitBtn_printClick(Sender: TObject);
begin
if ADOQuery1.RecordCount = 0 then exit;
RMReport1.LoadFromFile('Unit_input_xsth.rmf');
RMVariables['gys'] := Edit_gys.Text;
RMReport1.ShowReport;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -