Имя: Пароль:
1C
1С v8
Как можно ускорить запрос?
0 1dvd
 
26.04.17
07:19
Приветствую вас, комрады.
Есть две базы, почти идентичные. Из первой базы во вторую постоянно идёт выгрузка. Встала необходимость сверить данные двух баз.

Вся проблема в том, что некоторые документы выгружаются не той датой и даже не тем годом. В первой базе в свойствах документа сохраняется дата документа во второй базе. И если я отбираю документы за определенный период, мне необходимо проверять дату по регистру сведений ЗначенияСвойствОбъектов
Ещё один момент. Сторнация не переносится во вторую базу, вместо неё удаляется документ основания.

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

СГРУППИРОВАТЬ ПО
    ТиповойОбороты.Счет,
    ТиповойОбороты.Организация,
    ТиповойОбороты.Субконто1,
    ТиповойОбороты.Субконто2

ОБЪЕДИНИТЬ ВСЕ

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОборотыВсе.Счет.Код КАК Счет,
    ОборотыВсе.Организация.Наименование КАК Организация,
    ОборотыВсе.Субконто1 КАК Контрагент,
    ОборотыВсе.Субконто1.Наименование КАК КонтрагентНаименование,
    ОборотыВсе.Субконто1.ИдентификационныйКодЛичности КАК БИН,
    ОборотыВсе.Субконто1.le_id КАК le_id,
    ОборотыВсе.Субконто2 КАК Договор,
    ОборотыВсе.Субконто2.ajs_id КАК ajs_id,
    ОборотыВсе.Субконто2.agt_id КАК agt_id,
    СУММА(ОборотыВсе.СуммаОборотДт) КАК СуммаОборотДт,
    СУММА(ОборотыВсе.СуммаОборотКт) КАК СуммаОборотКт,
    СУММА(ОборотыВсе.СуммаОстаток) КАК СуммаОстаток
ИЗ
    ОборотыВсе КАК ОборотыВсе

СГРУППИРОВАТЬ ПО
    ОборотыВсе.Субконто1.le_id,
    ОборотыВсе.Организация.Наименование,
    ОборотыВсе.Счет.Код,
    ОборотыВсе.Субконто1,
    ОборотыВсе.Субконто1.ИдентификационныйКодЛичности,
    ОборотыВсе.Субконто1.Наименование,
    ОборотыВсе.Субконто2,
    ОборотыВсе.Субконто2.ajs_id,
    ОборотыВсе.Субконто2.agt_id
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ОборотыВсе

Запрос выше работает очень долго. По самым "ходовым" счетам более часа.
Как можно его ускорить?
1 mehfk
 
26.04.17
07:39
Запрос - шляпа. 100500 раз разжевали как надо, а как не надо писать запросы. В поиск.
2 1dvd
 
26.04.17
08:05
и всё-таки?
3 AneJIbcuH
 
26.04.17
08:11
(2) ТиповойОбороты.Регистратор  И  Сторнирование.ДокументОснование  составного же Типа?
4 1dvd
 
26.04.17
08:13
(3) да
5 AneJIbcuH
 
26.04.17
08:15
(4) Ну дак, что первое бросается в глаза,
Сторнирование.ДокументОснование.Дата И
ТиповойОбороты.Регистратор.Дата  
Нельзя так!
6 mehfk
 
26.04.17
08:22
(2) А что ты уже сделал сам?
7 1dvd
 
26.04.17
08:23
(5) а как мне вытащить дату по-другому?
8 AneJIbcuH
 
26.04.17
08:27
(7) Ну так начни хотя бы с изучения материалов по оптимизации запросов. В данном случае о ВЫРАЗИТЬ(..) узнаешь.
9 Dotoshin
 
26.04.17
09:05
(0) Начни с того что у тебя в соединении используются составные типы ТиповойОбороты.Регистратор = Сторнирование.Ссылка

попробуй ВЫРАЗИТЬ(ТиповойОбороты.Регистратор как ...)
10 Dotoshin
 
26.04.17
09:05
+ (9) Вот тут можно про составные типы почитать http://catalog.mista.ru/public/184361/
11 Dotoshin
 
26.04.17
09:06
(7) Опять же через выразить
12 MrStomak
 
26.04.17
09:40
1. Виртуальная таблица обороты не нужна, использовать физическую таблицу Хозрасчетный, присовокупив физическую таблицу Субконто по нужным видам субконто.

2. Скорее всего, документы делают движения на свою дату. В таком случае ТиповойОбороты.Регистратор.Дата можно менять на ТиповойОбороты.Период, что значительно ускорит запрос.

Советы насчет ВЫРАЗИТЬ можно использовать, если ты анализируешь конкретный вид документов