Имя: Пароль:
1C
1C 7.7
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) Спасибо, теперь понятно в чем было дело.
2 + 2 = 3.9999999999999999999999999999999...