Имя: Пароль:
1C
1C 7.7
v7: Непонятное поведение 1С. Разное время выполнения одного и того же запроса.
0 nextkmv
 
08.07.15
15:16
Добрый день!
Имеет место следующая ситуация.
1с77 7.70.027 версия для SQL
Конфигурация Учет и отчетность предпринимателя
База данных SQL 2008.
При проведении документа корректировка задолженности в случае если:
Вид взаиморасчетов = расчеты с покупателем И
Вид корректировки = увеличение вызывается процедура глВыплатаПокупателю, в которой идет выполнение следующего запроса:

ТекстЗапроса =
        "//{{ЗАПРОС(Поставщики)
        |Период с ПервыйДокумент по ПоследнийДокумент;
        
        |ВидДеятельности = Регистр.РасчетыСПокупателями.ВидДеятельности;
        |СтавкаНДС = Регистр.РасчетыСПокупателями.СтавкаНДС;
        |Дог = Регистр.РасчетыСПокупателями.Договор;
        
        |РасчДокумент = Регистр.РасчетыСПокупателями.РасчДокумент;
        |ВидМатериальногоРесурса = Регистр.РасчетыСПокупателями.ВидМатериальногоРесурса;
        |Номенклатура = Регистр.РасчетыСПокупателями.Номенклатура;
        |ДокументПоступления = Регистр.РасчетыСПокупателями.ДокументПоступления;

        |Кол = Регистр.РасчетыСПокупателями.Количество;
        |Сумма = Регистр.РасчетыСПокупателями.Сумма;
        |СумНДС = Регистр.РасчетыСПокупателями.СуммаНДС;
        |СумНП = Регистр.РасчетыСПокупателями.СуммаНП;
        |Ст = Регистр.РасчетыСПокупателями.Стоимость;
        |СтОпл = Регистр.РасчетыСПокупателями.СтоимостьОплаченная;
        
        |Функция Количество = КонОст(Кол) Когда (Кол < 0);
        |Функция Задолженность = КонОст(Сумма) Когда (Сумма < 0);
        |Функция СуммаНДС = КонОст(СумНДС) Когда (СумНДС < 0);
        |Функция СуммаНП = КонОст(СумНП) Когда (СумНП < 0);
        |Функция Стоимость = КонОст(Ст) Когда (Ст < 0);
        |Функция СтоимостьОплаченная = КонОст(СтОпл) Когда (СтОпл < 0);
        
        |Группировка ВидДеятельности;
        |Группировка СтавкаНДС;
        |Группировка РасчДокумент;
        |Группировка ВидМатериальногоРесурса;
        |Группировка Номенклатура;
        |Группировка ДокументПоступления;
        
        |Условие (Дог = Конт.Договор);
        |"//}}ЗАПРОС
        ;
            
        Запрос = СоздатьОбъект("Запрос");
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат 0;
        КонецЕсли;

Время выполнения этого запроса несколько часов, однако если этот же запрос, с этими же параметрами, выполнить не в момент проведения а в обработке он выполняется за несколько секунд. Почему так может быть?
1 МихаилМ
 
08.07.15
15:18
блокировки
2 vcv
 
08.07.15
15:19
А условия запроса точно одинаковы? Договор, ПервыйДокумент и ПоследнийДокумент. Может в процедуре проведения вместо документа/позиции документа передаёшь что-нибудь некорректное? Контекст, например.
3 nextkmv
 
08.07.15
15:28
(2) В тестовой обработке указал те же условия которые были получены в отладчике при проведении документа.
(1) Я то же грешу на блокировки, но не знаю как подтвердить или опровергнуть эту теорию, а так же что с ней делать дальше. При всем при том этот эффект наблюдается при монопольной работе.
4 Ёпрст
 
08.07.15
15:37
(0) забавный запрос.. в частности в расчете условий при вычислении останков.
У вас чего, в ресурсах отрицательное количество всегда накапливается ?
5 Ёпрст
 
08.07.15
15:39
И такое условие на КонОст.. должно давать забавные рещультаты..весьма забавные. Особенно, если ПоследнийДокумент не в дате ТА находится
6 Ёпрст
 
08.07.15
15:40
хотя, пофик на ТА - там всегда "чудесные" результаты.
7 aka AMIGO
 
08.07.15
15:41
ЗЫ. у меня тоже, в локальной базе отчет выполняется за 5 секунд, а в сетевой, где сидят 20 человек, около 3-х минут..
8 Господин ПЖ
 
08.07.15
15:42
>но не знаю как подтвердить или опровергнуть эту теорию, а так же что с ней делать дальше

посмотреть на скуле блокировки
9 nextkmv
 
08.07.15
15:44
(5) Тем не менее это типовая конфигурация которая регулярно обновляется.
10 Ёпрст
 
08.07.15
16:37
(9) передавай привет тем, кто писал это чудо в (0)
11 Herby
 
09.07.15
15:05
несколько секунд и несколько часов - разница несоизмеримая.
может период отбора все-таки разный?
Программист всегда исправляет последнюю ошибку.