$PBExportHeader$uo_planprice_change.sru forward global type uo_planprice_change from nonvisualobject end type end forward global type uo_planprice_change from nonvisualobject end type global uo_planprice_change uo_planprice_change type variables Long uo_billid String uo_billcode end variables forward prototypes public function integer save (s_planprice_change arg_s_planprice, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) 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 updatebegin (long arg_billid, ref string arg_msg) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_planprice_change_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_planprice_change arg_s_planprice, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 DateTime server_dt Long ll_billid String ls_sccode,ls_billcode Long it_mxbt,i Long ll_mtrlid IF IsNull(arg_s_planprice.scid) THEN arg_s_planprice.scid = 0 IF IsNull(arg_s_planprice.billid) THEN arg_s_planprice.billid = 0 IF IsNull(arg_s_planprice.billemp) THEN arg_s_planprice.billemp = '' IF IsNull(arg_s_planprice.relcode) THEN arg_s_planprice.relcode = '' IF IsNull(arg_s_planprice.dscrp) THEN arg_s_planprice.dscrp = '' IF arg_s_planprice.billemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF it_mxbt = UpperBound(arg_s_planprice.arg_s_mx) FOR i = 1 TO it_mxbt ll_mtrlid = arg_s_planprice.arg_s_mx[i].mtrlid cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,查询物料资料是否存在失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,物料资料不存在' GOTO ext END IF IF arg_s_planprice.arg_s_mx[i].planprice_new < 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,新计划价不能少于0' GOTO ext END IF NEXT SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF arg_s_planprice.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_planprice_change","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_planprice.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_planprice.scid,ls_sccode + 'MC',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_planprice_change (scid, billid, billcode, billdate, billemp, opdate, opemp, relcode, dscrp) VALUES ( :arg_s_planprice.scid, :ll_billid, :ls_billcode, :arg_s_planprice.billdate, :arg_s_planprice.billemp, getdate(), :arg_opemp, :arg_s_planprice.relcode, :arg_s_planprice.dscrp) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_planprice_change_mx (billid, printid, scid, mtrlid, planprice_ori, planprice_new, mxdscrp, status, woodcode, pcode) VALUES ( :ll_billid, :arg_s_planprice.arg_s_mx[i].printid, :arg_s_planprice.scid, :arg_s_planprice.arg_s_mx[i].mtrlid, :arg_s_planprice.arg_s_mx[i].planprice_ori, :arg_s_planprice.arg_s_mx[i].planprice_new, :arg_s_planprice.arg_s_mx[i].mxdscrp, :arg_s_planprice.arg_s_mx[i].status, :arg_s_planprice.arg_s_mx[i].woodcode, :arg_s_planprice.arg_s_mx[i].pcode); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_planprice_change SET billdate = :arg_s_planprice.billdate, billemp = :arg_s_planprice.billemp, moddate = getdate(), modemp = :arg_opemp, relcode = :arg_s_planprice.relcode, dscrp = :arg_s_planprice.dscrp WHERE billid = :arg_s_planprice.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_planprice_change_mx WHERE billid = :arg_s_planprice.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除原有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_planprice_change_mx (billid, printid, scid, mtrlid, planprice_ori, planprice_new, mxdscrp, status, woodcode, pcode) VALUES ( :arg_s_planprice.billid, :arg_s_planprice.arg_s_mx[i].printid, :arg_s_planprice.scid, :arg_s_planprice.arg_s_mx[i].mtrlid, :arg_s_planprice.arg_s_mx[i].planprice_ori, :arg_s_planprice.arg_s_mx[i].planprice_new, :arg_s_planprice.arg_s_mx[i].mxdscrp, :arg_s_planprice.arg_s_mx[i].status, :arg_s_planprice.arg_s_mx[i].woodcode, :arg_s_planprice.arg_s_mx[i].pcode); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_planprice.billid 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 p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_planprice_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_planprice_change WHERE 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 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_planprice_change SET DSCRP = DSCRP+' '+:arg_newdescppart Where u_planprice_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 getinfo (long arg_billid, ref s_planprice_change_mx 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 printid, scid, mtrlid, planprice_ori, planprice_new, mxdscrp, status, woodcode, pcode FROM u_planprice_change_mx Where billid = :arg_billid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].scid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].planprice_ori, :arg_ref_mx[i].planprice_new, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].scid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].planprice_ori, :arg_ref_mx[i].planprice_new, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_planprice_change_mx 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Long ll_i Long ll_arr_cnt Long ll_mtrlid Decimal ld_planprice_new 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 //更新审核标记 UPDATE u_planprice_change SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 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 s_planprice_change_mx s_mx[] IF getinfo(arg_billid,s_mx,ll_arr_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To ll_arr_cnt UPDATE u_mtrldef_planprice SET planprice = :s_mx[ll_i].planprice_new, modemp = :arg_opemp, moddate = getdate() WHERE mtrlid = :s_mx[ll_i].mtrlid AND status = :s_mx[ll_i].status AND woodcode = :s_mx[ll_i].woodcode And pcode = :s_mx[ll_i].pcode; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_mtrldef_planprice (mtrlid, status, woodcode, pcode, planprice, modemp, moddate) VALUES (:s_mx[ll_i].mtrlid, :s_mx[ll_i].status, :s_mx[ll_i].woodcode, :s_mx[ll_i].pcode, :s_mx[ll_i].planprice_new, :arg_opemp, getdate()); IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '插入产品计划成本价资料失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新产品计划成本价资料失败,'+sqlca.SQLErrText GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_planprice_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_planprice_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on