|
глупый? вопрос по запросу в 82 | ☑ | ||
---|---|---|---|---|
0
1cnik2
30.01.13
✎
10:05
|
можно ли так выбирать?
пишу запрос - 5 полей: Выбрать Поле1,Поле2,Поле3,Поле4,Поле5 Из КакаятоТаблица Итоги по Поле1,Поле2,Поле3,Поле4,Поле5 пробую выбрать его так: ВыборкаЗапросаУровень1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1,Поле2"); Пока ВыборкаЗапроса.Следующий() Цикл Сообщить(Строка(ВыборкаЗапросаУровень1.Поле1) + " " + Строка(ВыборкаЗапросаУровень1.Поле2)); КонецЦикла; в выборке оказывается значение только поля1, поле2=Null можно ли вообще выбрать запрос аналогично компоновке, когда в группировке указано несколько полей, как мне, к примеру, нужны "Поле1,Поле2", "Поле3,Поле4" и детальные записи "поле5" или только так - выборка запроса по полю1, потом выборка этой выборки по полю 2, потом выборка этой выборки по полю 3... ? |
|||
1
golden-pack
30.01.13
✎
10:07
|
нет
|
|||
2
1cnik2
30.01.13
✎
10:07
|
просто полей не 5, а на порядок больше, и хочется сохранить читаемость кода
|
|||
3
1cnik2
30.01.13
✎
10:08
|
(1) объясните, а в чем тогда смысл второго и третьего параметров метода Выбрать() ?
|
|||
4
1cnik2
30.01.13
✎
10:11
|
up
|
|||
5
1cnik2
30.01.13
✎
10:15
|
я не понимаю, это очевидно или никто не знает?
|
|||
6
ДенисЧ
30.01.13
✎
10:16
|
вчера тема такая была...
|
|||
7
Wobland
30.01.13
✎
10:17
|
человек хочет обходить дерево, не сделав итоги?
|
|||
8
ДенисЧ
30.01.13
✎
10:18
|
||||
9
1cnik2
30.01.13
✎
10:20
|
(7) читай внимательно 2 строку сообщения
|
|||
10
1cnik2
30.01.13
✎
10:21
|
(8) собственно, ответ, похоже, в (1), но мне тогда непонятно (3)
|
|||
11
1cnik2
30.01.13
✎
10:31
|
Up
|
|||
12
hhhh
30.01.13
✎
11:10
|
(10) это если группировки в колонках. Чтобы в каждой строчке было одинаковое количество колонок.
|
|||
13
1cnik2
30.01.13
✎
11:12
|
(12) мм, это 3-й параметр, правильно? а зачем возможность указывать несколько полей во втором?
|
|||
14
Defender aka LINN
30.01.13
✎
11:14
|
(0) "пробую выбрать его так". А ты перед этим пробовал посмотреть, что пишет СП про второй параметр, не?
|
|||
15
iceman2112
30.01.13
✎
11:18
|
посмотри то не то
v8: Итоги по нескольким полям в запросе |
|||
16
iceman2112
30.01.13
✎
11:18
|
а пардон скинули уже
|
|||
17
1cnik2
30.01.13
✎
11:20
|
(15) не то
|
|||
18
1cnik2
30.01.13
✎
11:22
|
(14) представь себе, пробовал:
"Список группировок по которым будет вестись обход, разделенных запятыми." мне непонятно, почему, когда я указываю 2 поля, оно делает строки выборке только по 1 полю? |
|||
19
Rovan
гуру
30.01.13
✎
11:33
|
(0) к примеру, нужны "Поле1,Поле2", "Поле3,Поле4"...
можно "Поле1,Поле2" - доступны на 1м уроне группировки... "Поле3,Поле4" - доступны на 3м уроне остальные уровни обходи пустым циклом |
|||
20
iceman2112
30.01.13
✎
11:43
|
(0) все кажись, понял, это кстати и решает мою проблему.
Т.е. чтобы тебе не открывать 5 выборок, ты можешь перечилить их в этих полях Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1, Поле2"); Пока Выборка .Следующий() Цикл Если Выборка.Группировка() <> "Поле2" Тогда Продолжить; КонецЕсли; Выборка2 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл п = 0; КонецЦикла; КонецЦикла; |
|||
21
1cnik2
30.01.13
✎
11:51
|
(19) ну это я и так знаю.. вот у меня сейчас как:
ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса1.Следующий() Цикл ВыборкаЗапроса2 = ВыборкаЗапроса1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса2.Следующий() Цикл ВыборкаЗапроса3 = ВыборкаЗапроса2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса3.Следующий() Цикл в ВыборкаЗапроса3 доступны Поле1, Поле2, Поле3 а я интересовался, можно ли сделать так, что ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1,Поле2,Поле3"); Пока ВыборкаЗапроса1.Следующий() Цикл и чтобы Поле1,Поле2,Поле3 были доступны в ВыборкаЗапроса1 |
|||
22
iceman2112
30.01.13
✎
11:53
|
Смотри(20)
ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1,Поле2,Поле3"); Пока ВыборкаЗапроса1.Следующий() Цикл Если ВыборкаЗапроса1.Группировка() <> "Поле3" Тогда Продлождить; КонецЕсли; // тут у тебя уже Поле1, Поле2, Поле3 заполнены КонецЦикла; |
|||
23
1cnik2
30.01.13
✎
11:58
|
(22) пробую:
ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1, Поле2, Поле3"); Пока ВыборкаЗапроса1.Следующий() Цикл Сообщить(ВыборкаЗапроса1.Поле1 + " " + ВыборкаЗапроса1.Поле2 + " " + ВыборкаЗапроса1.Поле3 ); //ВыборкаЗапроса2 = ВыборкаЗапроса1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //Пока ВыборкаЗапроса2.Следующий() Цикл На что он мне выводит всего одну строку в выборке, где поле2 = Null и поле3 = Null |
|||
24
iceman2112
30.01.13
✎
12:01
|
Потому что ты невнимательный, чтоли
а где Если ВыборкаЗапрос1.Группировка() <> "Поле3" |
|||
25
1cnik2
30.01.13
✎
12:03
|
(24) ты в своем примере(22) говоришь о том, что если в ВыборкаЗапроса1 чтото есть, то минимум 3 строки, из которых третья та, что нужно(те заполнены все 3 Поле1,Поле2,Поле3)
а у меня в этом примере получается всего одна строка, те Сообщить() отрабатывает всего раз. а если я допишу Если ВыборкаЗапрос1.Группировка() <> "Поле3", ничего не изменится |
|||
26
iceman2112
30.01.13
✎
12:04
|
мб у тебя в запросе вообще одна строка?
|
|||
27
iceman2112
30.01.13
✎
12:05
|
посмотри Запрос.Выполнить.Выгрузить()
|
|||
28
1cnik2
30.01.13
✎
12:07
|
даже если в первичной выборке всего 1 строка, это 4 строки: 3 для группировок + 1 детальные записи
+1, если общие итоги |
|||
29
iceman2112
30.01.13
✎
12:12
|
что выдает
Запрос.Выполнить.Выгрузить() |
|||
30
1cnik2
30.01.13
✎
12:13
|
абстрактный пример (можно скопипастить):
Запрос = Новый Запрос; ЗАпрос.Текст = "ВЫБРАТЬ | ВложенныйЗапрос.Поле1 КАК Поле1, | ВложенныйЗапрос.Поле2 КАК Поле2, | ВложенныйЗапрос.Поле3 КАК Поле3, | ВложенныйЗапрос.Поле4 КАК Поле4, | ВложенныйЗапрос.Поле5 КАК Поле5 |ИЗ | (ВЫБРАТЬ | ""1"" КАК Поле1, | ""2"" КАК Поле2, | ""3"" КАК Поле3, | ""4"" КАК Поле4, | ""5"" КАК Поле5) КАК ВложенныйЗапрос |ИТОГИ ПО | Поле1, | Поле2, | Поле3, | Поле4, | Поле5"; ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поле1,Поле2,Поле3"); Пока ВыборкаЗапроса1.Следующий() Цикл Сообщить(ВыборкаЗапроса1.Поле1 + " " + ВыборкаЗапроса1.Поле2 + " " + ВыборкаЗапроса1.Поле3 ); КонецЦикла; |
|||
31
iceman2112
30.01.13
✎
12:14
|
просто сколько строк таблице?
|
|||
32
1cnik2
30.01.13
✎
12:16
|
продолжение этого же примера(скопипастить ниже). как говорится, почувствуйте разницу
ВыборкаЗапроса1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса1.Следующий() Цикл ВыборкаЗапроса2 = ВыборкаЗапроса1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса2.Следующий() Цикл ВыборкаЗапроса3 = ВыборкаЗапроса2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗапроса3.Следующий() Цикл Сообщить(ВыборкаЗапроса3.Поле1 + " " + ВыборкаЗапроса3.Поле2 + " " + ВыборкаЗапроса3.Поле3 ); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
33
iceman2112
30.01.13
✎
12:16
|
нужно строк в таблице, это все и так ясно
|
|||
34
1cnik2
30.01.13
✎
12:19
|
да какая разница, сколько строк??
Сообщить("Количество строк Запрос.Выполнить().Выгрузить() = " + Строка(Запрос.Выполнить().Выгрузить().Количество())) пишет 6 для примера выше |
|||
35
1cnik2
30.01.13
✎
12:23
|
1
1 2 3 Количество строк Запрос.Выполнить().Выгрузить() = 6 |
|||
36
1cnik2
30.01.13
✎
12:28
|
ощущается бесполезность второго параметра Выбрать()
|
|||
37
1cnik2
30.01.13
✎
12:35
|
таки это так и должно быть, или ошибка платформы?
|
|||
38
1cnik2
30.01.13
✎
12:39
|
я пробую на 8.2.15.317, кто-нибудь запускал на другой?
|
|||
39
iceman2112
30.01.13
✎
12:51
|
я чето не туда глянул походу.
Вечером надо будет разобраться |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |