Имя: Пароль:
1C
1С v8
Оптимизация работы Динамических списков.
0 busy1
 
19.08.14
14:55
Добрый день камрады. Уже битый час рою информацию по вопросу оптимизации динамических списков в УФ и что то все варианты сводятся к банальному: "Исправь запрос на более простой". А вот если нельзя изменить запрос, он  вот такой каким родился. Можно ли как то его переместить там в обработку  или может быть есть ещё какие то хитрые способы?
1 PR
 
19.08.14
14:57
Нет
2 Bober
 
19.08.14
14:57
(0) можно
3 DmitrO
 
19.08.14
14:58
Обычно.. если запрос изменить уже нельзя, то тогда менять надо структуру данных.. :)
4 acsent
 
19.08.14
14:58
в смысле в оработку?
5 Bober
 
19.08.14
14:59
6 busy1
 
19.08.14
15:00
Ну я не знаю. Сделать это как то в модуле документа, а потом вывести это в динамический список формыСписка, ну как то так.
7 busy1
 
19.08.14
15:00
(5) Благодарю, почитаю
8 busy1
 
19.08.14
15:02
(5) немного не то.
9 Bober
 
19.08.14
15:03
(8) далее идет отключение динамического считывания данных.
10 acsent
 
19.08.14
15:03
(7) в 8.3 может уже и починили это
11 sf
 
19.08.14
15:03
(0) мега запрос в студию
12 Bober
 
19.08.14
15:03
(8) сложно помочь, когда не видна проблема.
13 acsent
 
19.08.14
15:03
Ничто не помогает, переходи к (3)
14 Immortal
 
19.08.14
15:04
преобразуй данные таким образом, чтобы их можно было считать с минимальным количеством соединений или без них
15 busy1
 
19.08.14
15:05
То есть вывод всё таки неутешительный. Упрости и будет быстрее.
16 busy1
 
19.08.14
15:06
ВЫБРАТЬ
    ПеремещениеТоваров.Ссылка,
    СУММА(ВЫБОР
            КОГДА ПодЗапрос.Склад = ПеремещениеТоваров.СкладПолучатель
                ТОГДА ПодЗапрос.Плюс
            ИНАЧЕ 0
        КОНЕЦ) КАК Недоприход,
    СУММА(ВЫБОР
            КОГДА ПодЗапрос.Склад = ПеремещениеТоваров.СкладПолучатель
                ТОГДА -ПодЗапрос.Минус
            ИНАЧЕ 0
        КОНЕЦ) КАК Переприход,
    СУММА(ВЫБОР
            КОГДА ПодЗапрос.Склад = ПеремещениеТоваров.СкладОтправитель
                ТОГДА -ПодЗапрос.Минус
            ИНАЧЕ 0
        КОНЕЦ) КАК Недорасход,
    СУММА(ВЫБОР
            КОГДА ПодЗапрос.Склад = ПеремещениеТоваров.СкладОтправитель
                ТОГДА ПодЗапрос.Плюс
            ИНАЧЕ 0
        КОНЕЦ) КАК Перерасход,
    ПеремещениеТоваров.ПометкаУдаления,
    ПеремещениеТоваров.Номер,
    ПеремещениеТоваров.Дата,
    ПеремещениеТоваров.СкладОтправитель,
    ПеремещениеТоваров.СкладПолучатель,
    ПеремещениеТоваров.ДокументОснование КАК Основание,
    ПеремещениеТоваров.МагазинОтправитель,
    ПеремещениеТоваров.МагазинПолучатель,
    ПеремещениеТоваров.Ответственный,
    ПеремещениеТоваров.СуммаДокумента,
    ПеремещениеТоваров.Организация,
    ВЫРАЗИТЬ(ПеремещениеТоваров.Комментарий КАК СТРОКА(50)) КАК Комментарий
ИЗ
    Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СУММА(ВЫБОР
                    КОГДА ТоварыВПути.КоличествоОстаток > 0
                        ТОГДА ТоварыВПути.КоличествоОстаток
                    ИНАЧЕ 0
                КОНЕЦ) КАК Плюс,
            СУММА(ВЫБОР
                    КОГДА ТоварыВПути.КоличествоОстаток < 0
                        ТОГДА ТоварыВПути.КоличествоОстаток
                    ИНАЧЕ 0
                КОНЕЦ) КАК Минус,
            ТоварыВПути.Номенклатура КАК Номенклатура,
            ТоварыВПути.Склад КАК Склад,
            ТоварыВПути.Характеристика КАК Характеристика,
            ТоварыВПути.ДокументОснование КАК ДокументОснование1
        ИЗ
            РегистрНакопления.ТоварыКПоступлениюРеализации.Остатки(, ДокументОснование ССЫЛКА Документ.ПеремещениеТоваров) КАК ТоварыВПути
        
        СГРУППИРОВАТЬ ПО
            ТоварыВПути.Номенклатура,
            ТоварыВПути.Характеристика,
            ТоварыВПути.Склад,
            ТоварыВПути.ДокументОснование) КАК ПодЗапрос
        ПО ПодЗапрос.ДокументОснование1 = ПеремещениеТоваров.Ссылка

СГРУППИРОВАТЬ ПО
    ПеремещениеТоваров.Ссылка,
    ПеремещениеТоваров.ПометкаУдаления,
    ПеремещениеТоваров.Номер,
    ПеремещениеТоваров.Дата,
    ПеремещениеТоваров.СкладОтправитель,
    ПеремещениеТоваров.СкладПолучатель,
    ПеремещениеТоваров.ДокументОснование,
    ПеремещениеТоваров.МагазинОтправитель,
    ПеремещениеТоваров.МагазинПолучатель,
    ПеремещениеТоваров.Ответственный,
    ПеремещениеТоваров.СуммаДокумента,
    ПеремещениеТоваров.Организация,
    ВЫРАЗИТЬ(ПеремещениеТоваров.Комментарий КАК СТРОКА(50))
17 Bober
 
19.08.14
15:09
(16) да, есть над чем поработать в запросе.
18 busy1
 
19.08.14
15:11
(17) Подкинь направление. ;)
19 Bober
 
19.08.14
15:15
(18)
- убрать вложенный запрос,
- в запросе к остаткам оставить детализацию до склад, документ основание
- переделать на два левых соединения
1. по остатках склада отправителя
2. по остатках склада получателя.

а вообще лучше:
- убрать всю муть с плюс\минус и недо. две колонки(по каждому складеу), в них либо > 0 либо <.
20 busy1
 
19.08.14
15:18
(19) Спасибо. Кстати, мне тоже этот плюс/минус как то глаз маячил.
21 DmitrO
 
19.08.14
15:42
мда.. мне одному кажется, что в этом запросе нет ничего "динамического"? :)
22 busy1
 
19.08.14
15:43
(21) Предложения?
23 DmitrO
 
19.08.14
15:45
(22) последнее "сгруппировать по" убрать как минимум
24 РенеДекарт
 
19.08.14
15:58
(21) если запрос для ДС - то он "динамический".
(16) у вас три соединения мимнимум. Упростите, посмотрите, что наиболее трудоемко, этот процесс и убыстряйте.
25 busy1
 
19.08.14
16:02
Благодарю за советы
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс