$PBExportHeader$uo_spt_price.sru forward global type uo_spt_price from nonvisualobject end type end forward global type uo_spt_price from nonvisualobject end type global uo_spt_price uo_spt_price type variables end variables forward prototypes public function integer uf_del_sdsptprice (long arg_mtrlid, long arg_sptid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, datetime arg_opdate, decimal arg_price, decimal arg_zqrate, boolean arg_ifcommit, ref string arg_msg) public function integer uf_getmtrlsptprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uf_getmtrlsptprice_ch (long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_rate, ref datetime arg_lastdate, ref string arg_msg) public function integer uf_getmtrlname (long arg_sptid, long arg_mtrlid, ref string arg_sptmtrlname, ref string arg_msg) public function integer uf_update_sptmtrlname (long arg_sptid, long arg_mtrlid, string arg_unit, string arg_sptmtrlname, boolean arg_ifcommit, ref string arg_msg) public function integer uf_update_sptprice (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_moneyid, decimal arg_price, decimal arg_zqrate, decimal arg_rate, decimal arg_wareprice, datetime arg_indate, string arg_inwarecode, long arg_flag, string arg_dscrp, long arg_printid, integer arg_billtype, boolean arg_ifcommit, ref string arg_msg) public function integer uf_del_sptprice (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg) public function integer uf_update_sptprice_mx_bk (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg) public function integer uf_update_sptprice_mx (integer arg_ifth, long arg_inwareid, long arg_printid, integer arg_billtype, decimal arg_price, decimal arg_zqrate, boolean arg_ifcommit, ref string arg_msg) public function integer uof_getmtrlsptprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uof_get_mtrl_buyprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uof_get_buyprice_his (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uof_get_bj_price (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uof_get_lmbuyprice (long arg_mtrlid, ref decimal arg_buyprice, ref decimal arg_rebate) public function integer uf_check_price_save (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg) public function integer uf_check_price_audit (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg) private function integer uf_check_price (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg) end prototypes public function integer uf_del_sdsptprice (long arg_mtrlid, long arg_sptid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, datetime arg_opdate, decimal arg_price, decimal arg_zqrate, boolean arg_ifcommit, ref string arg_msg);//uf_del_sdsptprice(arg_mtrlid,arg_sptid,arg_opdate,arg_price,arg_ifcommit,arg_msg) //删除手动添加的采购价格 long rslt=1 long cnt=0 //检查供应商存在否 select count(*) into :cnt from u_spt where u_spt.sptid=:arg_sptid; if sqlca.sqlcode<>0 then rslt=0 arg_msg='因网络和其他原因查询失败'+sqlca.sqlerrtext goto ext end if if cnt=0 then rslt=0 arg_msg='供应商不存在' goto ext end if //检查商品存在否 select count(*) into :cnt from u_mtrldef where u_mtrldef.mtrlid=:arg_mtrlid; if sqlca.sqlcode<>0 then rslt=0 arg_msg='因网络和其他原因查询失败'+sqlca.sqlerrtext goto ext end if if cnt=0 then rslt=0 arg_msg='编码不存在' goto ext end if //删除手动添加价格 delete from u_spt_price_mx where u_spt_price_mx.sptid=:arg_sptid and u_spt_price_mx.mtrlid=:arg_mtrlid and u_spt_price_mx.opdate=:arg_opdate and u_spt_price_mx.unit=:arg_unit and u_spt_price_mx.status=:arg_status and u_spt_price_mx.woodcode=:arg_woodcode and u_spt_price_mx.pcode=:arg_pcode; if sqlca.sqlcode<>0 then rslt=0 arg_msg='查询失败'+sqlca.sqlerrtext goto ext end if //更新最新价格表 update u_spt_price set u_spt_price.price=:arg_price * :arg_zqrate, u_spt_price.fprice=:arg_price, u_spt_price.zqrate=:arg_zqrate where u_spt_price.sptid=:arg_sptid and u_spt_price.mtrlid=:arg_mtrlid and u_spt_price.unit=:arg_unit and u_spt_price.status=:arg_status and u_spt_price.woodcode=:arg_woodcode and u_spt_price.pcode=:arg_pcode; if sqlca.sqlcode<>0 then rslt=0 arg_msg='查询失败'+sqlca.sqlerrtext goto ext end if ext: if rslt=0 then rollback; elseif rslt=1 and arg_ifcommit then commit; end if return rslt end function public function integer uf_getmtrlsptprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);Long rslt = 1 Decimal rtn_price,rtn_zqrate,rtn_rate String rtn_unit String rtn_wareunit IF arg_unit = '' THEN IF sys_option_buyprice_ifbj = 0 THEN SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode Order By u_spt_price_MX.opdate Desc; ELSE SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; END IF IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN SELECT unit,unit_buy,rate_buy INTO :rtn_wareunit,:rtn_unit,:rtn_rate FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 rtn_unit = '' arg_msg = '不存在资料'+sqlca.SQLErrText GOTO ext END IF IF rtn_unit = '' OR rtn_rate = 0 THEN rtn_unit = rtn_wareunit rtn_price = 0.00 rtn_rate = 1 rslt = 2 GOTO ext END IF END IF ELSE IF sys_option_buyprice_ifbj = 0 THEN SELECT fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price WHERE u_spt_price.mtrlid = :arg_mtrlid AND u_spt_price.sptid = :arg_sptid AND u_spt_price.unit = :arg_unit AND u_spt_price.woodcode = :arg_woodcode AND u_spt_price.status = :arg_status AND u_spt_price.pcode = :arg_pcode; ELSE SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.unit = :arg_unit AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; END IF IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate arg_unit = rtn_unit RETURN rslt end function public function integer uf_getmtrlsptprice_ch (long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_rate, ref datetime arg_lastdate, ref string arg_msg);Long rslt = 1 Decimal rtn_price,rtn_rate DateTime rtn_lastdate IF arg_unit = '' THEN rtn_price = 0.00 rtn_rate = 1 SetNull(rtn_lastdate) rslt = 2 GOTO ext ELSE IF sys_option_buyprice_ifbj = 0 THEN SELECT top 1 fprice,rate,outdate INTO :rtn_price,:rtn_rate ,:rtn_lastdate FROM u_spt_price_mx WHERE u_spt_price_mx.mtrlid = :arg_mtrlid AND u_spt_price_mx.sptid = :arg_sptid AND u_spt_price_mx.unit = :arg_unit AND u_spt_price_mx.status = :arg_status AND u_spt_price_mx.woodcode = :arg_woodcode AND u_spt_price_mx.pcode = :arg_pcode Order By Opdate Desc; ELSE SELECT top 1 fprice,rate,outdate INTO :rtn_price,:rtn_rate ,:rtn_lastdate FROM u_spt_price_mx WHERE u_spt_price_mx.mtrlid = :arg_mtrlid AND u_spt_price_mx.sptid = :arg_sptid AND u_spt_price_mx.unit = :arg_unit AND u_spt_price_mx.status = :arg_status AND u_spt_price_mx.woodcode = :arg_woodcode AND u_spt_price_mx.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By Opdate Desc; END IF IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN rslt = 2 rtn_price = 0.00 rtn_rate = 1 SetNull(rtn_lastdate) GOTO ext END IF END IF ext: arg_price = rtn_price arg_lastdate = rtn_lastdate arg_rate = rtn_rate RETURN rslt end function public function integer uf_getmtrlname (long arg_sptid, long arg_mtrlid, ref string arg_sptmtrlname, ref string arg_msg);Long rslt = 1 String rtn_sptmtrlname SELECT sptmtrlname INTO :rtn_sptmtrlname FROM u_sptmtrlname WHERE u_sptmtrlname.mtrlid = :arg_mtrlid AND u_sptmtrlname.sptid = :arg_sptid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_sptmtrlname) THEN rtn_sptmtrlname = '' END IF arg_sptmtrlname = rtn_sptmtrlname ext: RETURN rslt end function public function integer uf_update_sptmtrlname (long arg_sptid, long arg_mtrlid, string arg_unit, string arg_sptmtrlname, boolean arg_ifcommit, ref string arg_msg);long rslt = 1 long cnt = 0 if isnull(arg_sptmtrlname) then arg_sptmtrlname = '' //检查供应商存在否 select count(*) into :cnt from u_spt where u_spt.sptid = :arg_sptid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.sqlerrtext goto ext end if if cnt = 0 then rslt = 0 arg_msg = '供应商不存在' goto ext end if //检查商品存在否 select count(*) into :cnt from u_mtrldef where u_mtrldef.mtrlid = :arg_mtrlid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.sqlerrtext goto ext end if if cnt = 0 then rslt = 0 arg_msg = '物料资料不存在' goto ext end if //1.更新供应商售价表 select count(*) into :cnt from u_spt_price where u_spt_price.sptid = :arg_sptid and u_spt_price.mtrlid = :arg_mtrlid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '因网络和其他原因查询供应商物料最新价格失败'+sqlca.sqlerrtext goto ext end if if cnt > 0 then update u_spt_price set u_spt_price.sptmtrlname = :arg_sptmtrlname where u_spt_price.sptid = :arg_sptid and u_spt_price.mtrlid = :arg_mtrlid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '因网络和其它原因,供应商物料别名更新失败'+sqlca.sqlerrtext goto ext end if elseif cnt = 0 then insert into u_spt_price (sptid, mtrlid, price, fprice, zqrate, dscrp, sptmtrlname, unit, status) values ( :arg_sptid, :arg_mtrlid, 0, 0, 1, '', :arg_sptmtrlname, :arg_unit, '' ); if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '因网络或其他原因,新增供应商物料别名失败' goto ext end if end if ext: if rslt = 0 then rollback; elseif arg_ifcommit and rslt = 1 then commit; end if return rslt end function public function integer uf_update_sptprice (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_moneyid, decimal arg_price, decimal arg_zqrate, decimal arg_rate, decimal arg_wareprice, datetime arg_indate, string arg_inwarecode, long arg_flag, string arg_dscrp, long arg_printid, integer arg_billtype, boolean arg_ifcommit, ref string arg_msg);//==================================================================== // 事件: uo_spt_price.Script - uf_update_sptprice ( integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_moneyid, decimal arg_price, decimal arg_zqrate, decimal arg_rate, decim() //-------------------------------------------------------------------- // 描述:更新供应商售价表及售价变动明细表 //-------------------------------------------------------------------- // 参数: // value integer arg_ifth 0 正常 1 退货 2 修改供应商物料名称 // value long arg_sptid // value long arg_mtrlid // value string arg_unit // value string arg_status // value string arg_woodcode // value string arg_pcode // value long arg_inwareid // value long arg_moneyid // value decimal arg_price // value decimal arg_zqrate // value decimal arg_rate // value decimal arg_wareprice // value datetime arg_indate // value string arg_inwarecode // value long arg_flag 手动添加标志 // value string arg_dscrp // value long arg_printid // value integer arg_billtype // value boolean arg_ifcommit // reference string arg_msg //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年12月11日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Long rslt = 1 Long cnt = 0 DateTime server_time String ls_dscrp //检查退货 IF arg_ifth = 1 THEN rslt = 1 GOTO ext END IF //检查参数 IF IsNull(arg_sptid) THEN arg_sptid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_price) THEN arg_price = 0.0 IF IsNull(arg_moneyid) THEN arg_moneyid = 0 IF arg_indate <= DateTime(Date('1900-01-01'),Time(0)) THEN rslt = 0 arg_msg = '不合理的发生时间' GOTO ext END IF IF Trim(arg_msg) = '' THEN arg_msg = '' IF Trim(arg_inwarecode) = '' THEN arg_inwarecode = '' //获得服务器时间 SELECT Top 1 getdate() Into :server_time From u_user; //检查供应商存在否 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_sptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '供应商不存在' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询币种失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '币种资料不存在' rslt = 0 GOTO ext END IF //检查商品存在否 SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '资料不存在' GOTO ext END IF //1.更新供应商售价表 IF arg_billtype = 0 THEN ls_dscrp = '采购收货单' ELSEIF arg_billtype = 1 THEN ls_dscrp = '手动添加' ELSEIF arg_billtype = 2 THEN ls_dscrp = '调价单' ELSEIF arg_billtype = 4 THEN ls_dscrp = '外协收货单' ELSE ls_dscrp = arg_dscrp END IF UPDATE u_spt_price SET u_spt_price.price = :arg_price * :arg_zqrate, u_spt_price.fprice = :arg_price, u_spt_price.zqrate = :arg_zqrate, u_spt_price.wareprice = :arg_wareprice, u_spt_price.rate = :arg_rate, u_spt_price.dscrp = :ls_dscrp, u_spt_price.sys_changetime = getdate() WHERE u_spt_price.sptid = :arg_sptid AND u_spt_price.mtrlid = :arg_mtrlid AND u_spt_price.unit = :arg_unit AND u_spt_price.status = :arg_status AND u_spt_price.woodcode = :arg_woodcode AND u_spt_price.pcode = :arg_pcode AND u_spt_price.moneyid = :arg_moneyid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_spt_price (sptid, mtrlid, price, fprice, zqrate, dscrp, unit, wareprice, rate, status, woodcode, pcode, moneyid, sys_changetime) VALUES ( :arg_sptid, :arg_mtrlid, :arg_price * :arg_zqrate, :arg_price, :arg_zqrate, :ls_dscrp, :arg_unit, :arg_wareprice, :arg_rate, :arg_status, :arg_woodcode, :arg_pcode, :arg_moneyid, getdate()); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '新增供应商报价失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '供应商报价表更新失败,'+sqlca.SQLErrText GOTO ext END IF //2.插入供应商售价变动明细表 INSERT INTO u_spt_price_mx ( u_spt_price_mx.sptid, u_spt_price_mx.mtrlid, u_spt_price_mx.opdate, u_spt_price_mx.opemp, u_spt_price_mx.inwareid, u_spt_price_mx.inwarecode, u_spt_price_mx.outdate, u_spt_price_mx.price, u_spt_price_mx.fprice, u_spt_price_mx.zqrate, u_spt_price_mx.dscrp, u_spt_price_mx.status, u_spt_price_mx.buildtype, u_spt_price_mx.unit, u_spt_price_mx.printid, u_spt_price_mx.wareprice, u_spt_price_mx.rate, u_spt_price_mx.woodcode, u_spt_price_mx.pcode, u_spt_price_mx.billtype, moneyid ) VALUES ( :arg_sptid, :arg_mtrlid, :server_time, :publ_operator, :arg_inwareid, :arg_inwarecode, :arg_indate, :arg_price * :arg_zqrate, :arg_price, :arg_zqrate, :arg_dscrp, :arg_status, :arg_flag, :arg_unit, :arg_printid, :arg_wareprice, :arg_rate, :arg_woodcode, :arg_pcode, :arg_billtype, :arg_moneyid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '登记在供应商报价表失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer uf_del_sptprice (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg);//删除自动类型的价格历史记录 Int rslt = 1 Long cnt = 0,ll_cnt = 0 DateTime ld_opdate //检查供应商存在否 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_sptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '供应商不存在' GOTO ext END IF //检查商品存在否 SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '物料不存在' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 1 GOTO ext END IF SELECT top 1 Opdate INTO :ld_opdate FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid Order By Opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate > :ld_opdate AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF Decimal ld_fprice,ld_zqrate,ld_price DateTime ld_sys_changetime,ld_nulldt SetNull(ld_nulldt) IF cnt = 0 THEN //如果被删明细是最新,用次新明细更新最新价 SELECT count(*) INTO :ll_cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate < :ld_opdate AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN DELETE FROM u_spt_price WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最新价失败'+sqlca.SQLErrText GOTO ext END IF ELSE SELECT top 1 fprice,zqrate,price,sys_changetime INTO :ld_fprice,:ld_zqrate,:ld_price,:ld_sys_changetime FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate < :ld_opdate AND moneyid = :arg_moneyid Order By Opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF UPDATE u_spt_price SET fprice = :ld_fprice , zqrate = :ld_zqrate, price = :ld_price, sys_changetime = :ld_sys_changetime WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最新价失败'+sqlca.SQLErrText GOTO ext END IF END IF END IF //删除手动添加价格 DELETE FROM u_spt_price_mx Where sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uf_update_sptprice_mx_bk (integer arg_ifth, long arg_sptid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_inwareid, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg);//删除自动类型的价格历史记录 Int rslt = 1 Long cnt = 0,ll_cnt = 0 DateTime ld_opdate //检查供应商存在否 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_sptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '供应商不存在' GOTO ext END IF //检查商品存在否 SELECT count(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '物料不存在' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 1 GOTO ext END IF SELECT top 1 Opdate INTO :ld_opdate FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid Order By Opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF //查询此明细后是否有记录 SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate > :ld_opdate AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF Decimal ld_fprice,ld_zqrate,ld_price DateTime ld_sys_changetime,ld_nulldt SetNull(ld_nulldt) IF cnt = 0 THEN //如果被删明细是最新,用新价更新最新价 SELECT count(*) INTO :ll_cnt FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate < :ld_opdate AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN DELETE FROM u_spt_price WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最新价失败'+sqlca.SQLErrText GOTO ext END IF ELSE SELECT top 1 fprice,zqrate,price,sys_changetime INTO :ld_fprice,:ld_zqrate,:ld_price,:ld_sys_changetime FROM u_spt_price_mx WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND Opdate < :ld_opdate AND moneyid = :arg_moneyid Order By Opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF UPDATE u_spt_price SET fprice = :ld_fprice , zqrate = :ld_zqrate, price = :ld_price, sys_changetime = :ld_sys_changetime WHERE sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最新价失败'+sqlca.SQLErrText GOTO ext END IF END IF END IF //删除手动添加价格 DELETE FROM u_spt_price_mx Where sptid = :arg_sptid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND inwareid = :arg_inwareid AND printid = :arg_printid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uf_update_sptprice_mx (integer arg_ifth, long arg_inwareid, long arg_printid, integer arg_billtype, decimal arg_price, decimal arg_zqrate, boolean arg_ifcommit, ref string arg_msg);//更新因修改单价导致的单价不对应的价格历史记录 Int rslt = 1 Long cnt = 0,ll_cnt = 0 DateTime ld_opdate if arg_ifth = 1 then rslt = 1 goto ext end if SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE inwareid = :arg_inwareid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 1 GOTO ext END IF string ll_sptid, ll_mtrlid, ll_moneyid string ls_unit, ls_status, ls_woodcode, ls_pcode SELECT top 1 Opdate ,sptid, mtrlid,unit ,status,woodcode,pcode,moneyid INTO :ld_opdate,:ll_sptid, :ll_mtrlid, :ls_unit, :ls_status, :ls_woodcode, :ls_pcode, :ll_moneyid FROM u_spt_price_mx WHERE inwareid = :arg_inwareid AND printid = :arg_printid Order By Opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF //查询此明细后是否有记录 SELECT count(*) INTO :cnt FROM u_spt_price_mx WHERE sptid = :ll_sptid AND mtrlid = :ll_mtrlid AND unit = :ls_unit AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND moneyid = :ll_moneyid AND Opdate > :ld_opdate; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF Decimal ld_fprice,ld_zqrate,ld_price DateTime ld_sys_changetime,ld_nulldt SetNull(ld_nulldt) IF cnt = 0 THEN //如果被删明细是最新,用新价更新最新价 UPDATE u_spt_price SET u_spt_price.sptid = :ll_sptid, u_spt_price.mtrlid = :ll_mtrlid, u_spt_price.price = :arg_price * :arg_zqrate, u_spt_price.fprice = :arg_price, u_spt_price.zqrate = :arg_zqrate WHERE u_spt_price.sptid = :ll_sptid AND u_spt_price.mtrlid = :ll_mtrlid AND u_spt_price.unit = :ls_unit AND u_spt_price.status = :ls_status AND u_spt_price.woodcode = :ls_woodcode AND u_spt_price.pcode = :ls_pcode AND u_spt_price.moneyid = :ll_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其它原因,供应商报价表更新失败'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_spt_price_mx SET price = :arg_price * :arg_zqrate, fprice = :arg_price, zqrate = :arg_zqrate WHERE inwareid = :arg_inwareid AND printid = :arg_printid AND sptid = :ll_sptid AND mtrlid = :ll_mtrlid AND unit = :ls_unit AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND moneyid = :ll_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因,更新在供应商报价明细表失败' GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_getmtrlsptprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);Long rslt = 1 Decimal rtn_price,rtn_zqrate,rtn_rate String rtn_unit String rtn_wareunit IF arg_unit = '' THEN IF sys_option_buyprice_ifbj = 0 THEN SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode Order By u_spt_price_MX.opdate Desc; ELSE SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; END IF IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN SELECT unit,unit_buy,rate_buy INTO :rtn_wareunit,:rtn_unit,:rtn_rate FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 rtn_unit = '' arg_msg = '不存在资料'+sqlca.SQLErrText GOTO ext END IF IF rtn_unit = '' OR rtn_rate = 0 THEN rtn_unit = rtn_wareunit rtn_price = 0.00 rtn_rate = 1 rslt = 2 GOTO ext END IF END IF ELSE IF sys_option_buyprice_ifbj = 0 THEN SELECT fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price WHERE u_spt_price.mtrlid = :arg_mtrlid AND u_spt_price.sptid = :arg_sptid AND u_spt_price.unit = :arg_unit AND u_spt_price.woodcode = :arg_woodcode AND u_spt_price.status = :arg_status AND u_spt_price.pcode = :arg_pcode; ELSE SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.unit = :arg_unit AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; END IF IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate arg_unit = rtn_unit RETURN rslt end function public function integer uof_get_mtrl_buyprice (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);Long rslt = 1 Decimal rtn_price,rtn_zqrate,rtn_rate String rtn_unit String rtn_wareunit Decimal lde_buyprice, lde_rebate //参数合法性检查 //IF arg_sptid = 0 THEN // rslt = 0 // GOTO ext //END IF IF arg_mtrlid = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_buyprice_ifbj = 0 THEN //取采购历史 IF uof_get_buyprice_his(arg_sptid, arg_mtrlid, arg_unit , arg_status, arg_woodcode, arg_pcode, lde_buyprice, lde_rebate,arg_rate,arg_msg) = 0 THEN lde_buyprice = 0 lde_rebate = 1 END IF rtn_price = lde_buyprice rtn_zqrate = lde_rebate rtn_unit = arg_unit rtn_rate = arg_rate ELSEIF sys_option_buyprice_ifbj = 1 THEN //取报价 IF uof_get_bj_price(arg_sptid, arg_mtrlid, arg_unit , arg_status, arg_woodcode, arg_pcode, lde_buyprice, lde_rebate,arg_rate,arg_msg) = 0 THEN lde_buyprice = 0 lde_rebate = 1 END IF rtn_price = lde_buyprice rtn_zqrate = lde_rebate rtn_unit = arg_unit rtn_rate = arg_rate ELSEIF sys_option_buyprice_ifbj = 2 THEN //取设定购价 IF uof_get_lmbuyprice(arg_mtrlid, lde_buyprice, lde_rebate) = 0 THEN lde_buyprice = 0 lde_rebate = 1 END IF rtn_price = lde_buyprice rtn_zqrate = lde_rebate END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate arg_unit = rtn_unit RETURN rslt end function public function integer uof_get_buyprice_his (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);//取价格历史 Long rslt = 1 Decimal rtn_price,rtn_zqrate,rtn_rate String rtn_unit String rtn_wareunit IF arg_unit = '' THEN SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.pcode = :arg_pcode Order By u_spt_price_MX.opdate Desc; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 Or IsNull(rtn_price) THEN SELECT unit,unit_buy,rate_buy INTO :rtn_wareunit,:rtn_unit,:rtn_rate FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 rtn_unit = '' arg_msg = '不存在资料'+sqlca.SQLErrText GOTO ext END IF IF rtn_unit = '' Or rtn_rate = 0 THEN rtn_unit = rtn_wareunit rtn_price = 0.00 rtn_rate = 1 rslt = 2 GOTO ext END IF END IF ELSE SELECT fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price WHERE u_spt_price.mtrlid = :arg_mtrlid AND u_spt_price.sptid = :arg_sptid AND u_spt_price.unit = :arg_unit AND u_spt_price.woodcode = :arg_woodcode AND u_spt_price.status = :arg_status AND u_spt_price.pcode = :arg_pcode; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 Or IsNull(rtn_price) THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate arg_unit = rtn_unit RETURN rslt end function public function integer uof_get_bj_price (long arg_sptid, long arg_mtrlid, ref string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);Long rslt = 1 Decimal rtn_price,rtn_zqrate,rtn_rate String rtn_unit String rtn_wareunit IF arg_unit = '' THEN SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN SELECT unit,unit_buy,rate_buy INTO :rtn_wareunit,:rtn_unit,:rtn_rate FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 rtn_unit = '' arg_msg = '不存在资料'+sqlca.SQLErrText GOTO ext END IF IF rtn_unit = '' OR rtn_rate = 0 THEN rtn_unit = rtn_wareunit rtn_price = 0.00 rtn_rate = 1 rslt = 2 GOTO ext END IF END IF ELSE SELECT top 1 fprice,zqrate,rate,unit INTO :rtn_price,:rtn_zqrate ,:rtn_rate ,:rtn_unit FROM u_spt_price_MX WHERE u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.unit = :arg_unit AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询操作失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(rtn_price) THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate arg_unit = rtn_unit RETURN rslt end function public function integer uof_get_lmbuyprice (long arg_mtrlid, ref decimal arg_buyprice, ref decimal arg_rebate);Int rslt = 1 SELECT lmbuyprice INTO :arg_buyprice FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_buyprice = 0 END IF arg_rebate = 1 RETURN rslt end function public function integer uf_check_price_save (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg);//==================================================================== // Function: uf_check_price() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_sptid // value long arg_mtrlid // value string arg_mtrlcode // value decimal arg_price // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.07.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 //124 保存, 1769 审核 IF Not f_power_ind(124) Or sys_power_issuper THEN rslt = 1 GOTO ext END IF IF uf_check_price(arg_thflag, arg_sptid, arg_mtrlid, arg_mtrlcode, arg_unit, arg_status, arg_woodcode, arg_pcode, arg_price, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uf_check_price_audit (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg);//==================================================================== // Function: uf_check_price() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_sptid // value long arg_mtrlid // value string arg_mtrlcode // value decimal arg_price // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.07.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 //124 保存, 1769 审核 IF Not f_power_ind(1769) Or sys_power_issuper THEN rslt = 1 GOTO ext END IF IF uf_check_price(arg_thflag, arg_sptid, arg_mtrlid, arg_mtrlcode, arg_unit, arg_status, arg_woodcode, arg_pcode, arg_price, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt end function private function integer uf_check_price (integer arg_thflag, long arg_sptid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_price, ref string arg_msg);//==================================================================== // Function: uf_check_price() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_sptid // value long arg_mtrlid // value string arg_mtrlcode // value decimal arg_price // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.07.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Decimal i_lmbuyprice String i_sptname Int rslt = 1 Long cnt = 0 //124 保存, 1769 审核 //IF NOT f_power_ind(124) OR sys_power_issuper THEN // rslt = 1 // GOTO ext //END IF IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF sys_option_buylimit_ifbj = 0 THEN //价格历史 SELECT price,u_spt.name INTO :i_lmbuyprice,:i_sptname FROM u_spt_price,u_spt WHERE u_spt_price.mtrlid = :arg_mtrlid AND u_spt_price.sptid = :arg_sptid AND u_spt_price.sptid = u_spt.sptid AND u_spt_price.unit = :arg_unit AND u_spt_price.status = :arg_status AND u_spt_price.woodcode = :arg_woodcode AND u_spt_price.pcode = :arg_pcode; ELSEIF sys_option_buylimit_ifbj = 1 THEN //报价 SELECT top 1 price,u_spt.name INTO :i_lmbuyprice,:i_sptname FROM u_spt_price_MX,u_spt WHERE u_spt_price_MX.sptid = u_spt.sptid AND u_spt_price_MX.mtrlid = :arg_mtrlid AND u_spt_price_MX.sptid = :arg_sptid AND u_spt_price_MX.woodcode = :arg_woodcode AND u_spt_price_MX.status = :arg_status AND u_spt_price_MX.pcode = :arg_pcode AND u_spt_price_mx.billtype = 2 Order By u_spt_price_MX.opdate Desc; ELSEIF sys_option_buylimit_ifbj = 2 THEN //设定购价 SELECT top 1 lmbuyprice INTO :i_lmbuyprice FROM u_mtrldef WHERE mtrlid = :arg_mtrlid; i_sptname = '' ELSEIF sys_option_buylimit_ifbj = 3 THEN //计划价 禁止 SELECT top 1 planprice INTO :i_lmbuyprice FROM u_mtrldef WHERE mtrlid = :arg_mtrlid; i_sptname = '' ELSEIF sys_option_buylimit_ifbj = 4 THEN //计划价 询问 GOTO ext //在收货单里面已经询问 所以这里直接跳过 END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询'+arg_mtrlcode+'收货限价失败,可能该供应商的收货限价还没有设定,请检查' GOTO ext END IF IF arg_thflag = 0 THEN IF arg_price > i_lmbuyprice THEN rslt = 0 arg_msg = '供应商:'+i_sptname+','+arg_mtrlcode+'收货时,收货单价{'+String(arg_price,'#,##0.00##')+'} 高于收货限价{'+String(i_lmbuyprice,'#,##0.00##')+'}' GOTO ext END IF ELSE IF arg_price < i_lmbuyprice THEN rslt = 0 arg_msg = '供应商:'+i_sptname+','+arg_mtrlcode+'退货时,退货单价{'+String(arg_price,'#,##0.00##')+'} 低于收货限价{'+String(i_lmbuyprice,'#,##0.00##')+'}' GOTO ext END IF END IF ext: RETURN rslt end function on uo_spt_price.create call super::create TriggerEvent( this, "constructor" ) end on on uo_spt_price.destroy TriggerEvent( this, "destructor" ) call super::destroy end on