$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 type variables Int uo_option_checkprice_native Int uo_option_price_rmb Int uo_option_saleprice_list_rebate Long cur_poid datastore ds_pzmx boolean if_chk_mxlist = false //报价时用,true时,使用客户价格表, false时,自己选择价格表 //boolean if_cmpl_mtrl_chg_auto = True boolean if_cmpl_zhpz_pf = false //string cmpl_zhpz_cfgname = '' s_mtrlcfg_expr s_zhpz[] end variables forward prototypes Public Function Integer uof_autodel_cuspricemx (DateTime arg_begindate, Boolean arg_ifcommit, Ref String arg_msg) Public Function Integer uof_del_cusprice (Long arg_cusid, Long arg_mtrlid, DateTime arg_opdate, Long arg_printid, Long arg_moneyid, Boolean arg_ifcommit, Ref String arg_msg) public function integer uof_pricestr_cmp (string arg_pricestr, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price) Public Function Integer uof_update_custprice (Integer arg_ifth, Long arg_scid, Long arg_cusid, Long arg_mtrlid, String arg_mtrlcode, String arg_status, String arg_woodcode, String arg_pcode, Long arg_outwareid, String arg_outwarecode, DateTime arg_outdate, Decimal arg_fprice, Decimal arg_zqrate, Decimal arg_cost, Long arg_flag, String arg_dscrp, Long arg_printid, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg) public function integer uof_check_price_saletask (long arg_typeid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, long arg_moneyid, long arg_scid, long arg_quoteid, long arg_quoteprintid, decimal arg_price, decimal arg_qty, ref string arg_msg) public function integer uof_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, decimal arg_qty, ref string arg_msg) public function integer uof_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, long arg_cusid, ref decimal arg_price, ref decimal arg_zqrate, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg) public function integer uof_getprice_saletask (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, long arg_quoteid, long arg_quoteprintid, integer arg_typeid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg) public function integer uof_get_pricelistid (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_moneyid, ref long arg_pricelistid, ref string arg_msg) Public Function Integer uof_chk_pricelistid (Long arg_moneyid, Ref Long arg_pricelistid, Ref String arg_msg) Public Function Integer uof_del_cusprice_auto (Long arg_cusid, Long arg_outwareid, Long arg_printid, Long arg_mtrlid, String arg_status, String arg_woodcode, String arg_pcode, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg) public function integer uf_cmpl_price_zhpz (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg) public function integer uf_cmpl_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg) public function integer uof_get_pricelistinfo (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg) public function integer uof_get_pricelist_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, long arg_moneyid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg) public function integer uf_cmpl_price_pack (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg) public function integer uof_get_mtrl_bjpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, integer arg_mtrlpztype, ref string arg_msg) public function integer uof_get_mtrl_ygpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, ref string arg_msg) public function integer uof_get_mtrl_3pz_difprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_difprice, ref string arg_msg) public function integer uof_getprice_quote (long arg_moneyid, long arg_pricelistid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg) end prototypes Public Function Integer uof_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 uof_del_cusprice (Long arg_cusid, Long arg_mtrlid, DateTime arg_opdate, Long arg_printid, Long arg_moneyid, Boolean arg_ifcommit, Ref String arg_msg); Int 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.printid = :arg_printid And u_cus_price_mx.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_pricestr_cmp (string arg_pricestr, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price); Int rslt = 1 String s_rtn datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) ds_pricestr.Retrieve() IF Trim(arg_pricestr) = '' THEN rslt = 2 GOTO ext END IF SELECT Top 1 Replace( :arg_pricestr,'不包含',' not like ') Into :arg_pricestr From u_user; SELECT Top 1 Replace( :arg_pricestr,'不等于','<>') Into :arg_pricestr From u_user; SELECT Top 1 Replace( :arg_pricestr,'包含',' like ') Into :arg_pricestr From u_user; SELECT Top 1 Replace( :arg_pricestr,'等于',' = ') Into :arg_pricestr From u_user; //'配置'需放在最后一行, 因为配置1, 配置2 没替换的话,有可能导致替换剩下个1 或2 SELECT Top 1 Replace( :arg_pricestr,'配置1',"'"+:arg_woodcode+"'") Into :arg_pricestr From u_user; SELECT Top 1 Replace( :arg_pricestr,'配置2',"'"+:arg_pcode+"'") Into :arg_pricestr From u_user; SELECT Top 1 Replace( :arg_pricestr,'配置',"'"+:arg_status+"'") Into :arg_pricestr From u_user; ds_pricestr.Modify('cmpl.expression= "'+arg_pricestr+'"') s_rtn = String(ds_pricestr.Object.cmpl[1]) IF s_rtn = 'false' THEN rslt = 0 arg_price = 0 ELSE arg_price = Round(Dec(s_rtn),5) END IF ext: Destroy ds_pricestr RETURN rslt end function Public Function Integer uof_update_custprice (Integer arg_ifth, Long arg_scid, Long arg_cusid, Long arg_mtrlid, String arg_mtrlcode, String arg_status, String arg_woodcode, String arg_pcode, Long arg_outwareid, String arg_outwarecode, DateTime arg_outdate, Decimal arg_fprice, Decimal arg_zqrate, Decimal arg_cost, Long arg_flag, String arg_dscrp, Long arg_printid, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg); Long rslt = 1 Long cnt = 0 DateTime server_dt 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_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_moneyid) THEN arg_moneyid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_qty1) THEN arg_qty1 = 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_dt 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 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 = '因网络和其他原因查询物料:'+arg_mtrlcode+'失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '物料不存在:'+arg_mtrlcode GOTO ext END IF // //检查数量范围内是否有重复? //SELECT count(*) // INTO :cnt // FROM u_cus_price // WHERE u_cus_price.cusid = :arg_cusid 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.qty > :arg_qty) AND (u_cus_price.qty < :arg_qty1) or // ( u_cus_price.qty1 > :arg_qty) AND (u_cus_price.qty1 < :arg_qty1) ) and // u_cus_price.moneyid = :arg_moneyid // u_cus_price.ifcancel = 0 ; //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+"数量范围:"+string(arg_qty,'#,##0.#####')+'到'+string(arg_qty1,'#,##0.#####') +'有重叠' // GOTO ext //END IF //1.更新客户销售价表 SELECT count(*) INTO :cnt FROM u_cus_price WHERE u_cus_price.cusid = :arg_cusid 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.qty = :arg_qty) AND (u_cus_price.qty1 = :arg_qty1) AND u_cus_price.moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其他原因查询客户产品:'+arg_mtrlcode+'最新价格失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN IF arg_buildtype = 0 THEN UPDATE u_cus_price SET u_cus_price.cusid = :arg_cusid, u_cus_price.mtrlid = :arg_mtrlid, u_cus_price.price = :arg_fprice * :arg_zqrate, u_cus_price.fprice = :arg_fprice, u_cus_price.zqrate = :arg_zqrate, u_cus_price.sys_changetime = getdate(), u_cus_price.ifcancel = 0 WHERE u_cus_price.cusid = :arg_cusid 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.qty = :arg_qty) AND (u_cus_price.qty1 = :arg_qty1) AND u_cus_price.moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其它原因,客户销售价表更新'+arg_mtrlcode+'失败'+sqlca.SQLErrText GOTO ext END IF ELSEIF arg_buildtype = 2 THEN UPDATE u_cus_price SET u_cus_price.cusid = :arg_cusid, u_cus_price.mtrlid = :arg_mtrlid, u_cus_price.price_bj = :arg_fprice * :arg_zqrate, u_cus_price.fprice_bj = :arg_fprice, u_cus_price.zqrate_bj = :arg_zqrate, u_cus_price.sys_changetime = getdate(), u_cus_price.ifcancel = 0 WHERE u_cus_price.cusid = :arg_cusid 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.qty = :arg_qty) AND (u_cus_price.qty1 = :arg_qty1) AND u_cus_price.moneyid = :arg_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络和其它原因,客户销售价表更新'+arg_mtrlcode+'失败'+sqlca.SQLErrText GOTO ext END IF END IF ELSEIF cnt = 0 THEN IF arg_buildtype = 0 THEN INSERT INTO u_cus_price (cusid, mtrlid, price, fprice, zqrate, dscrp, status, woodcode, pcode, moneyid, sys_changetime, qty, qty1) VALUES (:arg_cusid, :arg_mtrlid, :arg_fprice * :arg_zqrate, :arg_fprice, :arg_zqrate, :arg_dscrp, :arg_status, :arg_woodcode, :arg_pcode, :arg_moneyid, getdate(), :arg_qty, :arg_qty1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因,新增客户销售'+arg_mtrlcode+'价格失败,'+sqlca.SQLErrText GOTO ext END IF ELSEIF arg_buildtype = 2 THEN INSERT INTO u_cus_price (cusid, mtrlid, price_bj, fprice_bj, zqrate_bj, dscrp, status, woodcode, pcode, moneyid, sys_changetime, qty, qty1) VALUES (:arg_cusid, :arg_mtrlid, :arg_fprice * :arg_zqrate, :arg_fprice, :arg_zqrate, :arg_dscrp, :arg_status, :arg_woodcode, :arg_pcode, :arg_moneyid, getdate(), :arg_qty, :arg_qty1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因,新增客户销售'+arg_mtrlcode+'价格失败,'+sqlca.SQLErrText GOTO ext END IF END IF 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.status, u_cus_price_mx.woodcode, 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.qty, u_cus_price_mx.qty1 ) VALUES ( :arg_cusid, :arg_mtrlid, getdate(), :publ_operator, :arg_outwareid, :arg_outwarecode, :arg_outdate, :arg_fprice* :arg_zqrate, :arg_fprice, :arg_zqrate, :arg_cost, :arg_status, :arg_woodcode, :arg_pcode, :arg_dscrp, :arg_flag, :arg_printid, :arg_moneyid, :arg_qty, :arg_qty1 ); 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 uof_check_price_saletask (long arg_typeid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, long arg_moneyid, long arg_scid, long arg_quoteid, long arg_quoteprintid, decimal arg_price, decimal arg_qty, ref string arg_msg); Decimal ld_lmsaleprice,ld_rebate String ls_cusname,ls_listname Long ll_pricelistid Int rslt = 1 //,li_flag Long cnt = 0 Long ll_moneyid,ll_moneyid_pricelist s_mtrlcfg_expr s_pz[] Long ll_statusflag Long ll_i String ls_status_zj Decimal ld_price_zj,ld_rebate_zj,obj_price Long ll_row String ls_poexpr,ls_rtn,ls_mtrlcode String ls_price String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Int li_selecttype,li_price_ifpz uo_price_order uo_po uo_po = Create uo_price_order IF Not f_power_ind(492,sys_msg_pow) Or sys_power_issuper THEN rslt = 1 GOTO ext END IF IF uo_option_checkprice_native = -1000 THEN rslt = 0 arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!' GOTO ext END IF //IF uo_option_price_if_status = -1000 THEN // rslt = 0 // arg_msg = '选项:[021]销售价按颜色约束,读取初始默认值失败,操作取消!' // GOTO ext //END IF String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode SELECT selecttype INTO :li_selecttype FROM u_saletype Where typeid = :arg_typeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询销售订单分类信息失败,'+sqlca.SQLErrText GOTO ext END IF SELECT statusflag,mtrlcode,mtrlsectype,zxmtrlmode,usermtrlmode,price_ifpz INTO :ll_statusflag,:ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode,:li_price_ifpz FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF uo_option_checkprice_native = 1 THEN SELECT moneyid INTO :ll_moneyid FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查' rslt = 0 GOTO ext END IF ELSE ll_moneyid = arg_moneyid END IF Dec ld_rebate_cus SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,请检查' rslt = 0 GOTO ext END IF /////// //检查价格指令 datastore ds_price ds_price = uo_po.uof_getorderprice(arg_cusid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode,arg_qty, arg_msg) ll_row = ds_price.RowCount() //////////////////// // IF ll_row = 0 THEN 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 li_selecttype = 2 And ll_pricelistid = 0 THEN rslt = 0 arg_msg = '销售订单分类设为"只能选客户价格表",但当前客户没有指定价格表,请检查' GOTO ext END IF IF arg_quoteid = 0 THEN IF li_selecttype = 1 THEN //只能选择报价历史 SELECT top 1 u_cus_price.fprice_bj,u_cus_price.zqrate_bj INTO :ld_lmsaleprice,:ld_rebate FROM u_cus_price WHERE ( u_cus_price.cusid = :arg_cusid ) AND ( u_cus_price.mtrlid = :arg_mtrlid ) AND ( u_cus_price.status = :arg_status ) AND ( u_cus_price.pcode = :arg_pcode ) AND ( u_cus_price.woodcode = :arg_woodcode ) AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty) AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty)) AND ( u_cus_price.moneyid = :arg_moneyid) Order By sys_changetime Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询产品:"+arg_mtrlcode+" 最新报价失败 " +sqlca.SQLErrText 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 ELSE IF ll_statusflag = 2 And arg_status <> '' THEN //组合配置 ,计算价格 IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_price < obj_price THEN rslt = 0 arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}' GOTO ext END IF ELSE //非组合配置, 查询价格 IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_price < obj_price * ld_rebate THEN rslt = 0 arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}' GOTO ext END IF END IF END IF ELSE SELECT u_quotemx.sumprice_1 INTO :ld_lmsaleprice FROM u_quotemx WHERE scid = :arg_scid AND quoteid = :arg_quoteid And printid = :arg_quoteprintid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品:'+arg_mtrlcode+'报价单报价失败,'+sqlca.SQLErrText 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 END IF ELSE ls_poexpr = ds_price.Object.poexpr[1] ls_price = String(arg_price,'###0.##########') SELECT Top 1 Replace( :ls_poexpr,'目标价',:ls_price) Into :ls_poexpr From u_user; IF Pos(ls_poexpr,'{') > 0 And Pos(ls_poexpr,'}') > 0 THEN ll_pricelistid = Long(Mid(ls_poexpr,Pos(ls_poexpr,'[') + 1,Pos(ls_poexpr,']') - Pos(ls_poexpr,'[') - 1)) IF ll_statusflag = 2 And arg_status <> '' THEN //组合配置 ,计算价格 IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE //非组合配置, 查询价格 IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF obj_price = obj_price * ld_rebate END IF ls_poexpr = Replace(ls_poexpr,Pos(ls_poexpr,'{'),Pos(ls_poexpr,'}') - Pos(ls_poexpr,'{') + 1,String(obj_price,'###0.00########')) END IF datastore dw_price_check dw_price_check = Create datastore dw_price_check.DataObject = 'dw_compute_priceorder' dw_price_check.InsertRow(0) dw_price_check.Modify("compute.expression='"+ls_poexpr+"'") ls_rtn = String(dw_price_check.Object.compute[ll_row]) IF ls_rtn = 'false' THEN rslt = 0 arg_msg = '产品:'+ls_mtrlcode+'销售价格受到价格指令限制,不能通过{'+ls_poexpr+'}' GOTO ext END IF END IF ext: Destroy uo_po RETURN rslt end function public function integer uof_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, decimal arg_qty, ref string arg_msg); Decimal ld_lmsaleprice,ld_rebate String ls_cusname,ls_listname Long ll_pricelistid Int rslt = 1//,li_flag Long cnt = 0 Long ll_moneyid,ll_moneyid_pricelist s_mtrlcfg_expr s_pz[] Long ll_statusflag Long ll_i String ls_status_zj Decimal ld_price_zj,ld_rebate_zj,obj_price Long ll_row String ls_poexpr,ls_rtn,ls_mtrlcode String ls_price String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Int li_price_ifpz uo_price_order uo_po uo_po = Create uo_price_order IF Not f_power_ind(492,sys_msg_pow) Or sys_power_issuper THEN rslt = 1 GOTO ext END IF IF uo_option_checkprice_native = -1000 THEN rslt = 0 arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!' GOTO ext END IF //IF uo_option_price_if_status = -1000 THEN // rslt = 0 // arg_msg = '选项:[021]销售价按颜色约束,读取初始默认值失败,操作取消!' // GOTO ext //END IF String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode SELECT statusflag,mtrlcode,mtrlsectype,zxmtrlmode,usermtrlmode ,price_ifpz INTO :ll_statusflag,:ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode ,:li_price_ifpz FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF uo_option_checkprice_native = 1 THEN SELECT moneyid INTO :ll_moneyid FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查' rslt = 0 GOTO ext END IF ELSE ll_moneyid = arg_moneyid END IF decimal ld_rebate_cus SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,请检查' rslt = 0 GOTO ext END IF /////// //检查价格指令 datastore ds_price ds_price = uo_po.uof_getorderprice(arg_cusid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode,arg_qty, arg_msg) ll_row = ds_price.RowCount() //////////////////// // IF ll_row = 0 THEN //没有价格指令 , 按价格表检查 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_statusflag = 2 And arg_status <> '' THEN //组合配置 ,计算价格 IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_price < obj_price THEN rslt = 0 arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}' GOTO ext END IF // f_checkpz(arg_status,s_pz[]) // arg_pcode = '' // arg_woodcode = '' // obj_price = 0 // FOR ll_i = 1 To UpperBound(s_pz) // ls_status_zj = s_pz[ll_i].cfgname // ld_price_zj = 0 // ld_rebate_zj = 0 // // //取价格表 内容 // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // // obj_price = obj_price + ld_lmsaleprice * ld_rebate * Dec(s_pz[ll_i].qty) // NEXT // IF arg_price < obj_price THEN // rslt = 0 // arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}' // GOTO ext // END IF ELSE //非组合配置, 查询价格 IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_price < obj_price * ld_rebate THEN rslt = 0 arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}' GOTO ext END IF // CHOOSE CASE li_price_ifpz // CASE 0 // arg_status = '' // arg_woodcode = '' // arg_pcode = '' // CASE 1 // arg_pcode = '' // arg_woodcode = '' // CASE 2 // arg_status = '' // arg_pcode = '' // CASE 3 // arg_status = '' // arg_woodcode = '' // CASE 4 // arg_pcode = '' // CASE 5 // arg_status = '' // CASE 6 // arg_woodcode = '' // END CHOOSE // // //取价格表 内容 // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF arg_price < ld_lmsaleprice * ld_rebate THEN // rslt = 0 // arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(ld_lmsaleprice,'#,##0.00##')+'}' // GOTO ext // END IF END IF ELSE //有价格指令, 按指令检测 ls_poexpr = ds_price.Object.poexpr[1] ls_price = String(arg_price,'###0.##########') SELECT Top 1 Replace( :ls_poexpr,'目标价',:ls_price) Into :ls_poexpr From u_user; IF Pos(ls_poexpr,'{') > 0 And Pos(ls_poexpr,'}') > 0 THEN ll_pricelistid = Long(Mid(ls_poexpr,Pos(ls_poexpr,'[') + 1,Pos(ls_poexpr,']') - Pos(ls_poexpr,'[') - 1)) IF ll_statusflag = 2 And arg_status <> '' THEN //组合配置 ,计算价格 IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // f_checkpz(arg_status,s_pz[]) // arg_pcode = '' // arg_woodcode = '' // obj_price = 0 // FOR ll_i = 1 To UpperBound(s_pz) // ls_status_zj = s_pz[ll_i].cfgname // ld_price_zj = 0 // ld_rebate_zj = 0 // // //取价格表 内容 // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // obj_price = obj_price + ld_lmsaleprice * ld_rebate * Dec(s_pz[ll_i].qty) // NEXT ELSE //非组合配置, 查询价格 IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF obj_price = obj_price * ld_rebate // CHOOSE CASE li_price_ifpz // CASE 0 // arg_status = '' // arg_woodcode = '' // arg_pcode = '' // CASE 1 // arg_pcode = '' // arg_woodcode = '' // CASE 2 // arg_status = '' // arg_pcode = '' // CASE 3 // arg_status = '' // arg_woodcode = '' // CASE 4 // arg_pcode = '' // CASE 5 // arg_status = '' // CASE 6 // arg_woodcode = '' // END CHOOSE // // //取价格表 内容 // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // obj_price = ld_lmsaleprice * ld_rebate END IF ls_poexpr = Replace(ls_poexpr,Pos(ls_poexpr,'{'),Pos(ls_poexpr,'}') - Pos(ls_poexpr,'{') + 1,String(obj_price,'###0.00########')) END IF datastore dw_price_check dw_price_check = Create datastore dw_price_check.DataObject = 'dw_compute_priceorder' dw_price_check.InsertRow(0) dw_price_check.Modify("compute.expression='"+ls_poexpr+"'") ls_rtn = String(dw_price_check.Object.compute[ll_row]) IF ls_rtn = 'false' THEN rslt = 0 arg_msg = '产品:'+ls_mtrlcode+'销售价格受到价格指令限制,不能通过{'+ls_poexpr+'}' GOTO ext END IF END IF ext: Destroy uo_po RETURN rslt end function public function integer uof_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, long arg_cusid, ref decimal arg_price, ref decimal arg_zqrate, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg); Int rslt = 1 Long cnt = 0 Long count = 1 Decimal rtn_price,rtn_zqrate s_mtrlcfg_expr s_pz[] DateTime server_time String ls_cusname,ls_listname Long ll_moneyid,ll_moneyid_pricelist Long ll_pricelistid Decimal ld_lmsaleprice,ld_rebate //Int li_flag Long ll_i String ls_status_zj Decimal ld_price_zj,ld_rebate_zj Decimal obj_price Long ll_row String ls_poexpr,ls_rtn,ls_mtrlcode String ls_price,ls_objprice String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Long ll_kind String ls_pricestr Int li_rslt_cmp Decimal ld_rebate_cus Decimal ld_price_cmp uo_price_order uo_po uo_po = Create uo_price_order IF uo_option_checkprice_native = -1000 THEN rslt = 0 arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_saleprice_list_rebate = -1000 THEN rslt = 0 arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!' GOTO ext END IF String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode Long ll_statusflag Int li_price_ifpz SELECT statusflag,mtrlsectype,zxmtrlmode,usermtrlmode,mtrlcode,price_ifpz INTO :ll_statusflag,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode,:ls_mtrlcode,:li_price_ifpz FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF uo_option_checkprice_native = 1 THEN SELECT moneyid INTO :ll_moneyid FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查' rslt = 0 GOTO ext END IF ELSE ll_moneyid = arg_moneyid END IF //价格指令的在单据上再检查,这里不考虑 SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus 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 ll_statusflag = 2 And arg_status <> '' THEN //组合配置 ,计算价格 IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF rtn_price = obj_price rtn_zqrate = ld_rebate ELSE //非组合配置 ,计算价格 IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN rslt = 2 rtn_price = 0.00 rtn_zqrate = 1 GOTO ext END IF rtn_price = obj_price rtn_zqrate = ld_rebate END IF ext: arg_price = rtn_price arg_zqrate = rtn_zqrate Destroy uo_po RETURN rslt end function public function integer uof_getprice_saletask (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, long arg_quoteid, long arg_quoteprintid, integer arg_typeid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg); //产品价格表公式与产品价格策略的限制 //1.产品价格策略已设置限制的配置不能应用于价格表公式; //例如:产品价格策略 选择为 不使用 ; 则价格表公式可以用 配置 配置1, 配置2 设置公式; // 产品价格策略 选择为 配置 ; 则价格表公式不能是用 配置 , 但可以用 配置1, 配置2 设置公式; // 产品价格策略 选择为 配置 + 配置1; 则价格表公式不能是用 配置 或 配置1 , 但可以用 配置2 设置公式; // 产品价格策略 选择为 配置 + 配置1 + 配置3; 则价格表公式不能使用; Int rslt = 1 Long ll_statusflag,li_price_ifpz String ls_mtrlcode String ls_cusname Long ll_pricelistid,ll_pricelistid_arr[],ll_mxbt = 0,ll_pricelistid_tmp Decimal ld_lmsaleprice,ld_rebate,obj_price,ld_rebate_arr[],ld_rebate_tmp Long ll_i String ls_status_zj //Int li_flag String ls_listname Decimal ld_rebate_cus Decimal rtn_price,rtn_zqrate Int li_selecttype, li_hispriceflag Int li_suc = 0 Int li_ifpackpro,li_ifpricepack Long ll_moneyid_native Decimal lde_difprice s_mtrlcfg_expr s_pz[] IF uo_option_saleprice_list_rebate = -1000 THEN rslt = 0 arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_price_rmb = -1000 THEN rslt = 0 arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!' GOTO ext END IF String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode //yyx2012-12-11 IF uo_option_price_rmb = 1 THEN SELECT moneyid INTO :ll_moneyid_native From cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币种失败,请检查币种是否设置了本位币' rslt = 0 GOTO ext END IF arg_moneyid = ll_moneyid_native END IF // IF f_get_selecttype(arg_typeid,arg_cusid,li_selecttype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT hispriceflag INTO :li_hispriceflag FROM u_saletype Where typeid = :arg_typeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询销售订单分类选择限制属性失败,'+sqlca.SQLErrText GOTO ext END IF SELECT statusflag,mtrlcode,price_ifpz,ifpackpro,ifpricepack INTO :ll_statusflag,:ls_mtrlcode,:li_price_ifpz,:li_ifpackpro,:li_ifpricepack FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,客户资料" GOTO ext END IF ll_mxbt = 1 ll_pricelistid_arr[ll_mxbt] = ll_pricelistid ld_rebate_arr[ll_mxbt] = ld_rebate_cus DECLARE cur_listmx CURSOR FOR SELECT pricelistid,rebate FROM u_cus_pricelist_mx WHERE cusid = :arg_cusid Order By printid; OPEN cur_listmx; FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ ll_pricelistid_arr[ll_mxbt] = ll_pricelistid_tmp ld_rebate_arr[ll_mxbt] = ld_rebate_tmp FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp; LOOP CLOSE cur_listmx; IF li_selecttype = 2 And ll_pricelistid = 0 THEN rslt = 0 arg_msg = '选择限制为"只能选客户价格表",但当前客户没有指定价格表,请检查' GOTO ext END IF IF arg_quoteid > 0 THEN //选择报价单 SELECT u_quotemx.sumprice_1, u_quotemx.rebate INTO :ld_lmsaleprice, :ld_rebate FROM u_quotemx WHERE scid = :arg_scid AND quoteid = :arg_quoteid And printid = :arg_quoteprintid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品:'+ls_mtrlcode+'报价单报价失败,'+sqlca.SQLErrText GOTO ext END IF rtn_price = ld_lmsaleprice rtn_zqrate = ld_rebate ELSE IF li_selecttype = 1 THEN //只能选择报价历史 SELECT top 1 u_cus_price.fprice_bj,u_cus_price.zqrate_bj INTO :ld_lmsaleprice,:ld_rebate FROM u_cus_price WHERE ( u_cus_price.cusid = :arg_cusid ) AND ( u_cus_price.mtrlid = :arg_mtrlid ) AND ( u_cus_price.status = :arg_status ) AND ( u_cus_price.pcode = :arg_pcode ) AND ( u_cus_price.woodcode = :arg_woodcode ) AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty) AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty)) AND ( u_cus_price.moneyid = :arg_moneyid) AND ( u_cus_price.ifcancel = 0 ) Order By sys_changetime Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询产品:"+ls_mtrlcode+" 最新报价失败 " +sqlca.SQLErrText GOTO ext END IF rtn_price = ld_lmsaleprice rtn_zqrate = ld_rebate ELSE If (li_selecttype = 0 Or li_selecttype = 2) And li_hispriceflag = 1 THEN //取客户最新销售价 SELECT top 1 u_cus_price.fprice,u_cus_price.zqrate INTO :ld_lmsaleprice,:ld_rebate FROM u_cus_price WHERE ( u_cus_price.cusid = :arg_cusid ) AND ( u_cus_price.mtrlid = :arg_mtrlid ) AND ( u_cus_price.status = :arg_status ) AND ( u_cus_price.pcode = :arg_pcode ) AND ( u_cus_price.woodcode = :arg_woodcode ) AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty) AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty)) AND ( u_cus_price.moneyid = :arg_moneyid) Order By sys_changetime Desc; IF sqlca.SQLCode <> 0 THEN ld_lmsaleprice = 0 ld_rebate = 0 END IF rtn_price = ld_lmsaleprice rtn_zqrate = ld_rebate ELSE //选价格表: 1.组合配置产品按组合计算; 2.包件产品按子件计算; 3.其他常规产品直接取价 FOR ll_i = 1 To ll_mxbt //循环所有该客户有效价格表 IF ll_statusflag = 2 And arg_status <> '' And li_ifpricepack = 0 THEN //组合配置且非整套计算 //组合配置 ,计算价格 //如果不按整套,分开子件查价格 //如果价格按整套,则用整个配置信息查价格 IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF ELSEIF li_ifpackpro <> 0 And li_ifpricepack = 0 THEN //包件产品且非整套计算 //2.包件产品,按清单拆分, 取子件价格汇总作为包件价格 IF uf_cmpl_price_pack(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF ELSE //整套计算 or 其他常规取价 //1.整套计算单价的 //2.非组合配置的 //3.非包件产品的 IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF END IF NEXT //if li_suc = 1 取价成功, 统计部件选配自动换料计算差价 IF li_suc = 1 THEN IF uof_get_mtrl_3pz_difprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, lde_difprice, arg_msg) = 0 THEN lde_difprice = 0 END IF rtn_price = rtn_price + lde_difprice // rtn_zqrate = ld_rebate // li_suc = 1 END IF IF li_suc = 0 THEN rslt = 0 GOTO ext END IF END IF END IF END IF ext: arg_price = rtn_price arg_rebate = rtn_zqrate RETURN rslt end function public function integer uof_get_pricelistid (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_moneyid, ref long arg_pricelistid, ref string arg_msg); //取可用价格表,或检查价格表币种 Int rslt = 1 Long ll_moneyid_pricelist IF arg_pricelistid = 0 THEN SELECT u_sale_price_list.pricelistid INTO :arg_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.saleqty = 0 OR u_sale_price_mx.saleqty <= :arg_qty) AND (u_sale_price_mx.saleqty1 = 0 OR u_sale_price_mx.saleqty1 >= :arg_qty)) AND u_sale_price_list.moneyid = :arg_moneyid And u_sale_price_list.dftflag = 1; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "产品:"+arg_mtrlcode+",配置:"+arg_status+",标准价格表未设定" GOTO ext ELSEIF sqlca.SQLNRows > 1 THEN rslt = 0 arg_msg = "产品:"+arg_mtrlcode+",配置:"+arg_status+",有多于两个标准价格表" GOTO ext END IF ELSE rslt = 0 arg_msg = "查询产品:"+arg_mtrlcode+",配置:"+arg_status+",标准价格表操作失败" GOTO ext END IF ELSE //检查价格表和对应币种 IF uof_chk_pricelistid(arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: RETURN rslt end function Public Function Integer uof_chk_pricelistid (Long arg_moneyid, Ref Long arg_pricelistid, Ref String arg_msg); //检查价格表和币种是否对应 Int rslt = 1 Long ll_moneyid_pricelist IF arg_pricelistid > 0 THEN SELECT moneyid INTO :ll_moneyid_pricelist 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 END IF ext: RETURN rslt END Function Public Function Integer uof_del_cusprice_auto (Long arg_cusid, Long arg_outwareid, Long arg_printid, Long arg_mtrlid, String arg_status, String arg_woodcode, String arg_pcode, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, 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 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 SELECT count(*) INTO :cnt 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.outwareid = :arg_outwareid AND u_cus_price_MX.printid = :arg_printid AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_MX.buildtype = :arg_buildtype AND u_cus_price_MX.moneyid = :arg_moneyid AND u_cus_price_MX.qty = :arg_qty And u_cus_price_mx.qty1 = :arg_qty1; 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 u_cus_price_MX.cusid = :arg_cusid AND u_cus_price_MX.mtrlid = :arg_mtrlid AND u_cus_price_MX.outwareid = :arg_outwareid AND u_cus_price_MX.printid = :arg_printid AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_mx.buildtype = :arg_buildtype AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_MX.qty = :arg_qty AND u_cus_price_MX.qty1 = :arg_qty1 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 u_cus_price_MX.cusid = :arg_cusid AND u_cus_price_MX.mtrlid = :arg_mtrlid AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_MX.buildtype = :arg_buildtype AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_MX.Opdate > :ld_opdate AND u_cus_price_MX.qty = :arg_qty And u_cus_price_mx.qty1 = :arg_qty1; 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 u_cus_price_MX.cusid = :arg_cusid AND u_cus_price_MX.mtrlid = :arg_mtrlid AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_MX.buildtype = :arg_buildtype AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_MX.Opdate < :ld_opdate AND u_cus_price_MX.qty = :arg_qty And u_cus_price_mx.qty1 = :arg_qty1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN ld_fprice = 0 ld_zqrate = 1 ld_price = 0 ld_sys_changetime = DateTime(Today(),Now()) 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 u_cus_price_MX.cusid = :arg_cusid AND u_cus_price_MX.mtrlid = :arg_mtrlid AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_MX.buildtype = :arg_buildtype AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_MX.Opdate < :ld_opdate AND u_cus_price_MX.qty = :arg_qty AND u_cus_price_MX.qty1 = :arg_qty1 Order By u_cus_price_mx.opdate Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF END IF IF arg_buildtype = 0 THEN UPDATE u_cus_price SET fprice = :ld_fprice , zqrate = :ld_zqrate, price = :ld_price, sys_changetime = :ld_sys_changetime WHERE u_cus_price.cusid = :arg_cusid 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.moneyid = :arg_moneyid AND u_cus_price.qty = :arg_qty And u_cus_price.qty1 = :arg_qty1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最新销售价失败'+sqlca.SQLErrText GOTO ext END IF ELSEIF arg_buildtype = 2 THEN UPDATE u_cus_price SET fprice_bj = :ld_fprice , zqrate_bj = :ld_zqrate, price_bj = :ld_price, sys_changetime = :ld_sys_changetime WHERE u_cus_price.cusid = :arg_cusid 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.moneyid = :arg_moneyid AND u_cus_price.qty = :arg_qty And u_cus_price.qty1 = :arg_qty1; 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 u_cus_price_MX.cusid = :arg_cusid AND u_cus_price_MX.mtrlid = :arg_mtrlid AND u_cus_price_MX.outwareid = :arg_outwareid AND u_cus_price_MX.printid = :arg_printid AND u_cus_price_MX.buildtype = :arg_buildtype AND u_cus_price_MX.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_MX.moneyid = :arg_moneyid AND u_cus_price_MX.qty = :arg_qty And u_cus_price_mx.qty1 = :arg_qty1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询失败'+sqlca.SQLErrText GOTO ext END IF SELECT count(*) INTO :ll_cnt 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.status = :arg_status AND u_cus_price_MX.woodcode = :arg_woodcode AND u_cus_price_MX.pcode = :arg_pcode AND u_cus_price_mx.moneyid = :arg_moneyid AND u_cus_price_MX.Opdate < :ld_opdate AND u_cus_price_MX.qty = :arg_qty And u_cus_price_mx.qty1 = :arg_qty1; 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 u_cus_price.cusid = :arg_cusid 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.moneyid = :arg_moneyid AND u_cus_price.qty = :arg_qty And u_cus_price.qty1 = :arg_qty1; 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_cmpl_price_zhpz (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算组合配置产品的价格 //按status 拆分组合, 按各个组件的价格总和得出组合产品的价格 //取价格表对应产品价格 Int rslt = 1 long ll_i dec obj_price string ls_status_zj, ls_listname dec lde_lmsaleprice, lde_rebate int li_flag s_mtrlcfg_expr s_pz[] String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode int li_price_ifpz = 1 //类似于 price_ifpz = 1 f_checkpz(arg_status,s_pz[]) arg_pcode = '' arg_woodcode = '' //全局用,判断是否在计算组合配置单价 if_cmpl_zhpz_pf = true s_zhpz = s_pz obj_price = 0 FOR ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname //取价格表 价格, 有公式的按公式计算价格 IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty * Dec(s_pz[ll_i].qty), arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_saleprice_list_rebate = 1 THEN lde_rebate = arg_rebate_cus END IF obj_price = obj_price + lde_lmsaleprice * lde_rebate * Dec(s_pz[ll_i].qty) NEXT rtn_price = obj_price rtn_zqrate = 1 ext: RETURN rslt end function public function integer uf_cmpl_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算非组合配置 或 组合配置但没有设置组合的 产品的价格 //根据单价限制策略, 按设置的配置查找价格 //取价格表对应产品价格 Int rslt = 1 Dec obj_price String ls_status_zj, ls_listname Dec lde_lmsaleprice, lde_rebate Int li_flag String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode CHOOSE CASE arg_price_ifpz CASE 0 arg_status = '' arg_woodcode = '' arg_pcode = '' CASE 1 arg_pcode = '' arg_woodcode = '' CASE 2 arg_status = '' arg_pcode = '' CASE 3 arg_status = '' arg_woodcode = '' CASE 4 arg_pcode = '' CASE 5 arg_status = '' CASE 6 arg_woodcode = '' END CHOOSE //取价格表 公式内容 IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty, arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_saleprice_list_rebate = 1 THEN lde_rebate = arg_rebate_cus END IF rtn_price = lde_lmsaleprice rtn_zqrate = lde_rebate ext: RETURN rslt end function public function integer uof_get_pricelistinfo (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg); //取价格表对应产品价格 //产品价格表公式与产品价格策略的限制 Int rslt = 1 Long ll_moneyid_pricelist String ls_pricestr,ls_rebatestr Int li_rslt_cmp Decimal ld_price_cmp,ld_rebate_cmp Int li_price_ifpz String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode li_price_ifpz = 0 SELECT u_sale_price_list.listname INTO :arg_listname FROM u_sale_price_list Where pricelistid = :arg_pricelistid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询价格表信息失败,"+sqlca.SQLErrText GOTO ext END IF SELECT u_sale_price_mx.price, u_sale_price_mx.flag, u_sale_price_mx.rebate, u_sale_price_mx.pricestr, u_sale_price_mx.rebatestr INTO :arg_lmsaleprice, :arg_flag, :arg_rebate, :ls_pricestr, :ls_rebatestr 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.woodcode = :arg_woodcode AND u_sale_price_mx.pcode = :arg_pcode AND ( (u_sale_price_mx.saleqty = 0 OR u_sale_price_mx.saleqty <= :arg_qty) AND (u_sale_price_mx.saleqty1 = 0 OR u_sale_price_mx.saleqty1 >= :arg_qty)) And u_sale_price_mx.pricelistid = :arg_pricelistid; IF sqlca.SQLCode <> 0 THEN rslt = 0 //arg_msg = '查询产品:'+arg_mtrlcode+',配置:'+arg_status+',配置1:'+arg_woodcode+',配置2:'+arg_pcode+',销售限价失败,可能该客户的销售限价还没有设定,请检查' if if_chk_mxlist then arg_msg = '客户价格表未找到' else arg_msg = '价格表['+arg_listname+']未找到' end if arg_msg += '产品:'+arg_mtrlcode IF arg_status <> "" THEN arg_msg += ',配置:'+arg_status END IF IF arg_woodcode <> "" THEN arg_msg += ',配置1:'+arg_woodcode END IF IF arg_pcode <> "" THEN arg_msg += ',配置2:'+arg_pcode END IF arg_msg += '的相关信息' GOTO ext END IF IF arg_flag = 0 THEN rslt = 0 if if_chk_mxlist then arg_msg = '客户价格表对应' else arg_msg = '价格表['+arg_listname+']对应' end if arg_msg += '产品:'+arg_mtrlcode IF arg_status <> "" THEN arg_msg += ',配置:'+arg_status END IF IF arg_woodcode <> "" THEN arg_msg += ',配置1:'+arg_woodcode END IF IF arg_pcode <> "" THEN arg_msg += ',配置2:'+arg_pcode END IF arg_msg += '未审核' GOTO ext END IF IF Trim(ls_pricestr) <> '' THEN //li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status,arg_woodcode,arg_pcode,ld_price_cmp) li_rslt_cmp = uof_pricestr_cmp(ls_pricestr, arg_status_ori, arg_woodcode_ori, arg_pcode_ori,ld_price_cmp) IF li_rslt_cmp = 1 THEN arg_lmsaleprice = ld_price_cmp ELSEIF li_rslt_cmp = 0 THEN arg_lmsaleprice = 0 END IF END IF IF Trim(ls_rebatestr) <> '' THEN // li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status,arg_woodcode,arg_pcode,ld_rebate_cmp) li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status_ori, arg_woodcode_ori, arg_pcode_ori , ld_rebate_cmp) IF li_rslt_cmp = 1 THEN arg_rebate = ld_rebate_cmp ELSEIF li_rslt_cmp = 0 THEN arg_rebate = 1 END IF END IF ext: RETURN rslt end function public function integer uof_get_pricelist_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, long arg_moneyid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg);//要求传人的3个配置是 原配置 //取价格表对应产品价格 Int rslt = 1 //取价格表 IF arg_pricelistid > 0 THEN IF uof_chk_pricelistid( arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uof_get_pricelistid(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //取价格表 公式内容 IF uof_get_pricelistinfo(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_status_ori, arg_woodcode_ori, arg_pcode_ori, arg_qty, arg_pricelistid, arg_lmsaleprice, arg_flag, arg_listname, arg_rebate, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uf_cmpl_price_pack (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算包件产品的价格 Int rslt = 1 String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] Decimal ld_Sonscale[] Long ll_SonMtrlid[] string ls_mtrlcode[] Long it_mxt = 1,ll_j String ls_status_find,ls_woodcode_find,ls_pcode_find String ls_status_zj, ls_listname Decimal lde_lmsaleprice, lde_rebate,obj_price Int li_flag String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode Declare cur_pf Cursor For Select u_PrdPF.SonMtrlid, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype, u_prdpf.Sonscale, u_mtrldef.mtrlcode FROM u_PrdPF INNER JOIN u_mtrl_pf ON u_PrdPF.mtrlid = u_mtrl_pf.Mtrlid AND u_PrdPF.pfcode = u_mtrl_pf.pfcode INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid where ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_mtrl_pf.ifdft = 1 ); Open cur_pf; Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],:ls_mtrlcode[it_mxt]; Do While sqlca.SQLCode = 0 it_mxt++ Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt], :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],:ls_mtrlcode[it_mxt]; Loop it_mxt = it_mxt - 1 Close cur_pf; For ll_j = 1 To it_mxt If li_ifover[ll_j] = 1 Then Choose Case li_dipztype[ll_j] Case 0 ls_status_find = arg_status ls_woodcode_find = '' ls_pcode_find = '' Case 1 ls_status_find = '' ls_woodcode_find = arg_woodcode ls_pcode_find = '' Case 2 ls_status_find = '' ls_woodcode_find = '' ls_pcode_find = arg_pcode Case 3 ls_status_find = arg_status ls_woodcode_find = arg_woodcode ls_pcode_find = '' Case 4 ls_status_find = '' ls_woodcode_find = arg_woodcode ls_pcode_find = arg_pcode Case 5 ls_status_find = arg_status ls_woodcode_find = '' ls_pcode_find = arg_pcode Case 6 ls_status_find = arg_status ls_woodcode_find = arg_woodcode ls_pcode_find = arg_pcode End Choose Else ls_status_find = ls_pf_status[ll_j] ls_woodcode_find = ls_pf_woodcode[ll_j] ls_pcode_find = ls_pf_pcode[ll_j] End If ls_status_find = Trim(ls_status_find) ls_woodcode_find = Trim(ls_woodcode_find) ls_pcode_find = Trim(ls_pcode_find) If uof_get_pricelist_price(ll_SonMtrlid[ll_j] ,ls_mtrlcode[ll_j], ls_status_find, ls_woodcode_find, ls_pcode_find, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty * Dec(ld_Sonscale[ll_j]), arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 Then rslt = 0 Goto ext End If IF uo_option_saleprice_list_rebate = 1 THEN lde_rebate = arg_rebate_cus END IF obj_price = obj_price + lde_lmsaleprice * lde_rebate * ld_Sonscale[ll_j] Next rtn_price = obj_price rtn_zqrate = 1 ext: Return rslt end function public function integer uof_get_mtrl_bjpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, integer arg_mtrlpztype, ref string arg_msg);//arg_pztype 属于哪个配置 0 - 配置status; 1- 配置1 woodcode; 2-配置2 pcode //arg_type 配置类型,哪个部件配置类型 Int rslt = 1 Long ll_row String ls_pzcode, ls_pzname Int li_inputtype Long ll_pzid Int li_usechflag, li_secflag String ls_contfigtypename Decimal lde_price //检查分类是否启用换料,是否财审 SELECT usechflag, secflag, contfigtypename INTO :li_usechflag, :li_secflag, :ls_contfigtypename FROM u_configure_type Where contfigtypeid = :arg_type; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询部件选配分类信息失败,"+sqlca.SQLErrText GOTO ext END IF IF li_usechflag = 0 THEN RETURN 1 IF li_secflag = 0 THEN //要换但未审 rslt = 0 arg_msg = "部件选配分类:"+ls_contfigtypename+" 还未财审" GOTO ext END IF DECLARE cur_pz CURSOR FOR SELECT u_configure_code.pzid, u_configure_code.pzcode, u_configure_code.name, inputtype FROM u_configure_code Where u_configure_code.typeid = :arg_type; OPEN cur_pz; FETCH cur_pz Into :ll_pzid,:ls_pzcode,:ls_pzname, :li_inputtype; DO WHILE sqlca.SQLCode = 0 IF li_inputtype = 0 And ll_pzid > 0 THEN //只有选择类才能自动换 ll_row = ds.InsertRow(0) ds.Object.pzid[ll_row] = ll_pzid ds.Object.pzcode[ll_row] = ls_pzcode ds.Object.Name[ll_row] = ls_pzname ds.Object.inputtype[ll_row] = li_inputtype ds.Object.pztype[ll_row] = arg_pztype END IF FETCH cur_pz Into :ll_pzid,:ls_pzcode,:ls_pzname, :li_inputtype; LOOP CLOSE cur_pz; Long i, ll_start, ll_i, ll_j String ls_name[], ls_namemx[] Long ll_printid //arg_col_value IF Right(arg_col_value,1) <> "|" THEN arg_col_value += "|" END IF i = 0 ll_start = Pos(arg_col_value, "|") DO WHILE ll_start > 0 And arg_col_value <> "|" i++ ls_name[i] = Left(arg_col_value, Pos(arg_col_value,":") - 1) ls_namemx[i] = Left(arg_col_value, ll_start - 1) ls_namemx[i] = Mid(ls_namemx[i],Pos(ls_namemx[i],':') + 1) arg_col_value = Mid(arg_col_value, ll_start + 1) ll_start = Pos(arg_col_value, "|") LOOP FOR ll_i = 1 To ds.RowCount() ll_pzid = ds.Object.pzid[ll_i] IF UpperBound(ls_namemx) < i THEN EXIT FOR ll_j = 1 To i IF ds.Object.Name[ll_i] = ls_name[ll_j] THEN ll_pzid = ds.Object.pzid[ll_i] SELECT printid, price INTO :ll_printid, :lde_price FROM u_configure_codemx WHERE namemx = :ls_namemx[ll_j] And pzid = :ll_pzid; IF sqlca.SQLCode <> 0 THEN ll_printid = 0 lde_price = 0 END IF ds.Object.namemx[ll_i] = ls_namemx[ll_j] ds.Object.printid[ll_i] = ll_printid ds.Object.price[ll_i] = lde_price GOTO _next END IF NEXT _next: NEXT //arg_col_value_dft IF Right(arg_col_value_dft,1) <> "|" THEN arg_col_value_dft += "|" END IF i = 0 ll_start = Pos(arg_col_value_dft, "|") DO WHILE ll_start > 0 And arg_col_value_dft <> "|" i++ ls_name[i] = Left(arg_col_value_dft, Pos(arg_col_value_dft,":") - 1) ls_namemx[i] = Left(arg_col_value_dft, ll_start - 1) ls_namemx[i] = Mid(ls_namemx[i],Pos(ls_namemx[i],':') + 1) arg_col_value_dft = Mid(arg_col_value_dft, ll_start + 1) ll_start = Pos(arg_col_value_dft, "|") LOOP FOR ll_i = 1 To ds.RowCount() ll_pzid = ds.Object.pzid[ll_i] IF UpperBound(ls_namemx) < i THEN EXIT FOR ll_j = 1 To i IF ds.Object.Name[ll_i] = ls_name[ll_j] THEN ll_pzid = ds.Object.pzid[ll_i] SELECT printid, price INTO :ll_printid, :lde_price FROM u_configure_codemx WHERE namemx = :ls_namemx[ll_j] And pzid = :ll_pzid; IF sqlca.SQLCode <> 0 THEN ll_printid = 0 lde_price = 0 END IF ds.Object.namemx_ori[ll_i] = ls_namemx[ll_j] ds.Object.printid_ori[ll_i] = ll_printid ds.Object.price_ori[ll_i] = lde_price GOTO _next1 END IF NEXT _next1: NEXT //筛选一遍, 将相同的删除; 确定自动换料类型kind; 0 - 换料; 1 - 减料; 2 - 增料 String ls_namemx_ori, ls_namemx_new ll_row = ds.RowCount() FOR ll_i = ll_row To 1 Step -1 IF ds.Object.pzid[ll_i] = 0 THEN ds.DeleteRow(ll_i) CONTINUE END IF IF ds.Object.pztype[ll_i] = arg_pztype THEN ls_namemx_ori = ds.Object.namemx_ori[ll_i] ls_namemx_new = ds.Object.namemx[ll_i] IF arg_mtrlpztype = 4 THEN IF ds.Object.namemx_ori[ll_i] = ds.Object.namemx[ll_i] THEN ds.DeleteRow(ll_i) CONTINUE END IF ELSEIF arg_mtrlpztype = 5 THEN IF ds.Object.namemx_ori[ll_i] = ds.Object.namemx[ll_i] Or ds.Object.namemx[ll_i] = '' THEN ds.DeleteRow(ll_i) CONTINUE END IF END IF //以下的就是namemx_ori <> namemxi IF ds.Object.namemx_ori[ll_i] = "" And ds.Object.namemx[ll_i] <> "" THEN //增料 ds.Object.Kind[ll_i] = 2 ELSEIF ds.Object.namemx_ori[ll_i] <> "" And ds.Object.namemx[ll_i] <> "" THEN //替换 ds.Object.Kind[ll_i] = 0 ELSEIF ds.Object.namemx_ori[ll_i] <> "" And ds.Object.namemx[ll_i] = "" THEN //减料 ds.Object.Kind[ll_i] = 1 END IF END IF NEXT //如果系组合配置的, 重新刷一次差价 IF if_cmpl_zhpz_pf THEN Decimal lde_addprice, lde_price_ori Long ll_printid_ori String ls_mxpzname //ll_row = ds.RowCount() FOR ll_i = 1 To ds.RowCount() IF ds.Object.pztype[ll_i] = arg_pztype THEN ll_pzid = ds.Object.pzid[ll_i] ll_printid = ds.Object.printid[ll_i] ll_printid_ori = ds.Object.printid_ori[ll_i] lde_price = 0 lde_price_ori = 0 FOR ll_j = 1 To UpperBound(s_zhpz) ls_mxpzname = s_zhpz[ll_j].cfgname SELECT price INTO :lde_addprice FROM u_configure_codemx_pz WHERE pzid = :ll_pzid AND printid = :ll_printid And Name = :ls_mxpzname; IF sqlca.SQLCode <> 0 THEN lde_addprice = 0 END IF IF IsNull(lde_addprice) THEN lde_addprice = 0 lde_price += lde_addprice * Dec(s_zhpz[ll_j].qty) SELECT price INTO :lde_addprice FROM u_configure_codemx_pz WHERE pzid = :ll_pzid AND printid = :ll_printid_ori And Name = :ls_mxpzname; IF sqlca.SQLCode <> 0 THEN lde_addprice = 0 END IF IF IsNull(lde_addprice) THEN lde_addprice = 0 lde_price_ori += lde_addprice * Dec(s_zhpz[ll_j].qty) NEXT ds.Object.price[ll_i] = lde_price ds.Object.price_ori[ll_i] = lde_price_ori END IF NEXT END IF ext: RETURN rslt end function public function integer uof_get_mtrl_ygpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, ref string arg_msg);IF arg_col_value = arg_col_value_dft THEN RETURN 1 //不需要换的跳过 Int rslt = 1 Long ll_row String ls_pzcode, ls_pzname Int li_inputtype Int li_usechflag, li_flag String ls_typename decimal lde_price, lde_price_ori ls_pzcode = "[严格选择]" //检查分类是否启用换料,是否技审 SELECT usechflag, flag, typename INTO :li_usechflag, :li_flag, :ls_typename FROM u_pztype_def Where typeid = :arg_type; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询严格选择配置分类信息失败,"+sqlca.SQLErrText GOTO ext END IF IF li_usechflag = 0 THEN RETURN 1 IF li_flag = 0 THEN //要换但未审 rslt = 0 arg_msg = "严格选择配置分类:"+ls_typename+" 还未审核" GOTO ext END IF SELECT price into :lde_price FROM u_pztype_mx where (typeid = :arg_type) and (dscrp = :arg_col_value); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询严格选择配置分类信息新差价失败,"+sqlca.SQLErrText GOTO ext END IF SELECT price into :lde_price_ori FROM u_pztype_mx where (typeid = :arg_type) and (dscrp = :arg_col_value_dft); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询严格选择配置分类信息原差价失败,"+sqlca.SQLErrText GOTO ext END IF ll_row = ds.InsertRow(0) ds.Object.pzid[ll_row] = arg_type ds.Object.pzcode[ll_row] = ls_pzcode ds.Object.Name[ll_row] = ls_typename ds.Object.namemx[ll_row] = arg_col_value ds.Object.namemx_ori[ll_row] = arg_col_value_dft ds.Object.inputtype[ll_row] = li_inputtype ds.Object.pztype[ll_row] = arg_pztype ds.Object.price[ll_row] = lde_price ds.Object.price_ori[ll_row] = lde_price_ori //以下的就是namemx_ori <> namemxi IF ds.Object.namemx_ori[ll_row] = "" And ds.Object.namemx[ll_row] <> "" THEN //增料 ds.Object.Kind[ll_row] = 2 ELSEIF ds.Object.namemx_ori[ll_row] <> "" And ds.Object.namemx[ll_row] <> "" THEN //替换 ds.Object.Kind[ll_row] = 0 ELSEIF ds.Object.namemx_ori[ll_row] <> "" And ds.Object.namemx[ll_row] = "" THEN //减料 ds.Object.Kind[ll_row] = 1 END IF ext: RETURN rslt end function public function integer uof_get_mtrl_3pz_difprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_difprice, ref string arg_msg);//1.只查询支持换料的行, 计算换料差价, sum(原配置价 - 新配置价) //datastore ds_pzmx ds_pzmx = Create datastore ds_pzmx.DataObject = 'dw_configure_pz_compare' Int rslt = 1 Long ll_row Int li_statusflag,li_woodcodeflag,li_pcodeflag Long ll_statustype, ll_woodcodetype, ll_pcodetype String ls_status_config, ls_woodcode_config, ls_pcode_config SELECT statusflag, statustype, woodcodeflag, woodcodetype, pcodeflag, pcodetype, status_config, woodcode_config, pcode_config INTO :li_statusflag,:ll_statustype,:li_woodcodeflag,:ll_woodcodetype,:li_pcodeflag,:ll_pcodetype, :ls_status_config, :ls_woodcode_config, :ls_pcode_config FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料失败,'+sqlca.SQLErrText GOTO ext END IF //status IF li_statusflag = 1 THEN IF uof_get_mtrl_ygpz(ds_pzmx, 0, ll_statustype, ls_status_config, arg_status, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成严格选择配置换料列表失败,"+arg_msg GOTO ext END IF END IF IF li_statusflag = 4 Or li_statusflag = 5 THEN IF uof_get_mtrl_bjpz(ds_pzmx, 0, ll_statustype, ls_status_config, arg_status, li_statusflag, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成部件选配配置换料列表失败,"+arg_msg GOTO ext END IF END IF //woodcode IF li_woodcodeflag = 1 THEN IF uof_get_mtrl_ygpz(ds_pzmx, 1, ll_woodcodetype, ls_woodcode_config, arg_woodcode, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成严格选择配置1换料列表失败,"+arg_msg GOTO ext END IF END IF IF li_woodcodeflag = 4 Or li_woodcodeflag = 5 THEN IF uof_get_mtrl_bjpz(ds_pzmx, 1, ll_woodcodetype, ls_woodcode_config, arg_woodcode, li_woodcodeflag, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成部件选配配置1换料列表失败,"+arg_msg GOTO ext END IF END IF //pcode IF li_pcodeflag = 1 THEN IF uof_get_mtrl_ygpz(ds_pzmx, 2, ll_pcodetype, ls_pcode_config, arg_pcode, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成严格选择配置2换料列表失败,"+arg_msg GOTO ext END IF END IF IF li_pcodeflag = 4 Or li_pcodeflag = 5 THEN IF uof_get_mtrl_bjpz(ds_pzmx, 2, ll_pcodetype, ls_pcode_config, arg_pcode, li_pcodeflag, arg_msg) = 0 THEN rslt = 0 arg_msg = "生成部件选配配置2换料列表失败,"+arg_msg GOTO ext END IF END IF arg_difprice = 0 FOR ll_row = 1 To ds_pzmx.RowCount() arg_difprice += ds_pzmx.Object.price[ll_row] - ds_pzmx.Object.price_ori[ll_row] NEXT ext: destroy ds_pzmx IF rslt = 0 THEN arg_difprice = 0 END IF RETURN rslt end function public function integer uof_getprice_quote (long arg_moneyid, long arg_pricelistid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg); //产品价格表公式与产品价格策略的限制 //1.产品价格策略已设置限制的配置不能应用于价格表公式; //例如:产品价格策略 选择为 不使用 ; 则价格表公式可以用 配置 配置1, 配置2 设置公式; // 产品价格策略 选择为 配置 ; 则价格表公式不能是用 配置 , 但可以用 配置1, 配置2 设置公式; // 产品价格策略 选择为 配置 + 配置1; 则价格表公式不能是用 配置 或 配置1 , 但可以用 配置2 设置公式; // 产品价格策略 选择为 配置 + 配置1 + 配置3; 则价格表公式不能使用; Int rslt = 1 Long ll_statusflag,li_price_ifpz String ls_mtrlcode String ls_cusname Long ll_pricelistid,ll_pricelistid_arr[],ll_mxbt = 0,ll_pricelistid_tmp Decimal ld_lmsaleprice,ld_rebate,obj_price,ld_rebate_arr[],ld_rebate_tmp Long ll_i String ls_status_zj //Int li_flag String ls_listname Decimal ld_rebate_cus Decimal rtn_price,rtn_zqrate //Int li_selecttype Int li_suc = 0 Int li_ifpackpro,li_ifpricepack Long ll_moneyid_native Decimal lde_difprice s_mtrlcfg_expr s_pz[] IF uo_option_saleprice_list_rebate = -1000 THEN rslt = 0 arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_price_rmb = -1000 THEN rslt = 0 arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!' GOTO ext END IF String ls_status_ori,ls_woodcode_ori,ls_pcode_ori ls_status_ori = arg_status ls_woodcode_ori = arg_woodcode ls_pcode_ori = arg_pcode //yyx2012-12-11 IF uo_option_price_rmb = 1 THEN SELECT moneyid INTO :ll_moneyid_native From cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币种失败,请检查币种是否设置了本位币' rslt = 0 GOTO ext END IF arg_moneyid = ll_moneyid_native END IF //IF f_get_selecttype(arg_typeid,arg_cusid,li_selecttype,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF SELECT statusflag,mtrlcode,price_ifpz,ifpackpro,ifpricepack INTO :ll_statusflag,:ls_mtrlcode,:li_price_ifpz,:li_ifpackpro,:li_ifpricepack FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,客户资料" GOTO ext END IF IF arg_pricelistid > 0 THEN ll_mxbt = 1 ll_pricelistid_arr[ll_mxbt] = arg_pricelistid ld_rebate_arr[ll_mxbt] = ld_rebate_cus END IF IF if_chk_mxlist THEN //查客户价格表的,读默认的 DECLARE cur_listmx CURSOR FOR SELECT pricelistid,rebate FROM u_cus_pricelist_mx WHERE cusid = :arg_cusid Order By printid; OPEN cur_listmx; FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ ll_pricelistid_arr[ll_mxbt] = ll_pricelistid_tmp ld_rebate_arr[ll_mxbt] = ld_rebate_tmp FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp; LOOP CLOSE cur_listmx; // IF ll_pricelistid = 0 THEN // rslt = 0 // arg_msg = '选择限制为"只能选客户价格表",但当前客户没有指定价格表,请检查' // GOTO ext // END IF END IF //选价格表: 1.组合配置产品按组合计算; 2.包件产品按子件计算; 3.其他常规产品直接取价 FOR ll_i = 1 To ll_mxbt //循环所有该客户有效价格表 IF ll_statusflag = 2 And arg_status <> '' And li_ifpricepack = 0 THEN //组合配置且非整套计算 //组合配置 ,计算价格 //如果不按整套,分开子件查价格 //如果价格按整套,则用整个配置信息查价格 IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF ELSEIF li_ifpackpro <> 0 And li_ifpricepack = 0 THEN //包件产品且非整套计算 //2.包件产品,按清单拆分, 取子件价格汇总作为包件价格 IF uf_cmpl_price_pack(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF ELSE //整套计算 or 其他常规取价 //1.整套计算单价的 //2.非组合配置的 //3.非包件产品的 IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN CONTINUE ELSE rtn_price = obj_price rtn_zqrate = ld_rebate li_suc = 1 EXIT END IF END IF NEXT //if li_suc = 1 取价成功, 统计部件选配自动换料计算差价 IF li_suc = 1 THEN IF uof_get_mtrl_3pz_difprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, lde_difprice, arg_msg) = 0 THEN lde_difprice = 0 END IF rtn_price = rtn_price + lde_difprice // rtn_zqrate = ld_rebate // li_suc = 1 END IF IF li_suc = 0 THEN rslt = 0 GOTO ext END IF ext: arg_price = rtn_price arg_rebate = rtn_zqrate 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 event constructor; String str_optionvalue,arg_msg f_get_sys_option_value('056',str_optionvalue,arg_msg) uo_option_checkprice_native = Long(str_optionvalue) f_get_sys_option_value('238',str_optionvalue,arg_msg) uo_option_price_rmb = Long(str_optionvalue) f_get_sys_option_value('237',str_optionvalue,arg_msg) uo_option_saleprice_list_rebate = Long(str_optionvalue) end event