create or replace procedure SP_JP_JPSCHZBQ( -- modification history -- Person Date Comments -- qks 2013.01.14 create:注意“明细标签医嘱药品申请表”摆药时生成。 -- qks 2013.02.02 药房静配明细标签表YF_JPMXBQ增加字段YZYPGS -- qks 2013.02.17 药房静配明细标签表YF_JPMXBQ增加字段YFBMBH,YYRQ00,ZJLB00;同时修改条码的针剂类别取值 -- qks 2013.03.15 审方信息从BQ_YZYP00表获取 -- qks 2013.03.19 医嘱同天用药日期也有重复的配送批次 -- qks 2013.03.23 一个汇总标签对应一个选中主要药品(可能包含组内的其他药品);同时单个汇总标签,最多只允许50袋(数量用参数控制);04.02 截取Ptsxx00 -- qks 2013.04.03 取VZNXH00值,增加条件 MXBQID=0; 04.07: 游标c_YPSQMX增加条件and b.ZNXH00=VZNXH00 -- qks 2013.04.09 增加出参Pkdrqsj -- qks 2013.04.10 修改明细标签的条码长度 -- qks 2013.04.23 增加入参Pbqbmbh;修改VZXH000取值条件 -- qks 2013.05.13 bug:医嘱如果有多个相同的配送批次,无法同时生成明细标签。 -- qks 2013.05.16 条码格式使用128C,不支持字母,走床、加床分别改为1、2开头 -- qks 2013.05.19 YF_JPMXBQ增加字段CLBZ00 -- qks 2013.07.05 修改Vzjlb00取值判断条件 -- qks 2014.01.10 修改VYZYPGS取值判断条件 -- qks 2014.11.24 增加系统参数ZYJP_YYGXH -- qks 2014.12.15 抗生素药品改用BM_YD0000.KSSJB0>0来判断 -- daihq 2015.01.16 生成条码时CH0000增加trim处理 -- qks 2015.10.08 抗生素药品改用bm_tyzd00.zdmc00='药典维护-注射剂打印类别'来判断 -- qks 2017.02.18 处理参数ZYJP_YYGXH=2问题; for JMPZ-20170220-001 -- qks 2017.03.07 修改VZXH000取值条件; for JMPZ-20170220-001 -- qks 2017.04.05 新增参数ZYJP_JMPZFZLXMID控制是否收取静脉药物配置费;for JMPZ-20170405-001 -- qks 2017.07.19 新增参数ZYJP_ZDYPDBJY; for JMPZ-20170719-001 -- qks 2017.07.26 由于HIS7.0版本也有使用,改用调用新增药房存储过程; for JMPZ-20170502-001 -- qks 2017.09.22 解决数据写入不同步问题; for JMPZ-20170922-001 -- qks 2018.10.19 当入参Pzjlb00=3(营养药)时,如果医嘱同组中存在抗菌药跟化疗药,则不允许生成。for JMPZ-20181022-001 -- qks 2020.08.27 解决:当bm_bmbm00.ksdh00未维护,可能会生成重复条形码问题。for JMPZ-20200827-001 -- luowf 2021.01.21 增加变量VGJSYP0、Vgwdj00,重新计算Vzjlb00 。 for JMPZ-20210104-001; -- chenxz 2021.11.24 重床 生成标签时过滤重字 改为3开头 for JMPZ-20211122-001 -- qks 2023.04.25 临时修改:处理 单个及以上大输液生成问题 -- --------- ---------- ------------------------------------------- --Pypnm00 in varchar2 , --药品内码(内码1,内码2,内码3......) Ptempid in number , --中间表ID号 YF_JPHZYP_TEMP.ID0000 Pyyrq00 in varchar2 , --用药日期 Ppspc00 in varchar2 , --配送批次 Pyfbmbh in number , --药房部门编号 Pzjlb00 in varchar2 , --针剂类别(1抗菌素,2化疗药,3营养药,4高警示药品,9全部) Pjylx00 in varchar2 , --加药类型(0单个多个,1单瓶,2单个,3多个,4遗漏,9全部) Pczy000 in number , --输入:操作员编码 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Ptxmhz0 out varchar2 , --汇总标签条形码(多个用逗号分开) Pkdrqsj out varchar2 , --开单日期时间 Pbqbmbh in number default 0 --病区部门编号 ) as Vcounter number; --记数器 Vypnm00 bm_yd0000.ypnm00%type; Vhzbqid YF_JPPZD0.PZPCID%type; --汇总标签ID Vmxbqid YF_JPMXBQ.mxbqid%type; --明细标签ID Vtxm000 YF_JPMXBQ.txm000%type; --条码 规则:130107(用药日期)+01(病区号)+0001(床位号)+1(1抗菌素,2化疗药,3营养药)+1(送药批次12345)+01(明细袋流水号) Vtxmqz0 YF_JPMXBQ.txm000%type; --条码前缀 Vtxmhz0 YF_JPPZD0.txm000%type; --汇总标签条形码 Vsfr000 BQ_YPYZ00.SFR000%type; --审方人 Vsfrq00 BQ_YPYZ00.SFRQ00%type; --审方日期 Vsfsj00 BQ_YPYZ00.SFSJ00%type; --审方时间 VZNXH00 YF_JPMXYZ.ZNXH00%type; Vpspc00 char(1); --具体配送批次 Vjylx00 number(1); --加药类型:1单瓶,2单个,3多个 Vpspchz varchar2(10); --配送汇总批次 VYZYPGS YF_JPMXBQ.YZYPGS%type; --对应医嘱药品个数 Vksslb0 BM_YD0000.ZSDYLB%type; --抗生素类别编号 Vzlylb0 BM_YD0000.ZSDYLB%type; --肿瘤药类别编号 Vsysdate date; L number; I number; J number; VZXH000 YF_JPMXBQ.ZXH000%type; VZDS000 number(6); --总袋数 VHZBQSL number(6); --汇总标签数量 VMAXZDS number(6); --限制最大总袋数 Vzjlb00 YF_JPMXBQ.ZJLB00%type; --针剂类别(1抗菌素、2化疗药、3营养药,4高警示药品) VTXMCWH varchar2(5); --条码中包含的4位床号 Ecustom exception; --错误变量 VYYGXH0 XT_XTCS00.VALUE0%type; --医院个性化 Vsfdjh0 YJ_YW0000.SFDJH0%type; --收费单据号 Vyjdjh0 YJ_YW0000.YJDJH0%type; --医技单据号 --Vjmpzid YJ_YW0000.ZLXMID%type; --静脉配置费诊疗项目ID Vjmpzid BM_YYSFXM.SFXMID%type; --静脉配置费诊疗项目ID Vtqdjh0 YF_YZYPSQ.TQDJH0%type; VZDDBJY XT_XTCS00.VALUE0%type; --生成静配明细标签,如果单瓶药品包含了参数指定药品内码(多个使用逗号分开),计算对应医嘱药品个数需要自动加1 VGJSYP0 XT_XTCS00.VALUE0%type; --高警示药品:bm_yd0000.GWDJ00值在该参数里ZYJP_SFXSGWJSYP; Vgwdj00 BM_YD0000.GWDJ00%type; --高危等级 cursor c_YZYPSQ is select distinct b.KSDH00,a.yzid00,a.CLBZ00,a.BQBMBH,a.DQKS00,a.CH0000,a.ZYID00,a.BRXM00,a.SHR000,a.SHRQ00,a.SHSJ00,c.PSPC00,c.ZNXH00,a.YSGZH0 from YF_YZYPSQ a,bm_bmbm00 b,YF_JPMXYZ c,bm_yd0000 d where a.YFBMBH=Pyfbmbh and a.YYRQ00=Pyyrq00 and a.YPNM00=Vypnm00 -- and a.YYPC00 is not null and a.bqbmbh=b.bmbh00 and a.ypqlpc=c.ypqlpc and a.yyrq00=c.yyrq00 and a.ypnm00=d.ypnm00 and c.TYBZ00<>'2' and c.MXBQID+0=0 and c.PSPC00=Vpspc00 and (nvl(Pbqbmbh,0)=0 or a.BQBMBH=Pbqbmbh) and ((Vjylx00=3 and (select count(1) from bq_ypyzmx where yzid00=a.yzid00)>=Vjylx00) or (Vjylx00<3 and (select count(1) from bq_ypyzmx where yzid00=a.yzid00)=Vjylx00)) --2023.04.25 and ( d.DXSYBZ <> '1' --不包含大输液 or d.DXSYBZ = '1' and (select count(1) from bq_ypyzmx aa,BM_YD0000 bb where aa.yzid00=a.yzid00 and aa.YPNM00=bb.YPNM00 and bb.DXSYBZ<>'1' and nvl(aa.YZCLLB,'正常')<>'自备药')=0 ) and (nvl(Pzjlb00,'9')<>'3' or nvl(Pzjlb00,'9')='3' and not exists (select 1 from YF_YZYPSQ j,BM_YD0000 k where j.YZID00=a.yzid00 and j.yyrq00=a.yyrq00 and j.ypnm00=k.ypnm00 and (nvl(k.ZSDYLB,0)=Vksslb0 or nvl(k.ZSDYLB,0)=Vzlylb0) ) ); v_YZYPSQ c_YZYPSQ%rowtype; cursor c_YPSQMX is select b.* from yf_yzypsq a,YF_JPMXYZ b where a.yzid00=v_YZYPSQ.YZID00 and a.yyrq00=Pyyrq00 and a.ypqlpc=b.ypqlpc and a.yyrq00=b.yyrq00 and b.pspc00=v_YZYPSQ.PSPC00 and b.TYBZ00<>'2' and b.ZNXH00=VZNXH00; v_YPSQMX c_YPSQMX%rowtype; cursor c_JPHZYP is select YPNM00,PSPC00,to_number(JYLX00) from YF_JPHZYP_TEMP where ID0000=Ptempid; begin Pzxcgbz:=0; Vsysdate:=sysdate; Pkdrqsj :=to_char(Vsysdate,'YYYYMMDDhh24:mi:ss'); Pxxxx00 :=nvl(to_char(Ptempid),'null')||';'||nvl(Pyyrq00,'null')||';'||nvl(Ppspc00,'null')||';'||nvl(to_char(Pyfbmbh),'null')||';'|| nvl(to_char(Pczy000),'null')||';'||nvl(to_char(Pczyks0),'null')||';'||nvl(to_char(Pcommit),'null'); SP_TransLog(Vsysdate,'SP_JP_JPSCHZBQ',Pczy000,Pczyks0,Pxxxx00); select to_number(nvl(max(trim(VALUE0)),'0')) into VMAXZDS from xt_xtcs00 where name00='YF_JPMAXZDS'; select nvl(max(trim(VALUE0)),'0')into VYYGXH0 from xt_xtcs00 where name00='ZYJP_YYGXH'; select to_number(nvl(max(trim(VALUE0)),'0')) into Vjmpzid from xt_xtcs00 where name00='ZYJP_JMPZFZLXMID'; select nvl(max(trim(VALUE0)),'0') into VZDDBJY from xt_xtcs00 where name00='ZYJP_ZDYPDBJY'; select nvl(max(trim(VALUE0)),'0') into VGJSYP0 from XT_XTCS00 where NAME00='ZYJP_SFXSGWJSYP'; if VMAXZDS = 0 then VMAXZDS := 100000; end if; Vpspchz := ''; VHZBQSL := 0 ; select nvl(max(NBBH00),0) into Vksslb0 From bm_tyzd00 where zdmc00='药典维护-注射剂打印类别' and LBBZ00='0' and trim(MC0000)='抗生素药品'; select nvl(max(NBBH00),0) into Vzlylb0 From bm_tyzd00 where zdmc00='药典维护-注射剂打印类别' and LBBZ00='0' and trim(MC0000)='肿瘤药品'; OPEN c_JPHZYP; fetch c_JPHZYP into Vypnm00,Vpspc00,Vjylx00; while c_JPHZYP%FOUND loop INSERT INTO YF_JPHZYP_TEMP_TEST (ID0000,ypnm00,pspc00,jylx00) select Ptempid,YPNM00,PSPC00,to_number(JYLX00) from YF_JPHZYP_TEMP where ID0000=Ptempid; VZXH000 := 0; VZDS000 := 0; select SQ_YF_JPPZD0_PZPCID.nextval into Vhzbqid from dual; OPEN c_YZYPSQ; fetch c_YZYPSQ into v_YZYPSQ; while c_YZYPSQ%FOUND loop if instr(Vpspchz||' ',Vpspc00)<=0 then Vpspchz := Vpspchz||Vpspc00; end if; if Vjylx00=1 and instrb(','||trim(VZDDBJY)||',',','||to_char(Vypnm00)||',')>0 then Vjylx00 := Vjylx00+1; end if; --1、写入明细标签 -- select sum(decode(l.MC0000,'抗生素药品',100,'肿瘤药品',1,0)) into Vcounter from YF_YZYPSQ j,BM_YD0000 k,bm_tyzd00 l -- where j.zyid00=v_YZYPSQ.zyid00 and j.YZID00=v_YZYPSQ.yzid00 and j.ypnm00=k.ypnm00 and l.zdmc00='药典维护-注射剂打印类别' and l.NBBH00=k.ZSDYLB; --参数没开照原样子 if VGJSYP0 = '0' then select sum(decode(b.ZSDYLB,Vzlylb0,1,Vksslb0,100,decode(sign(b.KSSJB0),1,100,0))) into Vcounter from YF_YZYPSQ a,BM_YD0000 b where a.yzid00=v_YZYPSQ.yzid00 and a.yyrq00=Pyyrq00 and a.ypnm00=b.ypnm00; if Vcounter>=100 then Vzjlb00:= '1'; elsif mod(Vcounter,100)>0 then Vzjlb00:= '2'; else Vzjlb00:= '3'; end if; else --参数开了要确认是否有这种Vzjlb00=4 select sum(decode(b.ZSDYLB,Vzlylb0,1,Vksslb0,100,decode(sign(b.KSSJB0),1,100,0))),b.GWDJ00 into Vcounter,Vgwdj00 from YF_YZYPSQ a,BM_YD0000 b where a.yzid00=v_YZYPSQ.yzid00 and a.yyrq00=Pyyrq00 and a.ypnm00=b.ypnm00 group by b.GWDJ00; if Vcounter>=100 then Vzjlb00:= '1'; elsif mod(Vcounter,100)>0 then Vzjlb00:= '2'; else Vzjlb00:= '3'; end if; --拿到Vgwdj00,VGJSYP0可以确认了Vzjlb00是否有4 if instrb(','||VGJSYP0||',' , ','||Vgwdj00||',')>0 then Vzjlb00 := '4'; end if; end if; if substr(trim(v_YZYPSQ.CH0000),1,1)='走' then VTXMCWH := '1'; elsif substr(trim(v_YZYPSQ.CH0000),1,1)='加' then VTXMCWH := '2'; elsif substr(trim(v_YZYPSQ.CH0000),1,1)='重' then VTXMCWH := '3'; else VTXMCWH := ''; end if; if VYYGXH0 = '1' then VTXMCWH := VTXMCWH||SF_JP_GETTDZFC(trim(v_YZYPSQ.CH0000),4-nvl(length(VTXMCWH),0)); elsif VYYGXH0 = '0' then VTXMCWH := VTXMCWH||lpad(replace(replace(replace(replace(trim(v_YZYPSQ.CH0000),'走',''),'加',''),'重',''),'-',''),4-nvl(length(VTXMCWH),0),'0'); --VTXMCWH := VTXMCWH||lpad(replace(replace(replace(trim(v_YZYPSQ.CH0000),'走',''),'加',''),'-',''),4-nvl(length(VTXMCWH),0),'0'); end if; --Vtxmqz0 := substr(Pyyrq00,3,6)||substr(v_YZYPSQ.KSDH00,1,2)||lpad(replace(replace(v_YZYPSQ.CH0000,'走','Z'),'加','J'),4,'0')||Vzjlb00||v_YZYPSQ.PSPC00; Vtxmqz0 := substr(Pyyrq00,3,6)||substr(v_YZYPSQ.KSDH00,1,2)||VTXMCWH||Vzjlb00||v_YZYPSQ.PSPC00; select nvl(max(txm000),Vtxmqz0||'00') into Vtxm000 from YF_JPMXBQ where txm000 like Vtxmqz0||'%'; if length(Vtxmqz0)<=10 then --Vtxm000 := Vtxmqz0||lpad(to_number(substr(Vtxm000,length(Vtxmqz0)+1,4))+1,4,'0'); Vtxm000 := Vtxmqz0||lpad(to_number(rpad(substr(Vtxm000,length(Vtxmqz0)+1,4),4,'0'))+1,4,'0'); else Vtxm000 := Vtxmqz0||lpad(to_number(substr(Vtxm000,length(Vtxmqz0)+1,2))+1,2,'0'); end if; --select nvl(max(ZXH000),0) into VZXH000 from YF_JPMXBQ where zyid00=v_YZYPSQ.ZYID00 and txm000||' ' like Pyyrq00||'%'; --select nvl(max(ZXH000),0) into VZXH000 from YF_JPMXBQ where zyid00=v_YZYPSQ.ZYID00 and txm000 like substr(Pyyrq00,3,6)||substr(v_YZYPSQ.KSDH00,1,2)||lpad(trim(v_YZYPSQ.CH0000),4,'0')||'%' and PSPC00=v_YZYPSQ.PSPC00; select nvl(max(ZXH000),0) into VZXH000 from YF_JPMXBQ where zyid00=v_YZYPSQ.ZYID00 and yyrq00=Pyyrq00 and PSPC00=v_YZYPSQ.PSPC00; VZXH000 := VZXH000 + 1; VZDS000 := VZDS000 + 1; select SQ_YF_JPMXBQ_MXBQID.nextval into Vmxbqid from dual; --select count(1) into VYZYPGS from YF_YZYPSQ where yzid00=v_YZYPSQ.yzid00 and YYRQ00=Pyyrq00 and QLZT00 in ('2','4') and cxbz00='Z'; select count(1) into VYZYPGS from BQ_YPYZMX where yzid00=v_YZYPSQ.yzid00 and nvl(YZCLLB,'正常')<>'自备药'; if VYZYPGS=1 and instrb(','||trim(VZDDBJY)||',',','||to_char(Vypnm00)||',')>0 then VYZYPGS := VYZYPGS + 1; end if; select max(SFR000),nvl(max(SFRQ00),'20991231'),max(SFSJ00) into VSFR000,VSFRQ00,VSFSJ00 from BQ_YPYZ00 where yzid00=v_YZYPSQ.yzid00; --1.1 写入 药房静配明细标签 insert into YF_JPMXBQ( MXBQID , --明细标签ID号 SQ_YF_JPMXBQ_MXBQID ZXH000 , --组序号 PZPCID , --汇总标签ID号 F.K=YF_JPPZD0.PZPCID YFBMBH , --药房部门编号 BQBMBH , --病区部门编号 KSBMBH , --科室部门编号 CH0000 , --床号 ZYID00 , --住院病人信息流水号 BRXM00 , --病人姓名 PSPC00 , --送药批次(12345) YZYPGS , --对应医嘱药品个数 TXM000 , --条形码:20130107(用药日期)+01(病区号)+001(床位号)+1(1抗菌素,2化疗药,3营养药)+1(送药批次12345)+01(明细袋流水号) EWM000 , --二维码 YZID00 , --医嘱ID号 CLBZ00 , --长临标志:0长期1临时 YYRQ00 , --用药日期 ZJLB00 , --针剂类别(1抗菌素、2化疗药、3营养药、4高警示药品) CZLX00 , --操作类型:1调剂,2核对,3配制,4出仓(成品)核对,5发药核对,6护士接收,7病人挂瓶 CJR000 , --创建人 CJRQ00 , --创建日期 CJSJ00 , --创建时间 ZHXGR0 , --最后修改人 ZHXGRQ , --最后修改日期 ZHXGSJ , --最后修改时间 BZ0000 --备注 ) values (Vmxbqid, VZXH000, Vhzbqid, Pyfbmbh, v_YZYPSQ.BQBMBH, v_YZYPSQ.DQKS00, trim(v_YZYPSQ.CH0000), v_YZYPSQ.ZYID00, v_YZYPSQ.BRXM00, v_YZYPSQ.PSPC00, VYZYPGS, Vtxm000, '', v_YZYPSQ.YZID00, v_YZYPSQ.CLBZ00, Pyyrq00, Vzjlb00, '1', Pczy000, to_char(Vsysdate,'YYYYMMDD'), to_char(Vsysdate,'hh24:mi:ss'), Pczy000, to_char(Vsysdate,'YYYYMMDD'), to_char(Vsysdate,'hh24:mi:ss'), '' ); --2017.04.05 qks 非单瓶生成1元静脉药物配置费医技单并进行扣费(允许欠费) if Vjmpzid>0 and VYZYPGS>1 then --过渡用,更新后2天就可以注释掉; --select max(TQDJH0) into Vtqdjh0 from YF_YZYPSQ where YZID00=v_YZYPSQ.yzid00 and YYRQ00=Pyyrq00; --select count(1) into Vcounter from BQ_FJF000 where ZYID00=v_YZYPSQ.ZYID00 and TQDJH0=Vtqdjh0 -- and YZID00=v_YZYPSQ.yzid00 and SFXMID=8000061091; --if Vcounter = 0 then --2017.07.26由于HIS7.0版本也有使用,改用调用新增药房存储过程 /* Vyjdjh0 := null; SP_YJ_YJSQWH( 2, --操作内容 1修改 2增加 3删除 Vyjdjh0, --操作的医技单据号 v_YZYPSQ.ZYID00, --挂号id '1', --门诊住院标志 Vjmpzid, --诊疗项目id null, --子项目id串,如果没有传入参数,表示使用所有明细项 null, --诊断id null, --诊断名称 null, --标本ID null, --特殊病种编号 'N', --医技录入标志 'N', --急诊标志 v_YZYPSQ.YSGZH0, --开单医生 v_YZYPSQ.DQKS00, --开单科室编号 null, --开单病区 Pyfbmbh, --医技科室编号 1, --数量 null, --备注 'e', --附加单据 0主单1采血费2试管费3挂号费4诊查费5病历本6预约挂号7代煎9其他子单 Pczy000, --操作员 Pczyks0, --操作员科室 'N', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 null, --业务明细ID Popflag=3时 可能用到 null, --部位名称 null, --父医技单据号 1, --重新计价 v_YZYPSQ.YZID00, --医嘱处方ID null, --手术单号 Vtxm000 --条形码 ); if Pzxcgbz = 0 then Ptsxx00 := '静配配置费开单出错(1)'||Ptsxx00; raise Ecustom; end if; select SQ_ZY_BRJFB0_DJH000.NEXTVAL into Vsfdjh0 from DUAL; SP_ZY_YJDJ00( Vyjdjh0, --医技单据号 Vsfdjh0, --单据号 Pyfbmbh, --执行科室 --Pzxys00, --执行医生 Pczy000, --执行医生 to_char(sysdate,'YYYYMMDD'), --操作日期 to_char(sysdate,'HH24:MI:SS'), --操作时间 Ptsxx00, --存储过程提示的错误信息 Pxxxx00, --系统提示的错误信息 '0', --收费员登记 1是 0否 'Z', '0', --错误提示 0报错提示 1不提示直接退出 '2' ); if Pzxcgbz = 0 then Ptsxx00 := '静配配置费收费出错(2)'||Ptsxx00; raise Ecustom; end if; */ SP_YF_JMYWPZF_JP( v_YZYPSQ.ZYID00, --住院挂号ID Vjmpzid , --诊疗项目id(注意,HIS9.0使用诊疗项目ID,HIS7.0使用收费项目ID) v_YZYPSQ.YSGZH0, --开单医生 v_YZYPSQ.DQKS00, --开单科室编号 v_YZYPSQ.BQBMBH, --开单病区 Pyfbmbh, --医技科室编号 1, --数量 'e', --附加单据 0主单1采血费2试管费3挂号费4诊查费5病历本6预约挂号7代煎9其他子单 Pczy000 , --操作员 Pczyks0 , --操作员科室 --Pcommit , --是否提交 'N', --是否提交 2017.09.22 Pzxcgbz , --执行成功标志 1成功 0失败 Ptsxx00 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 v_YZYPSQ.YZID00, --医嘱处方ID Vtxm000 --条形码 ); if Pzxcgbz = 0 then Ptsxx00 := '静配配置费开单出错(1)'||Ptsxx00; raise Ecustom; end if; end if; --1.2 写入 药房静配明细标签扫描纪录 insert into YF_JPLZJL( MXBQID, --明细标签ID号 F.K=YF_JPMXBQ.MXID00 CZLX00, --操作类型:0审方,1调剂,2核对,3配制,4出仓(成品)核对,5发药核对,6护士接收,7病人挂瓶 PZPCID, --配制批次 YF_JPPZD0.PZPCID CZY000, --操作员 CZRQ00, --操作日期 CZSJ00 --操作时间 ) values ( Vmxbqid, '1', Vhzbqid, Pczy000, to_char(Vsysdate,'YYYYMMDD'), to_char(Vsysdate,'hh24:mi:ss') ); --if nvl(v_YZYPSQ.SHR000,'20991231')<>'20991231' then if VSFRQ00<>'20991231' then insert into YF_JPLZJL( MXBQID, --明细标签ID号 F.K=YF_JPMXBQ.MXID00 CZLX00, --操作类型:0审方,1调剂,2核对,3配制,4出仓(成品)核对,5发药核对,6护士接收,7病人挂瓶 PZPCID, --配制批次 YF_JPPZD0.PZPCID CZY000, --操作员 CZRQ00, --操作日期 CZSJ00 --操作时间 ) values (Vmxbqid, '0', Vhzbqid, VSFR000, VSFRQ00, VSFSJ00 ); end if; --1.3写入 明细标签医嘱药品申请表 VZNXH00 := v_YZYPSQ.ZNXH00; Update YF_JPMXYZ set MXBQID=Vmxbqid,PZPCID=Vhzbqid where (YPQLPC,YYRQ00,PSPC00) in (select YPQLPC,YYRQ00,v_YZYPSQ.PSPC00 from YF_YZYPSQ where yzid00=v_YZYPSQ.yzid00 and YYRQ00=Pyyrq00) and MXBQID+0 = 0 and ZNXH00=VZNXH00; IF SQL%NOTFOUND THEN Ptsxx00 := 'YF_YZYPSQ.yzid00='||to_char(v_YZYPSQ.yzid00)||'YYRQ00='||Pyyrq00||'已生成明细标签医嘱!*'; raise Ecustom; end if; --1.4 写入 药房静配汇总标签对应汇总药品 OPEN c_YPSQMX; fetch c_YPSQMX into v_YPSQMX; while c_YPSQMX%FOUND loop Update YF_JPHZYP a set SYZSL0=SYZSL0+round(v_YPSQMX.SYZSL0*v_YPSQMX.ZHL000/a.ZHL000,3) where PZPCID=Vhzbqid and YPNM00=v_YPSQMX.YPNM00; IF SQL%NOTFOUND THEN insert into YF_JPHZYP( PZPCID , --汇总标签ID号 F.K=YF_JPHZBQ.ID0000 YPNM00 , --药品内码 QLDW00 , --请领单位 SYZSL0 , --送药总数量(请领单位) --ZCXSL0 , --总冲销数量(请领单位) ZHL000 --转换率(请领单位/剂量单位) ) values ( Vhzbqid, v_YPSQMX.YPNM00, v_YPSQMX.QLDW00, v_YPSQMX.SYZSL0, --0, v_YPSQMX.ZHL000 ); end if; fetch c_YPSQMX into v_YPSQMX; end loop; close c_YPSQMX; --2.1写入汇总标签 if VZDS000>0 and mod(VZDS000,VMAXZDS) = 0 then VHZBQSL := VHZBQSL + 1; select nvl(max(txm000),to_char(Vsysdate,'YYYYMMDD')||'000000') into Vtxmhz0 from YF_JPPZD0 where txm000 like to_char(Vsysdate,'YYYYMMDD')||'%'; Vtxmhz0 := to_char(Vsysdate,'YYYYMMDD')||lpad(to_number(substr(Vtxmhz0,9,6))+1,6,'0'); insert into YF_JPPZD0( PZPCID , --汇总标签ID号 SQ_YF_JPHZBQ_ID0000 YFBMBH , --药房部门编号 YPNM00 , --药品内码 PSPC00 , --送药批次(12345),允许多选 ZJLB00 , --针剂类别(1抗菌素、2化疗药、3营养药、9全部) JYLX00 , --加药类型(0单个多个,1单瓶,2单个,3多个,4遗漏,9全部) YYRQ00 , --用药日期 TXM000 , --条形码:20130107(用药日期)+000001(6位流水号) ZDS000 , --总袋数 KDR000 , --开单人 KDRQ00 , --开单日期 KDSJ00 , --开单时间 TJR000 , --调剂人 DYCS00 , --打印次数 HDR000 , --核对人 HDRQ00 , --核对日期 HDSJ00 , --核对时间 BZ0000 --备注 )values( Vhzbqid , --汇总标签ID号 SQ_YF_JPHZBQ_ID0000 Pyfbmbh , --药房部门编号 Vypnm00 , --药品内码 --nvl(Ppspc00,Vpspchz) , --送药批次(12345),允许多选 Vpspc00 , --单个配送批次 nvl(Pzjlb00,Vzjlb00) , --针剂类别(1抗菌素、2化疗药、3营养药、9全部) --nvl(Pjylx00,'9') , --加药类型(0单个多个,1单瓶,2单个,3多个,4遗漏,9全部) Vjylx00 , --加药类型(1单瓶,2单个,3多个) Pyyrq00 , --用药日期 Vtxmhz0 , --条形码:20130107(用药日期)+000001(6位流水号) VZDS000 , --总袋数 Pczy000 , --开单人 to_char(Vsysdate,'YYYYMMDD') , --开单日期 to_char(Vsysdate,'hh24:mi:ss') , --开单时间 Pczy000 , --调剂人 0 , --打印次数 NULL , --核对人 NULL , --核对日期 NULL , --核对时间 '' --备注 ); Ptsxx00 := substrb(Ptsxx00||chr(13)||chr(10)||'条码【'||Vtxmhz0||'】,总袋数:'||to_char(VZDS000),1,240); if Ptxmhz0 is null then Ptxmhz0 := Vtxmhz0; else Ptxmhz0 := substrb(Ptxmhz0||','||Vtxmhz0,1,240);--Ptxmhz0||','||Vtxmhz0; end if; VZDS000 := 0; VZXH000 := 0; select SQ_YF_JPPZD0_PZPCID.nextval into Vhzbqid from dual; end if; fetch c_YZYPSQ into v_YZYPSQ; end loop; close c_YZYPSQ; --2.2写入汇总标签 if VZDS000>0 then VHZBQSL := VHZBQSL + 1; select nvl(max(txm000),to_char(Vsysdate,'YYYYMMDD')||'000000') into Vtxmhz0 from YF_JPPZD0 where txm000 like to_char(Vsysdate,'YYYYMMDD')||'%'; Vtxmhz0 := to_char(Vsysdate,'YYYYMMDD')||lpad(to_number(substr(Vtxmhz0,9,6))+1,6,'0'); insert into YF_JPPZD0( PZPCID , --汇总标签ID号 SQ_YF_JPHZBQ_ID0000 YFBMBH , --药房部门编号 YPNM00 , --药品内码 PSPC00 , --送药批次(12345),允许多选 ZJLB00 , --针剂类别(1抗菌素、2化疗药、3营养药、9全部) JYLX00 , --加药类型(0单个多个,1单瓶,2单个,3多个,4遗漏,9全部) YYRQ00 , --用药日期 TXM000 , --条形码:20130107(用药日期)+000001(6位流水号) ZDS000 , --总袋数 KDR000 , --开单人 KDRQ00 , --开单日期 KDSJ00 , --开单时间 TJR000 , --调剂人 DYCS00 , --打印次数 HDR000 , --核对人 HDRQ00 , --核对日期 HDSJ00 , --核对时间 BZ0000 --备注 )values( Vhzbqid , --汇总标签ID号 SQ_YF_JPHZBQ_ID0000 Pyfbmbh , --药房部门编号 Vypnm00 , --药品内码 --nvl(Ppspc00,Vpspchz) , --送药批次(12345),允许多选 Vpspc00 , --单个配送批次 nvl(Pzjlb00,Vzjlb00) , --针剂类别(1抗菌素、2化疗药、3营养药、9全部) --nvl(Pjylx00,'9') , --加药类型(0单个多个,1单瓶,2单个,3多个,4遗漏,9全部) Vjylx00 , --加药类型(1单瓶,2单个,3多个) Pyyrq00 , --用药日期 Vtxmhz0 , --条形码:20130107(用药日期)+000001(6位流水号) VZDS000 , --总袋数 Pczy000 , --开单人 to_char(Vsysdate,'YYYYMMDD') , --开单日期 to_char(Vsysdate,'hh24:mi:ss') , --开单时间 Pczy000 , --调剂人 0 , --打印次数 NULL , --核对人 NULL , --核对日期 NULL , --核对时间 '' --备注 ); Ptsxx00 := substrb(Ptsxx00||chr(13)||'条码【'||Vtxmhz0||'】,总袋数:'||to_char(VZDS000),1,240); if Ptxmhz0 is null then Ptxmhz0 := Vtxmhz0; else Ptxmhz0 := substrb(Ptxmhz0||','||Vtxmhz0,1,240); --Ptxmhz0||','||Vtxmhz0; end if; end if; fetch c_JPHZYP into Vypnm00,Vpspc00,Vjylx00; end loop; close c_JPHZYP; if lengthb(Ptxmhz0)=240 then Ptxmhz0 := ''; end if; if VHZBQSL>0 and Ptsxx00 is not null then Ptsxx00 := substrb('汇总标签总数:'||to_char(VHZBQSL)||chr(13)||Ptsxx00,1,240); end if; 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;