📄 medicine_form2.pas
字号:
unit medicine_form2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, DBCtrls, Db, StdCtrls, Mask, ComCtrls, jpeg, ExtCtrls, Grids;
type
Tsale_form = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Edit_rule: TEdit;
Edit_batch: TEdit;
Edit_area: TEdit;
Edit_price: TEdit;
Edit_unit: TEdit;
Edit_number: TEdit;
ComboBox1: TComboBox;
Edit_saletime: TEdit;
Edit_salenumber: TEdit;
Edit_saleman: TEdit;
Edit_money: TEdit;
Query1: TQuery;
Query2: TQuery;
Query3: TQuery;
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
GroupBox2: TGroupBox;
sgSaleList: TStringGrid;
Label12: TLabel;
edtCountMoney: TEdit;
Label13: TLabel;
btnPreview: TButton;
btnPrint: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Edit_salenumberChange(Sender: TObject);
procedure Edit_salemanKeyPress(Sender: TObject; var Key: Char);
procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure Edit_salenumberKeyPress(Sender: TObject; var Key: Char);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure btnPreviewClick(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
procedure sgSaleListClick(Sender: TObject);
private
procedure SetSgSaleList();
procedure ClearOldInfo();
procedure AddSaleInfo();
procedure EditSaleInfo(aintRow: integer);
procedure CountMoney();
procedure LocateMedicine(astrMedicineName: string);
function CheckData(): boolean;
function MedicineIsExist(astrMedicineName: string): integer;
{ Private declarations }
public
{ Public declarations }
end;
var
sale_form: Tsale_form;
implementation
uses medicine_form6, rp_SaleSum;
{$R *.DFM}
procedure Tsale_form.Button1Click(Sender: TObject);
Var
lintCircle: integer;
lintId: integer;
lstrAlarm: string;
lstrCode: string;
begin
if ComboBox1.Text <> '' then
begin
Application.MessageBox('最后一个药品销售信息!','提示',MB_OK);
exit;
end;
Button1.Enabled := false;
Button3.Enabled := false;
GroupBox1.Enabled := false;
GroupBox2.Enabled := false;
btnPreview.Enabled := true;
btnPrint.Enabled := true;
//取得编号
query1.Close;
query1.sql.clear;
query1.SQL.Add('select id from sale');
query1.open;
lintId := query1.RecordCount;
for lintCircle :=1 to (sgSaleList.RowCount - 1) do
begin
lintId := lintId + 1;
//取得药品编号
query1.Close;
query1.SQL.clear;
query1.sql.add('select code,innumber from medicine where name=:s_name');
query1.ParamByName('s_name').AsString := sgSaleList.Cells[0,lintcircle];
query1.Open;
lstrCode := query1.FieldByName('code').AsString;
//保存销售信息
query3.Close;
query3.sql.clear;
query3.sql.add('insert into sale(id,saleman,saletime,code,salenumber,salemoney)' +
'values (:this_id,:this_saleman,:this_saletime,:this_code,:this_number,:this_salemoney)');
query3.ParamByName('this_id').AsInteger := lintId;
query3.ParamByName('this_saleman').AsString := sgSaleList.Cells[1,lintcircle];
query3.ParamByName('this_saletime').AsString := Edit_saletime.Text;
query3.ParamByName('this_code').AsString := lstrCode;
query3.ParamByName('this_number').AsInteger := StrToInt(sgSaleList.Cells[5,lintcircle]);
query3.ParamByName('this_salemoney').AsString := sgSaleList.Cells[6,lintcircle];
query3.ExecSQL;
//修改库存信息
query3.Close;
query3.sql.Clear;
query3.sql.Add('update medicine set innumber=:this_innumber where code=:this_salecode');
query3.ParamByName('this_innumber').AsInteger :=
query1.FieldByName('InNumber').AsInteger - StrToInt(sgSaleList.Cells[5,lintcircle]);
query3.ParamByName('this_salecode').AsString := lstrCode;
query3.ExecSQL;
//判断销售底限
query1.Close;
query1.sql.Clear;
query1.sql.Add('select innumber,lownumber from medicine where code=:this_overcode');
query1.ParamByName('this_overcode').AsString := lstrCode;
query1.open;
if query1.FieldByName('innumber').AsInteger < query1.FieldByName('lownumber').AsInteger then
begin
if lstrAlarm = '' then
lstrAlarm := sgSaleList.Cells[0,lintcircle]
else
lstrAlarm := lstrAlarm + ',' + sgSaleList.Cells[0,lintcircle];
end;
end;
Application.MessageBox('销售药品记录保存成功','提示',MB_OK);
if lstrAlarm <> '' then
Application.MessageBox(Pchar(lstrAlarm+'的库存已小于底限!'),'注意',MB_OK);
end;
procedure Tsale_form.Button2Click(Sender: TObject);
begin
self.Close;
end;
procedure Tsale_form.FormCreate(Sender: TObject);
var
i:integer;
begin
Button4Click(nil);
query1.Close;
query1.sql.Clear;
query1.sql.add('select name from medicine');
query1.open;
for i:=1 to query1.RecordCount do begin
ComboBox1.Items.Add(query1.FieldByName('name').AsString);
query1.Next;
end;
end;
procedure Tsale_form.ComboBox1Change(Sender: TObject);
var
lintRow: integer;
begin
try
query2.Close;
query2.SQL.clear;
query2.sql.add('select * from medicine where name=:s_name');
query2.ParamByName('s_name').AsString := trim(ComboBox1.Text);
query2.Open;
lintRow := MedicineIsExist(trim(ComboBox1.Text));
if lintRow > 0 then
begin
Edit_rule.text:=query2.FieldByName('rule').AsString;
Edit_unit.text:=query2.FieldByName('unit').AsString;
Edit_area.text:=query2.FieldByName('area').AsString;
Edit_batch.text:=query2.FieldByName('batch').AsString;
Edit_number.text:=query2.FieldByName('innumber').AsString;
Edit_saleman.text:= sgSaleList.Cells[1,lintRow];
Edit_price.text:= sgSaleList.Cells[4,lintRow];
Edit_salenumber.text:= sgSaleList.Cells[5,lintRow];
Edit_money.text:= sgSaleList.Cells[6,lintRow];
Edit_salenumber.SetFocus;
end
else
begin
Edit_rule.text:=query2.FieldByName('rule').AsString;
Edit_unit.text:=query2.FieldByName('unit').AsString;
Edit_area.text:=query2.FieldByName('area').AsString;
Edit_batch.text:=query2.FieldByName('batch').AsString;
if (query2.FieldByName('price').AsString = '') then
Edit_price.text:='0'
else
Edit_price.text:=query2.FieldByName('price').AsString;
Edit_number.text:=query2.FieldByName('innumber').AsString;
Edit_saletime.Text := formatDateTime('YYYY-MM-DD',date())
+ ' ' + formatDateTime('HH:MM:SS',now());
Edit_salenumber.Text := '';
if Edit_saleman.Text = '' then
Edit_saleman.SetFocus
else
Edit_salenumber.SetFocus;
end;
except
end;
end;
procedure Tsale_form.Edit_salenumberChange(Sender: TObject);
begin
if (Edit_price.text = '') or (Edit_salenumber.text = '') then
begin
edit_money.text := '';
exit;
end;
try
Edit_money.text := FormatFloat('0.00',StrToFloat(Edit_price.text) * StrToFloat(Edit_salenumber.text));
except
edit_money.text := '';
end;
end;
procedure Tsale_form.Edit_salemanKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
SelectNext( TWinControl(Sender), True, True);
end;
end;
procedure Tsale_form.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
SelectNext( TWinControl(Sender), True, True);
end;
end;
procedure Tsale_form.Edit_salenumberKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
SelectNext( TWinControl(Sender), True, True);
end;
end;
procedure Tsale_form.Button3Click(Sender: TObject);
var
lintRow: integer;
begin
//Form1.show;
if not CheckData() then //校验数据
exit;
lintRow := MedicineIsExist(trim(ComboBox1.Text));
if lintRow > 0 then
begin
EditSaleInfo(lintRow);//修改销售信息
end
else
begin
AddSaleInfo;//增加购买信息
end;
CountMoney;//计算总金额
ClearOldInfo;//清空老的购买信息
button1.Enabled := true;
end;
procedure Tsale_form.SetSgSaleList;//设置购买列表
begin
sgSaleList.ColCount := 7;
sgSaleList.RowCount := 2;
sgSaleList.FixedCols := 0;
sgSaleList.FixedRows := 1;
sgSaleList.Cells[0,0]:= '药品名称';
sgSaleList.Cells[1,0]:= '购买单位';
sgSaleList.Cells[2,0]:= '药品单位';
sgSaleList.Cells[3,0]:= '药品规格';
sgSaleList.Cells[4,0]:= '单价';
sgSaleList.Cells[5,0]:= '数量';
sgSaleList.Cells[6,0]:= '金额(元)';
sgSaleList.Cells[0,1]:= '';
sgSaleList.Cells[1,1]:= '';
sgSaleList.Cells[2,1]:= '';
sgSaleList.Cells[3,1]:= '';
sgSaleList.Cells[4,1]:= '';
sgSaleList.Cells[5,1]:= '';
sgSaleList.Cells[6,1]:= '';
edtCountMoney.Text := '';
end;
procedure Tsale_form.AddSaleInfo;//增加购买信息
VAR
lintRow: integer;
begin
if (sgSaleList.RowCount = 2) and (sgSaleList.Cells[0,1] = '') then
lintRow := sgSaleList.RowCount -1
else
begin
sgSaleList.RowCount :=sgSaleList.RowCount+1;
lintRow := sgSaleList.RowCount -1;
end;
sgSaleList.Cells[0,lintRow]:= ComboBox1.Text;
sgSaleList.Cells[1,lintRow]:= Edit_saleman.Text;
sgSaleList.Cells[2,lintRow]:= Edit_unit.Text;
sgSaleList.Cells[3,lintRow]:= Edit_rule.Text;
sgSaleList.Cells[4,lintRow]:= Edit_price.Text;
sgSaleList.Cells[5,lintRow]:= Edit_salenumber.Text;
sgSaleList.Cells[6,lintRow]:= Edit_money.Text;
end;
procedure Tsale_form.ClearOldInfo;//清空老的购买信息
begin
ComboBox1.ItemIndex := -1;
Edit_salenumber.Text := '';
Edit_rule.Text := '';
Edit_unit.Text := '';
Edit_area.Text := '';
Edit_batch.Text := '';
Edit_price.Text := '';
Edit_money.Text := '';
Edit_number.Text := '';
end;
function Tsale_form.CheckData: boolean;//校验数据
begin
result := True;
if ComboBox1.Text = '' then
begin
result := false;
Application.MessageBox('请选择药购买的药品!','提示',MB_OK);
exit;
end;
if Edit_saleman.Text = '' then
begin
result := false;
Application.MessageBox('请输入购买单位!','提示',MB_OK);
exit;
end;
if (trim(Edit_money.text) = '') or (trim(Edit_money.text) = '0') then
begin
result := false;
Application.MessageBox('请输入正确的购买数量或药品单价!','提示',MB_OK);
exit;
end;
try
if StrToInt(Edit_salenumber.text) > StrToInt(Edit_number.text) then
begin
result := false;
Application.MessageBox('现存药品数量不足,请重新输入!','提示',MB_OK);
exit;
end;
except
result := false;
Application.MessageBox('请输入正确的购买数量!','提示',MB_OK);
end;
end;
procedure Tsale_form.CountMoney;//计算总金额
const
lcintCol = 6;
Var
ldblCount: double;
lintCircle: integer;
begin
ldblCount := 0;
for lintcircle :=1 to (sgSaleList.RowCount - 1) do
begin
ldblCount := ldblCount + StrToFloat(sgSaleList.Cells[lcintCol,lintcircle]);
end;
edtCountMoney.Text := Formatfloat('0.00',ldblCount);
end;
procedure Tsale_form.Button4Click(Sender: TObject);
begin
SetSgSaleList;//设置购买列表
ClearOldInfo;//清空老的购买信息
Button3.Enabled := true;
Button1.Enabled := false;
btnPreview.Enabled := false;
btnPrint.Enabled := false;
GroupBox1.Enabled := true;
GroupBox2.Enabled := true;
end;
function Tsale_form.MedicineIsExist(astrMedicineName: string): integer;
//查询药品信息是否已经存在
var
lintCircle: integer;
begin
result := 0;
for lintCircle := 1 to (sgSaleList.RowCount -1) do
begin
if sgSaleList.Cells[0,lintCircle] = astrMedicineName then
begin
result := lintCircle;
exit;
end;
end;
end;
procedure Tsale_form.LocateMedicine(astrMedicineName: string);
//根据药品名称定位药品下拉列表
Var
lintCircle: integer;
begin
for lintCircle := 0 to (ComboBox1.Items.Count -1) do
begin
if ComboBox1.Items[lintCircle] = astrMedicineName then
begin
ComboBox1.ItemIndex := lintCircle;
exit;
end;
end;
end;
procedure Tsale_form.btnPreviewClick(Sender: TObject);
begin
self.Visible := false;
qrSaleSum.Query1.close;
qrSaleSum.Query1.ParamByName('pstrSaleTime').AsString := Edit_saletime.Text;
qrSaleSum.Query1.Open;
qrSaleSum.Preview ;
self.Visible := true;
end;
procedure Tsale_form.btnPrintClick(Sender: TObject);
begin
self.Enabled := false;
qrSaleSum.Query1.close;
qrSaleSum.Query1.ParamByName('pstrSaleTime').AsString := Edit_saletime.Text;
qrSaleSum.Query1.Open;
qrSaleSum.Print;
self.Enabled := true;
end;
procedure Tsale_form.sgSaleListClick(Sender: TObject);
begin
if (sgSaleList.Row > 0)
and (sgSaleList.cells[0,sgSaleList.Row] <> '')
and (sgSaleList.cells[0,sgSaleList.Row] <> ComboBox1.text) then
begin
LocateMedicine(sgSaleList.cells[0,sgSaleList.Row]);//根据药品名称定位药品下拉列表
ComboBox1Change(nil);
end;
end;
procedure Tsale_form.EditSaleInfo(aintRow: integer);//修改销售信息
begin
//sgSaleList.Cells[0,aintRow]:= ComboBox1.Text;
sgSaleList.Cells[1,aintRow]:= Edit_saleman.Text;
//sgSaleList.Cells[2,aintRow]:= Edit_unit.Text;
//sgSaleList.Cells[3,aintRow]:= Edit_rule.Text;
sgSaleList.Cells[4,aintRow]:= Edit_price.Text;
sgSaleList.Cells[5,aintRow]:= Edit_salenumber.Text;
sgSaleList.Cells[6,aintRow]:= Edit_money.Text;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -