📄 unit_mater_outcard.pas
字号:
unit Unit_Mater_OutCard;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBCtrls, Mask, ExtCtrls, Db, DBTables, Buttons;
type
TForm_Mater_OutCard = class(TForm)
Panel1: TPanel;
Panel3: TPanel;
DBEdit_Date: TDBEdit;
Panel8: TPanel;
Panel13: TPanel;
Panel15: TPanel;
Panel17: TPanel;
Panel2: TPanel;
DBEdit_Mater: TDBEdit;
Panel5: TPanel;
Panel7: TPanel;
Panel9: TPanel;
DBEdit_OutWt: TDBEdit;
Edit_Index: TEdit;
Panel4: TPanel;
Panel14: TPanel;
DBEdit_Dep: TDBEdit;
Panel12: TPanel;
Panel10: TPanel;
DBEdit_SourceNum: TDBEdit;
Qry_Exe: TQuery;
Tab_OutCard: TTable;
DS_OutCard: TDataSource;
BitBtn_Exit: TBitBtn;
BitBtn_Post: TBitBtn;
Label3: TLabel;
DBEdit_Stock: TDBEdit;
Label4: TLabel;
DBEdit_IfOut: TDBEdit;
Label6: TLabel;
DBEdit_ID: TDBEdit;
Label1: TLabel;
DBEdit_LastOutCardFlag: TDBEdit;
DBEdit_Per: TDBEdit;
Panel11: TPanel;
DBEdit_OutCardNum: TDBEdit;
Label7: TLabel;
DBEdit_IFFirsrtOut: TDBEdit;
DBEdit1: TDBEdit;
Panel16: TPanel;
Panel6: TPanel;
DBEdit_Man: TDBEdit;
DBEdit2: TDBEdit;
Panel18: TPanel;
procedure Edit_IndexChange(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure DBEdit_SourceNumEnter(Sender: TObject);
procedure DBEdit_SourceNumExit(Sender: TObject);
procedure DBEdit_MaterEnter(Sender: TObject);
procedure BitBtn_PostClick(Sender: TObject);
procedure DBEdit_OutWtEnter(Sender: TObject);
procedure DBEdit_DateEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn_ExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBEdit_DateExit(Sender: TObject);
procedure DBEdit_OutWtExit(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBEdit_DepEnter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
s_curdate:string;
end;
var
Form_Mater_OutCard: TForm_Mater_OutCard;
implementation
uses Unit_Mater_OutFromInCard, Unit_Mater_Main, UnitDM, UnitQueryID;
{$R *.DFM}
procedure TForm_Mater_OutCard.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_OutCard.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_OutCard.FormShow(Sender: TObject);
begin
DBEdit_Date.SetFocus;
end;
procedure TForm_Mater_OutCard.DBEdit_SourceNumEnter(Sender: TObject);
begin
TEdit(Sender).color:=claqua;
end;
procedure TForm_Mater_OutCard.DBEdit_SourceNumExit(Sender: TObject);
begin
TEdit(Sender).color:=clwindow;
end;
procedure TForm_Mater_OutCard.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_OutCard.BitBtn_PostClick(Sender: TObject);
var
erwt,f_WarnLim,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:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
parambyname('v_IfOut').asboolean:=false;
// parambyname('riqi').asdatetime:=strtodate(DBEdit_Date.text);
open;
end;
//判断日期是否小于等于结账日期
if strtodate(DBEdit_Date.text) <=dm.zdyGetmaterCheckDate then //d_LimDate then
begin
showmessage('您所填写的日期在结账日期之前!'+#13+#13+'请重新填写!'+#13+#13+'上次结帐日期是:'+datetostr(dm.zdyGetmaterCheckDate));
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 strtofloat(DBEdit_OutWt.text) > strtofloat(formatfloat('0.000',(Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('库存').asfloat))) then
begin
showmessage('所领原料数量大于库存量!'+#13+#13+'请重新填写 领料数量!');
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:='true';
DBEdit_IfOut.text:='true';
DBEdit_Per.text:=floattostr(Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat);
DBEdit_LastOutCardFlag.text:='true';//'false';
//修正日期
s_curdate:=DBEdit_Date.text;
//提交记录
Tab_OutCard.Post;
//填写上次最后领料标识
//****************************************//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -