$PBExportHeader$uo_mtrl_price_change.sru forward global type uo_mtrl_price_change from nonvisualobject end type end forward global type uo_mtrl_price_change from nonvisualobject end type global uo_mtrl_price_change uo_mtrl_price_change type variables Long uo_billid String uo_billcode end variables forward prototypes public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_mtrl_price_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer getinfo2 (long arg_billid, ref s_mtrl_price_changemx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer save (s_mtrl_price_change arg_mpc, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uf_update_task (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit) public function integer uf_update_in (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_mtrl_price_change WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据不是在待审状态,不可以删除' GOTO ext END IF DELETE FROM u_mtrl_price_change WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_price_changemx WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_price_changemx2 WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细2操作失败"+"~n"+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 add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_mtrl_price_change SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_mtrl_price_change.billid = :arg_billid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+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 updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 Int li_flag Long cnt IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再修改' GOTO ext END IF ext: RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long ll_scid Decimal lde_newprice Long ll_sptid , ll_mtrlid String ls_status, ls_woodcode, ls_pcode String ls_mtrlcode, ls_unit Long ll_moneyid datetime ldt_billdate dec lde_rate uo_spt_price_change uo_price uo_price = Create uo_spt_price_change uo_price.commit_transaction = sqlca IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以审核' GOTO ext END IF SELECT scid, newprice, sptid, mtrlid, status, woodcode, pcode, moneyid, billdate, unit, rate INTO :ll_scid, :lde_newprice, :ll_sptid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ll_moneyid, :ldt_billdate, :ls_unit, :lde_rate FROM u_mtrl_price_change Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询单据信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询单据物料信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //生成询价单creage_ IF uo_price.newbegin() = 0 THEN rslt = 0 GOTO ext END IF //uo_price.billdate = DateTime(Today()) // 发生时间 //uo_price.sptid = ll_sptid //uo_price.dscrp = "物价单价变更的审核自动生成" //备注 //uo_price.billtype = 1 //调价单 //uo_price.inrep = publ_operator //uo_price.moneyid = ll_moneyid // //IF uo_price.acceptmx(1,& // ll_mtrlid,& // ls_mtrlcode,& // ls_unit,& // lde_newprice,& // lde_rate,& // ls_status,& // ls_woodcode,& // ls_pcode,& // '',& // '',& // '',& // ldt_billdate,& // 0,& // 0,& // arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF uo_price.Save(arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF //IF uo_price.first_audit(uo_price.billid,False,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF uo_price.auditing(uo_price.billid,False,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF //生成询价单creage_ //更新审核标记 UPDATE u_mtrl_price_change SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1, relid = :uo_price.billid, relcode = :uo_price.billcode WHERE billid = :arg_billid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uf_update_task(ll_scid , arg_billid, lde_newprice, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF IF uf_update_in(ll_scid , arg_billid, lde_newprice, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_price IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_mtrl_price_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT u_mtrl_price_changemx.billid, u_mtrl_price_changemx.printid, u_mtrl_price_changemx.relid, u_mtrl_price_changemx.price, u_mtrl_price_changemx.rate, u_mtrl_price_changemx.scid, u_mtrl_price_changemx.relprintid, u_mtrl_price_changemx.mxtype, u_mtrl_price_changemx.unit FROM u_mtrl_price_changemx WHERE u_mtrl_price_changemx.billid = :arg_billid Order By u_mtrl_price_changemx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid,:arg_ref_mx[i].relid, :arg_ref_mx[i].price,:arg_ref_mx[i].rate, :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid, :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid,:arg_ref_mx[i].relid, :arg_ref_mx[i].price,:arg_ref_mx[i].rate, :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid, :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_mtrl_price_changemx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer getinfo2 (long arg_billid, ref s_mtrl_price_changemx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT u_mtrl_price_changemx2.billid, u_mtrl_price_changemx2.printid, u_mtrl_price_changemx2.relid, u_mtrl_price_changemx2.price, u_mtrl_price_changemx2.rate, u_mtrl_price_changemx2.scid, u_mtrl_price_changemx2.relprintid, u_mtrl_price_changemx2.mxtype, u_mtrl_price_changemx2.unit FROM u_mtrl_price_changemx2 where u_mtrl_price_changemx2.billid = :arg_billid Order By u_mtrl_price_changemx2.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid,:arg_ref_mx[i].relid, :arg_ref_mx[i].price,:arg_ref_mx[i].rate, :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid, :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid,:arg_ref_mx[i].relid, :arg_ref_mx[i].price,:arg_ref_mx[i].rate, :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid, :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_mtrl_price_changemx2 Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer save (s_mtrl_price_change arg_mpc, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0 DateTime server_dt Long ll_billid String ls_sccode,ls_billcode Long ll_Mtrlorigin Long it_mxbt,i, it_mxbt2 IF IsNull(arg_mpc.scid) THEN arg_mpc.scid = 0 IF IsNull(arg_mpc.billid) THEN arg_mpc.billid = 0 IF IsNull(arg_mpc.billemp) THEN arg_mpc.billemp = '' IF IsNull(arg_mpc.relcode) THEN arg_mpc.relcode = '' IF IsNull(arg_mpc.dscrp) THEN arg_mpc.dscrp = '' IF IsNull(arg_mpc.relid) THEN arg_mpc.relid = 0 IF IsNull(arg_mpc.mtrlid) THEN arg_mpc.mtrlid = 0 IF IsNull(arg_mpc.status) THEN arg_mpc.status = '' IF IsNull(arg_mpc.woodcode) THEN arg_mpc.woodcode = '' IF IsNull(arg_mpc.pcode) THEN arg_mpc.pcode = '' IF IsNull(arg_mpc.price) THEN arg_mpc.price = 0 IF IsNull(arg_mpc.newprice) THEN arg_mpc.newprice = 0 IF IsNull(arg_mpc.billtype) THEN arg_mpc.billtype = 0 IF IsNull(arg_mpc.sptid) THEN arg_mpc.sptid = 0 IF IsNull(arg_mpc.moneyid) THEN arg_mpc.moneyid = 0 IF IsNull(arg_mpc.mrate) THEN arg_mpc.mrate = 0 IF IsNull(arg_mpc.unit) THEN arg_mpc.unit = '' IF IsNull(arg_mpc.rate) THEN arg_mpc.rate = 0 IF arg_mpc.mtrlid = 0 THEN arg_msg = '请选择目标物料' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrldef Where mtrlid = :arg_mpc.mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询目标物料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '目标物料资料不存在或重复,请检查' rslt = 0 GOTO ext END IF IF arg_mpc.billemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF it_mxbt = UpperBound(arg_mpc.arg_s_mx) it_mxbt2 = UpperBound(arg_mpc.arg_s_mx2) IF it_mxbt <= 0 And it_mxbt2 <= 0 THEN rslt = 0 arg_msg = "没有正确订单明细内容和收货明细内容" GOTO ext END IF IF arg_mpc.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_mtrl_price_change","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_mpc.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_mpc.scid,ls_sccode + 'PM',Date(server_dt),False,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_mtrl_price_change (scid, billid, billcode, billdate, billemp, opdate, opemp, flag, relcode, dscrp, relid, mtrlid, status, woodcode, pcode, price, newprice, sptid, moneyid, mrate, unit, rate) VALUES ( :arg_mpc.scid, :ll_billid, :ls_billcode, :arg_mpc.billdate, :arg_mpc.billemp, getdate(), :arg_opemp, 0, :arg_mpc.relcode, :arg_mpc.dscrp, :arg_mpc.relid, :arg_mpc.mtrlid, :arg_mpc.status, :arg_mpc.woodcode, :arg_mpc.pcode, :arg_mpc.price, :arg_mpc.newprice, :arg_mpc.sptid, :arg_mpc.moneyid, :arg_mpc.mrate, :arg_mpc.unit, :arg_mpc.rate) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_mtrl_price_change SET billdate = :arg_mpc.billdate, billemp = :arg_mpc.billemp, moddate = getdate(), modemp = :arg_opemp, relid = :arg_mpc.relid, relcode = :arg_mpc.relcode, dscrp = :arg_mpc.dscrp, mtrlid = :arg_mpc.mtrlid, status = :arg_mpc.status, woodcode = :arg_mpc.woodcode, pcode = :arg_mpc.pcode, price = :arg_mpc.price, newprice = :arg_mpc.newprice, sptid = :arg_mpc.sptid, moneyid = :arg_mpc.moneyid, mrate = :arg_mpc.mrate, unit = :arg_mpc.unit, rate = :arg_mpc.rate WHERE billid = :arg_mpc.billid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_price_changemx Where billid = :arg_mpc.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除旧有明细操作失败'+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_price_changemx2 Where billid = :arg_mpc.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除旧有明细操作失败'+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = arg_mpc.billid END IF FOR i = 1 To it_mxbt INSERT INTO u_mtrl_price_changemx (billid, printid, relid, relprintid, relcode, price, rate, unit, mxtype, dscrp, scid) VALUES ( :uo_billid, :arg_mpc.arg_s_mx[i].printid, :arg_mpc.arg_s_mx[i].relid, :arg_mpc.arg_s_mx[i].relprintid, :arg_mpc.arg_s_mx[i].relcode, :arg_mpc.arg_s_mx[i].price, :arg_mpc.arg_s_mx[i].rate, :arg_mpc.arg_s_mx[i].unit, :arg_mpc.arg_s_mx[i].mxtype, :arg_mpc.arg_s_mx[i].dscrp, :arg_mpc.scid); IF sqlca.SQLCode <> 0 THEN uo_billid = arg_mpc.billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbt2 INSERT INTO u_mtrl_price_changemx2 (billid, printid, relid, relprintid, relcode, price, rate, unit, mxtype, dscrp, scid) VALUES ( :uo_billid, :arg_mpc.arg_s_mx2[i].printid, :arg_mpc.arg_s_mx2[i].relid, :arg_mpc.arg_s_mx2[i].relprintid, :arg_mpc.arg_s_mx2[i].relcode, :arg_mpc.arg_s_mx2[i].price, :arg_mpc.arg_s_mx2[i].rate, :arg_mpc.arg_s_mx2[i].unit, :arg_mpc.arg_s_mx2[i].mxtype, :arg_mpc.arg_s_mx2[i].dscrp, :arg_mpc.scid); IF sqlca.SQLCode <> 0 THEN uo_billid = arg_mpc.billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer uf_update_task (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 s_mtrl_price_changemx s_mx[] Decimal lde_newprice lde_newprice = arg_newprice Long ll_arr_cnt, i IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_arr_cnt = 0 THEN RETURN 1 //没有的, 不提交事物, 成功返回 Int li_status, li_secflag, li_balcflag Decimal lde_fprice, lde_price, lde_uprice, lde_enprice, lde_jgprice, lde_enprice_tax, lde_enprice_notax, lde_cost Decimal lde_uqty, lde_rate, lde_rebate, lde_mrate FOR i = 1 To ll_arr_cnt //订单明细 IF s_mx[i].mxtype = 2 THEN //采购 SELECT u_buytaskmx.uqty, u_buytaskmx.rate, u_buytaskmx.rebate, u_buytask.mrate INTO :lde_uqty, :lde_rate, :lde_rebate, :lde_mrate FROM u_buytaskmx INNER join u_buytask On u_buytask.scid = u_buytaskmx.scid AND u_buytask.taskid = u_buytaskmx.taskid WHERE u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :s_mx[i].relid AND u_buytaskmx.printid = :s_mx[i].relprintid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "订单明细行:["+String(i)+"],查询采购订单明细内容失败"+sqlca.SQLErrText GOTO ext END IF lde_enprice = lde_newprice lde_uprice = Round(lde_enprice * lde_mrate,10) lde_fprice = Round((lde_uprice * lde_uqty)/(Round(lde_uqty * lde_rate,sys_option_unit_dec)),10) lde_price = lde_fprice * lde_rebate UPDATE u_buyTaskMx SET fprice = :lde_fprice, Price = :lde_price, uprice = :lde_uprice, enprice = :lde_enprice WHERE scid = :arg_scid AND taskid = :s_mx[i].relid And printid = :s_mx[i].relprintid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "订单明细行:["+String(i)+"],更新采购订单单价失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "订单明细行:["+String(i)+"],采购订单对应明细不存在"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSEIF s_mx[i].mxtype = 3 THEN lde_price = lde_newprice UPDATE u_order_wfjgMx SET price = :lde_price WHERE scid = :arg_scid AND wfjgid = :s_mx[i].relid And printid = :s_mx[i].relprintid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "订单明细行:["+String(i)+"],更新外协订单单价失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "订单明细行:["+String(i)+"],外协订单对应明细不存在"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uf_update_in (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal lde_newprice lde_newprice = arg_newprice s_mtrl_price_changemx2 s_mx2[] Long ll_arr_cnt2, i uo_inware uo_in_buy uo_in_buy = Create uo_inware uo_in_buy.commit_transaction = sqlca uo_inware_wfjg uo_in_wfjg uo_in_wfjg = Create uo_inware_wfjg uo_in_wfjg.commit_transaction = sqlca IF getinfo2(arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_arr_cnt2 = 0 THEN RETURN 1 //没有的, 不提交事物, 成功返回 Int li_flag, li_secflag, li_balcflag Decimal lde_fprice, lde_price, lde_uprice, lde_enprice, lde_jgprice, lde_enprice_tax, lde_enprice_notax, lde_cost Decimal lde_uqty, lde_rate, lde_rebate, lde_mrate, lde_qty Int li_thflag FOR i = 1 To ll_arr_cnt2 //收货明细 IF s_mx2[i].mxtype = 2 THEN //采购 SELECT flag, secflag, balcflag INTO :li_flag, :li_secflag, :li_balcflag FROM u_inware WHERE scid = :arg_scid And inwareid = :s_mx2[i].relid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],查询采购收货单信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],对应采购收货单已经财审,不能更改单价" GOTO ext END IF IF li_balcflag = 1 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],对应采购收货单已经结存,不能更改单价" GOTO ext END IF IF li_flag = 1 THEN IF uo_in_buy.mod_price(arg_scid,s_mx2[i].relid,s_mx2[i].relprintid,lde_newprice,0,-1,-1,arg_msg,False) = 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],"+arg_msg GOTO ext END IF ELSE SELECT u_inwaremx.uqty, u_inwaremx.rate, u_inwaremx.rebate, u_inware.mrate, u_inware.thflag INTO :lde_uqty, :lde_rate, :lde_rebate, :lde_mrate, :li_thflag FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE u_inwaremx.scid = :arg_scid AND u_inwaremx.inwareid = :s_mx2[i].relid And u_inwaremx.printid = :s_mx2[i].relprintid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单明细内容失败'+sqlca.SQLErrText GOTO ext END IF lde_enprice = lde_newprice lde_uprice = Round(lde_enprice * lde_mrate,10) lde_fprice = Round((lde_uprice * lde_uqty)/(Round(lde_uqty * lde_rate,sys_option_unit_dec)),10) lde_price = lde_fprice * lde_rebate IF li_thflag = 0 THEN lde_cost = lde_price * lde_rebate END IF UPDATE u_inwaremx SET enprice = :lde_enprice, uprice = :lde_uprice, fprice = :lde_fprice, price = :lde_price, cost = :lde_cost, deliprice_notax = :lde_enprice / (1 + tax) WHERE scid = :arg_scid AND inwareid = :s_mx2[i].relid And printid = :s_mx2[i].relprintid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],更新外协收货单价失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],外协收货单对应明细不存在或已财审/结存"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ELSEIF s_mx2[i].mxtype = 3 THEN SELECT flag, secflag, balcflag INTO :li_flag, :li_secflag, :li_balcflag FROM ow_wfjg_in WHERE scid = :arg_scid And inwareid = :s_mx2[i].relid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],查询外协收货单信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],对应外协收货单已经财审,不能更改单价" GOTO ext END IF IF li_balcflag = 1 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],对应外协收货单已经结存,不能更改单价" GOTO ext END IF IF li_flag = 1 THEN IF uo_in_wfjg.mod_price(arg_scid,s_mx2[i].relid,s_mx2[i].relprintid,lde_fprice,lde_newprice,-1,-1,arg_msg,False) = 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],"+arg_msg GOTO ext END IF ELSE SELECT fprice, uqty, qty, rebate INTO :lde_fprice, :lde_uqty, :lde_qty, :lde_rebate FROM ow_wfjgmx_in_aft WHERE scid = :arg_scid AND inwareid = :s_mx2[i].relid AND printid = :s_mx2[i].relprintid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据明细内容失败'+sqlca.SQLErrText GOTO ext END IF lde_jgprice = lde_newprice IF lde_qty <> 0 THEN lde_uprice = Round(lde_newprice * lde_uqty/lde_qty,5) ELSE lde_uprice = 0 END IF lde_cost = lde_uprice * lde_rebate + lde_fprice lde_price = lde_uprice * lde_rebate + lde_fprice UPDATE ow_wfjgmx_in_aft SET jgprice = :lde_jgprice, fprice = :lde_fprice, uprice = :lde_uprice, price = :lde_price, cost = :lde_cost WHERE scid = :arg_scid AND inwareid = :s_mx2[i].relid And printid = :s_mx2[i].relprintid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],更新外协收货单价失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "收货单明细行:["+String(i)+"],外协收货单对应明细不存在或已财审/结存"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF NEXT ext: destroy uo_in_buy destroy uo_in_wfjg IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_mtrl_price_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mtrl_price_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on