Имя: Пароль:
1C
1С v8
Группировки в запросе
0 AllJoke
 
04.12.13
14:28
Всем времени доброго. Группировками пользуюсь редко в запросе, поэтому и спрашиваю. есть запрос, выводит результат следующим образом:

600000003    10.11.2012 0:00:00    10.11.2013 0:00:00    5 000    Заблокирован    -2 060    16.11.2012 19:16:46    5697    2 940
600000003    10.11.2012 0:00:00    10.11.2013 0:00:00    5 000    Заблокирован    -2 940    20.06.2013 17:56:04    451    2 060

Как бы мне сделать так, чтобы он выводил:

600000003    10.11.2012 0:00:00    10.11.2013 0:00:00    5 000    Заблокирован

а потом две строки:

-2 060    16.11.2012 19:16:46    5697    2 940
-2 940    20.06.2013 17:56:04    451    2 060

Точнее Результат выполения запроса я выгружая в выборку, но вот эти "Обход ПоГруппировка" , "Обход ПО ГруппировкамСИерархией". В них я нуб.
1 chelentano
 
04.12.13
14:31
(0) Обход ПоГруппировка - это если в запросе есть итоги
2 Fram
 
04.12.13
14:34
(0) если для отчета, то СКД решает этот вопрос на уровне настроек
3 AllJoke
 
04.12.13
14:43
(2) Нет. Мне нужно для выгрузки в файл. По поводу СКД знаю, там проще.
(1) Это я понял. А как сделать в моем случае. Брать Итоги? Но там не нужны итогу, нужны именно детальные записи по одному сертификату.
4 chelentano
 
04.12.13
14:45
(3) либо с итогами и ОбходПоГруппировке, либо без итогов с сортировкой по сертификату и обрабатывай сам вывод
5 МихаилМ
 
04.12.13
14:51
(0)
как программисты работали раньше?
у кнута описаны алгоритмы построения иерархий деревьев, группировок.

напишите   метод ТЗвДЗ(ТЗ,ДЗ,описаниеИерархии)
6 Fram
 
04.12.13
14:51
(3) Тады СледующийПоЗначениюПоля()
Предварительно отсортируй по этому полю
7 AllJoke
 
04.12.13
14:52
(6) Поле то уже отсортировано.
8 AllJoke
 
04.12.13
14:53
В палне у Выборки есть такой метод "СлендующийПоЗначениюПоля"?
9 Fram
 
04.12.13
14:54
(8) да
10 Fram
 
04.12.13
14:54
+(9) очень удобно. часто пользую
11 AllJoke
 
04.12.13
14:55
(10) Щас посмотрю.
12 AllJoke
 
04.12.13
14:58
+(11) а можно примерчик? Чётт в Описании сложно всё.
13 kumena
 
04.12.13
15:15
миста как всегда в ударе. сбила автора с верного пути
14 AllJoke
 
04.12.13
15:16
(13) Опа опа. А где же путь этот верный? ))
15 kumena
 
04.12.13
15:18
в запросе итоги сделай, в функции итогов эти поля
600000003    10.11.2012 0:00:00    10.11.2013 0:00:00    5 000

потом первая выборка по группировке, вторая из неё детальная
16 Halyavnik
 
04.12.13
15:19
Группировать по выодимым полям
В функциях группировки использовать, в зависимости от требуемого результата, Сумма, Среднее, Максимум, Минимум. Есть еще два Количества, но в данном случае их применять не надо.
17 Halyavnik
 
04.12.13
15:21
Сорри, не группировать, а итоги.
18 AllJoke
 
04.12.13
15:22
Ребят, вот запрос, как изменить и обходить выборку его?


ВЫБРАТЬ
    Сертификаты.Код КАК Код,
    Сертификаты.ДатаАктивации КАК ДатаАктивации,
    Сертификаты.ДатаБлокировки КАК ДатаБлокировки,
    Сертификаты.Сумма КАК Номинал,
    Сертификаты.Статус КАК Статус,
    ЕСТЬNULL(СертификатыПроизвольногоНоминала.Сумма, 0) КАК СуммаПродажи,
    ЕСТЬNULL(СертификатыПроизвольногоНоминала.Период, 0) КАК ДатаОплаты,
    ЕСТЬNULL(СертификатыПроизвольногоНоминала.НомерЧекаККМ, 0) КАК НомерЧекаККМ,
    ЕСТЬNULL(Сертификаты.Сумма + СертификатыПроизвольногоНоминала.Сумма, 0) КАК Остаток
ИЗ
    Справочник.Сертификаты КАК Сертификаты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СертификатыПроизвольногоНоминала КАК СертификатыПроизвольногоНоминала
        ПО Сертификаты.Ссылка = СертификатыПроизвольногоНоминала.Сертификат
            И (СертификатыПроизвольногоНоминала.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоПрозвольнымСертификатам.Оплата))
ГДЕ
    Сертификаты.ПометкаУдаления = ЛОЖЬ
    И Сертификаты.Код = "600000003"

УПОРЯДОЧИТЬ ПО
    Код
19 AllJoke
 
04.12.13
15:22
упс. в условии код убрать - это я для теста.
20 Halyavnik
 
04.12.13
15:25
Обход такой:
    ВыборкаИтогов = Результат.Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам ); // Все итоги только "ПоГруппировкам"
    Пока ВыборкаИтогов.Следующий() Цикл
        // Вывод итоговой строки...
        Выборка = ВыборкаИтогов.Выбрать( ОбходРезультатаЗапроса.Прямой ); // Детальные записи - Прямой или по умолчанию.
        Пока Выборка.Следующий() Цикл
            // Вывод детальных строк...
        КонецЦикла;
    КонецЦикла;
21 AllJoke
 
04.12.13
15:30
Это всё бред. Он у меня одн7у строку по 4 раза проходит.
22 Fram
 
04.12.13
15:35
Пока выборка.СледующийПоЗначениюПоля("Код") Цикл
  Пока Выборка.Следующий() Цикл
    ...
  КонецЦикла
КонецЦикла
23 Halyavnik
 
04.12.13
15:43
1. Количество полей в итоговой строке и "две строки которые надо вывести потом" - не совпадает. Должно совпадать.
2. Основной результат запроса положить во временную табличку или во вложенный запрос.
Выбирать из временной таблицы поля 6-9 ().
Указать итоги по нужным полям
При указании функций указать для поля6 (где стоит -2 060) Минимум/Максимум/Среднее(Поле1), чтобы в строке итогов показывались данные из поля1, а не из поля6.
24 AllJoke
 
04.12.13
15:45
(22) Во внутренний цикл в любом случае заходит. Или ты предлагаешь сравнивать с полем "Код"?
25 AllJoke
 
04.12.13
15:46
(23) Всё бы хорошо, но выходит в цикле по детальным записям он ещё и итоговоу строку зачем то берёт.
26 Fram
 
04.12.13
15:47
Не надо там ниче сравнивать. Движок сам все сделает. При вызове СледующийПоЗначениюПоля("Код") сработает некоторая внутрення выборка, которую можно перебрать с помощью Следующий()
27 Fram
 
04.12.13
15:47
(26) to (24)
28 Halyavnik
 
04.12.13
15:50
(25) не берет он итоговую строку, если правильно построен запрос и в нем есть ключевое слово ИТОГИ. Ну, никак не берет :).
В Вашем запросе НЕТ итогов, потому, естественно, будет совсем не тот результат, который ожидается.
29 Halyavnik
 
04.12.13
15:54
Опишите, по какому принципу из нескольких строк результата запроса получается вот та "заветная" строка: "600000003    10.11.2012 0:00:00    10.11.2013 0:00:00    5 000    Заблокирован".
Это типа свод по коду сертификата, свод по коду/дате или как?
30 Fram
 
04.12.13
15:56
(29) а догадаться по тексту запроса?.. это все реквизиты справочника Сертификаты
31 Halyavnik
 
04.12.13
16:09
(30) Эмммм... как бы сказать... Не догадался... Автор меня не посвятил в подробности, потому придется самому думать...
- мы хотим видеть сводную строку по коду сертификата. Маловероятно, ибо есть отбор по конкретному коду, но, в общем случае - может быть, т.к. автор треда начинающий.
- мы хотим видеть итоги (можно я буду использовать именно это определение?) номиналу. Вариант? Очень даже возможен...
- мы хотим видеть итоги по (любое другое поле запроса или комбинация полей).

Пока автор не скажет, что у него "итожится", дописать код запроса нельзя.
ЗЫ А я еще подозреваю, что итог должен выводиться по совокупности всех первых четырех/пяти полей, Тогда придется делать несколько итогов, вложенные циклы обхода группировок и вывод строки итогов на предпоследнем уровне вложенности.
32 AllJoke
 
04.12.13
16:15
Я уже всё сотворил. Спасибо "Fram".
33 AllJoke
 
04.12.13
16:16
Меня удивляет, что СКД легко бы эту штуку отработало.
Группировка по первым пяти полям. А в запросе думать надо или мудрить.
34 Fram
 
04.12.13
16:17
хочется показать всем язык.. ну да ладно ))
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.