Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией / 5 сообщений из 5, страница 1 из 1
07.12.2009, 05:39
    #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
10.12.2009, 09:21
    #36358234
Димитрий_Галин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
Перенести
Код: plaintext
Выборка = ВложВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
на строчку выше
...
Рейтинг: 0 / 0
29.01.2010, 07:28
    #36437617
Чувак12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обход запроса через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
Димитрий_Галин,

Нет. Сначала надо получить "следующий" элемент, из которого ты будешь выбирать
...
Рейтинг: 0 / 0
29.01.2010, 08:32
    #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
29.01.2010, 09:32
    #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]