create or replace procedure SP_PY_SCPHDL -- MODIFICATION HISTORY -- Person Date Comments -- lintj 2012.08.18 modify -- qks 2012.11.06 皮试未通过,不生成处方队列 -- qks 2012.11.25 去掉条件or ls_SFPDQH='0' -- zhangwz 2013.01.18 增加传入参数ad_YFYYPH(已发药也排号,主要用于自助取号机暂停的时候走手工处方发药也能生成队列) -- zhangwz 2013.02.17 SF_PY_GETCKBH 增加入参Pcflsh0,更改本过程匹配之. -- qks 2017.05.22 增加参数控制指定药品也可以发往专窗BM_CKBM00.ZKCKBZ=1; for MZPY9-20170523-001 -- qks 2017.06.26 偶尔会出现MZPY_ZDYPFWZDZC不起作用情况; for MZPY9-20170626-001 -- qks 2017.10.17 扩展参数MZPY_ZDYPFWZDZC功能:指定科室药品发药(多个使用逗号分开)发往指定处方单格式的专窗(同时只允许一张处方); for MZPY9-20171017-001 -- liwm 2018.02.03 控制配置科室不进入处方队列,只能手动摆药; for MZPY9-20180223-001 -- gzj 2019.03.15 新增排队叫号按各窗口处方平均分配 for MZPY9-20190314-001 -- qks 2019.05.07 扩展修改参数MZPY_ZDYPFWZDZC功能:一张处方只包含一个药品以及血透中心,也发往指定处方单格式的专窗(同时只允许一张处方); for MZPY9-20190508-001 -- qks 2019.07.31 参数MZPY_ZDYPFWZDZC功能修改:1、表示同一次取号判断条件:GHH000条件改为BRID00,因为存在不同医生挂号 -- 2、原参数值第1部分内容的药品内码改为 药典备注从前面开始匹配; for MZPY9-20190731-001 -- qks 2019.09.18 新增参数MZPY_CFPHZDCFDGS:如果患者年龄>=指定值或属于指定的医保中心类别,则发往指定处方单格式的窗口; for MZPY9-20190918-002 -- qks 2019.10.28 修改 参数PY_DMCFSFBJRPHDL控制毒麻处方是否进入排号队列:只有参数值等于N,才进入排号队列; for MZPY9-20191028-001 -- liwm 2019.11.11 取号成功发消息 MZPY9-20191111-001 -- qks 2021.07.12 配药窗口尽量取同一配药窗口:处方队列的状态判断条件,改为未发药,即从原来改为ZT0000 in ('0')改为ZT0000 in ('0','1','2'); for MZPY9-20210714-001 -- linshu 2021.08.13 增加了启用摆药机后,药房生的的ZT0000=a MZPY9-20210813-001 -- luowf 2021.11.10 入参直接传进来的配药和发药窗口也要判断窗口状态 MZPY9-20211109-001 -- linshu 2021.11.19 参数MZPY_KSKCCFBJRDL来控制一些科室开出的处方不进入队列; for YF9-20211019-002 -- qks 2022.02.23 参数MZPY_CFPHZDCFDGS功能变更:处方排号,当患者年龄>=值,属于医保中心类别值,中药剂数<=值,是否代煎(值为Y或N),中药用法名称包含值,则发往指定药房对应处方单格式的窗口值(如:急诊=4): -- 1段年龄|2医保中心|3中药剂数|4代煎|5中药用法名称|6指定药房|7处方单格式,默认为N,参数值格式如:80|A,Q|4|Y|精品包装|2272|4; for MZPY9-20220220-001 -- linshu 2022.11.21 协定方窗口配置专窗 for MZPY9-20221115-001 -- linshu 2023.04.20 协定专窗没有开的情况下,协定处方按原来的规则走窗口; for MZPY9-20230419-001 -- linshu 2023.05.15 修正了参数MZPY_SCPHDLSFAKQCKPJFP=Y时,SP_PY_GETCKBH中没有获取到YPDLBH的值; for MZPY9-20230410-002 -- linshu 2023.06.26 由函数(SF_PY_GETZDCK)窗口; for MZPY9-20230625-001 -- linshu 2023.06.28 指定的XT_YZMB00.MBID00开出的处方不进入协定方窗口; for MZPY9-20230602-002 -- linshu 2023.07.19 代煎参数没开启的情况下,返回为1; for YF9-20230504-002; -- luowf 2024.03.14 为避免发药机流程出现没取号问题,去除之前MZPY9-20211109-001因手工发药进入队列的流程而改动的内容 MZPY13-20240313-001 -- --------- ---------- -------------------------------------------------------------------------------------------------- ( as_CFLSH0 in char, --处方流水号 ad_SFCKBH in number default 0, --收费窗口编号 (Add on 2003-03-31) ad_PYCKBH in number default 0, ad_FYCKBH in number default 0, as_YHMSG0 out varchar, --存储过程提示的错误信息 as_SYSMSG out varchar, --系统提示的错误信息 ad_CZY000 in number default 99999, --操作员 ad_CZYKS0 in number default null, --操作员科室 ad_YFYYPH in char default 'N' --已发药也排号,主要用于自助取号机暂停的时候走手工处方发药也能生成队列 ) as ls_CFZJE0 YF_MZCF00.CFZJE0%type; --处方总金额 ls_BRID00 YF_MZCF00.BRID00%type; ls_GHH000 YF_MZCF00.GHH000%type; ls_YFBMBH YF_MZCF00.YFBMBH%type; ls_SRRQ00 YF_MZCF00.SRRQ00%type; ls_CFZT00 YF_MZCF00.CFZT00%type; ls_GHKS00 number; ls_CFDGS0 VARCHAR2(10); ls_YPCZFL VARCHAR2(10); --药品材质分类 0:普通中草药 1:颗粒药 2:全成分,3:包药机药品 ls_PYDLBH VARCHAR2(10); --0西药1成药2中药4农本方5全成分6中药代煎 ls_DLXH00 YF_CFDL00.DLXH00%type; ls_PYCKBH YF_CFDL00.PYCKBH%type; --配药窗口编码 ls_FYCKBH YF_CFDL00.FYCKBH%type; --发药窗口编码 --ls_CKLXID BM_CKBM00.CKLXID%type; --窗口类型ID Vdjcfbpd varchar2(10); Vqydjgl varchar2(10); --是否启用中药代煎管理系统 ls_SFKSLY YF_MZCF00.SFKSLY%type; V_ZYDJS0 YF_MZCF00.ZYDJS0%type; V_YPDLBH YF_MZCF00.YPDLBH%type; ls_SFPDQH YF_MZCF00.SFPDQH%type; ls_PSZT00 YF_MZCF00.PSZT00%type; ls_KFPC00 YF_MZCF00.KFPC00%type; ls_ZDYPZC XT_XTCS00.VALUE0%type; --指定药品发药(多个使用逗号分开)发往指定处方单格式的专窗 ls_YDBZPP varchar2(100); --药典备注从前面开始匹配 ls_ZDCFDGS VARCHAR2(10); --指定药品发药(多个使用逗号分开)发往指定处方单格式 ls_ZDCFDGS_TEMP VARCHAR2(10); --指定处方单格式临时变量值 ls_ZDKSNM varchar2(50); --指定科室内码(多个使用逗号分开)发往指定处方单格式的专窗 ls_ZDYFNM varchar2(30); --指定药房内码(多个使用逗号分开)发往指定处方单格式的专窗 ls_CFYPPZ number(2); --指定处方药品品种数,当值大于0,表示发往指定处方单格式的专窗 Vcfblts number; v_counter number; V_DJDH00 number; --返回代煎单号 Vzxcgbz number; Vtsxx00 varchar2(200); Vxxxx00 varchar2(200); Vparams varchar2(400); ls_SFYXKSJRCFDL XT_XTCS00.VALUE0%type; V_SCPHDLSFAKQCKPJFP XT_XTCS00.VALUE0%type; ls_HZCFGS XT_XTCS00.VALUE0%type; --符合条件的患者处方发往指定处方单格式的专窗 ls_YBZXLB IC_YBBRLB.YBZXLB%type; Ls_BRCSRQ BM_BRXXB0.BRCSRQ%type; Ls_CKMC00 BM_CKBM00.CKMC00%type; Ls_ZT0000 BM_CKBM00.ZT0000%type; Ls_SSKS00 YF_MZCF00.SSKS00%type; Ls_ZYTS00 YF_MZCF00.ZYTS00%type; ls_XDFBZ0 YF_MZCF00.XDFBZ0%type; ls_XDPYCK BM_CKBM00.CKBH00%type; ls_XDFYCK BM_CKBM00.CKBH00%type; LS_PYCKZT BM_CKBM00.ZT0000%type; LS_FYCKZT BM_CKBM00.ZT0000%type; LS_YYMBID BM_TYZD00.MC0000%type; LS_JYXMDM XT_XTCS00.VALUE0%type; LS_SQLSTR varchar(500); begin select count(*) into v_counter from YF_CFDL00 where CFLSH0=AS_CFLSH0; if v_counter>0 then return; end if; Vparams :=nvl(as_CFLSH0,'null')||','||nvl(to_char(ad_SFCKBH),'null')||','||nvl(to_char(ad_PYCKBH),'null')||','|| nvl(to_char(ad_FYCKBH),'null')||','||nvl(to_char(ad_CZY000),'null')||','||nvl(to_char(ad_CZYKS0),'null'); SP_TransLog(sysdate,'SP_PY_SCPHDL',ad_CZY000,ad_CZYKS0,Vparams); -- select count(*) into v_counter from YF_MZCF00 where CFLSH0=AS_CFLSH0; -- if v_counter>0 then -- return; -- end if; --中药待煎处方是否不进入处方队列 Y不进入 M进入队列但打印后直接将处方状态置成发药状态,N进入 默认为N -- 需注意如果参数YF_SFQYDJGLGN=Y的话打印步骤只进行发药状态并不打印处方及代煎单 select nvl(max(trim(VALUE0)),'N') into Vdjcfbpd from xt_xtcs00 where name00='MZPY_DJZYCFBJRCFDL'; --是否启用中药代煎管理系统 select nvl(max(trim(VALUE0)),'N') into Vqydjgl from xt_xtcs00 where name00='YF_SFQYDJGLGN'; --处方保留天数 select to_number(nvl(max(trim(VALUE0)),'1')) into Vcfblts from xt_xtcs00 where name00='YF_MZCFBLTS'; --取参数生成排号队列时是否按开启窗口平均分配 select nvl(max(trim(Value0)),'N') into V_SCPHDLSFAKQCKPJFP from xt_xtcs00 where name00='MZPY_SCPHDLSFAKQCKPJFP'; --毒麻处方不进入队列 select NVL(A.BRID00,0),SFKSLY,A.YFBMBH,A.ZYDJS0,A.YPDLBH,A.GHH000,A.CFDGS0,A.SRRQ00,A.CFZT00, decode(a.YPDLBH,'2',decode(A.ZYDJS0,0,'2','6'),a.YPDLBH),A.CFZJE0,a.YPCZFL,a.GHKS00,a.SFPDQH,a.PSZT00,a.KFPC00, (select YBZXLB from IC_YBBRLB where YBLB00=c.YBLB00 and FBBH00=c.FBBH00 and rownum=1),C.BRCSRQ,A.SSKS00,A.ZYTS00 into ls_BRID00,ls_SFKSLY,ls_YFBMBH,V_ZYDJS0,V_YPDLBH,ls_GHH000,ls_CFDGS0,ls_SRRQ00,ls_CFZT00, ls_PYDLBH,ls_CFZJE0,ls_YPCZFL,ls_GHKS00,ls_SFPDQH,ls_PSZT00,ls_KFPC00, ls_YBZXLB,Ls_BRCSRQ,Ls_SSKS00,Ls_ZYTS00 from YF_MZCF00 A,BM_YPLB00 B,BM_BRXXB0 C where A.YPDLBH = B.LBBH00 and A.CFLSH0 = AS_CFLSH0 and A.BRID00=C.BRID00 ; --协定处方 for MZPY9-20221115-001 ls_XDPYCK := -1; ls_XDFYCK := -1; select nvl(max(XDFBZ0),'0') into ls_XDFBZ0 from YF_MZCF00 where CFLSH0= AS_CFLSH0; if ls_XDFBZ0='1' then --配药窗口 select nvl(max(trim(BH0000)),'0') into LS_XDPYCK from BM_TYZD00 where ZDMC00='协定方药房配药窗口' and DJ0000=trim(ls_YFBMBH) and YXBZ00='1'; select ZT0000 into LS_PYCKZT from bm_ckbm00 where CKBH00 = LS_XDPYCK; if LS_PYCKZT <> '0' then ls_XDPYCK:=-1; end if; --发药窗口 select nvl(max(trim(BH0000)),'0') into ls_XDFYCK from BM_TYZD00 where ZDMC00='协定方药房发药窗口' and DJ0000=trim(ls_YFBMBH) and YXBZ00='1'; select ZT0000 into LS_FYCKZT from bm_ckbm00 where CKBH00 = LS_XDFYCK; if LS_FYCKZT <> '0' then ls_XDFYCK := -1; end if; end if; --指定科室开出的处方不进入处方队列 select instrb(','||nvl(max(trim(VALUE0)),'0')||',',','||to_char(Ls_SSKS00)||',') into v_counter from xt_xtcs00 where name00='MZPY_KSKCCFBJRDL'; if v_counter > 0 then return; end if; if ls_SRRQ00<=to_char(sysdate-Vcfblts,'YYYYMMDD') or ls_CFZJE0<0 or (ls_CFZT00 not in ('1') and ad_YFYYPH='N') then --注意,一定要先取号,再扣库存 return; end if; select nvl(max(VALUE0), 'N') into ls_SFYXKSJRCFDL from XT_XTCS00 where NAME00='MZPY_SFYXKSJRCFDL'; --判断挂号科室是否要进入处方队列 if instr(ls_SFYXKSJRCFDL||',', 'Y,') >0 and instr(ls_SFYXKSJRCFDL||',', ','||ls_GHKS00||',') >0 then return; end if; select nvl(max(trim(VALUE0)),'0') into LS_JYXMDM from XT_XTCS00 where NAME00='YF_ZYJYFDM'; if ( V_ZYDJS0>0 ) and ( SF_PY_GetSFSDJF(1,AS_CFLSH0)<>1 ) and ( LS_JYXMDM <> '0' ) then as_YHMSG0:='中药处方代煎费未收,不能取号!'; rollback; return; end if; if ls_CFDGS0 in ('0') then --毒麻 --or ls_SFPDQH='0' --select count(*) into v_counter from XT_XTCS00 where NAME00='PY_DMCFSFBJRPHDL' and VALUE0='Y'; --if v_counter>0 then --2019.10.28 修改 参数PY_DMCFSFBJRPHDL控制毒麻处方是否进入排号队列:只有参数值等于N,才进入排号队列; select count(1) into v_counter from XT_XTCS00 where NAME00='PY_DMCFSFBJRPHDL' and VALUE0='N'; if v_counter=0 then return; end if; end if; --皮试未通过不产生处方队列 v_counter :=SF_MZ_PSCFYS(ls_GHH000,AS_CFLSH0); if v_counter=-1 then return; elsif v_counter=-2 then return; end if; if (ls_PSZT00='1') or (ls_PSZT00='2') then --皮试状态:'0'非皮试,'1'需皮试,'2'皮试未通过不能发药,'3',皮试通过可发药 return; end if; if ls_PYDLBH='2' and ls_YPCZFL in ('1','2') then --1:农本方 2:全成分 if ls_YPCZFL='1' then ls_PYDLBH:='4'; else ls_PYDLBH:='5'; end if; end if; /*中药待煎处方不进入处方配药队列 开始*/ if (Vdjcfbpd='Y') and (V_YPDLBH='2') and (V_ZYDJS0>0) then return; end if; --基数药处方不能产生配药任务 if ls_SFKSLY='Y' then return; end if; --2017.05.22 qks 指定药品发药(多个使用逗号分开)发往指定处方单格式的专窗(同时只允许一张处方) ls_ZDCFDGS := null; ls_ZDKSNM := '0'; ls_ZDYFNM := '0'; ls_CFYPPZ := 0; select nvl(max(trim(value0)),'N') into ls_ZDYPZC from xt_xtcs00 where name00='MZPY_ZDYPFWZDZC'; --2019.05.07 qks --格式比如:9000004957,9000084142,9000085345,9000085370|2|2227|2275|1 -- 指定药品|处方单格式|指定挂号科室|指定药房|处方品种数 --2019.07.31 qks --格式比如:*|2|2227|2275|1 -- 指定药典备注首字符|处方单格式|指定挂号科室|指定药房|处方品种数 if instrb(ls_ZDYPZC,'|',1,4)>0 then ls_ZDKSNM := substrb(ls_ZDYPZC,instrb(ls_ZDYPZC,'|',1,2)+1,instrb(ls_ZDYPZC,'|',1,3)-instrb(ls_ZDYPZC,'|',1,2)-1); ls_ZDYFNM := substrb(ls_ZDYPZC,instrb(ls_ZDYPZC,'|',1,3)+1,instrb(ls_ZDYPZC,'|',1,4)-instrb(ls_ZDYPZC,'|',1,3)-1); if instrb(','||ls_ZDYFNM||',',','||ls_YFBMBH||',')>0 then select count(1) into v_counter from BM_CKBM00 where BMBH00=ls_YFBMBH and FLAG00='3' and ZKCKBZ='1' and ZT0000='0'; if v_counter>0 then ls_YDBZPP := substrb(ls_ZDYPZC,1,instrb(ls_ZDYPZC,'|')-1); ls_CFYPPZ := nvl(substrb(ls_ZDYPZC,instrb(ls_ZDYPZC,'|',1,4)+1,1),0); --2019.05.07 qks 指定处方包含某些药品或者总品种数为指定值(目前是1),发往指定处方单格式的专窗(同时只允许一张处方)。 --2019.07.31 qks 指定处方药典备注从前面开始匹配 并且 总品种数<=指定值(目前是1),发往指定处方单格式的专窗(同时只允许一张处方)。 if ls_YDBZPP is not null and ls_CFYPPZ>0 then select count(1),sum(decode(instrb(b.BZ0000,ls_YDBZPP),1,1,0)) into v_counter,Vzxcgbz from YF_MZCFMX a,BM_YD0000 b where a.CFLSH0=as_CFLSH0 and a.YPNM00=b.YPNM00 and a.SFZBY0='N'; if Vzxcgbz>0 and v_counter<=ls_CFYPPZ then select count(1) into v_counter from YF_MZCF00 where BRID00=ls_BRID00 and KFPC00=ls_KFPC00 and YFBMBH=ls_YFBMBH ; if v_counter = 1 then ls_ZDCFDGS := substrb(ls_ZDYPZC,instrb(ls_ZDYPZC,'|')+1,1); end if; end if; end if; --2019.05.07 qks 指定科室发药(多个使用逗号分开)发往指定处方单格式的专窗(同时只允许一张处方) if nvl(ls_ZDKSNM,'0')<>'0' and ls_ZDCFDGS is null then if instrb(','||ls_ZDKSNM||',',','||ls_GHKS00||',')>0 then select count(1) into v_counter from YF_MZCF00 where BRID00=ls_BRID00 and KFPC00=ls_KFPC00 and YFBMBH=ls_YFBMBH; if v_counter = 1 then ls_ZDCFDGS := substrb(ls_ZDYPZC,instrb(ls_ZDYPZC,'|')+1,1); end if; end if; end if; end if; end if; end if; --2019.09.18 qks 新增参数MZPY_CFPHZDCFDGS --2022.02.23 qks 参数MZPY_CFPHZDCFDGS功能变更:处方排号,当患者年龄>=值,属于医保中心类别值,中药剂数<=值,是否代煎(值为Y或N),中药用法名称包含值,则发往指定药房对应处方单格式的窗口值(如:急诊=4):1段年龄|2医保中心|3中药剂数|4代煎|5中药用法名称|6指定药房|7处方单格式,默认为N,参数值格式如:80|A,Q|4|Y|精品包装|2272|4 if ls_ZDCFDGS is null then select nvl(max(trim(value0)),'N') into ls_HZCFGS from xt_xtcs00 where name00='MZPY_CFPHZDCFDGS'; if ls_HZCFGS<>'N' and instrb(ls_HZCFGS,'|',1,6)>0 then ls_ZDYFNM := SF_XT_returnINDEXEH(ls_HZCFGS,'|',6); if instrb(','||ls_ZDYFNM||',',','||ls_YFBMBH||',')>0 then ls_ZDCFDGS_TEMP := SF_XT_returnINDEXEH(ls_HZCFGS,'|',7); --1.年龄判断 ls_ZDKSNM := nvl(SF_XT_returnINDEXEH(ls_HZCFGS,'|',1),'0'); if ls_ZDKSNM<>'0' then if sf_sf_CsrqToNl_NUM(Ls_BRCSRQ)>=to_number(ls_ZDKSNM) then ls_ZDCFDGS := ls_ZDCFDGS_TEMP; end if; end if; --2.医保中心类别 if ls_ZDCFDGS is null then ls_ZDKSNM := SF_XT_returnINDEXEH(ls_HZCFGS,'|',2); if ls_ZDKSNM is not null then if instrb(ls_ZDKSNM,ls_YBZXLB)>0 then ls_ZDCFDGS := ls_ZDCFDGS_TEMP; end if; end if; end if; --3.中药剂数 if V_YPDLBH='2' and ls_ZDCFDGS is null then ls_ZDKSNM := nvl(SF_XT_returnINDEXEH(ls_HZCFGS,'|',3),'0'); if ls_ZDKSNM<>'0' then if Ls_ZYTS00<=to_number(ls_ZDKSNM) then ls_ZDCFDGS := ls_ZDCFDGS_TEMP; end if; end if; end if; --4.代煎 if V_YPDLBH='2' and V_ZYDJS0>0 and ls_ZDCFDGS is null then ls_ZDKSNM := nvl(SF_XT_returnINDEXEH(ls_HZCFGS,'|',4),'N'); if ls_ZDKSNM='Y' then ls_ZDCFDGS := ls_ZDCFDGS_TEMP; end if; end if; --5.中药用法名称(中药整剂用法名称) if V_YPDLBH='2' and ls_ZDCFDGS is null then ls_ZDKSNM := SF_XT_returnINDEXEH(ls_HZCFGS,'|',5); if ls_ZDKSNM is not null then select count(1) into v_counter from YF_MZCFMX where CFLSH0=as_CFLSH0 and SFZBY0='N' and instrb(ZJYFMC,ls_ZDKSNM)>0 and rownum=1; if v_counter>0 then ls_ZDCFDGS := ls_ZDCFDGS_TEMP; end if; end if; end if; end if; end if; end if; if (NVL(ad_PYCKBH,0)<>0)and(NVL(ad_FYCKBH,0)<>0) then ls_PYCKBH:=ad_PYCKBH; ls_FYCKBH:=ad_FYCKBH; --要判断一下窗口状态 MZPY9-20211109-001 ,不判断了 MZPY13-20240313-001 --begin -- select CKMC00,ZT0000 into Ls_CKMC00,Ls_ZT0000 from BM_CKBM00 where FLAG00='2' and CKBH00=ls_PYCKBH; -- if ('2' = Ls_ZT0000) then -- as_YHMSG0 := '配药窗口'||Ls_CKMC00||'未开启!'; -- rollback; -- return; -- end if; --exception -- when others then -- as_YHMSG0:='获取该处方的配药窗口失败,请稍候再试!'; -- rollback; -- return; --end; --begin -- select CKMC00,ZT0000 into Ls_CKMC00,Ls_ZT0000 from BM_CKBM00 where FLAG00='3' and CKBH00=ls_FYCKBH; -- if ('2' = Ls_ZT0000) then -- as_YHMSG0 := '发药窗口'||Ls_CKMC00||'未开启!'; -- rollback; -- return; -- end if; --exception -- when others then -- as_YHMSG0:='获取该处方的发药窗口失败,请稍候再试!'; -- rollback; -- return; --end; else begin --配药窗口尽量取同一配药窗口,避免病人多窗口等待(原则:配药窗口开放,处方未发药的) select a.PYCKBH into ls_PYCKBH from YF_CFDL00 a where a.brid00=ls_BRID00 and a.YFBMBH=ls_YFBMBH and ZT0000 in ('a','0','1','2') and PYCKBH>0 and PHRQ00=to_char(sysdate,'yyyymmdd') and PYCKBH in (select B.CKBH00 from BM_CKBM00 B,BM_CKDY00 D,BM_CKBM00 E, (select PYCKBH,COUNT(*) NUM from YF_CFDL00 where ZT0000 in ('a','0','1','2') and YFBMBH=ls_YFBMBH and PHRQ00=to_char(sysdate,'yyyymmdd') and PYCKBH>0 group by PYCKBH) C where b.CKBH00=c.PYCKBH(+) and B.BMBH00 = ls_YFBMBH and b.FLAG00='2' and B.ZT0000='0' and b.CKBH00=d.SCKBH0 and d.DCKBH0 = E.CKBH00 and E.FLAG00='3' and E.ZT0000='0' and E.BMBH00=ls_YFBMBH and instrb(nvl(b.YPDLBH,'0,1,2,3,4,6'),nvl(ls_PYDLBH,'0'))>0 and SF_PY_ZKCKPD_PY(SF_PY_ZKCFPD(ls_GHKS00,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH),b.CKBH00,ls_GHKS00,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH)=1 and SF_PY_ZKCKPD_FY(SF_PY_ZKCFPD(ls_GHKS00,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH),e.CKBH00,ls_GHKS00,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH)=1 and (ad_SFCKBH=0 or exists (select 1 from BM_CKDY00 i where i.SCKBH0=ad_SFCKBH and i.DCKBH0=b.CKBH00))--收费窗口界定 ) and rownum=1; exception when others then --配药窗口重新取 begin if V_SCPHDLSFAKQCKPJFP='Y' then SP_PY_GETCKBH(ls_YFBMBH,ad_SFCKBH,1,nvl(ls_ZDCFDGS,ls_CFDGS0||','||ls_PYDLBH),ls_GHKS00,0,ls_PYCKBH); -- 从过程中得到配药窗口 else ls_PYCKBH := SF_PY_GETCKBH(ls_YFBMBH,ls_GHKS00,ad_SFCKBH,1,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH,as_CFLSH0); --从函数中得到配药窗口 end if; --指定配药窗口 ls_PYCKBH := SF_PY_GETZDCK(as_CFLSH0,ls_PYCKBH,1,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH); exception when others then as_YHMSG0:='获取该处方的配药窗口失败,请稍候再试!'; as_SYSMSG:=SQLERRM||'SF_PY_GETCKBH('||to_char(ls_YFBMBH)||','||to_char(0)||',1)'; rollback; return; END; end; begin --发药窗口尽量取同一发药窗口,避免病人多窗口等待(原则:发药窗口开放,处方未发药的) select a.FYCKBH into ls_FYCKBH from YF_CFDL00 a where a.brid00=ls_BRID00 and a.YFBMBH=ls_YFBMBH and ZT0000 in ('a','0','1','2') and PHRQ00=to_char(sysdate,'yyyymmdd') and FYCKBH in (select E.CKBH00 from BM_CKDY00 D,BM_CKBM00 E, (select FYCKBH,COUNT(*) NUM from YF_CFDL00 where ZT0000 in ('a','0','1','2') and YFBMBH=ls_YFBMBH and PHRQ00=to_char(sysdate,'yyyymmdd') and FYCKBH>0 group by FYCKBH) C where d.SCKBH0=ls_PYCKBH and d.DCKBH0 = E.CKBH00(+) and E.FLAG00='3' and E.ZT0000='0' and E.BMBH00=ls_YFBMBH and SF_PY_ZKCKPD_FY(SF_PY_ZKCFPD(ls_GHKS00,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH),e.CKBH00,ls_GHKS00,ls_CFDGS0,ls_PYDLBH)=1 ) and rownum=1; exception when others then begin if V_SCPHDLSFAKQCKPJFP='Y' then SP_PY_GETCKBH(ls_YFBMBH,ls_PYCKBH,2,nvl(ls_ZDCFDGS,ls_CFDGS0||','||ls_PYDLBH),ls_GHKS00,0,ls_FYCKBH); -- 从过程中得到配药窗口 else ls_FYCKBH := SF_PY_GETCKBH(ls_YFBMBH,ls_GHKS00,ls_PYCKBH,2,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH,as_CFLSH0); --从函数中得到发药窗口 end if; ls_FYCKBH := SF_PY_GETZDCK(as_CFLSH0,ls_FYCKBH,2,nvl(ls_ZDCFDGS,ls_CFDGS0),ls_PYDLBH); exception when others then as_YHMSG0:='获取该处方的发药窗口失败,请稍候再试!'; as_SYSMSG:=SQLERRM||'SF_PY_GETCKBH('||to_char(ls_YFBMBH)||','||to_char(ls_PYCKBH)||',2)'; rollback; return; END; end; end if; --协定方专窗 if ls_XDFBZ0='1' and ls_XDPYCK>0 and ls_XDFYCK>0 then --指定的XT_YZMB00.MBID00不进入协定方窗口; for MZPY9-20230602-002 v_counter := 0 ; begin select nvl(max(trim(MC0000)), '0') into LS_YYMBID from BM_TYZD00 where ZDMC00 = '协定处方公共配置' and BH0000 = 'YYMBID' and YXBZ00 = '1'; exception when others then LS_YYMBID := '0'; end; begin LS_SQLSTR := ' select count(1) from YS_CFMX00 WHERE CFLSH0 = :CFLSH0 and YYMBID in (' ||LS_YYMBID || ')'; execute immediate LS_SQLSTR into v_counter using in as_CFLSH0; exception when others then v_counter := 0 ; end; if v_counter = 0 then ls_PYCKBH:=ls_XDPYCK; ls_FYCKBH:=ls_XDFYCK; end if; end if; if (ls_FYCKBH=0) or (ls_PYCKBH=0) then Insert Into XT_XTCZRZ(CZID00,CZTable,CZLX00,CZRYBM,CZNR00,DATAID) Values(SQ_XT_XTCZRZ_ID0000.nextval,'BM_CKBM00',0,0,to_char(ls_PYCKBH)||','||to_char(ls_FYCKBH),to_number(as_CFLSH0)); ls_PYCKBH:=0; ls_FYCKBH:=0; end if; if ls_PYCKBH=0 then as_YHMSG0:='药房排号窗口未开启,请咨询药房取药!'; as_SYSMSG:=SQLERRM||'SF_PY_GETCKBH('||to_char(ls_YFBMBH)||','||to_char(0)||',1)'; rollback; return; -- return; end if; select SQ_YF_CFDL00_DLXH00.nextval into ls_DLXH00 from dual; --生成YF_CFDL00记录 SP_YF_CFDL00_INSERT(ls_DLXH00, --队列序号 as_CFLSH0, --处方流水号 ls_YFBMBH, --药房部门编号' ls_CFZJE0, --药品金额 ls_GHH000, --挂号号 ls_PYCKBH, --配药窗口编号' ls_FYCKBH, --发药窗口编号' '0', --状态:''0''待打印 ad_CZY000, --输入:操作员编码 ad_CZYKS0, --操作员科室 'N', --是否提交 Vzxcgbz, --执行成功标志 1成功 0失败 Vtsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Vxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if ((Vqydjgl='Y') and (V_YPDLBH='2') and (V_ZYDJS0>0) ) then --by YFPY-20111205-001 SP_PY_INSERTJYXX(as_CFLSH0,as_YHMSG0,as_SYSMSG,V_DJDH00); end if; --发送取号信息 begin execute immediate 'begin SP_FZBMPT_PYDLXX('||ls_BRID00||','||ls_DLXH00||',''8'','||ls_YFBMBH||','||ls_FYCKBH||'); end;'; exception when others then v_counter := 0; end; --本处不加事务,在Delphi客户端处理 exception when NO_DATA_FOUND then as_YHMSG0:='对应的处方不存在或已记过账,登记非法!'; as_SYSMSG:=SQLERRM; rollback; when others then as_YHMSG0:='出错原因不详,请记录此信息并和系统管理员联系!'; as_SYSMSG:=substr(SQLERRM||'执行存储过程错误:SP_PY_SCPHDL('||AS_CFLSH0||','||',as_YHMSG0,as_SYSMSG)',1,120); rollback; end; /