powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
5 сообщений из 5, страница 1 из 1
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    #36351070
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь обойти дерево справочника с помощью запроса. Использую для этого выборку с параметром ОбходРезультатаЗапроса.ПоГруппировкамСИерархией.
На примере обхода справочника номенклатура. Почему-то выводит не все элементы. Подскажите, что не так делаю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Запрос = Новый Запрос();
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Номенклатура.Родитель КАК Родитель,
		|	Номенклатура.Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	(НЕ Номенклатура.ЭтоГруппа)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Номенклатура.Родитель.Наименование,
		|	Номенклатура.Наименование
		|ИТОГИ ПО
		|	Родитель ИЕРАРХИЯ";
	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	Влож(Выборка, "");
КонецПроцедуры

Процедура Влож(ВложВыборка, Прист)
	Пока ВложВыборка.Следующий() Цикл
		Выборка = ВложВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		Сообщить(Прист + ВложВыборка.Родитель);		
		Влож(Выборка, Прист+" ");
	КонецЦикла;
КонецПроцедуры
...
Рейтинг: 0 / 0
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    #36358234
Димитрий_Галин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перенести
Код: plaintext
Выборка = ВложВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
на строчку выше
...
Рейтинг: 0 / 0
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    #36437617
Чувак12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Димитрий_Галин,

Нет. Сначала надо получить "следующий" элемент, из которого ты будешь выбирать
...
Рейтинг: 0 / 0
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    #36437673
vet7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Перем Запрос,РезультатЗапроса;
	Запрос = Новый Запрос();
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	Родитель.Наименование КАК Группа
	|	,Наименование КАК Элемент
	|ИЗ
	|	Справочник.Номенклатура
	|ГДЕ
	|	(НЕ ЭтоГруппа)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Родитель.Наименование,
	|	Наименование
	|
	|ИТОГИ ПО
	|	Родитель ИЕРАРХИЯ
	|";
		
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса.Пустой() Тогда
		Влож(РезультатЗапроса, "");
	КонецЕсли;
КонецПроцедуры

Процедура Влож(ВыборкаРодитель, Прист)
	Перем Выборка;
	Выборка = ВыборкаРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	Пока Выборка.Следующий() Цикл
		Если Выборка.ТипЗаписи()= ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
			Сообщить(Прист + "<"+Выборка.Группа+">");
		Иначе
			Сообщить(Прист + Выборка.Элемент);
		КонецЕсли;
		Влож(Выборка, Прист+"    ");
	КонецЦикла;
КонецПроцедуры
...
Рейтинг: 0 / 0
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    #36437768
vet7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее даже так :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Перем Запрос,РезультатЗапроса;
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ Наименование 
	|ИЗ Справочник.Номенклатура Автоупорядочивание";
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса.Пустой() Тогда
		Влож(РезультатЗапроса, "");
	КонецЕсли;
КонецПроцедуры

Процедура Влож(ВыборкаРодитель, Прист)
	Перем Выборка;
	Выборка = ВыборкаРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	Пока Выборка.Следующий() Цикл
		Сообщить(Прист + Выборка.Наименование);
		Влож(Выборка, Прист+"    ");
	КонецЦикла;
КонецПроцедуры

оказалось все гораздо проще
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]