123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640 |
- $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
|