Имя: Пароль:
1C
 
помогите оптимизировать запрос
0 DomanM
 
21.08.15
10:50
ВЫБРАТЬ РАЗЛИЧНЫЕ
    УправленческийОстатки.Субконто1 КАК Контрагент,
    УправленческийОстатки.Субконто2 КАК Договор,
    СУММА(ВЫБОР
            КОГДА &суммаврублях
                ТОГДА УправленческийОстатки.СуммаРеглОстаток
            ИНАЧЕ УправленческийОстатки.СуммаОстаток
        КОНЕЦ) КАК СуммаОстаток
ПОМЕСТИТЬ саль
ИЗ
    РегистрБухгалтерии.Управленческий.Остатки(&ДатаСреза, Счет = &Счет, , ) КАК УправленческийОстатки
ГДЕ
    ВЫБОР
            КОГДА &суммаврублях
                ТОГДА УправленческийОстатки.СуммаРеглОстаток <> 0
            ИНАЧЕ УправленческийОстатки.СуммаОстаток <> 0
        КОНЕЦ

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

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

СГРУППИРОВАТЬ ПО
    УправленческийОбороты.Регистратор,
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто1 КАК Справочник.Контрагенты),
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов)


скорость падает явно на втором пакете и на ограничении (Субконто1, субконто2) В
                (ВЫБРАТЬ
                    саль.Контрагент,
                    саль.Договор
                ИЗ
                    саль КАК саль),

как быть?
1 John83
 
21.08.15
10:52
ограничение на таблицу и будет сильно тормозить
Я бы сначала сделал ограничение массивом на субконто1, затем в где на субконто2
PS неплохо бы задать массив видов субконто
2 DomanM
 
21.08.15
10:55
(1) массивом на субконто? т е программно выгрузить ограничения и закинуть в параметр?
3 John83
 
21.08.15
10:57
(2) 3ий параметр вирт. таблицы
4 DomanM
 
21.08.15
11:00
(3) в смысле третий? можно для тугоумных поподробнее
5 John83
 
21.08.15
11:02
ИЗ
    РегистрБухгалтерии.Налоговый.Остатки(, Счет = &Счет, &МассивСубконто, ) КАК НалоговыйОстатки
в &МассивСубконто запихивай виды субконто из планов видов характеристик
6 DomanM
 
21.08.15
11:03
(5) проблема же в констраукции "В (выбрать" она решится или что?
7 John83
 
21.08.15
11:05
(6) пробуй
8 DomanM
 
21.08.15
11:15
(7) по одному субконто получилось, скорость выросла спасибо, а как сделать по двум такое, потому что по двум стало (мас в списке значений) в 5 раз дольше
9 rabbidX
 
21.08.15
11:16
Почему не используете таблицу ОсаткиИОбороты с условием на конечный остаток?
И группировать на фиг не надо. Вы и так с периодичностью Регистратор обороты выбираете.
10 DomanM
 
21.08.15
11:18
(9) не особо понимаю как надо его сворачивать с регистратором чтоб остатки нормально свернулись, свернул просто по субконто  - куча лишних цифр
11 John83
 
21.08.15
11:24
(8) аа.. тебе же условие именно на таблицу нужно..
тогда в вирт. таблице ставишь условие массива субконто1, в ГДЕ ставишь условие на таблицу (субконто1, субконто2)
12 sash-ml
 
21.08.15
11:27
убери к чертям контагента, отбирай только по договору и по одному субконто, контрагента потом из договора получишь так раз в 20 будет быстрее
13 DomanM
 
21.08.15
11:42
(12) идея, спс
14 DomanM
 
21.08.15
11:45
(12) но все равно в массив прийдется два субконто вставлять(
15 sash-ml
 
21.08.15
11:47
(14) Одно, только договор, вы выборке будет одно субконто СУбконто1 и это будет договор
16 DomanM
 
21.08.15
11:53
(15) в том то и дело что договор это субконто2, и если я ставлю только договор и ограничение на субконто 2 он требует массив в параметр((
17 DomanM
 
21.08.15
11:57
(15) короче он хочет чтоб я в массив договор тоже внес
18 sash-ml
 
21.08.15
12:01
(16) +(14) еще раз внимательно. дело в том что когда ты вставишь в массив только один тип субконто Договор, то у тебе будет в выборке только ОДНО субконто, и не будет никаких других субконто,  
УправленческийОбороты.Субконто1 как ДОГОВОР //уотакуот
19 DomanM
 
21.08.15
12:03
(18) все понял спс
20 DomanM
 
21.08.15
12:10
(18) все равно сорок секунд отбирает((
21 sash-ml
 
21.08.15
12:36
покажи запрос который получился
23 pavig
 
21.08.15
12:47
Поправка:

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

ИЗ
    РегистрБухгалтерии.Управленческий.Остатки(&ДатаСреза, Счет = &Счет, &МассивСубконто, ) КАК УправленческийОстатки
ГДЕ
    ВЫБОР
            КОГДА &суммаврублях
                ТОГДА УправленческийОстатки.СуммаРеглОстаток <> 0
            ИНАЧЕ УправленческийОстатки.СуммаОстаток <> 0
        КОНЕЦ

)

,
            ,
            ) КАК УправленческийОбороты

СГРУППИРОВАТЬ ПО
    УправленческийОбороты.Регистратор,
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто1 КАК Справочник.Контрагенты),
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов)
24 pavig
 
21.08.15
12:48
Где
МассивСубконто = Новый Массив;
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидСубконтоХозрасчетные.Договоры);

Всё.
25 pavig
 
21.08.15
12:49
А ещё лучше будет сделать два разных запроса с конструкцией ОБЪЕДИНИТЬ ВСЁ, где в одном запросе в условии &СуммаВРублях, во втором НЕ &СуммаВРублях
26 pavig
 
21.08.15
12:51
А ну да кстати в основном запросе МассивСубконто конечно надо было добавить субконтоКонтрагенты
Это я чет погорячился
27 pavig
 
21.08.15
12:52
ВЫБРАТЬ
    УправленческийОбороты.Регистратор,
    СУММА(ВЫБОР
            КОГДА &суммаврублях
                ТОГДА УправленческийОбороты.СуммаРеглОборот
            ИНАЧЕ УправленческийОбороты.СуммаОборот
        КОНЕЦ) КАК СуммаОборот,
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто2 КАК Справочник.Контрагенты) КАК Контрагент,
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто1 КАК Справочник.ДоговорыКонтрагентов) КАК Договор
ПОМЕСТИТЬ ВсеДоки
ИЗ
    РегистрБухгалтерии.Управленческий.Обороты(
            ,
            &ДатаСреза,
            Регистратор,
            Счет = &счет,
            &МассивСубконтоДоговорыКонтрагенты,
          
Субконто1 в
(
ВЫБРАТЬ РАЗЛИЧНЫЕ
    УправленческийОстатки.Субконто1 КАК Договор

ИЗ
    РегистрБухгалтерии.Управленческий.Остатки(&ДатаСреза, Счет = &Счет, &МассивСубконтоТолькоДоговоры, ) КАК УправленческийОстатки
ГДЕ
    ВЫБОР
            КОГДА &суммаврублях
                ТОГДА УправленческийОстатки.СуммаРеглОстаток <> 0
            ИНАЧЕ УправленческийОстатки.СуммаОстаток <> 0
        КОНЕЦ

)

,
            ,
            ) КАК УправленческийОбороты

СГРУППИРОВАТЬ ПО
    УправленческийОбороты.Регистратор,
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто1 КАК Справочник.Контрагенты),
    ВЫРАЗИТЬ(УправленческийОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов)
28 sash-ml
 
21.08.15
13:00
(23) да... выборка в выборке конечно тормозить будет
29 DomanM
 
21.08.15
14:22
(27) первый пакет потом еще пригодится...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.