//Cfhzfy,Cffy,表为包含所要减的药品的记录表,表的cachedupdate为true;//databasename:=mzyf库
procedure TFcffy.Fcffyfx1SpeedButton1Click(Sender: TObject);
var
list:tstringlist;
i,zsl,ysl,zlsl,slsl:integer;//zsl总数量,ysf应发药品的数量,zlsl剩余药品的整量,slsl剩余药品的散量
minkc:integer;//最小库存
yf:integer;
begin
yf:=getconfig(5,'mzyf','config'); //取药房种类2
if isjkc=false then//判断是否门诊药房减库存 false 不是
begin
try
dm.cfhzfy.Edit;//处方汇总表cachedupdate=true
dm.cfhzfy['fyr']:=userinf.usercode;
dm.cfhzfy['qdrq']:=nowdate;
dm.cfhzfy.Post;
dm.mzyf.StartTransaction; //开始进程mzyf库
try
dm.cfhzfy.ApplyUpdates;
dm.mzyf.Commit;
BitBtn1.Enabled:=false; //用来发药的按钮
except
dm.mzyf.Rollback;//回滚数据
errormessage('未知的错误,数据没有保存!');
end;
finally
dm.cfhzfy.Close;
dm.cffy.Close;
fcffyhx1.edit1.SetFocus;
end;
end
else //执行门诊药房减库
begin
try
dm.cfhzfy.Edit;
dm.cfhzfy['fyrq']:=getdate1('mzyf');//发药日期字段
dm.cfhzfy['fyr']:=userinf.usercode; //发药人字段
dm.cfhzfy['qdrq']:=nowdate; //日期字段
dm.cfhzfy.Post;
list:=tstringlist.Create;
list.Clear;
dm.cffy.First;
while not dm.cffy.Eof do//检索所发药品的种数,bh为唯一字段
begin
if (dm.cffy['invalid']=0) and (dm.cffy['sl']*dm.cffy['zh']>0) then//填加份数计算
list.Append(dm.cffy['bh']);
dm.cffy.Next;
end;
dm.kc.Close;
dm.kc.Open; //打开库存表
if ispubkc then
requery(dm.pubkc,'kc','bh',list,'');
dm.cffy.First;
while not dm.cffy.Eof do
begin
///////////////////以下是填加的过程,用来判断库存上下限//////////
query1.Close;
query1.sql.text:='select * from ymdm where ypcode=:ypcode';
query1.ParamByName('ypcode').asstring:=dm.cffy.fieldbyname('ypcode').asstring;
query1.open; if yf=2 then//门诊药房减库 minkc:=query1.fieldbyname('mzminkc').asinteger //最小库存该值为0
else
minkc:=query1.fieldbyname('zhminkc').asinteger;
///////////////////////////////////////////////// 以下填加份数计算zh是份数字段
if (dm.cffy['invalid']=0) and (dm.cffy['sl']*dm.cffy['zh']>0) then
begin
if dm.kc.Locate('bh',dm.cffy['bh'],[loCaseInsensitive]) then
begin
zsl:=sltosepsl(dm.kc['sl'],dm.kc['tomin'])+dm.kc['sepsl']; //当前库存中该药品的所有数量
if dm.cffy['dwclass'] then //判断所发药品的类型(是整瓶的还是散量)
ysl:=sltosepsl(dm.cffy['sl']*dm.cffy['zh'],dm.kc['tomin']) //填加份数
else
ysl:=dm.cffy['sl']*dm.cffy['zh'];//填加(zh)份数
if zsl-ysl>=0 then //当前库存数-应发药数>=0
begin
if zsl-ysl<minkc then //当前库存数-应发药数<最小库存
begin
if messagebox(0,pchar(query1.fieldbyname('pm').asstring+'该药品发药数量已经低于库存下限是否继续?'),'提示',mb_yesno+mb_iconinformation)=idyes then
begin
sepsltosl(zsl-ysl,dm.kc['tomin'],zlsl,slsl);//减库根据药品规格计算出减库后的药品的整和散的数量
dm.kc.Edit;
dm.kc['sl']:=zlsl; //药品整量
dm.kc['sepsl']:=slsl; //药品散量
dm.kc.Post; //更新cachedupdate=true;
end
else
exit;
end
else
begin
sepsltosl(zsl-ysl,dm.kc['tomin'],zlsl,slsl);//减库根据药品规格计算出减库后的药品的整和散的数量
dm.kc.Edit;
dm.kc['sl']:=zlsl;
dm.kc['sepsl']:=slsl;
dm.kc.Post;
end;
end
else
begin
errormessage('"'+dm.cffy['ypname']+'"'+'该编号的药品数量不够,请重新划价');
exit;
end;
end;
//////////////////////////////////
end
else
begin
errormessage('库存中无'+'"'+dm.cffy['ypname']+'"'+'该编号的药品,请重新划价!');
exit;
end;
dm.cffy.Next;
end;
dm.mzyf.StartTransaction; //开进程
try
dm.cfhzfy.ApplyUpdates;//更新
dm.kc.ApplyUpdates; //更新
dm.mzyf.Commit; //
BitBtn1.Enabled:=false;
infomessage('发药完成,请发下一处方!')
except
dm.mzyf.Rollback;
if ispubkc then
dm.pubyf.Rollback;
errormessage('未知的错误,数据没有保存!');
end;
finally
dm.cfhzfy.Close;
dm.cffy.Close;
dm.kc.Close;
fcffyhx1.edit1.SetFocus;
// infomessage('发药完成!') end;
end;
procedure TFcffy.Fcffyfx1SpeedButton1Click(Sender: TObject);
var
list:tstringlist;
i,zsl,ysl,zlsl,slsl:integer;//zsl总数量,ysf应发药品的数量,zlsl剩余药品的整量,slsl剩余药品的散量
minkc:integer;//最小库存
yf:integer;
begin
yf:=getconfig(5,'mzyf','config'); //取药房种类2
if isjkc=false then//判断是否门诊药房减库存 false 不是
begin
try
dm.cfhzfy.Edit;//处方汇总表cachedupdate=true
dm.cfhzfy['fyr']:=userinf.usercode;
dm.cfhzfy['qdrq']:=nowdate;
dm.cfhzfy.Post;
dm.mzyf.StartTransaction; //开始进程mzyf库
try
dm.cfhzfy.ApplyUpdates;
dm.mzyf.Commit;
BitBtn1.Enabled:=false; //用来发药的按钮
except
dm.mzyf.Rollback;//回滚数据
errormessage('未知的错误,数据没有保存!');
end;
finally
dm.cfhzfy.Close;
dm.cffy.Close;
fcffyhx1.edit1.SetFocus;
end;
end
else //执行门诊药房减库
begin
try
dm.cfhzfy.Edit;
dm.cfhzfy['fyrq']:=getdate1('mzyf');//发药日期字段
dm.cfhzfy['fyr']:=userinf.usercode; //发药人字段
dm.cfhzfy['qdrq']:=nowdate; //日期字段
dm.cfhzfy.Post;
list:=tstringlist.Create;
list.Clear;
dm.cffy.First;
while not dm.cffy.Eof do//检索所发药品的种数,bh为唯一字段
begin
if (dm.cffy['invalid']=0) and (dm.cffy['sl']*dm.cffy['zh']>0) then//填加份数计算
list.Append(dm.cffy['bh']);
dm.cffy.Next;
end;
dm.kc.Close;
dm.kc.Open; //打开库存表
if ispubkc then
requery(dm.pubkc,'kc','bh',list,'');
dm.cffy.First;
while not dm.cffy.Eof do
begin
///////////////////以下是填加的过程,用来判断库存上下限//////////
query1.Close;
query1.sql.text:='select * from ymdm where ypcode=:ypcode';
query1.ParamByName('ypcode').asstring:=dm.cffy.fieldbyname('ypcode').asstring;
query1.open; if yf=2 then//门诊药房减库 minkc:=query1.fieldbyname('mzminkc').asinteger //最小库存该值为0
else
minkc:=query1.fieldbyname('zhminkc').asinteger;
///////////////////////////////////////////////// 以下填加份数计算zh是份数字段
if (dm.cffy['invalid']=0) and (dm.cffy['sl']*dm.cffy['zh']>0) then
begin
if dm.kc.Locate('bh',dm.cffy['bh'],[loCaseInsensitive]) then
begin
zsl:=sltosepsl(dm.kc['sl'],dm.kc['tomin'])+dm.kc['sepsl']; //当前库存中该药品的所有数量
if dm.cffy['dwclass'] then //判断所发药品的类型(是整瓶的还是散量)
ysl:=sltosepsl(dm.cffy['sl']*dm.cffy['zh'],dm.kc['tomin']) //填加份数
else
ysl:=dm.cffy['sl']*dm.cffy['zh'];//填加(zh)份数
if zsl-ysl>=0 then //当前库存数-应发药数>=0
begin
if zsl-ysl<minkc then //当前库存数-应发药数<最小库存
begin
if messagebox(0,pchar(query1.fieldbyname('pm').asstring+'该药品发药数量已经低于库存下限是否继续?'),'提示',mb_yesno+mb_iconinformation)=idyes then
begin
sepsltosl(zsl-ysl,dm.kc['tomin'],zlsl,slsl);//减库根据药品规格计算出减库后的药品的整和散的数量
dm.kc.Edit;
dm.kc['sl']:=zlsl; //药品整量
dm.kc['sepsl']:=slsl; //药品散量
dm.kc.Post; //更新cachedupdate=true;
end
else
exit;
end
else
begin
sepsltosl(zsl-ysl,dm.kc['tomin'],zlsl,slsl);//减库根据药品规格计算出减库后的药品的整和散的数量
dm.kc.Edit;
dm.kc['sl']:=zlsl;
dm.kc['sepsl']:=slsl;
dm.kc.Post;
end;
end
else
begin
errormessage('"'+dm.cffy['ypname']+'"'+'该编号的药品数量不够,请重新划价');
exit;
end;
end;
//////////////////////////////////
end
else
begin
errormessage('库存中无'+'"'+dm.cffy['ypname']+'"'+'该编号的药品,请重新划价!');
exit;
end;
dm.cffy.Next;
end;
dm.mzyf.StartTransaction; //开进程
try
dm.cfhzfy.ApplyUpdates;//更新
dm.kc.ApplyUpdates; //更新
dm.mzyf.Commit; //
BitBtn1.Enabled:=false;
infomessage('发药完成,请发下一处方!')
except
dm.mzyf.Rollback;
if ispubkc then
dm.pubyf.Rollback;
errormessage('未知的错误,数据没有保存!');
end;
finally
dm.cfhzfy.Close;
dm.cffy.Close;
dm.kc.Close;
fcffyhx1.edit1.SetFocus;
// infomessage('发药完成!') end;
end;
稳定性不是很好