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

📄 unit_mater_outmod.pas

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

interface

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

type
  TForm_Mater_OutMod = class(TForm)
    BitBtn_Exit: TBitBtn;
    BitBtn_Post: TBitBtn;
    Qry_Exe: TQuery;
    Tab_OutCard: TTable;
    DS_OutCard: TDataSource;
    Panel1: TPanel;
    Panel3: TPanel;
    DBEdit_Date: TDBEdit;
    Panel8: TPanel;
    Panel13: TPanel;
    Panel10: TPanel;
    DBEdit_SourceNum: TDBEdit;
    Panel2: TPanel;
    DBEdit_Mater: TDBEdit;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel9: TPanel;
    DBEdit_OutWt: TDBEdit;
    DBEdit_Man: TDBEdit;
    Edit_Index: TEdit;
    DBEdit_Per: TDBEdit;
    Panel11: TPanel;
    Panel4: TPanel;
    Panel14: TPanel;
    DBEdit_Dep: TDBEdit;
    Panel12: TPanel;
    DBEdit_OutCardNum: TDBEdit;
    DBEdit1: TDBEdit;
    Panel17: TPanel;
    Panel15: TPanel;
    procedure BitBtn_PostClick(Sender: TObject);
    procedure DBEdit_SourceNumEnter(Sender: TObject);
    procedure DBEdit_SourceNumExit(Sender: TObject);
    procedure BitBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBEdit_ManEnter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_Mater_OutMod: TForm_Mater_OutMod;

implementation

uses Unit_Mater_Main, Unit_Mater_OutFromInCard;

{$R *.DFM}

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


//必须填写某些栏目
  if ((DBEdit_Date.text = '') or (DBEdit_Mater.text ='') or (DBEdit_OutWt.text ='') or (DBEdit_Man.text ='')) then
  begin
    messagedlg('必须填写'+#13+#13+'领料日期、材料名称、出库数量、领料人'+#13+#13+'这4个栏目!!', 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_Man.text;
    open;
    if recordcount = 0 then
    begin
      showmessage('密码错误; 或者领料人没有注册!');
      exit;
    end; //if
    DBEdit_Man.text:=fieldbyname('姓名').asstring;
  end; //with


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

  //找到对应的入库日期
  with Qry_exe do
  begin
    sql.Clear;
    sql.Add('select * from 原材料台帐 ');
    sql.Add('where 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per  and 出入标识 = :v_IfOut ');
    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);
    parambyname('v_IfOut').asboolean:=false;
    open;
  end;

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

//判断日期是否小于入库日期
   if Qry_exe.recordcount > 0 then
     if strtodate(DBEdit_Date.text) < Qry_exe.fieldbyname('日期').asdatetime then
     begin
       showmessage('出库日期不能在入库日期之前!'+#13+#13+'请重新填写!');
       perform(WM_NEXTDLGCTL,0,0);
       exit;
     end; //if


  if ((Form_Mater_Main.Qry_Main.fieldbyname('日期').asdatetime = strtodate(DBEdit_Date.text)) and (Form_Mater_Main.Qry_Main.fieldbyname('出库数量').asfloat = strtofloat(DBEdit_OutWt.text))) then
  begin
    showmessage('没有修改日期和重量!');
    Tab_OutCard.post;
    perform(WM_NEXTDLGCTL,0,0);
    close;
    exit;
  end; //if

//首先提交
  Tab_OutCard.post;

//消除旧日期对其后数据的影响   注意:是旧旧旧 日期
  with Qry_exe do    //************************//
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = (库存*1000 + :v_Rewt)/1000 ');
    sql.Add('where 库存 < :v_Stock and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_per');
    parambyname('v_Rewt').asfloat:=Form_mater_Main.Qry_Main.fieldbyname('出库数量').asfloat*1000;
    parambyname('v_Stock').asfloat:=Form_Mater_Main.Qry_Main.fieldbyname('库存').asfloat;
    parambyname('v_mater').asstring:=Form_mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    execsql;
  end; //with


//消除新日期对其后数据的影响  注意:是新新新  日期
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = (库存*1000 - :v_Rewt)/1000 ');
    sql.Add('where 日期 > :v_date and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_per ');
    parambyname('v_Rewt').asfloat:=strtofloat(DBEdit_OutWt.text)*1000;
    parambyname('v_date').asdatetime:=strtodate(DBEdit_Date.text);
    parambyname('v_mater').asstring:=Form_mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    execsql;
  end; //with

//修改对应入库记录的 剩余库存 为最新库存量
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('Update 原材料台帐 set 剩余库存 = (剩余库存*1000 + :v_ReWt)/1000 ');
    sql.Add('where 出入标识= :v_IfOut and 材料名称= :v_mater and 领料单号= :v_OutCardNum  and 单价 = :v_per ');
    parambyname('v_ReWt').asfloat:=(Form_mater_Main.Qry_Main.fieldbyname('出库数量').asfloat - strtofloat(DBEdit_OutWt.text))*1000;
    parambyname('v_IfOut').asboolean:=false;
    parambyname('v_mater').asstring:=Form_mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    execsql;
  end; //with


//修改自身的库存值
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('select sum(入库数量),sum(出库数量) from 原材料台帐  ');
    sql.Add('where 日期 <= :v_date and 材料名称= :v_mater and 领料单号= :v_OutCardNum  and 单价 = :v_per ');
    parambyname('v_date').asdatetime:=strtodate(DBEdit_Date.text);
    parambyname('v_mater').asstring:=Form_mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    open;
    f_SelfStock:=fields[0].asfloat-fields[1].asfloat;
  end; //with

  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = :v_SelfStock ');
    sql.Add('where  标识号 = :v_id');
    parambyname('v_SelfStock').asfloat:=strtofloat(formatfloat('0.000',f_SelfStock));
    parambyname('v_id').asinteger:=Form_Mater_Main.Qry_Main.fieldbyname('标识号').asinteger;
    execsql;
  end; //with

//修改最后领料标识的位置 先全部False 在最后一个True
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag');
    sql.Add('where 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per  ');
    parambyname('v_LastOutCardFlag').asboolean:=false;
    parambyname('v_mater').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    execsql;

    close;
    sql.Clear;
    sql.Add('select * from 原材料台帐 ');
    sql.Add('where 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per  ');
    sql.Add('order by 库存  ');
    parambyname('v_mater').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.fieldbyname('单价').asfloat;
    open;
    n_id:=fieldbyname('标识号').asinteger;

    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag ');
    sql.Add('where  标识号 = :v_id');
    parambyname('v_LastOutCardFlag').asboolean:=true;
    parambyname('v_id').asinteger:=n_id;
    execsql;
  end; //with

//刷新主界面表格
  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

  close;

end;

procedure TForm_Mater_OutMod.DBEdit_SourceNumEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
end;

procedure TForm_Mater_OutMod.DBEdit_SourceNumExit(Sender: TObject);
begin
  TEdit(Sender).color:=clwindow;
end;

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

procedure TForm_Mater_OutMod.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Tab_OutCard.cancel;
  DBEdit_Man.PasswordChar:=#0;
end;

procedure TForm_Mater_OutMod.DBEdit_ManEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
  DBEdit_Man.Text:='';
  DBEdit_Man.PasswordChar:='*';
end;

procedure TForm_Mater_OutMod.FormShow(Sender: TObject);
begin
  DBEdit_Date.SetFocus;
end;

procedure TForm_Mater_OutMod.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_OutMod.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;
end.

⌨️ 快捷键说明

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