$PBExportHeader$uo_subject.sru forward global type uo_subject from nonvisualobject end type end forward global type uo_subject from nonvisualobject end type global uo_subject uo_subject type variables string subid='' string name='' int dcflag=0 int detailflag=1 int hswb=0 long moneyid=0 int hsqty=0 string unit='' int hsdept=0 int hsemp=0 int hsitem=0 int hstrader=0 int attrflag=0 int specialcode=0 int relevantid=0 int hscust=0 int hsspt=0 private: string old_subid='' long it_MXBT=0 //明细结构数组末指针 BOOLEAN IT_NEWBEGIN=TRUE //新建同级标志 BOOLEAN IT_NEWSUBBEGIN=FALSE //新建下级标志 BOOLEAN IT_UPDATEBEGIN=FALSE//修改标志 long len_grade1,len_grade2,len_grade3 long len_grade4,len_grade5,len_grade6 long subtree_cnt end variables forward prototypes public function integer p_reset () public function integer save (ref string arg_msg, boolean arg_ifcommit) public function string get_subid (integer arg_newtype, string arg_psubid, ref string arg_msg) public function string get_subid_format (string arg_psubid, long arg_csubid) public function integer getinfo (string arg_subid, ref string arg_msg) public function integer check_data (ref string arg_msg) public function integer check_firstsub (ref string arg_msg) public function integer new_begin (integer arg_newtype, string arg_psubid, ref string arg_msg) public function integer check_onlyonesub () public function integer del_sub (ref string arg_msg, boolean arg_ifcommit) public function integer check_ifmxsub (ref string arg_msg) public function integer p_uo_begin () public function integer update_begin (string arg_subid, ref string arg_msg) public function string p_parent_subid (string arg_subid) public function integer p_check_suboperation (string arg_subid, ref string arg_msg) public function integer check_suboperation (integer arg_checktype, ref string arg_msg) public function integer update_add_del (integer arg_add_or_del, string arg_subid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_status (integer arg_type) public function integer p_update_subid_p (string arg_subid, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 it_newbegin=false it_newsubbegin=false it_updatebegin=false old_subid='' RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 String parent_subid,ls_displaycode IF s_sys_accset.ifnewsubid = 0 THEN IF Left(subid,1) <> '1' AND Left(subid,1) <> '2' AND Left(subid,1) <> '3' AND Left(subid,1) <> '4' AND Left(subid,1) <> '5' THEN rslt = 0 arg_msg = '科目代码错误,1 - 资产类,2 - 负债类,3 - 权益类,4 - 成本类,5 - 损益类' GOTO ext END IF ELSE IF Left(subid,1) <> '1' AND Left(subid,1) <> '2' AND Left(subid,1) <> '3' AND Left(subid,1) <> '4' AND Left(subid,1) <> '5' AND Left(subid,1) <> '6' THEN rslt = 0 arg_msg = '科目代码错误,1 - 资产类,2 - 负债类,3 - 共同类,4 - 权益类,5 - 成本类,6 - 损益类' GOTO ext END IF END IF //***检查同级名称是否相同 Int cnt = 0 Long ll_parent_len CHOOSE CASE Len(subid) CASE len_grade1 ll_parent_len = 3 CASE len_grade2 ll_parent_len = 3 CASE len_grade3 ll_parent_len = len_grade2 CASE len_grade4 ll_parent_len = len_grade3 CASE len_grade5 ll_parent_len = len_grade4 CASE len_grade6 ll_parent_len = len_grade5 END CHOOSE IF Trim(Name) = '' THEN arg_msg = '请输入科目名称' rslt = 0 GOTO ext END IF ls_displaycode = f_rst_subdisplay(subid,Name) SELECT count(*) INTO :cnt FROM cw_subject WHERE subid <> :subid AND name = :Name AND accsetid = :sys_accsetid AND len(subid) > 3 AND Left(subid,:ll_parent_len) = Left(:subid,:ll_parent_len); IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询同级科目名称是否有相同失败' GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '同级已有科目名称存在,请检查' GOTO ext END IF //********* //1.新建 IF it_newbegin OR it_newsubbegin THEN INSERT INTO cw_subject(accsetid, subid, name, dcflag, detailflag, hswb, moneyid, hsqty, unit, hsdept, hsemp, hsitem, hstrader, attrflag, specialcode, relevantid, displaycode, hscust, hsspt) VALUES(:sys_accsetid, :subid, :Name, :dcflag, :detailflag, :hswb, :moneyid, :hsqty, :unit, :hsdept, :hsemp, :hsitem, :hstrader, :attrflag, :specialcode, :relevantid, :ls_displaycode, :hscust, :hsspt); IF sqlca.SQLCode <> 0 THEN arg_msg = '新建会计科目失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF sys_accsetbegin THEN cnt = 0 SELECT count(*) INTO :cnt FROM cw_balance WHERE accsetid = :sys_accsetid AND subid = :subid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询新建会计科目是否已存在于试算平衡表失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF INSERT INTO cw_balance(accsetid,subid,YearMon)Values(:sys_accsetid,:subid,:sys_curyearmon); IF sqlca.SQLCode <> 0 THEN arg_msg = '新建会计科目增加到试算平衡表失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSEIF it_updatebegin THEN String ls_old_name Long ll_length_subid SELECT name INTO :ls_old_name FROM cw_subject WHERE accsetid = :sys_accsetid AND subid = :subid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询原科目名称失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE cw_subject SET subid = :subid, name = :Name, dcflag = :dcflag, hswb = :hswb, moneyid = :moneyid, hsqty = :hsqty, unit = :unit, hsdept = :hsdept, hsemp = :hsemp, hsitem = :hsitem, hstrader = :hstrader, attrflag = :attrflag, specialcode = :specialcode, relevantid = :relevantid, displaycode = :ls_displaycode, hscust = :hscust, hsspt = :hsspt Where accsetid = :sys_accsetid AND subid = :old_subid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '修改会计科目失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF Trim(ls_old_name) <> Trim(Name) THEN ll_length_subid = Len(subid) UPDATE cw_subject SET displaycode = replace(displaycode,:ls_old_name,:Name) WHERE accsetid = :sys_accsetid AND subid <> :subid AND Left(subid,:ll_length_subid) = :subid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新下级科目资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF END IF IF p_update_subid_p(subid,arg_msg) = 0 THEN rslt = 0 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 string get_subid (integer arg_newtype, string arg_psubid, ref string arg_msg);//取下级科目编号 //get_subid(arg_newtype,arg_psubid,ref arg_msg) //arg_newtype 取科目编号类型 0取同级,1取下级 String rslt_csubid = 'err' String ls_p_subid,ls_c_subid,ls_subid,ls_arg_subid String ls_max_subid Long i,j Long li_frow Long cnt Long ll_len_subid IF arg_newtype = 0 THEN ls_arg_subid = arg_psubid ELSE ls_arg_subid = arg_psubid ll_len_subid = Len(ls_arg_subid) SELECT count(*) INTO :cnt FROM cw_subject WHERE accsetid = :sys_accsetid AND len(subid) > :ll_len_subid AND Left(subid,:ll_len_subid) = :ls_arg_subid; IF sqlca.SQLCode <> 0 THEN rslt_csubid = 'err' GOTO ext END IF IF cnt = 0 THEN CHOOSE CASE ll_len_subid CASE len_grade1 ls_arg_subid = ls_arg_subid + Fill('0',len_grade2 - len_grade1 ) CASE len_grade2 ls_arg_subid = ls_arg_subid + Fill('0',len_grade3 - len_grade2 ) CASE len_grade3 ls_arg_subid = ls_arg_subid + Fill('0',len_grade4 - len_grade3 ) CASE len_grade4 ls_arg_subid = ls_arg_subid + Fill('0',len_grade5 - len_grade4 ) CASE len_grade5 ls_arg_subid = ls_arg_subid + Fill('0',len_grade6 - len_grade5 ) CASE len_grade6 rslt_csubid = 'err' GOTO ext END CHOOSE ELSE SELECT top 1 subid INTO :ls_max_subid FROM cw_subject WHERE accsetid = :sys_accsetid AND len(subid) > :ll_len_subid AND left(subid,:ll_len_subid) = :ls_arg_subid Order By subid Desc; IF sqlca.SQLCode <> 0 THEN rslt_csubid = 'err' GOTO ext END IF ls_arg_subid = ls_max_subid END IF END IF CHOOSE CASE Len(ls_arg_subid) CASE len_grade1 ls_p_subid = '' ls_c_subid = ls_arg_subid ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade1)) CASE len_grade2 ls_p_subid = Left(ls_arg_subid,len_grade1) ls_c_subid = Right(ls_arg_subid,len_grade2 - len_grade1) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade2 - len_grade1)) CASE len_grade3 ls_p_subid = Left(ls_arg_subid,len_grade2) ls_c_subid = Right(ls_arg_subid,len_grade3 - len_grade2) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade3 - len_grade2)) CASE len_grade4 ls_p_subid = Left(ls_arg_subid,len_grade3) ls_c_subid = Right(ls_arg_subid,len_grade4 - len_grade3) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade4 - len_grade3)) CASE len_grade5 ls_p_subid = Left(ls_arg_subid,len_grade4) ls_c_subid = Right(ls_arg_subid,len_grade5 - len_grade4) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade5 - len_grade4)) CASE len_grade6 ls_p_subid = Left(ls_arg_subid,len_grade5) ls_c_subid = Right(ls_arg_subid,len_grade6 - len_grade5) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade6 - len_grade5)) END CHOOSE ls_subid = ls_p_subid + ls_c_subid li_frow = ds_subjecttree.Find("subid='"+ls_subid+"'", 1, subtree_cnt) DO WHILE li_frow > 0 CHOOSE CASE Len(ls_subid) CASE len_grade1 ls_p_subid = '' ls_c_subid = ls_subid ls_c_subid = String(Long(ls_subid) + 1,Fill('0',len_grade1)) CASE len_grade2 ls_p_subid = Left(ls_subid,len_grade1) ls_c_subid = Right(ls_subid,len_grade2 - len_grade1) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade2 - len_grade1)) CASE len_grade3 ls_p_subid = Left(ls_subid,len_grade2) ls_c_subid = Right(ls_subid,len_grade3 - len_grade2) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade3 - len_grade2)) CASE len_grade4 ls_p_subid = Left(ls_subid,len_grade3) ls_c_subid = Right(ls_subid,len_grade4 - len_grade3) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade4 - len_grade3)) CASE len_grade5 ls_p_subid = Left(ls_subid,len_grade4) ls_c_subid = Right(ls_subid,len_grade5 - len_grade4) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade5 - len_grade4)) CASE len_grade6 ls_p_subid = Left(ls_subid,len_grade5) ls_c_subid = Right(ls_subid,len_grade6 - len_grade5) ls_c_subid = String(Long(ls_c_subid) + 1,Fill('0',len_grade6 - len_grade5)) END CHOOSE ls_subid = ls_p_subid + ls_c_subid li_frow = ds_subjecttree.Find("subid='"+ls_subid+"'", li_frow, subtree_cnt) LOOP rslt_csubid = ls_subid ext: IF rslt_csubid = 'err' THEN IF arg_newtype = 0 THEN arg_msg = '查找同级级科目编号失败' ELSE arg_msg = '查找下级科目编号失败' END IF END IF RETURN rslt_csubid end function public function string get_subid_format (string arg_psubid, long arg_csubid);string rslt_subid choose case len(arg_psubid) case len_grade1 rslt_subid=string(arg_csubid,fill('0',len_grade1)) case len_grade2 rslt_subid=string(arg_csubid,fill('0',len_grade2)) case len_grade3 rslt_subid=string(arg_csubid,fill('0',len_grade3)) case len_grade4 rslt_subid=string(arg_csubid,fill('0',len_grade4)) case len_grade5 rslt_subid=string(arg_csubid,fill('0',len_grade5)) case len_grade6 rslt_subid=string(arg_csubid,fill('0',len_grade6)) end choose return rslt_subid end function public function integer getinfo (string arg_subid, ref string arg_msg);//getinfo(arg_subid,ref arg_msg) //1:sucess,0:fail long rslt=1 if sys_accsetid<=0 then rslt=0 arg_msg='帐套ID错误' goto ext end if if len(arg_subid)<=0 then rslt=0 arg_msg='科目编号错误' goto ext end if select name, dcflag, detailflag, hswb, moneyid, hsqty, unit, hsdept, hsemp, hsitem, hstrader, attrflag, specialcode, relevantid, hscust, hsspt into :name, :dcflag, :detailflag, :hswb, :moneyid, :hsqty, :unit, :hsdept, :hsemp, :hsitem, :hstrader, :attrflag, :specialcode, :relevantid, :hscust, :hsspt from cw_subject where accsetid=:sys_accsetid and subid=:arg_subid; if sqlca.sqlcode<>0 then arg_msg='查询会计科目失败! ~n'+sqlca.SQLErrText rslt=0 goto ext end if subid = arg_subid it_newbegin=false it_newsubbegin=false it_updatebegin=false p_uo_begin() ext: IF rslt=0 THEN p_reset() return rslt end function public function integer check_data (ref string arg_msg);long rslt=1 if sys_accsetid=0 then rslt=0 arg_msg='帐套ID错误' goto ext end if if len(subid)<=0 then rslt=0 arg_msg='请输入会计科目编号' goto ext end if if len(subid)<>len_grade1 and len(subid)<>len_grade2 and len(subid)<>len_grade3 and & len(subid)<>len_grade4 and len(subid)<>len_grade5 and len(subid)<>len_grade6 then rslt=0 arg_msg='科目代码格式错,正确格式应为:' + string(s_sys_accset.step1) + '-' arg_msg=arg_msg + string(s_sys_accset.step2) + '-' + string(s_sys_accset.step3) + '-' arg_msg=arg_msg + string(s_sys_accset.step4) + '-' + string(s_sys_accset.step5) + '-' arg_msg=arg_msg + string(s_sys_accset.step6) goto ext end if if long(subid)=0 then rslt=0 arg_msg='科目代码输入有误,请检查' goto ext end if if name='' then rslt=0 arg_msg='请输入会计科目名称' goto ext end if ext: return rslt end function public function integer check_firstsub (ref string arg_msg);//查科目是否第一个子科目 //check_firstsub(ref arg_msg) //1:yes 0:no,2:error Long rslt = 0,i String parent_subid Int li_detailflag = 0 parent_subid = p_parent_subid(subid) SELECT detailflag INTO :li_detailflag FROM cw_subject WHERE accsetid = :sys_accsetid AND subid = :parent_subid; IF sqlca.SQLCode <> 0 THEN rslt = 2 arg_msg = '查询上级科目的下级科目失败' GOTO ext END IF rslt = li_detailflag ext: RETURN rslt end function public function integer new_begin (integer arg_newtype, string arg_psubid, ref string arg_msg);//new_begin(arg_newtype,arg_psubid,ref arg_msg) //arg_newtype 1:增加下级,0增加同级 long rslt=1 if arg_newtype = 1 then if len(arg_psubid)=len_grade6 then rslt=0 arg_msg='第6级科目不能增加下级科目' goto ext end if it_newbegin=false it_newsubbegin=true it_updatebegin=false else it_newbegin=true it_newsubbegin=false it_updatebegin=false end if ext: return rslt end function public function integer check_onlyonesub ();//查科目是否是唯一子科目 //p_conlyonesub() //0:不是或是一级科目,1:是 Long rslt = 1,i,ins_len,ins_parent_len,child_cnt = 0 ins_len = Len(subid) ins_parent_len = Len(p_parent_subid(subid)) FOR i = 1 TO subtree_cnt IF ins_len = Len(String(ds_subjecttree.Object.subid[i])) THEN IF p_parent_subid(subid) = Left(ds_subjecttree.Object.subid[i],ins_parent_len) THEN child_cnt++ END IF END IF NEXT IF child_cnt = 1 THEN IF ins_len = len_grade1 THEN rslt = 0 ELSE rslt = 1 END IF ELSE rslt = 0 END IF RETURN rslt end function public function integer del_sub (ref string arg_msg, boolean arg_ifcommit);//删除科目 //del_sub(arg_subid,refarg_msg,arg_ifcommit) //0 fail, 1 success Long rslt = 1 String parent_subid Long cnt,ll_subid_length cnt = 0 SELECT count(*) INTO :cnt FROM cw_credencemx WHERE accsetid = :sys_accsetid AND subid = :subid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询会计科目是否已用于凭证失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '会计科目已用于凭证,不能删除' rslt = 0 GOTO ext END IF IF sys_accsetbegin THEN cnt = 0 SELECT count(*) INTO :cnt FROM cw_balance WHERE accsetid = :sys_accsetid AND subid = :subid AND YearMon <> :sys_curyearmon; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询会计科目是否已用失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '会计科目已使用,不能删除' rslt = 0 GOTO ext END IF END IF parent_subid = p_parent_subid(subid) IF parent_subid <> '' THEN ll_subid_length = Len(Trim(parent_subid)) cnt = 0 SELECT count(*) INTO :cnt FROM cw_subject WHERE cw_subject.accsetid = :sys_accsetid AND left(subid,:ll_subid_length) = :parent_subid AND Len(subid) > :ll_subid_length AND subid <> :subid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询上级科目是否存在下级科目失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN UPDATE cw_subject SET detailflag = 1 WHERE accsetid = :sys_accsetid AND subid = :parent_subid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新上级科目的下级科目标记失败,'+sqlca.SQLErrText GOTO ext END IF END IF END IF DELETE FROM cw_balance WHERE cw_balance.accsetid = :sys_accsetid AND cw_balance.subid = :subid AND cw_balance.YearMon = :sys_curyearmon; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除科目试算平衡表数据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM cw_subject Where cw_subject.accsetid = :sys_accsetid AND subid = :subid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除科目操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN p_reset() ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer check_ifmxsub (ref string arg_msg);//查科目是否是唯一并且是最下级科目子科目 //p_conlyonesub() //1:yes 0:no long rslt=1,i,ins_len,ins_parent_len,child_cnt=0 ins_len=len(subid) for i=1 to subtree_cnt if left(subid,ins_len)=left(ds_subjecttree.object.subid[i],ins_len) & and len(subid) < len(string(ds_subjecttree.object.subid[i])) then child_cnt++ end if next if child_cnt = 0 then rslt=1 else rslt=0 arg_msg='不是明细科目' end if return rslt end function public function integer p_uo_begin ();len_grade1=s_sys_accset.step1 len_grade2=s_sys_accset.step1+s_sys_accset.step2 len_grade3=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3 len_grade4=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4 len_grade5=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4+s_sys_accset.step5 len_grade6=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4+s_sys_accset.step5+s_sys_accset.step6 subtree_cnt=ds_subjecttree.rowcount() return 1 end function public function integer update_begin (string arg_subid, ref string arg_msg);if getinfo(arg_subid,arg_msg)=0 then return 0 end if it_newbegin=false it_newsubbegin=false it_updatebegin=true old_subid=arg_subid return 1 end function public function string p_parent_subid (string arg_subid);string rst_parent_subid choose case len(arg_subid) case len_grade1 rst_parent_subid='' case len_grade2 rst_parent_subid=left(arg_subid,len_grade1) case len_grade3 rst_parent_subid=left(arg_subid,len_grade2) case len_grade4 rst_parent_subid=left(arg_subid,len_grade3) case len_grade5 rst_parent_subid=left(arg_subid,len_grade4) case len_grade6 rst_parent_subid=left(arg_subid,len_grade5) end choose return rst_parent_subid end function public function integer p_check_suboperation (string arg_subid, ref string arg_msg);//查科目是否发生过业务 //p_check_suboperation(arg_subid,ref arg_msg) //0:error 1:yes 2:no //1.查询部门初始化数据 //2.查询项目初始化数据 //3.查询初始化期初数据 //4.查询凭证 //5.查询余额表 Int rslt = 2,cnt = 0 //1.查询部门初始化数据 cnt = 0 //SELECT count(subid) INTO :cnt FROM cw_initdeptbala Where accsetid = :sys_accsetid AND subid = :arg_subid; //IF sqlca.SQLCode = -1 THEN // rslt = 0 // arg_msg = '查询科目部门初始化数据失败 ~n'+sqlca.SQLErrText // GOTO ext //ELSEIF sqlca.SQLCode = 100 THEN // rslt = 2 // GOTO ext //END IF // //IF cnt > 0 THEN // rslt = 1 // arg_msg = '该科目已经有业务发生' // GOTO ext //END IF //2.查询项目初始化数据 cnt = 0 //SELECT count(subid) INTO :cnt FROM cw_inititembala Where accsetid = :sys_accsetid AND subid = :arg_subid; //IF sqlca.SQLCode = -1 THEN // rslt = 0 // arg_msg = '查询科目项目初始化数据失败 ~n'+sqlca.SQLErrText // GOTO ext //ELSEIF sqlca.SQLCode = 100 THEN // rslt = 2 // GOTO ext //END IF // //IF cnt > 0 THEN // arg_msg = '该科目已经有业务发生' // GOTO ext //END IF //3.查询初始化期初数据 cnt = 0 SELECT count(subid) INTO :cnt FROM cw_initbalance WHERE accsetid = :sys_accsetid AND subid = :arg_subid AND (debit <> 0 OR credit <> 0 OR balance <> 0); IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询科目初始化期初数据失败 ~n'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 THEN rslt = 2 GOTO ext END IF IF cnt > 0 THEN rslt = 1 arg_msg = '该科目已经有业务发生' GOTO ext END IF //4.查询凭证 cnt = 0 SELECT count(subid) INTO :cnt FROM cw_credencemx Where accsetid = :sys_accsetid AND subid = :arg_subid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询科目凭证数据失败 ~n'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLCode = 100 THEN rslt = 2 GOTO ext END IF IF cnt > 0 THEN rslt = 1 arg_msg = '该科目已经有业务发生' GOTO ext END IF ext: RETURN rslt end function public function integer check_suboperation (integer arg_checktype, ref string arg_msg);//p_check_suboperation(arg_checktype,ref arg_msg) //arg_checktype //0:del,1:addchild //return 0:error ,1:yes ,2:no Int rslt String parent_subid IF arg_checktype = 0 THEN rslt = p_check_suboperation(subid,arg_msg) ELSE parent_subid = p_parent_subid(subid) rslt = p_check_suboperation(parent_subid,arg_msg) END IF RETURN rslt end function public function integer update_add_del (integer arg_add_or_del, string arg_subid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String p_subid uo_init uo_init_update p_subid = p_parent_subid(arg_subid) IF p_subid = '' THEN rslt = 1 GOTO ext END IF uo_init_update = CREATE uo_init IF uo_init_update.sub_add_del_update(arg_add_or_del,arg_subid,p_subid,arg_msg,arg_ifcommit) = 0 THEN rslt = 0 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 uof_update_status (integer arg_type);if arg_type = 2 then it_newbegin = true it_newsubbegin = false it_updatebegin = false elseif arg_type = 1 then it_newbegin = false it_newsubbegin = true it_updatebegin = false elseif arg_type = 3 then it_newbegin = false it_newsubbegin = false it_updatebegin = true end if return 1 end function public function integer p_update_subid_p (string arg_subid, ref string arg_msg);Int rslt = 1 String ls_parent_subid ls_parent_subid = p_parent_subid(arg_subid) DO WHILE ls_parent_subid <> '' UPDATE cw_subject SET detailflag = 0 WHERE accsetid = :sys_accsetid AND subid = :ls_parent_subid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新上级科目的下级科目标记失败'+ls_parent_subid GOTO ext END IF ls_parent_subid = p_parent_subid(ls_parent_subid) LOOP ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function on uo_subject.create call super::create TriggerEvent( this, "constructor" ) end on on uo_subject.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;len_grade1=s_sys_accset.step1 len_grade2=s_sys_accset.step1+s_sys_accset.step2 len_grade3=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3 len_grade4=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4 len_grade5=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4+s_sys_accset.step5 len_grade6=s_sys_accset.step1+s_sys_accset.step2+s_sys_accset.step3+s_sys_accset.step4+s_sys_accset.step5+s_sys_accset.step6 subtree_cnt=ds_subjecttree.rowcount() end event