Имя: Пароль:
1C
1С v8
Запрос: как в одним цикле обхода получить сразу все итоговые поля?
0 абсурд 1С
 
29.06.15
13:24
Стандартно технология обхода запроса итоговых более низких уровней предполагает сначала обход более верхних. В противном случае, если сразу указать вторым параметром группировку более нижнего уровня, то значения этого итогового поля будут доступны в обходе, но значения более высоких группировочных полей нет. Чаще всего требуется получать при обходе результата запроса значения сразу всех итоговых полей.
Собственно вопрос: как в одним цикле обхода получить значения сразу всех итоговых полей запроса?
1 Maniac
 
29.06.15
13:27
Бросай 77
2 Mikeware
 
29.06.15
13:28
1с++ - Группировать()
да, и брось в маню тапком.
3 абсурд 1С
 
29.06.15
13:43
(1) я про 8)
Вот пример:
... итоги по поле1, поле2, поле3
выборка1 = запрос.выполнить().выбрать(ОбходаРезультатаЗапроса.ПоГруппировкам,"поле1");
пока выборка1.Следующий() цикл
выборка2 = выборка1.выбрать(ОбходРезультатаЗапроа.ПоГруппировкам,"поле2");
пока выборка2.Следующий() цикл
   выборка3 = выборка2.выбрать(ОбходРезультатаЗпроса.ПоГрупиировкам,"поле3");
   пока выборка3.Следующий() цикл
   //только здесь будут доступны значения всех итоговых полей. а если их не три, а больше?
конеццикла;
конеццикла;
конеццикла;
Как избежать вложеных циклов, если значения более высоких уровней по отдельности не требются?
4 Ненавижу 1С
 
гуру
29.06.15
13:44
(3) если не требуются, то и убери их из текста запроса и обходи тупо запрос.выполнить().выбрать()
5 butterbean
 
29.06.15
13:44
(3) зачем тогда в запросе рассчитывать итоги по этим полям?
6 абсурд 1С
 
29.06.15
13:45
(4) нет не так - не требуются ПО_ОТДЕЛЬНОСТИ.
7 абсурд 1С
 
29.06.15
13:49
(4)+Вот вам практический пример есть линейный список из которого часть реквизитов могут являтся шапкой документа, часть табличной частью. Делаем итоги по полям шапки. при обходе итогов заполняем шапку, при обходе деталей табличную часть.
8 абсурд 1С
 
29.06.15
13:56
При чем почему-то не всегда верхние уровни итогов недоступны, если на первом цикле обхода указать итоговое поле (2-й параметр) не верхнего уровня... могу привести пример
9 hhhh
 
29.06.15
13:56
(7) тогда Итоги по Ссылка.
10 абсурд 1С
 
29.06.15
13:59
(9) а ссылки еще нет. Ссылка еще появится после записи документа)
11 абсурд 1С
 
29.06.15
14:00
+10 конечно если ряд значений входят в состав объекта к которому можно обратиться по ссылке, то не вопрос
12 hhhh
 
29.06.15
14:10
тогда зачем запрос?
13 D_E_S_131
 
29.06.15
14:26
(10) "а ссылки еще нет" — ее можно "сделать".
14 абсурд 1С
 
29.06.15
14:30
(12) зависит от конкретной ситуации. мне чаще всего требуются итоги по группе полей, а не по одному. загрузка документов это лишь один пример. чаще могут требоваться результаты агрегатных функций. но опять же по нескольким полям.
Тем, кто работает с консолью запросов известно, что результаты запроса с итогами выводятся "как бы" лесенкой. Мне, например, часто приходила в голову мысль как бы убрать самые верхние "ступеньки".
Вообще странно слышать от людей со стажем такие вопросы.
15 D_E_S_131
 
29.06.15
14:34
"Сразу по нескольким полям" — это "Группировка", еще СКД умеет и свертка ТЗ.

"Вообще странно слышать от людей со стажем такие вопросы." — судя по темам последних лет, скоро "люди со стажем" будут сами по себе странной странностью. :(
16 абсурд 1С
 
29.06.15
14:38
(15) тз вообще пережиток семерки - стараюсь вообще не пользоваться где можно.
в данном случае - для заргузки документов требуются именно итоги и сразу по всем полям шапки, а не отдельно по номеру, дате и др..
17 Гёдза
 
29.06.15
14:44
скд спасет отца русской демократии
18 D_E_S_131
 
29.06.15
14:45
"тз вообще пережиток семерки" — а, ну извините...
19 абсурд 1С
 
29.06.15
14:54
(18) лично я бы любителей переборов тз. руки бы им..
имхо код с участием тз зачастую малочитабельный и очень багги.
20 Fragster
 
гуру
29.06.15
14:56
прямой обход, Выборка.Группировка() = "имянижнейгруппировки"
21 Fragster
 
гуру
29.06.15
14:56
Выборка.ТипЗаписи() еще может пригодиться
22 hhhh
 
29.06.15
14:58
(19) но тз идеально вам подходит. Но вложенные циклы тоже вариант, чем они вас не устаивают? Вы слишком религиозны, это вам не то, то не это.
23 абсурд 1С
 
29.06.15
14:59
(17) СКД? из пулемета по воробъям?
СКД это средство генерации отчетов и весьма "тяжелый" объект
Вообще цель вопроса была - облегчить код. Сделать его более понятным и лаконичным. А у Вас получается "за что боролись")
24 Goggy
 
29.06.15
14:59
*Пошёл прятаться за плинтусом, чтоб руки не поотрывали за оптимальный код*
25 абсурд 1С
 
29.06.15
15:03
(22) нет же - Почему Вы не видите очевидного? - запрос это практически готовая табличная часть, а итоги это шапка будущего документа
26 абсурд 1С
 
29.06.15
15:06
(20) Вот! Человек! Пропустим верхние "ступеньки"? Это мысль!
27 hhhh
 
29.06.15
15:16
(25) но я просто не понимаю. Всегда через ТЗ получается ровно одна строчка:

ТЧ.Загрузить(Запрос.Выполнить().Выгрузить());

Чего тут нечитабельного?
28 Goggy
 
29.06.15
15:25
(27) первое слово в его нике
29 абсурд 1С
 
29.06.15
15:26
(27) а вы с чего  решили что у меня всего один документ в данных???
30 абсурд 1С
 
29.06.15
15:27
(28) а вы на основании чего такой самоуверенный?)
31 абсурд 1С
 
29.06.15
15:31
(20) Респект! Красота! Что-то я сам этого не увидел.
Вот что значит - Одна голова хорошо, а две - креативно!!!
32 D_E_S_131
 
29.06.15
16:12
(23) "СКД это средство генерации отчетов и весьма "тяжелый" объект" — вообще уже давно и активно СКД используется как средство выборки данных. Похоже причина "красоты кода" кроется все же в знаниях ТС...