Имя: Пароль:
1C
1С v8
Оптимизация запроса 1с
0 Alishman
 
26.02.15
13:15
Добрый день Как можно оптимизировать этот запрос?. На данный момент время исполнения 1 минута. Мне кажется это слишком долго?

ВЫБРАТЬ
    ТиповойДвиженияССубконто.СубконтоДт1,
    ТиповойДвиженияССубконто.СубконтоДт2,
    ТиповойДвиженияССубконто.Сумма КАК Сумма
ПОМЕСТИТЬ Таблица1
ИЗ
    РегистрБухгалтерии.Типовой.ДвиженияССубконто КАК ТиповойДвиженияССубконто
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОперацияБух КАК ОперацияБух
        ПО ТиповойДвиженияССубконто.Регистратор = ОперацияБух.Ссылка
ГДЕ
    (ТиповойДвиженияССубконто.СчетКт = &СчетКт
            ИЛИ ТиповойДвиженияССубконто.СчетКт = &СчетКт2
            ИЛИ ТиповойДвиженияССубконто.СчетКт = &СчетКт3
                И ГОД(ТиповойДвиженияССубконто.Период) = &Период)

СГРУППИРОВАТЬ ПО
    ТиповойДвиженияССубконто.СубконтоДт1,
    ТиповойДвиженияССубконто.СубконтоДт2,
    ТиповойДвиженияССубконто.Сумма
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТиповойДвиженияССубконто.СубконтоДт1,
    ТиповойДвиженияССубконто.СубконтоДт2,
    СУММА(ТиповойДвиженияССубконто.Сумма) КАК Сумма
ПОМЕСТИТЬ Таблица2
ИЗ
    РегистрБухгалтерии.Типовой.ДвиженияССубконто КАК ТиповойДвиженияССубконто
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОперацияБух КАК ОперацияБух
        ПО ТиповойДвиженияССубконто.Регистратор = ОперацияБух.Ссылка
ГДЕ
    ТиповойДвиженияССубконто.СчетКт = &СчетКт4
    И ГОД(ТиповойДвиженияССубконто.Период) = &Период

СГРУППИРОВАТЬ ПО
    ТиповойДвиженияССубконто.СубконтоДт1,
    ТиповойДвиженияССубконто.СубконтоДт2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(Таблица1.СубконтоДт1, Таблица2.СубконтоДт1) КАК Организация,
    ЕСТЬNULL(Таблица1.СубконтоДт2, Таблица2.СубконтоДт2) КАК Договор,
    ЕСТЬNULL(Таблица1.Сумма, Таблица2.Сумма) КАК Сумма
ПОМЕСТИТЬ Таблица3
ИЗ
    Таблица1 КАК Таблица1
        ПОЛНОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
        ПО Таблица1.СубконтоДт1 = Таблица2.СубконтоДт1
            И Таблица1.СубконтоДт2 = Таблица2.СубконтоДт2
            И Таблица1.Сумма = Таблица2.Сумма
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таблица3.Организация,
    Таблица3.Договор,
    Таблица3.Сумма
ИЗ
    Таблица3 КАК Таблица3

СГРУППИРОВАТЬ ПО
    Таблица3.Организация,
    Таблица3.Договор,
    Таблица3.Сумма
1 Ёпрст
 
26.02.15
13:17
(0) для начала, выкинуть левое соединение, которое нигде не используется
2 Ёпрст
 
26.02.15
13:18
ОперацияБух твоя, не участвует ни в селекте, ни в условии..
3 Ёпрст
 
26.02.15
13:19
ну и..куча временных не нужна - всё можно написать в одном запросе..
4 Рэйв
 
26.02.15
13:19
сгруппировать по
...
ТиповойДвиженияССубконто.Сумма

тоже весело смотрится:-)
5 D_E_S_131
 
26.02.15
13:21
(1) Может просто "ЛЕВОЕ" заменить на "ВНУТРЕННЕЕ"?
6 Рэйв
 
26.02.15
13:22
(5)Взять движения документа можно менее затратным путем.
7 Рэйв
 
26.02.15
13:23
мне кажется ТС именно движения по документу хочет
8 Ёпрст
 
26.02.15
13:24
(5) хз, что ему надо..
"оптимизируем" что есть :)))))))
9 D_E_S_131
 
26.02.15
13:25
(7) Думаю даже, что по движению именно вида документа "ОперацияБух". Но вот я не скажу, что будет работать оптимальнее "Внутреннее" соединение или условие "Регистратор ССЫЛКА Документ.ОперацияБух".
10 Мыш
 
26.02.15
13:29
(0) Неправильный подход. Бери сначала основную таблицу с отбором по регистратору фильтруй что требуется, а потом к ней соединяй таблицу "Субконто".
11 Alishman
 
26.02.15
13:40
(3) Левое убрал, в одном запросе не получится потому что суммы по 4 счета идут по месяцам
12 Ёпрст
 
26.02.15
13:44
(11) всё получится.. case и привет - будет тебе 4 суммы по разным счетам
13 D_E_S_131
 
26.02.15
13:50
Вот что-то я теперь через "призму (12) не понимаю разницы между данными в Таблица1 и Таблица2, если они потом в итоге соединяются. Почему бы просто не поставить сразу условие


ТиповойДвиженияССубконто.СчетКт В (&СчетКт1, &СчетКт2, &СчетКт3 &СчетКт4)
14 Alishman
 
26.02.15
14:04
(13) В таблице 1 суммы идут сразу за год, а в таблице 2 суммы идут по месяцам, я их просуммировал только потом объединил. Если сделать как вы просите я не смогу их сгруппировать потом. Товарищ Ёпрст предложил вариант щас по нему работаю но как реализовать пока не понял
15 D_E_S_131
 
26.02.15
14:29
(14) Может еще и соединение в Таблице3 по полю "Сумма" имеет обоснование? Тогда станет совсем понятно, что Вы там пытаетесь сделать.
16 karabas11
 
26.02.15
17:05
1. Убрать этот ахтунг
ГОД(ТиповойДвиженияССубконто.Период) = &Период)
Заменить на что-то такое
ТиповойДвиженияССубконто.Период>= &ДатаНач
И ТиповойДвиженияССубконто.Период< &ДатаКон

2. Юзать параметры вирт таблицы
3. непонятна бессмысленная левая связь с операцияБух.
4. Не использовать таблицу Движения с субконто вообще. ОборотыДтКт вместо этого подойдет
17 тарам пам пам
 
26.02.15
17:11
(0) лучше напиши, что ты этим запросом получить хотел - тогда тебе напишут, где ты дурак и как надо было правильно сделать
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.