Добавить строку в дерево значений на сервере

1. aalu14 19.04.23 15:03 Сейчас в теме
Необходимо в текущую строку дерева значений записать данные в процедуре с директивой На сервере. В ОФ работает
Элементы.ДеревоДокументов.ТекущаяСтрока = мДерево;

В уф падает: "Ошибка передачи данных между клиентом и сервером. Отсутствует отображение для типа 'СтрокаДереваЗначений'".
Падает при открытии формы, обработки запускаются в ПриСозданииНаСервере.
мДерево - строка дерева значений, как ее добавить в дерево значений на сервере?
Заранее спасибо!
По теме из базы знаний
Найденные решения
28. Sashares 34 21.04.23 18:11 Сейчас в теме
(27)Плохая идея с идентификатором.

Попробуйте так:

&НаСервере
Перем ТекСтрока;

&НаСервере
Процедура ВывестиРодительскиеДокументы(ДокументСсылка)
///.......................................
Если СписокРеквизитов.Количество() = 1 Тогда
        ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
    ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
        ВывестиБезРодителей(СписокРеквизитов);
        ТекСтрока = ДеревоДокументов;
    КонецЕсли;
   
Если ТекСтрока = Неопределено Тогда
    Строка = ДеревоДокументов.ПолучитьЭлементы().Добавить();
Иначе
    Строка  = ТекСтрока.ПолучитьЭлементы().Добавить();
КонецЕсли; 
ТекСтрока =  Строка;
  
    
    Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
                           | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
                           
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
    КонецЕсли;
    
    Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
    КонецЕсли;
    
    Выборка  = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Строка.Ссылка= Выборка.Ссылка;
        Строка.Проведен = Выборка.Проведен;
        Строка.ПометкаУдаления = Выборка.ПометкаУдаления;
        Строка.ДокументПредставление = Выборка.Представление;
        Строка.СуммаДокумента = Выборка.СуммаДокумента;
        Строка.ВалютаДокумента = Выборка.ВалютаДокумента;
        Строка.ВидДокумента = Выборка.Метаданные;
        мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
    Иначе
        Строка.Ссылка= ДокументСсылка;
        Строка.ДокументПредставление = Строка(ДокументСсылка);
        Строка.СуммаДокумента = ДокументСсылка.СуммаДокумента;
        мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
    КонецЕсли;
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. Sashares 34 19.04.23 15:38 Сейчас в теме
(1)А где вы строку дерева добыли?
14. glek 119 20.04.23 10:09 Сейчас в теме
(1) Идентификатор = Элементы.ДеревоДокументов.ТекущаяСтрока
ДобавитьНаСервере(Идентификатор)

процедура ДобавитьНаСервере(Идентификатор)
ДанныеДерева = деревоДокументов.НайтиПоИдентификатору(Идентификатор)
ПодчиненнаяСтрока = ДанныеДерева.ПолучитьЭлементы().добавить();
15. aalu14 20.04.23 10:14 Сейчас в теме
(14) Идентификатор = Элементы.ДеревоДокументов.ТекущаяСтрока это же на клиенте?
Мне необходимо получить родителя (подойдет просто последняя строка, ее и буду брать за родителя) на сервере(
16. glek 119 20.04.23 10:44 Сейчас в теме
(15) Получить родителя от текущей строки?
17. aalu14 21.04.23 09:41 Сейчас в теме
(16) Я добился иерархии в дереве значений, но только в строке дерева значений. Т.е. у меня тип значения "СтрокаДереваЗначений", значение в отладчике раскрывается иерархией. Как мне теперь На Сервере записать эту строку в дерево значений ?
Пытаюсь вот так, но дерево пустое:

//Вот тут я получаю строку (к сожалению, если сразу в реквизит формы (дерево) записывать, не получается добиться иерархии, так как при новом обращении к реквизиту через "РеквизитФормыВЗначение" не виден родитель, т.е. записывается новая строка, а не подстрока)

Дерево = ВывестиРодительскиеДокументы(ДокументСсылка);

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


Прошу помочь, не исключаю, что делаю какую-то глупость...
18. aalu14 21.04.23 10:17 Сейчас в теме
(16) К чему сейчас пришел:
Строка = ВывестиРодительскиеДокументы(ДокументСсылка);	

тДерево = РеквизитФормыВЗначение("ДеревоДокументов");

СтрокаДерева = тДерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДерева,Строка);

ЗначениеВРеквизитФормы(тДерево,"ДеревоДокументов");
Показать


Но дерево выводится без иерархии, в "Строка" иерархия есть, но в "СтрокаДерево" помещается без иерархии
19. Sashares 34 21.04.23 12:07 Сейчас в теме
20. aalu14 21.04.23 13:05 Сейчас в теме
(19)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.ДокументСсылка = Неопределено ИЛИ Параметры.ДокументСсылка.Пустая() Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	ДокументСсылка = Параметры.ДокументСсылка;
	мУжеВСписке = Новый Соответствие;
        мКэшРеквизитовДокумента = Новый Соответствие;
	мКэшПраваДоступаКМетаданным = Новый Соответствие;
	ВывестиДеревоДокументов(); //!!!
КонецПроцедуры

&НаСервере
Процедура ВывестиДеревоДокументов()		
	Дерево = ВывестиРодительскиеДокументы(ДокументСсылка);	
	ЗначениеВРеквизитФормы(Дерево,"ДеревоДокументов");
        
        //Если Дерево - дерево, то возвращается без иерархии
        //Если Дерево - строка дерева, то возвращается с нужной правильной иерархией, но в таком случае не получается строку 
        //поместить в дерево реквизит формы

КонецПроцедуры

&НаСервере
Функция ВывестиРодительскиеДокументы(ДокументСсылка)

	МетаданныеДокумента = ДокументСсылка.Метаданные();
	СписокРеквизитов = Новый СписокЗначений;
	МетаданныеДокументы = Метаданные.Документы; 
	мКэшМетаданныеРеквизита = новый соответствие;
	
	Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл
		ТипыРеквизита = Реквизит.Тип.Типы();
		Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
			МетаданныеРеквизита = мКэшМетаданныеРеквизита.Получить(ТекущийТип);
			Если МетаданныеРеквизита = неопределено Тогда
				МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
				мКэшМетаданныеРеквизита.Вставить(ТекущийТип,МетаданныеРеквизита);
			КонецЕсли;
					
			Если МетаданныеРеквизита<>Неопределено 
				 И МетаданныеДокументы.Содержит(МетаданныеРеквизита) 
				 И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
				Попытка
					ЗначениеРеквизита = ДокументСсылка[Реквизит.Имя];
				Исключение
					Прервать;
				КонецПопытки;
				ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая() И ТипЗнч(ЗначениеРеквизита) = ТекущийТип 
					 И мУжеВСписке[ЗначениеРеквизита] = Неопределено И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда
					Попытка
						СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
					Исключение
						 ОтладкаТекстОшибки = ОписаниеОшибки();
					КонецПопытки;	
				КонецЕсли;
			КонецЕсли;			
			
		КонецЦикла;
	КонецЦикла;
	
	Для Каждого ТЧ Из МетаданныеДокумента.ТабличныеЧасти Цикл
		СтрРеквизитов = "";
		
		Попытка
			СодержимоеТЧ = ДокументСсылка[ТЧ.Имя].Выгрузить();
		Исключение
			Прервать;
		КонецПопытки;
		
		Для Каждого Реквизит ИЗ ТЧ.Реквизиты Цикл
			ТипыРеквизита = Реквизит.Тип.Типы();
			Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
				МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);				
				Если МетаданныеРеквизита<>Неопределено И МетаданныеДокументы.Содержит(МетаданныеРеквизита) 
					И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
					СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя;
					Прервать;
				КонецЕсли;						
			КонецЦикла;
		КонецЦикла;
		
		СодержимоеТЧ.Свернуть(СтрРеквизитов);
		Для Каждого КолонкаТЧ ИЗ СодержимоеТЧ.Колонки Цикл
			Для Каждого СтрокаТЧ ИЗ СодержимоеТЧ Цикл
				Попытка
					ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя];
				Исключение
					Продолжить;
				КонецПопытки;
				МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита));
				Если МетаданныеЗначения = Неопределено Тогда
					// базовый тип
					Продолжить;
				КонецЕсли;
				
				ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая()
					 И МетаданныеДокументы.Содержит(МетаданныеЗначения)
					 И мУжеВСписке[ЗначениеРеквизита] = Неопределено Тогда
					Если СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда
						Попытка
							СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
						Исключение
							ОтладкаТекстОшибки = ОписаниеОшибки();
						КонецПопытки;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;		
	КонецЦикла;
	СписокРеквизитов.СортироватьПоПредставлению();
	мУжеВСписке.Вставить(ДокументСсылка, Истина);
	
	Если СписокРеквизитов.Количество() = 1 Тогда
		Родитель = ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение); //Вот тут рекурсия
	ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
		Родитель = ВывестиБезРодителей(СписокРеквизитов);	//Вывожу верхние элементы. Если возвращаю дерево, то*
	КонецЕсли;

	СтрокаРодителя = Родитель.Строки.Добавить(); //*вот здесь строка ставится новой строкой из-за этого нет иерархии, если 
                                                                                          //возвращаю строку, то здесь в строке есть последний добавленный элемент, 
                                                                                          //который является родителем и далее при завершении предыдущих вызовов
                                                                                          //элементы становятся дочерними

	Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
						   | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
						   
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
	КонецЕсли;
	
	Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
	КонецЕсли;
	
	Выборка  = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда		
		
		СтрокаРодителя.Ссылка= Выборка.Ссылка;
		СтрокаРодителя.Проведен = Выборка.Проведен;
		СтрокаРодителя.ПометкаУдаления = Выборка.ПометкаУдаления;
		СтрокаРодителя.ДокументПредставление = Выборка.Представление;
		СтрокаРодителя.СуммаДокумента = Выборка.СуммаДокумента;
		СтрокаРодителя.ВалютаДокумента = Выборка.ВалютаДокумента;
		СтрокаРодителя.ВидДокумента = Выборка.Метаданные;				
	Иначе
		СтрокаРодителя.Ссылка= ДокументСсылка;
		СтрокаРодителя.ДокументПредставление = Строка(ДокументСсылка);
		СтрокаРодителя.СуммаДокумента = ДокументСсылка.СуммаДокумента;
	КонецЕсли;
	Возврат Родитель;
	//Возврат СтрокаРодителя;
КонецФункции

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

	
	Для Каждого ЭлементСписка Из СписокДокументов Цикл
		
		МетаданныеДокумента = ЭлементСписка.Значение.Метаданные();
		
		Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
		| ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
		
		Запрос.УстановитьПараметр("Ссылка", ЭлементСписка.Значение);
		
		Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
		Иначе
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
		КонецЕсли;
		
		Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
		Иначе
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
		КонецЕсли;
		
				
		Для Каждого ЭлементТипа Из Документы.ТипВсеСсылки().Типы() Цикл
			МассивТипов.Добавить(ЭлементТипа)
		КонецЦикла;
		Для Каждого ЭлементТипа Из Справочники.ТипВсеСсылки().Типы() Цикл
			МассивТипов.Добавить(ЭлементТипа)
		КонецЦикла;
        Для Каждого ЭлементТипа Из ПланыВидовХарактеристик.ТипВсеСсылки().Типы() Цикл
			МассивТипов.Добавить(ЭлементТипа)
		КонецЦикла;
		
		Выборка  = Запрос.Выполнить().Выбрать();
		ЕСли Выборка.Следующий() Тогда		
			Если мУжеВСписке[Выборка.Ссылка] = Неопределено Тогда
				СтрокаДерева = Дерево.Строки.Добавить();
				 
				//тДерево = РеквизитФормыВЗначение("ДеревоДокументов");
				//СтрокаДерева = тДерево.Строки.Добавить();
				////СтрокаДерева = мДерево.Строки.Добавить();
				СтрокаДерева.Ссылка= Выборка.Ссылка;
				СтрокаДерева.Проведен = Выборка.Проведен;
				СтрокаДерева.ПометкаУдаления = Выборка.ПометкаУдаления;
				СтрокаДерева.ДокументПредставление = Выборка.Представление;
				СтрокаДерева.ВидДокумента = Выборка.Метаданные;			
				СтрокаДерева.СуммаДокумента = Выборка.СуммаДокумента;
				СтрокаДерева.ВалютаДокумента = Выборка.ВалютаДокумента;
				СтрокаДерева.ОграничениеПоРодителям = Истина;
				//ЗначениеВРеквизитФормы(тДерево,"ДеревоДокументов");
				мУжеВСписке.Вставить(Выборка.Ссылка, Истина);	
			КонецЕсли;
		КонецЕсли;		
	КонецЦикла;
        Возврат Дерево;
	//Возврат СтрокаДерева;
КонецФункции
Показать
21. Sashares 34 21.04.23 14:12 Сейчас в теме
(20)Примерно так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.ДокументСсылка = Неопределено ИЛИ Параметры.ДокументСсылка.Пустая() Тогда
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    ДокументСсылка = Параметры.ДокументСсылка;
    мУжеВСписке = Новый Соответствие;
        мКэшРеквизитовДокумента = Новый Соответствие;
    мКэшПраваДоступаКМетаданным = Новый Соответствие;
    ВывестиДеревоДокументов(); //!!!
КонецПроцедуры

&НаСервере
Процедура ВывестиДеревоДокументов()        
	
	ВывестиРодительскиеДокументы(ДокументСсылка);    

КонецПроцедуры

&НаСервере
Функция ВывестиРодительскиеДокументы(ДокументСсылка)

    МетаданныеДокумента = ДокументСсылка.Метаданные();
    СписокРеквизитов = Новый СписокЗначений;
    МетаданныеДокументы = Метаданные.Документы; 
    мКэшМетаданныеРеквизита = новый соответствие;
    
    Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл
        ТипыРеквизита = Реквизит.Тип.Типы();
        Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
            МетаданныеРеквизита = мКэшМетаданныеРеквизита.Получить(ТекущийТип);
            Если МетаданныеРеквизита = неопределено Тогда
                МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
                мКэшМетаданныеРеквизита.Вставить(ТекущийТип,МетаданныеРеквизита);
            КонецЕсли;
                    
            Если МетаданныеРеквизита<>Неопределено 
                 И МетаданныеДокументы.Содержит(МетаданныеРеквизита) 
                 И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
                Попытка
                    ЗначениеРеквизита = ДокументСсылка[Реквизит.Имя];
                Исключение
                    Прервать;
                КонецПопытки;
                ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая() И ТипЗнч(ЗначениеРеквизита) = ТекущийТип 
                     И мУжеВСписке[ЗначениеРеквизита] = Неопределено И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда
                    Попытка
                        СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
                    Исключение
                         ОтладкаТекстОшибки = ОписаниеОшибки();
                    КонецПопытки;    
                КонецЕсли;
            КонецЕсли;            
            
        КонецЦикла;
    КонецЦикла;
    
    Для Каждого ТЧ Из МетаданныеДокумента.ТабличныеЧасти Цикл
        СтрРеквизитов = "";
        
        Попытка
            СодержимоеТЧ = ДокументСсылка[ТЧ.Имя].Выгрузить();
        Исключение
            Прервать;
        КонецПопытки;
        
        Для Каждого Реквизит ИЗ ТЧ.Реквизиты Цикл
            ТипыРеквизита = Реквизит.Тип.Типы();
            Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
                МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);                
                Если МетаданныеРеквизита<>Неопределено И МетаданныеДокументы.Содержит(МетаданныеРеквизита) 
                    И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
                    СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя;
                    Прервать;
                КонецЕсли;                        
            КонецЦикла;
        КонецЦикла;
        
        СодержимоеТЧ.Свернуть(СтрРеквизитов);
        Для Каждого КолонкаТЧ ИЗ СодержимоеТЧ.Колонки Цикл
            Для Каждого СтрокаТЧ ИЗ СодержимоеТЧ Цикл
                Попытка
                    ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя];
                Исключение
                    Продолжить;
                КонецПопытки;
                МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита));
                Если МетаданныеЗначения = Неопределено Тогда
                    // базовый тип
                    Продолжить;
                КонецЕсли;
                
                ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая()
                     И МетаданныеДокументы.Содержит(МетаданныеЗначения)
                     И мУжеВСписке[ЗначениеРеквизита] = Неопределено Тогда
                    Если СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда
                        Попытка
                            СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
                        Исключение
                            ОтладкаТекстОшибки = ОписаниеОшибки();
                        КонецПопытки;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;        
    КонецЦикла;
    СписокРеквизитов.СортироватьПоПредставлению();
    мУжеВСписке.Вставить(ДокументСсылка, Истина);
    
    Если СписокРеквизитов.Количество() = 1 Тогда
        Родитель = ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение); //Вот тут рекурсия
    ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
        ВывестиБезРодителей(СписокРеквизитов);    //Вывожу верхние элементы. Если возвращаю дерево, то*
		Родитель = ДеревоДокументов;
    КонецЕсли;

    СтрокаРодителя = Родитель.ПолучитьЭлементы().Добавить(); //*вот здесь строка ставится новой строкой из-за этого нет иерархии, если 
                                                                                          //возвращаю строку, то здесь в строке есть последний добавленный элемент, 
                                                                                          //который является родителем и далее при завершении предыдущих вызовов
                                                                                          //элементы становятся дочерними

    Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
                           | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
                           
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
    КонецЕсли;
    
    Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
    КонецЕсли;
    
    Выборка  = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда        
        
        СтрокаРодителя.Ссылка= Выборка.Ссылка;
        СтрокаРодителя.Проведен = Выборка.Проведен;
        СтрокаРодителя.ПометкаУдаления = Выборка.ПометкаУдаления;
        СтрокаРодителя.ДокументПредставление = Выборка.Представление;
        СтрокаРодителя.СуммаДокумента = Выборка.СуммаДокумента;
        СтрокаРодителя.ВалютаДокумента = Выборка.ВалютаДокумента;
        СтрокаРодителя.ВидДокумента = Выборка.Метаданные;                
    Иначе
        СтрокаРодителя.Ссылка= ДокументСсылка;
        СтрокаРодителя.ДокументПредставление = Строка(ДокументСсылка);
        СтрокаРодителя.СуммаДокумента = ДокументСсылка.СуммаДокумента;
    КонецЕсли;
    Возврат Родитель;
    //Возврат СтрокаРодителя;
КонецФункции

&НаСервере
Процедура ВывестиБезРодителей(СписокДокументов)
    
    МассивТипов = Новый Массив;

    Для Каждого ЭлементСписка Из СписокДокументов Цикл
        
        МетаданныеДокумента = ЭлементСписка.Значение.Метаданные();
        
        Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
        | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
        
        Запрос.УстановитьПараметр("Ссылка", ЭлементСписка.Значение);
        
        Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
            Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
        Иначе
            Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
        КонецЕсли;
        
        Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
            Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
        Иначе
            Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
        КонецЕсли;
        
                
        Для Каждого ЭлементТипа Из Документы.ТипВсеСсылки().Типы() Цикл
            МассивТипов.Добавить(ЭлементТипа)
        КонецЦикла;
        Для Каждого ЭлементТипа Из Справочники.ТипВсеСсылки().Типы() Цикл
            МассивТипов.Добавить(ЭлементТипа)
        КонецЦикла;
        Для Каждого ЭлементТипа Из ПланыВидовХарактеристик.ТипВсеСсылки().Типы() Цикл
            МассивТипов.Добавить(ЭлементТипа)
        КонецЦикла;
        
        Выборка  = Запрос.Выполнить().Выбрать();
        ЕСли Выборка.Следующий() Тогда        
            Если мУжеВСписке[Выборка.Ссылка] = Неопределено Тогда
                СтрокаДерева = ДеревоДокументов.ПолучитьЭлементы().Добавить();
                 
                СтрокаДерева.Ссылка= Выборка.Ссылка;
                СтрокаДерева.Проведен = Выборка.Проведен;
                СтрокаДерева.ПометкаУдаления = Выборка.ПометкаУдаления;
                СтрокаДерева.ДокументПредставление = Выборка.Представление;
                СтрокаДерева.ВидДокумента = Выборка.Метаданные;            
                СтрокаДерева.СуммаДокумента = Выборка.СуммаДокумента;
                СтрокаДерева.ВалютаДокумента = Выборка.ВалютаДокумента;
                СтрокаДерева.ОграничениеПоРодителям = Истина;
                мУжеВСписке.Вставить(Выборка.Ссылка, Истина);    
            КонецЕсли;
        КонецЕсли;        
    КонецЦикла;
КонецПроцедуры
Показать
22. aalu14 21.04.23 14:55 Сейчас в теме
(21)
Если СписокРеквизитов.Количество() = 1 Тогда
		ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
		ВывестиБезРодителей(СписокРеквизитов);
		Родитель = ДеревоДокументов;
КонецЕсли;

	СтрокаРодителя = Родитель.Строки.Добавить();
Показать

Вот так ошибка: Поле объекта не обнаружено (Строки)
т.к. это ДанныеФормыДерево

А если вот так, то выводит без иерархии:
СтрокаРодителя = ДеревоДокументов.ПолучитьЭлементы().Добавить();


Заменил на
СтрокаРодителя = ДеревоДокументов.ПолучитьЭлементы().Добавить();
ПодстрокаРодителя = СтрокаРодителя.ПолучитьЭлементы().Добавить();


Теперь выводит с иерархией, но очень странно, родитель - пустая строка. (На скрине сверху что получилось, снизу к чему надо придти)
Могу получить последний элемент. Может быть можно как-то от него "двигаться" ?
Прикрепленные файлы:
24. Sashares 34 21.04.23 16:05 Сейчас в теме
(22)
СтрокаРодителя = Родитель.Строки.Добавить();

Замените на
СтрокаРодителя = Родитель.ПолучитьЭлементы().Добавить();


В моем примере это так указано. Если у вас не так, значит не все изменения перенесли.
25. aalu14 21.04.23 16:52 Сейчас в теме
(24) К сожалению, не получается...
Дело в том, что при "остаточном" выполнении кода (не знаю, как назвать правильно), когда продолжает двигаться тот код, который вызвал рекурсию в условии, и в "ИначеЕсли" он не попадает, поэтому сначала Родитель - ДанныеФормыДерево, а потом уже Не определено.
Родитель = ДеревоДокументов;
КонецЕсли;
	   
СтрокаРодителя = Родитель.ПолучитьЭлементы().Добавить();


Вынес за условие:
Если СписокРеквизитов.Количество() = 1 Тогда
		ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
	ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
		ВывестиБезРодителей(СписокРеквизитов);
		//Родитель = ДеревоДокументов;
КонецЕсли;
	    Родитель = ДеревоДокументов;
	    СтрокаРодителя = Родитель.ПолучитьЭлементы().Добавить();
Показать

И в таком случае не получается иерархии в дереве.
26. aalu14 21.04.23 17:07 Сейчас в теме
(24) К чему я сейчас пришел)

Индентификатор = Родитель.ПолучитьЭлементы().Количество() - 1;
Строка = ДеревоДокументов.НайтиПоИдентификатору(Индентификатор).ПолучитьЭлементы().Добавить();
ПодстрокаРодителя = Строка.ПолучитьЭлементы().Добавить();


Есть иерархия, но создается пустая строка, и каждый след элемент наследуется от новой пустой строки.
Почему-то во время завершения старых вызовов количество элементов дерева не меняется (2), хотя я могу получить по идентификатору и 3-й (пустая строка) и 4-й и 5-й (пустая строка).

Думал сделать счетчик в выборке, и раз не увеличивается количество элементов, то могу прибавлять счетчик из идентификатора - но он тоже обнуляется при завершении предыдущих вызовов...
Прикрепленные файлы:
27. aalu14 21.04.23 17:56 Сейчас в теме
(24) Дорогой дневник..))))
В общем, есть сдвиги, осталось разобраться, почему пустые строки добавляются...
Перем Сч;

&НаСервере
Процедура ВывестиРодительскиеДокументы(ДокументСсылка)
///.......................................
Если СписокРеквизитов.Количество() = 1 Тогда
		ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
	ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
		ВывестиБезРодителей(СписокРеквизитов);
	КонецЕсли;
	Родитель = ДеревоДокументов;
	Количество = ДеревоДокументов.ПолучитьЭлементы().Количество();
	Индентификатор = ДеревоДокументов.ПолучитьЭлементы().Количество() - 1 + Сч;
	
	Строка = ДеревоДокументов.НайтиПоИдентификатору(Индентификатор).ПолучитьЭлементы().Добавить();
	//ПодстрокаРодителя = Строка.ПолучитьЭлементы().Добавить();
    
	Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
						   | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
						   
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
	КонецЕсли;
	
	Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
	КонецЕсли;
	
	Выборка  = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Строка.Ссылка= Выборка.Ссылка;
		Строка.Проведен = Выборка.Проведен;
		Строка.ПометкаУдаления = Выборка.ПометкаУдаления;
		Строка.ДокументПредставление = Выборка.Представление;
		Строка.СуммаДокумента = Выборка.СуммаДокумента;
		Строка.ВалютаДокумента = Выборка.ВалютаДокумента;
		Строка.ВидДокумента = Выборка.Метаданные;
		мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
	    Сч = Сч + 2; 
	Иначе
		Строка.Ссылка= ДокументСсылка;
		Строка.ДокументПредставление = Строка(ДокументСсылка);
		Строка.СуммаДокумента = ДокументСсылка.СуммаДокумента;
		мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
		Сч = Сч + 2; 
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
28. Sashares 34 21.04.23 18:11 Сейчас в теме
(27)Плохая идея с идентификатором.

Попробуйте так:

&НаСервере
Перем ТекСтрока;

&НаСервере
Процедура ВывестиРодительскиеДокументы(ДокументСсылка)
///.......................................
Если СписокРеквизитов.Количество() = 1 Тогда
        ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
    ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
        ВывестиБезРодителей(СписокРеквизитов);
        ТекСтрока = ДеревоДокументов;
    КонецЕсли;
   
Если ТекСтрока = Неопределено Тогда
    Строка = ДеревоДокументов.ПолучитьЭлементы().Добавить();
Иначе
    Строка  = ТекСтрока.ПолучитьЭлементы().Добавить();
КонецЕсли; 
ТекСтрока =  Строка;
  
    
    Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
                           | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
                           
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
    КонецЕсли;
    
    Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
    КонецЕсли;
    
    Выборка  = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Строка.Ссылка= Выборка.Ссылка;
        Строка.Проведен = Выборка.Проведен;
        Строка.ПометкаУдаления = Выборка.ПометкаУдаления;
        Строка.ДокументПредставление = Выборка.Представление;
        Строка.СуммаДокумента = Выборка.СуммаДокумента;
        Строка.ВалютаДокумента = Выборка.ВалютаДокумента;
        Строка.ВидДокумента = Выборка.Метаданные;
        мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
    Иначе
        Строка.Ссылка= ДокументСсылка;
        Строка.ДокументПредставление = Строка(ДокументСсылка);
        Строка.СуммаДокумента = ДокументСсылка.СуммаДокумента;
        мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
    КонецЕсли;
КонецПроцедуры
Показать
29. aalu14 21.04.23 20:39 Сейчас в теме
(28) К сожалению, без иерархии :(
То, что с идентификатором плохая идея - понял, слишком много ситуаций могут возникнуть, когда идентификатор будет выходить за границы дерева
30. Sashares 34 21.04.23 21:00 Сейчас в теме
(29)Значит переменную не объявили

&НаСервере
Перем ТекСтрока;
32. user1826630 21.04.23 21:05 Сейчас в теме
(30) Пора уже деньги брать за обучение.
35. aalu14 21.04.23 21:12 Сейчас в теме
(32) Спасибо огромное, иерархия получилась! Корнем выбран другой элемент, но суть я уловил, спасибо огромное!
37. user1826630 21.04.23 21:14 Сейчас в теме
(28)
Если ТекСтрока = Неопределено Тогда
Строка = ДеревоДокументов.ПолучитьЭлементы().Добавить();
Иначе
Строка = ТекСтрока.ПолучитьЭлементы().Добавить();
КонецЕсли;
ТекСтрока = Строка;
Какой красивый код... Туева хуча букв вместо нескольки.
31. user1826630 21.04.23 21:04 Сейчас в теме
(27)
Сч = Сч + 2;
Че так? Че не 8?
33. aalu14 21.04.23 21:10 Сейчас в теме
(32) эксперименты в виду пустых строк
34. user1826630 21.04.23 21:11 Сейчас в теме
36. aalu14 21.04.23 21:13 Сейчас в теме
23. aalu14 21.04.23 15:18 Сейчас в теме
(21)
Добавил:
Индентификатор = ДеревоДокументов.ПолучитьЭлементы().Количество() - 1;
Строка = ДеревоДокументов.НайтиПоИдентификатору(Индентификатор).ПолучитьЭлементы().Добавить();
ПодстрокаРодителя = Строка.ПолучитьЭлементы().Добавить();


Получилось убрать первую пустую, но дальше дочерние так и "цепляются" за пустые строки.
Почему-то количество элементов в дереве не меняется...
2. triton34 19.04.23 15:12 Сейчас в теме
Попробуйте присвоить идентификатор этой строки

Из справки:
ТекущаяСтрока (CurrentRow)
Использование:
Чтение и запись.
Описание:
Тип: Произвольный.
Идентификатор текущей строки таблицы.
3. aalu14 19.04.23 15:29 Сейчас в теме
(2)Получилось так
тДерево = РеквизитФормыВЗначение("ДеревоДокументов");
СтрокаДерева = тДерево.Строки.Добавить();
СтрокаДерева = мДерево;
ЗначениеВРеквизитФормы(тДерево,"ДеревоДокументов");
4. aalu14 19.04.23 15:35 Сейчас в теме
Проблема, что добавились просто как строки.. без подчинения.
2 - как в оф
1 - то что получается(((
Прикрепленные файлы:
6. Sashares 34 19.04.23 15:39 Сейчас в теме
(4)Для иерархии, надо добавлять строку не в корень, а в другую строку.
7. aalu14 19.04.23 16:08 Сейчас в теме
(6)Прошу Вас помочь, не могу разобраться...
ОФ:
.....
//В процедуре 1
Выборка  = Запрос.Выполнить().Выбрать();
СтрокаДерева = мДерево.Строки.Добавить();
	
         Если Выборка.Следующий() Тогда		
		СтрокаДерева.Ссылка= Выборка.Ссылка;
		СтрокаДерева.Проведен = Выборка.Проведен;
		СтрокаДерева.ПометкаУдаления = Выборка.ПометкаУдаления;
		СтрокаДерева.ДокументПредставление = Выборка.Представление;
		СтрокаДерева.СуммаДокумента = Выборка.СуммаДокумента;
		СтрокаДерева.ВалютаДокумента = Выборка.ВалютаДокумента;
		СтрокаДерева.ВидДокумента = Выборка.Метаданные;				
	Иначе
		СтрокаДерева.Ссылка= ДокументСсылка;
		СтрокаДерева.ДокументПредставление = Строка(ДокументСсылка);
		СтрокаДерева.СуммаДокумента = ДокументСсылка.СуммаДокумента;
	КонецЕсли;
	
	мДерево = СтрокаДерева;

// В процедуре 2
ЕСли Выборка.Следующий() Тогда		
			Если мУжеВСписке[Выборка.Ссылка] = Неопределено Тогда
	            СтрокаДерева = мДерево.Строки.Добавить();
				СтрокаДерева.Ссылка= Выборка.Ссылка;
				СтрокаДерева.Проведен = Выборка.Проведен;
				СтрокаДерева.ПометкаУдаления = Выборка.ПометкаУдаления;
				СтрокаДерева.ДокументПредставление = Выборка.Представление;
				СтрокаДерева.ВидДокумента = Выборка.Метаданные;			
				СтрокаДерева.СуммаДокумента = Выборка.СуммаДокумента;
				СтрокаДерева.ВалютаДокумента = Выборка.ВалютаДокумента;
				СтрокаДерева.ОграничениеПоРодителям = Истина;
				мУжеВСписке.Вставить(Выборка.Ссылка, Истина);
			КонецЕсли;
		КонецЕсли;		
	КонецЦикла;

	мДерево = СтрокаДерева;

//В выводе
мДерево = ДеревоДокументов;
Процедура 1
Процедура 2
ЭлементыФормы.ДеревоДокументов.ТекущаяСтрока = мДерево;
Показать

Пытаюсь переделать на УФ:
тДерево = РеквизитФормыВЗначение("ДеревоДокументов");
СтрокаДерева = тДерево.Строки.Добавить();
ЗначениеВРеквизитФормы(тДерево,"ДеревоДокументов");


Но в таком случае не получается иерархии.
в ОФ в переменную, которая везде доступна записывается строка дерева значений с иерархией, а потом в дерево значений формы записывается получившаяся строка

Если так же пытаюсь через переменную, то в УФ пишет Поле объекта не обнаружено (Строки) у этой переменной...
8. Sashares 34 19.04.23 16:10 Сейчас в теме
(7)Добавить строку в дерево в управляемую форму:

НоваяСтрокаКорня = ДеревоДокументов.ПолучитьЭлементы().Добавить();
//тут заполнить значения реквизитов строки дерева
ПодчиненнаяСтрока = НоваяСтрокаКорня.ПолучитьЭлементы().Добавить();
//тут заполнить значения реквизитов строки дерева
9. Sashares 34 19.04.23 16:24 Сейчас в теме
(7)
в ОФ в переменную, которая везде доступна записывается строка дерева значений с иерархией, а потом в дерево значений формы записывается получившаяся строка

Это не так работает.
ЭлементыФормы.ДеревоДокументов.ТекущаяСтрока = мДерево;


Это просто позиционирование - то есть делается текущей нужная строка дерева.

Заполнение дерева выполняется при добавлении строк в мДерево.
10. aalu14 19.04.23 17:16 Сейчас в теме
(9) Спасибо Вам большое! А Вы не могли бы еще подсказать, пожалуйста, почему после завершения процедуры код прыгает на строку "ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);" ?
Прикрепленные файлы:
Video_2023_04_19-1.webm
11. Sashares 34 19.04.23 17:52 Сейчас в теме
(10)Потому что процедура вызывается несколько раз.
12. aalu14 19.04.23 17:58 Сейчас в теме
13. aalu14 20.04.23 09:27 Сейчас в теме
(11)Спасибо за наводку, это завершаются предыдущие вызовы
38. user1826630 21.04.23 21:18 Сейчас в теме
Пора бы уже определиться - либо работать с деревом значений на сервере, либо работать с КоллекциейФормы, которая имеет тип дерево значений.
А то вы тут все в кучу намешали.

Да еще и запросы в рекурсии... А если есть запросы - то и нефиг использовать клиент-серверные методы вида ПолучитьЭлементы(), а надо работать сразу с универсальной коллекцией ДеревоЗначений на сервере.
39. aalu14 21.04.23 21:49 Сейчас в теме
(38)Спасибо, рад любым наводкам.
Оставьте свое сообщение

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