$PBExportHeader$f_get_defsaleprice.srf global type f_get_defsaleprice from function_object end type forward prototypes global subroutine f_get_defsaleprice (long arg_cusid, long arg_mtrlid, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, ref decimal arg_def_dftsaleprice) end prototypes global subroutine f_get_defsaleprice (long arg_cusid, long arg_mtrlid, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, ref decimal arg_def_dftsaleprice);Int rslt = 1 Int li_mtrlorigin,li_price_ifpz String ls_status,ls_pcode,ls_woodcode Long ll_pricelistid,li_flag Long ll_moneyid s_mtrlcfg_expr s_pz[] Long ll_statusflag Decimal obj_price Long ll_i String ls_status_zj Decimal ld_price_zj,ld_rebate_zj SELECT statusflag,mtrlorigin,price_ifpz INTO :ll_statusflag,:li_mtrlorigin,:li_price_ifpz FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF sys_option_checkprice_native = 1 THEN SELECT moneyid INTO :ll_moneyid FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF ELSE ll_moneyid = arg_moneyid END IF IF ll_statusflag = 2 And arg_status <> '' THEN SELECT pricelistid INTO :ll_pricelistid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF f_checkpz(arg_status,s_pz[]) //改写 // IF sys_option_price_if_pz = 0 THEN // ls_pcode = '' // ls_woodcode = '' // ELSE // ls_pcode = arg_pcode // ls_woodcode = arg_woodcode // END IF CHOOSE CASE li_price_ifpz CASE 0,1,4,6,7 ls_woodcode = '' ls_pcode = '' CASE 2 ls_woodcode = arg_woodcode ls_pcode = '' CASE 3 ls_woodcode = '' ls_pcode = arg_pcode CASE 5 ls_woodcode = arg_woodcode ls_pcode = arg_pcode END CHOOSE 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 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 = :ls_status_zj AND u_sale_price_mx.pcode = :ls_pcode AND u_sale_price_mx.woodcode = :ls_woodcode AND u_sale_price_list.dftflag = 1 AND u_sale_price_mx.flag = 1 And u_sale_price_list.moneyid = :ll_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF END IF SELECT u_sale_price_mx.price,u_sale_price_mx.rebate INTO :ld_price_zj,:ld_rebate_zj FROM u_sale_price_mx,u_sale_price_list WHERE ( u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid) AND (u_sale_price_mx.pricelistid = :ll_pricelistid) AND ( u_sale_price_mx.mtrlid = :arg_mtrlid ) AND ( u_sale_price_mx.status = :ls_status_zj ) AND ( u_sale_price_mx.pcode = :ls_pcode ) AND ( u_sale_price_mx.woodcode = :ls_woodcode ) AND ( u_sale_price_mx.flag = 1 ); IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext ELSE obj_price = obj_price + ld_price_zj * ld_rebate_zj * Dec(s_pz[ll_i].qty) END IF NEXT arg_def_dftsaleprice = obj_price ELSE //改写 // IF sys_option_price_if_status = 0 THEN // ls_status = '' // ls_pcode = '' // ls_woodcode = '' // ELSE // ls_status = arg_status // ls_pcode = arg_pcode // ls_woodcode = arg_woodcode // END IF CHOOSE CASE li_price_ifpz CASE 0 ls_status = '' ls_woodcode = '' ls_pcode = '' case 1 ls_status = arg_status ls_woodcode = '' ls_pcode = '' CASE 2 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = '' CASE 3 ls_status = '' ls_woodcode = '' ls_pcode = arg_pcode case 4 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = '' CASE 5 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = arg_pcode case 6 ls_status = arg_status ls_woodcode = '' ls_pcode = arg_pcode case 7 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = arg_pcode END CHOOSE SELECT pricelistid INTO :ll_pricelistid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN rslt = 0 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 = :ls_status AND u_sale_price_mx.pcode = :ls_pcode AND u_sale_price_mx.woodcode = :ls_woodcode AND u_sale_price_list.dftflag = 1 AND u_sale_price_mx.flag = 1 And u_sale_price_list.moneyid = :ll_moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF END IF SELECT u_sale_price_mx.price,u_sale_price_mx.flag INTO :arg_def_dftsaleprice,:li_flag FROM u_sale_price_mx WHERE u_sale_price_mx.mtrlid = :arg_mtrlid AND u_sale_price_mx.status = :ls_status AND u_sale_price_mx.pcode = :ls_pcode AND u_sale_price_mx.woodcode = :ls_woodcode AND u_sale_price_mx.flag = 1 And u_sale_price_mx.pricelistid = :ll_pricelistid; IF sqlca.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN arg_def_dftsaleprice = 0 END IF //如果是采购类产品查不到订单,则查最新购价作定价 IF li_mtrlorigin = 2 And arg_def_dftsaleprice = 0 And sys_option_saletask_dftsaleprice_get1buyprice = 1 THEN SELECT v_maxprice_sptprice.price INTO :arg_def_dftsaleprice From v_maxprice_sptprice Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_def_dftsaleprice = 0 END IF END IF end subroutine