|
Заполнить ДеревоЗначений из иерархического справочника | ☑ | ||
---|---|---|---|---|
0
skelaKuban
20.09.11
✎
16:59
|
Есть иерархический справочник, нужно заполнить его значениями ДеревоЗначений. Как это можно сделать?
|
|||
1
Grusswelle
20.09.11
✎
16:59
|
Запросом!
|
|||
2
Grusswelle
20.09.11
✎
17:00
|
+ выброкой из результата запроса.
|
|||
3
Шапокляк
20.09.11
✎
17:03
|
Скорее, выгрузкой результата запроса.
|
|||
4
Челмедведосвин
20.09.11
✎
17:04
|
РезультатЗапроса (QueryResult)
Выгрузить (Unload) Синтаксис: Выгрузить(<ТипОбхода>) Параметры: <ТипОбхода> (необязательный) Тип: ОбходРезультатаЗапроса. Задает тип обхода записей в получаемой выборке. Значение по умолчанию: Прямой Возвращаемое значение: Тип: ТаблицаЗначений; ДеревоЗначений. Если тип обхода задан Прямой, результат выгружается в таблицу значений, в противном случае в дерево значений. Описание: Создает таблицу значений (или дерево значений) и копирует в нее все записи набора. |
|||
5
Eugeneer
20.09.11
✎
17:08
|
Есть одна неприятность! при выгрузке в дерево 1С конечные элементы дублирует. Типа идет элемент, а под ним еще элемент.
Это в случае если еще какие то доп реквизиты идут. |
|||
6
Eugeneer
20.09.11
✎
17:09
|
Причем этот баг не относится к случаю если запрос был сделан через СКД
|
|||
7
Челмедведосвин
20.09.11
✎
17:10
|
(5) Т.е. в СКД все нормально, а в простом запросе только обход выборки спасет отца русской демократии?
|
|||
8
ptiz
20.09.11
✎
17:11
|
(5) Это не дубли, это - детальные записи.
|
|||
9
Eugeneer
20.09.11
✎
17:11
|
(7) аха. еще и с проверкой чтобы дубляжа не получилось.
|
|||
10
Eugeneer
20.09.11
✎
17:12
|
(8) я понимаю это. но получается что это косяк. детальная запись должна быть на уровне конечного элемента. а получается что идет еще в низ и выход только выборка.
|
|||
11
skelaKuban
20.09.11
✎
17:12
|
Запросом, ок. Только мне надо будет сделать итоги, а по какому полю?
|
|||
12
Eugeneer
20.09.11
✎
17:16
|
(11) итоги общие? дерево на форме?
|
|||
13
Eugeneer
20.09.11
✎
17:17
|
в дереве могут быть итоги - по каждому уровню. общие.
Причем общие тоже глючат т.к. выдают итоги по всей колонке, а не только по итогам попавших элементов. При этом если несколько групп плюс иерархия то в итоге всего дерева будет полный бред. |
|||
14
Челмедведосвин
20.09.11
✎
17:19
|
(13) А если получить результат через СКД и вывести в таб. поле?
|
|||
15
Eugeneer
20.09.11
✎
17:19
|
т.е. итог по полонкам дерева нормальный не получить никак. либо придется считать его специальными процедурами и выводить отдельно. Т.е. писать все кодом.
Иначе в итоге слепится многоразовое (в зависимости от уровней) увеличение, которое никак простым методом не исправить. Опять жэе придется рекурсией каждое поле подсчитывать. |
|||
16
Eugeneer
20.09.11
✎
17:24
|
(14) так автору дерево нужно а не таб поле.
|
|||
17
Шапокляк
20.09.11
✎
17:24
|
Какой итог, если выгружается иерархический справочник?
(5) Всякие косяки с дублями возможны только если в справочнике иерархия элементов. |
|||
21
Eugeneer
20.09.11
✎
17:30
|
(17) что значит какой итог. По каждой папке итог будет. Но общий итог по дереву выдаст хреню.
|
|||
22
GANR
20.09.11
✎
17:31
|
1. Сделать запрос с итогом по иерархии этого справочника.
2. Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) 3. Обойти выборку (2) с помощью стека или рекурсии. Примерно так: СтекВызовов = Новый Массив; СтекВызовов.Добавить(Новый Структура("Выборка, Вершины", Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Ссылка"), ТвоеДерево.ПолучитьЭлементы())); Пока СтекВызовов.Количество() <> 0 Цикл ТекущиеПараметры = СтекВызовов[СтекВызовов.Количество()-1]; Если ТекущиеПараметры.Выборка.Следующий() Тогда НоваяВершина = ТекущиеПараметры.Вершины.Добавить(); ЗаполнитьЗначенияСвойств(НоваяВершина, ТекущиеПараметры.Выборка); ДочерняяВыборка = ТекущиеПараметры.Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Ссылка"); Если ДочерняяВыборка.Количество() <> 0 Тогда СтекВызовов.Добавить(Новый Структура("Выборка, Вершины", ДочерняяВыборка, НоваяВершина.ПолучитьЭлементы())); КонецЕсли; Иначе СтекВызовов.Удалить(СтекВызовов.Количество()-1); КонецЕсли; КонецЦикла; |
|||
23
Eugeneer
20.09.11
✎
17:31
|
(17) дудляж будет по любому запросу выгруженному в дерево. т.к. дубль как тут уже коллега подсказал - детальная запись конечного уровня дерева.
|
|||
24
Vladal
20.09.11
✎
17:31
|
Может, поможет: Статья "Рекурсивный обход дерева значений с пересчетом иерархических итогов группировок"
Описано формирование дерева на простом примере. http://infostart.ru/public/72380/ |
|||
25
Шапокляк
20.09.11
✎
17:32
|
(21) Хочу выгрузить в дерево иерархический справочник "Номенклатура" с иерархией групп и элементов. Какой итог? Что суммировать-то?
|
|||
26
Eugeneer
20.09.11
✎
17:32
|
(22) прикольная процедура!
|
|||
27
Eugeneer
20.09.11
✎
17:33
|
(25) а кто тебе сказал что у него там ничего нет? никаких соединения с остаткми и прочими регистрами?
|
|||
28
Eugeneer
20.09.11
✎
17:34
|
Если чел написал про итоги значит у него там не чисто справочник.
|
|||
29
Шапокляк
20.09.11
✎
17:34
|
(27) Прочитай (0).
|
|||
30
GANR
20.09.11
✎
17:34
|
(26) ага... классический способ избежать рекурсии - использование стека
|
|||
31
skelaKuban
20.09.11
✎
17:35
|
я постарался сделать как в статье на инфостарт
МойЗапрос.Текст="ВЫБРАТЬ | СписокПрограммногоОбеспечения.Ссылка, | СписокПрограммногоОбеспечения.ВерсияДанных, | СписокПрограммногоОбеспечения.ПометкаУдаления, | СписокПрограммногоОбеспечения.Предопределенный, | СписокПрограммногоОбеспечения.Родитель КАК Родитель, | СписокПрограммногоОбеспечения.ЭтоГруппа, | СписокПрограммногоОбеспечения.Код, | СписокПрограммногоОбеспечения.Наименование КАК Наименование |ИЗ | Справочник.СписокПрограммногоОбеспечения КАК СписокПрограммногоОбеспечения |ИТОГИ | КОЛИЧЕСТВО(Наименование) |ПО | Родитель ИЕРАРХИЯ"; Результат=МойЗапрос.Выполнить().Выбрать(); ЭлементыФормы.Дерево.Значение = МойЗапрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); // Для того, чтобы были видны колонки, их надо создать ЭлементыФормы.Дерево.СоздатьКолонки(); |
|||
32
Eugeneer
20.09.11
✎
17:35
|
(29) а может ты прочитаешь внимательно ветку?
|
|||
33
Шапокляк
20.09.11
✎
17:35
|
(28) Ага.. в (11) "Только мне надо будет сделать итоги, а по какому полю?" - вообще ппц постановка задачи.
|
|||
34
ptiz
20.09.11
✎
17:36
|
(10) Используй агрегатные функции и группировку. Тогда не будет лишних записей.
|
|||
35
skelaKuban
20.09.11
✎
17:36
|
в результате: получается самая верхняя группировка по группам, она мне не нужна, далее то, что надо
|
|||
36
Шапокляк
20.09.11
✎
17:37
|
(32) Я внимательно прочитала твои дикие измышления и рекламные ссылки. И что?
|
|||
37
Eugeneer
20.09.11
✎
17:38
|
(33) достаточно для того чтобы все таки принять во внимание что в ТС все таки дерево с каикми то полями для итогов
|
|||
38
Eugeneer
20.09.11
✎
17:39
|
(36) короч хватит флудить. Я почему то автора сразу понял а ты только флуд разводишь и продолжаешь головой об стену биться. сказали есть итоги. занчит ЕСТЬ. что еще нужно?
|
|||
39
Eugeneer
20.09.11
✎
17:39
|
(31) что то дофига в запросе лишнего!
Плюс выгрузка неправильная. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |