Имя: Пароль:
1C
1С v8
вывести запрос в обратном порядке
0 MrZLO
 
23.01.15
14:02
Как вывести результаты запроса в обратном порядке
, что-то вроде

АВТОУПОРЯДОЧИВАНИЕ УБЫВ, есть ли такое?...

т.е. есть запрос

    Запрос.Текст = "ВЫБРАТЬ
    |    ЗаказыПокупателейОстатки.Номенклатура,
    |    ЗаказыПокупателейОстатки.Номенклатура.СтавкаНДС       КАК СтавкаНДС,
    
    
    |    ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры,
    |    ЗаказыПокупателейОстатки.ЗаказПокупателя,
    |    ЗаказыПокупателейОстатки.ЕдиницаИзмерения             КАК ЕдиницаИзмерения,
    |    ЗаказыПокупателейОстатки.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
    |    ЗаказыПокупателейОстатки.СуммаУпрОстаток              КАК Сумма,
    |    ЗаказыПокупателейОстатки.КоличествоОстаток            КАК Заказано,
    |    ЗаказыПоставщикамОстатки.КоличествоОстаток            КАК ЗаказаноПоставщику,
    |    ТоварыВРезервеНаСкладах.КоличествоОстаток             КАК Зарезервировано
    |ИЗ
    |    РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОстатков, ЗаказПокупателя = &ЗаказПокупателя
    |                        И СтатусПартии = &СтатусПартии) КАК ЗаказыПокупателейОстатки
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаОстатков, ЗаказПокупателя = &ЗаказПокупателя
    |                        И ЗаказПоставщику <> &Ссылка
    |                        И ТоварТара = &ТоварТара) КАК ЗаказыПоставщикамОстатки
    |        ПО ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
    |         И ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры = ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаОстатков, ДокументРезерва = &ЗаказПокупателя) КАК ТоварыВРезервеНаСкладах
    |        ПО ЗаказыПокупателейОстатки.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура
    |         И ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |
    |ГДЕ
    |    НЕ ЗаказыПокупателейОстатки.Номенклатура.Услуга";


мне нужно, чтобы этот запрос выводил данные в обратном порядке
1 ДенисЧ
 
23.01.15
14:03
выгрузи в ТЗ и перебирай, как хочешь
2 MrZLO
 
23.01.15
14:03
если данные из таблиц, то там все понятно, а тут данные берутся из РегистрНакопления.ЗаказыПокупателей, вот как раз мне и надо результат вывода отобразить в обратном порядке
3 Господин ПЖ
 
23.01.15
14:04
автоупорядочивание - на уровне скуля это все равно sort by по каким-то полям. отсортируй по ним в обр. порядке
4 MrZLO
 
23.01.15
14:04
(1)

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл

т.е. этот цикл наоборот проходить только...
5 Господин ПЖ
 
23.01.15
14:05
можешь в явном цикле (по количеству записей) обойти в обратном порядке...
6 MrZLO
 
23.01.15
14:06
(3) в том то и дело, что порядок сортировки можеть быть разным и неизвестным, запрос выводит по мере поступления данных в регистр, вот мне как раз и надо по мере убывания из регистра как бы
7 MrZLO
 
23.01.15
14:06
(5) спс, ща попробую
8 kosts
 
23.01.15
14:12
А что так не работает?

УПОРЯДОЧИТЬ ПО
    ФИО ,
    ДатаПредоставленияОтгула,
    Должность УБЫВ
ИТОГИ
    СУММА(КоличествоДат)
ПО
    Сотрудник
АВТОУПОРЯДОЧИВАНИЕ
9 MrZLO
 
23.01.15
14:29
(8) нет тут такого поля по которому явно упорядочить можно было
10 kosts
 
23.01.15
14:34
(9) Добавь явно поля со словом Убыв
11 kosts
 
23.01.15
14:35
Технически проще конечно выгрузить в ТЗ и обработать в обратном порядке.
12 MrZLO
 
26.01.15
09:04
(11)

Делаю так, он пишет, что
"Значение индекса выходит за границы диапазона"

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

    Сч = Выборка.Количество();
    
    Пока Сч > 0 Цикл
        
        Строка = Выборка.Получить(Сч);
    
        Количество = ?(Строка.Заказано = NULL, 0, Строка.Заказано)
                   - ?(Строка.Зарезервировано = NULL, 0, Строка.Зарезервировано)
                   - ?(Строка.ЗаказаноПоставщику = NULL, 0, Строка.ЗаказаноПоставщику);
        Если Количество > 0 Тогда
            СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
            СтрокаТабличнойЧасти.Номенклатура    = Строка.Номенклатура;
            СтрокаТабличнойЧасти.Заказ             = Строка.ЗаказПокупателя;

            Если ЭтоТовары Тогда
                СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Строка.ХарактеристикаНоменклатуры;
                СтрокаТабличнойЧасти.ЕдиницаИзмерения           = Строка.ЕдиницаИзмерения;
                СтрокаТабличнойЧасти.СтавкаНДС                  = Строка.СтавкаНДС;
                СтрокаТабличнойЧасти.Коэффициент                = Строка.Коэффициент;
                
                СтрокаТабличнойЧасти.Количество = Количество * Строка.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент
                                                        / Строка.Коэффициент;
            Иначе
                СтрокаТабличнойЧасти.Количество = Количество;                                                        
            КонецЕсли;
        КонецЕсли;
         
        Сч = Сч - 1;
        
    КонецЦикла;
13 Челбас
 
26.01.15
09:06
Сч = Выборка.Количество()-1;
    
    Пока Сч >= 0 Цикл
14 MrZLO
 
26.01.15
09:11
спасибо, точно
15 Simod
 
26.01.15
11:00
(0) В исходном запросе нет явного упорядочивания. О каком обратном порядке идет речь?
16 kosts
 
26.01.15
12:06
(15) Речь про обратный порядок прямого порядка.
17 Simod
 
26.01.15
12:13
C ИТС:
Главная - Разработка и администрирование - Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8:
"Упорядочивание результатов запроса

1.1. Если алгоритм обработки результатов запроса зависит от порядка записей в запросе или если результат обработки запроса в той или иной форме представляется пользователю, то в тексте запроса следует использовать предложение УПОРЯДОЧИТЬ ПО. В отсутствие выражения УПОРЯДОЧИТЬ ПО невозможно сделать никаких предположений о том, в каком порядке будут представлены записи в результатах запроса."
18 kosts
 
26.01.15
12:44
(17) Не подходит к (0)

"Предложение АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического формирования полей для упорядочивания результата запроса."
19 Simod
 
26.01.15
13:21
От туда же:
"Ограничения на использование конструкции АВТОУПОРЯДОЧИВАНИЕ

3. Использование конструкции ПЕРВЫЕ совместно с конструкцией АВТОУПОРЯДОЧИВАНИЕ запрещено.

В остальных случаях конструкцию АВТОУПОРЯДОЧИВАНИЕ также не рекомендуется использовать, так как разработчик не контролирует, какие именно поля будут использованы для упорядочивания. Применение такой конструкции оправдано только в тех случаях, когда получаемый порядок записей не важен, но при этом он должен быть одинаковым в не зависимости от применяемой СУБД.

Причины использования конструкции АВТОУПОРЯДОЧИВАНИЕ следует указывать в комментарии, размещенном непосредственно перед тестом запроса."
20 vhl
 
26.01.15
13:30
(0) У тебя нет упорядочивания вообще. Тебе возвращается результат так, как SQL выбрал для себя удобнее, а не как тебе надо. Если тебе надо упорядочивать - определись по какому полю сначала и добавь его в регистр. Потому что сейчас SQL тебе вернул так, а завтра у него будет по другому. Ты же не контролируешь этот процесс.
И слово "АВТОУПОРЯДОЧИВАНИЕ" вообще не для этого нужно. Читай документацию
Независимо от того, куда вы едете — это в гору и против ветра!