|
v7: Запрос: Ведомость по контрагентам долго работает | ☑ | ||
---|---|---|---|---|
0
userMR3
05.05.13
✎
23:41
|
Штатный механизм работает раза в 4 быстрее, но если я делаю запрос с тем же самым текстом через внешнюю форму, то он работает дольше. Появляется "Обработка документов за каждый день". Почему так? Конфа Комплексная 4.5
|
|||
1
Злопчинский
05.05.13
✎
23:42
|
в цикле наверное обработку вызываешь с запросом
|
|||
2
userMR3
05.05.13
✎
23:45
|
Запрос в цикле, но долго считает одно выполнение запроса: Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда 1 11.818404 99.47
|
|||
3
zak555
05.05.13
✎
23:45
|
запрос по бухИтагам или регистрам ?
|
|||
4
userMR3
05.05.13
✎
23:48
|
По регистрам покуп/поставщики.
|
|||
5
userMR3
05.05.13
✎
23:49
|
В штатной обработке что-то происходит до запроса что делает его быстрее? Вроде просмотрел отладчиком, не увидел ничего.
|
|||
6
zak555
05.05.13
✎
23:53
|
(5) ты сравни текст запроса типовой и свой
|
|||
7
Злопчинский
05.05.13
✎
23:53
|
В штатных механизмах ТиСа я что-то не особо припомню запросов в цикле, тем более по взаиморасчетам...
|
|||
8
userMR3
06.05.13
✎
00:04
|
(6) да, идентичный запрос отработал так же быстро как и типовый, значит проблема в моем запросе. Но разница в моей обработке в том, что там запрос идет не по папке, а по набору контрагентов в списоке значений, количество примерно такое же, может из-за этого дольше?
|
|||
9
userMR3
06.05.13
✎
00:08
|
Нет штатная обработка намного быстрее даже с теми же контрагентами, которых я туда задал через множественный фильтр.
|
|||
10
userMR3
06.05.13
✎
00:08
|
Сам запрос
ТекстЗапроса =" |Период с НачДата по КонДата; |Фирма= Регистр.Покупатели.Фирма,Регистр.Поставщики.Фирма; |УпрАналитика= Регистр.Покупатели.Фирма.УпрАналитика,Регистр.Поставщики.Фирма.УпрАналитика; |ЮрЛицо= Регистр.Покупатели.Фирма.ЮрЛицо,Регистр.Поставщики.Фирма.ЮрЛицо; |Контрагент= Регистр.Покупатели.Договор.Владелец,Регистр.Поставщики.Договор.Владелец; |СвойствоКонтр= Регистр.Покупатели.Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства,Регистр.Поставщики.Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства; |Договор= Регистр.Покупатели.Договор,Регистр.Поставщики.Договор; |КодОперации= Регистр.Покупатели.КодОперации,Регистр.Поставщики.КодОперации; |ВидДолга= Регистр.Покупатели.ВидДолга,Регистр.Поставщики.ВидДолга; |КредДокумент= Регистр.Покупатели.КредДокумент,Регистр.Поставщики.КредДокумент; |Проект= Регистр.Покупатели.ТекущийДокумент.Проект,Регистр.Поставщики.ТекущийДокумент.Проект; |Сумма= Регистр.Покупатели.СуммаРуб,Регистр.Поставщики.СуммаРуб; |Функция НачОст = НачОст(Сумма); |Функция Приход = Приход(Сумма); |Функция Расход = Расход(Сумма); |Функция КонОст = КонОст(Сумма); |Функция ВозвратОтПокупателя = Расход(Сумма)Когда (КодОперации = глКО.ВозвратОтПокупателя); |Функция ВозвратПоставщику = Приход(Сумма)Когда (КодОперации = глКО.ВозвратПоставщику); |Условие (Контрагент в СписокКонтрагентов[К]); |Группировка Контрагент без групп; |Группировка Документ; |Условие ((КодОперации <> глКО.ЗачтенАвансПоставщику) И (КодОперации <> глКО.ЗачтенАвансПоставщикуВал)); |Условие (КодОперации <> глКО.ЗачтенАвансПокупателя); |Условие (КодОперации <> глКО.СторнированАванс); |Условие (КодОперации <> глКО.ЗачтенВозвратПокупателя); |Условие (КодОперации <> глКО.ЗачтенВозвратПоставщику); |Условие (КодОперации <> глКО.СторнированВозврат); |"; |
|||
11
userMR3
06.05.13
✎
00:22
|
Видимо здесь косяк? Как сделать по другому?
|Условие (Контрагент в СписокКонтрагентов[К]); |
|||
12
Злопчинский
06.05.13
✎
00:23
|
вряд ли это поможе, но вместо элемента массива сделай список значений
|
|||
13
Злопчинский
06.05.13
✎
00:24
|
закомментируй для начала группировку по документу
|
|||
14
userMR3
06.05.13
✎
00:25
|
СписокКонтрагентов это и есть список значений, значения которого набираются в циклах. И получается двумерный массив. Но судя по всему в запросе он берет весь двумерный массив?
|
|||
15
userMR3
06.05.13
✎
00:29
|
(13) Также долго.
|
|||
16
userMR3
06.05.13
✎
00:35
|
Странно, если сделать СписокКонтрагентов1, то запрос выполняется быстро. Если СписокКонтрагентов[К] в цикле с 1 итерцией, то долго. В чем причина? Как это можно обойти?
|
|||
17
userMR3
06.05.13
✎
00:48
|
Сделал пока так, убого конечно, но работает раз в 20 быстрее, в чем проблема с массивами не могу понять:
Для К = 1 По КолвоСтрок Цикл Если К = 1 Тогда СписокКонтрагентовХ = СписокКонтрагентов1; ИначеЕсли К = 2 Тогда СписокКонтрагентовХ = СписокКонтрагентов2; ИначеЕсли К = 3 Тогда СписокКонтрагентовХ = СписокКонтрагентов3; ИначеЕсли К = 4 Тогда СписокКонтрагентовХ = СписокКонтрагентов4; ИначеЕсли К = 5 Тогда СписокКонтрагентовХ = СписокКонтрагентов5; ИначеЕсли К = 6 Тогда СписокКонтрагентовХ = СписокКонтрагентов6; ИначеЕсли К = 7 Тогда СписокКонтрагентовХ = СписокКонтрагентов7; ИначеЕсли К = 8 Тогда СписокКонтрагентовХ = СписокКонтрагентов8; КонецЕсли; |
|||
18
Злопчинский
06.05.13
✎
00:56
|
сделай просто, чтобы списокконтрагентов это был объект "СписокЗначений", а никакой не "двумерный массив"
|
|||
19
userMR3
06.05.13
✎
00:58
|
(18) Там 8 разных отчетов с разными контрагентами, каждый запрос должен быть с разным списком контрагентов.
|
|||
20
Злопчинский
06.05.13
✎
01:51
|
СписокЗначений - один, в зависимотси от внешних условий - помещай туда нужный перечень клиентов...
|
|||
21
ЗомбиТ1С
06.05.13
✎
02:34
|
В механизме выборки из регистров нет фильтра устанавливаемого массивом, поэтому формируется цикл по элементам массива. Список значений сам создает фильтр.
|
|||
22
userMR3
06.05.13
✎
11:20
|
(20) Я формирую перечень за 1 выборку контрагентов, так быстрее, чем 8 раз бегать по одной той же выборке.
(21) Спасибо, теперь понятно в чем было дело. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |