|
Помогите ускорить запрос | ☑ | ||
---|---|---|---|---|
0
Bodrug
22.04.16
✎
12:05
|
Добрый день, колеги! Запрос в таком виде работает около 10-15 сек, используется в формировании отчета большое количество раз. Из-за этого отчет формируется оооочень долго. Нужна Ваша помощь в оптимизации.
ВЫБРАТЬ ПЕРВЫЕ 1 | ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК РегистраторДата |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, &НачДата, , , ) КАК ХозрасчетныйДвиженияССубконто |ГДЕ | (ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт | И ХозрасчетныйДвиженияССубконто.СубконтоКт1 = &СубконтоКт1 | ИЛИ ХозрасчетныйДвиженияССубконто.СчетДт = &СчетКт | И ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &СубконтоКт1) | И ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.ОперацияБух) | И ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.ЗакрытиеМесяца) | |УПОРЯДОЧИТЬ ПО | РегистраторДата УБЫВ |
|||
1
mehfk
22.04.16
✎
12:06
|
||||
2
aleks_default
22.04.16
✎
12:08
|
"используется в формировании отчета большое количество раз" - не использовать запрос в цикле
|
|||
3
Bodrug
22.04.16
✎
12:11
|
(2) приходится, т.к. циклом перебирается таблица значений и по каждой строке нужно находить дату последнего движения по регистру в разрезе контрагента (субконто)
|
|||
4
cons74
22.04.16
✎
12:16
|
(3) так не делают. Делают так: тз загоняют в запрос как ВТ (параметр)и левое соединение.
Да еще и "РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, &НачДата, , , )" - это вообще "песня" - обращение к виртуальной таблице без параметров-отборов. Мда. Верную книжку порекомендовали выше. Ну или курс хоть того же Чистова (с тырнета бесплатный, если денег жалко) - а лучше новый платный (хоть от кого). |
|||
6
Локи-13
22.04.16
✎
12:18
|
а так не стоит использовать конструкцию
ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.ОперацияБух) | И ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.ЗакрытиеМесяца) изменить ее на "равно" |
|||
7
asady
22.04.16
✎
12:23
|
(0) а конфа какая?
|
|||
8
mexanik_96
22.04.16
✎
12:32
|
дак а зачем ХозрасчетныйДвиженияССубконто если только дата по регистратору?
и "И не ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) в (искл типы)" |
|||
9
RomanYS
22.04.16
✎
12:43
|
ХозрасчетныйДвиженияССубконто.Регистратор.Дата
на порядок медленнее чем ХозрасчетныйДвиженияССубконто.Период Но главная проблема в (3), запроса в цикле быть не должно |
|||
10
Dmitrii
гуру
22.04.16
✎
12:53
|
(0) Дарю:
ВЫБРАТЬ ПЕРВЫЕ 1 ХозрасчетныйСубконто.Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто ГДЕ ХозрасчетныйСубконто.Значение = &СубконтоКт1 И ХозрасчетныйСубконто.Период <= &НачДата И НЕ ХозрасчетныйСубконто.Регистратор ССЫЛКА Документ.ОперацияБух И НЕ ХозрасчетныйСубконто.Регистратор ССЫЛКА Документ.ЗакрытиеМесяца УПОРЯДОЧИТЬ ПО ХозрасчетныйСубконто.Период УБЫВ Можно topt воткнуть условие на вид субконто (поле Вид). |
|||
11
Dmitrii
гуру
22.04.16
✎
12:55
|
+ к (10) Но соглащусь с остальными по поводу запроса в цикле. Это идиотизм и главная причина тормозов.
|
|||
12
Dmitrii
гуру
22.04.16
✎
12:58
|
(3) >> нужно находить дату последнего движения по регистру в разрезе контрагента
За неправильный выбор нужных виртуальных таблиц на экзамене 1С Специалист ставят сразу незачет. Поставленная задача решается обращение к реальной(!) таблице Субконто, а не к виртуальной таблице ДвиженияССубконто. См. (10) |
|||
13
Dmitrii
гуру
22.04.16
✎
13:00
|
+ к (10) только выбирать не Регистратор, а Период.
За выбор Регистратор.Дата тоже надо бы расстреливать. |
|||
14
Serginio1
22.04.16
✎
13:12
|
||||
15
ViSo76
22.04.16
✎
13:36
|
Как минимум можно подправить так:
ВЫБРАТЬ ХозрасчетныйДвиженияССубконто.Период КАК РегистраторДата ИЗ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( , &НачДата, СчетДт = &СчетКт Или СчетКт = &СчетКт, , ) КАК ХозрасчетныйДвиженияССубконто ГДЕ (ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт И ХозрасчетныйДвиженияССубконто.СубконтоКт1 = &СубконтоКт1 ИЛИ ХозрасчетныйДвиженияССубконто.СчетДт = &СчетКт И ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &СубконтоКт1) И Не ХозрасчетныйДвиженияССубконто.Регистратор ССЫЛКА Документ.ОперацияБух И Не ХозрасчетныйДвиженияССубконто.Регистратор ССЫЛКА Документ.ЗакрытиеМесяца УПОРЯДОЧИТЬ ПО РегистраторДата УБЫВ |
|||
16
RomanYS
22.04.16
✎
13:36
|
(12) в целом соглашусь, но в данном случае придется соединять таблицу движений (фильтр на Счета) с ДВУМЯ таблицами субконто: по Дт и по Кт.
|
|||
17
RomanYS
22.04.16
✎
13:38
|
*(16) две таблицы субконто отменяются, "ИЛИ" я не заметил.
|
|||
18
ViSo76
22.04.16
✎
13:39
|
(15) Даже пожалуй так:
ВЫБРАТЬ ХозрасчетныйДвиженияССубконто.Период КАК РегистраторДата ИЗ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( , &НачДата, СчетДт = &СчетКт Или СчетКт = &СчетКт И Не Регистратор ССЫЛКА Документ.ОперацияБух И Не Регистратор ССЫЛКА Документ.ЗакрытиеМесяца, , ) КАК ХозрасчетныйДвиженияССубконто ГДЕ (ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт И ХозрасчетныйДвиженияССубконто.СубконтоКт1 = &СубконтоКт1 ИЛИ ХозрасчетныйДвиженияССубконто.СчетДт = &СчетКт И ХозрасчетныйДвиженияССубконто.СубконтоДт1 = &СубконтоКт1) УПОРЯДОЧИТЬ ПО РегистраторДата УБЫВ |
|||
19
ViSo76
22.04.16
✎
13:39
|
(18) Ошибочка в строке:
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( , &НачДата, ( СчетДт = &СчетКт Или СчетКт = &СчетКт ) И Не Регистратор ССЫЛКА Документ.ОперацияБух И Не Регистратор ССЫЛКА Документ.ЗакрытиеМесяца, , ) КАК ХозрасчетныйДвиженияССубконто |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |