📄 unit_input_xs.pas
字号:
unit Unit_input_xs;
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_xssk = class(TForm_jc_child)
Panel1: TPanel;
DBGrid1: TDBGrid;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBDateEdit1: TDBDateEdit;
Label3: TLabel;
Edit_gys: TEdit;
SpeedButton1: TSpeedButton;
Label5: TLabel;
Label6: TLabel;
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_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;
Label12: TLabel;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
Label13: TLabel;
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 BitBtn1Click(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_xssk: Tform_input_xssk;
implementation
uses Unit_main, Unit_get_kh, Unit_get_sp;
{$R *.dfm}
procedure Tform_input_xssk.BitBtn_quitClick(Sender: TObject);
begin
self.Close;
end;
procedure Tform_input_xssk.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('t0304').AsInteger := Form_get_kh.kh_id;
Edit_gys.Text := Form_get_kh.kh_mc;
end;
procedure Tform_input_xssk.FormCreate(Sender: TObject);
begin
inherited;
sqlstr := ADOQuery1.sql.text;
sqlstr2 := ADOQuery2.sql.text;
end;
procedure Tform_input_xssk.ADOQuery1AfterClose(DataSet: TDataSet);
begin
Edit_gys.Text := '';
ADOQuery2.Close;
end;
procedure Tform_input_xssk.BitBtn_priorClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0300) as id from t03 where t0300<'+ADOQuery1.fieldbyname('t0300').AsString;
ADOQuery3.Open;
if ADOQuery3.fieldbyname('id').asstring = '' then
showmessage('当前已经是第一张单据!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xssk.BitBtn_nextClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select min(t0300) as id from t03 where t0300>'+ADOQuery1.fieldbyname('t0300').AsString;
ADOQuery3.Open;
if ADOQuery3.fieldbyname('id').asstring = '' then
showmessage('当前已经是最后一张单据!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xssk.BitBtn_new_djClick(Sender: TObject);
var id : integer;
begin
//插入记录到主表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'insert into t03(t0301,t0307) values('''+f_get_bh(formatdatetime('YYYYMMDD',form_main.f_get_now))+
''','''+gs_username+''')';
ADOQuery3.ExecSQL;
//得到刚插入那条记录的ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0300) as id from t03';
ADOQuery3.Open;
id := ADOQuery3.fieldbyname('id').AsInteger;
//刷新主表显示
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+inttostr(id);
ADOQuery1.open;
end;
function Tform_input_xssk.f_get_bh(strdate:string):STRING;
var i : integer;
begin
//得到最大的单号
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0301) as bh from t03 where left(t0301,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,9,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_xssk.BitBtn_saveClick(Sender: TObject);
var i:integer;
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(t0404) as je from t04 where t0401='+ADOQuery1.fieldbyname('t0300').AsString;
ADOQuery3.Open;
i:=adoquery1.RecNo;
ADOQuery1.Edit;
ADOQuery1.FieldByName('t0306').AsFloat := ADOQuery3.fieldbyname('je').AsFloat;
ADOQuery1.Post;
//刷新显示
adoquery1.Close;
adoquery1.Open;
adoquery1.RecNo:=i;
end;
procedure Tform_input_xssk.ADOQuery1AfterInsert(DataSet: TDataSet);
begin
dataset.Delete;
end;
procedure Tform_input_xssk.ADOQuery2AfterInsert(DataSet: TDataSet);
begin
dataset.Delete;
end;
procedure Tform_input_xssk.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('t0300').AsString;
//删除主单,在此不用删除子单,因为有级联更新
ADOQuery1.Delete;
ADOQuery1.Close;
ADOQuery2.Close;
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select min(t0300) as id from t03 where t0300>'+id;
ADOQuery3.Open;
if ADOQuery3.FieldByName('id').AsString = '' then
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0300) as id from t03 where t0300<'+id;
ADOQuery3.Open;
if ADOQuery3.FieldByName('id').AsString <> '' then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.FieldByName('id').AsString;
ADOQuery1.open;
end;
end
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.FieldByName('id').AsString;
ADOQuery1.open;
end;
end;
procedure Tform_input_xssk.BitBtn_new_spClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
if ADOQuery1.RecordCount = 0 then exit;
form_get_sp.ShowModal;
if form_get_sp.sp_id = 0 then exit;
//插入子表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'insert into t04(t0401,t0402) values('+ADOQuery1.fieldbyname('t0300').AsString+','+
inttostr(form_get_sp.sp_id)+')';
ADOQuery3.ExecSQL;
//刷新显示
BitBtn_save.Click;
ADOQuery2.Close;
ADOQuery2.Open;
ADOQuery2.Last;
DBGrid1.SetFocus;
DBGrid1.SelectedIndex := 2;
end;
procedure Tform_input_xssk.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_xssk.BitBtn_endClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
//找到最后的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0300) as id from t03';
ADOQuery3.Open;
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
procedure Tform_input_xssk.Edit_dhKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key <> 13 then exit;
BitBtn_find.Click;
end;
procedure Tform_input_xssk.BitBtn_findClick(Sender: TObject);
begin
//找到最近的主表ID
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select t0300 as id from t03 where t0301='''+trim(Edit_dh.Text)+'''';
ADOQuery3.Open;
if ADOQuery3.RecordCount = 0 then
showmessage('找不到您输入的单据!')
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xssk.FormShow(Sender: TObject);
begin
inherited;
//产生付款方式列表
ADOQuery3.close;
ADOQuery3.SQL.text := 'select * from t13';
ADOQuery3.Open;
while not ADOQuery3.Eof do
begin
DBComboBox2.items.Add(ADOQuery3.fieldbyname('t1301').AsString);
ADOQuery3.Next;
end;
//产生业务员列表
ADOQuery3.close;
ADOQuery3.SQL.text := 'select * from t01';
ADOQuery3.Open;
while not ADOQuery3.Eof do
begin
DBComboBox3.items.Add(ADOQuery3.fieldbyname('t0101').AsString);
ADOQuery3.Next;
end;
//显示主表
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select max(t0300) as id from t03';
ADOQuery3.Open;
ADOQuery1.Close;
if ADOQuery3.FieldByName('id').AsString <> '' then
begin
ADOQuery1.SQL.Text := sqlstr + ' where t0300='+ADOQuery3.fieldbyname('id').asstring;
ADOQuery1.open;
end;
end;
procedure Tform_input_xssk.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
//刷新显示客户
Edit_gys.Text := '';
if DataSet.fieldbyname('t0304').AsString <> '' then
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text := 'select * from t02 where t0200='+DataSet.fieldbyname('t0304').AsString;
ADOQuery3.Open;
Edit_gys.Text := ADOQuery3.fieldbyname('t0202').AsString;
end;
//刷新显示子表
ADOQuery2.Close;
if DataSet.fieldbyname('t0300').AsString <> '' then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := sqlstr2 + ' where t0401='+DataSet.fieldbyname('t0300').AsString;
ADOQuery2.Open;
end;
end;
procedure Tform_input_xssk.DBDateEdit1Change(Sender: TObject);
begin
if ADOQuery1.Active = false then exit;
if ADOQuery1.RecordCount = 0 then exit;
if copy(ADOQuery1.FieldByName('t0301').AsString,1,8)<>formatdatetime('YYYYMMDD',ADOQuery1.fieldbyname('t0302').AsDateTime) then
begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('t0301').AsString := f_get_bh(formatdatetime('YYYYMMDD',ADOQuery1.fieldbyname('t0302').AsDateTime));
ADOQuery1.Post;
end;
end;
procedure Tform_input_xssk.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 = 5 then //产生金额
begin
ADOQuery2.Edit;
ADOQuery2.Post;
ADOQuery2.Edit;
ADOQuery2.FieldByName('t0404').AsFloat := ADOQuery2.FieldByName('t0403').AsFloat * ADOQuery2.FieldByName('t0406').AsFloat;
ADOQuery2.Post;
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_xssk.BitBtn1Click(Sender: TObject);
begin
if ADOQuery1.Active = false then exit;
if ADOQuery1.RecordCount = 0 then exit;
if Edit_gys.Text = '' then
begin
showmessage('请选择客户!');
exit;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -