Дерево значений Недопустимый путь к реквизиту. Путь: "РеквизитФормы"

1. Zakella86 14.08.17 10:29 Сейчас в теме
Добрый день ув. специлаисты форума.
Есть проблемка, уже долго мучаюсь не получается решить
В общем программно создаю дерево значений. Все норм заполняется при первом открытии формы. Но если я хочу перезаполнить дерево новыми значениями выскакивает ошибка как на картинке. Уже и пытался и удалять и обновлять дерево ничего не помогает. Кто может подсказать?
Исходный код

&НаСервере
Функция ОбновитьДерево ()
	
	МассивКолонк = Новый Массив;
	МесяцыНомер = Новый Соответствие;
	//КолонкиСостава = ДеревоБюджетОбъект.Колонки;
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(Тип("Число"));
	КЧ = Новый КвалификаторыЧисла(19,2);
	ОписаниеЧисло = Новый ОписаниеТипов(МассивТипов,КЧ);
	
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Субпрограмма", Справочники.Субпрограммы.ПустаяСсылка());
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Субпрограммы.Владелец КАК Программа,
	|	Субпрограммы.Ссылка КАК Субпрограмма
	|ИЗ
	|	Справочник.Субпрограммы КАК Субпрограммы
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	&Субпрограмма,
	|	&Субпрограмма
	|ГДЕ
	|	ЛОЖЬ
	|ИТОГИ ПО
	|	Программа";
	
	ПредДеревоЗнач = РеквизитФормыВЗначение("ДеревоБюджет");
	ДеревоБюджет.ПолучитьЭлементы().Очистить();
	//ЗначениеВДанныеФормы(ДеревоБюджетОбъект, ДеревоБюджет);

		
	 ДеревоБюджетОбъект = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	 
	Для каждого СтрокаРодитель Из ДеревоБюджетОбъект.Строки Цикл
		Для каждого Строка Из СтрокаРодитель.Строки Цикл
			Строка.Программа = Строка.Субпрограмма;
		КонецЦикла;
	КонецЦикла;
	
	//ДеревоБюджетОбъект.Колонки.Удалить(ДеревоБюджетОбъект.Колонки.Субпрограмма);
	
	Для каждого ТекКолонка Из ДеревоБюджетОбъект.Колонки Цикл
		
		Если Лев(ТекКолонка.Имя,5) = "Месяц" ИЛИ ТекКолонка.Имя = "Итого" Тогда
			
			МассивКолонк.Добавить(ТекКолонка);
			
		КонецЕсли; 
		
	КонецЦикла; 
	
	Для каждого ТекКолонка Из МассивКолонк Цикл
		
		ДеревоБюджетОбъект.Колонки.Удалить(ТекКолонка);
		
	КонецЦикла; 
	
	
	МассивКолонк = Новый Массив;
	Для каждого ТекКолонка Из ДеревоБюджетОбъект.Колонки Цикл
		
		Если Лев(ТекКолонка.Имя,5) = "Месяц" ИЛИ ТекКолонка.Имя = "Итого" Тогда
			
			МассивКолонк.Добавить(ТекКолонка);
			
		КонецЕсли; 
		
	КонецЦикла; 
	
	Для каждого ТекКолонка Из МассивКолонк Цикл
		ДеревоБюджетОбъект.Колонки.Удалить(ТекКолонка);
	КонецЦикла; 
	
	
	Если ЗначениеЗаполнено(Объект.ДатаНачала) И ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
		Н = 0;
		ДатаТек = НачалоМесяца(Объект.ДатаНачала);
		Пока ДатаТек <= КонецДня(Объект.ДатаОкончания) Цикл
			Н = Н + 1;
			ДеревоБюджетОбъект.Колонки.Добавить("Месяц"+Н, ОписаниеЧисло, Формат(ДатаТек, "ДФ='MMMM yyyy'"), 19);
			
			
			МесяцыНомер.Вставить(ДатаТек, Н); 
			ДатаТек = ДобавитьМесяц(ДатаТек, 1);
		КонецЦикла;
		
	КонецЕсли;
	ДеревоБюджетОбъект.Колонки.Добавить("Итого", ОписаниеЧисло, "Итого", 19);
	
	РасчитатьДанныеПоСТрокамДерева(ДеревоБюджетОбъект,МесяцыНомер);

	
	
	МассивУдаляемыхРеквизитов = Новый Массив; 
	
	МассивДобавляемыхРеквизитов = Новый Массив;
	Для Каждого Колонка Из ДеревоБюджетОбъект.Колонки Цикл
		
		МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДеревоБюджет"));
	КонецЦикла;
	
	Для Каждого Колонка Из ПредДеревоЗнач.Колонки Цикл
		Если Колонка.Имя = "Программа" или Колонка.Имя = "Субпрограмма" Тогда
			Продолжить;
		КонецЕсли;
		МассивУдаляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДеревоБюджет"));
	КонецЦикла;
	
	ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов); //вот тут ошибка

	Для Каждого Колонка Из ДеревоБюджетОбъект.Колонки Цикл
		Если Элементы.ДеревоБюджет.ПодчиненныеЭлементы.Найти(Колонка.Имя)=Неопределено  Тогда
			НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы.ДеревоБюджет);
			НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
			НовыйЭлемент.ПутьКДанным = "ДеревоБюджет." + Колонка.Имя;
			НовыйЭлемент.Заголовок  =  Колонка.Заголовок;
			Если Колонка.Имя ="Субпрограмма" Тогда
				НовыйЭлемент.Видимость = Ложь ;
			КонецЕсли;
			НовыйЭлемент.УстановитьДействие("ПриИзменении", 
		"МесяцПриИзменении");
		

		КонецЕсли;
		
		
				
	КонецЦикла;
	
	//ЗначениеВРеквизитФормы(ДеревоБюджетОбъект, ДеревоБюджет);
	ЗначениеВДанныеФормы(ДеревоБюджетОбъект, ДеревоБюджет);

	КлючНастроек = "ПериодыМесяц";	
	Настройки = Новый Соответствие; 
	Настройки.Вставить("МесяцыНомер", МесяцыНомер); 
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПериодыМесяц", КлючНастроек, Настройки); 
	
	ПоказатьПрограммыБезСубПРограмм();
КонецФункции
Показать
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dctvghbdtn 15.01.24 17:34 Сейчас в теме
Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
Пути - это строка.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот