$PBExportHeader$uo_mtrl_change_rule.sru forward global type uo_mtrl_change_rule from nonvisualobject end type end forward global type uo_mtrl_change_rule from nonvisualobject end type global uo_mtrl_change_rule uo_mtrl_change_rule type variables long uo_ruleid end variables forward prototypes public function integer save (s_mtrl_change_rule arg_s_rule, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_ruleid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_mtrl_change_rule arg_s_rule, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Long ll_newid DateTime server_dt Long it_mxbt,it_mxbt_mtrl Long i,j IF IsNull(arg_s_rule.ruleid) THEN arg_s_rule.ruleid = 0 IF IsNull(arg_s_rule.rulename) THEN arg_s_rule.rulename = '' IF IsNull(arg_s_rule.rulestr) THEN arg_s_rule.rulestr = '' IF IsNull(arg_s_rule.dscrp) THEN arg_s_rule.dscrp = '' IF IsNull(arg_s_rule.Kind) THEN arg_s_rule.Kind = 0 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_rule.rulename = '' THEN rslt = 0 arg_msg = '请输入换料策略名称' GOTO ext END IF IF arg_s_rule.rulestr = '' THEN rslt = 0 arg_msg = '请填写换料策略规则' GOTO ext END IF it_mxbt = UpperBound(arg_s_rule.arg_s_mx) IF arg_s_rule.Kind = 0 THEN IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确规则明细内容" GOTO ext END IF END IF it_mxbt_mtrl = UpperBound(arg_s_rule.arg_s_mtrlmx) IF it_mxbt_mtrl <= 0 THEN rslt = 0 arg_msg = "没有正确的生效产品或半成品列表" GOTO ext END IF IF arg_s_rule.ruleid = 0 THEN ll_newid = f_sys_scidentity(0,"u_mtrl_change_rule","ruleid",arg_msg,TRUE,id_sqlca) IF ll_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrl_change_rule (ruleid, rulename, rulestr, dscrp, opemp, opdate, kind) VALUES (:ll_newid, :arg_s_rule.rulename, :arg_s_rule.rulestr, :arg_s_rule.dscrp, :publ_operator, getdate(), :arg_s_rule.Kind); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '新增换料策略失败'+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_mtrl_change_rule_mx (ruleid, printid, rule_if, rule_then, repeattype) VALUES (:ll_newid, :arg_s_rule.arg_s_mx[i].printid, :arg_s_rule.arg_s_mx[i].rule_if, :arg_s_rule.arg_s_mx[i].rule_then, :arg_s_rule.arg_s_mx[i].repeattype); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入换料明细规则失败'+sqlca.SQLErrText GOTO ext END IF NEXT FOR j = 1 TO it_mxbt_mtrl INSERT INTO u_mtrl_change_rule_mtrlmx (ruleid, mtrlid) VALUES (:ll_newid, :arg_s_rule.arg_s_mtrlmx[j].mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入换料物料明细失败'+sqlca.SQLErrText GOTO ext END IF NEXT uo_ruleid = ll_newid ELSE UPDATE u_mtrl_change_rule SET rulename = :arg_s_rule.rulename, rulestr = :arg_s_rule.rulestr, dscrp = :arg_s_rule.dscrp, moddate = getdate(), modemp = :publ_operator Where ruleid = :arg_s_rule.ruleid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新换料策略失败'+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_change_rule_mx Where ruleid = :arg_s_rule.ruleid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有规则明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_change_rule_mtrlmx Where ruleid = :arg_s_rule.ruleid; 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_mtrl_change_rule_mx (ruleid, printid, rule_if, rule_then, repeattype) VALUES (:arg_s_rule.ruleid, :arg_s_rule.arg_s_mx[i].printid, :arg_s_rule.arg_s_mx[i].rule_if, :arg_s_rule.arg_s_mx[i].rule_then, :arg_s_rule.arg_s_mx[i].repeattype); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入换料明细规则失败'+sqlca.SQLErrText GOTO ext END IF NEXT FOR j = 1 TO it_mxbt_mtrl INSERT INTO u_mtrl_change_rule_mtrlmx (ruleid, mtrlid) VALUES (:arg_s_rule.ruleid, :arg_s_rule.arg_s_mtrlmx[j].mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入换料物料明细失败'+sqlca.SQLErrText GOTO ext END IF NEXT uo_ruleid = arg_s_rule.ruleid 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 del (long arg_ruleid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_ruleid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF DELETE FROM u_mtrl_change_rule_mx Where ruleid = :arg_ruleid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除换料规则明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_change_rule_mtrlmx Where ruleid = :arg_ruleid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除物料明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_mtrl_change_rule Where ruleid = :arg_ruleid; 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 on uo_mtrl_change_rule.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mtrl_change_rule.destroy TriggerEvent( this, "destructor" ) call super::destroy end on