Имя: Пароль:
1C
 
Упорядочить запрос
0 ZloyRafa
 
15.09.16
07:04
Имею такой код, как упорядочить по возрастанию только 2 запрос 2 пакета?
Процедура ОбработкаПроведения(Отказ, Режим)
    
    

    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ВзаиморасчетыСПокупателями Расход
    Движения.ВзаиморасчетыСПокупателями.Записывать = Истина;
                           //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВзаиморасчетыСПокупателямиОстатки.Контрагент КАК Контрагент,
        |    ВзаиморасчетыСПокупателямиОстатки.Документ КАК Документ,
        |    ВзаиморасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаОстаток
        |ПОМЕСТИТЬ ДокИзТЧ
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСПокупателями.Остатки(
        |            &МоментВремени,
        |            Контрагент = &Контрагент
        |                И Документ В (&Документ)) КАК ВзаиморасчетыСПокупателямиОстатки
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ДокИзТЧ.Контрагент КАК Контрагент,
        |    ДокИзТЧ.Документ КАК Документ,
        |    ДокИзТЧ.СуммаОстаток КАК СуммаОстаток
        |ИЗ
        |    ДокИзТЧ КАК ДокИзТЧ
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ВзаиморасчетыСПокупателямиОстатки.Контрагент,
        |    ВзаиморасчетыСПокупателямиОстатки.Документ,
        |    ВзаиморасчетыСПокупателямиОстатки.СуммаОстаток
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСПокупателями.Остатки(
        |            &МоментВремени,
        |            Контрагент = &Контрагент
        |                И НЕ Документ В (&Документ)) КАК ВзаиморасчетыСПокупателямиОстатки
        |
        |УПОРЯДОЧИТЬ ПО
        |    Документ";
     Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Контрагент",Контрагент);

    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
        Оплата=Оплачено;
    Пока Выборка.Следующий() И Оплата>0 Цикл
         Если Выборка.Сумма<Оплата Тогда
        Движение = Движения.ВзаиморасчетыСПокупателями.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Контрагент = Выборка.Контрагент;
        Движение.Документ = Выборка.Накладная;
        Оплата=оплата-выборка.сумма;
        Движение.Сумма=Выборка.Сумма;

        Иначе
        Движение = Движения.ВзаиморасчетыСПокупателями.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Контрагент = Выборка.Контрагент;
        Движение.Документ = Выборка.Накладная;
        Движение.Сумма=Оплата;
        Оплата=0;
                 КонецЕсли;
        
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
1 ZloyRafa
 
15.09.16
07:05
(0) В таком варианте упорядочивание происходит по всему пакету
2 KishMish
 
15.09.16
07:23
Возможно.
Сделать новое поле ЗначениеУпорядочивания
в первом запросе оно будет равно "КакаятоЗаглушка"
во втором равно ВзаиморасчетыСПокупателямиОстатки.Документ
и по нему сделать сортировку
3 jsmith
 
15.09.16
07:27
И чему равна заглушка?
4 KishMish
 
15.09.16
07:28
(3) например пустая ссылка
5 jsmith
 
15.09.16
07:29
Пустая ссылка любого регистратора?
6 KishMish
 
15.09.16
07:34
возможно просто строка "КакаятоЗаглушка"
7 ZloyRafa
 
15.09.16
08:04
Предложили создать поле индекс, 0 в запрос 1,  1 в запрос в запрос 2, но как по ним потом упорядочить не понял
8 KishMish
 
15.09.16
08:09
(7) если ты сделаешь так, то у тебя вторая часть не будет упорядочиваться по документу.
тебе действительно надо сделать поле индекс.
В первом запросе оно будет равно какой-то строке, например "Заглушка"
Во втором запросе оно будет равно значению ВзаиморасчетыСПокупателямиОстатки.Документ
Назови его ПолеИндекс
и в конце УПОРЯДОЧИТЬ ПО ПолеИндекс
9 ZloyRafa
 
15.09.16
08:41
Забавная штука вышла, он упорядочил по возрастанию документы, но: по времени только, дату не брал в учет
10 ZloyRafa
 
15.09.16
08:44
пришлось вытянуть еще и дату
11 ZloyRafa
 
15.09.16
08:51
что-то не получилось(
12 jsmith
 
15.09.16
08:52
Не мучайся, сделай еще одну ВТ.
13 napagokc
 
15.09.16
09:00
(0) Всё просто:
второй запрос преобразуй в что-то типа:

ВЫБРАТЬ * ИЗ (ТвойТекущийВторойЗапрос)
УПОРЯДОЧИТЬ ПО
    Документ
14 napagokc
 
15.09.16
09:02
+(13) и еще стоит учитывать, что упорядочивание по документу не всегда равно упорядочиванию по Документ.Дата. Ты, скорее всего, хочешь как раз по дате упорядочить.
15 ZloyRafa
 
15.09.16
09:03
Я уже вынес поле дата документа,
16 jsmith
 
15.09.16
09:03
Ну тогда пиши в первом запросе нулевую дату.
17 ZloyRafa
 
15.09.16
09:05
у меня оба запроса должны быть упорядоченны по дате.
Получается что:
Запрос1(Упорядоченный по дате возр)
Объединить все
Запрос2(Упорядочить по дата возр)
18 jsmith
 
15.09.16
09:09
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1000, 1, 1, 0, 0, 0), Документ.Дата, СЕКУНДА) КАК Дата
19 ZloyRafa
 
15.09.16
09:18
А если сделать индекс, а по индексу итоги? Упорядочить по Дате?
20 jsmith
 
15.09.16
09:20
(19) Не мучайся. Пиши как в (18) и будет тебе счастье.
21 jsmith
 
15.09.16
09:21
Зачем тебе индекс?
22 ZloyRafa
 
15.09.16
09:22
Запрос свернется по ним, а дата по возрастанию так и будет.
Результат желаемый достигнут, только теперь обход по итогам надо сделать
23 jsmith
 
15.09.16
09:24
Судя по коду, тебе никакие индексы не нужны.
24 jsmith
 
15.09.16
09:28
В первом запросе, если сделать по (18) разница по времени будет на 1000 лет как минимум. Че те еще надо-то.
25 trad
 
15.09.16
09:30
может быть так сойдет:

        |ВЫБРАТЬ
        |    0 КАК НомерЗапроса,
        |    ДокИзТЧ.Документ КАК Документ,
        |...
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    1 КАК НомерЗапроса,
        |    ВзаиморасчетыСПокупателямиОстатки.Документ,
        |...
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерЗапроса, Документ";
26 hhhh
 
15.09.16
09:30
(22) +еще есть такое супершаманство: в упорядочить по можешь написать 2 поля через запятую.
27 ZloyRafa
 
15.09.16
09:32
(26) я пробывал эти варианты, он перекрывает их почему-топервое упорядочивание вторым
28 Ёпрст
 
15.09.16
09:32
(25) тока по дате нужно, а не по ссылке
29 Vladal
 
15.09.16
09:32
пробЫвал.
30 Ёпрст
 
15.09.16
09:33
И, если он не хочет упорядочивать один из запросов - пихать пустую дату туда
31 hhhh
 
15.09.16
09:33
(27) руки напильником подправь.
32 ZloyRafa
 
15.09.16
09:34
(28)по дате и делаю .
(29)Обязательно)
33 Ёпрст
 
15.09.16
09:47
(32) показывай