CREATE OR REPLACE PROCEDURE SP_KS_YPMXZ0_EDIT -- modification history -- Person Date Comments -- qks 2013.08.31 create -- qks 2019.02.14 表KS_YPMXZ0增加字段YJDJH0; for YJ9-20190202-001 -- qks 2020.09.15 表KS_YPMXZ0增加字段WZSX00; for KCWZ9-20200909-001 -- linshu 2022.02.11 增加平账处理记录; for KCWZ9-20220120-002 ( Popflag in number , --操作标志 0:增加 1:修改 2:删除 Pmxzlsh in out number , --明细账流水号'; Pyfbmbh in number , --科室部门编号'; Pyprkpc in number , --药品入库批次'; Pypckpc in number , --药品出库批次'; Pypnm00 in number , --药品内码'; Pypmc00 in varchar2 , --药品名称'; Pypgg00 in varchar2 , --规格'; Pjzrq00 in varchar2 , --记账日期'; Pjzsj00 in varchar2 , --记账时间'; Pcrbmbh in number , --出入部门编号'; Pzy0000 in varchar2 , --摘要(自动:出入部门名称)'; Pjzdw00 in varchar2 , --记账单位'; Pzhl000 in number , --转换率(记账单位/剂量单位)'; Pgjdj00 in number , --购进单价(记账单位)'; Psldj00 in number , --收入单价(零售价)(记账单位)'; Pslsl00 in number , --收入数量(记账单位)'; Pslje00 in number , --收入金额(零售价)'; Pfcdj00 in number , --付出单价(零售价)(记账单位)'; Pfcsl00 in number , --付出数量(记账单位)'; Pfcje00 in number , --付出金额(零售价)'; --Pjcdj00 in number , --结存单价(结存金额/结存数量)'; Prclxbh in varchar2 , --入出库类型编码'; Prclxmc in varchar2 , --入出库类型名称'; Pjzxz00 in varchar2 , --记账性质:''R'',入库,''C'',出库'; Pdjh000 in varchar2 , --单据号'; Psfzbyp in varchar2 , --是否自备药品'; Pgjslje in number , --购进收入金额'; Pgjfcje in number , --购进付出金额'; Pykrkpc in number , --药库入库批次 Pscph00 in varchar2 , --生产批号 Pypsxrq in varchar2 , --失效日期 Pczy000 in number , --操作员 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ) as Vsysdate date; --日期变量 Vcounter number(14,4); --计数器变量 Ecustom exception; -- Vrcbz00 number(1); Vk2j000 BM_YD0000.K2J000%type; Vjcdj00 YF_YPMXZ0.JCDJ00%type; Vjcsl00 YF_YPMXZ0.JCSL00%type; Vjcje00 YF_YPMXZ0.JCJE00%type; Vjcgjje YF_YPMXZ0.JCGJJE%type; Vyjdjh0 YJ_YW0000.YJDJH0%type; Vwzsx00 BM_WZQTXX.WZSX00%type; --平账使用的变量 Vcrkpz0 BM_TYZD00.MC0000%type; VMXZLSH KS_YPMXZ0.MXZLSH%type; vTEMPSL KS_PCKCMX.SJKCSL%type; vSJKCSL KS_PCKCMX.SJKCSL%type; begin Pzxcgbz := 0; Vsysdate := sysdate; if Popflag = 0 then select K2J000 into Vk2j000 from BM_YD0000 where YPNM00=Pypnm00; select max(WZSX00) into Vwzsx00 from BM_WZQTXX where YPNM00=Pypnm00; --计算结存数量、金额、单价 select sum(SJKCSL),round(sum(SJKCSL*LSDJ00/Vk2j000),2),round(sum(SJKCSL*GJDJ00/Vk2j000),2) into Vjcsl00,Vjcje00,Vjcgjje from KS_PCKCMX where YFBMBH=Pyfbmbh and YPNM00=Pypnm00; select decode(Vjcsl00,0,0,round(Vjcje00*Vk2j000/Vjcsl00,4)) into Vjcdj00 from dual; if Pmxzlsh is null then select SQ_KS_YPMXZ0_MXZLSH.nextval into Pmxzlsh from dual; end if; if substr(Prclxmc,1,2) in ('扣费','处方') then select max(YJDJH0) into Vyjdjh0 from YJ_YWJJ00 where ID0000=Pdjh000; end if; insert into KS_YPMXZ0( MXZLSH, --明细账流水号'; YFBMBH, --药房部门编号'; YPRKPC, --药品入库批次'; YPCKPC, --药品出库批次'; YPNM00, --药品内码'; YPMC00, --药品名称'; YPGG00, --规格'; JZRQ00, --记账日期'; JZSJ00, --记账时间'; CRBMBH, --出入部门编号'; ZY0000, --摘要(自动:出入部门名称)'; JZDW00, --记账单位'; ZHL000, --转换率(记账单位/剂量单位)'; GJDJ00, --购进单价(记账单位)'; SLDJ00, --收入单价(零售价)(记账单位)'; SLSL00, --收入数量(记账单位)'; SLJE00, --收入金额(零售价)'; FCDJ00, --付出单价(零售价)(记账单位)'; FCSL00, --付出数量(记账单位)'; FCJE00, --付出金额(零售价)'; JCDJ00, --结存单价(结存金额/结存数量)'; JCSL00, --结存数量(记账单位)(药品总量)'; JCJE00, --结存金额(零售价)(药品总量)'; RCLXBH, --入出库类型编码'; RCLXMC, --入出库类型名称'; JZXZ00, --记账性质:''R'',入库,''C'',出库'; DJH000, --单据号'; SFZBYP, --是否自备药品'; GJSLJE, --购进收入金额'; GJFCJE, --购进付出金额'; JCGJJE, --累计购进金额'; YKRKPC, --药库入库批次 SCPH00, --生产批号 YPSXRQ, --失效日期 YJDJH0, --医技单据号 WZSX00 --物资属性 ) values( Pmxzlsh, Pyfbmbh, Pyprkpc, Pypckpc, Pypnm00, Pypmc00, Pypgg00, Pjzrq00, Pjzsj00, Pcrbmbh, Pzy0000, Pjzdw00, Pzhl000, Pgjdj00, Psldj00, Pslsl00, Pslje00, Pfcdj00, Pfcsl00, Pfcje00, Vjcdj00, Vjcsl00, Vjcje00, Prclxbh, Prclxmc, Pjzxz00, Pdjh000, Psfzbyp, Pgjslje, Pgjfcje, Vjcgjje, Pykrkpc, Pscph00, Pypsxrq, Vyjdjh0, Vwzsx00 ); end if; --生成平账数据 if ( Vjcgjje <> 0 ) and ( Vjcsl00 = 0 ) then select nvl(max(MC0000),'0') into Vcrkpz0 from BM_TYZD00 where ZDMC00='科室物资管理个性化配置' and BH0000='CRKSFPZ' and YXBZ00='1'; if Vcrkpz0 = '1' then select SQ_KS_YPMXZ0_MXZLSH.nextval into VMXZLSH from dual; insert into KS_YPMXZ0( MXZLSH, --明细账流水号'; YFBMBH, --药房部门编号'; YPRKPC, --药品入库批次'; YPCKPC, --药品出库批次'; YPNM00, --药品内码'; YPMC00, --药品名称'; YPGG00, --规格'; JZRQ00, --记账日期'; JZSJ00, --记账时间'; CRBMBH, --出入部门编号'; ZY0000, --摘要(自动:出入部门名称)'; JZDW00, --记账单位'; ZHL000, --转换率(记账单位/剂量单位)'; GJDJ00, --购进单价(记账单位)'; SLDJ00, --收入单价(零售价)(记账单位)'; SLSL00, --收入数量(记账单位)'; SLJE00, --收入金额(零售价)'; FCDJ00, --付出单价(零售价)(记账单位)'; FCSL00, --付出数量(记账单位)'; FCJE00, --付出金额(零售价)'; JCDJ00, --结存单价(结存金额/结存数量)'; JCSL00, --结存数量(记账单位)(药品总量)'; JCJE00, --结存金额(零售价)(药品总量)'; RCLXBH, --入出库类型编码'; RCLXMC, --入出库类型名称'; JZXZ00, --记账性质:''R'',入库,''C'',出库'; DJH000, --单据号'; SFZBYP, --是否自备药品'; GJSLJE, --购进收入金额'; GJFCJE, --购进付出金额'; JCGJJE, --累计购进金额'; YKRKPC, --药库入库批次 SCPH00, --生产批号 YPSXRQ, --失效日期 YJDJH0, --医技单据号 WZSX00 --物资属性 ) values( VMXZLSH, Pyfbmbh, Pyprkpc, Pypckpc, Pypnm00, Pypmc00, Pypgg00, Pjzrq00, Pjzsj00, Pcrbmbh, Pzy0000, Pjzdw00, Pzhl000, Pgjdj00, null, null, null, 0, 0, 0, 0, 0, 0, '15', '平账出库', 'C', Pdjh000, Psfzbyp, null, Vjcgjje, --- -Vjcgjje,2022.06.08由原来的结存负数平账正数,改为结存负数平账负数, 0, Pykrkpc, Pscph00, Pypsxrq, Vyjdjh0, Vwzsx00 ); --更新库存 --把本次入库批次库存设为0 update KS_PCKCMX set YKKCSL = 0, SJKCSL = 0, ZHXGRQ = to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ = to_char(Vsysdate,'HH24:MI:SS') where YFBMBH = PYFBMBH and YPNM00 = PYPNM00 and YKRKPC = Pykrkpc and SCPH00 = Pscph00; --把对抵的负库存数量设为0 vTEMPSL := Pslsl00; for cur in ( select KCLSH0 from KS_PCKCMX where YFBMBH = Pyfbmbh and YPNM00 = Pypnm00 and SJKCSL < 0 order by KCLSH0 desc ) loop select -SJKCSL into vSJKCSL from KS_PCKCMX where YFBMBH = Pyfbmbh and YPNM00 = Pypnm00 and KCLSH0 = cur.kclsh0; --vTEMPSL if vTEMPSL >= vSJKCSL then update KS_PCKCMX set YKKCSL = 0, SJKCSL = 0, ZHXGRQ = to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ = to_char(Vsysdate,'HH24:MI:SS') where YFBMBH = Pyfbmbh and YPNM00 = Pypnm00 and SJKCSL < 0 and KCLSH0 = cur.kclsh0; vTEMPSL := vTEMPSL - vSJKCSL; else update KS_PCKCMX set YKKCSL = (YKKCSL + vTEMPSL), SJKCSL = (SJKCSL + vTEMPSL), ZHXGRQ = to_char(Vsysdate,'YYYYMMDD'), ZHXGSJ = to_char(Vsysdate,'HH24:MI:SS') where YFBMBH = Pyfbmbh and YPNM00 = Pypnm00 and SJKCSL < 0 and KCLSH0 = cur.kclsh0; vTEMPSL := 0; end if; exit when vTEMPSL= 0; end loop; end if; end if; Pzxcgbz:=1; if pcommit='Y' then commit; end if; exception when no_data_found then raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm,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;