create procedure dbo.%PROC% @sid varchar(30) = null, @plan_id_s varchar(30)=null, @plan_name varchar(255)=null as .BEGIN('N') begin tran DECLARE @my_subc_id NUMERIC declare @to_plan_id numeric declare @plan_id numeric, @id1 numeric, @id2 numeric, @acc_id numeric, @acc_perpose_id numeric, @owner_class_id numeric, @object_id numeric declare @acc_name1 varchar(255) declare @subc_id numeric declare @parent_id numeric,@acc_num varchar(30),@acc_name varchar(255),@cur_id numeric,@is_out_balance int,@is_test_saldo int,@is_last int, @acc_num_eff varchar(255),@acc_sid_eff varchar(255),@acc_type_id numeric,@is_qty int,@acc_num_eff_rep varchar(255),@type4cur_id numeric, @subc_type_set4lic_id numeric,@external_acc_no varchar(255),@external_acc_name varchar(255),@i_level int,@d_account_id numeric, @date_opened datetime,@date_close datetime,@date_closed datetime select @plan_id=convert(numeric,@plan_id_s) select @to_plan_id=convert(numeric,@sid) declare copy_accounts_level cursor static for select id,parent_id,acc_num,acc_name,cur_id,is_out_balance,is_test_saldo,is_last, acc_num_eff,acc_sid_eff,acc_type_id,is_qty,acc_num_eff_rep,type4cur_id, subc_type_set4lic_id,external_acc_no,external_acc_name,i_level,d_account_id, date_opened,date_close,date_closed from t_accounts where plan_id=@plan_id order by i_level asc for read only OPEN copy_accounts_level FETCH copy_accounts_level into @acc_id,@parent_id,@acc_num,@acc_name,@cur_id,@is_out_balance,@is_test_saldo,@is_last, @acc_num_eff,@acc_sid_eff,@acc_type_id,@is_qty,@acc_num_eff_rep,@type4cur_id, @subc_type_set4lic_id,@external_acc_no,@external_acc_name,@i_level,@d_account_id, @date_opened,@date_close,@date_closed declare @i int select @i=0 WHILE(.CURSOR_STATE = 0) BEGIN if (@i_level=1) BEGIN .TYPE_INIT('ACCOUNTS',1) --.EXIT_MESSAGE_PARM('1',@to_plan_id) .TYPE_ASSIGN(parent_id, @parent_id,1) .TYPE_ASSIGN(acc_num,@acc_num,1) .TYPE_ASSIGN(acc_name,@acc_name,1) .TYPE_ASSIGN(cur_id,@cur_id,1) .TYPE_ASSIGN(plan_id,@to_plan_id,1) .TYPE_ASSIGN(is_out_balance,@is_out_balance,1) .TYPE_ASSIGN(is_test_saldo,@is_test_saldo,1) .TYPE_ASSIGN(is_last,@is_last,1) .TYPE_ASSIGN(acc_num_eff,@acc_num_eff,1) .TYPE_ASSIGN(acc_sid_eff,@acc_sid_eff,1) .TYPE_ASSIGN(acc_type_id,@acc_type_id,1) .TYPE_ASSIGN(is_qty,@is_qty,1) --.TYPE_ASSIGN(acc_num_eff_rep,@acc_num_eff_rep,2) .TYPE_ASSIGN(type4cur_id,@type4cur_id,1) .TYPE_ASSIGN(subc_type_set4lic_id,@subc_type_set4lic_id,1) .TYPE_ASSIGN(external_acc_no,@external_acc_no,1) .TYPE_ASSIGN(external_acc_name,@external_acc_name,1) .TYPE_ASSIGN(i_level,@i_level,1) -- .TYPE_ASSIGN(d_account_id,@d_account_id,2) select @date_opened=getdate() .TYPE_ASSIGN(date_opened,@date_opened,1) -- .TYPE_ASSIGN(date_close,@date_close,1) .TYPE_ASSIGN(date_closed,@date_closed,1) .TYPE_INSERT('ACCOUNTS','NEW',1) update t_accounts set acc_sid_eff='.'+convert(varchar(30),@id1_1)+'.' where id=@id1_1 and @acc_sid_eff is not null declare get_object_acc cursor static for select t_obj2accounts.object_id,acc_perpose_id,owner_class_id from t_obj2accounts where t_obj2accounts.account_id=@acc_id and t_obj2accounts.plan_id=@plan_id for read only OPEN get_object_acc FETCH get_object_acc into @object_id,@acc_perpose_id,@owner_class_id WHILE(.CURSOR_STATE = 0) BEGIN .TYPE_INIT('OBJECTS2ACCOUNTS',3) .TYPE_ASSIGN(object_id,@object_id,3) .TYPE_ASSIGN(account_id,@id1_1,3) .TYPE_ASSIGN(plan_id,@to_plan_id,3) .TYPE_ASSIGN(acc_perpose_id,@acc_perpose_id,3) .TYPE_ASSIGN(owner_class_id,@owner_class_id,3) .TYPE_INSERT('OBJECTS2ACCOUNTS','CRT',3) FETCH get_object_acc into @object_id,@acc_perpose_id,@owner_class_id END CLOSE get_object_acc .DEALLOCATE get_object_acc --select @subc_id=subc_id from t_acc2subconto where acc_id=@id1 --if (@subc_id is not null) -- !!! DECLARE copy_subconto CURSOR STATIC FOR SELECT subc_id FROM t_acc2subconto WHERE acc_id = @acc_id FOR READ ONLY OPEN copy_subconto FETCH copy_subconto INTO @my_subc_id WHILE (.CURSOR_STATE = 0) BEGIN .TYPE_INIT('ACC2SUBCONTO', 5) .TYPE_ASSIGN(acc_id, @my_subc_id, 5) .TYPE_ASSIGN(subc_id, @id1_1, 5) .TYPE_INSERT('ACC2SUBCONTO', 'CRT', 5) FETCH copy_subconto INTO @my_subc_id END CLOSE copy_subconto .DEALLOCATE copy_subconto SELECT @i = @i + 1 END ELSE BEGIN select @plan_id=convert(varchar(30),@plan_id_s) .TYPE_INIT('ACCOUNTS',2) --.EXIT_MESSAGE_PARM('1',@to_plan_id) select @acc_name1=acc_name from t_accounts where id=@parent_id select @id1=id from t_accounts where acc_name=@acc_name1 and plan_id=@to_plan_id .TYPE_ASSIGN(parent_id, @id1,2) .TYPE_ASSIGN(acc_num,@acc_num,2) .TYPE_ASSIGN(acc_name,@acc_name,2) .TYPE_ASSIGN(cur_id,@cur_id,2) .TYPE_ASSIGN(plan_id,@to_plan_id,2) .TYPE_ASSIGN(is_out_balance,@is_out_balance,2) .TYPE_ASSIGN(is_test_saldo,@is_test_saldo,2) .TYPE_ASSIGN(is_last,@is_last,2) .TYPE_ASSIGN(acc_num_eff,@acc_num_eff,2) .TYPE_ASSIGN(acc_sid_eff,@acc_sid_eff,2) .TYPE_ASSIGN(acc_type_id,@acc_type_id,2) .TYPE_ASSIGN(is_qty,@is_qty,2) .TYPE_ASSIGN(type4cur_id,@type4cur_id,2) .TYPE_ASSIGN(subc_type_set4lic_id,@subc_type_set4lic_id,2) .TYPE_ASSIGN(external_acc_no,@external_acc_no,2) .TYPE_ASSIGN(external_acc_name,@external_acc_name,2) .TYPE_ASSIGN(i_level,@i_level,2) -- .TYPE_ASSIGN(d_account_id,@d_account_id,2) select @date_opened=getdate() .TYPE_ASSIGN(date_opened,@date_opened,2) -- .TYPE_ASSIGN(date_close,@date_close,2) .TYPE_ASSIGN(date_closed,@date_closed,2) .TYPE_INSERT('ACCOUNTS','NEW',2) update t_accounts set acc_sid_eff='.'+convert(varchar(30),@id2_1)+'.', acc_num_eff_rep = '.'+@acc_num_eff_rep+'.' where id=@id2_1 and @acc_sid_eff is not null declare get_object_acc1 cursor static for select t_obj2accounts.object_id,acc_perpose_id,owner_class_id from t_obj2accounts where t_obj2accounts.account_id=@acc_id and t_obj2accounts.plan_id=@plan_id for read only OPEN get_object_acc1 FETCH get_object_acc1 into @object_id,@acc_perpose_id,@owner_class_id WHILE(.CURSOR_STATE = 0) begin .TYPE_INIT('OBJECTS2ACCOUNTS',4) .TYPE_ASSIGN(object_id,@object_id,4) .TYPE_ASSIGN(account_id,@id2_1,4) .TYPE_ASSIGN(plan_id,@to_plan_id,4) .TYPE_ASSIGN(acc_perpose_id,@acc_perpose_id,4) .TYPE_ASSIGN(owner_class_id,@owner_class_id,4) .TYPE_INSERT('OBJECTS2ACCOUNTS','CRT',4) FETCH get_object_acc1 into @object_id,@acc_perpose_id,@owner_class_id end CLOSE get_object_acc1 .DEALLOCATE get_object_acc1 --select @subc_id=subc_id from t_acc2subconto where acc_id=@id1 --if (@subc_id is not null) --insert into t_acc2subconto(acc_id,subc_id) values(@id2_1,@subc_id) -- !!! DECLARE copy_subconto CURSOR STATIC FOR SELECT subc_id FROM t_acc2subconto WHERE acc_id = @acc_id FOR READ ONLY OPEN copy_subconto FETCH copy_subconto INTO @my_subc_id WHILE (.CURSOR_STATE = 0) BEGIN .TYPE_INIT('ACC2SUBCONTO', 6) .TYPE_ASSIGN(acc_id, @my_subc_id, 6) .TYPE_ASSIGN(subc_id, @id2_1, 6) .TYPE_INSERT('ACC2SUBCONTO', 'CRT', 6) FETCH copy_subconto INTO @my_subc_id END CLOSE copy_subconto .DEALLOCATE copy_subconto END FETCH copy_accounts_level into @acc_id,@parent_id,@acc_num,@acc_name,@cur_id,@is_out_balance,@is_test_saldo,@is_last, @acc_num_eff,@acc_sid_eff,@acc_type_id,@is_qty,@acc_num_eff_rep,@type4cur_id, @subc_type_set4lic_id,@external_acc_no,@external_acc_name,@i_level,@d_account_id, @date_opened,@date_close,@date_closed END CLOSE copy_accounts_level .DEALLOCATE copy_accounts_level --.EXIT_MESSAGE_PARM('1',@i) /*-------Проводки ----------*/ commit tran .END