$PBExportHeader$uo_init.sru $PBExportComments$初始化数据 forward global type uo_init from nonvisualobject end type end forward global type uo_init from nonvisualobject end type global uo_init uo_init forward prototypes public function integer check_subid (string arg_subid, ref string arg_msg) public function integer initdeptbala (string arg_subid, long arg_deptid, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, decimal arg_debit, decimal arg_credit, decimal arg_balance, ref string arg_msg, boolean arg_ifcommit) public function integer inititembala (string arg_subid, long arg_itemid, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, decimal arg_debit, decimal arg_credit, decimal arg_balance, ref string arg_msg, boolean arg_ifcommit) public function integer initbalance (string arg_subid, decimal arg_ydebit, decimal arg_ycredit, decimal arg_mdebit, decimal arg_mcredit, decimal arg_debit, decimal arg_credit, decimal arg_balance, decimal arg_plhavedone, decimal arg_yrawdebit, decimal arg_yrawcredit, decimal arg_mrawdebit, decimal arg_mrawcredit, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, ref string arg_msg, boolean arg_ifcommit) public function integer initbalance_qty (string arg_subid, decimal arg_damount, decimal arg_camount, decimal arg_bamount, ref string arg_msg, boolean arg_ifcommit) public function integer sub_add_del_update (integer arg_add_or_del, string arg_subid, string arg_p_subid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_clear_initbalance (integer arg_if_raw, ref string arg_msg, long arg_moneyid) public function integer p_update_subid_p (ref string arg_msg) public function integer p_update_subid_p_qty (ref string arg_msg) end prototypes public function integer check_subid (string arg_subid, ref string arg_msg);//检查科目 int rslt=1,cnt select count(subid) into :cnt from cw_subject where accsetid=:sys_accsetid and subid=:arg_subid; 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 ext: return rslt end function public function integer initdeptbala (string arg_subid, long arg_deptid, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, decimal arg_debit, decimal arg_credit, decimal arg_balance, ref string arg_msg, boolean arg_ifcommit);//部门初始化 //initdeptbala(arg_subid,arg_deptid,arg_rawdebit,arg_rawcredit,arg_rawbalance, // arg_debit,arg_credit,arg_balance,arg_msg,arg_ifcommit) int rslt=1 if isnull(arg_rawdebit) then arg_rawdebit=0 if isnull(arg_rawcredit) then arg_rawcredit=0 if isnull(arg_rawbalance) then arg_rawbalance=0 if isnull(arg_debit) then arg_debit=0 if isnull(arg_credit) then arg_credit=0 if isnull(arg_balance) then arg_balance=0 if check_subid(arg_subid,arg_msg)=0 then rslt=0 goto ext end if update cw_initdeptbala set rawdebit=:arg_rawdebit, rawcredit=:arg_rawcredit, rawbalance=:arg_rawbalance, debit=:arg_debit, credit=:arg_credit, balance=:arg_balance where accsetid=:sys_accsetid and subid=:arg_subid and deptid=:arg_deptid; if sqlca.sqlcode=0 then if sqlca.sqlnrows=0 then insert into cw_initdeptbala(accsetid,subid,deptid,rawdebit,rawcredit,rawbalance,debit,credit,balance) values(:sys_accsetid,:arg_subid,:arg_deptid,:arg_rawdebit,:arg_rawcredit,:arg_rawbalance,:arg_debit,:arg_credit,:arg_balance); if sqlca.sqlcode<>0 then arg_msg='部门初始化失败,插入'+sqlca.sqlerrtext rslt=0 goto ext end if end if else 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 inititembala (string arg_subid, long arg_itemid, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, decimal arg_debit, decimal arg_credit, decimal arg_balance, ref string arg_msg, boolean arg_ifcommit);//项目初始化 //inititembala(arg_subid,arg_itemid,arg_rawdebit,arg_rawcredit,arg_rawbalance, // arg_debit,arg_credit,arg_balance,arg_msg,arg_ifcommit) int rslt=1 if isnull(arg_rawdebit) then arg_rawdebit=0 if isnull(arg_rawcredit) then arg_rawcredit=0 if isnull(arg_rawbalance) then arg_rawbalance=0 if isnull(arg_debit) then arg_debit=0 if isnull(arg_credit) then arg_credit=0 if isnull(arg_balance) then arg_balance=0 if check_subid(arg_subid,arg_msg)=0 then rslt=0 goto ext end if update cw_inititembala set rawdebit=:arg_rawdebit, rawcredit=:arg_rawcredit, rawbalance=:arg_rawbalance, debit=:arg_debit, credit=:arg_credit, balance=:arg_balance where accsetid=:sys_accsetid and subid=:arg_subid and itemid=:arg_itemid; if sqlca.sqlcode=0 then if sqlca.sqlnrows=0 then insert into cw_inititembala(accsetid,subid,itemid,rawdebit,rawcredit,rawbalance,debit,credit,balance) values(:sys_accsetid,:arg_subid,:arg_itemid,:arg_rawdebit,:arg_rawcredit,:arg_rawbalance,:arg_debit,:arg_credit,:arg_balance); if sqlca.sqlcode<>0 then arg_msg='项目初始化失败,插入'+sqlca.sqlerrtext rslt=0 goto ext end if end if else 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 initbalance (string arg_subid, decimal arg_ydebit, decimal arg_ycredit, decimal arg_mdebit, decimal arg_mcredit, decimal arg_debit, decimal arg_credit, decimal arg_balance, decimal arg_plhavedone, decimal arg_yrawdebit, decimal arg_yrawcredit, decimal arg_mrawdebit, decimal arg_mrawcredit, decimal arg_rawdebit, decimal arg_rawcredit, decimal arg_rawbalance, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: uo_init::initbalance() //-------------------------------------------------------------------- // Description: 初始期初数 //-------------------------------------------------------------------- // Arguments: // string arg_subid // decimal arg_ydebit // decimal arg_ycredit // decimal arg_mdebit // decimal arg_mcredit // decimal arg_debit // decimal arg_credit // decimal arg_balance // decimal arg_plhavedone // decimal arg_yrawdebit // decimal arg_yrawcredit // decimal arg_mrawdebit // decimal arg_mrawcredit // decimal arg_rawdebit // decimal arg_rawcredit // decimal arg_rawbalance // string arg_msg // boolean arg_ifcommit //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.11.16 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 String rst_psubid uo_subject uo_sub uo_sub = CREATE uo_subject IF check_subid(arg_subid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE cw_initbalance SET ydebit = :arg_ydebit, ycredit = :arg_ycredit, mdebit = :arg_mdebit, mcredit = :arg_mcredit, debit = :arg_debit, credit = :arg_credit, balance = :arg_balance, plhavedone = :arg_plhavedone, yrawdebit = :arg_yrawdebit, yrawcredit = :arg_yrawcredit, mrawdebit = :arg_mrawdebit, mrawcredit = :arg_mrawcredit, rawdebit = :arg_rawdebit, rawcredit = :arg_rawcredit, rawbalance = :arg_rawbalance WHERE accsetid = :sys_accsetid AND subid = :arg_subid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO cw_initbalance(accsetid,subid, ydebit,ycredit,mdebit,mcredit,debit,credit,balance,plhavedone, yrawdebit,yrawcredit,mrawdebit,mrawcredit,rawdebit,rawcredit,rawbalance) VALUES(:sys_accsetid,:arg_subid, :arg_ydebit,:arg_ycredit,:arg_mdebit,:arg_mcredit,:arg_debit,:arg_credit,:arg_balance,:arg_plhavedone, :arg_yrawdebit,:arg_yrawcredit,:arg_mrawdebit,:arg_mrawcredit,:arg_rawdebit,:arg_rawcredit,:arg_rawbalance); IF sqlca.SQLCode <> 0 THEN arg_msg = '初始化科目:'+arg_subid+'期初数失败,插入'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '更新会计科目:'+arg_subid+'期初数据失败'+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 initbalance_qty (string arg_subid, decimal arg_damount, decimal arg_camount, decimal arg_bamount, ref string arg_msg, boolean arg_ifcommit);//初始期初数[数量] //initbalance_qty(arg_subid,arg_damount,arg_camount,arg_bamount,ref arg_msg,arg_ifcommit) int rslt=1 if isnull(arg_damount) then arg_damount=0 if isnull(arg_camount) then arg_camount=0 if isnull(arg_bamount) then arg_bamount=0 if check_subid(arg_subid,arg_msg)=0 then rslt=0 goto ext end if update cw_initbalance set damount=:arg_damount, camount=:arg_camount, bamount=:arg_bamount where accsetid=:sys_accsetid and subid=:arg_subid; if sqlca.sqlcode=0 then if sqlca.sqlnrows=0 then insert into cw_initbalance(accsetid,subid,damount,camount,bamount) values(:sys_accsetid,:arg_subid,:arg_damount,:arg_camount,:arg_bamount); if sqlca.sqlcode<>0 then arg_msg='初始化期初数失败,插入'+sqlca.sqlerrtext rslt=0 goto ext end if end if else 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 sub_add_del_update (integer arg_add_or_del, string arg_subid, string arg_p_subid, ref string arg_msg, boolean arg_ifcommit);//增加_删除第一子科目 //add_del_update(arg_add_or_del,arg_subid,ref arg_msg,if_commit) //arg_add_or_del 0:del,1:add //1.更新凭证 //2.更新项目初始化 //3.更新部门初始化 //4.更新帐务初始化 //5.更新结余 long rslt=1 if arg_add_or_del=1 then //1.更新凭证 update cw_credencemx set subid=:arg_subid where cw_credencemx.accsetid=:sys_accsetid and cw_credencemx.subid=:arg_p_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'新建第一子科目:更新父科目为子科目失败[更新凭证]'+sqlca.sqlerrtext) rslt=0 goto ext end if //2.更新项目初始化 insert into cw_inititembala(accsetid,subid,itemid,rawdebit,rawcredit,rawbalance,debit,credit,balance) select :sys_accsetid,:arg_subid,itemid,rawdebit,rawcredit,rawbalance,debit,credit,balance from cw_inititembala where cw_inititembala.accsetid=:sys_accsetid and cw_inititembala.subid=:arg_p_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'新建第一子科目失败[项目初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //3.更新部门初始化 insert into cw_initdeptbala(accsetid,subid,deptid,rawdebit,rawcredit,rawbalance,debit,credit,balance) select :sys_accsetid,:arg_subid,deptid,rawdebit,rawcredit,rawbalance,debit,credit,balance from cw_initdeptbala where cw_initdeptbala.accsetid=:sys_accsetid and cw_initdeptbala.subid=:arg_p_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'新建第一子科目失败[部门初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //4.更新帐务初始化 insert into cw_initbalance(accsetid,subid,moneyid,detailflag,dcflag,hsqty, rawdebit,rawcredit,rawbalance,yrawdebit,yrawcredit,mrawdebit,mrawcredit,damount, debit,camount,credit,bamount,balance,ydebit,ycredit,mdebit,mcredit,plhavedone) select :sys_accsetid,:arg_subid,moneyid,detailflag,dcflag,hsqty, rawdebit,rawcredit,rawbalance,yrawdebit,yrawcredit,mrawdebit,mrawcredit,damount, debit,camount,credit,bamount,balance,ydebit,ycredit,mdebit,mcredit,plhavedone from cw_initbalance where cw_initbalance.accsetid=:sys_accsetid and cw_initbalance.subid=:arg_p_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'新建第一子科目失败[帐务初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //5.更新结余 insert into cw_balance(accsetid,subid,yearmon,ybrawdebit, ybrawcredit,brawdebit,brawcredit,rawdebit,rawcredit,erawdebit,erawcredit,yrawdebit,yrawcredit, ybcredit,bdebit,bcredit,debit,credit,edebit,ecredit,ydebit,ycredit, ybamt,ydamt,ycamt,bamt,damt,camt) select :sys_accsetid,:arg_subid,yearmon,ybrawdebit, ybrawcredit,brawdebit,brawcredit,rawdebit,rawcredit,erawdebit,erawcredit,yrawdebit,yrawcredit, ybcredit,bdebit,bcredit,debit,credit,edebit,ecredit,ydebit,ycredit, ybamt,ydamt,ycamt,bamt,damt,camt from cw_balance where cw_balance.accsetid=:sys_accsetid and cw_balance.subid=:arg_p_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'新建第一子科目失败[更新结余]'+sqlca.sqlerrtext) rslt=0 goto ext end if else //1.更新凭证 update cw_credencemx set subid=:arg_p_subid where cw_credencemx.accsetid=:sys_accsetid and cw_credencemx.subid=:arg_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'删除第一子科目:更新子科目为父科目失败[更新凭证]'+sqlca.sqlerrtext) rslt=0 goto ext end if //2.更新项目初始化 delete cw_inititembala where cw_inititembala.accsetid=:sys_accsetid and cw_inititembala.subid=:arg_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'删除第一子科目失败[项目初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //3.更新部门初始化 delete cw_initdeptbala where cw_initdeptbala.accsetid=:sys_accsetid and cw_initdeptbala.subid=:arg_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'删除第一子科目失败[部门初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //4.更新帐务初始化 delete cw_initbalance where cw_initbalance.accsetid=:sys_accsetid and cw_initbalance.subid=:arg_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'删除第一子科目失败[帐务初始化]'+sqlca.sqlerrtext) rslt=0 goto ext end if //5.更新结余 delete cw_balance where cw_balance.accsetid=:sys_accsetid and cw_balance.subid=:arg_subid; if sqlca.sqlcode=-1 then messagebox(publ_operator,'删除第一子科目失败[更新结余]'+sqlca.sqlerrtext) rslt=0 goto ext end if 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_clear_initbalance (integer arg_if_raw, ref string arg_msg, long arg_moneyid);//==================================================================== // Function: uo_init::uof_clear_initbalance() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // integer arg_if_raw // string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.11.16 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 UPDATE cw_initbalance SET cw_initbalance.ydebit = 0 , cw_initbalance.ycredit = 0 , cw_initbalance.mdebit = 0 , cw_initbalance.mcredit = 0 , cw_initbalance.debit = 0 , cw_initbalance.credit = 0 , cw_initbalance.balance = 0 , cw_initbalance.plhavedone = 0 , cw_initbalance.yrawdebit = 0 , cw_initbalance.yrawcredit = 0 , cw_initbalance.mrawdebit = 0 , cw_initbalance.mrawcredit = 0 , cw_initbalance.rawdebit = 0 , cw_initbalance.rawcredit = 0 , cw_initbalance.rawbalance = 0 FROM cw_initbalance,cw_subject WHERE cw_initbalance.accsetid = :sys_accsetid AND cw_initbalance.accsetid = cw_subject.accsetid AND cw_initbalance.subid = cw_subject.subid AND cw_subject.hswb = :arg_if_raw AND cw_subject.detailflag = 1 And ( cw_subject.moneyid = :arg_moneyid OR :arg_moneyid = 0 ) ; IF sqlca.SQLCode <> 0 THEN arg_msg = '初始化金额清零失败 >>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE cw_initbalance SET cw_initbalance.ydebit = 0 , cw_initbalance.ycredit = 0 , cw_initbalance.mdebit = 0 , cw_initbalance.mcredit = 0 , cw_initbalance.debit = 0 , cw_initbalance.credit = 0 , cw_initbalance.balance = 0 , cw_initbalance.plhavedone = 0 , cw_initbalance.yrawdebit = 0 , cw_initbalance.yrawcredit = 0 , cw_initbalance.mrawdebit = 0 , cw_initbalance.mrawcredit = 0 , cw_initbalance.rawdebit = 0 , cw_initbalance.rawcredit = 0 , cw_initbalance.rawbalance = 0 FROM cw_initbalance,cw_subject WHERE cw_initbalance.accsetid = :sys_accsetid AND cw_initbalance.accsetid = cw_subject.accsetid AND cw_initbalance.subid = cw_subject.subid AND cw_subject.detailflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '初始化金额清零失败(上级科目) >>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer p_update_subid_p (ref string arg_msg);//============================================================================== // 函数: uo_init::p_update_subid_p() //------------------------------------------------------------------------------ // 描述: //------------------------------------------------------------------------------ // 参数: // string arg_subid // string arg_msg //------------------------------------------------------------------------------ // 返回值: integer //------------------------------------------------------------------------------ // 作者: Trueway Lee 日期: 2005.11.21 //------------------------------------------------------------------------------ // 修改历史: // //============================================================================== Int rslt = 1 Long ll_i,k String ls_p_subid String ls_subid,ls_arr_subid[] uo_subject uo_sub uo_sub = CREATE uo_subject Decimal ld_ydebit[],ld_ycredit[],ld_mdebit[],ld_mcredit[] Decimal ld_debit[],ld_credit[],ld_balance[],ld_plhavedone[] Decimal ld_yrawdebit[],ld_yrawcredit[],ld_mrawdebit[],ld_mrawcredit[] Decimal ld_rawdebit[],ld_rawcredit[],ld_rawbalance[] Decimal ls_ydebit,ls_ycredit,ls_mdebit,ls_mcredit Decimal ls_debit,ls_credit,ls_balance,ls_plhavedone Decimal ls_yrawdebit,ls_yrawcredit,ls_mrawdebit,ls_mrawcredit Decimal ls_rawdebit,ls_rawcredit,ls_rawbalance DECLARE cur_pf CURSOR FOR SELECT cw_subject.subid FROM cw_subject,cw_initbalance WHERE cw_subject.accsetid = :sys_accsetid and cw_subject.accsetid = cw_initbalance.accsetid and cw_subject.subid = cw_initbalance.subid AND cw_subject.detailflag = 1; OPEN cur_pf; FETCH cur_pf INTO :ls_subid; DO WHILE sqlca.SQLCode = 0 k++ ls_arr_subid[k] = ls_subid FETCH cur_pf INTO :ls_subid; LOOP CLOSE cur_pf; FOR ll_i = 1 TO k SELECT ydebit , ycredit , mdebit , mcredit, debit , credit, balance , plhavedone, yrawdebit , yrawcredit , mrawdebit , mrawcredit, rawdebit, rawcredit , rawbalance INTO :ls_ydebit, :ls_ycredit, :ls_mdebit, :ls_mcredit, :ls_debit, :ls_credit, :ls_balance, :ls_plhavedone, :ls_yrawdebit, :ls_yrawcredit, :ls_mrawdebit, :ls_mrawcredit, :ls_rawdebit, :ls_rawcredit, :ls_rawbalance FROM cw_initbalance Where accsetid = :sys_accsetid AND subid = :ls_arr_subid[ll_i]; IF sqlca.SQLCode = -1 THEN arg_msg = '查询科目:'+ls_arr_subid[ll_i]+'初始化金额失败' rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_ydebit[ll_i] = 0 ld_ycredit[ll_i] = 0 ld_mdebit[ll_i] = 0 ld_mcredit[ll_i] = 0 ld_debit[ll_i] = 0 ld_credit[ll_i] = 0 ld_balance[ll_i] = 0 ld_plhavedone[ll_i] = 0 ld_yrawdebit[ll_i] = 0 ld_yrawcredit[ll_i] = 0 ld_mrawdebit[ll_i] = 0 ld_mrawcredit[ll_i] = 0 ld_rawdebit[ll_i] = 0 ld_rawcredit[ll_i] = 0 ld_rawbalance[ll_i] = 0 ELSEIF sqlca.SQLCode = 0 THEN ld_ydebit[ll_i] = ls_ydebit ld_ycredit[ll_i] = ls_ycredit ld_mdebit[ll_i] = ls_mdebit ld_mcredit[ll_i] = ls_mcredit ld_debit[ll_i] = ls_debit ld_credit[ll_i] = ls_credit ld_balance[ll_i] = ls_balance ld_plhavedone[ll_i] = ls_plhavedone ld_yrawdebit[ll_i] = ls_yrawdebit ld_yrawcredit[ll_i] = ls_yrawcredit ld_mrawdebit[ll_i] = ls_mrawdebit ld_mrawcredit[ll_i] = ls_mrawcredit ld_rawdebit[ll_i] = ls_rawdebit ld_rawcredit[ll_i] = ls_rawcredit ld_rawbalance[ll_i] = ls_rawbalance END IF NEXT FOR ll_i = 1 TO k ls_p_subid = uo_sub.p_parent_subid(ls_arr_subid[ll_i]) DO WHILE ls_p_subid <> '' UPDATE cw_initbalance SET ydebit = ydebit + :ld_ydebit[ll_i] , ycredit = ycredit + :ld_ycredit[ll_i] , mdebit = mdebit + :ld_mdebit[ll_i] , mcredit = mcredit + :ld_mcredit[ll_i], debit = debit + :ld_debit[ll_i], credit = credit + :ld_credit[ll_i], balance = balance + :ld_balance[ll_i] , plhavedone = plhavedone + :ld_plhavedone[ll_i], yrawdebit = yrawdebit + :ld_yrawdebit[ll_i], yrawcredit = yrawcredit + :ld_yrawcredit[ll_i] , mrawdebit = mrawdebit + :ld_mrawdebit[ll_i], mrawcredit = mrawcredit + :ld_mrawcredit[ll_i], rawdebit = rawdebit + :ld_rawdebit[ll_i] , rawcredit = rawcredit + :ld_rawcredit[ll_i] , rawbalance = rawbalance + :ld_rawbalance[ll_i] WHERE accsetid = :sys_accsetid AND subid = :ls_p_subid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO cw_initbalance(accsetid,subid, ydebit,ycredit,mdebit,mcredit,debit,credit,balance,plhavedone, yrawdebit,yrawcredit,mrawdebit,mrawcredit,rawdebit,rawcredit,rawbalance) VALUES(:sys_accsetid,:ls_p_subid, :ld_ydebit[ll_i],:ld_ycredit[ll_i],:ld_mdebit[ll_i],:ld_mcredit[ll_i], :ld_debit[ll_i],:ld_credit[ll_i],:ld_balance[ll_i],:ld_plhavedone[ll_i], :ld_yrawdebit[ll_i],:ld_yrawcredit[ll_i],:ld_mrawdebit[ll_i],:ld_mrawcredit[ll_i], :ld_rawdebit[ll_i],:ld_rawcredit[ll_i],:ld_rawbalance[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '初始化期初数[上级科目]失败,插入'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '更新期初数据[上级科目]失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ls_p_subid = uo_sub.p_parent_subid(ls_p_subid) LOOP NEXT ext : IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY uo_sub RETURN rslt end function public function integer p_update_subid_p_qty (ref string arg_msg);//============================================================================== // 函数: uo_init::p_update_subid_p() //------------------------------------------------------------------------------ // 描述: //------------------------------------------------------------------------------ // 参数: // string arg_subid // string arg_msg //------------------------------------------------------------------------------ // 返回值: integer //------------------------------------------------------------------------------ // 作者: Trueway Lee 日期: 2005.11.21 //------------------------------------------------------------------------------ // 修改历史: // //============================================================================== Int rslt = 1 Long ll_i,k String ls_p_subid String ls_subid,ls_arr_subid[] uo_subject uo_sub uo_sub = CREATE uo_subject decimal ld_DAmount[],ld_CAmount[],ld_BAmount[] decimal ls_DAmount,ls_CAmount,ls_BAmount DECLARE cur_pf CURSOR FOR SELECT cw_subject.subid FROM cw_subject,cw_initbalance WHERE cw_subject.accsetid = :sys_accsetid and cw_subject.accsetid = cw_initbalance.accsetid and cw_subject.subid = cw_initbalance.subid AND cw_subject.detailflag = 1; OPEN cur_pf; FETCH cur_pf INTO :ls_subid; DO WHILE sqlca.SQLCode = 0 k++ ls_arr_subid[k] = ls_subid FETCH cur_pf INTO :ls_subid; LOOP CLOSE cur_pf; FOR ll_i = 1 TO k SELECT DAmount, CAmount, BAmount INTO :ls_DAmount, :ls_CAmount, :ls_BAmount FROM cw_initbalance Where accsetid = :sys_accsetid AND subid = :ls_arr_subid[ll_i]; IF sqlca.SQLCode = -1 THEN arg_msg = '查询科目:'+ls_arr_subid[ll_i]+'初始化金额失败' rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_DAmount[ll_i] = 0 ld_CAmount[ll_i] = 0 ld_BAmount[ll_i] = 0 ELSEIF sqlca.SQLCode = 0 THEN ld_DAmount[ll_i] = ls_DAmount ld_CAmount[ll_i] = ls_CAmount ld_BAmount[ll_i] = ls_BAmount END IF NEXT FOR ll_i = 1 TO k ls_p_subid = uo_sub.p_parent_subid(ls_arr_subid[ll_i]) DO WHILE ls_p_subid <> '' UPDATE cw_initbalance SET DAmount = DAmount + :ld_DAmount[ll_i], CAmount = CAmount + :ld_CAmount[ll_i], BAmount = BAmount + :ld_BAmount[ll_i] WHERE accsetid = :sys_accsetid AND subid = :ls_p_subid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO cw_initbalance(accsetid,subid, DAmount,CAmount,BAmount) VALUES(:sys_accsetid,:ls_p_subid, :ld_DAmount[ll_i],:ld_CAmount[ll_i],:ld_BAmount[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '初始化期初数[上级科目]失败,插入'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '更新期初数据[上级科目]失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ls_p_subid = uo_sub.p_parent_subid(ls_p_subid) LOOP NEXT ext : IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY uo_sub RETURN rslt end function on uo_init.create TriggerEvent( this, "constructor" ) end on on uo_init.destroy TriggerEvent( this, "destructor" ) end on