CREATE OR REPLACE TRIGGER TR_YF_YPCKD0_AFUPD
 AFTER 
 UPDATE
 ON SD_YF.YF_YPCKD0
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW 
 WHEN (OLD.CKZT00='0' AND NEW.CKZT00='1'
)
DECLARE
  V_CKBMMC BM_BMBM00.BMMC00%TYPE;
  V_SJKCSL YF_YPKCXX.SJKCSL%TYPE;
  v_CKLXMC YF_YPMXZ0.RCLXMC%TYPE;
  V_FYBZ00 BM_BMBM00.FYBZ00%TYPE;
  V_YKKCSL YF_YPKCXX.YKKCSL%TYPE;
  V_YKKCSL_PD 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_KHHCS0 XT_XTCS00.VALUE0%TYPE; --客户化参数:0默认;1莆二;2泉二;3省二;4南安;5七院;6铁路医院
  V_ZDRKRQ XT_XTCS00.VALUE0%TYPE;
  V_ZY0000 YF_YPMXZ0.ZY0000%TYPE;
  V_ZY0001 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_TEMP00 NUMBER(20,4);
  V_TEMP01 NUMBER(20,4);
  V_CKKCJY XT_XTCS00.VALUE0%TYPE; --出库是否校验库存
  YF_PDQJSFYXFY    XT_XTCS00.value0%type;--盘点期间是否允许发药 ，Y允许 N不允许
  v_TEMPCS XT_XTCS00.VALUE0%TYPE;
  --剩余出库数量
  V_SYCKSL      YF_PCKCMX.SJKCSL%TYPE;    
  --本次出库数量
  V_BCCKSL      YF_PCKCMX.SJKCSL%TYPE;    
  V_PCKCSL      YF_PCKCMX.YKKCSL%TYPE;
  V_KCSL00      BM_YD0000.KCSL00%TYPE;
  V_KCLSH0      YF_PCKCMX.KCLSH0%TYPE;
  V_EXIST0 CHAR(1);
  CURSOR c_YPCKMX IS
         SELECT * FROM YF_YPCKMX
         WHERE CKDH00=:NEW.CKDH00;

  v_YPCKMX c_YPCKMX%ROWTYPE;

  V_errmsg        varchar2(255);               --错误提示变量
  E_custom        exception;                   --错误变量
  E_YKKCBZ        exception;
  V_Count         Number(2,0);
  V_errmsg1        varchar2(255);               --错误提示变量
  v_SCPH00        YF_PCKCMX.SCPH00%type;       --批次库存批号
-- MODIFICATION HISTORY
-- Person      Date        Comments
-- JETHUA      2002.10.30  增加功能：避免库存留误差小数，增加判断后清零：74行
-- JETHUA      2003.06.05  增加判断，在完全出库时，避免预扣库存大于实际库存 86
-- JETHUA      2002.10.30  增加判断是否中标药品
-- JETHUA      2003.09.07  增加判断零售价是否单独管理，如单独管理判断入库单价，并判断调赢或亏
-- JETHUA      2003.09.19  账页结存数不应等于实际库存/转换率，而应等于实际库存/K2J    70行
-- JETHUA      2003.09.25  同时扣除批次库存,冲销就增加批次库存
-- JETHUA      2003.11.02  如果为调拨出库，则同时插入一入库单
-- JETHUA      2003.12.11  病区领药的预扣库存通过触发器处理
-- JETHUA      2004.02.18  处理零售价单位不同引发错误
-- JETHUA      2004.03.12  增加药房零售价单独管理处理
-- JETHUA      2004.07.01  零售价按小数点两位判断
-- JETHUA      2004.07.08  规范错误提示
-- JETHUA      2004.10.10  补充增加判断是否中标药品
-- JETHUA      2004.11.01  6铁路医院报损扣除预扣库存
-- JETHUA      2004.11.05  如药品隶属被删除,明确错误提示
-- JETHUA      2004.12.20  增加调拨入库单生成，增加插入批号和失效日期
-- JETHUA      2005.06.15  避免药品经过换算，后产生0.001的差额，使药品无法出库
-- JETHUA      2005.08.09  购进价为空 则付值
-- JETHUA      2005.08.26  单价计算，先承后除，避免误差
-- JETHUA      2005.08.31  购进价为空 不能在次付值，否则无法发药
-- JETHUA      2005.09.29  德化医院要求要求处方出库不显示科室名称
-- JETHUA      2006.02.23  铁路医院：通过参数可以控制调拨是否自动入库
-- JETHUA      2006.02.28  药房单价格管理，在出库确认前要更新最新零售价
-- csf         2006.03.30  住院退药审核出现bug
-- YANGH       2007.06.13  南安：科室借药扣实际库存
-- YANGH       2007.10.21  多零售价情况下，根据参数YF_RKSFZDGXLSJ控制是否在入库的时候修改YF_YPKCXX.LSJ000,还是在出库的时候修改。
-- linzy       2010.02.25  增加变量V_Count。科研药品不扣除批次库存
-- CSF         2010.05.27  判断批次库存，转换单价比较时候，写法改成先乘后除
-- CSF         2010.07.01  中药生产批号允许为空，为空的话，系统用' '来处理,那么判断yf_pckcmx.scph00=trim(yf_ypckmx.scph00)是不正确的应改为nvl(trim(yf_pckcmx.scph00,' '))=nvl(trim(yf_ypckmx.scph00),' ')
-- CSF         2010.08.27  处理预扣库存，也要避免药品经过换算，后产生0.001的差额，使药品无法出库
-- CSF         2010.09.14  处理预扣库存，也要避免药品经过换算，后产生0.001的差额的算法应该是计算出库数量先按保留4位计算大单位再与保留三位进行比较得到的差值小于0.001
-- zhangwz     2010.10.29  参数 YF_KSLYCKSFJXKCPD='N' 的情况下 科室领药 类出库单出库不判断库存. by YF-20101022-001
-- csf         2011.07.12  加参数YF_PDQJSFYXFY控制，盘点期间允许发药
-- laijg       2011.09.26  增加通用参数YF_SFJKSHYXRRKD按南安医院要求一样将科室还药写入库单
-- csf         2011.12.02  处理购进价，单价格取YF_YPKCXX,多价格取YF_PCKCMX YF-20111212-002
-- laijg       2012.04.27  除南安医院以外更新库存SJKCSL by YF-20120427-002
-- laijg       2012.06.11  select value0 into v_TEMPCS from xt_xtcs00 where name00='YF_SFJKSHYXRRKD' 写法不严谨，加异常处理 by YF-20120608-001
-- laijg       2012.07.16  该需求YF-20120427-002修改，未加参数控制，现YF_SFJKSHYXRRKD参数控制 by YF-20120716-001
-- laijg       2012.12.10  肺科导回约束ck_yf_ypkcxx，预扣库存不能小于0，增加异常E_YKKCBZ判断  by YF-20121101-001
-- csf         2013.01.15  上一条的修改记录有问题，医嘱出库预扣已经扣过了，不能重复   YF-20130115-003
-- daihq       2013.09.23  修正判断批次库存不足的条件 by YF-20130923-001
-- daihq       2014.05.06  修正部分代码分叉预扣库存小于0时没有跳转到异常E_YKKCBZ,给出具体的药品提示,并且增加提示药品的剩余预扣库存 by YF-20140331-001
-- daihq       2015.09.11  多零售价管理，增加药品生产批号，零售价，购进价都相同时的处理，按先进先出的规则 for YF-20150902-003
-- daihq       2016.06.02  避免药品经过换算，后产生0.001的差额，使药品无法出库 for YF-20160602-001
-- huangjy     2017.07.25  增加异常报错提示，定位异常点  for ZYYFQH-20170705-001
-- dsm         2018.11.27  药房退库库存没有减bug处理（天真） for YF-20181127-001
-- dsm         2019.06.09  YF_YPMXZ00.KSBH00  for YF-20190507-001
-- dsm         2020.04.22  当出库单是负数时YF_PCKCMX的数量不会加 for YF-20200422-001
-- huangjy     2020.12.23  非多零售价时，减少YF_YPRKMX对应退库批次的批次库存数量 for YF-20201216-001
-- huangjy     2021.08.16  增加多价格管理时，对应批次库存没有的情况下，先判断入库较早批次库存 for YF-20210806-001
-- ---------   ----------  -------------------------------------------
BEGIN
  V_errmsg:='';
  --取出药房零售价是否独立管理参数  JETHUA      2003.09.04
  BEGIN
    SELECT Trim(VALUE0) INTO v_LSJGL0 FROM XT_XTCS00 WHERE NAME00='YK_YF_LSJSFDLGL';
  EXCEPTION
    WHEN OTHERS THEN
      v_LSJGL0:='N';
  END;
  --取出药房零售价是否独立管理参数  JETHUA      2003.09.04
  BEGIN
    SELECT Trim(VALUE0) INTO v_LSJGL2 FROM XT_XTCS00 WHERE NAME00='YF_SFDLSJGL';
  EXCEPTION
    WHEN OTHERS THEN
      v_LSJGL2:='N';
  END;
  --取出客户化参数:0默认;1莆二;2泉二;3省二;4南安;5七院;6铁路医院 JETHUA  2004.11.01
  BEGIN
    SELECT Trim(VALUE0) INTO v_KHHCS0 FROM XT_XTCS00 WHERE NAME00='YF_ZJKFDDDYGS';
  EXCEPTION
    WHEN OTHERS THEN
      v_KHHCS0:='0';
  END;
  --取系统参数：是否自动进行药房入库确认
  BEGIN
    SELECT Trim(VALUE0) INTO V_ZDRKRQ FROM XT_XTCS00 WHERE NAME00='YK_YFZDRKRQ';
  EXCEPTION
    WHEN OTHERS THEN
      V_ZDRKRQ:='N';
  END;

  BEGIN
    SELECT Trim(VALUE0) INTO v_ZDGXLJ FROM XT_XTCS00 WHERE NAME00='YF_RKSFZDGXLSJ';
  EXCEPTION
    WHEN OTHERS THEN
      v_ZDGXLJ:='Y';
  END;
  --取系统参数：出库是否校验库存 by YF-20101022-001
  BEGIN
    SELECT Trim(VALUE0) INTO V_CKKCJY FROM XT_XTCS00 WHERE NAME00='YF_KSLYCKSFJXKCPD';
  EXCEPTION
    WHEN OTHERS THEN
      V_CKKCJY:='Y';
  END;

  BEGIN
    select value0 into v_TEMPCS from xt_xtcs00 where name00='YF_SFJKSHYXRRKD'; --按南安医院做法增加通用参数
  EXCEPTION
    WHEN OTHERS THEN
      v_TEMPCS:='N';
  END;




  ----------------通过游标在明细表中循环实现修改库存
  select nvl(max(trim(VALUE0)),'N') into  YF_PDQJSFYXFY from XT_XTCS00 where NAME00='YF_PDQJSFYXFY';
  if (YF_PDQJSFYXFY='N') or (:new.CKLXBH<>'03') then
    SELECT FYBZ00 INTO V_FYBZ00 FROM BM_BMBM00 WHERE BMBH00=:OLD.YFBMBH;
    IF ((V_FYBZ00='3') AND (:OLD.CKBMBH<>99999)) THEN
      V_errmsg:='药房正在盘点,不能进行进出库确认';
      RAISE E_custom;
    END IF;
  end if;

  OPEN c_YPCKMX;
  FETCH c_YPCKMX INTO v_YPCKMX;
  V_errmsg1:='@1';
  WHILE c_YPCKMX%FOUND LOOP
    --取基本信息
      V_errmsg1:='@1'||'@'||v_YPCKMX.YPNM00;
    SELECT SFZBYP,LSJ000,K2J000 INTO V_SFZBYP,V_LSJ000,V_K2J000 FROM BM_YD0000
    WHERE YPNM00=v_YPCKMX.YPNM00;
     V_errmsg1:='@2'||'@'||v_YPCKMX.YPNM00;
    SELECT LSDJ00,GJDJ00 INTO V_LSJ000,V_GJJ000 FROM YF_YPKCXX where YFBMBH=:NEW.YFBMBH and YPNM00=v_YPCKMX.YPNM00;
     V_errmsg1:='@3'||'@'||v_YPCKMX.YPNM00;
    ------判断库存是否充足---------
    BEGIN
      SELECT NVL(SJKCSL,0),NVL(YKKCSL,0) INTO V_SJKCSL,V_YKKCSL FROM  YF_YPKCXX
       WHERE YFBMBH=:OLD.YFBMBH
         AND YPNM00=v_YPCKMX.YPNM00;
    EXCEPTION
      WHEN OTHERS THEN
        V_errmsg:='药品: ['||Trim(V_YPCKMX.YPMC00)||'] 在药品隶属中已删除';
        RAISE E_custom;
    END;
    V_YKKCSL_PD:=V_YKKCSL;
    --预扣库存不能小于0 by YF-20121101-001
  --  if v_LSJGL2='N' then

 --   end if;

    IF NOT ((:NEW.CKLXBH='08') AND (:NEW.HYSJ00<>:OLD.HYSJ00)) THEN  --科室借药归还不判断库存
      --避免药品经过换算，后产生0.001的差额，使药品无法出库
      V_TEMP00:=ROUND(V_SJKCSL/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 :NEW.CKLXBH<>'01'))  THEN   --过滤科室领药类单据
        CLOSE c_YPCKMX;
        V_errmsg:='药品:'||RTRIM(V_YPCKMX.YPMC00)||',库存不足 '||to_char(V_TEMP00)||','||to_char(ROUND(V_SJKCSL/v_YPCKMX.ZHL000,4))||' '||to_char(v_YPCKMX.CKSL00);
        RAISE E_custom;
      END IF;
    END IF;
    -------判断批次库存是否充足－－－－－－－－－－－
    IF v_LSJGL2='Y' AND :NEW.CKLXBH<>'03' and (V_CKKCJY<>'N' or (V_CKKCJY='N' and :NEW.CKLXBH<>'01')) THEN --批号为空即医嘱出库,不在这判断
      --2018.11.27 许天真加nvl
     begin 
        SELECT nvl(ROUND(sum(SJKCSL)/v_YPCKMX.ZHL000,3),0),nvl(sum(YKKCSL),0)
          INTO V_PCSJKC,V_PCYKKC
          FROM YF_PCKCMX
         WHERE YFBMBH=:OLD.YFBMBH          AND YPNM00=v_YPCKMX.YPNM00
           AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
           AND ROUND(GJDJ00,2)=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
           AND nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ') ;
      EXCEPTION
        WHEN OTHERS THEN
          V_PCSJKC:=0;
      END;
      
      if V_PCSJKC=0 then
         SELECT nvl(ROUND(sum(SJKCSL)/v_YPCKMX.ZHL000,3),0),nvl(sum(YKKCSL),0),'NULL'
          INTO V_PCSJKC,V_PCYKKC,v_SCPH00
          FROM YF_PCKCMX
         WHERE YFBMBH=:OLD.YFBMBH          AND YPNM00=v_YPCKMX.YPNM00
           AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
           AND ROUND(GJDJ00,2)=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
           and SJKCSL>0 
           order by KCLSH0 ;
      end if;

      BEGIN--避免药品经过换算，后产生0.001的差额，使药品无法出库
        --2018.11.27 许天真加nvl        
         SELECT nvl(ROUND(sum(SJKCSL)/v_YPCKMX.ZHL000,4),0)-v_YPCKMX.CKSL00
          INTO V_TEMP01
          FROM YF_PCKCMX
         WHERE YFBMBH=:OLD.YFBMBH          AND YPNM00=v_YPCKMX.YPNM00
           AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*v_K2J000/v_YPCKMX.ZHL000,2)
           AND ROUND(GJDJ00,2)=ROUND(V_YPCKMX.GJDJ00*v_K2J000/v_YPCKMX.ZHL000,2)
           AND ((nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ')) or v_SCPH00='NULL' );
      EXCEPTION
        WHEN OTHERS THEN
          V_TEMP01:=0;
      END;
      IF (V_PCSJKC-v_YPCKMX.CKSL00)<0 THEN
        IF (V_TEMP01<0 AND ABS(V_TEMP01)>=0.001) or (V_PCSJKC=0 AND V_TEMP01=0) THEN
          CLOSE c_YPCKMX;
          V_errmsg:='药品:'||RTRIM(V_YPCKMX.YPMC00||'('||v_YPCKMX.SCPH00||v_SCPH00||')')||',批次库存不足';
          RAISE E_custom;
        END IF;
      END IF;
    END IF;

    ----------修改库存--------------
 --   select value0 into v_TEMPCS from xt_xtcs00 where name00='YF_SFJKSHYXRRKD'; --按南安医院做法增加通用参数
    IF :NEW.CKLXBH='08' THEN
      IF (v_KHHCS0='4') or (trim(v_TEMPCS)='Y') THEN           --参数控制南安医院科室借药,扣‘预扣库存’和'实际库存'
          IF :NEW.JYSFGH='N' THEN
            --避免药品经过换算，后产生0.001的差额，使库存为负
            IF V_TEMP00<0 THEN
              UPDATE YF_YPKCXX SET
                     YKKCSL=0,SJKCSL=0
               WHERE YFBMBH=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            ELSE
              if V_YKKCSL_PD-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0 then
                 V_errmsg:='出库单号:['||Trim(V_YPCKMX.ckdh00)||'],药品: ['||Trim(V_YPCKMX.YPMC00)||'] 预扣库存数量不能小于0,当前预扣库存数为'||to_char(round(V_YKKCSL_PD/v_YPCKMX.ZHL000,3))||',出库数量不能超过预扣库存';
                 RAISE E_YKKCBZ;
              end if;
              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=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            END IF;
          END IF;
      ELSE--（除南安医院以外）
      if v_TEMPCS='Y' then
          IF :NEW.JYSFGH='N' THEN    --科室借药,也扣实际库存
            --避免药品经过换算，后产生0.001的差额，使库存为负
            IF V_TEMP00<0 THEN
              UPDATE YF_YPKCXX SET
                     YKKCSL=0,SJKCSL=0
               WHERE YFBMBH=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            ELSE
              if V_YKKCSL_PD-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0 then
                 V_errmsg:='出库单号:['||Trim(V_YPCKMX.ckdh00)||'],药品: ['||Trim(V_YPCKMX.YPMC00)||'] 预扣库存数量不能小于0,当前预扣库存数为'||to_char(round(V_YKKCSL_PD/v_YPCKMX.ZHL000,3))||',出库数量不能超过预扣库存';
                 RAISE E_YKKCBZ;
              end if;
              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=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            END IF;
          END IF;
      else
                IF :NEW.JYSFGH='N' THEN    --科室借药,只扣‘预扣库存’
            --避免药品经过换算，后产生0.001的差额，使库存为负
            IF V_TEMP00<0 THEN
              UPDATE YF_YPKCXX SET
                     YKKCSL=0
               WHERE YFBMBH=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            ELSE
              if V_YKKCSL_PD-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0 then
                 V_errmsg:='出库单号:['||Trim(V_YPCKMX.ckdh00)||'],药品: ['||Trim(V_YPCKMX.YPMC00)||'] 预扣库存数量不能小于0,当前预扣库存数为'||to_char(round(V_YKKCSL_PD/v_YPCKMX.ZHL000,3))||',出库数量不能超过预扣库存';
                 RAISE E_YKKCBZ;
              end if;
              UPDATE YF_YPKCXX SET
                     YKKCSL=NVL(YKKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)
               WHERE YFBMBH=:OLD.YFBMBH
                 AND YPNM00=v_YPCKMX.YPNM00;
            END IF;
          END IF;
      end if;
      END IF;
    ELSIF (:NEW.CKLXBH ='03')OR(:NEW.CKLXBH='04' AND v_KHHCS0='6') THEN --病区医嘱领药出库,铁路医院报损出库

      IF v_YPCKMX.CKSL00>0 THEN -- ‘预扣库存’不扣减
        UPDATE YF_YPKCXX SET
          SJKCSL=NVL(SJKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)
        WHERE   YFBMBH=:OLD.YFBMBH
           AND  YPNM00=v_YPCKMX.YPNM00;
        --扣除批次库存
V_errmsg1:='@4'||'@'||v_YPCKMX.YPNM00;
        IF v_LSJGL2='N' THEN   --多零售价管理不做入库单的批次库存
          SP_YF_JSPCKC(:OLD.YFBMBH,v_YPCKMX.YPNM00,ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3),v_YPCKMX.SCPH00);
        END IF;

      ELSE             --冲销预扣库存’加回去
        UPDATE YF_YPKCXX SET
          SJKCSL=NVL(SJKCSL,0)-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)
        WHERE   YFBMBH=:OLD.YFBMBH
           AND  YPNM00=v_YPCKMX.YPNM00;

        --增加批次库存
        IF v_LSJGL2='N' THEN   --多零售价管理不做入库单的批次库存
          SP_YF_ZJPCKC(:OLD.YFBMBH,v_YPCKMX.YPNM00,-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3));
        END IF;

      END IF;
    ELSE --除借药和医嘱出库以为的其它出库方式
      --2016.06.02 daihq 修改避免药品经过换算，后产生0.001的差额，使药品无法出库
      V_TEMP01:=ROUND(V_YKKCSL/v_YPCKMX.ZHL000,4)-v_YPCKMX.CKSL00;
      if (ROUND(V_SJKCSL/v_YPCKMX.ZHL000,3)=v_YPCKMX.CKSL00) or ((V_YKKCSL-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0) and ((abs(v_temp01)<0.001)or(:NEW.CKLXBH='19')) ) then
      --2002.10.30 JETHUA
      --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)or(:NEW.CKLXBH='19'))  then
             V_YKKCSL:=0;
         END IF;
         if V_YKKCSL<0 then
           V_errmsg:='出库单号:['||Trim(V_YPCKMX.ckdh00)||'],药品: ['||Trim(V_YPCKMX.YPMC00)||'] 预扣库存数量不能小于0,当前预扣库存数为'||to_char(round(V_YKKCSL_PD/v_YPCKMX.ZHL000,3))||',出库数量不能超过预扣库存';
           RAISE E_YKKCBZ;
         end if;
         UPDATE YF_YPKCXX
            SET YKKCSL=V_YKKCSL,
                SJKCSL=0
          WHERE YFBMBH=:OLD.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=:OLD.YFBMBH)
            AND X.PCKCSL>0
            AND YPNM00=v_YPCKMX.YPNM00;
      ELSE
         if V_YKKCSL_PD-ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3)<0 then
            V_errmsg:='出库单号:['||Trim(V_YPCKMX.ckdh00)||'],药品: ['||Trim(V_YPCKMX.YPMC00)||'] 预扣库存数量不能小于0,当前预扣库存数为'||to_char(round(V_YKKCSL_PD/v_YPCKMX.ZHL000,3))||',出库数量不能超过预扣库存';
            RAISE E_YKKCBZ;
         end if;
         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=:OLD.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(:OLD.YFBMBH,v_YPCKMX.YPNM00,ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3),v_YPCKMX.SCPH00);
             end if;
           ELSE
             --增加批次库存
             SP_YF_ZJPCKC(:OLD.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 :NEW.CKLXBH='03' THEN --处方出库
         SP_YF_PCKCCK(:OLD.YFBMBH,v_YPCKMX.YPNM00,ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3),ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,4),:NEW.CKDH00,:NEW.QRRQ00,:NEW.QRSJ00,'1',ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,4));
         V_errmsg1:='@5'||'@'||v_YPCKMX.YPNM00;
      ELSE
          V_errmsg1:='@6'||'@'||v_YPCKMX.YPNM00;
       IF v_YPCKMX.CXBZ00='Z' THEN
          --库存为零，删除
          IF (V_PCSJKC-v_YPCKMX.CKSL00)=0 THEN
            UPDATE YF_PCKCMX SET SJKCSL=0
             WHERE YFBMBH=:OLD.YFBMBH          AND YPNM00=v_YPCKMX.YPNM00
               AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
               AND ROUND(GJDJ00,2)=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
               AND (nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ')or (:new.CKLXBH=19));
          ELSE
            DECLARE
              CURSOR C_PCKC00 IS
              SELECT KCLSH0,SJKCSL,YKKCSL
                FROM YF_PCKCMX
               WHERE YFBMBH=:OLD.YFBMBH AND YPNM00=v_YPCKMX.YPNM00
                 AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
                 AND ROUND(GJDJ00,2)=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
                 AND (nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ')or (:new.CKLXBH=19))
               ORDER BY TO_NUMBER(KCLSH0);
            
            BEGIN
              V_SYCKSL:=ROUND(v_YPCKMX.CKSL00*v_YPCKMX.ZHL000,3);
              OPEN C_PCKC00;
              FETCH C_PCKC00 INTO V_KCLSH0,V_PCKCSL,V_PCYKKC;    
              WHILE C_PCKC00%FOUND AND abs(V_SYCKSL)>0 LOOP  --YF-20200422-001  abs
                IF V_SYCKSL-V_PCKCSL <=0 THEN  --本批次够出剩余出库量
                  V_BCCKSL:=V_SYCKSL;
                  V_SYCKSL:=0;
                ELSE
                  V_BCCKSL:=V_PCKCSL;
                  V_SYCKSL:=V_SYCKSL-V_BCCKSL;
                END IF;
                --如果预扣数小于零，以零记录
                IF V_PCYKKC-V_BCCKSL<0 THEN
                  V_PCYKKC:=0;
                ELSE
                  V_PCYKKC:=V_PCYKKC-V_BCCKSL;
                END IF;
                UPDATE YF_PCKCMX 
                SET YKKCSL=V_PCYKKC,
                SJKCSL=NVL(SJKCSL,0)-V_BCCKSL
                 WHERE KCLSH0=V_KCLSH0;
                FETCH C_PCKC00 INTO V_KCLSH0,V_YKKCSL,V_PCYKKC;
              END LOOP;
              CLOSE C_PCKC00;
            END;       
            --如果预扣数小于零，以零记录
            --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)
            -- WHERE YFBMBH=:OLD.YFBMBH          AND YPNM00=v_YPCKMX.YPNM00
            --   AND ROUND(LSDJ00,2)=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
            --   AND ROUND(GJDJ00,2)=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,2)
            --   AND nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ') ;
          END IF;
        END IF;
        --零批次库存处理
        SP_YF_CLLSL0(:OLD.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)
            WHERE YFBMBH=:OLD.YFBMBH     AND YPNM00=v_YPCKMX.YPNM00;
        END IF;
      END IF;
 --------------退药
      IF v_YPCKMX.CXBZ00='-' THEN  --2
        BEGIN
          SELECT '1' INTO V_EXIST0 FROM YF_PCKCMX
           WHERE YFBMBH=:OLD.YFBMBH     AND YPNM00=v_YPCKMX.YPNM00
             AND LSDJ00=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,4)
             AND GJDJ00=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,4)
             AND nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ') 
             and rownum=1;
        EXCEPTION
          WHEN OTHERS THEN
            V_EXIST0:='0';
        END;
        --存在则修改
        IF V_EXIST0='1' THEN   --1
          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)
           WHERE YFBMBH=:OLD.YFBMBH     AND YPNM00=v_YPCKMX.YPNM00
             AND LSDJ00=ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,4)
             AND GJDJ00=ROUND(v_YPCKMX.GJDJ00*V_K2J000/v_YPCKMX.ZHL000,4)
             AND nvl(trim(SCPH00),' ')=nvl(trim(v_YPCKMX.SCPH00),' ') 
             and rownum=1;
        ELSE
          
          INSERT INTO YF_PCKCMX(
                 KCLSH0,          YFBMBH,         YPNM00,
                 LSDJ00,          SCPH00,
                 YKKCSL,          SJKCSL,         GJDJ00)
          VALUES(
                 SQ_YF_PCKCMX_KCLSH0.NEXTVAL, :OLD.YFBMBH,            v_YPCKMX.YPNM00,
                 ROUND(v_YPCKMX.LSDJ00*V_K2J000/v_YPCKMX.ZHL000,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)
                 );
        END IF;--1
      END IF;  --2
    END IF; --多批次处理
    -----------------记账------------
   
    IF :NEW.CKBMBH=99999 and :NEW.CKLXBH='07' THEN
      V_CKBMMC:='盘亏出库';
    ELSIF :NEW.CKBMBH=99999 and :NEW.CKLXBH='19' THEN
     V_CKBMMC:='四舍五入';
    ELSIF  :NEW.CKBMBH=88888 THEN
     V_CKBMMC:='报损出库';
    ELSE
      V_errmsg1:='@7'||'@'||v_YPCKMX.YPNM00;
      SELECT BMMC00 INTO V_CKBMMC FROM VW_YF_YPCKFX WHERE BMBH00=:NEW.CKBMBH;
    END IF;
    V_errmsg1:='@8'||'@'||v_YPCKMX.YPNM00;
    SELECT CKLXMC INTO v_CKLXMC FROM BM_YFCKLX WHERE CKLXBH=:NEW.CKLXBH;
    V_errmsg1:='@9'||'@'||v_YPCKMX.YPNM00;
    SELECT SJKCSL INTO V_SJKCSL FROM YF_YPKCXX
    WHERE YFBMBH=:NEW.YFBMBH AND YPNM00=v_YPCKMX.YPNM00;

    V_SJKCSL:=ROUND(V_SJKCSL/V_K2J000,3);
    V_errmsg1:='@10'||'@'||v_YPCKMX.YPNM00;
    --德化医院要求摘要显示病人姓名
    IF v_KHHCS0='13' AND :NEW.CKLXBH='03' THEN
      V_ZY0000:=v_CKLXMC;
    ELSE
      V_ZY0000:=V_CKBMMC;
    END IF;
    --病区医嘱领药出库
    IF :NEW.CKLXBH='03' THEN
      V_CKJE00:=v_YPCKMX.CKJE00;
      V_GJCKJE:=Round(v_YPCKMX.GJDJ00*v_YPCKMX.CKSL00,2);
    ELSE
      V_CKJE00:=ROUND(v_YPCKMX.CKSL00*v_YPCKMX.LSDJ00,2);
      V_GJCKJE:=Round(v_YPCKMX.GJDJ00*v_YPCKMX.CKSL00,2);
    END IF;
    BEGIN
      SELECT BMMC00 INTO V_ZY0001 FROM VW_YF_YPCKFX WHERE BMBH00=v_YPCKMX.KSBH00;
    EXCEPTION
      when others then  
      	V_ZY0001:='';
    END;
    INSERT INTO YF_YPMXZ0(
      MXZLSH,    --明细账流水号-->SQ_YF_YPMXZ0_MXZLSH
      YFBMBH,    --药房部门编号
      YPCKPC,   --药品出库批次-->YF_YPCKMX
      YPNM00,    --药品内码
      YPMC00,    --药品名称
      YPGG00,    --规格
      JZRQ00,    --记账日期
      JZSJ00,    --记账时间
      CRBMBH,    --出入部门编号
      ZY0000,    --摘要(自动：出入部门名称)
      JZDW00,   --记账单位
      ZHL000,   --转换率(记账单位/剂量单位)
      GJDJ00,   --购进单价(记账单位)
      FCDJ00,    --付出单价(零售价)(记账单位)
      FCSL00,    --付出数量(记账单位)
      FCJE00,    --付出金额(零售价)
      JCDJ00,    --结存单价(结存金额/结存数量)
      JCSL00,    --结存数量(记账单位)(药品总量)
      JCJE00,    --结存金额(零售价)(药品总量)
      RCLXBH,   --入出库类型编码:BM_YFRKLX,BM_YFCKLX
      RCLXMC,   --入出库类型名称:BM_YFRKLX,BM_YFCKLX
      JZXZ00,    --记账性质:'R',入库,'C',出库
      DJH000,     --单据号
      SFZBYP,    --是否中标
      GJFCJE,
      KSBH00,
      ZY0001)
    VALUES
      (SQ_YF_YPMXZ0_MXZLSH.NEXTVAL,
      :NEW.YFBMBH,
      v_YPCKMX.YPCKPC,
      v_YPCKMX.YPNM00,
      v_YPCKMX.YPMC00,
      v_YPCKMX.YPGG00,
      TO_CHAR(SYSDATE,'YYYYMMDD'),
      TO_CHAR(SYSDATE,'HH24:MI:SS'),
      :NEW.CKBMBH,
      V_ZY0000,
      v_YPCKMX.CKDW00,
      v_YPCKMX.ZHL000,
      v_YPCKMX.GJDJ00,
      v_YPCKMX.LSDJ00,
      v_YPCKMX.CKSL00,
      V_CKJE00,
      v_YPCKMX.LSDJ00,
      V_SJKCSL,
      ROUND(V_SJKCSL*v_YPCKMX.LSDJ00,2),
      :NEW.CKLXBH,
      v_CKLXMC,
      'C',
      :NEW.CKDH00,
      V_SFZBYP,
      V_GJCKJE,
      v_YPCKMX.KSBH00,
      V_ZY0001
      );
    --判断是否零售价单独管理 --暂将入库单价与药典零售价比较
    --2004.03.12 JETHUA 增加判断：药房单零售价管理
    IF v_LSJGL0='Y' AND v_LSJGL2='N' THEN
      V_LSJ000:=ROUND(V_LSJ000*v_YPCKMX.ZHL000/V_K2J000,2);
      V_GJJ000:=ROUND(V_GJJ000*v_YPCKMX.ZHL000/V_K2J000,2);
      V_LSJCK0:=ROUND(v_YPCKMX.LSDJ00,2);
      V_GJJCK0:=ROUND(v_YPCKMX.GJDJ00,2);
      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
      INSERT INTO YF_YPMXZ0(
        MXZLSH,    --明细账流水号-->SQ_YF_YPMXZ0_MXZLSH
        YFBMBH,    --药房部门编号
        YPRKPC,    --药品入库批次-->YF_YPRKMX
        YPNM00,    --药品内码
        YPMC00,    --药品名称
        YPGG00,    --规格
        JZRQ00,    --记账日期
        JZSJ00,    --记账时间
        CRBMBH,    --出入部门编号
        ZY0000,    --摘要(自动：出入部门名称)
        JZDW00,   --记账单位
        ZHL000,   --转换率(记账单位/剂量单位)
        GJDJ00,   --购进单价(记账单位)
        SLDJ00,    --收入单价(零售价)(记账单位)
      SLSL00,    --收入数量(记账单位)
      SLJE00,    --收入金额(零售价)
      JCDJ00,    --结存单价(结存金额/结存数量)
      JCSL00,    --结存数量(记账单位)(药品总量)
      JCJE00,    --结存金额(零售价)(药品总量)
      RCLXBH,   --入出库类型编码:BM_YFRKLX,BM_YFCKLX
      RCLXMC,   --入出库类型名称:BM_YFRKLX,BM_YFCKLX
      SFZBYP,    --是否中标
      JZXZ00,  --记账性质:'R',入库,'C',出库
      GJSLJE,
      KSBH00
      )
      VALUES
        (SQ_YF_YPMXZ0_MXZLSH.NEXTVAL,
          :NEW.YFBMBH,
          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,
        v_LSJCK0,
      0,
      ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2),
        DECODE(V_SJKCSL,0,0,V_LSJ000),
      V_SJKCSL,
          ROUND(V_SJKCSL*V_LSJ000,2),
        '07',
        '调价报盈',
          V_SFZBYP,
        'R',
        ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2),
        v_YPCKMX.KSBH00
        );
    ELSIF (ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2)<0) OR (ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2)<0) THEN                 --报亏
      INSERT INTO YF_YPMXZ0(
      MXZLSH,    --明细账流水号-->SQ_YF_YPMXZ0_MXZLSH
      YFBMBH,    --药房部门编号
      YPCKPC,   --药品出库批次-->YF_YPCKMX
      YPNM00,    --药品内码
      YPMC00,    --药品名称
      YPGG00,    --规格
      JZRQ00,    --记账日期
      JZSJ00,    --记账时间
        CRBMBH,    --出入部门编号
      ZY0000,    --摘要(自动：出入部门名称)
      JZDW00,   --记账单位
      ZHL000,   --转换率(记账单位/剂量单位)
      GJDJ00,   --购进单价(记账单位)
      FCDJ00,    --付出单价(零售价)(记账单位)
      FCSL00,    --付出数量(记账单位)
      FCJE00,    --付出金额(零售价)
      JCDJ00,    --结存单价(结存金额/结存数量)
      JCSL00,    --结存数量(记账单位)(药品总量)
      JCJE00,    --结存金额(零售价)(药品总量)
      RCLXBH,   --入出库类型编码:BM_YFRKLX,BM_YFCKLX
      RCLXMC,   --入出库类型名称:BM_YFRKLX,BM_YFCKLX
          SFZBYP,    --是否中标
      JZXZ00, --记账性质:'R',入库,'C',出库
      GJFCJE,  --购进付出金额
      KSBH00
      )
    VALUES
      (SQ_YF_YPMXZ0_MXZLSH.NEXTVAL,
          :NEW.YFBMBH,
          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,
        v_LSJCK0,
      0,
        -ROUND((v_LSJCK0-V_LSJ000)*v_YPCKMX.CKSL00,2),
        DECODE(V_SJKCSL,0,0,V_LSJ000),
      V_SJKCSL,
          ROUND(V_SJKCSL*V_LSJ000,2),
        '06',
        '调价报亏',
          V_SFZBYP,
        'C',
        -ROUND((v_GJJCK0-V_GJJ000)*v_YPCKMX.CKSL00,2),
        v_YPCKMX.KSBH00
        );
      END IF;
    END IF;
    FETCH c_YPCKMX INTO v_YPCKMX;

  END LOOP;
  CLOSE c_YPCKMX;


  --如果为调拨出库，则同时插入一入库单  JETHUA 2003.07.22
  IF :NEW.CKLXBH='11' THEN
    V_RKDH00:=SF_YK_GETLSH('YFYPRKDH');

    INSERT INTO YF_YPRKD0
          (RKDH00,      YFBMBH,     RKBMBH,
           RKLXBH,      RKZT00,     CZY000,
           RKRQ00,      RKSJ00)
    VALUES (V_RKDH00,     :NEW.CKBMBH,    :NEW.YFBMBH,
         '08',      '0',      :NEW.CZY000,
         TO_CHAR(SYSDATE,'YYYYMMDD'), TO_CHAR(SYSDATE,'HH24:MI:SS')) ;

    INSERT INTO YF_YPRKMX
          (YPRKPC,      RKDH00,     YPNM00,
           YPMC00,      YPGG00,     RKSL00,
           RKDW00,      ZHL000,     GJDJ00,
           PFDJ00,      LSDJ00,         SCPH00,        YPSXRQ)
    SELECT SQ_YF_YPRKMX_YPRKPC.NEXTVAL, V_RKDH00,   YPNM00,
         YPMC00,      YPGG00,     CKSL00,
           CKDW00,      ZHL000,     GJDJ00,
           PFDJ00,      LSDJ00,         SCPH00,        YPSXRQ
      FROM YF_YPCKMX
     WHERE CKDH00=:NEW.CKDH00;
    --判断是否自动入库 JETHUA 2006.02.23
    IF V_ZDRKRQ='Y' THEN
      UPDATE YF_YPRKD0 SET RKZT00='1',QRR000=:NEW.CZY000,
                           QRRQ00=TO_CHAR(SYSDATE,'YYYYMMDD'),
                           QRSJ00=TO_CHAR(SYSDATE,'HH24:MI:SS')
       WHERE RKDH00=V_RKDH00;
    END IF;
  END IF;
  /**/
EXCEPTION
  WHEN no_data_found THEN
    RAISE_APPLICATION_ERROR(-20001,substrb(V_errmsg1||'数据没有找到！*'||SQLERRM||',',1,120));
  WHEN E_custom      THEN
    RAISE_APPLICATION_ERROR(-20010,substrb(V_errmsg||'！*',1,120));
  WHEN E_YKKCBZ      THEN
    RAISE_APPLICATION_ERROR(-20011,substrb(V_errmsg||'！*',1,120));
  WHEN OTHERS        THEN
    RAISE_APPLICATION_ERROR(-20266,substrb(nvl(SQLERRM, '原因不明出错。')||V_errmsg||'！*',1,120));
END;
