![]() |
![]() |
|
Как выгрузить результат запроса в дерево значений? | ☑ | ||
---|---|---|---|---|
0
Nikotrisa
15.07.09
✎
10:52
|
на форме есть табл. поле с типом дерево значений, при открытии хотелось бы заполнять это поле из запроса. Запрос к справочнику организаци возвращает результат с группировкой по родителям, вот и хотелось бы отразить это в виде дерева на форме.
КАК? |
|||
1
Vitello
15.07.09
✎
10:54
|
см параметры выгрузить()
|
|||
2
Mitriy
15.07.09
✎
10:54
|
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
|
|||
3
Nikotrisa
15.07.09
✎
11:20
|
спасибо, я и говорю в результате запроса есть дерево, и на форме есть табличное поле с типом дерево, как в него загрузить результат запроса?
|
|||
4
Mitriy
15.07.09
✎
11:22
|
блондинко?
|
|||
5
Mitriy
15.07.09
✎
11:23
|
Дерево = Запрос.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
|
|||
6
Mitriy
15.07.09
✎
11:23
|
Дерево - данные табполя...
|
|||
7
Nikotrisa
15.07.09
✎
12:00
|
(4) шатенка!!! фотко нет! :)
Дерево.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Скопировать(); вот так взлетело... |
|||
8
mikecool
15.07.09
✎
12:02
|
"шатенка!!! фотко нет! :)" - бугога
|
|||
9
Nikotrisa
15.07.09
✎
12:22
|
Подскажите пожалуйста как получить одним запросом дерево состоящее в корневых ветвях из подразделений и разворачивающиеся на вложенное дерево оформленных на эту организацию ОС. типа так:
- Подразделение1 - Офис -(группа справочника ОС) ОС стол ОС стул ОС комп - Склад ОС Станок - Подразделение2 - Магазин ОС прилавок..... у меня после выгрузки запроса "ПоГруппировкамСИерархией" выходит только в 2 колонки Подразделение и ОС. Выбираю из регистра сведений МестонахождениеОС.Срезпоследних как правильно запрос построить? |
|||
10
Nikotrisa
15.07.09
✎
12:28
|
апну
|
|||
11
Nikotrisa
15.07.09
✎
12:28
|
подскажите пожалуйста срочно нужно :(
|
|||
12
Mitriy
15.07.09
✎
12:30
|
запрос в студию...
|
|||
13
Mitriy
15.07.09
✎
12:36
|
(7) извиняюсь за ошибку :)
а Скопировать() - лишнее... |
|||
14
Nikotrisa
15.07.09
✎
15:04
|
//Текст сформирован автоматически обработкой Универсальная консоль отчетов 2.6.7
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МестонахождениеОССрезПоследних.ОсновноеСредство, | МестонахождениеОССрезПоследних.Местонахождение |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство"; Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Возврат Результат; Возвращает 2 колонки... |
|||
15
Nikotrisa
15.07.09
✎
15:09
|
(13) Без Скопировать(), просто срабатывала проверка на равенство, возвращающая ложь, а присвоения значения не происходило...
|
|||
16
Nikotrisa
15.07.09
✎
15:12
|
Всеже интересно можно такое дерево одним запросом получить или нет?
помогите написать :) |
|||
17
Nikotrisa
15.07.09
✎
15:15
|
надежда умирает последней... я еще здесь и жду вашей помощи :)
|
|||
18
ptiz
15.07.09
✎
15:17
|
(15) ну-ну...
|
|||
19
Serg_1960
15.07.09
✎
15:19
|
А итоги где? Хочу итоги :)
|
|||
20
ptiz
15.07.09
✎
15:20
|
(14) Добавь в запрос
ИТОГИ ПО Местонахождение ИЕРАРХИЯ |
|||
21
Nikotrisa
15.07.09
✎
15:28
|
Спасбо ptiz, появилось дерево, но ОС по-прежнему выходят второй колонкой, как бы сделать чтобы все попало в одну колонку дерева, и ОС размещались под подразделением владельцем?
//Текст сформирован автоматически обработкой Универсальная консоль отчетов 2.6.7 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МестонахождениеОССрезПоследних.Местонахождение КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИТОГИ ПО | Местонахождение ИЕРАРХИЯ"; |
|||
22
Serg_1960
15.07.09
✎
15:37
|
А мне где спасибо? Обидился. И не буду посказывать, что надо правильно группировку произвести. Но важнее - сделать итоги по нескольким реквизитам.
|
|||
23
Nikotrisa
15.07.09
✎
15:43
|
(22) Сергей тебе тоже Боольшое спасибо!!! :)
|
|||
24
Mitriy
15.07.09
✎
15:53
|
ну вот, понаехали тут, все спасибо расхватали... ушел плакать...
|
|||
25
Nikotrisa
15.07.09
✎
15:55
|
ребята я пыталась юзать итоги по обоим измерениям, вроде все это фигня, наверно придется сначала получить дерево подразделений, а потом обойти, добавить дочерние строки с ветвями ОС... пипец
|
|||
26
Serg_1960
15.07.09
✎
15:58
|
(23) Я рад :) Не уж то получилось? :( не удержался :)
Группировка и Итоги - различные "понятия". Группировка позволяет сгруппировать "однородные" записи, но не меняет их табличную "сущность". Итоги - вот что "создает" дерево. (24) Зачем ушел плакать? Скажи что нибудь, доброе слово и кошке приятно... упс, сорри... я хотел сказать "и тебе спасибо скажут" :)) |
|||
27
NULLL
15.07.09
✎
15:59
|
Я делал похожее:
Запрос = Новый Запрос("ВЫБРАТЬ | ДокументыПереоценокПринятых.Документ КАК Документ, | ДокументыПереоценокПринятых.Организация КАК Организация, | ДокументыПереоценокПринятых.Склад КАК Склад |ПОМЕСТИТЬ Документы |ИЗ | &ДокументыПереоценокПринятых КАК ДокументыПереоценокПринятых |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТранзитныеКонтрагенты.ПодчиненныйКонтрагент КАК Контрагент, | Документы.Документ КАК Группировка, | Документы.Склад КАК Склад, | ИСТИНА КАК Пометка |ИЗ | Документы КАК Документы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТранзитныеКонтрагенты КАК ТранзитныеКонтрагенты | ПО Документы.Организация = ТранзитныеКонтрагенты.Организация | |УПОРЯДОЧИТЬ ПО | Контрагент |ИТОГИ ПО | Контрагент"); Запрос.УстановитьПараметр("ДокументыПереоценокПринятых",ТЗ); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл СтрокаКонтрагентов = ПереоценкиТоваровОтданных.Строки.Добавить(); СтрокаКонтрагентов.Группировка = Выборка.Контрагент; СтрокаКонтрагентов.Пометка = ИСТИНА; ВыборкаДокументов = Выборка.Выбрать(); Пока ВыборкаДокументов.Следующий() Цикл ЗаполнитьЗначенияСвойств(СтрокаКонтрагентов.Строки.Добавить(),ВыборкаДокументов); КонецЦикла; КонецЦикла; Может поможет. |
|||
28
Nikotrisa
15.07.09
✎
16:15
|
(27) благодарю NULLL я только не знакома с таким механизмом когда результат одного запроса используется как параметр другого, наверно это можно использовать в моем случае, например получить одним запросом дерево подразделений, и затем если у подразделения висят ОС вставить ему дерево его ОС???
|
|||
29
Nikotrisa
15.07.09
✎
16:21
|
решение так и не найдено, я пока в тупике :((
|
|||
30
Mitriy
15.07.09
✎
16:34
|
(29) а что не получается?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МестонахождениеОССрезПоследних.Местонахождение КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИТОГИ ПО | Местонахождение ИЕРАРХИЯ"; Дерево.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); что не устраивает? |
|||
31
NULLL
15.07.09
✎
16:37
|
(28)Смысл не в этом:
Такой должен быть запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МестонахождениеОССрезПоследних.Местонахождение КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИТОГИ ПО | Местонахождение, ОсновноеСредство ИЕРАРХИЯ"; |
|||
32
Serg_1960
15.07.09
✎
16:40
|
Автор хочет в одной колонке и Местонахождение, и ОсновноеСредство. Столбиком, друг под другом... Что тут не понятно? :)
|
|||
33
Serg_1960
15.07.09
✎
16:44
|
Mitriy, это твой шанс получить спасибо :) Подскажи автору как обойти строки дерева и из одной колонки перенести значение в другую и скрыть эту колонку с показа :))
|
|||
34
Nikotrisa
15.07.09
✎
16:45
|
(30) нужен результат как в (9) а выходит с 2 колонками и без иерархии ОС.
- Подразделение1 NULL NULL ОС стол NULL ОС стул NULL ОС комп NULL ОС Станок - Подразделение2 NULL NULL ОС прилавок..... а хотелось бы 1 колонкой, с иерархией сначала подразделений и потом их ОС |
|||
35
Nikotrisa
15.07.09
✎
16:49
|
что то мне интуиция подсказывает что запрос здесь просто не справится...
эта технология заточена деревья выводить только по иерархически связанным источникам данных. надеюсь я тут ошибаюсь :) а то как то медленно получится стыковать эти выборки меж собой... |
|||
36
NULLL
15.07.09
✎
16:51
|
Обход результата:
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Строка = Дерево.Строки.Добавить(); Строка.ОсновноеСредство = Выборка.Местонахождение; РекурсивнаяПроцедура(Строка,Выборка); КонецЦикла; Процедура РекурсивнаяПроцедура(Строка,Выборка) ВыборкаОС = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОС.Следующий() Цикл НоваяСтрока = Строка.Строки.Добавить(); НоваяСтрока.ОсновноеСредство = ВыборкаОС.ОсновноеСредство; РекурсивнаяПроцедура(НоваяСтрока,ВыборкаОС); КонецЦикла; КонецПроцедуры Только тут без учета иерархии подразделений. |
|||
37
NULLL
15.07.09
✎
16:53
|
(33) Я уже показал, только автор не заметил.
|
|||
38
НЕА123
15.07.09
✎
16:55
|
(36)
тогда запрос типа так Запрос.Текст = "ВЫБРАТЬ | ВЫБОР КОГДА ИСТИНА МестонахождениеОССрезПоследних.Местонахождение ИНАЧЕ МестонахождениеОССрезПоследних.ОсновноеСредство КОНЕЦ КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИТОГИ ПО | Местонахождение, ОсновноеСредство ИЕРАРХИЯ"; Дабы тип ОС у колонки был. |
|||
39
NULLL
15.07.09
✎
16:58
|
(38) Ну вообще у колонки должен быть составной тип данных, и
| ВЫБОР КОГДА ИСТИНА !!!!! Тогда !!!!! МестонахождениеОССрезПоследних.Местонахождение ИНАЧЕ МестонахождениеОССрезПоследних.ОсновноеСредство КОНЕЦ КАК Местонахождение, Только я не пойму что это даст. |
|||
40
Nikotrisa
15.07.09
✎
17:05
|
(39) ничего я так уже пробовала, вложенными, объединенными, либо выводит мусор либо вообще теряет подразделения и выводит только ОС, построитель как бы не считает связь по владельцу основанием строить по этой связи дерево...
|
|||
41
Лефмихалыч
15.07.09
✎
17:06
|
чо тут можно 40 постов обсуждать?
|
|||
42
Nikotrisa
15.07.09
✎
17:07
|
(36) спасибки NULLL, для меня не составит труда состыковать эти данные после запросов, хотела одним запросом все получить...
(41) Левыч закрой тему элегантным и оригинальным решением :) |
|||
43
Nikotrisa
15.07.09
✎
17:09
|
+(42)... все получить, и ничего потом не обходить :)
|
|||
44
Mitriy
15.07.09
✎
17:11
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА ИСТИНА | ТОГДА МестонахождениеОССрезПоследних.Местонахождение | ИНАЧЕ МестонахождениеОССрезПоследних.ОсновноеСредство | КОНЕЦ КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних | |СГРУППИРОВАТЬ ПО | МестонахождениеОССрезПоследних.Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство |ИТОГИ ПО | Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство ИЕРАРХИЯ"; Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ОбойтиСтроки(Дерево.Строки); //ЭлементыФормы.Дерево.СоздатьКолонки(); КонецПроцедуры Процедура ОбойтиСтроки(Строки) Для Каждого СтрокаДерева Из Строки Цикл Если ЗначениеЗаполнено(СтрокаДерева.ОсновноеСредство) Тогда СтрокаДерева.Местонахождение = СтрокаДерева.ОсновноеСредство; КонецЕсли; ОбойтиСтроки(СтрокаДерева.Строки); КонецЦикла; КонецПроцедуры |
|||
45
NULLL
15.07.09
✎
17:13
|
(43) Как?
|
|||
46
Mitriy
15.07.09
✎
17:16
|
(44)* маленькое уточнение:
... |ИТОГИ ПО | Местонахождение, | ОсновноеСредство ТОЛЬКО ИЕРАРХИЯ"; ... ну и с упорядочиванием поиграться для красоты... |
|||
47
Mitriy
15.07.09
✎
17:24
|
с местонахождением засада, однако...
|
|||
48
Serg_1960
15.07.09
✎
17:27
|
Эээ... иерархия по Местонахождению. По ОсновноеСредство - лишнее. Эээ... и колонка дерева - составного типа.
|
|||
49
Mitriy
15.07.09
✎
17:30
|
(48) автор хочет везде иерархию вроде...
там двоение начинается при некоторых условиях... |
|||
50
Serg_1960
15.07.09
✎
17:33
|
(49) Да, действительно в (9) есть. Сорри, запамятовал.
Автор, не теряй надежду - элегантное решение есть :) |
|||
51
NULLL
15.07.09
✎
17:37
|
(50) Ага, выгружать в табличный документ. Автор уже нашла решение без обхода результат, только делится не хочет.
|
|||
52
Serg_1960
15.07.09
✎
17:39
|
(как вариант) У автора рабочее время с 08 до 17:09 :))
ИТОГИ ПО Местонахождение ТОЛЬКО ИЕРАРХИЯ, ОсновноеСредство ИЕРАРХИЯ |
|||
53
Mitriy
15.07.09
✎
17:46
|
(52) не-а... млин, так и придется обычным обходом...
|
|||
54
НЕА123
15.07.09
✎
17:48
|
(39) это и даст составной тип данных.
(52) в карточке Владивосток. |
|||
55
NULLL
15.07.09
✎
17:56
|
(54) Это если выгружать, то может даст, а в моем случае мне кажется ничего оно не даст.
|
|||
56
Mitriy
15.07.09
✎
17:57
|
получилось без двоений, но как-то не шибко красиво... обход по выборке все же лучше будет, наверное ))
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА ИСТИНА | ТОГДА МестонахождениеОССрезПоследних.Местонахождение | ИНАЧЕ МестонахождениеОССрезПоследних.ОсновноеСредство | КОНЕЦ КАК Местонахождение, | МестонахождениеОССрезПоследних.ОсновноеСредство КАК ОсновноеСредство |ИЗ | РегистрСведений.МестонахождениеОС.СрезПоследних КАК МестонахождениеОССрезПоследних |ИТОГИ ПО | Местонахождение, | ОсновноеСредство ИЕРАРХИЯ"; Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); СтрокиКУдалению = Новый Массив; Если Дерево.Строки.Количество() = 0 Тогда Возврат; КонецЕсли; ОбойтиСтроки(Дерево.Строки, СтрокиКУдалению); Для Каждого СтрокаДерева Из СтрокиКУдалению Цикл СтрокаДерева.Родитель.Строки.Удалить(СтрокаДерева); КонецЦикла; ЭлементыФормы.Дерево.СоздатьКолонки(); КонецПроцедуры Процедура ОбойтиСтроки(Строки, СтрокиКУдалению) Если Строки.Количество() = 0 Тогда СтрокиКУдалению.Добавить(Строки.Родитель); Возврат; КонецЕсли; Для Каждого СтрокаДерева Из Строки Цикл Если ЗначениеЗаполнено(СтрокаДерева.ОсновноеСредство) Тогда СтрокаДерева.Местонахождение = СтрокаДерева.ОсновноеСредство; КонецЕсли; ОбойтиСтроки(СтрокаДерева.Строки, СтрокиКУдалению); КонецЦикла; КонецПроцедуры |
|||
57
Mitriy
15.07.09
✎
17:59
|
(55) ну дык как раз и интересно бы выгрузить... и чтобы без телодвижений лишних...
|
|||
58
НЕА123
15.07.09
✎
18:04
|
(55) согласен. в Вашем случае смысла нет. глаз замылился.
|
|||
59
NULLL
15.07.09
✎
18:04
|
Во идиоты. Это можно зделать без рекурсии, через поиск строк, эта функция умеет искать во всем дереве.
|
|||
60
Mitriy
15.07.09
✎
18:07
|
(59) убейся об стенку, сделай доброе дело...
|
|||
61
Serg_1960
15.07.09
✎
18:15
|
(59) спб, расмешил :)
|
|||
62
NULLL
15.07.09
✎
18:18
|
(60) и (61) Не ужели не получится, почему?
|
|||
63
Serg_1960
15.07.09
✎
18:54
|
Процедура ОбойтиСтроки(Строки)
Для Каждого СтрокаДерева Из Строки Цикл СтрокаДерева.ОбщаяКолонка = ?(ЗначениеЗаполнено(СтрокаДерева.Продукция), СтрокаДерева.Продукция.Наименование, СтрокаДерева.Подразделение.Наименование); ОбойтиСтроки(СтрокаДерева.Строки); КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыНаПроизводствоОстатки.Подразделение КАК Подразделение, | ЗаказыНаПроизводствоОстатки.Номенклатура КАК Продукция, | ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК ОбщаяКолонка |ИЗ | РегистрНакопления.ЗаказыНаПроизводство.Остатки КАК ЗаказыНаПроизводствоОстатки |ИТОГИ ПО | Подразделение ИЕРАРХИЯ, | Продукция ИЕРАРХИЯ"; Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ОбойтиСтроки(Дерево.Строки); Дерево.Колонки.Удалить(0); Дерево.Колонки.Удалить(0); Дерево.ВыбратьСтроку(); Возврат; КонецПроцедуры |
|||
64
Serg_1960
15.07.09
✎
19:08
|
(62) Меня расмешило "Во идиоты" и его многозначное толкование :)
|
|||
65
НЕА123
16.07.09
✎
09:35
|
(64)
1. а так, интересно, правильно? Процедура ОбойтиСтроки(Строки) НужныеСтроки = Строки.НайтиСтроки(Новый Структура("Продукция", NULL)); Для Каждого СтрокаДерева Из НужныеСтроки Цикл СтрокаДерева.ОбщаяКолонка = СтрокаДерева.Подразделение.Наименование; КонецЦикла; КонецПроцедуры 2. не проще ли использовать конструкцию | ВЫБОР | КОГДА ИСТИНА | ТОГДА МестонахождениеОССрезПоследних.Местонахождение | ИНАЧЕ МестонахождениеОССрезПоследних.ОсновноеСредство | КОНЕЦ КАК Местонахождение чем потом удалять колонку? |
|||
66
НЕА123
16.07.09
✎
09:38
|
+(65)
пардон НужныеСтроки = Строки.НайтиСтроки(Новый Структура("Продукция", NULL), ИСТИНА); второй параметр в (65) забыл указать. |
|||
67
NULLL
16.07.09
✎
10:01
|
(66) Самым лучшим был-бы вариант еслибы вообще ничего удалять не пришлось.
А где же автор, разве я не заслужил спасибо. |
|||
68
Serg_1960
16.07.09
✎
19:16
|
(65) Первый вариант: Пардон. Тогда вызов и процедура ОбойтиСтроки вообще не нужны.
Второй вариант: Не прокатит, ВЫБОР - пролетает. Итоги с использованием ИЕРАРХИЯ - значения регистра не будут присутствовать/вычисляться в иерархических записях. |
|||
69
Mitriy
17.07.09
✎
09:34
|
(68) а чем (56) не понравилось? вполне себе работает, если через СоздатьКолонки(), то можно колонку удалить, а если сделать колонку в табполе, то можно и не удалять, зато значения ссылочные, а не строковые...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |