⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 medicine_form2.pas

📁 基于DELPHI+SQL的药品管理系统
💻 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 + -