prompt 13.门诊处方退药 SP_YF_MZCFTY create or replace procedure SP_YF_MZCFTY( -- modification history -- Person Date Comments -- lintj 2012.07.21 modify -- qks 2012.09.24 参数YF_WJSSFYXTY,同时增加V_MZCF00.CFZT00<>'1'判断 -- qks 2012.12.04 记账处方(V_MZCF00.CFZT00='1')退药申请,YF_MZCF00.FYRQ00,FYSJ00不写入;负方写入CFDGS0 -- zhangwz 2013.05.02 解决退药处方没有写入 YF_MZCF00.YPCZFL 的bug. -- zhangwz 2014.05.22 最后面的直接commit加入参进行判断是否commit. -- zhangwz 2014.06.10 YF_MZCF00有新增加的YYID00字段数据,退药处方也要体现这个数据 -- qks 2015.07.24 YF_MZCF00有新增加的SFKSJC字段数据,退药处方也要体现这个数据 -- gzj 2019.02.21 生成负单时对YF_MZCF00.FHR001字段写入值 for YF9-20190214-001 -- qks 2020.08.10 记账处方(V_MZCF00.CFZT00='1')退药申请,YF_MZCF00.FYR000从原来P_CZYBH0改为写入NULL; -- --------- ---------- ------------------------------------------- P_CFLSH0 in char, --输入:处方号 P_CZYBH0 in number, --输入:操作员编码 P_FHRBH0 in number, --输入:复核人编码 P_RET_CFLSH0 OUT VARchar2, --输出:退药的处方号 P_CLBZ00 in char default '0', --输入:处理标志 ‘0’ 开单和退药 '1' 只开单 P_Commit in char default 'Y' --是否提交 )as V_CFLSH0 YF_MZCF00.CFLSH0%type; V_EMessage VARchar2(100); V_MZCF00 YF_MZCF00%rowtype; V_CFZJE0 YF_MZCF00.CFZJE0%type; V_DQRQ00 YF_MZCF00.FYRQ00%type; V_DQSJ00 YF_MZCF00.FYSJ00%type; V_YPZSL0 YF_MZCFMX.YPZSL0%type; V_CXCFID YF_MZCFMX.CXCFID%type; V_DJH000 YF_MZCF00.DJH000%type; V_BRXM00 SF_BRXXB0.XM0000%type; V_XB0000 SF_BRXXB0.XB0000%type; V_CSRQ00 SF_BRXXB0.CSRQ00%type; V_JZDH00 SF_BRFY00.JZDH00%type; V_WJSTY0 XT_XTCS00.VALUE0%type; V_FBBH00 SF_BRXXB0.FBBH00%type; V_SFCXJSCSL XT_XTCS00.Value0%type; V_count0 number; V_CFMXJE_SRWS number(1); --处方明细金额--舍入位数(小数位保留位数) V_CFZJE_SRWS number(1); --处方总金额--舍入位数(小数位保留位数) V_CFMXJE_CZFS number(1); --处方明细金额--取整方式0--四舍五入,1--向前取整 V_CFZJE_CZFS number(1); --处方总金额--取整方式0--四舍五入,1--向前取整 V_params varchar2(255); --参数变量 Verrmsg varchar2(255); --错误提示变量 Ecustom exception; --错误变量 Vzxcgbz number; Vtsxx00 varchar2(200); Vxxxx00 varchar2(200); cursor C_MZCFMX is select * from YF_MZCFMX where CFLSH0 = V_CFLSH0; begin Verrmsg:=''; V_params:='调用过程: SP_YF_MZCFTY('||P_CFLSH0||to_char(P_CZYBH0)||') ; '; --取出中药处方退药的算法 select nvl(max(Trim(VALUE0)),'N') into V_SFCXJSCSL from XT_XTCS00 where NAME00='YF_SFCXJSCSL'; --取出未结算退药 select nvl(max(Trim(VALUE0)),'N') into V_WJSTY0 from XT_XTCS00 where NAME00='YF_WJSSFYXTY'; select * into V_MZCF00 from YF_MZCF00 where CFLSH0=P_CFLSH0; V_DJH000:=V_MZCF00.DJH000; select to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss') into V_DQRQ00,V_DQSJ00 from dual; --判断 if (V_WJSTY0='N') then --and (V_MZCF00.CFZT00<>'1') select JZDH00 into V_JZDH00 from SF_BRFY00 where DJH000=V_DJH000; if V_JZDH00>0 then Verrmsg:='此处方费用已结算,请取消结算后再退药!'; raise Ecustom; end if; end if; if V_MZCF00.GHID00 IS NULL then V_BRXM00:=V_MZCF00.BRXM00; V_XB0000:=''; V_CSRQ00:=''; ELSE select XM0000,XB0000,CSRQ00,FBBH00 into V_BRXM00,V_XB0000,V_CSRQ00,V_FBBH00 from SF_BRXXB0 where GHID00=V_MZCF00.GHID00; end if; ---------功能:对指定处方号,根据冲销数量产生负的处方 if V_MZCF00.CFZT00='1' then select SF_YK_GETLSH('MZYF_MZCFH') into V_CFLSH0 from dual; insert into YF_MZCF00( CFLSH0, --处方流水号 SQ_YS_CFXXB0_CFLSH0 LYDH00, --领药单号 SQ_YF_ZYCF00_LYDH00 YFBMBH, --药房部门编号 GHID00, --门诊病人挂号信息流水号(SQ_SF_BRXXB0_GHID00) GHH000, --挂号号(SQ_SF_BRXXB0_GHH000),暂时挂号号由序列来生成 BRID00, --病人ID号 BRXM00, --病人姓名 XB0000, --性别 CSRQ00, --出生日期 YSGZH0, --医师工作号 对应BM_YGBM00表 YSXM00, --医师姓名 对应BM_YGBM00表 SSKS00, --所属科室(医师) 对应BM_BMBM00表 GHKS00, --挂号科室(病人)(病人就诊科室) 对应BM_BMBM00表 ZYTS00, --中药贴数 YPDLBH, --药品大类编号 对应BM_YPLB00表 CFXZ00, --处方性质 :毒、麻、神经药品标志 '1'毒'2'麻'3'神经 BZID00, --病症ID号(主要用于毒麻处方) 对应BM_DMZD00表 BZMC00, --病症名称 CFZT00, --处方状态:--0未记账,1已记账,2已发药,--5科室已用:科室先给病人用药,该处方已经记账,但 --只能护士领药,病人不能再领药.6须确认(皮试),7皮试未通过不能发药 SFKSLY, --是否科室领药 'Y'科室领药,'N'病人领药 PSZT00, --皮试状态: FJFDJH, --附加费单据号 CZY000, --操作员 PFR000, --配方人 对应BM_YGBM00表 FHR000, --审核人 对应BM_YGBM00表 FHR001, --复核人 对应BM_YGBM00表 FYR000, --发药人 对应BM_YGBM00表 LYR000, --领药人(用于护士带领) 对应BM_YGBM00表 SRRQ00, --输入日期 SRSJ00, --输入时间 FYRQ00, --发药日期 FYSJ00, --发药时间 CFZJE0, --处方总金额 CYJE00, --成药金额 --JETHUA 2003.03.26 YXJE00, --药械金额 --JETHUA 2003.03.26 BRDZ00, --病人地址(主要用于毒麻处方) BZ0000, --备注 BCCFH0, --被冲销处方流水号 CFSRBZ, --处方输入标志:0医生,1药房,2收费处,3医技,4病区 TSBZBH, --特殊病种编号 CFDGS0, --处方单格式 YPCZFL, --药品材质分类 YYID00, --医院ID SFKSJC --是否科室寄存 ) values( V_CFLSH0, V_MZCF00.LYDH00, V_MZCF00.YFBMBH, V_MZCF00.GHID00, V_MZCF00.GHH000, V_MZCF00.BRID00, V_BRXM00, V_XB0000, V_CSRQ00, V_MZCF00.YSGZH0, V_MZCF00.YSXM00, V_MZCF00.SSKS00, V_MZCF00.GHKS00, V_MZCF00.ZYTS00, V_MZCF00.YPDLBH, V_MZCF00.CFXZ00, V_MZCF00.BZID00, V_MZCF00.BZMC00, '0', V_MZCF00.SFKSLY, V_MZCF00.PSZT00, V_MZCF00.FJFDJH, P_CZYBH0, V_MZCF00.PFR000, P_FHRBH0, P_FHRBH0, NULL, V_MZCF00.LYR000, V_DQRQ00, V_DQSJ00, NULL, NULL, --V_DQRQ00, V_DQSJ00, -V_MZCF00.CFZJE0, -V_MZCF00.CYJE00, --成药金额 --JETHUA 2003.03.26 -V_MZCF00.YXJE00, --药械金额 --JETHUA 2003.03.26 V_MZCF00.BRDZ00, V_MZCF00.BZ0000, V_MZCF00.CFLSH0, V_MZCF00.CFSRBZ, V_MZCF00.TSBZBH, V_MZCF00.CFDGS0, V_MZCF00.YPCZFL, V_MZCF00.YYID00, V_MZCF00.SFKSJC); insert into YF_MZCFMX( CFID00, --处方ID号 SQ_YS_CFMX00_CFID00 CFLSH0, --处方流水号 YPNM00, --药品内码 对应BM_YD0000表 YPMC00, --药品名称 YPGG00, --规格 GJDJ00, --购进单价(入库单位) LSDJ00, --零售单价(处方单位) PFDJ00, --批发单价(入库单位) YPYFMC, --药品用法名称 vw_BM_YPYF00_YPYFMC SFZBY0, --是否自备药'Y'是'N'否 PCMC00, --频次名称 CSL000, --次数量(剂量单位) JLDW00, --剂量单位(J) YYSJ00, --用药时间数 YYSJDW, --时间单位(天或小时) YFSMMC, --用法说明名称 对应BM_YPYFSM表 ZB0000, --组别 ZJYFMC, --中药整剂用法名称 vw_BM_YPZJYF_ZJYFMC XMYFMC, --中药细目用法名称 vw_BM_YPXMYF_XMYFMC YPZSL0, --药品总数量(处方单位) CFDW00, --处方单位 ZHL000, --转换率(处方单位/剂量单位) CXBZ00, --冲销标志 DEFAULT 'Z' CXCFID, --冲销处方ID(自动) SFXS00, --是否显示'Y'显示,'N'不显示,协定处方用 YPSCCJ, --药品产生厂家(名称)(毒麻药品用) YPSCPH, --药品生产批号(毒麻药品用) KPHSS0, --空瓶回收她(毒麻药品用) HSKPPH, --回收空瓶批号(毒麻药品用) ZFBL00, --医保自付比率 YBLB00, YPDLBH, --药品大类 QZFJE0, --全自费金额 -- JETHUA 2003.05.14 ZFJE00, --自付金额 GFJE00, --公费金额 HJJE00, JZJE00, BZ0000, --备注 F2J000, KCLSH0 ) select SQ_YS_CFMX00_CFID00.NEXTVAL, --处方ID号 SQ_YS_CFMX00_CFID00 V_CFLSH0, --处方流水号 YPNM00, --药品内码 对应BM_YD0000表 YPMC00, --药品名称 YPGG00, --规格 GJDJ00, --购进单价(入库单位) LSDJ00, --零售单价(处方单位) PFDJ00, --批发单价(入库单位) YPYFMC, --药品用法名称 vw_BM_YPYF00_YPYFMC SFZBY0, --是否自备药'Y'是'N'否 PCMC00, --频次名称 -CSL000, --次数量(剂量单位) JLDW00, --剂量单位(J) YYSJ00, --用药时间数 YYSJDW, --时间单位(天或小时) YFSMMC, --用法说明名称 对应BM_YPYFSM表 ZB0000, --组别 ZJYFMC, --中药整剂用法名称 vw_BM_YPZJYF_ZJYFMC XMYFMC, --中药细目用法名称 vw_BM_YPXMYF_XMYFMC -YPZSL0, --药品总数量(处方单位) CFDW00, --处方单位 ZHL000, --转换率(处方单位/剂量单位) '-', --冲销标志 DEFAULT 'Z' CFID00, --冲销处方ID(自动) SFXS00, --是否显示'Y'显示,'N'不显示,协定处方用 YPSCCJ, --药品产生厂家(名称)(毒麻药品用) YPSCPH, --药品生产批号(毒麻药品用) KPHSS0, --空瓶回收她(毒麻药品用) HSKPPH, --回收空瓶批号(毒麻药品用) ZFBL00, --医保自付比率 YBLB00, YPDLBH, --药品大类 -QZFJE0, --全自费金额 -- JETHUA 2003.05.14 -ZFJE00, --自付金额 -GFJE00, --公费金额 -HJJE00, -JZJE00, BZ0000, --备注 F2J000, KCLSH0 from YF_MZCFMX where CFLSH0=V_MZCF00.CFLSH0; --中药处方次数量处理 if (V_MZCF00.YPDLBH='2') and (V_SFCXJSCSL='Y') then update YF_MZCFMX SET CSL000=ROUND(YPZSL0*ZHL000/V_MZCF00.ZYTS00,4) where CFLSH0=V_CFLSH0; end if; ---修改原出库单明细标志 update YF_MZCFMX SET CXBZ00='+',ZCXSL0=YPZSL0, BCCXSL=0 where CFLSH0=V_MZCF00.CFLSH0; elsif V_MZCF00.CFZT00='2' then select SF_YK_GETLSH('MZYF_MZCFH') into V_CFLSH0 from dual; insert into YF_MZCF00( CFLSH0, --处方流水号 SQ_YS_CFXXB0_CFLSH0 LYDH00, --领药单号 SQ_YF_ZYCF00_LYDH00 YFBMBH, --药房部门编号 GHID00, --门诊病人挂号信息流水号(SQ_SF_BRXXB0_GHID00) GHH000, --挂号号(SQ_SF_BRXXB0_GHH000),暂时挂号号由序列来生成 BRID00, --病人ID号 BRXM00, --病人姓名 XB0000, --性别 CSRQ00, --出生日期 YSGZH0, --医师工作号 对应BM_YGBM00表 YSXM00, --医师姓名 对应BM_YGBM00表 SSKS00, --所属科室(医师) 对应BM_BMBM00表 GHKS00, --挂号科室(病人)(病人就诊科室) 对应BM_BMBM00表 ZYTS00, --中药贴数 YPDLBH, --药品大类编号 对应BM_YPLB00表 CFXZ00, --处方性质 :毒、麻、神经药品标志 '1'毒'2'麻'3'神经 BZID00, --病症ID号(主要用于毒麻处方) 对应BM_DMZD00表 BZMC00, --病症名称 CFZT00, --处方状态:--0未记账,1已记账,2已发药,--5科室已用:科室先给病人用药,该处方已经记账,但 --只能护士领药,病人不能再领药.6须确认(皮试),7皮试未通过不能发药 SFKSLY, --是否科室领药 'Y'科室领药,'N'病人领药 PSZT00, --皮试状态: FJFDJH, --附加费单据号 CZY000, --操作员 PFR000, --配方人 对应BM_YGBM00表 FHR000, --审核人 对应BM_YGBM00表 FHR001, --复核人 对应BM_YGBM00表 FYR000, --发药人 对应BM_YGBM00表 LYR000, --领药人(用于护士带领) 对应BM_YGBM00表 SRRQ00, --输入日期 SRSJ00, --输入时间 FYRQ00, --发药日期 FYSJ00, --发药时间 CFZJE0, --处方总金额 CYJE00, --成药金额 --JETHUA 2003.03.26 YXJE00, --药械金额 --JETHUA 2003.03.26 BRDZ00, --病人地址(主要用于毒麻处方) BZ0000, --备注 BCCFH0, --被冲销处方流水号 CFSRBZ, --处方输入标志:0医生,1药房,2收费处,3医技,4病区 TSBZBH, --特殊病种编号 CFDGS0, --处方单格式 YPCZFL, --药品材质分类 YYID00, --医院ID SFKSJC --是否科室寄存 ) values( V_CFLSH0, V_MZCF00.LYDH00, V_MZCF00.YFBMBH, V_MZCF00.GHID00, V_MZCF00.GHH000, V_MZCF00.BRID00, V_BRXM00, V_XB0000, V_CSRQ00, V_MZCF00.YSGZH0, V_MZCF00.YSXM00, V_MZCF00.SSKS00, V_MZCF00.GHKS00, V_MZCF00.ZYTS00, V_MZCF00.YPDLBH, V_MZCF00.CFXZ00, V_MZCF00.BZID00, V_MZCF00.BZMC00, '0', V_MZCF00.SFKSLY, V_MZCF00.PSZT00, V_MZCF00.FJFDJH, P_CZYBH0, V_MZCF00.PFR000, P_FHRBH0, P_FHRBH0, V_MZCF00.FYR000, V_MZCF00.LYR000, V_DQRQ00, V_DQSJ00, null, null, --V_DQRQ00, V_DQSJ00, -V_MZCF00.CFZJE0, --处方总金额 -V_MZCF00.CYJE00, --成药金额 --JETHUA 2003.03.26 -V_MZCF00.YXJE00, --药械金额 --JETHUA 2003.03.26 V_MZCF00.BRDZ00, V_MZCF00.BZ0000, V_MZCF00.CFLSH0, V_MZCF00.CFSRBZ, V_MZCF00.TSBZBH, V_MZCF00.CFDGS0, V_MZCF00.YPCZFL, V_MZCF00.YYID00, V_MZCF00.SFKSJC ); insert into YF_MZCFMX( CFID00, --处方ID号 SQ_YS_CFMX00_CFID00 CFLSH0, --处方流水号 YPNM00, --药品内码 对应BM_YD0000表 YPMC00, --药品名称 YPGG00, --规格 GJDJ00, --购进单价(入库单位) LSDJ00, --零售单价(处方单位) PFDJ00, --批发单价(入库单位) YPYFMC, --药品用法名称 vw_BM_YPYF00_YPYFMC SFZBY0, --是否自备药'Y'是'N'否 PCMC00, --频次名称 CSL000, --次数量(剂量单位) JLDW00, --剂量单位(J) YYSJ00, --用药时间数 YYSJDW, --时间单位(天或小时) YFSMMC, --用法说明名称 对应BM_YPYFSM表 ZB0000, --组别 ZJYFMC, --中药整剂用法名称 vw_BM_YPZJYF_ZJYFMC XMYFMC, --中药细目用法名称 vw_BM_YPXMYF_XMYFMC YPZSL0, --药品总数量(处方单位) CFDW00, --处方单位 ZHL000, --转换率(处方单位/剂量单位) CXBZ00, --冲销标志 DEFAULT 'Z' CXCFID, --冲销处方ID(自动) SFXS00, --是否显示'Y'显示,'N'不显示,协定处方用 YPSCCJ, --药品产生厂家(名称)(毒麻药品用) YPSCPH, --药品生产批号(毒麻药品用) KPHSS0, --空瓶回收她(毒麻药品用) HSKPPH, --回收空瓶批号(毒麻药品用) ZFBL00, --医保自付比率 YBLB00, YPDLBH, --药品大类 QZFJE0, --全自费金额 -- JETHUA 2003.05.14 ZFJE00, --自付金额 GFJE00, --公费金额 HJJE00, JZJE00, BZ0000, --备注 F2J000, KCLSH0 ) select SQ_YS_CFMX00_CFID00.NEXTVAL, V_CFLSH0, YPNM00, YPMC00, YPGG00, GJDJ00, LSDJ00, PFDJ00, YPYFMC, SFZBY0, PCMC00, -CSL000, JLDW00, YYSJ00, YYSJDW, YFSMMC, ZB0000, ZJYFMC, XMYFMC, -BCCXSL, CFDW00, ZHL000, '-', CFID00, SFXS00, YPSCCJ, YPSCPH, KPHSS0, HSKPPH, ZFBL00, YBLB00, YPDLBH, -ROUND(QZFJE0*BCCXSL/YPZSL0,2),--全自负按比例 -((ROUND(LSDJ00*BCCXSL,2)-ROUND(QZFJE0*BCCXSL/YPZSL0,2))*DECODE(V_FBBH00,3,1,ZFBL00)+ROUND(QZFJE0*BCCXSL/YPZSL0,2)),--(总金额-全自负)*自负比例(医保病人自负比例为1)+全自负(按比例) 0, -ROUND(LSDJ00*BCCXSL,2), -ROUND(JZJE00*BCCXSL/YPZSL0,2), BZ0000, F2J000, KCLSH0 from YF_MZCFMX where CFLSH0=V_MZCF00.CFLSH0 and BCCXSL>0; --中药处方次数量处理 if (V_MZCF00.YPDLBH='2') and (V_SFCXJSCSL='Y') then update YF_MZCFMX SET CSL000=ROUND(YPZSL0*ZHL000/V_MZCF00.ZYTS00,4) where CFLSH0=V_CFLSH0; end if; --修改总冲销数量,并把本次冲销数量清零 update YF_MZCFMX SET CXBZ00='+', ZCXSL0=ZCXSL0+BCCXSL, BCCXSL=0 where CFLSH0=V_MZCF00.CFLSH0 and BCCXSL>0; elsif V_MZCF00.CFZT00='0' and Length(Trim(V_MZCF00.BCCFH0))>0 then DECLARE cursor c_MZCFMX IS select YPZSL0,CXCFID from YF_MZCFMX where CFLSH0=P_CFLSH0; begin OPEN c_MZCFMX; fetch c_MZCFMX into V_YPZSL0,V_CXCFID; while c_MZCFMX%FOUND loop update YF_MZCFMX SET CXBZ00='+', ZCXSL0=ZCXSL0-V_YPZSL0, BCCXSL=0 where CFID00=V_CXCFID; fetch c_MZCFMX into V_YPZSL0,V_CXCFID; end loop; close c_MZCFMX; end; --判断总冲销数量不能大于药品总数量 select count(1) into V_count0 from YF_MZCFMX where CFLSH0=V_MZCF00.BCCFH0 and ZCXSL0>YPZSL0; if V_count0>0 then Verrmsg:='药品总冲销数量大于药品总数量,无法冲销!'; raise Ecustom; end if; V_CFLSH0:=P_CFLSH0; select DJH000 into V_DJH000 from YF_MZCF00 where CFLSH0=V_MZCF00.BCCFH0; end if; if V_CFLSH0 is not null then SP_SF_JSCFJG( V_CFLSH0, --处方流水号 P_CZYBH0, --输入:操作员编码 null, --操作员科室 'N', --是否提交 Vzxcgbz, --执行成功标志 1成功 0失败 Vtsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Vxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); end if; P_RET_CFLSH0:=V_CFLSH0; if P_CLBZ00='0' then /*如果只开单则不处理这一步骤*/ SP_YF_MZCFTYSH(V_CFLSH0, P_CZYBH0, P_FHRBH0); end if; update YF_CFDL00 set ZT0000='4' where CFLSH0=P_CFLSH0 and ZT0000<='2'; if P_Commit='Y' then COMMIT; end if; exception when no_data_found then rollback; raise_application_error(-20001,substrb('数据没有找到!*'||sqlerrm||','||V_params,1,120)); when Ecustom then rollback; raise_application_error(-20010,substrb(Verrmsg||'!*'||V_params,1,120)); when others then rollback; raise_application_error(-20266,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||V_params,1,120)); end; / SHOW ERROR; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prompt 51.门诊处方退药审核 SP_YF_MZCFTYSH create or replace procedure SP_YF_MZCFTYSH( -- modification history -- Person Date Comments -- lintj 2012.07.23 modify -- qks 2012.12.04 未发药处方:退药审核时,负数和正方FYRQ00,FYSJ00都不写入 -- zhangwz 2013.03.04 已结算的费用退费时进行限制性弹出提示. -- zhangwz 2014.05.26 SP_YF_MZCFCL 加Pcommit入参,本过程因为调用到,所以也加Pcommit入参进行判断是否commit. -- qks 2016.10.22 参数YF_CFTYSFZJTF=Y时,如果参数YF_WJSSFYXTY=Y时,那么也要允许进行退费审核。by MZSF9-20160826-001 -- gzj 2019.02.21 审核时对YF_MZCF00.FHR001字段写入值 for YF9-20190214-001 -- qks 2019.03.14 bug:如果正单属于退费(未发药)处方,负单退费确认后,YF_MZCF00.FYRQ00有写值。要求改为:负单对应的YF_MZCF00.FYRQ00要为空。for YF9-20190303-001 -- qks 2020.08.10 未发药处方:退药审核时,负单FYR000改为不写入; -- --------- ---------- ------------------------------------------- P_CFLSH0 in char, --输入:处方号 P_CZYBH0 in number, --输入:操作员编码 P_FHRBH0 in number, --输入:复核人编码 P_Commit in char default 'Y' --是否提交 )as V_MZCF00 YF_MZCF00%rowtype; V_DQRQ00 YF_MZCF00.FYRQ00%type; V_DQSJ00 YF_MZCF00.FYSJ00%type; V_DJH000 YF_MZCF00.DJH000%type; V_JZDH00 SF_BRFY00.JZDH00%type; V_SFZJTF XT_XTCS00.VALUE0%type; V_FYRQ00 YF_MZCF00.FYRQ00%type; V_FYSJ00 YF_MZCF00.FYSJ00%type; V_FYR000 YF_MZCF00.FYR000%type; P_DJH000 number; V_COUNT0 number; V_SFJZTF char(1); --是否记账后直接退费 V_JSSFTY char(1); --已结算是否允许退药,门诊 V_params varchar2(255); --参数变量 Verrmsg varchar2(255); --错误提示变量 Ecustom exception; --错误变量 begin Verrmsg:=''; V_params:='调用过程: SP_YF_MZCFTYSH('||P_CFLSH0||to_char(P_CZYBH0)||') ; '; --取出是否直接退费 select nvl(max(Trim(VALUE0)),'N') into V_SFZJTF from XT_XTCS00 where NAME00='YF_CFTYSFZJTF'; --已结算是否允许退药,门诊 select nvl(max(Trim(VALUE0)),'N') into V_JSSFTY from XT_XTCS00 where NAME00='YF_WJSSFYXTY'; select * into V_MZCF00 from YF_MZCF00 where CFLSH0=P_CFLSH0; V_SFJZTF := 'N'; if V_MZCF00.BCCFH0 IS NOT NULL then --select count(1) into V_COUNT0 from yf_mzcf00 where brid00=V_MZCF00.brid00 and cflsh0=V_MZCF00.BCCFH0 and CFZT00='1'; select count(1) into V_COUNT0 from yf_mzcf00 where brid00=V_MZCF00.brid00 and cflsh0=V_MZCF00.BCCFH0 and (CFZT00='1' or CFZT00='6' and nvl(FYRQ00,'20991231')='20991231'); if V_COUNT0 > 0 then V_SFJZTF := 'Y'; end if; elsif (V_MZCF00.CFZT00='1') and (nvl(V_MZCF00.FYRQ00,'20991231')='20991231') then V_SFJZTF := 'Y'; end if; select to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss') into V_DQRQ00,V_DQSJ00 from dual; select DJH000 into V_DJH000 from YF_MZCF00 where CFLSH0=V_MZCF00.BCCFH0; --结帐单号大于零只退药退药,否则也退费 select JZDH00 into V_JZDH00 from SF_BRFY00 where DJH000=V_DJH000; if V_JZDH00>0 and V_SFZJTF='Y' and V_JSSFTY<>'Y' then Verrmsg:='病人费用已结算,请先退结算'; raise Ecustom; end if; P_DJH000:=0; --update YF_MZCF00 a SET (JZRQ00,JZSJ00,FYRQ00,FYSJ00,FYR000,FHR000)=( -- select V_DQRQ00,V_DQSJ00,V_DQRQ00,V_DQSJ00,P_CZYBH0,P_FHRBH0 from dual) where CFLSH0=P_CFLSH0; --2016.10.22 注释掉,移到SP_YF_MZCFCL前 --2020.08.10 if V_SFJZTF = 'Y' then V_FYRQ00 := null; V_FYSJ00 := null; V_FYR000 := null; else V_FYRQ00 := V_DQRQ00; V_FYSJ00 := V_DQSJ00; V_FYR000 := P_CZYBH0; end if; if V_JZDH00>0 OR V_SFZJTF='N' then update YF_MZCF00 a SET (FYRQ00,FYSJ00,FYR000,FHR000,FHR001)=( select V_FYRQ00,V_FYSJ00,V_FYR000,P_FHRBH0,P_FHRBH0 from dual) where CFLSH0=P_CFLSH0; SP_YF_MZCFCL(P_CFLSH0,'5',V_MZCF00.YFBMBH,P_CZYBH0,P_DJH000,'N',null,P_Commit); ELSE update YF_MZCF00 a SET (JZRQ00,JZSJ00,FYRQ00,FYSJ00,FYR000,FHR000,FHR001)=( select V_DQRQ00,V_DQSJ00,V_FYRQ00,V_FYSJ00,V_FYR000,P_FHRBH0,P_FHRBH0 from dual) where CFLSH0=P_CFLSH0; SP_YF_MZCFCL(P_CFLSH0,'6',V_MZCF00.YFBMBH,P_CZYBH0,P_DJH000,'N',null,P_Commit); end if; if V_SFJZTF = 'Y' then Update yf_mzcf00 set fyrq00=null,fysj00=null,fyr000=null where brid00=V_MZCF00.BRID00 and (cflsh0=P_CFLSH0 or cflsh0=V_MZCF00.BCCFH0); end if; -- COMMIT; exception when no_data_found then rollback; raise_application_error(-20001,substrb('数据没有找到!*'||sqlerrm||','||V_params,1,120)); when Ecustom then rollback; raise_application_error(-20010,substrb(Verrmsg||'!*'||V_params,1,120)); when others then rollback; raise_application_error(-20266,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||V_params,1,120)); end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%