procedure SP_YK_YPSLCKQR -- MODIFICATION HISTORY -- Person Date Comments -- lintj 2012.06.06 modify SP_YF_YPSLRKQR 等 -- lintj 2012.07.03 增加计量相关信息 -- zhangwz 2012.10.19 申领确认的时候对没有小于请领数量的药品内容重新生成一个申请单. -- zhangwz 2012.10.22 针对整单出库的药品(YK_YPQLMX.RKPC00 is not null )的SFSL00的update去掉,因为虽然是整单出库, -- 但是前台出库确认的时候又是可以再次分配的,会提示分配的数量与实际数量不一致卡住导致出库不了 -- zhangwz 2012.11.08 调出CKLXBH=01的申领单出库时,对方药库直接入库前把单据的RKZT00变更成0(原先为4),同时更改 YK_YPQLD0.QLZT00='2'. -- zhangwz 2012.11.13 部门增加BMXZ00='z'的制剂室的数据,这种请领单出库确认的时候制剂室(药房)直接入库。 -- zhangwz 2012.11.20 对实发数量小于请领数量重新生成的请领单标识 LYFS00=3 -- zhangwz 2012.11.30 对实发数量小于请领数量重新生成的请领单更改为未接单状态 -- qks 2012.12.04 YK_YPQLD0.LYFS00=4 科室请领(公共模块使用,不增药房库存) -- qks 2013.09.03 如果属于科室耗材请领,增加科室三级库存;注释SP_KS_YPSLRKQR,改为调用SP_KS_YPRKQR; -- qks 2013.09.13 如果属于库存出给其他科室,增加科室三级库存; -- qks 2013.10.10 如果存在手术单号(YK_YPQLD0.SSDH00>0),不增加科室三级库存; -- qks 2014.03.05 update YK_YPQLMX set BZ0000=截取100个字节 -- qks 2014.04.18 YK_YPQLD0.CKLXBH=25,物资三级库存请领;04.22修改; -- qks 2014.04.29 供应室或检验科使用二级库房申领,一级仓库申领单出库确认后,会自动增加供应室或检验科的三级库存; --chenyw 2014.05.16 把请领明细的BZ0000写入到YK_YPCKMX中 -- qks 2015.09.09 更新YK_YPQLMX.GJDJ00,QLDJ00 -- qks 2015.12.11 如果原请领单已被生成计划采购单,那么补出库单的新请领单也要注明被生成具体的采购单过; by KCWZ9-20151211-001 -- qks 2016.03.10 需要调整批发单价(量采价); by YK9-20160313-002 -- qks 2017.01.14 药品申领出库确认,有对原申领单中的购进单价和零售单价进行修改,原来保留3或4位小数,修改后反而只保留2位小数; by YK9-20170112-00 -- liwm 2018.04.02 增加发票信息 for YK9-20180202-001 -- gzj 2018.09.12 物资、药库部门支持设置各自的入出库开头字母和单号序列 KCWZ9-20180827-001 -- qks 2019.10.18 非药房科室并且非供应室部门,直接置标志'2':增加条件and QLZT00<>'2' ; for YK9-20191017-002; -- luowf 2020.05.07 增加判断出库批次是否无效 YK_YPRKMX.ZTBZ00 = 1 for KCWZ9-20200430-005 ( Pypqldh in varchar2 , --药品请领单号 Psyspid in number , --系统进程号 Pqrrbh0 in number , --确认入编号 Pczy000 in number , --操作员 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ) as Vcounter1 number; -- 记数器 Vcounter2 number; -- 记数器 Vypckpc YK_YPCKMX.YPCKPC%type; Vyprkpc YK_YPRKMX.YPRKPC%type; Vqlzt00 YK_YPQLD0.QLZT00%type; Vykbmbh YK_YPQLD0.YKBMBH%type; Vcklxbh YK_YPQLD0.CKLXBH%type; Vyfzdqr XT_XTCS00.VALUE0%type; Vyfbmbh BM_BMBM00.BMBH00%type; Vrkdh00 YF_YPRKD0.RKDH00%type; Vypqldh YK_YPQLD0.YPQLDH%type; Vzjypls XT_XTCS00.VALUE0%type; --是否增加药品隶属 Vsfbcph XT_XTCS00.VALUE0%type; --判断请领明细是否保存生产批号 Vdbqrsh XT_XTCS00.VALUE0%type; --调拨入库是否需要确认审核 vypqlpc YK_YPQLMX.YPQLPC%TYPE; --请领单请领批次 VQLSL00 YK_YPQLMX.QLSL00%TYPE; --请领单请领数量 VJLQLSL YK_YPQLMX.JLQLSL%TYPE; --请领单计量请领数量 VK2ZJJL BM_YD0000.K2ZJJL%TYPE; --药品的K2ZJJL VLYFS00 YK_YPQLD0.LYFS00%type; --来源方式 0 药房、科室请领 1 药库新增 2 入库单转出库单 3出库确认时实发小于请领新生成的 4、科室请领(公共模块使用,不增药房库存) VSSDH00 YK_YPQLD0.SSDH00%type; VBZ0000 YK_YPQLD0.BZ0000%type; Vyprkpc1 YK_YPRKMX.YPRKPC%type; Vsysdate date; --日期变量 Vcounter number(14,4); --计数器变量 Ecustom exception; --错误变量 V_YK_YPQLD0 YK_YPQLD0%ROWTYPE ; --药品请领单主表 cursor CUR_YPQLMX is select T.*,(select BZ0000 from YK_YPQLMX where ypqlpc=T.YPQLPC and rownum=1 ) BZ0000 from YK_YPQLMX_TEMP T where T.YPQLDH=Pypqldh and (T.PCLYSL>0 or T.JLQLSL>0) and T.SYSPID=Psyspid order by T.YPQLPC,T.RKPC00; cursor CUR_YPRKMX is select R.FPH000, R.FPFLH0, R.YPNM00, R.YPMC00, R.YPGG00, C.CKDW00, C.ZHL000, C.JLCKSL, C.JLCKDW, C.JLZHL0, C.CKSL00, C.GJDJ00, 1 KL0000, C.LSDJ00, C.PFDJ00, round(C.CKSL00*C.GJDJ00,2)+round(nvl(C.JLCKSL*C.GJDJ00*C.JLZHL0/c.ZHL000,0), 2) GJJE00, C.CKSL00*C.ZHL000+nvl(C.JLCKSL*C.JLZHL0,0) PCKCSL, R.SCPH00, R.YPSXRQ, R.SCCJBH, R.SCCJZW, R.CFWZBH, R.CFWZMC, R.BZ0000, R.JHRQ00, R.YPJCL0, R.SFZBYP, R.ZBXH00, R.ZBQNM0, SFBA00 from YK_YPCKMX C,YK_YPRKMX R where C.YPQLDH=Pypqldh and C.YPRKPC=R.YPRKPC; cursor CUR_NEWQLD_YPQLMX is select * from YK_YPQLMX a where a.YPQLDH=Pypqldh and (a.QLSL00+round(nvl(a.JLQLSL,0)*nvl(a.JLZHL0,0)/a.ZHL000,3))>(a.SFSL00+round(nvl(a.JLSFSL,0)*nvl(a.JLZHL0,0)/a.ZHL000,3)); lv_NEWQLD_YPQLMX CUR_NEWQLD_YPQLMX%ROWTYPE ; --没有完全出库的药品进行剩余请领数量的重新申请 begin Pzxcgbz:=0; Vsysdate:=sysdate; Pxxxx00 :=nvl(to_char(Pypqldh),'null')||','||nvl(to_char(Psyspid),'null')||','||nvl(to_char(Pqrrbh0),'null')||','|| nvl(to_char(Pczy000),'null')||','||nvl(to_char(Pczyks0),'null')||','||nvl(to_char(Pcommit),'null'); SP_TransLog(Vsysdate,'SP_YK_YPSLCKQR',Pczy000,Pczyks0,Pxxxx00); --判断数据的有效性 select QLZT00,CKQXBH,CKLXBH,YKBMBH,nvl(LYFS00,'0'),SSDH00,trim(BZ0000) into Vqlzt00,Vyfbmbh,Vcklxbh,Vykbmbh,VLYFS00,VSSDH00,VBZ0000 from YK_YPQLD0 where YPQLDH=Pypqldh; if Vqlzt00<>'0' then Ptsxx00 :='已经被确认过了,不能再确认!*'; raise Ecustom; end if; --取参数 :调拨入库是否需要确认审核 select nvl(max(trim(VALUE0)),'Y') into Vdbqrsh from XT_XTCS00 where NAME00='YK_DBRKSFXYQRSH'; --取参数:是否自动进行药房入库确认 select nvl(max(trim(VALUE0)),'N') into Vyfzdqr from XT_XTCS00 where NAME00='YK_YFZDRKRQ'; --取出药品增加隶属 --select nvl(max(trim(VALUE0)),'N') into Vzjypls from XT_XTCS00 where NAME00='YK_SFQYLSYP'; Vzjypls:='Y'; --取出判断请领明细是否保存生产批号 select nvl(max(trim(VALUE0)),'N') into Vsfbcph from XT_XTCS00 where NAME00='YK_CKDBZSFXSRKPH'; -----------判断库存是否充足----------------- select count(*) into Vcounter from YK_YPRKMX R,YK_YPQLMX_TEMP T,BM_YD0000 M where R.YPRKPC=T.RKPC00 and R.YPNM00=M.YPNM00 and ROUND(R.PCKCSL/T.ZHL000,3)<(T.PCLYSL+round(nvl(T.JLQLSL,0)*T.JLZHL0/T.ZHL000,3)) and T.YPQLDH=Pypqldh and T.SYSPID=Psyspid; if Vcounter>0 then Ptsxx00 :='药品批次库存不足,可能已被其他用户使用!*'; raise Ecustom; end if; -----------判断出库批次是否无效 YK_YPRKMX.ZTBZ00 = 1----------------- select count(*),max(T.RKPC00) into Vcounter,Vyprkpc1 from YK_YPRKMX R,YK_YPQLMX_TEMP T,BM_YD0000 M where R.YPRKPC=T.RKPC00 and R.YPNM00=M.YPNM00 and R.ZTBZ00 = 1 and T.pclysl>0 and T.YPQLDH=Pypqldh and T.SYSPID=Psyspid; if Vcounter>0 then Ptsxx00 :=to_char(Psyspid)||',所选择的批次已经失效,请先恢复,否则不能进行出库操作!*'; raise Ecustom; end if; -----------向药库出库明细表 YK_YPCKMX插入出库批次-------------- update YK_YPQLD0 set QRRQ00=to_char(Vsysdate,'yyyymmdd'),QRSJ00=to_char(Vsysdate,'hh24:mi:ss'),QRRBH0=Pqrrbh0 where YPQLDH=Pypqldh; --再次刷新零售价,以防确实时调价 update YK_YPQLMX_TEMP T set T.QLDJ00=(select round(R.XXLSDJ*T.ZHL000/R.ZHL000,4) from YK_YPRKMX R where R.YPRKPC=T.RKPC00) where T.YPQLDH=Pypqldh and T.PCLYSL>0 and T.SYSPID=Psyspid; select count(*) into Vcounter from YK_YPQLMX_TEMP T where T.YPQLDH=Pypqldh and (T.PCLYSL>0 or T.JLQLSL>0) and T.SYSPID=Psyspid; if Vcounter = 0 then Ptsxx00 :='没有相应药品入库批次,不能出库!*'; raise Ecustom; end if; for row in CUR_YPQLMX loop Vypckpc := null; SP_YK_YPCKMX_EDIT( 0, --操作标志 0:增加 1:修改 2:删除 Pypqldh, --请领单号 Vypckpc, --出库批次 row.RKPC00, --入库批次 row.YPNM00, --药品内码 row.YPMC00, --药品名称 row.YPGG00, --药品规格 row.ZHL000, --转换率 row.PCLYSL, --出库数量 row.QLDW00, --出库单位 row.GJDJ00, --购进单价 row.QLDJ00, --零售单价 row.PFDJ00, --批发单价 row.YPQLPC, --请领批次 null, --是否中标药品 row.BZ0000, --备注 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 'Z', --冲销标志 null, --冲销出库批次 row.JLQLSL, row.JLQLDW, row.JLZHL0, row.FPH000, row.FPDM00, row.FPRQ00 --发票日期 ); if Pzxcgbz = 0 then Ptsxx00 := '药品出库操作错误(1)'; raise Ecustom; end if; if Vsfbcph='Y' then --是否保存批号 update YK_YPQLMX set BZ0000=substrb(Nvl(trim(BZ0000),' ')||'('||Trim(row.SCPH00)||')',1,100) where YPQLPC=row.YPQLPC; end if; end loop; --重现更新请领单的实发数 update YK_YPQLMX Q set (Q.SFSL00,Q.JLSFSL)=(select sum(CKSL00),sum(JLCKSL) from YK_YPCKMX X where X.YPQLDH=Pypqldh and X.YPNM00=Q.YPNM00 and YPQLPC=Q.YPQLPC) where Q.YPQLDH=Pypqldh ;--and rkpc00 is null; --2015.09.09 更新YK_YPQLMX.GJDJ00,QLDJ00 --2016.03.10 更新YK_YPQLMX.PFDJ00 --2017.01.13 --update YK_YPQLMX Q set (Q.GJDJ00,Q.QLDJ00,Q.PFDJ00)=(select round(max(round(GJDJ00/ZHL000,4))*Q.ZHL000,4),round(max(round(LSDJ00/ZHL000,4))*Q.ZHL000,4),round(max(round(PFDJ00/ZHL000,4))*Q.ZHL000,4) from YK_YPCKMX X where X.YPQLDH=Pypqldh and X.YPNM00=Q.YPNM00 and YPQLPC=Q.YPQLPC) update YK_YPQLMX Q set (Q.GJDJ00,Q.QLDJ00,Q.PFDJ00)=(select max(round(X.GJDJ00*Q.ZHL000/X.ZHL000,4)),max(round(X.LSDJ00*Q.ZHL000/X.ZHL000,4)),max(round(X.PFDJ00*Q.ZHL000/X.ZHL000,4)) from YK_YPCKMX X where X.YPQLDH=Pypqldh and X.YPNM00=Q.YPNM00 and YPQLPC=Q.YPQLPC) where Q.YPQLDH=Pypqldh and SFSL00>0; --重现更新请领单的实发数 by zhangwz 2012.10.22 -- update YK_YPQLMX Q set (Q.SFSL00,Q.JLSFSL)=(select sum(CKSL00),sum(JLCKSL) from YK_YPCKMX X where X.YPQLDH=Pypqldh and X.YPNM00=Q.YPNM00 and X.YPRKPC=Q.RKPC00) -- where Q.YPQLDH=Pypqldh and rkpc00 is not null; --实发数为空,这补零 update YK_YPQLMX Q set Q.SFSL00=0 where Q.YPQLDH=Pypqldh and Q.SFSL00 is null; update YK_YPQLMX Q set Q.JLSFSL=0 where Q.YPQLDH=Pypqldh and Q.JLSFSL is null; ----------------修改请领单状态---------- SP_YK_YPQLD0_AUDIT(Pypqldh,to_char(Vsysdate,'yyyymmdd'),to_char(Vsysdate,'hh24:mi:ss'),Pczy000,Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00); if Pzxcgbz = 0 then Ptsxx00 := '药品请领确认错误(1)'; raise Ecustom; end if; -------------如果是调拨出库,而且启用隶属药品则增加入库单 if Vzjypls='Y' AND Vcklxbh='01' then ---判断是否在药库隶属药品表中是否有记录 select count(YPNM00) into Vcounter from YK_YPCKMX A where not exists(select 1 from YK_YPKCXX B where B.YKBMBH=Vyfbmbh and A.YPNM00=B.YPNM00) and YPQLDH=Pypqldh; if Vcounter>0 then Ptsxx00 := '隶属药品没有记录(1)!*'; raise Ecustom; end if; --1,插入药库入库单YF_YPRKD0 Vrkdh00 := null; SP_YK_YPRKD0_EDIT(0,Vrkdh00,Vyfbmbh,null,Vykbmbh,'04',null,0,null,null,to_char(Vsysdate,'yyyymmdd'),to_char(Vsysdate,'hh24:mi:ss'), null,Pczy000,Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00); if Pzxcgbz = 0 then Ptsxx00 := '药品入库操作错误(1)'; raise Ecustom; end if; update YK_YPRKD0 set RKZT00='0' where RKDH00=Vrkdh00; for row in CUR_YPRKMX loop Vyprkpc := null; SP_YK_YPRKMX_EDIT( 0, --操作标志 0:增加 1:修改 2:删除 Vrkdh00, --入库单号 Vyprkpc, --入库批次 row.FPH000, --发票号 row.FPFLH0, --发票附联号 row.YPNM00, --药品内码 row.YPMC00, --药品名称 row.YPGG00, --药品规格 row.CKDW00, --入库单位 row.ZHL000, --转换率 row.CKSL00, --入库数量 row.GJDJ00, --发票购进单价 row.KL0000, --扣率 row.LSDJ00, --零售单价 row.PFDJ00, --批发单价 row.SCPH00, --生产批号 row.YPSXRQ, --失效日期 row.SCCJBH, --厂家编码 row.SCCJZW, --厂家名称 row.CFWZBH, --存放位置编码 row.CFWZMC, --存放位置名称 row.BZ0000, --备注 row.JHRQ00, --接货日期 '0', --是否有合格证 '0', --外观 row.SFZBYP, --是否中标药品 row.ZBXH00, --中标序号 row.YPJCL0, --加成率 row.ZBQNM0, --中标期 null, --批准文号 0, --折扣金额 null, --发票日期 null, --药品注册证 null, --生产日期 null, --产地ID null, --产地名称 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 null, --是否需要调价 null, --现行零售价 null, --药品退货批次 'Z', --冲销标志 null, --冲销入库批次 row.JLCKSL, --计量入库数量(余数) row.JLCKDW, --计量入库单位 row.JLZHL0, --计量转换率(计量/剂量) row.SFBA00 ); if Pzxcgbz = 0 then Ptsxx00 := '药品入库明细操作错误(1)'; raise Ecustom; end if; end loop; if Vdbqrsh='N' then SP_YK_YPRKD0_AUDIT(Vrkdh00,Vyfbmbh,to_char(Vsysdate,'yyyymmdd'),to_char(Vsysdate,'hh24:mi:ss'),'N',Pczy000,Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00); if Pzxcgbz = 0 then Ptsxx00 := '药品入库确认错误(1)'; raise Ecustom; end if; update YK_YPQLD0 set QLZT00='2' where YPQLDH=Pypqldh; end if; end if; --判断申请部门是否药房 select count(*) into Vcounter1 FROM BM_BMBM00 WHERE BMXZ00 IN ('2','3') AND BMBH00=Vyfbmbh; select count(*) into Vcounter2 FROM BM_BMBM00 WHERE BMXZ00='z' AND BMBH00=Vyfbmbh; --是否自动进行药房入库确认 if ((Vyfzdqr='Y') AND (Vcounter1=1) or (Vcounter2>0)) and (VLYFS00<>'4') and (Vcklxbh<>'25') then SP_YF_YPSLRKQR( Pypqldh, --输入 药品请领单号 Vyfbmbh, --输入 药房部门编号 Pczy000, --输入 确认人编号 Vrkdh00 --输出 药品入库单号 ); end if; --如果属于库存出给其他科室,增加科室三级库存; select count(*) into Vcounter2 from BM_BMBM00 a where BMBH00=Vyfbmbh and exists (select 1 from xt_yyxt00 where xtdm00='F' and bmxz00 like '%'||a.BMXZ00||'%'); if nvl(VSSDH00,0)=0 and (Vcklxbh='05' and Vcounter2<>1 or Vcklxbh='25') then select count(1) into Vcounter from bm_bmbm00 where bmbh00=Vykbmbh and bmxz00 in ('c'); if Vcounter>0 then --select count(1) into Vcounter from bm_bmbm00 where bmbh00=Vyfbmbh and bmxz00 not in ('c','k'); --if (VLYFS00='5') or (Vcounter>0) then SP_KS_YPRKQR( '0', --仓库或供应室 标志:0库存物资,1供应室 Pypqldh, --出库单号 Pczy000, --操作员编码 Pczyks0, --操作员科室 Pcommit, --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); --end if; end if; end if; --非药房科室并且非供应室部门,直接置标志'2'领用部门入库,入库类型为请领 --select count(*) into Vcounter2 from BM_BMBM00 where BMXZ00 in ('k') and BMBH00=Vyfbmbh; --select count(*) into Vcounter2 from BM_BMBM00 a where BMBH00=Vyfbmbh and exists (select 1 from xt_yyxt00 where xtdm00='F' and bmxz00 like '%'||a.BMXZ00||'%'); --2019.10.18 update 增加条件and QLZT00<>'2' if (Vcounter1<>1) and (Vcklxbh='05') and (Vcounter2<>1) and (nvl(VSSDH00,0)=0) or (VLYFS00='4') or (Vcklxbh='25') THEN update YK_YPQLD0 set QLZT00='2' where YPQLDH=Pypqldh and QLZT00<>'2'; end if; -------判断是否属于科室耗材请领--------------------------- -------注释SP_KS_YPSLRKQR,改为调用SP_KS_YPRKQR---------------- /* select count(1) into Vcounter from bm_bmbm00 where bmbh00=Vykbmbh and bmxz00='c'; if Vcounter>0 then -------判断是否非供应室部门 select count(1) into Vcounter from bm_bmbm00 where bmbh00=Vyfbmbh and bmxz00<>'k'; if Vcounter>0 then SP_KS_YPSLRKQR( Pypqldh, --输入药品请领单号 Pczy000, --操作员编码 Pczyks0, --操作员科室 Pcommit, --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); end if; end if; */ -----------------处理请领单没有全部出库的情况下,剩余请领数量重新生成一个请领单------------------- select count(*) into Vcounter1 from YK_YPQLMX a where a.YPQLDH=Pypqldh and (a.QLSL00+round(nvl(a.JLQLSL,0)*nvl(a.JLZHL0,0)/a.ZHL000,3))>(a.SFSL00+round(nvl(a.JLSFSL,0)*nvl(a.JLZHL0,0)/a.ZHL000,3)); if Vcounter1>0 then begin select * into V_YK_YPQLD0 from YK_YPQLD0 where YPQLDH=Pypqldh; select SF_YK_GETLSH('YKYPQLDH',V_YK_YPQLD0.YKBMBH) into Vypqldh from dual; SP_YK_YPQLD0_EDIT(0,Vypqldh,V_YK_YPQLD0.YKBMBH,V_YK_YPQLD0.CKLXBH,V_YK_YPQLD0.CKQXBH,V_YK_YPQLD0.LYRBH0,'0', to_char(Vsysdate,'YYYYMMDD'),to_char(Vsysdate,'HH24:MI:SS'),'N',null,substrb(VBZ0000||'补出库单号:'||Pypqldh,1,100),null,Pczy000, Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00,null,null,null,null,null,'N','3','N'); if Pzxcgbz = 0 then Ptsxx00 := '剩余出库数量重新生成出库单失败'; raise Ecustom; end if; open CUR_NEWQLD_YPQLMX; loop fetch CUR_NEWQLD_YPQLMX into LV_NEWQLD_YPQLMX; exit when CUR_NEWQLD_YPQLMX%notfound; select K2ZJJL into VK2ZJJL from BM_YD0000 where YPNM00=LV_NEWQLD_YPQLMX.YPNM00; select (LV_NEWQLD_YPQLMX.QLSL00+trunc(nvl(LV_NEWQLD_YPQLMX.JLQLSL,0)/VK2ZJJL))- (LV_NEWQLD_YPQLMX.SFSL00+trunc(nvl(LV_NEWQLD_YPQLMX.JLSFSL,0)/VK2ZJJL)) into VQLSL00 from dual; select mod( round( ( (LV_NEWQLD_YPQLMX.QLSL00+round(nvl(LV_NEWQLD_YPQLMX.JLQLSL,0)/VK2ZJJL,3))- (LV_NEWQLD_YPQLMX.SFSL00+round(nvl(LV_NEWQLD_YPQLMX.JLSFSL,0)/VK2ZJJL,3)) )*VK2ZJJL --round end ),VK2ZJJL) into VJLQLSL from dual; Vypqlpc := null; SP_YK_YPQLMX_EDIT( 0 , --操作标志 0:增加 1:修改 2:删除 Vypqlpc , --药品请领批次'; Vypqldh , --请领单号'; LV_NEWQLD_YPQLMX.YPNM00, --药品内码'; LV_NEWQLD_YPQLMX.YPMC00, --药品名称'; LV_NEWQLD_YPQLMX.YPGG00, --规格'; LV_NEWQLD_YPQLMX.QLDW00, --请领单位'; LV_NEWQLD_YPQLMX.GJDJ00, --购进单价(请领单位)(最近一批)'; LV_NEWQLD_YPQLMX.QLDJ00, --请领单价(请领单位)'; LV_NEWQLD_YPQLMX.ZHL000, --转换率(请领单位/剂量单位)'; VQLSL00 , --请领数量(请领单位)'; 0 , --实发数量(请领单位)'; VJLQLSL , --计量请领数量(余数)'; LV_NEWQLD_YPQLMX.JLQLDW, --计量请领单位'; LV_NEWQLD_YPQLMX.JLZHL0, --计量转换率(计量/剂量)'; 0 , --计量实发数量(余数)'; 'Z' , --冲销标志''Z''正常,''-''冲销记录,''+''被冲记录'; null , --冲销请领批次(自动 F.K=YK.YPQLMX.YPQLPC)'; '补出库单号:'||Pypqldh , --备注,如果为报损出库记录报损原因'; LV_NEWQLD_YPQLMX.FPH000 , --发票号'; LV_NEWQLD_YPQLMX.KL0000, --扣率'; LV_NEWQLD_YPQLMX.PFDJ00, --批发单价'; LV_NEWQLD_YPQLMX.FPRQ00 , --发票日期'; null , --入库批次'; null , --生产批次'; null , --用药编号ID'; null , --编号'; Pczy000 , --操作员 Pczyks0 , --操作员科室 'N' , --是否提交 Pzxcgbz , --执行成功标志 1成功 0失败 Ptsxx00 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 LV_NEWQLD_YPQLMX.FPDM00 ); end loop; close CUR_NEWQLD_YPQLMX; end; end if; -----------------处理临时表数据--------- delete from YK_YPQLMX_TEMP where YPQLDH=Pypqldh and (SYSPID=Psyspid or SYSPID=-99); Pzxcgbz:=1; if pcommit='Y' then commit; end if; exception when No_Data_Found then raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm||Ptsxx00,1,240)); when Ecustom then raise_application_error(-20010,substrb(Ptsxx00||'!*',1,240)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;