Имя: Пароль:
1C
1С v8
долго проводиться возврат от покупателя в ут 10.3
0 rinaty17
 
05.06.14
15:38
Добрый день форумчане!)
после поисков нашел запрос который долго отрабатывает, который находиться в общем модуле УчетНДС.СформироватьДвиженияПоНДС()
код:
ИначеЕсли ЭтоВозвратОтПокупателя тогда
        
        ЗапросРасходныхОрдеров = Новый Запрос;
        ЗапросРасходныхОрдеров.Текст = "ВЫБРАТЬ
                                       |    ВЫБОР
                                       |        КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                                       |            ТОГДА ПартииТоваровНаСкладах.ДокументДвижения
                                       |        ИНАЧЕ ПартииТоваровНаСкладах.Регистратор
                                       |    КОНЕЦ КАК Регистратор,
                                       |    ВЫБОР
                                       |        КОГДА ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары
                                       |            ТОГДА ПартииТоваровНаСкладах.Регистратор
                                       |        ИНАЧЕ НЕОПРЕДЕЛЕНО
                                       |    КОНЕЦ КАК РасходныйОрдерНаТовары
                                       |ИЗ
                                       |    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
                                       |ГДЕ
                                       |    ПартииТоваровНаСкладах.ВидДвижения = &ВидДвиженияРасход
                                       |    И ПартииТоваровНаСкладах.КодОперации В(&КодыСписание)
                                       |    И (ПартииТоваровНаСкладах.Регистратор В (&МассивРегистраторов)
                                       |            ИЛИ ПартииТоваровНаСкладах.ДокументДвижения В (&МассивРегистраторов))
                                       |    И ПартииТоваровНаСкладах.Период < &Период
                                       |
                                       |СГРУППИРОВАТЬ ПО
                                       |    ВЫБОР
                                       |        КОГДА ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.РасходныйОрдерНаТовары
                                       |            ТОГДА ПартииТоваровНаСкладах.Регистратор
                                       |        ИНАЧЕ НЕОПРЕДЕЛЕНО
                                       |    КОНЕЦ,
                                       |    ВЫБОР
                                       |        КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                                       |            ТОГДА ПартииТоваровНаСкладах.ДокументДвижения
                                       |        ИНАЧЕ ПартииТоваровНаСкладах.Регистратор
                                       |    КОНЕЦ
                                       |ИТОГИ ПО
                                       |    Регистратор";
        
        МассивРеализация = Новый Массив;
        КодыОпераций = Перечисления.КодыОперацийПартииТоваров;
        МассивРеализация.Добавить(КодыОпераций.ПередачаТарыКонтрагенту);
        МассивРеализация.Добавить(КодыОпераций.Реализация);
        МассивРеализация.Добавить(КодыОпераций.РеализацияКомиссия);
        МассивРеализация.Добавить(КодыОпераций.РеализацияРозница);
        
        ЗапросРасходныхОрдеров.УстановитьПараметр("КодыСписание",МассивРеализация);
        
        МассивРегистраторов = ТаблицаСписания.ВыгрузитьКолонку("ДокументПередачи");
        ЗапросРасходныхОрдеров.УстановитьПараметр("МассивРегистраторов",МассивРегистраторов);
        // Возврат не может быть раньше реализации
        ЗапросРасходныхОрдеров.УстановитьПараметр("Период",СтруктураПараметров.Период);
        ЗапросРасходныхОрдеров.УстановитьПараметр("ВидДвиженияРасход",ВидДвиженияНакопления.Расход);
        
        ДеревоРасходныхОрдеров = ЗапросРасходныхОрдеров.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
        СтруктураПараметров.Вставить("ДеревоРасходныхОрдеров",ДеревоРасходныхОрдеров);
        
        РаспределеннаяТаблицаСписания = РаспределитьПартииПоТаблицеСписания(ТаблицаПартий, ТаблицаСписания, СтруктураШапкиДокумента, СтруктураПараметров);
        УчетНДСФормированиеДвижений.ДвиженияВозвратаТоваровОтПокупателяПоРегистрамПодсистемыНДС(СтруктураШапкиДокумента, СтруктураПараметров, РаспределеннаяТаблицаСписания, Отказ, Заголовок);
        Возврат;
1 Fragster
 
гуру
05.06.14
15:39
тормозит вот это:

                                       |    И (ПартииТоваровНаСкладах.Регистратор В (&МассивРегистраторов)
                                       |            ИЛИ ПартииТоваровНаСкладах.ДокументДвижения В (&МассивРегистраторов))

замени на объединение с каждым условием по отдельности
2 Fragster
 
гуру
05.06.14
15:40
причем не "Объединить все", а просто "объединить"
3 rinaty17
 
05.06.14
15:40
МассивРегистраторов содержит 1 строку со значением неопределено, и из - за этого запрос мне возвращает все документы где ПартииТоваровНаСкладах.ДокументДвижения = неопределено, а это все реализации за весь период
4 Fragster
 
гуру
05.06.14
15:42
(3) ну типа автоподбор партии, все дела...
5 vis_tmp
 
05.06.14
15:43
Там не ограничен список номенклатур.
Сделай это и будет быстро.
6 Fragster
 
гуру
05.06.14
15:46
(5) вообще да, странно, что не ограинчили. может это допиленный кусок какой-то?
7 Fragster
 
гуру
05.06.14
15:47
я просто как вижу "ИЛИ" по разным полям рядом со словами "тормозит" "долго" или "медленно", сразу на него думаю
8 Fragster
 
гуру
05.06.14
15:47
(7)+ остальное пропускаю на автомате
9 rinaty17
 
05.06.14
15:48
(6) я тоже думал что модуль допиленный, сравнил с стандартной последнего обновления модуль 1 в 1
10 rinaty17
 
05.06.14
15:49
клиент не пользуется документом РасходныйОрдерНаТовары, и не будет пользоваться, может тогда лучше сразу вернуть с запроса неопределено?
11 vis_tmp
 
05.06.14
16:06
(6) Нет, это типовой.
Я на форуме 1С спрашивал, разработчик признавал.
Там добавить 3 строки буквально.
12 rinaty17
 
05.06.14
16:13
(11)если объемы базы небольшие то да поможет, в моем случае особого ускорения не дал, документов очень много
13 vis_tmp
 
05.06.14
16:47
(12) У меня именно на больших базах этот тормоз исчез после добавления условия на товары.
14 vis_tmp
 
05.06.14
16:47
(12) А ты как сделал?
15 rinaty17
 
05.06.14
17:02
(14)
в условии где добавил строку
|    И ПартииТоваровНаСкладах.Номенклатура В(&Номенклатура)
и параметр
ЗапросРасходныхОрдеров.УстановитьПараметр("Номенклатура",ТаблицаСписания.ВыгрузитьКолонку("Номенклатура"));
16 vis_tmp
 
06.06.14
06:24
(15) Да, аналогично.
А в "МассивРегистраторов" у тебя что ?
17 rinaty17
 
06.06.14
09:21
(16) МассивРегистраторов содержит 1 строку со значением неопределено, и из - за этого запрос мне возвращает все документы где ПартииТоваровНаСкладах.ДокументДвижения = неопределено, а это все реализации за весь период около 700000 док.
18 vis_tmp
 
10.06.14
12:32
Ну как, добился чего-нибудь?
19 rinaty17
 
11.06.14
11:47
(18) так как клиент не работает с расходными ордерами на товары, поставил условие если МассивРегистраторов содержит 1 строку со значением неопределено тогда не вычисляет запрос а возвращет непределено, иначе по стандартному пути