$PBExportHeader$uo_cusprice.sru forward global type uo_cusprice from nonvisualobject end type end forward global type uo_cusprice from nonvisualobject end type global uo_cusprice uo_cusprice forward prototypes public function integer uf_autodel_cuspricemx (datetime arg_begindate, boolean arg_ifcommit, ref string arg_msg) public function integer uf_update_custprice (integer arg_ifth, long arg_scid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_woodcode, string arg_status, string arg_pcode, long arg_outwareid, string arg_outwarecode, datetime arg_outdate, decimal arg_price, decimal arg_zqrate, decimal arg_cost, long arg_flag, string arg_dscrp, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg, decimal arg_rate, decimal arg_wareprice, string arg_unit) public function integer uf_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, ref string arg_msg) public function integer uf_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, long arg_cusid, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uf_del_sdcusprice (long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, datetime arg_opdate, decimal arg_price, decimal arg_zqrate, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg) public function integer uf_del_cusprice (integer arg_ifth, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_outwareid, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg) public function integer uof_get_dft_pricelistid (ref s_sale_price_mx arg_s_mx, ref string arg_msg) public function integer uof_chk_pricelistid (long arg_pricelistid, long arg_moneyid, ref string arg_msg) public function integer uof_get_pricelist_price (ref s_sale_price_mx arg_s_mx, ref string arg_msg) public function integer uof_get_mtrl_saleprice (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg) public function integer uof_get_lmsaleprice (long arg_mtrlid, ref decimal arg_saleprice, ref decimal arg_rebate) public function integer uof_get_quoteprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, ref decimal arg_saleprice, ref decimal arg_rebate) public function integer uof_get_saleprice_his (long arg_cusid, long arg_moneyid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, ref decimal arg_saleprice, ref decimal arg_rebate) public function integer uof_get_mtrl_saleprice_qty (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, decimal arg_qty, ref string arg_msg) end prototypes public function integer uf_autodel_cuspricemx (datetime arg_begindate, boolean arg_ifcommit, ref string arg_msg);//uf_autodel_cuspricemx(arg_begindate,arg_ifcommit,arg_msg) //自动删除客户销售价格明细?指定时间以前的 Long rslt = 1 Long cnt = 0 ////参数检查 //IF arg_begindate < DateTime(Date('1900-01-01'),Time(0)) THEN MessageBox('提示','日期太早了') //IF Trim(arg_msg) = '' THEN arg_msg = '' ////删除时间范围内的记录 //IF MessageBox(' 重要提示','删除指定时间以前所有采购历史价格记录(不能恢复),确认吗?',Exclamation!,OKCancel!) = 1 THEN // DELETE // FROM u_spt_price_mx // Where u_spt_price_mx.opdate <= :arg_begindate; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '因网络或其他原因删除失败'+sqlca.SQLErrText // GOTO ext // END IF //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_custprice (integer arg_ifth, long arg_scid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_woodcode, string arg_status, string arg_pcode, long arg_outwareid, string arg_outwarecode, datetime arg_outdate, decimal arg_price, decimal arg_zqrate, decimal arg_cost, long arg_flag, string arg_dscrp, long arg_printid, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg, decimal arg_rate, decimal arg_wareprice, string arg_unit);Long rslt = 1 Long cnt = 0 DateTime server_time //检查退货,退货不加报价 IF arg_ifth = 1 THEN rslt = 1 GOTO ext END IF //检查参数 IF IsNull(arg_cusid) THEN arg_cusid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_price) THEN arg_price = 0 IF arg_outdate <= DateTime(Date('1900-01-01'),Time(0)) THEN rslt = 0 arg_msg = '错误的发生时间' GOTO ext END IF arg_outwarecode = Trim(arg_outwarecode) //获得服务器时间 SELECT Top 1 getdate() Into :server_time From u_user; //检查客户存在否 SELECT count(*) INTO :cnt FROM u_cust Where u_cust.cusid = :arg_cusid; 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 = '查询'+arg_mtrlcode+'失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '编码不存在'+arg_mtrlcode GOTO ext END IF int ifpz = 7 string ll_status = '',ll_woodcode = '',ll_pcode = '' //暂时改为三个配置 //select price_ifpz into :ifpz from u_mtrldef where mtrlid = :arg_mtrlid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,操作员" // GOTO ext //END IF choose case ifpz case 0 case 1 ll_status = arg_status case 2 ll_woodcode = arg_woodcode case 3 ll_pcode = arg_pcode case 4 ll_status = arg_status ll_woodcode = arg_woodcode case 5 ll_status = arg_status ll_pcode =arg_pcode case 6 ll_woodcode = arg_woodcode ll_pcode = arg_pcode case else ll_status = arg_status ll_woodcode = arg_woodcode ll_pcode = arg_pcode end choose //1.更新客户销售价表 UPDATE u_cus_price SET u_cus_price.price = :arg_price * :arg_zqrate, u_cus_price.fprice = :arg_price, u_cus_price.zqrate = :arg_zqrate, u_cus_price.wareprice = :arg_wareprice, u_cus_price.rate = :arg_rate, u_cus_price.dscrp = :arg_dscrp WHERE u_cus_price.cusid = :arg_cusid AND u_cus_price.mtrlid = :arg_mtrlid AND u_cus_price.woodcode = :ll_woodcode AND u_cus_price.status = :ll_status AND u_cus_price.pcode = :ll_pcode AND u_cus_price.moneyid = :arg_moneyid And u_cus_price.unit = :arg_unit; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_cus_price (cusid, mtrlid, woodcode, status, pcode, price, fprice, zqrate, dscrp, moneyid, unit, wareprice, rate) VALUES ( :arg_cusid, :arg_mtrlid, :ll_woodcode, :ll_status, :ll_pcode, :arg_price * :arg_zqrate, :arg_price, :arg_zqrate, :arg_dscrp, :arg_moneyid, :arg_unit, :arg_wareprice, :arg_rate); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '新增客户销售'+arg_mtrlcode+'价格失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '客户销售价表更新'+arg_mtrlcode+'失败'+sqlca.SQLErrText GOTO ext END IF //2.插入客户销售变动明细价表 INSERT INTO u_cus_price_mx ( u_cus_price_mx.cusid, u_cus_price_mx.mtrlid, u_cus_price_mx.opdate, u_cus_price_mx.opemp, u_cus_price_mx.outwareid, u_cus_price_mx.outwarecode, u_cus_price_mx.outdate, u_cus_price_mx.price, u_cus_price_mx.fprice, u_cus_price_mx.zqrate, u_cus_price_mx.cost, u_cus_price_mx.woodcode, u_cus_price_mx.status, u_cus_price_mx.pcode, u_cus_price_mx.dscrp, u_cus_price_mx.buildtype, u_cus_price_mx.printid, u_cus_price_mx.moneyid, u_cus_price_mx.unit, u_cus_price_mx.wareprice, u_cus_price_mx.rate) VALUES ( :arg_cusid, :arg_mtrlid, getdate(), :publ_operator, :arg_outwareid, :arg_outwarecode, :arg_outdate, :arg_price* :arg_zqrate, :arg_price, :arg_zqrate, :arg_cost, :arg_woodcode, :arg_status, :arg_pcode, :arg_dscrp, :arg_flag, :arg_printid, :arg_moneyid, :arg_unit, :arg_wareprice, :arg_rate); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '登记在客户'+arg_mtrlcode+'售价变动明细表失败,'+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_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_unit, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, ref string arg_msg);Decimal ld_lmsaleprice String ls_cusname,ls_listname Long ll_pricelistid Int rslt = 1,li_flag Long cnt = 0 IF NOT f_power_ind(492) OR sys_power_issuper THEN rslt = 1 GOTO ext END IF IF sys_option_price_if_status = 0 THEN arg_status = '' arg_pcode = '' arg_woodcode = '' END IF SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,客户资料" GOTO ext END IF IF ll_pricelistid = 0 THEN SELECT u_sale_price_list.pricelistid INTO :ll_pricelistid FROM u_sale_price_list,u_sale_price_mx WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid AND u_sale_price_mx.mtrlid = :arg_mtrlid AND u_sale_price_mx.status = :arg_status AND u_sale_price_mx.pcode = :arg_pcode AND u_sale_price_mx.woodcode = :arg_woodcode AND u_sale_price_mx.unit = :arg_unit AND u_sale_price_list.moneyid = :arg_moneyid AND u_sale_price_list.dftflag = 1 AND u_sale_price_list.flag = 1; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "编码:"+arg_mtrlcode+",标准格价表未设定" GOTO ext ELSEIF sqlca.SQLNRows > 1 THEN rslt = 0 arg_msg = "编码:"+arg_mtrlcode+",有多于两个标准格价表" GOTO ext END IF ELSE rslt = 0 arg_msg = "查询编码:"+arg_mtrlcode+",标准格价表操作失败" GOTO ext END IF END IF SELECT price, flag, listname INTO :ld_lmsaleprice,:li_flag,:ls_listname FROM u_sale_price_list,u_sale_price_mx WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid AND u_sale_price_mx.mtrlid = :arg_mtrlid AND u_sale_price_mx.status = :arg_status AND u_sale_price_mx.pcode = :arg_pcode AND u_sale_price_mx.woodcode = :arg_woodcode AND u_sale_price_mx.pricelistid = :ll_pricelistid AND u_sale_price_mx.unit = :arg_unit ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询编码:'+arg_mtrlcode+'销售限价失败,可能该客户的销售限价还没有设定,请检查' GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '价格表:'+ls_listname+'未审核' GOTO ext END IF IF arg_price < ld_lmsaleprice THEN rslt = 0 arg_msg = '客户:'+ls_cusname+',编码:'+arg_mtrlcode+'销售单价{'+String(arg_price,'#,##0.00##')+'} 低于销售限价{'+String(ld_lmsaleprice,'#,##0.00##')+'}' GOTO ext END IF ext: RETURN rslt end function public function integer uf_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, long arg_cusid, long arg_flag, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);//淘汰, 不用了 //uf_getmtrlcusprice(arg_mtrlid,arg_cusid,arg_flag,arg_price,arg_zqrate,arg_msg) //功能:获得指定商品,指定客户的最新销售价格 //参数:flag[0,最新销售价格,1次新销售价格] //参数:arg_price[返回最新价格] //返回:1成功,0失败,2查询失败 Long rslt = 1 //Long cnt = 0 //Long count = 1 //记录取出个数 //Decimal rtn_price,rtn_zqrate,rtn_rate //String rtn_unit //String rtn_wareunit // ////参数合法性检查 //IF IsNull(arg_flag) THEN arg_flag = 0 //默认最新价格 //IF IsNull(arg_msg) THEN arg_msg = '' // //IF arg_flag = 0 THEN // IF sys_option_price_if_list = 0 THEN // // SELECT fprice,zqrate,rate,unit // INTO :rtn_price,:rtn_zqrate,:rtn_rate ,:rtn_unit // FROM u_cus_price // WHERE u_cus_price.mtrlid = :arg_mtrlid // AND u_cus_price.cusid = :arg_cusid // AND u_cus_price.woodcode = :arg_woodcode // AND u_cus_price.status = :arg_status // AND u_cus_price.pcode = :Arg_pcode // AND u_cus_price.moneyid = :arg_moneyid // And u_cus_price.unit = :arg_unit; // 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 // rtn_rate = 1 // GOTO ext // END IF // ELSE //查价格表 rtn_rate 按默认值 // String ls_cusname,ls_listname // Long ll_pricelistid // Decimal ld_lmsaleprice, lde_rebate, lde_rate // Int li_flag // // // // SELECT CASE :arg_unit when unit THEN 1 when unit_buy THEN rate_buy when unit_scll THEN rate_scll when unit_sale THEN rate_sale END // Into :lde_rate // From u_mtrldef // Where mtrlid = :arg_mtrlid; // IF sqlca.SQLCode <> 0 THEN // rtn_rate = arg_rate // ELSE // rtn_rate = lde_rate // END IF // // SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid // FROM u_cust // Where cusid = :arg_cusid; // IF sqlca.SQLCode <> 0 THEN // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // END IF // // IF sys_option_price_if_status = 0 THEN // arg_status = '' // Arg_pcode = '' // arg_woodcode = '' // END IF // // // // // IF ll_pricelistid = 0 THEN // SELECT u_sale_price_list.pricelistid INTO :ll_pricelistid // FROM u_sale_price_list,u_sale_price_mx // WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid // AND u_sale_price_mx.mtrlid = :arg_mtrlid // AND u_sale_price_mx.status = :arg_status // AND u_sale_price_mx.pcode = :arg_pcode // AND u_sale_price_mx.woodcode = :arg_woodcode // AND u_sale_price_list.dftflag = 1 // AND u_sale_price_list.moneyid = :arg_moneyid // And u_sale_price_list.flag = 1; // // IF sqlca.SQLCode = 0 THEN // IF sqlca.SQLNRows = 0 THEN // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // ELSEIF sqlca.SQLNRows > 1 THEN // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // END IF // ELSE // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // END IF // END IF // // // // // SELECT price, // rebate, // flag, // listname // INTO :ld_lmsaleprice, :lde_rebate,:li_flag,:ls_listname // FROM u_sale_price_list,u_sale_price_mx // WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid // AND u_sale_price_mx.mtrlid = :arg_mtrlid // AND u_sale_price_mx.status = :arg_status // AND u_sale_price_mx.pcode = :arg_pcode // AND u_sale_price_mx.woodcode = :arg_woodcode // AND u_sale_price_mx.pricelistid = :ll_pricelistid // AND u_sale_price_list.flag = 1 // And u_sale_price_mx.unit = :arg_unit; // IF sqlca.SQLCode <> 0 THEN // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // END IF // // IF li_flag = 0 THEN // rslt = 2 // rtn_price = 0.00 // rtn_zqrate = 1 // GOTO ext // END IF // // rtn_price = ld_lmsaleprice // rtn_zqrate = lde_rebate // END IF //ELSEIF arg_flag = 1 THEN //取较新的价格 // DECLARE get_price CURSOR FOR // SELECT fprice,zqrate,rate,unit // FROM u_cus_price_MX // WHERE u_cus_price_MX.cusid = :arg_cusid // AND u_cus_price_MX.mtrlid = :arg_mtrlid // AND u_cus_price_MX.woodcode = :arg_woodcode // AND u_cus_price_MX.status = :arg_status // AND u_cus_price_MX.pcode = :Arg_pcode // AND u_cus_price_MX.moneyid = :arg_moneyid // AND u_cus_price_MX.unit = :arg_unit // Order By u_cus_price_MX.opdate Desc; // //打开游标 // OPEN get_price; // FETCH get_price Into :rtn_price,:rtn_zqrate,:rtn_rate,:rtn_unit; // rtn_price = 0.0 // DO While (sqlca.SQLCode = 0 And count < 2 ) // count++ // FETCH get_price Into :rtn_price,:rtn_zqrate,:rtn_rate,:rtn_unit; // LOOP // CLOSE get_price; // //关闭游标 // IF count = 1 THEN // rslt = 0 // arg_msg = '没有较新的价格存在' // 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_del_sdcusprice (long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, datetime arg_opdate, decimal arg_price, decimal arg_zqrate, long arg_moneyid, boolean arg_ifcommit, ref string arg_msg);//手动删除记录 //uf_del_cusprice(arg_cusid,arg_mtrlid,arg_opdate,arg_price,arg_ifcommit,arg_msg) Long rslt = 1 Long cnt = 0 //检查客户存在否 SELECT count(*) INTO :cnt FROM u_cust Where u_cust.cusid = :arg_cusid; 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_cus_price_mx WHERE u_cus_price_mx.cusid = :arg_cusid AND u_cus_price_mx.mtrlid = :arg_mtrlid AND u_cus_price_mx.opdate = :arg_opdate AND u_cus_price_mx.woodcode = :arg_woodcode AND u_cus_price_mx.status = :arg_status AND u_cus_price_mx.pcode = :arg_pcode AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_mx.unit = :arg_unit; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF //更新最新价格表 UPDATE u_cus_price SET u_cus_price.price = :arg_price * :arg_zqrate, u_cus_price.fprice = :arg_price, u_cus_price.zqrate = :arg_zqrate WHERE u_cus_price.cusid = :arg_cusid AND u_cus_price.mtrlid = :arg_mtrlid AND u_cus_price.woodcode = :arg_woodcode AND u_cus_price.status = :arg_status AND u_cus_price.pcode = :arg_pcode AND u_cus_price.moneyid = :arg_moneyid AND u_cus_price.unit = :arg_unit; 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_del_cusprice (integer arg_ifth, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_status, string arg_woodcode, string arg_pcode, long arg_outwareid, 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_cust Where u_cust.cusid = :arg_cusid; 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 int ifpz = 7 int ll_status = 0,ll_woodcode = 0,ll_pcode = 0 select price_ifpz into :ifpz from u_mtrldef where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText GOTO ext END IF choose case ifpz case 0 case 1 ll_status = 1 case 2 ll_woodcode = 1 case 3 ll_pcode = 1 case 4 ll_status = 1 ll_woodcode = 1 case 5 ll_status = 1 ll_pcode =1 case 6 ll_woodcode = 1 ll_pcode = 1 case else ll_status = 1 ll_woodcode = 1 ll_pcode = 1 end choose SELECT count(*) INTO :cnt FROM u_cus_price_mx WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND outwareid = :arg_outwareid AND printid = :arg_printid AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price_mx WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND outwareid = :arg_outwareid AND printid = :arg_printid AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price_mx WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price_mx WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price_mx WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price SET fprice = :ld_fprice , zqrate = :ld_zqrate, price = :ld_price, sys_changetime = :ld_sys_changetime WHERE cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND (status = :arg_status or :ll_status = 0) AND (woodcode = :arg_woodcode or :ll_woodcode = 0 ) AND (pcode = :arg_pcode or :ll_pcode = 0) 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_cus_price_mx Where cusid = :arg_cusid AND mtrlid = :arg_mtrlid AND unit = :arg_unit AND outwareid = :arg_outwareid 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 uof_get_dft_pricelistid (ref s_sale_price_mx arg_s_mx, ref string arg_msg);Int rslt = 1 Long ll_pricelistid SELECT top 1 u_sale_price_list.pricelistid INTO :ll_pricelistid FROM u_sale_price_list,u_sale_price_mx WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid AND u_sale_price_mx.mtrlid = :arg_s_mx.mtrlid // AND u_sale_price_mx.status = :arg_s_mx.status // AND u_sale_price_mx.pcode = :arg_s_mx.pcode // AND u_sale_price_mx.woodcode = :arg_s_mx.woodcode AND (u_sale_price_mx.saleqty <= :arg_s_mx.qty and u_sale_price_mx.saleqty1 >= :arg_s_mx.qty) AND u_sale_price_list.dftflag = 1 AND u_sale_price_list.moneyid = :arg_s_mx.moneyid And u_sale_price_list.flag = 1; IF sqlca.SQLCode <> 0 THEN ll_pricelistid = 0 END IF IF IsNull(ll_pricelistid) THEN ll_pricelistid = 0 IF ll_pricelistid = 0 THEN rslt = 0 END IF arg_s_mx.pricelistid = ll_pricelistid RETURN rslt end function public function integer uof_chk_pricelistid (long arg_pricelistid, long arg_moneyid, ref string arg_msg); //检查价格表和币种是否对应 Int rslt = 1 Long ll_moneyid_pricelist Int li_flag IF arg_pricelistid = 0 THEN arg_msg = '客户价格表ID错误(=0)' rslt = 0 GOTO ext END IF SELECT moneyid , flag INTO :ll_moneyid_pricelist, :li_flag FROM u_sale_price_list Where u_sale_price_list.pricelistid = :arg_pricelistid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户价格表对应币种失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_moneyid_pricelist <> arg_moneyid THEN arg_msg = '客户价格表对应币种与检查币种不相符' rslt = 0 GOTO ext END IF IF li_flag = 0 THEN arg_msg = '客户价格表未审核' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_get_pricelist_price (ref s_sale_price_mx arg_s_mx, ref string arg_msg);Int rslt = 1 Long ll_i Int li_statusflag String ls_status Decimal obj_price, lde_saleprice, lde_rebate s_mtrlcfg_expr s_pz[] SELECT statusflag INTO :li_statusflag FROM u_mtrldef Where mtrlid = :arg_s_mx.mtrlid; IF sqlca.SQLCode <> 0 THEN li_statusflag = 0 END IF IF li_statusflag = 2 And arg_s_mx.status <> '' THEN //组合配置,自动按子件计算单价 //类似于 price_ifpz = 1 f_checkpz(arg_s_mx.status,s_pz[]) arg_s_mx.pcode = '' arg_s_mx.woodcode = '' ELSE s_pz[1].cfgname = arg_s_mx.status s_pz[1].qty = '1' END IF lde_saleprice = 0 lde_rebate = 1 FOR ll_i = 1 To UpperBound(s_pz) ls_status = s_pz[ll_i].cfgname SELECT top 1 price, rebate INTO :obj_price, :lde_rebate FROM u_sale_price_list,u_sale_price_mx WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid AND u_sale_price_mx.mtrlid = :arg_s_mx.mtrlid AND u_sale_price_mx.status = :ls_status AND u_sale_price_mx.pcode = :arg_s_mx.pcode AND u_sale_price_mx.woodcode = :arg_s_mx.woodcode AND (u_sale_price_mx.saleqty <= :arg_s_mx.qty and u_sale_price_mx.saleqty1 >= :arg_s_mx.qty) AND u_sale_price_mx.pricelistid = :arg_s_mx.pricelistid And u_sale_price_mx.unit = :arg_s_mx.unit; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询价格表价格失败,"+sqlca.sqlerrtext lde_saleprice = 0 obj_price = 0 lde_rebate = 1 goto ext END IF lde_saleprice += obj_price * Dec(s_pz[ll_i].qty) NEXT ext: arg_s_mx.price = lde_saleprice arg_s_mx.rebate = lde_rebate RETURN rslt end function public function integer uof_get_mtrl_saleprice (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, ref string arg_msg);//uof_get_mtrl_saleprice(arg_mtrlid,arg_cusid,arg_flag,arg_price,arg_zqrate,arg_msg) //功能:获得指定商品,指定客户的最新销售价格 //参数:flag[0,最新销售价格,1次新销售价格] //参数:arg_price[返回最新价格] //返回:1成功,0失败,2查询失败 Long rslt = 1 Long cnt = 0 Long count = 1 //记录取出个数 Decimal rtn_price,rtn_zqrate,rtn_rate Decimal lde_saleprice, lde_rebate, lde_rate, obj_price String rtn_unit String rtn_wareunit int ls_price_ifpz //参数合法性检查 IF arg_moneyid = 0 THEN rslt = 0 GOTO ext END IF IF arg_cusid = 0 THEN rslt = 0 GOTO ext END IF IF arg_mtrlid = 0 THEN rslt = 0 GOTO ext END IF if sys_option_price_if_list <> 0 then select price_ifpz into :ls_price_ifpz from u_mtrldef where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 GOTO ext END IF choose case ls_price_ifpz case 0 //不使用 arg_status = '' arg_woodcode = '' arg_pcode = '' case 1//配置 arg_woodcode = '' arg_pcode = '' case 2//配置1 arg_status = '' arg_pcode = '' case 3//配置2 arg_status = '' arg_woodcode = '' case 4//配置+配置1 arg_pcode = '' case 5//配置1+配置2 arg_status = '' case 6//配置+配置2 arg_woodcode = '' //else 配置+配置1+配置2 end choose end if IF sys_option_price_if_list = 0 THEN //取销售历史 IF uof_get_saleprice_his(arg_cusid, arg_moneyid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode, arg_unit , lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate ELSEIF sys_option_price_if_list = 1 THEN //查价格表 rtn_rate 按默认值 Long ll_i String ls_cusname,ls_listname Long ll_pricelistid Int li_flag, li_statusflag, li_price_ifpz String ls_unit, ls_status s_mtrlcfg_expr s_pz[] // SELECT unit, CASE :arg_unit when unit THEN 1 when unit_buy THEN rate_buy when unit_scll THEN rate_scll when unit_sale THEN rate_sale END, statusflag INTO :ls_unit, :lde_rate, :li_statusflag FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rtn_rate = arg_rate arg_unit = ls_unit ELSE rtn_rate = lde_rate END IF IF sys_option_price_if_status = 0 THEN IF li_statusflag <> 2 THEN arg_status = '' END IF arg_pcode = '' arg_woodcode = '' END IF SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 2 //没有价格表 GOTO ext END IF s_sale_price_mx s_mx s_mx.mtrlid = arg_mtrlid s_mx.status = arg_status s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.unit = arg_unit s_mx.moneyid = arg_moneyid IF ll_pricelistid = 0 THEN IF uof_get_dft_pricelistid(s_mx, arg_msg) = 0 THEN rslt = 2 //无标准价格表 或未审核 GOTO ext END IF ll_pricelistid = s_mx.pricelistid ELSE s_mx.pricelistid = ll_pricelistid END IF IF uof_chk_pricelistid(ll_pricelistid, arg_moneyid, arg_msg) = 0 THEN rslt = 2 //币种不对, 未审核 GOTO ext END IF //新增,优化代码 20130925 IF uof_get_pricelist_price(s_mx, arg_msg) = 0 THEN rslt = 2 //查询失败 GOTO ext END IF rtn_price = s_mx.price rtn_zqrate = s_mx.rebate ELSEIF sys_option_price_if_list = 2 THEN //取报价单 IF uof_get_quoteprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, arg_unit , lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate ELSEIF sys_option_price_if_list = 3 THEN //取设定售价 IF uof_get_lmsaleprice(arg_mtrlid, lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate END IF ext: IF rslt <> 1 THEN rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 END IF arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate //这2个字段没用的 arg_unit = rtn_unit //这2个字段没用的 RETURN rslt end function public function integer uof_get_lmsaleprice (long arg_mtrlid, ref decimal arg_saleprice, ref decimal arg_rebate);Int rslt = 1 SELECT lmsaleprice INTO :arg_saleprice FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_saleprice = 0 END IF arg_rebate = 1 RETURN rslt end function public function integer uof_get_quoteprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, ref decimal arg_saleprice, ref decimal arg_rebate);Int rslt = 1 SELECT top 1 u_quotemx.sumprice, u_quotemx.rebate INTO :arg_saleprice, :arg_rebate FROM u_quotemx INNER JOIN u_quote ON u_quotemx.scid = u_quote.scid AND u_quotemx.quoteid = u_quote.quoteid WHERE (u_quote.flag = 1) AND u_quotemx.mtrlid = :arg_mtrlid AND u_quotemx.status = :arg_status AND u_quotemx.woodcode = :arg_woodcode AND u_quotemx.pcode = :arg_pcode AND u_quotemx.unit = :arg_unit Order By u_quote.quotedate Desc; IF sqlca.SQLCode <> 0 THEN arg_saleprice = 0 arg_rebate = 1 END IF RETURN rslt end function public function integer uof_get_saleprice_his (long arg_cusid, long arg_moneyid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, ref decimal arg_saleprice, ref decimal arg_rebate);Int rslt = 1 SELECT fprice,zqrate INTO :arg_saleprice,:arg_rebate FROM u_cus_price WHERE u_cus_price.cusid = :arg_cusid AND u_cus_price.moneyid = :arg_moneyid AND u_cus_price.mtrlid = :arg_mtrlid AND u_cus_price.status = :arg_status AND u_cus_price.woodcode = :arg_woodcode AND u_cus_price.pcode = :arg_pcode And u_cus_price.unit = :arg_unit; IF sqlca.SQLCode <> 0 THEN arg_saleprice = 0 arg_rebate = 1 END IF RETURN rslt end function public function integer uof_get_mtrl_saleprice_qty (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_unit, string arg_woodcode, string arg_status, string arg_pcode, ref decimal arg_price, ref decimal arg_zqrate, ref decimal arg_rate, decimal arg_qty, ref string arg_msg);//uof_get_mtrl_saleprice(arg_mtrlid,arg_cusid,arg_flag,arg_price,arg_zqrate,arg_msg) //功能:获得指定商品,指定客户的最新销售价格 //参数:flag[0,最新销售价格,1次新销售价格] //参数:arg_price[返回最新价格] //返回:1成功,0失败,2查询失败 Long rslt = 1 Long cnt = 0 Long count = 1 //记录取出个数 Decimal rtn_price,rtn_zqrate,rtn_rate Decimal lde_saleprice, lde_rebate, lde_rate, obj_price String rtn_unit String rtn_wareunit int ls_price_ifpz //参数合法性检查 IF arg_moneyid = 0 THEN rslt = 0 GOTO ext END IF IF arg_cusid = 0 THEN rslt = 0 GOTO ext END IF IF arg_mtrlid = 0 THEN rslt = 0 GOTO ext END IF if sys_option_price_if_list <> 0 then select price_ifpz into :ls_price_ifpz from u_mtrldef where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 2 GOTO ext END IF choose case ls_price_ifpz case 0 //不使用 arg_status = '' arg_woodcode = '' arg_pcode = '' case 1//配置 arg_woodcode = '' arg_pcode = '' case 2//配置1 arg_status = '' arg_pcode = '' case 3//配置2 arg_status = '' arg_woodcode = '' case 4//配置+配置1 arg_pcode = '' case 5//配置1+配置2 arg_status = '' case 6//配置+配置2 arg_woodcode = '' //else 配置+配置1+配置2 end choose end if IF sys_option_price_if_list = 0 THEN //取销售历史 IF uof_get_saleprice_his(arg_cusid, arg_moneyid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode, arg_unit , lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate ELSEIF sys_option_price_if_list = 1 THEN //查价格表 rtn_rate 按默认值 Long ll_i String ls_cusname,ls_listname Long ll_pricelistid Int li_flag, li_statusflag, li_price_ifpz String ls_unit, ls_status s_mtrlcfg_expr s_pz[] // SELECT unit, CASE :arg_unit when unit THEN 1 when unit_buy THEN rate_buy when unit_scll THEN rate_scll when unit_sale THEN rate_sale END, statusflag INTO :ls_unit, :lde_rate, :li_statusflag FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rtn_rate = arg_rate arg_unit = ls_unit ELSE rtn_rate = lde_rate END IF IF sys_option_price_if_status = 0 THEN IF li_statusflag <> 2 THEN arg_status = '' END IF arg_pcode = '' arg_woodcode = '' END IF SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 2 //没有价格表 GOTO ext END IF s_sale_price_mx s_mx s_mx.mtrlid = arg_mtrlid s_mx.status = arg_status s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.unit = arg_unit s_mx.moneyid = arg_moneyid s_mx.qty = arg_qty IF ll_pricelistid = 0 THEN IF uof_get_dft_pricelistid(s_mx, arg_msg) = 0 THEN rslt = 2 //无标准价格表 或未审核 GOTO ext END IF ll_pricelistid = s_mx.pricelistid ELSE s_mx.pricelistid = ll_pricelistid END IF IF uof_chk_pricelistid(ll_pricelistid, arg_moneyid, arg_msg) = 0 THEN rslt = 2 //币种不对, 未审核 GOTO ext END IF //新增,优化代码 20130925 IF uof_get_pricelist_price(s_mx, arg_msg) = 0 THEN rslt = 2 //查询失败 GOTO ext END IF rtn_price = s_mx.price rtn_zqrate = s_mx.rebate ELSEIF sys_option_price_if_list = 2 THEN //取报价单 IF uof_get_quoteprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, arg_unit , lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate ELSEIF sys_option_price_if_list = 3 THEN //取设定售价 IF uof_get_lmsaleprice(arg_mtrlid, lde_saleprice, lde_rebate) = 0 THEN lde_saleprice = 0 lde_rebate = 1 END IF rtn_price = lde_saleprice rtn_zqrate = lde_rebate END IF ext: IF rslt <> 1 THEN rtn_price = 0.00 rtn_zqrate = 1 rtn_rate = 1 END IF arg_price = rtn_price arg_zqrate = rtn_zqrate arg_rate = rtn_rate //这2个字段没用的 arg_unit = rtn_unit //这2个字段没用的 RETURN rslt end function on uo_cusprice.create call super::create TriggerEvent( this, "constructor" ) end on on uo_cusprice.destroy TriggerEvent( this, "destructor" ) call super::destroy end on