📄 unit_mater_outcard.pas
字号:
//****************************************//
//修改对应入库记录的 剩余库存 为最新库存量 //领料标识 为 true
with Qry_Exe do
begin
close;
sql.Clear;
sql.Add('Update 原材料台帐 set 剩余库存 = (剩余库存*1000 - :v_Outwt)/1000 ,领料标识 = :v_IFFirstOut ');
sql.Add('where 出入标识= :v_IfOut and 材料名称= :v_mater and 领料单号= :v_OutCardNum and 单价 = :v_per ');
parambyname('v_IFFirstOut').asboolean:=true;
parambyname('v_Outwt').asfloat:=strtofloat(DBEdit_OutWt.text)*1000;
parambyname('v_IfOut').asboolean:=false;
parambyname('v_mater').asstring:=DBedit_Mater.text;
parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.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_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:=true;
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:=strtoint(DBEdit_ID.text);
execsql;
end; //with
// showmessage(Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring);
//修改其后的库存
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('update 原材料台帐 set 库存 =(库存*1000 - :v_Rewt)/1000 , 最后领料标识 = :v ');
sql.Add('where 日期>:riqi and 出入标识= :v_IfOut and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_per');// and 出入标识 = :v_IfOut ');
parambyname('v_Rewt').asfloat:=strtofloat(DBEdit_OutWt.text)*1000;
parambyname('v_mater').asstring:=DBEdit_Mater.text;//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:=true;
parambyname('v').asboolean:=false;
parambyname('riqi').asdatetime:=strtodate(DBEdit_Date.text);
execsql;
end;
//填写最后领料标识(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_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;
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_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;
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 qry_exe do
begin
close;
sql.Clear;
sql.Add('select * from 原材料字典 ');
sql.Add('where 材料名称 = :v_mater ');
sql.Add('and 材料名称 = :v_mater ');
parambyname('v_mater').asstring:=DBEdit_Mater.text;
open;
f_warnLim:=fieldbyname('库存下限').asfloat;
end;//with
with qry_exe do
begin
close;
sql.Clear;
sql.Add('select sum(库存) from 原材料台帐 ');
sql.Add('where 最后领料标识 = :v_lastOutCardFlag ');
sql.Add('and 材料名称 = :v_mater ');
parambyname('v_lastOutCardFlag').asboolean:=true;
parambyname('v_mater').asstring:=DBEdit_Mater.text;
open;
if fields[0].asfloat <= f_warnLim then
begin
showmessage(DBEdit_Mater.text+'的库存量低于库存下限!'+#13+#13+'请尽快采购!');
end;
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
//为下一次填写做准备
Form_Mater_OutFromInCard.If_First:=true;
Tab_OutCard.append;
DBEdit_Date.text:=s_curdate;
Edit_Index.text:='';
perform(WM_NEXTDLGCTL,0,0);
end;
procedure TForm_Mater_OutCard.DBEdit_OutWtEnter(Sender: TObject);
begin
TEdit(Sender).color:=claqua;
//检查条件
if DBEdit_Mater.text ='' then
begin
showmessage('请填写材料名称!'+#13+#13+'请按照顺序填写各栏目!');
exit;
end; //if
//读适当的入库或出库记录 并显示
if Form_Mater_OutFromInCard.If_First then
begin
with Form_Mater_OutFromInCard.Qry_OutFromInCard do
begin
close;
sql.clear;
sql.add('select * from 原材料台帐 where 材料名称 = :v_mater ');
sql.add('and 库存 > 0 and 最后领料标识 = :v_lastOutCardFlag ');
parambyname('v_mater').asstring:=DBEdit_Mater.text;
parambyname('v_lastOutCardFlag').asboolean:=true;
open;
end;//with
end; //if
Form_Mater_OutFromInCard.show;
end;
procedure TForm_Mater_OutCard.DBEdit_DateEnter(Sender: TObject);
begin
TEdit(Sender).color:=claqua;
DBEdit_Date.Text:=s_curdate;
end;
procedure TForm_Mater_OutCard.FormCreate(Sender: TObject);
begin
s_curdate:=datetostr(date);
end;
procedure TForm_Mater_OutCard.BitBtn_ExitClick(Sender: TObject);
begin
close;
end;
procedure TForm_Mater_OutCard.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Tab_OutCard.Cancel;
perform(WM_NEXTDLGCTL,0,0);
end;
procedure TForm_Mater_OutCard.DBEdit_DateExit(Sender: TObject);
begin
TEdit(Sender).color:=clwindow;
//修正日期
s_curdate:=DBEdit_Date.text;
end;
procedure TForm_Mater_OutCard.DBEdit_OutWtExit(Sender: TObject);
begin
TEdit(Sender).color:=clwindow;
Form_Mater_OutFromInCard.close;
end;
procedure TForm_Mater_OutCard.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_OutCard.DBEdit_DepEnter(Sender: TObject);
begin
frmCommQueryID.top:=200;
frmCommQueryID.left:=220;
//Table3.Close;
TDBEdit(Sender).color:=claqua;
frmCommQueryID.PageControl1.ActivePageIndex:=3;
frmCommQueryID.ActiveControl:=frmCommQueryID.DBGrid1;
if frmCommQueryID.showmodal = mrok then
begin
DBEdit_Dep.setfocus;
DBEdit_Dep.text:=frmCommQueryID.query2.fieldbyname('workshopname').asstring;
end; //if
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -