$PBExportHeader$uo_maxmin_mtrl.sru forward global type uo_maxmin_mtrl from nonvisualobject end type end forward global type uo_maxmin_mtrl from nonvisualobject end type global uo_maxmin_mtrl uo_maxmin_mtrl type variables long uo_billid string uo_billcode end variables forward prototypes public function integer save (s_maxmin_mtrl arg_s_mtrl, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_billid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) 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_maxmin_mtrl_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer secaudit (long arg_billid, string arg_opemp, 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) end prototypes public function integer save (s_maxmin_mtrl arg_s_mtrl, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i String ls_sccode,ls_billcode IF IsNull(arg_s_mtrl.billid) THEN arg_s_mtrl.billid = 0 IF IsNull(arg_s_mtrl.billcode) THEN arg_s_mtrl.billcode = '' IF IsNull(arg_s_mtrl.rep) THEN arg_s_mtrl.rep = '' IF IsNull(arg_s_mtrl.dscrp) THEN arg_s_mtrl.dscrp = '' IF arg_s_mtrl.rep = '' THEN rslt = 0 arg_msg = '请填写经手人' GOTO ext END IF if arg_s_mtrl.sdate > arg_s_mtrl.edate then rslt = 0 arg_msg = '统计结束日期不能早于统计开始日期,请检查' goto ext end if it_mxbt = UpperBound(arg_s_mtrl.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF arg_s_mtrl.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_maxmin_mtrl","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(0,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(0,ls_sccode + 'MN',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_maxmin_mtrl (billid, billcode, billdate, rep, sdate, edate, dscrp, opdate, opemp) VALUES (:ll_billid, :ls_billcode, :arg_s_mtrl.billdate, :arg_s_mtrl.rep, :arg_s_mtrl.sdate, :arg_s_mtrl.edate, :arg_s_mtrl.dscrp, getdate(), :arg_opemp); 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_maxmin_mtrl_mx (billid, printid, mtrlid, period, minarg, maxarg, avgqty, maxqty, minqty, mxdscrp, maxqty_be, minqty_be) VALUES (:ll_billid, :arg_s_mtrl.arg_s_mx[i].printid, :arg_s_mtrl.arg_s_mx[i].mtrlid, :arg_s_mtrl.arg_s_mx[i].period, :arg_s_mtrl.arg_s_mx[i].minarg, :arg_s_mtrl.arg_s_mx[i].maxarg, :arg_s_mtrl.arg_s_mx[i].avgqty, :arg_s_mtrl.arg_s_mx[i].maxqty, :arg_s_mtrl.arg_s_mx[i].minqty, :arg_s_mtrl.arg_s_mx[i].mxdscrp, :arg_s_mtrl.arg_s_mx[i].maxqty_be, :arg_s_mtrl.arg_s_mx[i].minqty_be); 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_maxmin_mtrl SET billdate = :arg_s_mtrl.billdate, rep = :arg_s_mtrl.rep, sdate = :arg_s_mtrl.sdate, edate = :arg_s_mtrl.edate, dscrp = :arg_s_mtrl.dscrp, moddate = getdate(), modemp = :arg_opemp WHERE billid = :arg_s_mtrl.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_maxmin_mtrl_mx Where billid = :arg_s_mtrl.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_maxmin_mtrl_mx (billid, printid, mtrlid, period, minarg, maxarg, avgqty, maxqty, minqty, mxdscrp, maxqty_be, minqty_be) VALUES (:arg_s_mtrl.billid, :arg_s_mtrl.arg_s_mx[i].printid, :arg_s_mtrl.arg_s_mx[i].mtrlid, :arg_s_mtrl.arg_s_mx[i].period, :arg_s_mtrl.arg_s_mx[i].minarg, :arg_s_mtrl.arg_s_mx[i].maxarg, :arg_s_mtrl.arg_s_mx[i].avgqty, :arg_s_mtrl.arg_s_mx[i].maxqty, :arg_s_mtrl.arg_s_mx[i].minqty, :arg_s_mtrl.arg_s_mx[i].mxdscrp, :arg_s_mtrl.arg_s_mx[i].maxqty_be, :arg_s_mtrl.arg_s_mx[i].minqty_be); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_mtrl.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 integer arg_secflag, ref string arg_msg);Int rslt = 1 SELECT flag,secflag INTO :arg_flag,:arg_secflag FROM u_maxmin_mtrl 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 ll_flag,ll_secflag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ll_secflag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 0 OR ll_secflag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF DELETE FROM u_maxmin_mtrl_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_maxmin_mtrl WHERE billid = :arg_billid AND flag = 0; 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_secflag IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,li_secflag,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_maxmin_mtrl SET flag = 1, auditemp = :arg_opemp, auditdate = getdate() WHERE billid = :arg_billid AND flag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 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_maxmin_mtrl_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 u_maxmin_mtrl_mx.printid, u_maxmin_mtrl_mx.mtrlid, u_maxmin_mtrl_mx.period, u_maxmin_mtrl_mx.minarg, u_maxmin_mtrl_mx.maxarg, u_maxmin_mtrl_mx.avgqty, u_maxmin_mtrl_mx.maxqty, u_maxmin_mtrl_mx.minqty, u_maxmin_mtrl_mx.mxdscrp, u_mtrldef.mtrlcode, u_mtrldef.mtrlname FROM u_maxmin_mtrl_mx INNER JOIN u_mtrldef ON u_maxmin_mtrl_mx.mtrlid = u_mtrldef.mtrlid WHERE u_maxmin_mtrl_mx.billid = :arg_billid Order By u_maxmin_mtrl_mx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].period, :arg_ref_mx[i].minarg, :arg_ref_mx[i].maxarg, :arg_ref_mx[i].avgqty, :arg_ref_mx[i].maxqty, :arg_ref_mx[i].minqty, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].mtrlname; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].printid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].period, :arg_ref_mx[i].minarg, :arg_ref_mx[i].maxarg, :arg_ref_mx[i].avgqty, :arg_ref_mx[i].maxqty, :arg_ref_mx[i].minqty, :arg_ref_mx[i].mxdscrp, :arg_ref_mx[i].mtrlcode, :arg_ref_mx[i].mtrlname; LOOP CLOSE cur_mx; SELECT count(*) INTO :no_mxcheck FROM u_maxmin_mtrl_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 caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_secflag DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 ARG_MSG = '单据已终审,不可以撤销初审' GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在已初审状态,不可以撤销初审' GOTO ext END IF UPDATE u_maxmin_mtrl SET flag = 0, auditdate = :null_dt, auditemp = '' WHERE billid = :arg_billid AND flag = 1 and secflag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 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 secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_secflag IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在已初审状态,不可以执行终审' GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 ARG_MSG = '单据已是终审状态,不可以重复执行终审' GOTO ext END IF s_maxmin_mtrl_mx arg_s_mx[] Long ll_arr_mx Long ll_i IF getinfo(arg_billid,arg_s_mx,ll_arr_mx,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_arr_mx UPDATE u_mtrldef SET maxqty = :arg_s_mx[ll_i].maxqty, minqty = :arg_s_mx[ll_i].minqty Where mtrlid = :arg_s_mx[ll_i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新物料:'+arg_s_mx[ll_i].mtrlcode+' 安全库存失败,'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_maxmin_mtrl SET secflag = 1, secauditemp = :arg_opemp, secauditdate = getdate() WHERE billid = :arg_billid AND flag = 1 and secflag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 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,li_secflag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 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); Int rslt = 1 Int ll_flag,ll_secflag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ll_secflag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_maxmin_mtrl SET DSCRP = DSCRP+' '+:arg_newdescppart Where u_maxmin_mtrl.billid = :arg_billid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function on uo_maxmin_mtrl.create call super::create TriggerEvent( this, "constructor" ) end on on uo_maxmin_mtrl.destroy TriggerEvent( this, "destructor" ) call super::destroy end on