Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Помогите применить рекурсию / 3 сообщений из 3, страница 1 из 1
24.01.2013, 16:20
    #38123444
tashka2505
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите применить рекурсию
Уважаемые форумчане!

Помогите, пожалуйста, переписать процедуру, в которой используются циклы, с применением рекурсии.

Процедура ИзучениеВыборкиРезультатаЗапроса() Экспорт
Запрос = Новый Запрос();
Запрос.Текст =
" ВЫБРАТЬ
| Период,
| Контрагент,
| Менеджер,
| Номенклатура,
| СуммаОборот
|Из
| РегистрНакопления.Продажи.Обороты(, , Месяц)";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаПериод = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ИнициализироватьТаблицуИлиДерево(РезультатЗапроса, Дерево);
Пока ВыборкаПериод.Следующий() Цикл
СтрокаИтогПоПериоду = Дерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИтогПоПериоду, ВыборкаПериод);
ВызовыМетодовВыборки(СтрокаИтогПоПериоду, ВыборкаПериод);
ВыборкаКонтрагент = ВыборкаПериод.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаКонтрагент.Следующий() Цикл
СтрокаИтогПоКонтрагенту = СтрокаИтогПоПериоду.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИтогПоКонтрагенту, ВыборкаКонтрагент);
ВызовыМетодовВыборки(СтрокаИтогПоКонтрагенту, ВыборкаКонтрагент);
ВыборкаМенеджер = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаМенеджер.Следующий() Цикл
СтрокаИтогПоМенеджеру = СтрокаИтогПоКонтрагенту.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИтогПоМенеджеру, ВыборкаМенеджер);
ВызовыМетодовВыборки(СтрокаИтогПоМенеджеру, ВыборкаМенеджер);
ВыборкаНоменклатура = ВыборкаМенеджер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
СтрокаИтогПоНоменклатуре = СтрокаИтогПоМенеджеру.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИтогПоНоменклатуре, ВыборкаНоменклатура);
ВызовыМетодовВыборки(СтрокаИтогПоНоменклатуре, ВыборкаНоменклатура);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

Процедура ВызовыМетодовВыборки(СтрокаДерева, Выборка)
СтрокаДерева.Группировка = Выборка.Группировка();
СтрокаДерева.ТипЗаписи = Выборка.ТипЗаписи();
СтрокаДерева.Уровень = Выборка.Уровень();
КонецПроцедуры

Заранее всем спасибо!
...
Рейтинг: 0 / 0
24.01.2013, 16:38
    #38123475
tashka2505
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите применить рекурсию
Вот для удобства во вложении файл с программой, а то здесь не наглядно отображается код.
...
Рейтинг: 0 / 0
25.01.2013, 09:30
    #38124176
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите применить рекурсию
Код: html
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.
Процедура ОбходВыборки(РезультатЗапроса, Дерево)
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока Выборка.Следующий() Цикл
	    СтрокаИтог = Дерево.Строки.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаИтог, Выборка);
		ВызовыМетодовВыборки(СтрокаИтог, Выборка);
		
		ОбходВыборки(Выборка, СтрокаИтог);
    КонецЦикла;
КонецПроцедуры
 


Процедура ИзучениеВыборкиРезультатаЗапроса() Экспорт
	Запрос = Новый Запрос();
	Запрос.Текст =
	"ВЫБРАТЬ
	|	 	Период,
	| 		Контрагент,
	| 		Менеджер,
	| 		Номенклатура,
	| 		СуммаОборот
	|	Из
	| 		РегистрНакопления.Продажи.Обороты(, , Месяц)";
	РезультатЗапроса = Запрос.Выполнить();
	ИнициализироватьТаблицуИлиДерево(РезультатЗапроса, Дерево);
	
	ОбходВыборки(РезультатЗапроса, Дерево);
	
КонецПроцедуры

Процедура ВызовыМетодовВыборки(СтрокаДерева, Выборка)
	СтрокаДерева.Группировка = Выборка.Группировка();
	СтрокаДерева.ТипЗаписи = Выборка.ТипЗаписи();
	СтрокаДерева.Уровень = Выборка.Уровень();
КонецПроцедуры
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Помогите применить рекурсию / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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