Имя: Пароль:
1C
1C 7.7
v7: Ошибка блокировки данных на SQL сервере (deadlock)
,
0 МастерВопросов
 
23.09.11
11:57
День добрый!

Из одной базы делается прямой запрос через OLEDB к SQL-ой базе на 1С77, в это время в базе работают много пользователей.
До недавнего времени запрос работал нормально, но последнее время довольно часто (но не всегда) стал вылетать с ошибкой:

Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{Отчет.НашОтчет.МодульОбъекта(1532)}: Ошибка при вызове метода контекста (Execute)
       Recordset = Command.Execute();    
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Transaction (Process ID 66) was deadlocked on thread
| communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Запрос строится к таблицам регистра Поставщики, Покупатели, справочнику Договора.

Подскажите где копать, в чем может быть ошибка?

З.Ы.: На компе разоварчиваю копию двух этих баз, в "рабочей" базе запсукаю по циклу перепроведение документов за период запроса, во второй базе злополучный отчет - никаких deadlock-ов не происходит и документы проводятся нормально и отчет во второй базе строится. Единственное отличие у меня копия базы крутится на SQL2005, а настоящая база на SQL2000.
1 Ёпрст
 
23.09.11
11:58
(0) хинт nolock используешь в тексте запроса ?
2 МастерВопросов
 
23.09.11
12:02
(1) да
3 МастерВопросов
 
23.09.11
12:03
может таймаут другой поставить?

"        Command = Новый COMОбъект("ADODB.Command");
       Command.ActiveConnection = Conn;
       Command.CommandText = ТекстЗапроса;
       Command.CommandTimeOut=0;
       
       Recordset = Новый COMОбъект("ADODB.Recordset");
       Recordset = Command.Execute();
"
4 МастерВопросов
 
23.09.11
12:04
(1)

       ТекстЗапроса = "
       |SELECT Подзапрос.ВидКонтрагента ВидКонтрагента
       |    , Подзапрос.ВидПокупателя ВидПокупателя
       |    , Подзапрос.ОсновнойКонтрагент ОсновнойКонтрагент
       |    , Подзапрос.Контрагент Контрагент
       |    , Подзапрос.Период Период
       |    , Sum(Подзапрос.ОстатокДолга) ОстатокДолга
       |    , Sum(Подзапрос.ДвижениеДолга) ДвижениеДолга
       |FROM (SELECT 'С поставщиком' ВидКонтрагента
       |    , '' ВидПокупателя
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END ОсновнойКонтрагент
       |    , Контрагенты.Descr Контрагент
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , ПоставщикиИтоги.SP4311 ОстатокДолга
       |    , 0 ДвижениеДолга
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID
       |    INNER JOIN rg4314 AS ПоставщикиИтоги (nolock) ON Договоры.ID = ПоставщикиИтоги.sp4306
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    AND (ПоставщикиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'С поставщиком'  
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |    , 0
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С поставщиком'  
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С поставщиком'
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , ПокупателиИтоги.SP4329  
       |    , 0  
       |FROM sc204 AS Договоры  (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN rg4335 AS ПокупателиИтоги (nolock) ON Договоры.ID = ПокупателиИтоги.sp4323
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    AND (ПокупателиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'С поставщиком'
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С поставщиком'
       |    , ''  
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0  
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-08')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С покупателем'
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , ПокупателиИтоги.SP4329  
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN rg4335 AS ПокупателиИтоги (nolock) ON Договоры.ID = ПокупателиИтоги.sp4323
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    AND (ПокупателиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'С покупателем'
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С покупателем'
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0  
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С покупателем' ВидКонтрагента
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr Контрагент
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , ПоставщикиИтоги.SP4311 ОстатокДолга
       |    , 0 ДвижениеДолга
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID
       |    INNER JOIN rg4314 AS ПоставщикиИтоги (nolock) ON Договоры.ID = ПоставщикиИтоги.sp4306
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    AND (ПоставщикиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'С покупателем'  
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |    , 0
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'С покупателем'  
       |    , case Подразделения.DESCR when 'Отдел продаж (опт)' then 'опт' else (case Подразделения.DESCR when 'Отдел Маурер' then 'Маурер' else 'розница' end ) end
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE Подразделения.CODE IS NOT NULL AND (LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'Прочие'  
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , ПоставщикиИтоги.SP4311
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN rg4314 AS ПоставщикиИтоги (nolock) ON Договоры.ID = ПоставщикиИтоги.sp4306
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    AND (ПоставщикиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'Прочие'  
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |    , 0
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'Прочие'  
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4314 AS ПоставщикиДвижения (nolock) ON Договоры.ID = ПоставщикиДвижения.sp4306
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПоставщикиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'Прочие'
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , ПокупателиИтоги.SP4329  
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN rg4335 AS ПокупателиИтоги (nolock) ON Договоры.ID = ПокупателиИтоги.sp4323
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    AND (ПокупателиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT 'Прочие'
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |    , 0  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT 'Прочие'
       |    , ''
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END
       |    , Контрагенты.Descr
       |    , "+ПеременнаяПериода+"
       |    , 0  
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |FROM sc204 AS Договоры (nolock)
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    INNER JOIN ra4335 AS ПокупателиДвижения (nolock) ON Договоры.ID = ПокупателиДвижения.sp4323
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |WHERE ((Подразделения.CODE IS NULL) OR (Подразделения.CODE IS NOT NULL AND NOT(LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-08' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13')))
       |    and Журнал.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |) AS Подзапрос
       |GROUP BY Подзапрос.ВидКонтрагента
       |    , Подзапрос.ВидПокупателя
       |    , Подзапрос.ОсновнойКонтрагент
       |    , Подзапрос.Контрагент
       |    , Подзапрос.Период
       |";
       

       Command = Новый COMОбъект("ADODB.Command");
       Command.ActiveConnection = Conn;
       Command.CommandText = ТекстЗапроса;
       Command.CommandTimeOut=0;
       
       
        Recordset = Новый COMОбъект("ADODB.Recordset");
        Recordset = Command.Execute();     //здесь вылетает ошибка
5 Ёпрст
 
23.09.11
12:11
(4) и.. нахрена ado использовать ?!
6 Ёпрст
 
23.09.11
12:12
+5 а всё вижу, это запрос из снеговика к клюшкам.
7 МихаилМ
 
23.09.11
12:16
deadlocks Involving Parallelism

промеряется (и лечится)

OPTION(MAXDOP 1)
8 МихаилМ
 
23.09.11
12:19
+(7)

не вооруженным глазом видно

, что часть джоинов нужно вынести за union
9 МастерВопросов
 
23.09.11
12:27
(7) OPTION(MAXDOP 1) - включить однопроцессорный режим?
И отключить четыре четырехядерных процессора...
на это я пойтить не могу.
10 Ёпрст
 
23.09.11
12:29
(9) можешь так сделать:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
11 МихаилМ
 
23.09.11
12:33
максдоп для проверки добавить в текст запроса
хотя итак понятно, что проблема в блокировке при распараллеливании

хотите распарралелить - перепишите
этот отратительный запрос.

в оциях сервера изменять  не к чему.

хотя есть рекрмендации олтп не параллелить.
12 МастерВопросов
 
23.09.11
12:43
А, вообще, как думаете это запрос сам себя блокирует, или какая то деятельность пользователей в базе мешает выполняться запросу?
13 Ёпрст
 
23.09.11
12:45
(12) уриба нет случаем ?
14 Ёпрст
 
23.09.11
12:45
да и код, переписал бы что ли..
15 Ёпрст
 
23.09.11
12:45
весь.
16 МихаилМ
 
23.09.11
12:53
(12)

самоблокировка в запросе

скорее всего если запрос запустить из ssms

получите другой текст ошибки
типа

Intra-query parallelism caused your server command (process ID ...) to deadlock
17 МастерВопросов
 
23.09.11
13:19
(13) да, на рабочей базе (к которой запрос строится) есть!
18 МастерВопросов
 
24.09.11
11:26
переписал запрос, в понедельник будут полоевые испытания:


       ТекстЗапроса = "
       |SELECT
       |CASE WHEN LTRIM(RTRIM(Подразделения.CODE))='C-08' then 'С поставщиком' else (CASE WHEN LTRIM(RTRIM(Подразделения.CODE))='C-16' OR LTRIM(RTRIM(Подразделения.CODE))='C-02' OR LTRIM(RTRIM(Подразделения.CODE))='C-13' then 'С покупателем' else 'Прочие' end) end ВидКонтрагента
       |    , CASE WHEN LTRIM(RTRIM(Подразделения.CODE))='C-02' then 'опт' else (CASE WHEN LTRIM(RTRIM(Подразделения.CODE))='C-16' then 'Маруер' else (CASE WHEN LTRIM(RTRIM(Подразделения.CODE))='C-13' then 'розница' else '' end) end) end ВидПокупателя
       |    , CASE WHEN ОснКонтрагенты.Descr IS NULL THEN Контрагенты.Descr ELSE ОснКонтрагенты.Descr END ОсновнойКонтрагент
       |    , Контрагенты.Descr Контрагент
       |    , Подзапрос.Период Период
       |    , Sum(Подзапрос.ОстатокДолга) ОстатокДолга
       |    , Sum(Подзапрос.ДвижениеДолга) ДвижениеДолга
       |FROM (SELECT
       |     ПоставщикиИтоги.sp4306 Договор
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , ПоставщикиИтоги.SP4311 ОстатокДолга
       |    , 0 ДвижениеДолга
       |FROM rg4314 AS ПоставщикиИтоги (nolock)
       |WHERE (ПоставщикиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT ПоставщикиДвижения.sp4306  
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' Период
       |    , case ПоставщикиДвижения.debkred when 0 then ПоставщикиДвижения.SP4311 else -ПоставщикиДвижения.SP4311 end
       |    , 0
       |FROM ra4314 AS ПоставщикиДвижения (nolock)
       |    inner join _1sjourn as Журнал1 (nolock) on Журнал1.iddoc = ПоставщикиДвижения.iddoc
       |WHERE Журнал1.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал1.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT ПоставщикиДвижения2.sp4306  
       |    , "+СтрЗаменить(ПеременнаяПериода,"Журнал","Журнал2")+"
       |    , 0
       |    , case ПоставщикиДвижения2.debkred when 0 then ПоставщикиДвижения2.SP4311 else -ПоставщикиДвижения2.SP4311 end
       |FROM ra4314 AS ПоставщикиДвижения2 (nolock)
       |    inner join _1sjourn as Журнал2 (nolock) on Журнал2.iddoc = ПоставщикиДвижения2.iddoc
       |WHERE Журнал2.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал2.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT ПокупателиИтоги.sp4323
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , ПокупателиИтоги.SP4329  
       |    , 0  
       |FROM rg4335 AS ПокупателиИтоги (nolock)
       |WHERE (ПокупателиИтоги.PERIOD = '"+Строка(Формат(НачалоМесяца(НачалоМесяца(НачалоПериода)-1),"ДФ=ггггММдд"))+"')
       |UNION ALL
       |SELECT ПокупателиДвижения.sp4323
       |    , '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"'
       |    , case ПокупателиДвижения.debkred when 0 then ПокупателиДвижения.SP4329 else -ПокупателиДвижения.SP4329 end  
       |    , 0  
       |FROM ra4335 AS ПокупателиДвижения (nolock)
       |    inner join _1sjourn as Журнал3 (nolock) on Журнал3.iddoc = ПокупателиДвижения.iddoc
       |WHERE
       |Журнал3.date_time_iddoc >= '"+Строка(Формат(НачалоМесяца(НачалоПериода),"ДФ=ггггММдд"))+"' and Журнал3.date_time_iddoc < '"+Строка(Формат((НачалоПериода+1),"ДФ=ггггММдд"))+"'
       |UNION ALL
       |SELECT ПокупателиДвижения2.sp4323
       |    , "+СтрЗаменить(ПеременнаяПериода,"Журнал","Журнал4")+"
       |    , 0  
       |    , case ПокупателиДвижения2.debkred when 0 then ПокупателиДвижения2.SP4329 else -ПокупателиДвижения2.SP4329 end  
       |FROM ra4335 AS ПокупателиДвижения2 (nolock)
       |    inner join _1sjourn as Журнал4 (nolock) on Журнал4.iddoc = ПокупателиДвижения2.iddoc
       |WHERE Журнал4.date_time_iddoc >= '"+Строка(Формат(НачалоПериода,"ДФ=ггггММдд"))+"' and Журнал4.date_time_iddoc < '"+Строка(Формат((КонецПериода+1),"ДФ=ггггММдд"))+"'
       |) AS Подзапрос
       |    INNER JOIN sc204 AS Договоры (nolock) ON Договоры.ID = Подзапрос.Договор
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID
       |   LEFT OUTER JOIN SC27062 AS Подразделения (nolock) ON Контрагенты.SP573 = Подразделения.ID
       |   LEFT OUTER JOIN sc172 AS ОснКонтрагенты (nolock) ON Контрагенты.SP36559 = ОснКонтрагенты.ID
       |   WHERE Подразделения.CODE IS NOT NULL
       |GROUP BY
       |     Подразделения.CODE
       |    , Подразделения.CODE
       |    , ОснКонтрагенты.Descr
       |    , Контрагенты.Descr
       |    , Подзапрос.Период
       |";
19 МастерВопросов
 
24.09.11
11:31
кстати, как SCL сервер относится к запросам с одноименными таблицам типа:

       |UNION ALL
...
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
...
       |UNION ALL
...
       |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
...
       |UNION ALL
...
                       INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID  
       |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
20 val
 
24.09.11
11:59
(19) Альясы давай разные:
AS Контрагенты1
AS Контрагенты2
AS Контрагенты3

и проблем не будет никогда
21 МастерВопросов
 
24.09.11
12:20
(20) я так и сделал в (18)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.