Сортировка групп справочника

1. niko 06.02.09 13:47 Сейчас в теме
Подскажите пжста, как организовать сортировку групп справочника по некому показателю (например количество продаж) с учетом иерархии (группы первого уровня сортируются по показателю, внутри первой группы первого уровня - группы второго уровня сортируются по показателю и т.д.)
Заранее Спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ёпрст 1067 06.02.09 13:57 Сейчас в теме
(0) В отчете ? Только через ТЗ...
3. Altair777 647 06.02.09 13:59 Сейчас в теме
1) Через запрос, а в нем Группировка

2) Через перебор Справочника, а в нем ПорядокРеквизита(<?>); Хотя, меня терзают смутные сомнения, что "количество продаж" вряд ли может быть реквизитом :-)
4. Ёпрст 1067 06.02.09 14:04 Сейчас в теме
(3) через запрос не выйдет... упорядочивание будет по элементам справочника.. а не по группам.
11. Altair777 647 06.02.09 14:22 Сейчас в теме
(4) кстати, да
Сегодня применял ТЗ, только не для сортировки а для свертки запроса по наименованию
Вот кусок кода. Не ругайтесь, это был "чужой" отчет и нужно было сделать еще вчера

тзСырье=СоздатьОбъект("ТаблицаЗначений");
тзСырье.НоваяКолонка("Сырье","Справочник.СырьеБумажное");
тзСырье.НоваяКолонка("Наименование","Строка",25);
тзСырье.НоваяКолонка("Формат","Число",10,0);
тзСырье.НоваяКолонка("СН","Число",10,0);
тзСырье.НоваяКолонка("СН_К","Число",10,0);
тзСырье.НоваяКолонка("КО","Число",10,0);
тзСырье.НоваяКолонка("КО_К","Число",10,0);
тзСырье.НоваяКолонка("ДО","Число",10,0);
тзСырье.НоваяКолонка("ДО_К","Число",10,0);
тзСырье.НоваяКолонка("СК","Число",10,0);
тзСырье.НоваяКолонка("СК_К","Число",10,0);
Пока Запрос.Группировка("Сырье") = 1 Цикл
	Если Запрос.Сырье.ЭтоГруппа() = 1 Тогда
		тзСырье.Свернуть("Наименование,Формат","СН,СН_К,КО,КО_К,ДО,ДО_К,СК,СК_К");
		тзСырье.Сортировать("Наименование,Формат");
		тзСырье.ВыбратьСтроки();
		Пока тзСырье.ПолучитьСтроку()=1 Цикл
			ПечФормат = тзСырье.Формат;
			Таб.ВывестиСекцию("СырьеТЗ");
		КонецЦикла;
		тзСырье.УдалитьСтроки();
		тзСырье.НоваяКолонка("Сырье","Справочник.СырьеБумажное");
		Таб.ВывестиСекцию("Группа");
		Продолжить;
	КонецЕсли;
	Если грПоФорматам = 1  Тогда
		Пока Запрос.Группировка("Формат") = 1 Цикл
			тзСырье.НоваяСтрока();
			тзСырье.Сырье = Запрос.Сырье;
			тзСырье.Наименование = Запрос.Сырье.Наименование;
			тзСырье.Формат = Запрос.Формат;
			тзСырье.СН = Запрос.СН;
			тзСырье.СН_К = Запрос.СН_К;
			тзСырье.КО = Запрос.КО;
			тзСырье.КО_К = Запрос.КО_К;
			тзСырье.ДО = Запрос.ДО;
			тзСырье.ДО_К = Запрос.ДО_К;
			тзСырье.СК = Запрос.СК;
			тзСырье.СК_К = Запрос.СК_К;
		КонецЦикла;
	Иначе
		тзСырье.НоваяСтрока();
		тзСырье.Сырье = Запрос.Сырье;
		тзСырье.Наименование = Запрос.Сырье.Наименование;
		тзСырье.СН = Запрос.СН;
		тзСырье.СН_К = Запрос.СН_К;
		тзСырье.КО = Запрос.КО;
		тзСырье.КО_К = Запрос.КО_К;
		тзСырье.ДО = Запрос.ДО;
		тзСырье.ДО_К = Запрос.ДО_К;
		тзСырье.СК = Запрос.СК;
		тзСырье.СК_К = Запрос.СК_К;
	КонецЕсли;
КонецЦикла;
тзСырье.Свернуть("Наименование,Формат","СН,СН_К,КО,КО_К,ДО,ДО_К,СК,СК_К");
тзСырье.Сортировать("Наименование,Формат");
тзСырье.ВыбратьСтроки();
Пока тзСырье.ПолучитьСтроку()=1 Цикл
	ПечФормат = тзСырье.Формат;
	Таб.ВывестиСекцию("СырьеТЗ");
КонецЦикла;
Показать
13. niko 06.02.09 14:55 Сейчас в теме
(11) Что-то не догоняю. В приведенном коде если я правильно считал, сначала Выводится группа, затем элементы группы собираются в тз, затем сворачиваются по наименованию или формату и перед след-й группой выводятся на печать. Но, во первых, почему в запросе нельзя было указать переменную НаименованиеСырья = Справочник.Сырье.Наименование, а затем Группировка НаименованиеСырья, а во вторых это не решает проблему сортировки групп внутри своего родителя.
14. Altair777 647 06.02.09 15:02 Сейчас в теме
(13)
по 1 вопросу - это кусок кода + еще идет сортировка по "Формату"
по 2 - не понял :-) Группы тоже нужно сортировать по реквизиту?
15. niko 06.02.09 15:08 Сейчас в теме
(14) В этом то и вся проблема, что мне надо так

Группа 1 100кг
группа 1.4 90 кг
группа 1.1 8 кг

Группа 3 80 кг
группа 3.5 60
.
.

Группа 2
.
.
.
16. Altair777 647 06.02.09 15:28 Сейчас в теме
(15) Тогда весь Запрос в ТЗ а с ней уже извращаться :-)
5. Ёпрст 1067 06.02.09 14:06 Сейчас в теме
+4 будет типа того

Алкоголь 100
Пиво 100

Сигареты 150
Гашишь 80
Анаша 70
6. niko 06.02.09 14:14 Сейчас в теме
А нет ли готовых механизмов для такой обработки ТЗ (1С++ например) и если есть, то в каком виде формировать ТЗ?
8. Ёпрст 1067 06.02.09 14:16 Сейчас в теме
(6) есть... Класс.ИтогиПоГруппировкам
или Индексированную ТЗ использовать...
9. Ёпрст 1067 06.02.09 14:17 Сейчас в теме
(6) А ТЗ получать из выборки запроса, например.
7. niko 06.02.09 14:16 Сейчас в теме
3) Конечно не реквизит.
10. niko 06.02.09 14:21 Сейчас в теме
Оставьте свое сообщение

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