Имя: Пароль:
1C
1С v8
Оптимизировать запрос
0 Zombi
 
21.11.13
14:42
Как можно оптимизировать запрос:

ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1,
    СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
    СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток,
    ХозрасчетныйОстатки.Субконто2
ПОМЕСТИТЬ втСебестоимость
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &ТочкаАктуальности,
            Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах)
                ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы),
            ,
            ) КАК ХозрасчетныйОстатки

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1,
    ХозрасчетныйОстатки.Субконто2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Номенклатура,
    МАКСИМУМ(ВЫБОР
            КОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0
                ТОГДА ХозрасчетныйОбороты.Период
            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
        КОНЕЦ) КАК ДатаПрихода,
    МАКСИМУМ(ВЫБОР
            КОГДА ХозрасчетныйОбороты.СуммаОборотКт > 0
                ТОГДА ХозрасчетныйОбороты.Период
            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
        КОНЕЦ) КАК ДатаРасхода,
    МАКСИМУМ(втСебестоимость.КоличествоОстаток) КАК КоличествоОстаток,
    МАКСИМУМ(втСебестоимость.СуммаОстаток) КАК СтоимостьОстаток,
    втСебестоимость.Субконто2 КАК Склад
ИЗ
    втСебестоимость КАК втСебестоимость
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(
                ,
                ,
                Регистратор,
                Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах)
                    ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы),
                ,
                ,
                ,
                ) КАК ХозрасчетныйОбороты
        ПО втСебестоимость.Субконто1 = ХозрасчетныйОбороты.Субконто1
            И втСебестоимость.Субконто2 = ХозрасчетныйОбороты.Субконто2

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОбороты.Субконто1,
    втСебестоимость.Субконто2

Пытаюсь сделать отчет по неликвидам в БП
1 Бешеная Нога
 
21.11.13
14:45
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах)
                ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы)

сделать таблице и использовать условие В

проиндексировать Субконто1 и Субконто2

ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты( - эту таблицу получить отдельно и поместить во временную с индексированием
2 Zombi
 
21.11.13
14:47
(1) Щас попробую
3 palpetrovich
 
21.11.13
14:49
тоже не нравится "или", да и "ЗНАЧЕНИЕ(.." - тоже, лучше в параметр наверное

и tit> а что вообще возвращает конструкция:
МАКСИМУМ(ВЫБОР
            КОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0
                ТОГДА ХозрасчетныйОбороты.Период
            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
        КОНЕЦ) КАК ДатаПрихода,
?
4 palpetrovich
 
21.11.13
14:50
* tit> = еше, :)
5 mikecool
 
21.11.13
14:51
(1) а не эквипенисуально ли это?
6 Бешеная Нога
 
21.11.13
14:53
(5) не исключено. а что именно?
7 mikecool
 
21.11.13
14:54
(6) ИЛИ vs В
8 mikecool
 
21.11.13
14:54
+7 имхо тот же перебор до первого попадания
9 palpetrovich
 
21.11.13
14:56
(5) а "ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы)" и "&СчетСырьеИМатериалы" тоже эквипенисуально?
10 Бешеная Нога
 
21.11.13
14:56
(7) та ну
11 Zombi
 
21.11.13
14:57
(3) Если был приход, то возвращает дату прихода, если нет то пустую дату
12 Zombi
 
21.11.13
14:58
(1) Временную таблицу проиндексированную получил во временную. А как условие задать правильно?
13 Zombi
 
21.11.13
15:11
Замена "ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы)" на "&СчетСырьеИМатериалы" прироста не дала. Время выполнения остается в районе 55 - 60 секунд. Как наложить фмльтр по 2 измерениям Субконто1 и субконто2 одной таблицей?
14 mikecool
 
21.11.13
15:13
(9) нет, но время получения значения параметра может быть больше, нежели время получения значения в запросе