Не могу разобраться с Деревом значений

1. VKuser182018344 08.11.24 14:00 Сейчас в теме
На форме есть реквизит "Дерево значений" с двумя колонками "значение"(число) и наименование(строка). В модуле программно заполняется дерево( строке родителю присваивается пустое значение)

СтрокаРодитель = ДерЗнач.Строки.Добавить();
СтрокаРодитель.Значение="";
СтрокаРодитель.Наименование="";

Затем, после заполнения подчиненных строк передаю значение через метод "Значение в реквизит формы".
ЗначениеВРеквизитФормы(ДерЗнач,"ДеревоЗначений");

По нажатию кнопки на форме, в строку родитель в колонку значение подставляется сумма значений, а в наименование кол-во значений. Проблема в том что на первый раз код отрабатывает нормально, а на вторую попытку дерево заполняется, но при попытке подставить сумму и кол-во выдает ошибку:
Значение не является значением объектного типа (Значение)
{Расширение_учебное Обработка.ВнешняяОбработка1.Форма.ВсеЗадания.Форма(185)}: ДЗ.Значение=СуммаЗначений;
Отладчик показывает что когда код отрабатывает второй раз, у переменной ДЗ тип "неопределено", хотя на первый раз "ДанныеФормыЭлементДерева". Код кнопки сумма и значение:

Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;

Не могу понять с чем это связано. Между первым и вторым нажатием происходит вызов процедуры Очистить:

ДЗ=РеквизитФормыВЗначение("ДеревоЗначений");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ,"ДеревоЗначений");

Начал учить 1С неделю назад, так что проблема скорее всего простая, но я не могу понять как ее решить, Есть предположение что ошибка возникает из-за очистки дерева, хотя пробовал просто не очищая перезаписывать значения, та же ошибка

Ниже весь код:

&НаСервере
Процедура ЗаполнитьТабЗначНаСервере() 

Очистить();	
	ВременнаяПеременная="";
	СуммаЗначений=0;
	КоличествоЗначений=0;
		
	ДерЗнач= Новый ДеревоЗначений;
	
	ДерЗнач.Колонки.Добавить("Значение");
	ДерЗнач.Колонки.Добавить("Наименование");
	
	СтрокаРодитель = ДерЗнач.Строки.Добавить();
	СтрокаРодитель.Значение="";
	СтрокаРодитель.Наименование="";
	
	Для Индекс=1 по Объект.Число Цикл 
		
		ПодчиненнаяСтрока=СтрокаРодитель.Строки.Добавить();
		ПодчиненнаяСтрока.Значение = Индекс;
		
		СуммаЗначений=СуммаЗначений+Индекс;
		
		ПеревестиЧислоВСтроку(Индекс,ВременнаяПеременная);
		ПодчиненнаяСтрока.Наименование=ВременнаяПеременная;
		
	КонецЦикла;
	
	КоличествоЗначений=Индекс-1; 
	
	ЗначениеВРеквизитФормы(ДерЗнач,"ДеревоЗначений");
КонецПроцедуры


&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
	
	Тестовая=ЭтаФорма.ДеревоЗначений;
	ДЗ=Тестовая.НайтиПоИдентификатору(0);
	ДЗ.Значение=СуммаЗначений;
	ДЗ.Наименование=КоличествоЗначений;
	
КонецПроцедуры

&НаСервере
Процедура Очистить() 
	
	ДЗ=РеквизитФормыВЗначение("ДеревоЗначений");
	ДЗ.Строки.Очистить();
	ЗначениеВРеквизитФормы(ДЗ,"ДеревоЗначений");
	
КонецПроцедуры

&НаСервере
Процедура ПеревестиЧислоВСтроку(Число,ВремПер)
	
	ФорматнаяСтрока="Л=ru_RU";
	
	ПараметрыПредметаИсчесления=" , , , , , , , , 0";
	
	//Сообщить(ЧислоПрописью(Число,ФорматнаяСтрока,ПараметрыПредметаИсчесления));
	
	ВремПер=(ЧислоПрописью(Число,ФорматнаяСтрока,ПараметрыПредметаИсчесления)); 
	
КонецПроцедуры	


 
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. user2107191 08.11.24 14:29 Сейчас в теме
(6) Видимо, придется изучить базу - что такое ИдентификаторСтроки у коллекции формы.
11. user2107191 08.11.24 14:35 Сейчас в теме
(10) Проблема описана в (7)
ИдентификаторСтроки и Индекс - не одно и то же.
13. user2107191 08.11.24 14:47 Сейчас в теме
(12) А смысл? Все равно никто не понимает, что делает этот код и откуда в нем берутся мифические переменные СуммаЗначений и КоличествоЗначений.
А ты сам-то понимаешь?
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
    
    Тестовая=ЭтаФорма.ДеревоЗначений;
    ДЗ=Тестовая.НайтиПоИдентификатору(0);
    ДЗ.Значение=СуммаЗначений;
    ДЗ.Наименование=КоличествоЗначений;
    
КонецПроцедуры
Показать


// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. lmnlmn 69 08.11.24 14:23 Сейчас в теме
(1) А еже ли в поле "Число" что-то больше 0 указать тоже не заполняется?
6. VKuser182018344 08.11.24 14:28 Сейчас в теме
(4) Дерево то заполняется, оно на вторую попытку заполнить строку родитель выдает ошибку
Прикрепленные файлы:
7. user2107191 08.11.24 14:29 Сейчас в теме
(6) Видимо, придется изучить базу - что такое ИдентификаторСтроки у коллекции формы.
2. user2107191 08.11.24 14:15 Сейчас в теме
И что ты находишь по Тестовая.НайтиПоИдентификатору(0)?
3. VKuser182018344 08.11.24 14:22 Сейчас в теме
(2) Ну я думал это поиск нулевой строки(родителя), там в принципе синтаксис дает на выбор 2 метода, НайтиПоИдентификатору и ПолучитьЭлементы
5. user2107191 08.11.24 14:26 Сейчас в теме
(3)
Ну я думал
А ты не думай, ты проверь. Отладчик тебе для чего даден?
8. VKuser182018344 08.11.24 14:30 Сейчас в теме
(5)
Прикрепленные файлы:
9. user2107191 08.11.24 14:32 Сейчас в теме
(8) А второй раз? Ты отладчик-то поставь на строку с ошибкой.
10. VKuser182018344 08.11.24 14:33 Сейчас в теме
(5) А на вторую попытку, вот так. Вот я и не могу понять в чем проблема
Прикрепленные файлы:
11. user2107191 08.11.24 14:35 Сейчас в теме
(10) Проблема описана в (7)
ИдентификаторСтроки и Индекс - не одно и то же.
12. VKuser182018344 08.11.24 14:43 Сейчас в теме
(11) А можно конкретный ответ что сделать? Задание надо сделать сегодня, нет времени, потом уже спокойно займусь изучением. Заранее благодарю.
13. user2107191 08.11.24 14:47 Сейчас в теме
(12) А смысл? Все равно никто не понимает, что делает этот код и откуда в нем берутся мифические переменные СуммаЗначений и КоличествоЗначений.
А ты сам-то понимаешь?
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
    
    Тестовая=ЭтаФорма.ДеревоЗначений;
    ДЗ=Тестовая.НайтиПоИдентификатору(0);
    ДЗ.Значение=СуммаЗначений;
    ДЗ.Наименование=КоличествоЗначений;
    
КонецПроцедуры
Показать


// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
17. VKuser182018344 08.11.24 16:51 Сейчас в теме
(13) Долго не мог понять почему не работает метод Текущая строка, оказывается на форме у меня дерево называется ДеревоЗначений1. Вот исправленный код, если кто-то еще столкнется
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
	
	Индекс=Элементы.ДеревоЗначений1.ТекущаяСтрока;
	ТекущаяСтрока=ДеревоЗначений.НайтиПоИдентификатору(Индекс);
	
	ТекущаяСтрока.Значение=СуммаЗначений;
	ТекущаяСтрока.Наименование=КоличествоЗначений;
	
КонецПроцедуры
Показать


В общем, благодарю за пинок в направлении где искать ошибку.
18. user2107191 08.11.24 16:58 Сейчас в теме
(17) Вот примерно так, да.
НО! Запутаешься в "текущих строках".
Привыкай именовать переменные нормально. Например:
ИдентификаторТекущейСтроки = Элементы.ДеревоЗначений.ТекущаяСтрока;
ДанныеТекущейСтроки = ДеревоЗначений.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);

или сразу
ДанныеСтрокиДерева = ДеревоЗначений.НайтиПоИдентификатору(Элементы.ДеревоЗначений.ТекущаяСтрока);

Поверь, самому проще потом будет.
VKuser182018344; +1 Ответить
19. VKuser182018344 08.11.24 17:01 Сейчас в теме
15. lmnlmn 69 08.11.24 15:06 Сейчас в теме
(12) Более чем достаточные ответы есть в (7), (11) и (13). Более детально это уже будет работа за вас. А зачем нам потом такие коллеги? Да, нет ничего плохого в провале задания по причине недостатка знаний и навыков. На то и учёба.
16. VKuser182018344 08.11.24 15:10 Сейчас в теме
(15) Я получил тот толчок, что мне был нужен. Как сделаю задание отмечу ответ как решение
14. VKuser182018344 08.11.24 14:54 Сейчас в теме
(13) Переменные СуммаЗначений и КоличествоЗначений, созданы в реквизите формы и в коде идет обращение именно к этим реквизитам и они изменяются.
Прикрепленные файлы:
Оставьте свое сообщение

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