$PBExportHeader$uo_prdpf_change.sru forward global type uo_prdpf_change from nonvisualobject end type end forward global type uo_prdpf_change from nonvisualobject end type global uo_prdpf_change uo_prdpf_change type variables long uo_billid string uo_billcode end variables forward prototypes public function integer save (s_prdpf_change arg_s_prdpf, 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 updatebegin (long arg_billid, 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_prdpf_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer uof_checkrand (long arg_objmtrlid, long arg_sonmtrlid) end prototypes public function integer save (s_prdpf_change arg_s_prdpf, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i String ls_sccode,ls_billcode IF IsNull(arg_s_prdpf.billid) THEN arg_s_prdpf.billid = 0 IF IsNull(arg_s_prdpf.sonmtrlid) THEN arg_s_prdpf.sonmtrlid = 0 IF IsNull(arg_s_prdpf.rep) THEN arg_s_prdpf.rep = '' IF IsNull(arg_s_prdpf.dscrp) THEN arg_s_prdpf.dscrp = '' IF arg_s_prdpf.sonmtrlid = 0 THEN arg_msg = '请选择下级物料' rslt = 0 GOTO ext END IF IF arg_s_prdpf.rep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF //检查下级物料的正确性 cnt = 0 select count(*) into :cnt from u_mtrldef where mtrlid = :arg_s_prdpf.sonmtrlid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '查询下级物料是否存在失败' goto ext end if if cnt = 0 then rslt = 0 arg_msg = '下级物料不存在' 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_s_prdpf.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF arg_s_prdpf.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_prdpf_change","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 + 'QC',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_prdpf_change (billid, billcode, billdate, relcode, sonmtrlid, rep, dscrp, opdate, opemp) VALUES (:ll_billid, :ls_billcode, :arg_s_prdpf.billdate, :arg_s_prdpf.relcode, :arg_s_prdpf.sonmtrlid, :arg_s_prdpf.rep, :arg_s_prdpf.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_prdpf_changemx (billid, printid, editflag, mtrlid, pfcode, pfgroup, wrkgrpid, sonpfcode, sonscale_ori, sonscale, prdpf_printid, promode, pfgroupqty, pfgroupmode, pfklmode, mtrlkind, status, woodcode, pcode, sonloss, sondecloss, ifover, dscrp, dipztype, scllloss, dytype, advancetime, sclldecloss) VALUES (:ll_billid, :arg_s_prdpf.arg_s_mx[i].printid, :arg_s_prdpf.arg_s_mx[i].editflag, :arg_s_prdpf.arg_s_mx[i].mtrlid, :arg_s_prdpf.arg_s_mx[i].pfcode, :arg_s_prdpf.arg_s_mx[i].pfgroup, :arg_s_prdpf.arg_s_mx[i].wrkgrpid, :arg_s_prdpf.arg_s_mx[i].sonpfcode, :arg_s_prdpf.arg_s_mx[i].sonscale_ori, :arg_s_prdpf.arg_s_mx[i].sonscale, :arg_s_prdpf.arg_s_mx[i].prdpf_printid, :arg_s_prdpf.arg_s_mx[i].promode, :arg_s_prdpf.arg_s_mx[i].pfgroupqty, :arg_s_prdpf.arg_s_mx[i].pfgroupmode, :arg_s_prdpf.arg_s_mx[i].pfklmode, :arg_s_prdpf.arg_s_mx[i].mtrlkind, :arg_s_prdpf.arg_s_mx[i].status, :arg_s_prdpf.arg_s_mx[i].woodcode, :arg_s_prdpf.arg_s_mx[i].pcode, :arg_s_prdpf.arg_s_mx[i].sonloss, :arg_s_prdpf.arg_s_mx[i].sondecloss, :arg_s_prdpf.arg_s_mx[i].ifover, :arg_s_prdpf.arg_s_mx[i].dscrp, :arg_s_prdpf.arg_s_mx[i].dipztype, :arg_s_prdpf.arg_s_mx[i].scllloss, :arg_s_prdpf.arg_s_mx[i].dytype, :arg_s_prdpf.arg_s_mx[i].advancetime, :arg_s_prdpf.arg_s_mx[i].sclldecloss ); 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_prdpf_change SET billdate = :arg_s_prdpf.billdate, sonmtrlid = :arg_s_prdpf.sonmtrlid, rep = :arg_s_prdpf.rep, dscrp = :arg_s_prdpf.dscrp, relcode = :arg_s_prdpf.relcode, moddate = getdate(), modemp = :arg_opemp WHERE billid = :arg_s_prdpf.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_prdpf_changemx Where billid = :arg_s_prdpf.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_prdpf_changemx (billid, printid, editflag, mtrlid, pfcode, pfgroup, wrkgrpid, sonpfcode, sonscale_ori, sonscale, prdpf_printid, promode, pfgroupqty, pfgroupmode, pfklmode, mtrlkind, status, woodcode, pcode, sonloss, sondecloss, ifover, dscrp, dipztype, scllloss, dytype, advancetime, sclldecloss) VALUES (:arg_s_prdpf.billid, :arg_s_prdpf.arg_s_mx[i].printid, :arg_s_prdpf.arg_s_mx[i].editflag, :arg_s_prdpf.arg_s_mx[i].mtrlid, :arg_s_prdpf.arg_s_mx[i].pfcode, :arg_s_prdpf.arg_s_mx[i].pfgroup, :arg_s_prdpf.arg_s_mx[i].wrkgrpid, :arg_s_prdpf.arg_s_mx[i].sonpfcode, :arg_s_prdpf.arg_s_mx[i].sonscale_ori, :arg_s_prdpf.arg_s_mx[i].sonscale, :arg_s_prdpf.arg_s_mx[i].prdpf_printid, :arg_s_prdpf.arg_s_mx[i].promode, :arg_s_prdpf.arg_s_mx[i].pfgroupqty, :arg_s_prdpf.arg_s_mx[i].pfgroupmode, :arg_s_prdpf.arg_s_mx[i].pfklmode, :arg_s_prdpf.arg_s_mx[i].mtrlkind, :arg_s_prdpf.arg_s_mx[i].status, :arg_s_prdpf.arg_s_mx[i].woodcode, :arg_s_prdpf.arg_s_mx[i].pcode, :arg_s_prdpf.arg_s_mx[i].sonloss, :arg_s_prdpf.arg_s_mx[i].sondecloss, :arg_s_prdpf.arg_s_mx[i].ifover, :arg_s_prdpf.arg_s_mx[i].dscrp, :arg_s_prdpf.arg_s_mx[i].dipztype, :arg_s_prdpf.arg_s_mx[i].scllloss, :arg_s_prdpf.arg_s_mx[i].dytype, :arg_s_prdpf.arg_s_mx[i].advancetime, :arg_s_prdpf.arg_s_mx[i].sclldecloss ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_prdpf.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_prdpf_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 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 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_prdpf_change WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_prdpf_changemx 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 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_prdpf_change SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_prdpf_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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag uo_mtrl_pf uo_pf uo_pf = Create uo_mtrl_pf 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 //更新物料清单 Long ll_sonmtrlid s_prdpf_changemx s_prdpf_mx[] Long ll_arr_cnt,ll_i Long cnt Select sonmtrlid Into :ll_sonmtrlid From u_prdpf_change Where billid = :arg_billid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询单据内容失败'+'~n'+sqlca.SQLErrText Goto ext End If If getinfo(arg_billid,s_prdpf_mx,ll_arr_cnt,ARG_MSG) = 0 Then rslt = 0 Goto ext End If For ll_i = 1 To ll_arr_cnt If s_prdpf_mx[ll_i].editflag = 0 Then //变更数量 If s_prdpf_mx[ll_i].Sonscale > 0 Then Update u_prdpf Set Sonscale = :s_prdpf_mx[ll_i].Sonscale, printid = :s_prdpf_mx[ll_i].prdpf_printid, promode = :s_prdpf_mx[ll_i].promode, pfgroupqty = :s_prdpf_mx[ll_i].pfgroupqty, pfgroupmode = :s_prdpf_mx[ll_i].pfgroupmode, pfklmode = :s_prdpf_mx[ll_i].pfklmode, mtrlkind = :s_prdpf_mx[ll_i].mtrlkind, status = :s_prdpf_mx[ll_i].status, woodcode = :s_prdpf_mx[ll_i].woodcode, pcode = :s_prdpf_mx[ll_i].pcode, sonloss = :s_prdpf_mx[ll_i].sonloss, sondecloss = :s_prdpf_mx[ll_i].sondecloss, ifover = :s_prdpf_mx[ll_i].ifover, dscrp = :s_prdpf_mx[ll_i].dscrp, scllloss = :s_prdpf_mx[ll_i].scllloss, dytype = :s_prdpf_mx[ll_i].dytype, advancetime = :s_prdpf_mx[ll_i].advancetime, sclldecloss = :s_prdpf_mx[ll_i].sclldecloss Where mtrlid = :s_prdpf_mx[ll_i].mtrlid And pfcode = :s_prdpf_mx[ll_i].pfcode And pfgroup = :s_prdpf_mx[ll_i].pfgroup And sonmtrlid = :ll_sonmtrlid And wrkgrpid = :s_prdpf_mx[ll_i].wrkgrpid And sonpfcode = :s_prdpf_mx[ll_i].sonpfcode; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 Then rslt = 0 ARG_MSG = '更新物料清单失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText Goto ext End If ElseIf s_prdpf_mx[ll_i].Sonscale = 0 Then //数量为0,删除 Delete From u_prdpf Where mtrlid = :s_prdpf_mx[ll_i].mtrlid And pfcode = :s_prdpf_mx[ll_i].pfcode And pfgroup = :s_prdpf_mx[ll_i].pfgroup And sonmtrlid = :ll_sonmtrlid And wrkgrpid = :s_prdpf_mx[ll_i].wrkgrpid And sonpfcode = :s_prdpf_mx[ll_i].sonpfcode; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 Then rslt = 0 ARG_MSG = '更新物料清单失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText Goto ext End If End If ElseIf s_prdpf_mx[ll_i].editflag = 2 Then //删除 Delete From u_prdpf Where mtrlid = :s_prdpf_mx[ll_i].mtrlid And pfcode = :s_prdpf_mx[ll_i].pfcode And pfgroup = :s_prdpf_mx[ll_i].pfgroup And sonmtrlid = :ll_sonmtrlid And wrkgrpid = :s_prdpf_mx[ll_i].wrkgrpid And sonpfcode = :s_prdpf_mx[ll_i].sonpfcode; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 Then rslt = 0 ARG_MSG = '删除物料清单失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText Goto ext End If Else // 新增 cnt = 0 Select count(*) Into :cnt From u_prdpf Where mtrlid = :s_prdpf_mx[ll_i].mtrlid And pfcode = :s_prdpf_mx[ll_i].pfcode And pfgroup = :s_prdpf_mx[ll_i].pfgroup And sonmtrlid = :ll_sonmtrlid And wrkgrpid = :s_prdpf_mx[ll_i].wrkgrpid And sonpfcode = :s_prdpf_mx[ll_i].sonpfcode; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询物料清单失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 ARG_MSG = '物料清单已存在相同信息,不能插入重复内容,第 '+String(ll_i)+' 行' Goto ext End If //查询环 If uof_checkrand(s_prdpf_mx[ll_i].mtrlid,ll_sonmtrlid) = 1 Then rslt = 0 ARG_MSG = '发现闭环,在第 '+String(ll_i)+' 行,请核对' Goto ext End If // Insert Into u_prdpf ( mtrlid, sonmtrlid, pfcode, pfgroup, wrkgrpid, sonpfcode, sonscale, printid, promode, pfgroupqty, pfgroupmode, pfklmode, mtrlkind, status, woodcode, pcode, sonloss, sondecloss, ifover, dscrp, scllloss, dytype, advancetime, sclldecloss) Values ( :s_prdpf_mx[ll_i].mtrlid, :ll_sonmtrlid, :s_prdpf_mx[ll_i].pfcode, :s_prdpf_mx[ll_i].pfgroup, :s_prdpf_mx[ll_i].wrkgrpid, :s_prdpf_mx[ll_i].sonpfcode, :s_prdpf_mx[ll_i].sonscale, :s_prdpf_mx[ll_i].prdpf_printid, :s_prdpf_mx[ll_i].promode, :s_prdpf_mx[ll_i].pfgroupqty, :s_prdpf_mx[ll_i].pfgroupmode, :s_prdpf_mx[ll_i].pfklmode, :s_prdpf_mx[ll_i].mtrlkind, :s_prdpf_mx[ll_i].status, :s_prdpf_mx[ll_i].woodcode, :s_prdpf_mx[ll_i].pcode, :s_prdpf_mx[ll_i].sonloss, :s_prdpf_mx[ll_i].sondecloss, :s_prdpf_mx[ll_i].ifover, :s_prdpf_mx[ll_i].dscrp, :s_prdpf_mx[ll_i].scllloss, :s_prdpf_mx[ll_i].dytype, :s_prdpf_mx[ll_i].advancetime, :s_prdpf_mx[ll_i].sclldecloss ); If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '插入物料清单失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText Goto ext End If End If If uo_pf.uof_cmplprdpfmx(s_prdpf_mx[ll_i].mtrlid,s_prdpf_mx[ll_i].pfcode,ARG_MSG,False) = 0 Then rslt = 0 ARG_MSG = '重算物料全套清单失败,第 '+String(ll_i)+' 行'+'~n'+ARG_MSG Goto ext End If Next // //更新审核标记 Update u_prdpf_change Set auditingrep = :arg_opemp, auditingdate = 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 ext: Destroy uo_pf 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_prdpf_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 billid, printid, editflag, mtrlid, pfcode, pfgroup, wrkgrpid, sonpfcode, sonscale_ori, sonscale, prdpf_printid, promode, pfgroupqty, pfgroupmode, pfklmode, mtrlkind, status, woodcode, pcode, sonloss, sondecloss, ifover, dscrp, scllloss, dytype, advancetime, sclldecloss FROM u_prdpf_changemx WHERE u_prdpf_changemx.billid = :arg_billid Order By u_prdpf_changemx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].editflag, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].pfcode, :arg_ref_mx[i].pfgroup, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].sonpfcode, :arg_ref_mx[i].sonscale_ori, :arg_ref_mx[i].sonscale, :arg_ref_mx[i].prdpf_printid, :arg_ref_mx[i].promode, :arg_ref_mx[i].pfgroupqty, :arg_ref_mx[i].pfgroupmode, :arg_ref_mx[i].pfklmode, :arg_ref_mx[i].mtrlkind, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].sonloss, :arg_ref_mx[i].sondecloss, :arg_ref_mx[i].ifover, :arg_ref_mx[i].dscrp, :arg_ref_mx[i].scllloss, :arg_ref_mx[i].dytype, :arg_ref_mx[i].advancetime, :arg_ref_mx[i].sclldecloss; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].editflag, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].pfcode, :arg_ref_mx[i].pfgroup, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].sonpfcode, :arg_ref_mx[i].sonscale_ori, :arg_ref_mx[i].sonscale, :arg_ref_mx[i].prdpf_printid, :arg_ref_mx[i].promode, :arg_ref_mx[i].pfgroupqty, :arg_ref_mx[i].pfgroupmode, :arg_ref_mx[i].pfklmode, :arg_ref_mx[i].mtrlkind, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].sonloss, :arg_ref_mx[i].sondecloss, :arg_ref_mx[i].ifover, :arg_ref_mx[i].dscrp, :arg_ref_mx[i].scllloss, :arg_ref_mx[i].dytype, :arg_ref_mx[i].advancetime, :arg_ref_mx[i].sclldecloss; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_prdpf_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 uof_checkrand (long arg_objmtrlid, long arg_sonmtrlid);IF arg_sonmtrlid = arg_objmtrlid THEN RETURN 1 Long ls_mtrlid Long rt_b,rt_s,count Long mtrlid[],ls_i DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid FROM u_PrdPF Where ( u_PrdPF.mtrlid = :arg_sonmtrlid ); OPEN pf_cur; count = 1 FETCH pf_cur INTO :mtrlid[count]; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :mtrlid[count]; LOOP count = count - 1 CLOSE pf_cur; FOR ls_i = 1 TO count rt_b = uof_checkrand(arg_objmtrlid,mtrlid[ls_i]) IF rt_b <> 0 THEN RETURN rt_b NEXT RETURN 0 end function on uo_prdpf_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_prdpf_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on