create or replace procedure SP_YF_YPCKD0_AUDIT -- modification history -- Person Date Comments -- lintj 2012.06.15 create -- qks 2012.10.07 库存预扣判断YF_KCYKMX;前台出库单录入时,“处方出库”出库类型要屏蔽掉;科室借药批次预扣单独处理 -- qks 2012.10.15 科室借药不预扣;2012.10.16再修改 -- zhangwz 2012.10.23 调拨出库时生成的入库药房的入库单增加出库时调拨单的号码。 -- zhangwz 2012.10.31 YF_YPCKMX.GJDJ00 and LSDJ00 统一变更为存储库存单位的 GJDJ00 and LSDJ00 ,不和YF_YPCKMX.CKDW00 挂钩起来. -- qks 2012.11.19 新增参数 YF_YPDBDQR:药房调拨出库单,是否由调入科室一起确认 -- qks 2012.11.21 科室借药前台选择是否预扣,同时处理全部归还预扣;部分归还预扣放在前台处理。 -- qks 2012.12.14 如果YF_YPCKMX.YKRKPC=0,那么需要重新分配批次库存明细(目前使用预扣库存)。 -- zhangwz 2013.01.09 获取库存预扣数量(批次) 处对于 V_PCYKSL 的处理没有使用ZHL000. -- qks 2013.01.31 科室借药确认后写入表YF_KSJYJL -- lintj 2013.03.16 CKLXBH='03'在这里不做扣库存、产生明细账等操作,发药时已经做过了 -- zhangwz 2013.03.18 个人借药类科室借药单确认后不写入YF_KSJYJL(CKLXBH='08' and CKBMBH=55555). -- zhangwz 2013.04.11 为了对借药单(CKLXBH='08')确认的时候如果是YF_YPCKMX.YKRKPC=0的数据能重新分配批次,把前台的update CKZT00=1 并修改重新分配批次的控制 放到过程里面来 -- qks 2013.05.09 C_YPRKMX增加条件 and SJKCSL>0 -- qks 2013.06.06 非预扣的借药单不进行重新分配批次 -- zhangwz 2013.06.21 对于盘亏出库的情况下干预失效的药品不要进行“批次库存已失效”限制 -- qks 2013.09.13 如果属于供应室出给其他科室,增加科室三级库存; -- qks 2014.01.07 增加单据状态判断; -- qks 2014.04.16 供应室:按最近在用批次全部出完后,再按先进先出原则处理; -- qks 2014.04.18 YF_YPCKD0.CKLXBH='01',也增加科室三级库存; -- qks 2014.04.21 检验科也当二级库房管理; -- qks 2015.10.14 检验科进行申领单出库确认出现“批次库存不足”异常提示 by KCWZ9-20151014-001 -- qks 2015.11.20 病区中心药房发现有些科室借药明细药品的出库数量跟“寄存借药查询对抵”中的借药明细数量对不上 by YF9-20151120-002 -- qks 2016.05.30 修改针对YF_PCKCMX.KCLSH0排序或取最大最小值问题,YF_PCKCMX.KCLSH0定义是字符型,没转换为数值型; by YF9-20160530-001 -- qks 2016.12.28 省人民反馈出现死锁问题,c_YPCKMX、c_YPCKMX0增加order by ypnm00; by YF9-20161228-001 -- qks 2017.04.25 限制调拨单被重复进行“出库单审核”问题; by YF9-20170425-001 -- qks 2017.04.28 对于退库药品也不要进行“批次库存已失效”限制; by YF9-20170502-002 -- gzj 2019.05.31 允许科室借药增减库存,参数控制 by YF9-20190527-002 -- gzj 2019.07.18 老年医院科室借药不扣预扣库存同时写入帐表 By YF9-20190718-001 -- gzj 2019.08.24 科室借药归还占用预扣解除,同时没有药品批次的话重新分配 YF9-20190824-001 -- qks 2019.09.10 当参数YF_YPDBDQR=N,修改调拨出库单对应的出库状态(CKZT00)字段值; for YF9-20190902-003 -- qks 2019.09.24 参数YF_YPDBDQR功能扩展,增加了M值:由药房调出科室和退到药库一起确认; for YF9-20190919-001 -- qks 2019.09.26 对YF_YPCKMX.YKRKPC=0数据明细进行遍历 补回条件; for YF9-20190926-003 -- qks 2020.07.02 处理升级库表YF_PCKCMX中,存在同个药品的SCPH00不一致(跟YK_YPRKMX也对不上),YKRKPC一致情况: 游标c_YPCKMX增加排序字段YPCKPC; for YF9-20200702-001 -- qks 2020.07.21 解决:HIS升级后,对升级前医嘱药品进行退药确认,药房账页表没有生成,药品库存也没增加。 ( Pckdh00 in varchar2 , --出库单号 Pqrrq00 in char , --确认日期 Pqrsj00 in char , --确认时间 Pczy000 in number , --操作员 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ) as Vsysdate date; --日期变量 Vcounter number(14,4); --计数器变量 V_CKBMMC BM_BMBM00.BMMC00%type; V_SJKCSL YF_YPKCXX.SJKCSL%type; v_CKLXMC YF_YPMXZ0.RCLXMC%type; Vmxzlsh YF_YPMXZ0.MXZLSH%type; Vjcdj00 YF_YPMXZ0.JCDJ00%type; V_FYBZ00 BM_BMBM00.FYBZ00%type; V_YKKCSL YF_YPKCXX.YKKCSL%type; V_SFZBYP BM_YD0000.SFZBYP%type; V_LSJ000 YF_YPKCXX.LSDJ00%type; v_GJJ000 YF_YPKCXX.GJDJ00%type; V_LSJCK0 BM_YD0000.LSJ000%type; V_GJJCK0 BM_YD0000.GJJ000%type; v_LSJGL0 XT_XTCS00.VALUE0%type; --药库药房零售价是否独立管理 v_LSJGL2 XT_XTCS00.VALUE0%type; --药房零售价是否独立管理 V_K2J000 BM_YD0000.K2J000%type; V_RKDH00 YF_YPRKD0.RKDH00%type; V_PCSJKC YF_PCKCMX.SJKCSL%type; --批次实际库存 V_PCYKKC YF_PCKCMX.YKKCSL%type; --批次预扣库存 V_ZDRKRQ XT_XTCS00.VALUE0%type; V_ZY0000 YF_YPMXZ0.ZY0000%type; V_CKJE00 YF_YPCKMX.CKJE00%type; --出库金额 V_GJCKJE YF_YPCKMX.CKJE00%type; --购进出库金额 V_KSJKC0 XT_XTCS00.VALUE0%type; v_ZDGXLJ XT_XTCS00.VALUE0%type; V_KCYKSL YF_KCYKMX.YKSL00%type; --库存预扣数量(剂量单位) V_KCLSH0 YF_KCYKMX.KCLSH0%type; V_PCYKSL YF_KCYKMX.YKSL00%type; --批次库存预扣数量(剂量单位) V_SFYX00 YF_PCKCMX.SFYX00%type; --批次库存是否有效 V_cklsj0 YF_PCKCMX.LSDJ00%type; V_ckgjj0 YF_PCKCMX.GJDJ00%type; V_LSJCK1 BM_YD0000.LSJ000%type; V_GJJCK1 BM_YD0000.GJJ000%type; Vk2j000 BM_YD0000.K2J000%type; Vypckpc YF_YPCKMX.YPCKPC%type; Vyksl00 number; Vcksl00 number; V_TEMP00 number(20,4); V_TEMP01 number(20,4); V_CKKCJY XT_XTCS00.VALUE0%type; --出库是否校验库存 YF_PDQJSFYXFY XT_XTCS00.value0%type;--盘点期间是否允许发药 ,Y允许 N不允许 YF_KSJYSFZJKC XT_XTCS00.value0%type;--科室借药是否增加库存 Vdbdqr0 XT_XTCS00.VALUE0%type; --药房调拨出库单,是否由调入科室一起确认 v_TEMPCS XT_XTCS00.VALUE0%type; R_YF_YPCKD0 YF_YPCKD0%rowtype; V_EXIST0 char(1); V_STYKBZ number(1); --收退预扣标志:0预扣1退预扣 VJYGH00 number(1); --借药归还:2借药4归还 V_SQL varchar2(200); Vcxbz00 YF_YPCKMX.CXBZ00%type; V_SFSJTY number; --是否对升级前医嘱药品进行退药:0否 1是 --2020.06.27 游标c_YPCKMX增加排序字段YPCKPC --2020.07.21 新增条件or V_SFSJTY=1 cursor c_YPCKMX IS select * from YF_YPCKMX where CKDH00=R_YF_YPCKD0.CKDH00 and (R_YF_YPCKD0.CKLXBH<>'03' or V_SFSJTY=1) order by ypnm00,YPCKPC; v_YPCKMX c_YPCKMX%rowtype; cursor C_YPCKMX_0 is --定义YF_YPCKMX.YKRKPC=0数据集游标 select * from YF_YPCKMX where CKDH00=R_YF_YPCKD0.CKDH00 and YKRKPC=0 order by ypnm00; Verrmsg varchar2(255); --错误提示变量 Ecustom exception; --错误变量 V_count number(2,0); begin Pzxcgbz := 0; Vsysdate := sysdate; Pxxxx00 :=nvl(to_char(Pckdh00),'null')||','||nvl(to_char(Pqrrq00),'null')||','|| nvl(to_char(Pqrsj00),'null')||','||nvl(to_char(Pczy000),'null')||','||nvl(to_char(Pczyks0),'null')||','||nvl(to_char(Pcommit),'null'); SP_TransLog(Vsysdate,'SP_YF_YPCKD0_AUDIT',Pczy000,Pczyks0,Pxxxx00); Verrmsg:=''; select * into R_YF_YPCKD0 from YF_YPCKD0 where CKDH00 = Pckdh00; --取出药房零售价是否独立管理参数 select nvl(max(trim(VALUE0)),'N') into v_LSJGL0 from XT_XTCS00 where NAME00='YK_YF_LSJSFDLGL'; --取出药房零售价是否独立管理参数 select nvl(max(trim(VALUE0)),'N') into v_LSJGL2 from XT_XTCS00 where NAME00='YF_SFDLSJGL'; --取系统参数:是否自动进行药房入库确认 --select nvl(max(trim(VALUE0)),'N') into V_ZDRKRQ from XT_XTCS00 where NAME00='YK_YFZDRKRQ'; select nvl(max(trim(VALUE0)),'Y') into v_ZDGXLJ from XT_XTCS00 where NAME00='YF_RKSFZDGXLSJ'; --取系统参数:出库是否校验库存 select nvl(max(trim(VALUE0)),'Y') into V_CKKCJY from XT_XTCS00 where NAME00='YF_KSLYCKSFJXKCPD'; select nvl(max(trim(VALUE0)),'N') into Vdbdqr0 from XT_XTCS00 where NAME00='YF_YPDBDQR'; ----------------通过游标在明细表中循环实现修改库存 select nvl(max(trim(VALUE0)),'N') into YF_PDQJSFYXFY from XT_XTCS00 where NAME00='YF_PDQJSFYXFY'; --科室借药是否增减库存 select nvl(max(trim(VALUE0)),'0') into YF_KSJYSFZJKC from XT_XTCS00 where NAME00='YF_KSJYSFZJKC'; if (YF_PDQJSFYXFY='N') or (R_YF_YPCKD0.CKLXBH<>'03') then select FYBZ00 into V_FYBZ00 from BM_BMBM00 where BMBH00=R_YF_YPCKD0.YFBMBH; if ((V_FYBZ00='3') and (R_YF_YPCKD0.CKBMBH<>99999)) then Verrmsg:='药房正在盘点,不能进行进出库确认'; raise Ecustom; end if; end if; if (Pqrrq00 is not null) and (R_YF_YPCKD0.QRRQ00 IS NOT NULL) then Verrmsg:='单据已出库确认过,请重新查找!'; raise Ecustom; end if; ---2012.12.14 qks 对YF_YPCKMX.YKRKPC=0数据明细进行遍历,进行逐条记录详细出库操作 Begin---- --2019.09.26 补回条件 and R_YF_YPCKD0.JYSFYK='0' if R_YF_YPCKD0.CKZT00='0' and (not (R_YF_YPCKD0.CKLXBH='08' and R_YF_YPCKD0.JYSFYK='0' and YF_KSJYSFZJKC<>'1')) then for ckmx in C_YPCKMX_0 loop declare --定义药品入库批次游标,按药品效期批号排序(先进先出) cursor C_YPRKMX is select X.* from YF_PCKCMX X where YFBMBH=R_YF_YPCKD0.yfbmbh and YPNM00=ckmx.YPNM00 and YKKCSL>0 and SJKCSL>0 order by to_number(KCLSH0); begin Vyksl00 := ckmx.cksl00*ckmx.ZHL000; --药品出库数量(剂量单位) for rkmx in C_YPRKMX loop select K2J000 into Vk2j000 from BM_YD0000 where YPNM00=ckmx.YPNM00; --改用判断当前预扣批次库存是否充足 if rkmx.YKKCSL>=Vyksl00 then --如果当前批次库存是否充足,则按出库数量出库 Vcksl00:=Vyksl00; else -- 如果当前批次库存不足,则按当前批次库存数量出库,即该批全部出库. Vcksl00:=rkmx.YKKCSL; end if; Vypckpc := null; --2020.07.21 'Z'->Vcxbz00 if Vcksl00<0 then Vcxbz00 := '-'; else Vcxbz00 :='Z'; end if; SP_YF_YPCKMX_EDIT(0,Pckdh00,Vypckpc,null,ckmx.YPNM00,ckmx.YPMC00,ckmx.YPGG00,SF_YF_YPSLZH(Vcksl00,ckmx.YPNM00,0), rkmx.GJDJ00,rkmx.LSDJ00,rkmx.GJDJ00, SF_YF_YPSLZH(Vcksl00,ckmx.YPNM00,1),SF_YF_YPSLZH(Vcksl00,ckmx.YPNM00,2),Vcxbz00, null,'重新分配批次',rkmx.SCPH00,rkmx.YPSXRQ,round(Vcksl00*rkmx.LSDJ00/Vk2j000,2),Pczy000,Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00,rkmx.YKRKPC); if Pzxcgbz = 0 then Ptsxx00 := '药品出库明细操作错误(1)'; raise Ecustom; end if; Vyksl00 :=Vyksl00-Vcksl00; exit when Vyksl00<=0; end loop; --出库未出完 if Vyksl00 > 0 then Ptsxx00 := '药品"'||ckmx.YPMC00||'['||ckmx.YPGG00||']" YPNM='||to_char(ckmx.YPNM00)|| ' 出库数量'||SF_YF_YPSLZH(nvl(ckmx.cksl00,0),ckmx.YPNM00,3)||' 无足够库存出库'; raise Ecustom; end if; end; end loop; delete from YF_YPCKMX where CKDH00=R_YF_YPCKD0.CKDH00 and YKRKPC=0; end if; ---2012.12.14 qks 对YF_YPCKMX.YKRKPC=0数据明细进行遍历,进行逐条记录详细出库操作 End---- --2020.07.21 解决:HIS升级后,对升级前医嘱药品进行退药确认,药房账页表没有生成,药品库存也没增加。 V_SFSJTY := 0; if R_YF_YPCKD0.CKLXBH='03' then select count(1) into V_SFSJTY from YF_YZYPSQ a where CKDH00=R_YF_YPCKD0.CKDH00 and YPZSL0<0 and nvl(fyrq00,'20991231')<>'20991231' and rownum=1 and not exists (select 1 from YF_PCCKMX where LYDJH0=to_char(a.YPQLPC) and DJLX00='2' and MZZYBZ='1'); end if; OPEN c_YPCKMX; fetch c_YPCKMX into v_YPCKMX; while c_YPCKMX%FOUND loop --取基本信息 select SFZBYP,LSJ000,K2J000 into V_SFZBYP,V_LSJ000,V_K2J000 from BM_YD0000 where YPNM00=v_YPCKMX.YPNM00; select LSDJ00,GJDJ00 into V_LSJ000,V_GJJ000 from YF_YPKCXX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; ------判断库存是否充足--------- begin select nvl(SJKCSL,0),nvl(YKKCSL,0) into V_SJKCSL,V_YKKCSL from YF_YPKCXX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; exception when others then Verrmsg:='药品" '||Trim(V_YPCKMX.YPMC00)||'"在药品隶属中已删除'; raise Ecustom; end; ------获取库存预扣数量------ select nvl(round(sum(YKSL00*ZHL000),3),0) into V_KCYKSL from YF_KCYKMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; if R_YF_YPCKD0.CKLXBH='07' then--盘亏出库不管预扣数量 V_KCYKSL:=0; end if; if NOT ((R_YF_YPCKD0.CKLXBH='08') and (R_YF_YPCKD0.JYSFGH='Y' or R_YF_YPCKD0.JYSFYK='0')) then --科室借药归还不判断库存 --避免药品经过换算,后产生0.001的差额,使药品无法出库 V_TEMP00:=ROUND((V_SJKCSL-V_KCYKSL)/v_YPCKMX.ZHL000,4)-v_YPCKMX.CKSL00; if V_TEMP00<0 and ABS(V_TEMP00)>=0.001 and (V_CKKCJY<>'N' or (V_CKKCJY='N' and R_YF_YPCKD0.CKLXBH<>'01')) then --过滤科室领药类单据 close c_YPCKMX; Verrmsg:='药品:'||RTRIM(V_YPCKMX.YPMC00)||',库存不足 '||to_char(V_TEMP00)||','||to_char(ROUND((V_SJKCSL-V_KCYKSL)/v_YPCKMX.ZHL000,4))||' '||to_char(v_YPCKMX.CKSL00); raise Ecustom; end if; end if; -------判断批次库存是否充足----------- --2020.07.21 新增条件or V_SFSJTY=1 if v_LSJGL2='Y' and (R_YF_YPCKD0.CKLXBH<>'03' or V_SFSJTY=1) and (V_CKKCJY<>'N' or (V_CKKCJY='N' and R_YF_YPCKD0.CKLXBH<>'01')) --批号为空即医嘱出库,不在这判断 and (NOT ((R_YF_YPCKD0.CKLXBH='08') and (R_YF_YPCKD0.JYSFGH='Y' or (R_YF_YPCKD0.JYSFYK='0' and YF_KSJYSFZJKC<>'1')))) then begin select nvl(min(to_number(KCLSH0)),'0') into V_KCLSH0 from YF_PCKCMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC --2015.10.14 and (v_YPCKMX.CKSL00>0 and SJKCSL>0 or v_YPCKMX.CKSL00<=0); exception when others then V_KCLSH0 := '0'; end; begin --注意V_PCSJKC不扣除V_PCYKSL select ROUND(SJKCSL/v_YPCKMX.ZHL000,3),YKKCSL,SFYX00,LSDJ00,GJDJ00 into V_PCSJKC,V_PCYKKC,V_SFYX00,V_cklsj0,V_ckgjj0 from YF_PCKCMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; exception when others then V_PCSJKC := 0; V_SFYX00 := '0'; V_KCLSH0 := '0'; end; if (V_SFYX00 <> 'Y') and (v_YPCKMX.CKSL00>0) then if V_SFYX00 = '0' then Verrmsg:='药品"'||RTRIM(V_YPCKMX.YPMC00||'('||v_YPCKMX.SCPH00||')')||'",批次库存不存在!'; raise Ecustom; elsif (V_SFYX00 = 'N') and (R_YF_YPCKD0.CKLXBH<>'07') and (R_YF_YPCKD0.CKLXBH<>'05') then Verrmsg:='药品"'||RTRIM(V_YPCKMX.YPMC00||'('||v_YPCKMX.SCPH00||')')||'",批次库存已失效'; raise Ecustom; end if; end if; ------获取库存预扣数量(批次)------ select nvl(round(sum(YKSL00*ZHL000),3),0) into V_PCYKSL from YF_KCYKMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and KCLSH0=V_KCLSH0; if R_YF_YPCKD0.CKLXBH='07' then--盘亏出库不管预扣数量 V_PCYKSL:=0; end if; begin--避免药品经过换算,后产生0.001的差额,使药品无法出库 select ROUND((SJKCSL-V_PCYKSL)/v_YPCKMX.ZHL000,4)-v_YPCKMX.CKSL00 into V_TEMP01 from YF_PCKCMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; exception when others then V_TEMP01:=0; end; if (V_TEMP01<0 and ABS(V_TEMP01)>=0.001) then close c_YPCKMX; Verrmsg:='药品:'||RTRIM(V_YPCKMX.YPMC00||'('||v_YPCKMX.SCPH00||')')||',批次库存不足'||to_char(V_TEMP01)||','||V_KCLSH0||','; raise Ecustom; end if; end if; --出库调拨单未审核才修改库存 if not ((Vdbdqr0='Y') and (R_YF_YPCKD0.CKLXBH='11') and (instr(nvl(R_YF_YPCKD0.BZ0000,' '),'调拨未确认')<=0)) then if (R_YF_YPCKD0.CKLXBH = '03') or (R_YF_YPCKD0.CKLXBH = '08' and YF_KSJYSFZJKC <> '1') then V_count := 0; else --除借药和医嘱出库以外的其它出库方式 if ROUND(V_SJKCSL/v_YPCKMX.ZHL000,3)=v_YPCKMX.CKSL00 then --避免药品经过换算,后产生0.001的差额,使药品无法出库 V_TEMP01:=ROUND(V_YKKCSL/v_YPCKMX.ZHL000,4)-v_YPCKMX.CKSL00; V_YKKCSL:=V_YKKCSL-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3); if V_YKKCSL>0 then V_YKKCSL:=0; elsif (V_YKKCSL<0) and abs(v_temp01)<0.001 then V_YKKCSL:=0; end if; update YF_YPKCXX SET YKKCSL=V_YKKCSL, SJKCSL=0 where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; --批次库存全清零 update YF_YPRKMX X SET X.PCKCSL=0 where exists (select 1 from YF_YPRKD0 D where X.RKDH00=D.RKDH00 and YFBMBH=R_YF_YPCKD0.YFBMBH) and X.PCKCSL>0 and YPNM00=v_YPCKMX.YPNM00; else update YF_YPKCXX SET YKKCSL=nvl(YKKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), SJKCSL=nvl(SJKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3) where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; if v_LSJGL2='N' then --多零售价管理不做入库单的批次库存 if v_YPCKMX.CKSL00>0 then --扣除批次库存 select count(1) into V_count from BM_YD0000 where YPNM00=v_YPCKMX.YPNM00 and SFKYYY='Y'; if V_count=0 then --科研用药不减少入库明细表的批次库存 SP_YF_JSPCKC(R_YF_YPCKD0.YFBMBH,v_YPCKMX.YPNM00,ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)); end if; ELSE --增加批次库存 SP_YF_ZJPCKC(R_YF_YPCKD0.YFBMBH,v_YPCKMX.YPNM00,-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)); end if; end if; end if; end if; --扣除批次库存 if v_LSJGL2='Y' then if R_YF_YPCKD0.CKLXBH='08' then --科室借药 V_count := 0; --借药全部归还:JYSYSL前台取消更新到0,放在该过程一起确认 if (R_YF_YPCKD0.JYSFYK='1') and (YF_KSJYSFZJKC<>'1') then if (R_YF_YPCKD0.JYSFGH='Y' or R_YF_YPCKD0.JYSFGH='N') then --处理批次预扣 --v_count := 1; if v_YPCKMX.CXBZ00='Z' then select decode(R_YF_YPCKD0.JYSFGH,'Y',1,0) into V_STYKBZ from dual; elsif (v_YPCKMX.CXBZ00 = '-') and (R_YF_YPCKD0.JYSFGH='N') then --“未归还”单据冲销:要退预扣,同时数量要改用正数。 V_STYKBZ := 1; --v_count := -1; else V_STYKBZ := -1; end if; if V_STYKBZ >=0 and v_YPCKMX.JYSYSL<>0 then SP_YF_KCYKMX( V_STYKBZ, --0 预扣 1退预扣 v_YPCKMX.YPCKPC, --来源单据号 '0', --门诊住院标志 '0'门诊 '1'住院 R_YF_YPCKD0.YFBMBH, --药房部门编号 v_YPCKMX.YPNM00, --药品内码 --ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), --出库数量 --v_count*v_YPCKMX.CKSL00, --出库数量 v_YPCKMX.JYSYSL, --出库数量 v_YPCKMX.CKDW00, --出库单位 v_YPCKMX.ZHL000, --转换率 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 V_LSJCK1, --出库零售价 V_GJJCK1, --出库购进价 v_YPCKMX.YKRKPC, --药库入库批次,Pykrkpc>0情况:直接指定药库入库批次进行预扣 '3' --单据类型0门诊处方 1 住院处方 2住院医嘱 3借药单 ); end if; end if; end if; --2013.01.31 qks 科室借药确认后写入表YF_KSJYJL if (v_YPCKMX.JYSYSL<>0) or (v_YPCKMX.CKSL00<>0) then VJYGH00 := 0; --借药归还 V_count := 0; --单据类型 if v_YPCKMX.CXBZ00='Z' then select decode(R_YF_YPCKD0.JYSFGH,'Y',4,2) into VJYGH00 from dual; -- VJYGH00= 2借药,4归还 elsif (v_YPCKMX.CXBZ00 = '-') and (R_YF_YPCKD0.JYSFGH='N') then --“未归还”单据冲销:要退预扣,同时数量要改用正数。 VJYGH00 := 4; end if; if VJYGH00 = 4 then V_count := 5; else V_count:=VJYGH00; end if; if R_YF_YPCKD0.CKBMBH=55555 then VJYGH00:=0; V_count:=0; end if; --个人借药类科室借药单确认后不写入YF_KSJYJL(CKLXBH='08' and CKBMBH=55555). if VJYGH00=2 and V_count=2 then V_YKKCSL:=v_YPCKMX.CKSL00; else V_YKKCSL:=v_YPCKMX.JYSYSL; end if; if VJYGH00>0 and V_YKKCSL<>0 then SP_YF_KSJYMX( VJYGH00, --1寄药2借药3取出(用于归还)4归还VJYGH00 V_count, --单据类型 1:YF_YZYPSQ.YPQLPC,2:YF_YPCKMX.YPCKPC,3:YF_KSJYJL.LSH000,4:YF_YZYPSQ.YPQLPC(自动归还),5:YF_YPCKMX.YPCKPC(手工归还) v_YPCKMX.YPCKPC, --来源单据号 R_YF_YPCKD0.yfbmbh, --药房部门编号 R_YF_YPCKD0.CKBMBH, --科室部门编号 v_YPCKMX.ypnm00, --药品内码 --v_YPCKMX.JYSYSL, --出库数量(处方单位)(病区退药传入寄存负数,其他情况为正数) V_YKKCSL, --出库数量(处方单位)(病区退药传入寄存负数,其他情况为正数) v_YPCKMX.CKDW00, --处方单位 v_YPCKMX.ZHL000, --转换率 v_YPCKMX.LSDJ00, --零售单价(库存单位) Pczy000 , --操作员 Pczyks0 , --操作员科室 'N' , --是否提交 Pzxcgbz , --执行成功标志 1成功 0失败 Ptsxx00 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); end if; end if; if R_YF_YPCKD0.JYSFGH='Y' then --归还 update YF_YPCKMX SET JYSYSL=0 where YPCKPC=v_YPCKMX.YPCKPC and JYSYSL>0; end if; end if; if (R_YF_YPCKD0.CKLXBH<>'08') or (YF_KSJYSFZJKC='1') then if v_YPCKMX.CXBZ00='Z' then --库存为零,删除 if (V_PCSJKC-v_YPCKMX.CKSL00)=0 then update YF_PCKCMX SET YKKCSL=0,SJKCSL=0, ZHXGRQ=to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ=to_char(Vsysdate,'HH24:MI:SS') where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; ELSE --如果预扣数小于零,以零记录 if V_PCYKKC-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0 then V_PCYKKC:=0; ELSE V_PCYKKC:=V_PCYKKC-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3); end if; --修改批次库存 update YF_PCKCMX SET YKKCSL=V_PCYKKC, SJKCSL=nvl(SJKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), ZHXGRQ=to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ=to_char(Vsysdate,'HH24:MI:SS'), ZHQLSJ=decode(R_YF_YPCKD0.CKLXBH,'01',to_char(Vsysdate,'YYYYMMDDHH24:MI:SS'),NULL) where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; end if; end if; --零批次库存处理 SP_YF_CLLSL0(R_YF_YPCKD0.YFBMBH,v_YPCKMX.YPNM00); if (v_ZDGXLJ = 'N') and (v_YPCKMX.CXBZ00='-') then update YF_YPKCXX SET --LSDJ00=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2), --GJDJ00=ROUND(v_YPCKMX.GJDJ00*v_K2J000/v_YPCKMX.ZHL000,2) LSDJ00=ROUND(v_YPCKMX.LSDJ00,2), GJDJ00=ROUND(v_YPCKMX.GJDJ00,2) where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; end if; end if; --------------退药-------------- if (v_YPCKMX.CXBZ00='-') and (R_YF_YPCKD0.CKLXBH<>'08') then begin select '1' into V_EXIST0 from YF_PCKCMX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; exception when others then V_EXIST0:='0'; end; --存在则修改 if V_EXIST0='1' then update YF_PCKCMX SET YKKCSL=nvl(YKKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), SJKCSL=nvl(SJKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), ZHXGRQ=to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ=to_char(Vsysdate,'HH24:MI:SS') where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00 and YKRKPC=v_YPCKMX.YKRKPC and KCLSH0=V_KCLSH0; ELSE insert into YF_PCKCMX( KCLSH0, YFBMBH, YPNM00, LSDJ00, SCPH00, YKKCSL, SJKCSL, GJDJ00, YKRKPC, ZHXGRQ, ZHXGSJ) values( SQ_YF_PCKCMX_KCLSH0.NEXTVAL, R_YF_YPCKD0.YFBMBH, v_YPCKMX.YPNM00, -- ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,4), nvl(trim(v_YPCKMX.SCPH00),' '), ROUND(v_YPCKMX.LSDJ00,4), nvl(trim(v_YPCKMX.SCPH00),' '), ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3), -- ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,4), ROUND(v_YPCKMX.GJDJ00,4), V_YPCKMX.YKRKPC,to_char(Vsysdate,'YYYYMMDD'),to_char(Vsysdate,'HH24:MI:SS') ); end if; end if; -- end if; --多批次处理 -----------------记账------------ if (R_YF_YPCKD0.CKLXBH<>'08') or (YF_KSJYSFZJKC='1') then if R_YF_YPCKD0.CKBMBH=99999 then V_CKBMMC:='盘亏出库'; elsif R_YF_YPCKD0.CKBMBH=88888 then V_CKBMMC:='报损出库'; ELSE select BMMC00 into V_CKBMMC from VW_YF_YPCKFX where BMBH00=R_YF_YPCKD0.CKBMBH; end if; select CKLXMC into v_CKLXMC from BM_YFCKLX where CKLXBH=R_YF_YPCKD0.CKLXBH; select SJKCSL into V_SJKCSL from YF_YPKCXX where YFBMBH=R_YF_YPCKD0.YFBMBH and YPNM00=v_YPCKMX.YPNM00; V_SJKCSL:=ROUND(V_SJKCSL/V_K2J000,3); V_ZY0000:=V_CKBMMC; --批次可能调价,需要重新修正出库明细表的零售单价和购进单价(不包括病区医嘱领药出库) V_LSJCK1 := v_YPCKMX.LSDJ00; V_GJJCK1 := v_YPCKMX.GJDJ00; if (v_LSJGL2='Y') and (R_YF_YPCKD0.CKLXBH<>'03') then V_LSJ000:=V_cklsj0; V_GJJ000:=V_ckgjj0; V_LSJCK1:=v_YPCKMX.LSDJ00; V_GJJCK1:=v_YPCKMX.GJDJ00; if (abs(ROUND((v_LSJCK1-V_LSJ000)*v_YPCKMX.CKSL00,2))>0) OR (abs(ROUND((v_GJJCK1-V_GJJ000)*v_YPCKMX.CKSL00,2))>0) then Update YF_YPCKMX set LSDJ00= ROUND(V_cklsj0,4),GJDJ00= ROUND(V_ckgjj0,4), CKJE00= ROUND(V_cklsj0*(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000/V_K2J000),2) where YPCKPC = v_YPCKMX.YPCKPC; V_LSJCK1 := V_cklsj0; V_GJJCK1 := V_ckgjj0; else V_LSJCK1 := v_YPCKMX.LSDJ00; V_GJJCK1 := v_YPCKMX.GJDJ00; end if; end if; --病区医嘱领药出库 if R_YF_YPCKD0.CKLXBH='03' then V_CKJE00:=v_YPCKMX.CKJE00; V_GJCKJE:=Round(v_YPCKMX.GJDJ00*v_YPCKMX.CKSL00*v_YPCKMX.ZHL000/V_K2J000,2); ELSE V_CKJE00:=ROUND(V_LSJCK1*v_YPCKMX.CKSL00*v_YPCKMX.ZHL000/V_K2J000,2); V_GJCKJE:=Round(V_GJJCK1*v_YPCKMX.CKSL00*v_YPCKMX.ZHL000/V_K2J000,2); end if; Vmxzlsh := null; SP_YF_YPMXZ0_EDIT( 0, --操作标志 0:增加 1:修改 2:删除 Vmxzlsh, --明细账流水号'; R_YF_YPCKD0.YFBMBH, --药房部门编号'; null, --药品入库批次'; v_YPCKMX.YPCKPC, --药品出库批次'; v_YPCKMX.YPNM00, --药品内码'; v_YPCKMX.YPMC00, --药品名称'; v_YPCKMX.YPGG00, --规格'; to_char(sysdate,'yyyymmdd'), --记账日期'; to_char(sysdate,'hh24:mi:ss'), --记账时间'; R_YF_YPCKD0.CKBMBH, --出入部门编号'; V_ZY0000, --摘要(自动:出入部门名称)'; v_YPCKMX.CKDW00, --记账单位'; v_YPCKMX.ZHL000, --转换率(记账单位/剂量单位)'; v_YPCKMX.GJDJ00, --购进单价(库存单位)'; null, --收入单价(零售价)(记账单位)'; null, --收入数量(记账单位)'; null, --收入金额(零售价)'; v_YPCKMX.LSDJ00, --付出单价(零售价)(库存单位)'; v_YPCKMX.CKSL00, --付出数量(记账单位)'; V_CKJE00, --付出金额(零售价)'; 0, --结存单价(结存金额/结存数量)'; R_YF_YPCKD0.CKLXBH, --入出库类型编码'; v_CKLXMC, --入出库类型名称'; 'C', --记账性质:''R'',入库,''C'',出库'; R_YF_YPCKD0.CKDH00, --单据号'; V_SFZBYP, --是否自备药品'; null, --购进收入金额'; V_GJCKJE, --购进付出金额'; Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 v_YPCKMX.YKRKPC --药库入库批次 ); --判断是否零售价单独管理 --暂将入库单价与药典零售价比较 --增加判断:药房单零售价管理 if v_LSJGL0='Y' and v_LSJGL2='N' then V_LSJCK0:=v_YPCKMX.LSDJ00; V_GJJCK0:=v_YPCKMX.GJDJ00; if (ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2)>0) OR (ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2)>0) then --报盈--v_LSJCK0-V_LSJ000 Vmxzlsh := null; select DECODE(V_SJKCSL,0,0,V_LSJ000) into Vjcdj00 from dual; SP_YF_YPMXZ0_EDIT( 0, --操作标志 0:增加 1:修改 2:删除 Vmxzlsh, --明细账流水号'; R_YF_YPCKD0.YFBMBH, --药房部门编号'; v_YPCKMX.YPCKPC, --药品入库批次'; null, --药品出库批次'; v_YPCKMX.YPNM00, --药品内码'; v_YPCKMX.YPMC00, --药品名称'; v_YPCKMX.YPGG00, --规格'; to_char(sysdate,'yyyymmdd'), --记账日期'; to_char(sysdate,'hh24:mi:ss'), --记账时间'; 77777, --出入部门编号'; '调价报盈', --摘要(自动:出入部门名称)'; v_YPCKMX.CKDW00, --记账单位'; v_YPCKMX.ZHL000, --转换率(记账单位/剂量单位)'; --v_YPCKMX.GJDJ00, --购进单价(记账单位)'; v_YPCKMX.GJDJ00, --购进单价(记账单位)'; v_LSJCK0, --收入单价(零售价)(记账单位)'; 0, --收入数量(记账单位)'; ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2), --收入金额(零售价)'; null, --付出单价(零售价)(记账单位)'; null, --付出数量(记账单位)'; null, --付出金额(零售价)'; Vjcdj00, --结存单价(结存金额/结存数量)'; '07', --入出库类型编码'; '调价报盈', --入出库类型名称'; 'R', --记账性质:''R'',入库,''C'',出库'; null, --单据号'; V_SFZBYP, --是否自备药品'; ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2), --购进收入金额'; null, --购进付出金额'; Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 v_YPCKMX.YKRKPC --药库入库批次 ); elsif (ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2)<0) OR (ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2)<0) then --报亏 Vmxzlsh := null; select DECODE(V_SJKCSL,0,0,V_LSJ000) into Vjcdj00 from dual; SP_YF_YPMXZ0_EDIT( 0, --操作标志 0:增加 1:修改 2:删除 Vmxzlsh, --明细账流水号'; R_YF_YPCKD0.YFBMBH, --药房部门编号'; null, --药品入库批次'; v_YPCKMX.YPCKPC, --药品出库批次'; v_YPCKMX.YPNM00, --药品内码'; v_YPCKMX.YPMC00, --药品名称'; v_YPCKMX.YPGG00, --规格'; to_char(sysdate,'yyyymmdd'), --记账日期'; to_char(sysdate,'hh24:mi:ss'), --记账时间'; 77777, --出入部门编号'; '调价报亏', --摘要(自动:出入部门名称)'; v_YPCKMX.CKDW00, --记账单位'; v_YPCKMX.ZHL000, --转换率(记账单位/剂量单位)'; --v_YPCKMX.GJDJ00, --购进单价(记账单位)'; round(v_YPCKMX.GJDJ00*v_YPCKMX.ZHL000/V_K2J000,4), --购进单价(记账单位)'; null, --收入单价(零售价)(记账单位)'; null, --收入数量(记账单位)'; null, --收入金额(零售价)'; v_LSJCK0, --付出单价(零售价)(记账单位)'; 0, --付出数量(记账单位)'; -ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2), --付出金额(零售价)'; Vjcdj00, --结存单价(结存金额/结存数量)'; '06', --入出库类型编码'; '调价报亏', --入出库类型名称'; 'C', --记账性质:''R'',入库,''C'',出库'; null, --单据号'; V_SFZBYP, --是否自备药品'; null, --购进收入金额'; -ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2), --购进付出金额'; Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 v_YPCKMX.YKRKPC --药库入库批次 ); end if; end if; end if; end if; fetch c_YPCKMX into v_YPCKMX; end loop; close c_YPCKMX; --如果属于供应室出给其他科室,增加科室三级库存; --检验科也当二级库房管理; --if R_YF_YPCKD0.CKZT00='0' then if (R_YF_YPCKD0.CKZT00='0') and (R_YF_YPCKD0.CKLXBH='01') then if R_YF_YPCKD0.YPQLDH is not null then select count(1) into Vcounter from YK_YPQLD0 where YPQLDH=R_YF_YPCKD0.YPQLDH and CKLXBH='25'; end if; if Vcounter = 0 then select count(1) into Vcounter from bm_bmbm00 where bmbh00=R_YF_YPCKD0.YFBMBH and bmxz00='k'; end if; if Vcounter>0 then --select count(1) into Vcounter from bm_bmbm00 where bmbh00=R_YF_YPCKD0.CKBMBH and bmxz00 not in ('k','c'); --if (R_YF_YPCKD0.CKLXBH='01') or (Vcounter>0) then SP_KS_YPRKQR( '1', --仓库或供应室 标志:0库存物资,1供应室 Pckdh00, --出库单号 Pczy000, --操作员编码 Pczyks0, --操作员科室 Pcommit, --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); --end if; end if; end if; --如果为调拨出库,则同时插入一入库单 JETHUA 2003.07.22 if R_YF_YPCKD0.CKLXBH='11' and instr(nvl(R_YF_YPCKD0.BZ0000,' '),'调拨未确认')<=0 then V_RKDH00:=SF_YK_GETLSH('YFYPRKDH'); insert into YF_YPRKD0 (RKDH00, YFBMBH, RKBMBH, RKLXBH, RKZT00, CZY000, RKRQ00, RKSJ00, YPQLDH) values (V_RKDH00, R_YF_YPCKD0.CKBMBH, R_YF_YPCKD0.YFBMBH, '08', '0', R_YF_YPCKD0.CZY000, to_char(sysdate,'yyyymmdd'), to_char(sysdate,'hh24:mi:ss'), Pckdh00) ; insert into YF_YPRKMX (YPRKPC, RKDH00, YPNM00, YPMC00, YPGG00, RKSL00, RKDW00, ZHL000, GJDJ00, PFDJ00, LSDJ00, SCPH00, YPSXRQ, YKRKPC, BZ0000) select SQ_YF_YPRKMX_YPRKPC.NEXTVAL, V_RKDH00, a.YPNM00, a.YPMC00, a.YPGG00, a.CKSL00, a.CKDW00, a.ZHL000, a.GJDJ00, a.PFDJ00, a.LSDJ00, a.SCPH00, a.YPSXRQ, a.YKRKPC, '来自调拨单:'||Pckdh00 from YF_YPCKMX a,BM_YD0000 b where a.CKDH00=R_YF_YPCKD0.CKDH00 and a.YPNM00=b.YPNM00; --Update YF_YPCKD0 SET BZ0000=BZ0000||'调拨未确认' where CKDH00=Pckdh00 and CKZT00='0'; --2019.09.10 select count(1) into Vcounter from yf_ypmxz0 where DJH000=Pckdh00 and RCLXBH='11' and rownum=1; if Vcounter>0 then Update YF_YPCKD0 SET CKZT00='1', QRR000=Pczy000, QRRQ00=Pqrrq00, QRSJ00=Pqrsj00,BZ0000=replace(BZ0000,'调拨未确认','') where CKDH00=Pckdh00 and CKZT00='0'; else Update YF_YPCKD0 SET BZ0000=BZ0000||'调拨未确认' where CKDH00=Pckdh00 and CKZT00='0'; end if; --2019.09.24 参数YF_YPDBDQR功能扩展,增加了M值:由药房调出科室和退到药库一起确认 if Vdbdqr0='M' then V_SQL:='begin SP_YF_YPRKD0_AUDIT(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8,:v9); end;'; execute immediate v_sql using in V_RKDH00,in to_char(sysdate,'yyyymmdd'),in to_char(sysdate,'hh24:mi:ss'),in R_YF_YPCKD0.CZY000,in Pczyks0,in 'N',out Pzxcgbz,out Ptsxx00,out Pxxxx00; /* SP_YF_YPRKD0_AUDIT( V_RKDH00, --入库单号 to_char(sysdate,'yyyymmdd'), --确认日期 to_char(sysdate,'hh24:mi:ss'), --确认时间 R_YF_YPCKD0.CZY000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); */ if Pzxcgbz = 0 then Ptsxx00 := '调拨入库确认出错(1)'; raise Ecustom; end if; end if; --判断是否自动入库 -- if V_ZDRKRQ='Y' then -- SP_YF_YPRKD0_AUDIT( -- V_RKDH00, --入库单号 -- to_char(sysdate,'yyyymmdd'), --确认日期 -- to_char(sysdate,'hh24:mi:ss'), --确认时间 -- R_YF_YPCKD0.CZY000, --操作员 -- Pczyks0, --操作员科室 -- 'N', --是否提交 -- Pzxcgbz, --执行成功标志 1成功 0失败 -- Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 -- Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 -- ); -- if Pzxcgbz = 0 then -- Ptsxx00 := '入库确认出错(1)'; -- raise Ecustom; -- end if; -- end if; --end if; -- elsif R_YF_YPCKD0.CKLXBH='08' then -- Update YF_YPCKD0 SET CKZT00='1' where CKDH00=Pckdh00 and CKZT00<>'1'; -- elsif not (R_YF_YPCKD0.CKLXBH='08') then -- Update YF_YPCKD0 SET CKZT00='1', QRR000=Pczy000, QRRQ00=Pqrrq00, QRSJ00=Pqrsj00,BZ0000=replace(BZ0000,'调拨未确认','') where CKDH00=Pckdh00 and CKZT00<>'1'; -- end if; else if R_YF_YPCKD0.CKLXBH='08' then Update YF_YPCKD0 SET CKZT00='1', QRR000=Pczy000, QRRQ00=Pqrrq00, QRSJ00=Pqrsj00 where CKDH00=Pckdh00 and CKZT00<>'1'; else Update YF_YPCKD0 SET CKZT00='1', QRR000=Pczy000, QRRQ00=Pqrrq00, QRSJ00=Pqrsj00,BZ0000=replace(BZ0000,'调拨未确认','') where CKDH00=Pckdh00 and CKZT00<>'1'; end if; if sql%notfound then Ptsxx00:='单据状态已经发生变化,请刷新后再重试'; raise Ecustom; end if; --2017.04.25 if R_YF_YPCKD0.CKLXBH='11' then select count(1) into V_count from YF_YPRKD0 where YPQLDH=Pckdh00 and RKZT00='0'; if V_count>0 then Ptsxx00:='单据状态已经发生变化(调拨入库单还未进行入库确认),请刷新后再重试'; raise Ecustom; end if; end if; end if; Pzxcgbz:=1; if pcommit='Y' then commit; end if; exception when no_data_found then raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm,1,240)); when Ecustom then raise_application_error(-20010,substrb(Ptsxx00||Verrmsg||'!*',1,240)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;