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

📄 unit_mater_incard.pas

📁 此代码为企业原料管理代码
💻 PAS
字号:
unit Unit_Mater_InCard;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Mask, DBCtrls, Db, DBTables, Buttons;

type
  TForm_Mater_InCard = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    DBEdit_InCardNum: TDBEdit;
    DBEdit_Date: TDBEdit;
    Panel8: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    Panel15: TPanel;
    Panel2: TPanel;
    DBEdit_Mater: TDBEdit;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel9: TPanel;
    Panel16: TPanel;
    DBEdit_InWt: TDBEdit;
    DBEdit_Per: TDBEdit;
    Panel17: TPanel;
    Panel4: TPanel;
    Panel14: TPanel;
    DBEdit_Add: TDBEdit;
    Panel18: TPanel;
    DBEdit_Fac: TDBEdit;
    Tab_InCard: TTable;
    DS_InCard: TDataSource;
    Edit_Index: TEdit;
    DBEdit_Taker: TDBEdit;
    Panel10: TPanel;
    Qry_Exe: TQuery;
    BitBtn_Post: TBitBtn;
    BitBtn_Exit: TBitBtn;
    DBEdit_ReStock: TDBEdit;
    DBEdit_OutCardNum: TDBEdit;
    DBEdit_Stock: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    DBEdit_IfOut: TDBEdit;
    Label5: TLabel;
    DBEdit_ID: TDBEdit;
    Label6: TLabel;
    DBEdit_LastOutCardFlag: TDBEdit;
    Label7: TLabel;
    DBEdit_IFFirsrtOut: TDBEdit;
    Panel11: TPanel;
    DBEdit1: TDBEdit;
    DBEdit_Chk: TDBEdit;
    Panel19: TPanel;
    DBEdit2: TDBEdit;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit_InCardNumEnter(Sender: TObject);
    procedure DBEdit_InCardNumExit(Sender: TObject);
    procedure Edit_IndexChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBEdit_MaterEnter(Sender: TObject);
    procedure BitBtn_PostClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BitBtn_ExitClick(Sender: TObject);
    procedure DBEdit_DateEnter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure DBEdit_DateExit(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit_ChkEnter(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    s_curdate:string;
  end;

var
  Form_Mater_InCard: TForm_Mater_InCard;

implementation

uses Unit_Mater_Main, Unit_Mater_OutFromInCard, UnitQueryID, UnitDM;

{$R *.DFM}

procedure TForm_Mater_InCard.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
  begin
    key:=#0;
    perform(WM_NEXTDLGCTL,0,0);
  end; //if
end;

procedure TForm_Mater_InCard.DBEdit_InCardNumEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
end;

procedure TForm_Mater_InCard.DBEdit_InCardNumExit(Sender: TObject);
begin
  TEdit(Sender).color:=clwindow;
end;

procedure TForm_Mater_InCard.Edit_IndexChange(Sender: TObject);
begin
  with Qry_Exe  do
  begin
    close;
    sql.clear;
    sql.add('select * from 原材料字典 where 简称 = :v_index ');
    parambyname('v_index').asstring:=Edit_Index.text;
    open;
    DBEdit_mater.text:= fieldbyname('材料名称').asstring;
  end;//with
end;

procedure TForm_Mater_InCard.FormCreate(Sender: TObject);
begin
  s_curdate:=datetostr(date);
end;

procedure TForm_Mater_InCard.DBEdit_MaterEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
  with Qry_Exe  do
  begin
    close;
    sql.clear;
    sql.add('select * from 原材料字典 where 简称 = :v_index ');
    parambyname('v_index').asstring:=Edit_Index.text;
    open;
    DBEdit_mater.text:= fieldbyname('材料名称').asstring;
  end;//with
end;

procedure TForm_Mater_InCard.BitBtn_PostClick(Sender: TObject);
var
  iComboID:integer;
  fInWt,fStock,fLastStock:real;
  sMaterName:string;
begin
  if messagedlg('请认真再核对一次数据。'+#13+#13+'错帐要负全部经济责任!!'+'确定入帐吗?', mtwarning, [mbyes,mbno],0) = mrno then
    exit;


//必须填写某些栏目
  if ((DBEdit_InCardNum.text ='') or (DBEdit_Date.text = '') or (DBEdit_Mater.text ='') or (DBEdit_InWt.text ='') or (DBEdit_Per.text ='') or (DBEdit_Taker.text= '')) then
  begin
    messagedlg('必须填写'+#13+#13+'入库单号、入库日期、材料名称、入库数量、单价、采购员'+#13+#13+'这6个栏目!!', mtError	,[mbok],0);
    perform(WM_NEXTDLGCTL,0,0);
    exit;
  end; //if


//核对密码
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('select * from 人员登陆表 where 密码 = :v_pass  ');
    parambyname('v_pass').asstring:=DBEdit_Taker.text;
    open;
    if recordcount = 0 then
    begin
      showmessage('密码错误; 或者采购员没有注册!');
      exit;
    end; //if
    DBEdit_Taker.text:=fieldbyname('姓名').asstring;
  end; //with


//入库数量必须大于零
  if strtofloat(DBEdit_InWt.text)<= 0 then
  begin
    showmessage('入库数量必须大于0');
    exit;
  end; //if

//判断日期是否小于等于结账日期
  if strtodate(DBEdit_Date.text) <= dm.zdyGetmaterCheckDate then
  begin
    showmessage('您所填写的日期在结账日期之前!'+#13+#13+'请重新填写!'+#13+#13+'上次结帐日期是:'+datetostr(dm.zdyGetmaterCheckDate));
    perform(WM_NEXTDLGCTL,0,0);
    exit;
  end;

//自动填写 标识号
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('select max(标识号) from 原材料台帐 ');
    open;
  DBEdit_ID.text:=inttostr(fields[0].asinteger+1);
  end; //with

//领料标识、自动填写 剩余库存、领料单号、库存、最后领料标识
  DBEdit_IFFirsrtOut.text:='false';
  DBEdit_IfOut.text:='false';
  DBEdit_ReStock.text:=DBEdit_InWt.text;
  DBEdit_OutCardNum.text:=(formatdatetime('yymmdd',(strtodate(DBEdit_Date.text))));
  DBEdit_Stock.text:=DBEdit_InWt.text;
  DBEdit_LastOutCardFlag.text:='true';

//==============================
// 检查是否有同一天 同单价的记录
//==============================
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('select * from 原材料台帐  ');
    sql.Add('where 日期 = :v_date and 材料名称 = :MaterName and 单价 = :price and 出入标识 = :b ');
    parambyname('v_date').asdatetime := strtodate(dbedit_date.text);
    parambyname('MaterName').asstring :=dbedit_Mater.text;
    parambyname('Price').asfloat:=strtofloat(dbedit_Per.text);
    parambyname('b').asboolean:=false;
    open;
    if recordcount > 0 then
    begin
      iComboID:=fieldbyname('标识号').asinteger;
      fInWt:=fieldbyname('入库数量').asfloat;
      fInWt := fInWt + strtofloat(dbedit_inwt.text);
      fInWt := strtofloat(formatfloat('0.000',fInWt));

      fStock:=fieldbyname('库存').asfloat;
      fStock := fStock + strtofloat(dbedit_inwt.text);
      fStock := strtofloat(formatfloat('0.000',fStock));

      fLastStock:=fieldbyname('剩余库存').asfloat;
      fLastStock := fLastStock + strtofloat(dbedit_inwt.text);
      fLastStock := strtofloat(formatfloat('0.000',fLastStock));

      close;
      sql.clear;
      sql.add('update 原材料台帐 set 入库数量 = :InWt , 库存 = :Stock , 剩余库存 = :LastStock ');
      sql.add('where 标识号 = :ID  ');
      parambyname('ID').asinteger:=iComboID;
      parambyname('InWt').asfloat:=fInWt;
      parambyname('Stock').asfloat:=fStock;
      parambyname('LastStock').asfloat:=fLastStock;
      execsql;
//      showmessage('已经合并了库存');
      //刷新主界面表格
      with  Form_Mater_Main.Qry_Main do
      begin
        close;
        sql.Clear;
        sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
        sql.Add('and 领料单号 = :v_OutCardNum and 单价 = :v_per ');
        sql.Add('order by 库存 Desc ');
        parambyname('v_mater').asstring:=DBEdit_mater.text;
        parambyname('v_OutCardNum').asstring:=DBEdit_OutCardNum.text;
        parambyname('v_per').asfloat:=strtofloat(DBEdit_Per.text);
        open;
      end;//with
      //===================
      //为下一次填写做准备
      //===================
      Tab_InCard.cancel;
      Tab_InCard.append;
      DBEdit_Date.text:=s_curdate;
      Edit_Index.text:='';
      perform(WM_NEXTDLGCTL,0,0);
      exit;
    end; //if
  end; //with

//提交
  Tab_InCard.post;

  sMaterName:=Form_Mater_Main.Edit_mater.text;
  Form_Mater_Main.Edit_mater.Clear;
  Form_Mater_Main.Edit_mater.text:=sMaterName;
  
//刷新主界面表格
  with  Form_Mater_Main.Qry_Main do
  begin
    close;
    sql.Clear;
    sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
    sql.Add('and 领料单号 = :v_OutCardNum and 单价 = :v_per ');
    sql.Add('order by 库存 Desc ');
    parambyname('v_mater').asstring:=DBEdit_mater.text;
    parambyname('v_OutCardNum').asstring:=DBEdit_OutCardNum.text;
    parambyname('v_per').asfloat:=strtofloat(DBEdit_Per.text);
    open;
  end;//with

//为下一次填写做准备
  Tab_InCard.append;
  DBEdit_Date.text:=s_curdate;
  Edit_Index.text:='';
  perform(WM_NEXTDLGCTL,0,0);

end;

procedure TForm_Mater_InCard.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Tab_InCard.Cancel;
end;

procedure TForm_Mater_InCard.BitBtn_ExitClick(Sender: TObject);
begin
close;
end;

procedure TForm_Mater_InCard.DBEdit_DateEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
  DBEdit_Date.Text:=s_curdate;
end;

procedure TForm_Mater_InCard.FormShow(Sender: TObject);
begin
  DBEdit_InCardNum.SetFocus;
end;

procedure TForm_Mater_InCard.DBEdit_DateExit(Sender: TObject);
begin
  TEdit(Sender).color:=clwindow;
  //修正日期
  s_curdate:=DBEdit_Date.text;
end;

procedure TForm_Mater_InCard.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   try
   if ((Key>57) and (Key<48)) or ((Key<96) and (Key>110)) then
 // exit;
  //if Key=190 then
  exit;
  except
  end;
 end;
procedure TForm_Mater_InCard.DBEdit_ChkEnter(Sender: TObject);
begin
   TEdit(Sender).color:=claqua;
    FrmcommqueryID.PageControl1.ActivePageIndex:=0;
    FrmcommqueryID.ActiveControl:=FrmcommqueryID.estaffID;
    if  FrmcommqueryID.showmodal=mrok then
    begin
      DBEdit_Chk.text:=FrmcommqueryID.query3.fieldbyname('staffname').asstring;
   end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -