|
Вывести список в иерархическом порядке | ☑ | ||
---|---|---|---|---|
0
StarkNotDead
02.11.15
✎
07:11
|
Добрый день! Помогите, пожалуйста, с задачей - необходимо вывести список товаров, оставшихся на складах, причём все товары расположены в папке-родителе Товары, и затем идут папки подродители. Сейчас обработка выводит все товары в СКВОЗНОМ алфавитном порядке, а нужно, чтобы выводился алфавитный список поочерёдно по каждой папке-подродителе. Надеюсь, объяснил понятно.
Конфигурация УТ 10.3. Код кривой, не ругайтесь, только осваиваю. Вывод производится в две колонки (если будут вопросы). Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Номенклатура.НаименованиеОсновное КАК Номенклатура, | ТоварыНаСкладахОстатки.Номенклатура.Родитель КАК НоменклатураРодитель |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток <> 0 | И ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура) | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура.Родитель, | ТоварыНаСкладахОстатки.Номенклатура.НаименованиеОсновное | |УПОРЯДОЧИТЬ ПО | НоменклатураРодитель |ИТОГИ ПО | НоменклатураРодитель |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("Дата", Дата); Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоКоду("00000001624")); Выб = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выб.Следующий() цикл Выборка=Выб.Выбрать(); если Выборка.Количество()>1 тогда ОбластьИмяГруппы.Параметры.ИмяГруппы1 = Выб.НоменклатураРодитель; ТабДок.Вывести(ОбластьИмяГруппы); конецесли; Счетчик =1; к=0; пока Выборка.Следующий() цикл если Выборка.Номенклатура="" тогда Продолжить; КонецЕсли; Если Счетчик = 1 Тогда ОбластьСтрокаТаблицы.Параметры.Кол1 = Выборка.Номенклатура; Счетчик = 2; к1=Истина; Иначе ОбластьСтрокаТаблицы.Параметры.Кол2 = Выборка.Номенклатура; Счетчик = 1; к=1; КонецЕсли; если к=1 тогда ТабДок.Вывести(ОбластьСтрокаТаблицы); к=0; к1=ложь; конецесли; КонецЦикла; если к1 = истина тогда ОбластьСтрокаТаблицы.Параметры.Кол2 = ""; ТабДок.Вывести(ОбластьСтрокаТаблицы); к1=ложь; //конецесли; конецесли; КонецЦикла; ТабДок.ОтображатьСетку = Ложь; ТабДок.ТолькоПросмотр = Истина; Возврат ТабДок; |
|||
1
patapum
02.11.15
✎
07:36
|
(0) В качестве номенклатуры элемент справочника, далее Итоги Номенклатура Иерархия
|
|||
2
hawksib
02.11.15
✎
07:50
|
(1) я б ещё рекурсвый вывод добавил, че-то типа
Процедура Дерево(ТабДокумент, Макет, МП, Уровень = 0) ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); //Обходим строки текущего уровня дерева Для Каждого СтрДерева Из мп.Строки Цикл ОбластьСтрока.Параметры.Период = СтрДерева.Период; ОбластьСтрока.Параметры.Номер = СтрДерева.Номер; ОбластьСтрока.Параметры.Количество = СтрДерева.Количество; ТабДокумент.Вывести(ОбластьСтрока, Уровень, , Ложь); Дерево(ТабДокумент, Макет, СтрДерева, Уровень + 1); КонецЦикла; КонецПроцедуры |
|||
3
hawksib
02.11.15
✎
07:52
|
ну и при выводе дерева, не забудь указывать уровень иерархии, и ещё в начале вывода нужно начать автогруппировку строк, а в конце закончить
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |