$PBExportHeader$uo_accset.sru forward global type uo_accset from nonvisualobject end type end forward global type uo_accset from nonvisualobject end type global uo_accset uo_accset type variables Long accsetid = 0 //帐套ID String accsetname = '' String cropname = '' Long cropid = 0 Long startyear = 0, startyearmon = 0 Long curryear = 0,currmon = 0 Int mustcheck = 1 Int sameuser = 0 Int Step1,Step2,Step3,Step4,Step5,Step6 Int TaxType = 0 String LawPerson = '',Bank = '',Accounts = '',TaxNumber = '' String Telephone = '' ,Address = '' int ifnewsubid = 0 end variables forward prototypes public function integer accset_newbegin (ref string arg_msg) public function integer accset (integer arg_edittype, ref string arg_msg, boolean arg_ifcommit) public function integer credenceword (long itmxt_credenceword, string arg_credenceword[], ref string arg_msg, boolean arg_ifcommit) public function integer new_currency (string arg_code, string arg_name, decimal arg_rate, integer arg_native, ref string arg_msg, boolean arg_ifcommit) public function integer new_calendar (s_calendar arg_s_calendar[12], ref string arg_msg, boolean arg_ifcommit) public function integer subject_arrray (s_subject_array arg_s_subject, ref string arg_msg, boolean arg_ifcommit) public function integer cancel_begin_accset (ref string arg_msg) public function integer begin_accset (ref string arg_msg, boolean arg_ifcommit) public function integer new_reports (ref string arg_msg, boolean arg_ifcommit) public function integer del_accset (long arg_accsetid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer accset_newbegin (ref string arg_msg);Long rslt = 1,cnt IF accsetid <= 0 THEN arg_msg = '帐套ID错误,请检查' rslt = 0 GOTO ext END IF SELECT count(accsetid) INTO :cnt FROM cw_accset Where accsetid = :accsetid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询帐套ID失败,'+sqlca.sqlerrtext rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '数据库已存在该帐套ID,请重新输入' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer accset (integer arg_edittype, ref string arg_msg, boolean arg_ifcommit);//建帐套 //accset(int arg_edittype,ref string arg_msg,boolean arg_ifcommit) //arg_edittype:类型 Long rslt = 1 IF accsetname = '' THEN arg_msg = '请输入帐套代号' rslt = 0 GOTO ext END IF IF cropname = '' THEN arg_msg = '请输入企业名称' rslt = 0 GOTO ext END IF IF ifnewsubid = 0 THEN IF cropid <= 0 THEN arg_msg = '请输入所属行业' rslt = 0 GOTO ext END IF END IF //新建 IF arg_edittype = 1 THEN INSERT INTO cw_accset(accsetid,accsetname,cropname,cropid,startyear,startyearmon, curryear,currmon,mustcheck,sameuser,Step1,Step2,Step3,Step4, Step5,Step6,TaxType,LawPerson,Bank,Accounts, TaxNumber,Telephone,Address,ifnewsubid) VALUES(:accsetid,:accsetname,:cropname,:cropid,:startyear,:startyearmon, :curryear,:currmon,:mustcheck,:sameuser,:Step1,:Step2,:Step3,:Step4, :Step5,:Step6,:TaxType,:LawPerson,:Bank,:Accounts, :TaxNumber,:Telephone,:Address,:ifnewsubid); IF sqlca.SQLCode <> 0 THEN arg_msg = '新建帐套失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE //修改 UPDATE cw_accset SET accsetname = :accsetname, cropname = :cropname, cropid = :cropid, startyear = :startyear, startyearmon = :startyearmon, curryear = :curryear, currmon = :currmon, mustcheck = :mustcheck, sameuser = :sameuser, Step1 = :Step1, Step2 = :Step2, Step3 = :Step3, Step4 = :Step4, Step5 = :Step5, Step6 = :Step6, TaxType = :TaxType, LawPerson = :LawPerson, Bank = :Bank, Accounts = :Accounts, TaxNumber = :TaxNumber, Telephone = :Telephone, Address = :Address Where accsetid = :accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '修改帐套信息失败! ~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer credenceword (long itmxt_credenceword, string arg_credenceword[], ref string arg_msg, boolean arg_ifcommit);//建凭证字 //Credenceword(long itmxt_credenceword,string arg_credenceword[],ref string arg_msg,boolean arg_ifcommit) long rslt=1,i if itmxt_Credenceword=0 then rslt=1 goto ext end if for i=1 to itmxt_Credenceword if arg_Credenceword[i]='' then arg_msg='请输入凭证字' rslt=0 goto ext end if next delete from cw_Credenceword where accsetid=:accsetid; if sqlca.sqlcode<>0 then arg_msg='删除凭证字失败, ~n' + sqlca.sqlerrtext rslt=0 goto ext end if for i=1 to itmxt_Credenceword insert into cw_Credenceword(accsetid,Credenceword) values(:accsetid,:arg_Credenceword[i]); if sqlca.sqlcode<>0 then arg_msg='建立凭证字失败, ~n' + sqlca.sqlerrtext rslt=0 goto ext end if next ext: if rslt=0 then rollback; elseif arg_ifcommit then commit; end if return rslt end function public function integer new_currency (string arg_code, string arg_name, decimal arg_rate, integer arg_native, ref string arg_msg, boolean arg_ifcommit);//建币种资料 //new_currency(string arg_code,string arg_name,decimal rate,int native,ref string arg_msg,boolean arg_ifcommit) long rslt=1,ls_moneyid ls_moneyid=f_sys_scidentity(accsetid,"cw_currency","moneyid",arg_msg,TRUE,id_sqlca) if ls_moneyid<=0 then rslt=0 goto ext end if if arg_code='' then arg_msg='请输入本位币代号' rslt=0 goto ext end if if arg_name='' then arg_msg='请输入本位币名称' rslt=0 goto ext end if insert into cw_currency(accsetid,moneyid,code,name,rate,native) values(:accsetid,:ls_moneyid,:arg_code,:arg_name,:arg_rate,:arg_native); if sqlca.sqlcode<>0 then arg_msg='建立本位币失败, ~n' + sqlca.sqlerrtext rslt=0 goto ext end if ext: if rslt=0 then rollback; elseif arg_ifcommit then commit; end if return rslt end function public function integer new_calendar (s_calendar arg_s_calendar[12], ref string arg_msg, boolean arg_ifcommit);//建帐套期间 //new_calendar(s_calendar arg_s_calendar[12],ref string arg_msg,boolean arg_ifcommit) Long rslt = 1,i FOR i = 1 TO 12 INSERT INTO cw_calendar(accsetid,cmonth,sdate,edate) Values(:accsetid,:arg_s_calendar[i].cmonth,:arg_s_calendar[i].sdate,:arg_s_calendar[i].edate); NEXT IF sqlca.SQLCode <> 0 THEN arg_msg = '建立帐套期间失败, ~n' + sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer subject_arrray (s_subject_array arg_s_subject, ref string arg_msg, boolean arg_ifcommit);//建科目 //subject_arrray(s_subject,arg_s_subject,ref string arg_msg,boolean arg_ifcommit) long rslt=1,subject_cnt,i string ls_displaycode subject_cnt=upperbound(arg_s_subject.croptypeid[]) if subject_cnt<=0 then arg_msg='没有初始化会计科目' rslt=0 goto ext end if for i=1 to subject_cnt ls_displaycode=arg_s_subject.subid[i]+' '+arg_s_subject.name[i] insert into cw_subject( accsetid, subid, name, dcflag, detailflag, hswb, moneyid, hsqty, unit, hsdept, hsemp, hsitem, hstrader, attrflag, specialcode, relevantid, displaycode) values(:accsetid, :arg_s_subject.subid[i], :arg_s_subject.name[i], :arg_s_subject.dcflag[i], :arg_s_subject.detailflag[i], :arg_s_subject.hswb[i], :arg_s_subject.moneyid[i], :arg_s_subject.hsqty[i], :arg_s_subject.unit[i], :arg_s_subject.hsdept[i], :arg_s_subject.hsemp[i], :arg_s_subject.hsitem[i], :arg_s_subject.hstrader[i], :arg_s_subject.attrflag[i], :arg_s_subject.specialcode[i], :arg_s_subject.relevantid[i], :ls_displaycode); if sqlca.sqlcode<>0 then arg_msg='新建帐套失败! ~n'+sqlca.SQLErrText rslt=0 goto ext end if next ext: if rslt=0 then rollback; elseif arg_ifcommit then commit; end if return rslt end function public function integer cancel_begin_accset (ref string arg_msg);//反启用帐套 Int rslt = 1,cnt Long ls_curryear,ls_currmon DateTime null_datetime SetNull(null_datetime) //检查帐套信息 SELECT count(accsetid) INTO :cnt FROM cw_accset Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐套失败,不能反启用帐套' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '帐套重复,不能反启用帐套' rslt = 0 GOTO ext END IF SELECT curryear,currmon INTO :ls_curryear,:ls_currmon FROM cw_accset Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐套当前期间失败,不能反启用帐套' rslt = 0 GOTO ext END IF IF ls_curryear = 0 OR ls_currmon = 0 THEN arg_msg = '帐套还未启用,不能反启用帐套' rslt = 0 GOTO ext END IF IF ls_curryear <> s_sys_accset.startyear OR & ls_currmon <> s_sys_accset.startyearmon THEN arg_msg = '会计期间不在开帐期间,不能反启用帐套' rslt = 0 GOTO ext END IF DELETE FROM cw_balance Where accsetid = :sys_accsetid AND yearmon = :sys_curyearmon; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除结余表失败,不能反启用帐套' rslt = 0 GOTO ext END IF DELETE FROM cw_astbalance Where accsetid = :sys_accsetid AND yearmon = :sys_curyearmon; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除固定资产累计折旧表失败,不能反启用帐套' rslt = 0 GOTO ext END IF //更新当前期间凭证的登帐标记 UPDATE cw_credence SET postflag = 0, billpost = '', billpostdate = :null_datetime WHERE cw_credence.accsetid = :sys_accsetid AND cw_credence.cmonth = :sys_curyearmon; IF sqlca.SQLCode <> 0 THEN arg_msg = '反结帐失败,更新当前期间凭证登帐标记失败' rslt = 0 GOTO ext END IF //删除累计折旧 IF f_init_astbalance(0,sys_curyearmon,sys_curyearmon,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF UPDATE cw_accset SET curryear = 0, currmon = 0, curyearmon = 0 Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新帐套当前期间失败,不能反启用帐套'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF f_set_accsetmessage() = 0 THEN arg_msg = '查询帐套信息失败,不能反启用帐套' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer begin_accset (ref string arg_msg, boolean arg_ifcommit);//启用帐套 Int rslt = 1,cnt datastore ds_balance Long ls_curryear,ls_currmon,ll_startyear,ll_startyearmon Long ll_curryear_cn,ll_currmon_cn Dec sum_ydebit,sum_ycrebit,sum_debit,sum_crebit,sum_mdebit,sum_mcrebit uo_credence uo_begin_uo_credence //1.检查帐套信息 SELECT count(accsetid) INTO :cnt FROM cw_accset Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐套失败,不能开帐' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '帐套重复,不能开帐' rslt = 0 GOTO ext END IF SELECT curryear,currmon,startyear,startyearmon INTO :ls_curryear,:ls_currmon,:ll_startyear,:ll_startyearmon FROM cw_accset Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐套当前期间失败,不能开帐' rslt = 0 GOTO ext END IF IF ls_curryear <> 0 OR ls_currmon <> 0 THEN arg_msg = '帐套已经启用,不能重复启动' rslt = 0 GOTO ext END IF IF ll_startyearmon = 1 THEN ll_curryear_cn = ll_startyear - 1 ll_currmon_cn = 12 ELSE ll_currmon_cn = ll_startyearmon - 1 ll_curryear_cn = ll_startyear END IF //2.检查试算平衡 ds_balance = CREATE datastore ds_balance.DataObject = "dw_initbalance_balance" ds_balance.SetTransObject(sqlca) ds_balance.Retrieve(sys_accsetid) sum_ydebit = ds_balance.Object.sum_ydebit[1] sum_ycrebit = ds_balance.Object.sum_ydebit[1] sum_debit = ds_balance.Object.sum_debit[1] sum_crebit = ds_balance.Object.sum_crebit[1] sum_mdebit = ds_balance.Object.sum_mdebit[1] sum_mcrebit = ds_balance.Object.sum_mcrebit[1] IF String(sum_ydebit,'###0.00') <> String(sum_ycrebit,'###0.00') OR String(sum_debit,'###0.00') <> String(sum_crebit,'###0.00') OR String(sum_mdebit,'###0.00') <> String(sum_mcrebit,'###0.00') THEN rslt = 0 arg_msg = '帐务系统初始数据不平衡,不能开帐' GOTO ext END IF //3.更新帐套启动时间 UPDATE cw_accset SET curryear = startyear, currmon = startyearmon , curyearmon = startyear * 100 + startyearmon Where accsetid = :sys_accsetid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新帐套当前期间失败,不能开帐'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF f_set_accsetmessage() = 0 THEN arg_msg = '查询帐套信息失败,不能开帐' rslt = 0 GOTO ext END IF //4.初始化结余表 uo_begin_uo_credence = CREATE uo_credence IF uo_begin_uo_credence.balance(TRUE,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF DESTROY uo_begin_uo_credence ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer new_reports (ref string arg_msg, boolean arg_ifcommit);int rslt=1 insert into reports(accsetid,rid,subaccsetid,rcname,rdname,rpaper,rpercent,rsys, rfilt,rxh,rdatetime,rmonth,rtype,rdept,cropid,rsyntax) SELECT :accsetid, reports.rid, reports.subaccsetid, reports.rcname, reports.rdname, reports.rpaper, reports.rpercent, reports.rsys, reports.rfilt, reports.rxh, reports.rdatetime, reports.rmonth, reports.rtype, reports.rdept, reports.cropid, reports.rsyntax FROM reports where accsetid=0 and cropid=:cropid; if sqlca.sqlcode<>0 then arg_msg='新建帐套失败! >>初始化报表定义资料失败>>'+sqlca.SQLErrText 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 del_accset (long arg_accsetid, ref string arg_msg, boolean arg_ifcommit);//删除帐套 Int rslt = 1 Long ls_j,s_tntblinfo_mxt String del_sqlstr s_tntblinfo_mxt = UpperBound(s_tntblinfo) OPEN(w_sys_wait_jdt) //初始化进度条 w_sys_wait_jdt.Show() w_sys_wait_jdt.wf_accepttol(s_tntblinfo_mxt) w_sys_wait_jdt.wf_inc(0) w_sys_wait_jdt.st_msg.Text = "正在删除帐套..." FOR ls_j = 1 TO s_tntblinfo_mxt w_sys_wait_jdt.wf_inc(ls_j) IF s_tntblinfo[ls_j].table_name = '' THEN CONTINUE // sleep(200) del_sqlstr = '' w_sys_wait_jdt.st_msg.Text = "正在执行删除["+s_tntblinfo[ls_j].table_name+"]..."+String(ls_j)+"/"+String(s_tntblinfo_mxt) IF s_tntblinfo[ls_j].table_name = 'Sys_scIdentity' THEN del_sqlstr = 'delete from ' + s_tntblinfo[ls_j].table_name + ' where sc_id = ' + String(arg_accsetid) ELSEIF s_tntblinfo[ls_j].table_name = 'u_bsnNo' THEN del_sqlstr = 'delete from ' + s_tntblinfo[ls_j].table_name + ' where scid = ' + String(arg_accsetid) ELSE del_sqlstr = 'delete from ' + s_tntblinfo[ls_j].table_name + ' where accsetid = ' + String(arg_accsetid) END IF EXECUTE IMMEDIATE :del_sqlstr USING sqlca; //先执行delete IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = 'Error SQL{'+del_sqlstr+'}'+sqlca.SQLErrText GOTO ext END IF NEXT ext: CLOSE(w_sys_wait_jdt) IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_accset.create call super::create TriggerEvent( this, "constructor" ) end on on uo_accset.destroy TriggerEvent( this, "destructor" ) call super::destroy end on