CREATE OR REPLACE TRIGGER TR_YF_YZYPSQ_BINS_UPD BEFORE INSERT OR UPDATE OF SFXJJZ, YPNM00, QLZT00, YPZSL0 ON SD_MZ.YF_YZYPSQ REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE VCOUNTER NUMBER; VYBZXLB BM_BRXXB0.YBLB00%TYPE; --医保中心类别 VFBBH00 BM_BRXXB0.FBBH00%TYPE; --医保费别编号 VYBBRLB BM_BRXXB0.YBBRLB%TYPE; --医保病人类别 V_DQLSDJ YF_YZYPSQ.LSDJ00%TYPE; V_DQGJDJ YF_YZYPSQ.GJDJ00%TYPE; V_DLSJGL XT_XTCS00.VALUE0%TYPE; --多零售价管理 V_K2J000 BM_YD0000.K2J000%TYPE; V_errmsg varchar2(255); --错误提示变量 E_custom EXCEPTION; --错误变量 -- MODIFICATION HISTORY -- Person Date Comments -- JETHUA 2003.06.01 自费病人和医保病人单独处理 -- JETHUA 2003.09.24 JZJE00、GFJE00、QZFJE0应该是四舍五入到分 -- JETHUA 2004.04.07 为适应多零售价,计算自负金额时,用当前零售价 -- JETHUA 2004.05.14 现金病人单独计算零售价 -- JETHUA 2004.06.28 因为部分退药,负方也要计算自负比例 -- JETHUA 2004.07.08 规范错误提示 -- JETHUA 2004.09.15 为避免病人更改费别,导致扣费与退费不一致,插入过滤负方 -- csf 2011.12.02 处理购进价,单价格取YF_YPKCXX,多价格取YF_PCKCMX YF-20111212-002 -- csf 2012.02.07 记账(:new.qlzt00=1)时候更新购进价,但购进价可能为空,所以不能用:OLE.GJDJ00<>:NEW.GJDJ00的条件来处理。YF-20120207-003 -- liuj 2016.01.10 修复未明确定义列错误 for MZYS9-20160126-002 -- cX 2020.08.25 因住院医生站药品按自费结算功能,解决病区系统日清单自付比例也显示100%.修正B.ZFBL00改DECODE(:NEW.ZFFSBZ,'Y','1',B.ZFBL00) -- --------- ---------- ------------------------------------------- Begin --取出是否多零售价管理 JETHUA 2004.03.10 BEGIN SELECT Trim(VALUE0) INTO v_DLSJGL FROM XT_XTCS00 WHERE NAME00='YF_SFDLSJGL'; EXCEPTION WHEN OTHERS THEN v_DLSJGL:='N'; END; ------------现金病人单独计算零售价--- IF (:OLD.SFXJJZ='0' AND :NEW.SFXJJZ='1') and (:NEW.QLZT00='0') THEN -- AND SELECT ROUND(X.LSDJ00*:NEW.ZHL000/D.K2J000,4),ROUND(X.GJDJ00*:NEW.ZHL000/D.K2J000,4) INTO :NEW.LSDJ00,:NEW.GJDJ00 FROM BM_YD0000 D,YF_YPKCXX X WHERE D.YPNM00=X.YPNM00 AND X.YPNM00=:NEW.YPNM00 AND X.YFBMBH=:NEW.YFBMBH; END IF; IF ((:OLD.QLZT00='0' AND :NEW.QLZT00='1') OR (:OLD.QLZT00='0' AND :NEW.QLZT00='7') OR (:OLD.QLZT00='8' AND :NEW.QLZT00='1')) AND v_DLSJGL='Y' AND (:NEW.SFXJJZ='0') THEN --预扣 IF :NEW.SFXJJZ='1' THEN SP_YF_PCKCYK(:NEW.YFBMBH,:NEW.YPNM00,:NEW.YPZSL0*:NEW.ZHL000,1,V_DQLSDJ,V_DQGJDJ); ELSE SP_YF_PCKCYK(:NEW.YFBMBH,:NEW.YPNM00,:NEW.YPZSL0*:NEW.ZHL000,0,V_DQLSDJ,V_DQGJDJ); IF (ROUND(:OLD.LSDJ00,2)<>ROUND(V_DQLSDJ,2)) THEN --(ROUND(:OLD.GJDJ00,2)<>ROUND(V_DQGJDJ,2)) SELECT ROUND(V_DQLSDJ*:NEW.ZHL000/K2J000,4),ROUND(V_DQGJDJ*:NEW.ZHL000/K2J000,4) INTO :NEW.LSDJ00,:NEW.GJDJ00 FROM BM_YD0000 WHERE YPNM00=:NEW.YPNM00; END IF; SELECT ROUND(V_DQGJDJ*:NEW.ZHL000/K2J000,4) INTO :NEW.GJDJ00 FROM BM_YD0000 WHERE YPNM00=:NEW.YPNM00; END IF; ELSIF ((:OLD.QLZT00='0' AND :NEW.QLZT00='1') OR (:OLD.QLZT00='0' AND :NEW.QLZT00='7') --单价格也应该更新价格 OR (:OLD.QLZT00='8' AND :NEW.QLZT00='1')) AND v_DLSJGL='N' AND (:NEW.SFXJJZ='0') THEN SELECT ROUND(X.LSDJ00*:NEW.ZHL000/D.K2J000,4),ROUND(X.GJDJ00*:NEW.ZHL000/D.K2J000,4) INTO :NEW.LSDJ00,:NEW.GJDJ00 FROM BM_YD0000 D,YF_YPKCXX X WHERE D.YPNM00=X.YPNM00 AND X.YPNM00=:NEW.YPNM00 AND X.YFBMBH=:NEW.YFBMBH; END IF; IF :NEW.CXBZ00<>'-' THEN SELECT B.YBZXLB,A.YBBRLB,A.FBBH00 INTO VYBZXLB,VYBBRLB,VFBBH00 FROM ZY_BRXXB0 C,BM_BRXXB0 A,IC_YBBRLB B WHERE C.ZYID00=:NEW.ZYID00 AND C.BRID00=A.BRID00 AND B.YBLB00=A.YBLB00 and B.FBBH00=a.FBBH00; --重新计算报销比例 --因住院医生站药品按自费结算功能,解决病区系统日清单自付比例也显示100%.修正B.ZFBL00改DECODE(:NEW.ZFFSBZ,'Y','1',B.ZFBL00) SELECT DECODE(:NEW.ZFFSBZ,'Y','1',B.ZFBL00),0,0, ROUND(b.ZFBL00*:NEW.LSDJ00*:NEW.YPZSL0,2) INTO :NEW.ZFBL00,:NEW.GFJE00,:NEW.QZFJE0,:NEW.ZFJE00 FROM VW_BM_YBSFDY B,BM_YD0000 A WHERE B.SFXMID=:NEW.YPNM00 AND B.SFYP00='Y' AND B.SFXMID=A.YPNM00 AND B.YBZXLB=VYBZXLB AND B.YBBRLB=VYBBRLB AND B.FBBH00=VFBBH00 ; --出入药品大类 SELECT LBBH00 INTO :NEW.YPDLBH FROM BM_YD0000 WHERE YPNM00= :NEW.YPNM00; -- JETHUA 2003.06.01 自费病人和医保病人单独处理 IF VFBBH00=1 OR VFBBH00=3 OR Vfbbh00=90 THEN SELECT ROUND(:NEW.YPZSL0*:NEW.LSDJ00,2) INTO :NEW.ZFJE00 FROM VW_BM_YBSFDY B,BM_YD0000 A WHERE B.SFXMID=:NEW.YPNM00 AND B.SFYP00='Y' AND B.SFXMID=A.YPNM00 AND B.YBZXLB=VYBZXLB AND B.YBBRLB=VYBBRLB AND B.FBBH00=VFBBH00 ; END IF; END IF; ----只记账退预扣 IF :NEW.CXBZ00='-' AND (:OLD.QLZT00='0' AND:NEW.QLZT00='6') AND v_DLSJGL='Y' THEN --取K2J000 SELECT K2J000 INTO V_K2J000 FROM BM_YD0000 WHERE YPNM00=:NEW.YPNM00; SP_YF_PCKCCK(:NEW.YFBMBH,:NEW.YPNM00,ROUND(:NEW.YPZSL0*:NEW.ZHL000,3),ROUND(:NEW.LSDJ00*V_K2J000/:NEW.ZHL000,4),:NEW.TQDJH0,TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'HH24:MI:SS'),0,ROUND(:NEW.GJDJ00*V_K2J000/:NEW.ZHL000,4)); END IF; EXCEPTION WHEN no_data_found THEN RAISE_APPLICATION_ERROR(-20001,substrb('数据没有找到!*'||SQLERRM,1,120)); WHEN E_custom THEN RAISE_APPLICATION_ERROR(-20010,substrb(V_errmsg||'!*',1,120)); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20266,substrb(nvl(SQLERRM, '原因不明出错')||'!*',1,120)); End; /