Имя: Пароль:
1C
1С v8
РезультатЗапроса.Выбрать(ТипОбхода, ?, ?)
0 PR
 
02.09.11
16:50
Кто-нибудь может доступно объяснить, что означают второй и третий параметры метода "Выбрать" из результата запроса?
И что означает например
Выборка1 = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Клиент");
Пока Выборка1.Следующий() Цикл
   Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Клиент, Подразделение", "ВСЕ, ");
КонецЦикла;
?
1 PR
 
02.09.11
16:51
Или вопрос по-другому.
Как при выборке к примеру продаж вывести цифры вручную в кросс-таблицу, в строках клиенты, в колонках подразделения и организации?
2 shuhard
 
02.09.11
16:51
(0) ВСЕ в связке с периодами идёт
3 PR
 
02.09.11
16:55
(2) При чем здесь периоды?
4 PR
 
02.09.11
17:36
Как всегда, как потрындеть, сколько должен одинесник получать или почем Украине газ продавать, так бегут наперебой посты писать, а как по профессиональной деятельности спросишь, так никто и не знает оказывается :))
5 acsent
 
02.09.11
17:38
третий параметр "все" - это как раз для кроссстаблицы
6 acsent
 
02.09.11
17:38
Имя нруппировки - можно не указывать
7 azernot
 
02.09.11
17:48
Я для себя это как-то определил с помощью примеров. Понял на каком-то интуитивном внутреннем уровне, объянить постороннему не возьмусь - боюсь ошибиться.

Вот мой пример:
Есть таблица данных

!!!!!!
 ААААА
   11111
   22222
   33333
 БББББ
   11111
   22222
 ВВВВВ
   11111
#####
 ААААА
   22222
   33333
 БББББ
   33333
 ВВВВВ
   11111
   33333
   44444
$$$$$
 БББББ
   44444
   22222
   33333
 ВВВВВ
   11111
   22222
   44444
(ресурс для каждой строки равен 1)


Запрос
ВЫБРАТЬ
   "!!!!!" КАК Символ,
   "ААААА" КАК Буква,
   "11111" КАК Цифра,
   1 КАК Ресурс
ПОМЕСТИТЬ Группировки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "!!!!!",
   "ААААА",
   "22222",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "!!!!!",
   "ААААА",
   "33333",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "!!!!!",
   "БББББ",
   "11111",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "!!!!!",
   "БББББ",
   "22222",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "!!!!!",
   "ВВВВВ",
   "11111",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "ААААА",
   "33333",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "ААААА",
   "22222",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "БББББ",
   "33333",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "ВВВВВ",
   "11111",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "ВВВВВ",
   "44444",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "#####",
   "ВВВВВ",
   "33333",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "БББББ",
   "44444",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "БББББ",
   "22222",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "БББББ",
   "33333",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "ВВВВВ",
   "11111",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "ВВВВВ",
   "44444",
   1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "$$$$$",
   "ВВВВВ",
   "22222",
   1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Группировки.Символ КАК Символ,
   Группировки.Буква КАК Буква,
   Группировки.Цифра КАК Цифра,
   Группировки.Ресурс КАК Ресурс
ИЗ
   Группировки КАК Группировки
ИТОГИ
   СУММА(Ресурс)
ПО
   ОБЩИЕ,
   Символ,
   Буква,
   Цифра


Обработка результатов запроса

ВыборкаОбщихИтогов = РезЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщихИтогов.Следующий();

ВыборкаПоСимволам =  ВыборкаОбщихИтогов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Символ", "Все");
Пока ВыборкаПоСимволам.Следующий() Цикл
   Сообщить("По символам. Символ = "+ ВыборкаПоСимволам.Символ + "; Буква = "+ВыборкаПоСимволам.Буква + "; Цифра = "+ВыборкаПоСимволам.Цифра +"; Сумма итога = "+ ВыборкаПоСимволам.Ресурс);
   ВыборкаПоСимволамБуквам =  ВыборкаПоСимволам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаПоСимволамБуквам.Следующий() Цикл
       Сообщить("По символам буквам. Символ = "+ ВыборкаПоСимволамБуквам.Символ + "; Буква = "+ВыборкаПоСимволамБуквам.Буква + "; Цифра = "+ВыборкаПоСимволамБуквам.Цифра +"; Сумма итога = "+ ВыборкаПоСимволамБуквам.Ресурс);
       ВыборкаПоСимволамБуквамЦифрам =  ВыборкаПоСимволамБуквам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаПоСимволамБуквамЦифрам.Следующий() Цикл
           Сообщить("По символам буквам цифрам. Символ = "+ ВыборкаПоСимволамБуквамЦифрам.Символ + "; Буква = "+ВыборкаПоСимволамБуквамЦифрам.Буква + "; Цифра = "+ВыборкаПоСимволамБуквамЦифрам.Цифра +"; Сумма итога = "+ ВыборкаПоСимволамБуквамЦифрам.Ресурс);
       КонецЦикла;    
   КонецЦикла;    
КонецЦикла;    

ВыборкаПоВсемБуквам =  ВыборкаОбщихИтогов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Буква");
Пока ВыборкаПоВсемБуквам.Следующий() Цикл
   Сообщить("Все буквы. Символ = "+ ВыборкаПоВсемБуквам.Символ + "; Буква = "+ВыборкаПоВсемБуквам.Буква + "; Цифра = "+ВыборкаПоВсемБуквам.Цифра +"; Сумма итога = "+ ВыборкаПоВсемБуквам.Ресурс);
   
   ВыборкаПоВсемЦифрам =  ВыборкаПоВсемБуквам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Цифра", "Все");
   //В выборке будут все значения цифр встречающиеся в запросе, хотя ресурсы будут посчитаны с учётом группировки по буквам
   Пока ВыборкаПоВсемЦифрам.Следующий() Цикл
       Сообщить("Все цифры. Символ = "+ ВыборкаПоВсемЦифрам.Символ + "; Буква = "+ВыборкаПоВсемЦифрам.Буква + "; Цифра = "+ВыборкаПоВсемЦифрам.Цифра +"; Сумма итога = "+ ВыборкаПоВсемЦифрам.Ресурс);
       
       ВыборкаПоСимволам =  ВыборкаПоВсемЦифрам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Символ", "Буква");
       //В выборке будут все только символы  встречающиеся на уровне буквы, т.е. не только те, которые присутствуют для текущей Цифры, но и не все встречающиеся в запросе
       Пока ВыборкаПоСимволам.Следующий() Цикл
           Сообщить("Все символы. Символ = "+ ВыборкаПоСимволам.Символ + "; Буква = "+ВыборкаПоСимволам.Буква + "; Цифра = "+ВыборкаПоСимволам.Цифра +"; Сумма итога = "+ ВыборкаПоСимволам.Ресурс);
       КонецЦикла;    
   КонецЦикла;    
КонецЦикла;    


Результат в окне сообщений:

По символам. Символ = !!!!!; Буква = ; Цифра = ; Сумма итога = 6
По символам буквам. Символ = !!!!!; Буква = ААААА; Цифра = ; Сумма итога = 3
По символам буквам цифрам. Символ = !!!!!; Буква = ААААА; Цифра = 11111; Сумма итога = 1
По символам буквам цифрам. Символ = !!!!!; Буква = ААААА; Цифра = 22222; Сумма итога = 1
По символам буквам цифрам. Символ = !!!!!; Буква = ААААА; Цифра = 33333; Сумма итога = 1
По символам буквам. Символ = !!!!!; Буква = БББББ; Цифра = ; Сумма итога = 2
По символам буквам цифрам. Символ = !!!!!; Буква = БББББ; Цифра = 11111; Сумма итога = 1
По символам буквам цифрам. Символ = !!!!!; Буква = БББББ; Цифра = 22222; Сумма итога = 1
По символам буквам. Символ = !!!!!; Буква = ВВВВВ; Цифра = ; Сумма итога = 1
По символам буквам цифрам. Символ = !!!!!; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
По символам. Символ = #####; Буква = ; Цифра = ; Сумма итога = 6
По символам буквам. Символ = #####; Буква = ААААА; Цифра = ; Сумма итога = 2
По символам буквам цифрам. Символ = #####; Буква = ААААА; Цифра = 22222; Сумма итога = 1
По символам буквам цифрам. Символ = #####; Буква = ААААА; Цифра = 33333; Сумма итога = 1
По символам буквам. Символ = #####; Буква = БББББ; Цифра = ; Сумма итога = 1
По символам буквам цифрам. Символ = #####; Буква = БББББ; Цифра = 33333; Сумма итога = 1
По символам буквам. Символ = #####; Буква = ВВВВВ; Цифра = ; Сумма итога = 3
По символам буквам цифрам. Символ = #####; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
По символам буквам цифрам. Символ = #####; Буква = ВВВВВ; Цифра = 33333; Сумма итога = 1
По символам буквам цифрам. Символ = #####; Буква = ВВВВВ; Цифра = 44444; Сумма итога = 1
По символам. Символ = $$$$$; Буква = ; Цифра = ; Сумма итога = 6
По символам буквам. Символ = $$$$$; Буква = БББББ; Цифра = ; Сумма итога = 3
По символам буквам цифрам. Символ = $$$$$; Буква = БББББ; Цифра = 22222; Сумма итога = 1
По символам буквам цифрам. Символ = $$$$$; Буква = БББББ; Цифра = 33333; Сумма итога = 1
По символам буквам цифрам. Символ = $$$$$; Буква = БББББ; Цифра = 44444; Сумма итога = 1
По символам буквам. Символ = $$$$$; Буква = ВВВВВ; Цифра = ; Сумма итога = 3
По символам буквам цифрам. Символ = $$$$$; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
По символам буквам цифрам. Символ = $$$$$; Буква = ВВВВВ; Цифра = 22222; Сумма итога = 1
По символам буквам цифрам. Символ = $$$$$; Буква = ВВВВВ; Цифра = 44444; Сумма итога = 1
Все буквы. Символ = ; Буква = ААААА; Цифра = ; Сумма итога = 5
Все цифры. Символ = ; Буква = ААААА; Цифра = 11111; Сумма итога = 1
Все символы. Символ = !!!!!; Буква = ААААА; Цифра = 11111; Сумма итога = 1
Все символы. Символ = #####; Буква = ААААА; Цифра = 11111; Сумма итога =
Все цифры. Символ = ; Буква = ААААА; Цифра = 22222; Сумма итога = 2
Все символы. Символ = !!!!!; Буква = ААААА; Цифра = 22222; Сумма итога = 1
Все символы. Символ = #####; Буква = ААААА; Цифра = 22222; Сумма итога = 1
Все цифры. Символ = ; Буква = ААААА; Цифра = 33333; Сумма итога = 2
Все символы. Символ = !!!!!; Буква = ААААА; Цифра = 33333; Сумма итога = 1
Все символы. Символ = #####; Буква = ААААА; Цифра = 33333; Сумма итога = 1
Все цифры. Символ = ; Буква = ААААА; Цифра = 44444; Сумма итога =
Все буквы. Символ = ; Буква = БББББ; Цифра = ; Сумма итога = 6
Все цифры. Символ = ; Буква = БББББ; Цифра = 11111; Сумма итога = 1
Все символы. Символ = !!!!!; Буква = БББББ; Цифра = 11111; Сумма итога = 1
Все символы. Символ = #####; Буква = БББББ; Цифра = 11111; Сумма итога =
Все символы. Символ = $$$$$; Буква = БББББ; Цифра = 11111; Сумма итога =
Все цифры. Символ = ; Буква = БББББ; Цифра = 22222; Сумма итога = 2
Все символы. Символ = !!!!!; Буква = БББББ; Цифра = 22222; Сумма итога = 1
Все символы. Символ = #####; Буква = БББББ; Цифра = 22222; Сумма итога =
Все символы. Символ = $$$$$; Буква = БББББ; Цифра = 22222; Сумма итога = 1
Все цифры. Символ = ; Буква = БББББ; Цифра = 33333; Сумма итога = 2
Все символы. Символ = !!!!!; Буква = БББББ; Цифра = 33333; Сумма итога =
Все символы. Символ = #####; Буква = БББББ; Цифра = 33333; Сумма итога = 1
Все символы. Символ = $$$$$; Буква = БББББ; Цифра = 33333; Сумма итога = 1
Все цифры. Символ = ; Буква = БББББ; Цифра = 44444; Сумма итога = 1
Все символы. Символ = !!!!!; Буква = БББББ; Цифра = 44444; Сумма итога =
Все символы. Символ = #####; Буква = БББББ; Цифра = 44444; Сумма итога =
Все символы. Символ = $$$$$; Буква = БББББ; Цифра = 44444; Сумма итога = 1
Все буквы. Символ = ; Буква = ВВВВВ; Цифра = ; Сумма итога = 7
Все цифры. Символ = ; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 3
Все символы. Символ = !!!!!; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
Все символы. Символ = #####; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
Все символы. Символ = $$$$$; Буква = ВВВВВ; Цифра = 11111; Сумма итога = 1
Все цифры. Символ = ; Буква = ВВВВВ; Цифра = 22222; Сумма итога = 1
Все символы. Символ = !!!!!; Буква = ВВВВВ; Цифра = 22222; Сумма итога =
Все символы. Символ = #####; Буква = ВВВВВ; Цифра = 22222; Сумма итога =
Все символы. Символ = $$$$$; Буква = ВВВВВ; Цифра = 22222; Сумма итога = 1
Все цифры. Символ = ; Буква = ВВВВВ; Цифра = 33333; Сумма итога = 1
Все символы. Символ = !!!!!; Буква = ВВВВВ; Цифра = 33333; Сумма итога =
Все символы. Символ = #####; Буква = ВВВВВ; Цифра = 33333; Сумма итога = 1
Все символы. Символ = $$$$$; Буква = ВВВВВ; Цифра = 33333; Сумма итога =
Все цифры. Символ = ; Буква = ВВВВВ; Цифра = 44444; Сумма итога = 2
Все символы. Символ = !!!!!; Буква = ВВВВВ; Цифра = 44444; Сумма итога =
Все символы. Символ = #####; Буква = ВВВВВ; Цифра = 44444; Сумма итога = 1
Все символы. Символ = $$$$$; Буква = ВВВВВ; Цифра = 44444; Сумма итога = 1


Думаю, если возьмёшь и поиграешься, то тоже для себя что-то прояснишь.
8 PR
 
02.09.11
17:50
(5) Все понятно до тех пор, пока выводишь одну группировку для колонок, просто для нее указываешь "ВСЕ".
А если нужно в колонках вывести две группировки, что писать в последней выборке (Выборка3 в моем примере)?
Выборка1 = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Клиент");

Пока Выборка1.Следующий() Цикл
   Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Организация", "ВСЕ");
   Пока Выборка2.Следующий() Цикл
       Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение");
       Пока Выборка3.Следующий() Цикл
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
9 Ёпрст
 
02.09.11
17:50
(0) второй вообще никак не используется и нахрен он нужен - не ясно.
10 PR
 
02.09.11
17:52
(9) Да ну! Вообще-то в нем указываешь, по каким полям обходить группировки.
11 azernot
 
02.09.11
17:55
В третьем параметре указываешь перечень группировок с коотрых собирать значения группировок. Т.е. Если в (8) Нужно в Выборке3 перебрать все подразделения для клиента независимо от того, если ли такие подразделения для текущей организации нудно указать Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение", "Клиент");
12 PR
 
02.09.11
18:00
(11) Не так.
В Выборке3 нужно выбрать все подразделения для организации, независимо от того, были ли они в клиенте.
13 azernot
 
02.09.11
18:03
(12) Тогда у тебя в (8) правильный код..
14 PR
 
02.09.11
18:05
(13) Так то и странно, что код правильный, а не получается.
Лесенка выводится.
15 azernot
 
02.09.11
18:24
(14) Да, видимо никак... Нужно формировать отдельный список всех подразделений для организаций, перебирать его и юзать "НайтиСледующий"
16 PR
 
02.09.11
18:33
(15) Да так и сделали примерно.
Обыдна просто, что не работает o_O
17 PR
 
02.09.11
18:41
Так, кстати и осталось покрыто мраком, что значит указание во втором и третьем параметрах нескольких группировок через запятую.
Например
Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Клиент, Подразделение", "ВСЕ, ");
18 PR
 
02.09.11
19:55
Самый простой вариант обойтись малой кровью видимо такой
Выборка1 = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Клиент");

Пока Выборка1.Следующий() Цикл
   Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Организация", "ВСЕ");
   Пока Выборка2.Следующий() Цикл
       Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение", "ВСЕ");
       Пока Выборка3.Следующий() Цикл
           //Если здесь подразделение, не входящее в список подразделений для этой организации, то пропускаем
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
Закон Брукера: Даже маленькая практика стоит большой теории.