Имя: Пароль:
1C
1C 7.7
v7: Запросы
Ø (GROOVY 31.10.2013 13:00)
,
0 pofigos
 
31.10.13
11:56
Добрый день...
Прошу ответить на очень глупый вопрос, но все же интересующий.

1. Есть ли разница что использовать СоздатьОбъект("ПрямойЗапрос") или СоздатьОбъект("ODBCRecordset"). Если есть разница, то в чем?
2. Так же заметил, что написанный запрос (а он вроде примитивный) просто грузит систему полностью. и пока он не сформируется пользователи сидят в полной транзакции. Возможно, параллельно запускают еще что-то, но нервы уже не выдерживают. Если кривой запрос. укажите в каком месте.


ТекстЗапроса = "
        |SELECT
        |     $ДокПриход.Контрагент [Поставщик $Справочник.Контрагенты]
        |    , $Сотрудники.Филиал [Филиал $Справочник.Подразделение]
        |    , COALESCE($ДокТТН.МОЛ, $ДокАкт.МОЛ, $ДокВозвр.МОЛ)  [Склад $Справочник.Склады]
        |    , $ДокТТН.Акция [Акция $Документ.Акция]
        |    , РеализацияОбороты.Покупатель [Покупатель $Справочник.Контрагенты]
        |    , РеализацияОбороты.ТипЦены [ТипЦены $Справочник.ТипыЦен]
        |    , Товары.PARENTID [Родитель $Справочник.ВидыТоваров]
        |    , РеализацияОбороты.Товар [Товар $Справочник.ВидыТоваров]
        |    , Sum(РеализацияОбороты.СуммаПриходнаяОборот) СуммаПриходная
        |    , Sum(РеализацияОбороты.СуммаОборот) СуммаСНДС
        |    , Sum(РеализацияОбороты.СуммаБезНДСОборот) СуммаБезНДС
        |    , Sum(РеализацияОбороты.КоличествоОборот) Количество
        |FROM $РегистрОбороты.Реализация(:НачДата,:КонДата~,Документ,,Фильтр,( Покупатель,Партия, Товар, ТипЦены, Менеджер),) AS РеализацияОбороты
        |
        |LEFT JOIN  $Справочник.Сотрудники AS Сотрудники  With (NOLOCK) on Сотрудники.id = РеализацияОбороты.Менеджер
        |LEFT JOIN  $Справочник.ВидыТоваров AS Товары  With (NOLOCK) on Товары.id = РеализацияОбороты.Товар
        |LEFT JOIN    $Документ.ТТННаОрганизациюТовары as ДокТТН  With (NOLOCK) ON RIGHT(РеализацияОбороты.ПозицияДокумента,9) = ДокТТН.IDDoc
        |LEFT JOIN    $Документ.АктПриема as ДокАкт  With (NOLOCK) ON RIGHT(РеализацияОбороты.ПозицияДокумента,9) =  ДокАкт.IDDoc
        |LEFT JOIN    $Документ.ВозвратИзОрганизацииТоваров as ДокВозвр  With (NOLOCK) ON RIGHT(РеализацияОбороты.ПозицияДокумента,9) =  ДокВозвр.IDDoc
        |LEFT JOIN  $Справочник.Товары AS СпрТовары  With (NOLOCK) on СпрТовары.id = РеализацияОбороты.Партия
        |LEFT JOIN    $Документ.ПриходТоваров as ДокПриход  With (NOLOCK) ON RIGHT($СпрТовары.Документ,9) =  ДокПриход.IDDoc
        |
        |Условия
        |GROUP BY
        |     $ДокПриход.Контрагент
        |    , $Сотрудники.Филиал
        |    , COALESCE($ДокТТН.МОЛ, $ДокАкт.МОЛ, $ДокВозвр.МОЛ)    
        |   , РеализацияОбороты.Покупатель
        |    , РеализацияОбороты.ТипЦены
        |    , Товары.PARENTID
        |    , РеализацияОбороты.Товар
        |    ,$ДокТТН.Акция
        |";
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Условия",Условия);
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Фильтр",Фильтр);
    //}    
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);        
    
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ИсхТаб,1);

3. Обращение напрямую к регистрам влияют как-то на блокировки? Нашел просто 2 отчета с запросом не к ВТ а напрямую к регистрам.

Буду очень благодарен за помощь.
1 pofigos
 
31.10.13
12:00
Забыл параметры сервера:
На данный момент Win2003+Sql2005+1C 7.7.27 (не секретный релиз). Intel Xeon E5645, 10 рейд, 40 гиг памяти. в SQL выставлено использование AWE. Память ограничена 30гигами. Паралеллизм стоит 0
2 Гефест
 
31.10.13
12:00
Используй nolock, Люк
3 КонецЦикла
 
31.10.13
12:02
Прямой запрос - это класс
Если у тебя просто SQL, то можно его не использовать
По поводу вышеописанного надо проверить соединения и условия, пройтись профайлером
Можно закоментить все кроме ВТ и подсоединять по очереди

Настораживает отсутствие в селекте всех этих документов и справочников. Накуя они? В условиях? Может быть поместить это в ВТ? Если очень сложно - поместить в ВТ временную таблицу, собранную по условиям
4 pofigos
 
31.10.13
12:04
(3) В селекл возвращается поле склад из документов (в регистрах отсутствует) COALESCE($ДокТТН.МОЛ, $ДокАкт.МОЛ, $ДокВозвр.МОЛ)
(2)может я ошибаюсь, но мне всегда казалось With (NOLOCK) и NOLOCK это одно и тоже.
5 КонецЦикла
 
31.10.13
12:08
Вот поэтому надо начинать с отчетов когда проектируешь регистр :)
6 pofigos
 
31.10.13
12:10
(5) увы, проектировали регистры задолго до меня...
7 pofigos
 
31.10.13
12:45
Можно закрывать. Просто паника.
8 floody
 
31.10.13
12:54
"пользователи сидят в полной транзакции" - улыбнуло, опу так еще никто не называл
9 floody
 
31.10.13
12:57
терминал? какое значение имеет счетчик SQL Server:Memory Manager - Total Server Memory?
Программист всегда исправляет последнюю ошибку.