Имя: Пароль:
1C
1С v8
глупый? вопрос по запросу в 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
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
я чето не туда глянул походу.
Вечером надо будет разобраться