Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос и ТП
0 monsterZE
 
10.01.14
16:51
есть вот такой запрос (из дебагера)

select top 20
Т.ПрихДок as Док,
0 as Маркер,
(Т.Проведен - Т.Удален) as Статус,
left(Т.ДатаДок, 8) as ДатаДок,
dbo.formatTime(SUBSTRING(Т.ДатаДок,9,6),':') as ВремяДок,
Т.ПризнакНакладной as ПризнакНакладной,
Т.НомерДок as НомерДок,
Т.Клиент as Клиент,
Т.Основание as Основание,
Т.Закреплен as Закреплен
from (
    SELECT DISTINCT
    ДокП.IDDoc as ПрихДок
    ,ДокП.sp217 as Клиент
   ,ДокП.sp226 as ПризнакНакладной
    ,Жур.Date_Time_IDDoc as ДатаДок        
    ,Жур.Closed & 1 as Проведен
    ,Жур.ISMARK as Удален
    ,Жур.DocNo as НомерДок
    ,0 as Основание
    ,ДокП.sp1447 as Закреплен
    FROM
        dh214 as ДокП (NOLOCK)
    INNER JOIN
        _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокП.IDDoc AND (Жур.Date_Time_IDDoc BETWEEN '20140110' AND '20140110Z')
    INNER JOIN
        dt214 as ДокПСтр (NOLOCK) ON ДокПСтр.IDDoc = ДокП.IDDoc
    INNER JOIN
        sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227 AND СпрТов.sp1181 IN ('     5   ')    
WHERE
    ДокП.sp216 = '     2   '

    ) as Т

order by Т.ПрихДок
1 КонецЦикла
 
10.01.14
16:53
ОК. Вопрос где?
2 monsterZE
 
10.01.14
16:53
и если в подзапросе меняю
,0 as Основание
на
,CAST(ДокП.$ОбщийРеквизит.Основание as Char(100)) as Основание
то он начинает себя вести неадекватно.. на относительно большем периоде
3 КонецЦикла
 
10.01.14
16:54
Становится меркантильным?
4 monsterZE
 
10.01.14
16:54
т.е. обновляю ТП
может обновиться, но потом все висит
а может просто зависнуть
период допустим 10 дней
5 monsterZE
 
10.01.14
16:54
задача не отвечает бла-бла-бла =)
6 КонецЦикла
 
10.01.14
16:55
Когда висит запросы отсылаются? Автообновлние?
7 monsterZE
 
10.01.14
16:55
косяк в запросе или какая-то фитча ТП?
8 monsterZE
 
10.01.14
16:55
(6) не, ТП не обновляется
в статусе - выполняется обработка
9 monsterZE
 
10.01.14
16:57
нормальный запрос выглядит так

        ТекстЗапроса = "    
        |SELECT
        |    left(Т.ДатаДок, 8) as [ДатаДок $Дата]
        |    ,(Т.Проведен - Т.Удален) as Статус
        |    ,dbo.formatTime(SUBSTRING(Т.ДатаДок,9,6),':') as ВремяДок
        |   ,Т.ПрихДок as [Док $Документ.ПриходнаяНал]
        |   ,Т.ПризнакНакладной as [ПризнакНакладной $Перечисление.ПризнПрихНакл]
        |    ,Т.НомерДок as НомерДок
        |    ,Т.Клиент as [Клиент $Справочник.Клиенты]
        |    ,Т.Основание as Основание
        //|    ,CAST(Т.ПрихДок.$ОбщийРеквизит.Основание as Char(100)) as Основание
        |    ,Т.Закреплен as [Закреплен $Справочник.ЗакрепДокЗа]
        |    ,0 as Маркер
        |FROM
        |    (
        |    SELECT DISTINCT
        |    ДокП.IDDoc as ПрихДок
        |    ,$ДокП.Клиент as Клиент
        |   ,$ДокП.ПризнакНакладной as ПризнакНакладной
        |    ,Жур.Date_Time_IDDoc as ДатаДок        
        |    ,Жур.Closed & 1 as Проведен
        |    ,Жур.ISMARK as Удален
        |    ,Жур.DocNo as НомерДок
        //|    ,CAST(ДокП.$ОбщийРеквизит.Основание as Char(100)) as Основание
        //|    ,ДокП.$ОбщийРеквизит.Основание as Основание
        |    ,0 as Основание
        |    ,$ДокП.ЗакрепленЗа as Закреплен
        //|    ,$ДокП.Склад as [ОснСклад $Справочник.Склады]
        |    FROM
        |        $Документ.ПриходнаяНал as ДокП (NOLOCK)
        |    INNER JOIN
        |        _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокП.IDDoc";
        
        // указан период
        Если (НачДата<>"") и (КонДата<>"") Тогда
            ТекстЗапроса = ТекстЗапроса + " AND (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)";  
            Источник.УстановитьТекстовыйПараметр("НачДата", НачДата);  
            Источник.УстановитьТекстовыйПараметр("КонДата", КонДата);  
        КонецЕсли;    
        
        ТекстЗапроса = ТекстЗапроса + "
        //|        AND Жур.Closed & 1 = 1
        |    INNER JOIN
        |        $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) ON ДокПСтр.IDDoc = ДокП.IDDoc
        |    INNER JOIN
        |        $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар";
                                          
        // указан склад            
        //Если РазмерСпискаСклад>0 Тогда      
        //    ТекстЗапроса    = ТекстЗапроса + "AND $СпрТов.СкладТ IN (:СписСкладов)";  
        //    Запрос.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр);  
        //КонецЕсли;

        // указан склад
        РазмерСпискаСклад = СписВыбСклад.РазмерСписка();
        Если СписВыбСклад.РазмерСписка()>0 Тогда    
            ТекстЗапроса    = ТекстЗапроса + " AND $СпрТов.СкладТ IN (:СписСкладов)";  
            СписВыбСкладСтр = "";
            
            Для ъ=1 По РазмерСпискаСклад Цикл
                СписВыбСкладСтр = СписВыбСкладСтр+МД.ЗначениеВСтрокуБД(СписВыбСклад.ПолучитьЗначение(ъ))+?(ъ<РазмерСпискаСклад,"','","");
            КонецЦикла;
            
            Источник.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр);  
        КонецЕсли;
        
        ТекстЗапроса = ТекстЗапроса + "    
        |WHERE
        |    $ДокП.Склад = :ОснСклад
        |";
        
        Источник.УстановитьТекстовыйПараметр("ОснСклад", Константа.ОснСклад);  
        
        // указан клиент
        Если ВыбКлиент.Выбран()=1 Тогда              
            ТекстЗапроса = ТекстЗапроса + " AND ($ДокП.Клиент = :ВыбКлиент)";  
            Источник.УстановитьТекстовыйПараметр("ВыбКлиент", ВыбКлиент);  
        КонецЕсли;
        
        ТекстЗапроса = ТекстЗапроса + "
        |    ) as Т
        |";
10 monsterZE
 
10.01.14
16:59
смысл запроса - вычленить документы с товаром для определенного склада
11 monsterZE
 
10.01.14
16:59
своял тестовый запрос не в ТП - вроде работает нормально
12 monsterZE
 
10.01.14
16:59
что с кастом, что без него
13 monsterZE
 
10.01.14
17:01
странность в том, что когда период день-два
работает нормально.. когда количество доков в выборке увеличивается - каюк
14 monsterZE
 
10.01.14
17:02
тест

    ТекстЗапроса = "    
    |SELECT DISTINCT
    |    ДокП.IDDoc as [ПрихДок $Документ.ПриходнаяНал]
    |    ,$ДокП.Клиент as [Клиент $Справочник.Клиенты]
    |    ,$ДокП.Склад as [ОснСклад $Справочник.Склады]
    |    ,CAST(ДокП.$ОбщийРеквизит.Основание as Char(100)) as Основание
    |FROM
    |     $Документ.ПриходнаяНал as ДокП (NOLOCK)
    |INNER JOIN
    |     _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокП.IDDoc
    |     AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |     AND Жур.Closed & 1 = 1
    |INNER JOIN
    |    $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) ON ДокПСтр.IDDoc = ДокП.IDDoc
    |INNER JOIN
    |    $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
    |    AND $СпрТов.СкладТ = :ВыбСкладТ
    |WHERE
    |    $ДокП.Склад = :ОснСклад
    |";
    
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);  
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);  
    //Запрос.УстановитьТекстовыйПараметр("КонДата2", ДобавитьМесяц(КонДата,1));  
    Запрос.УстановитьТекстовыйПараметр("ОснСклад", Константа.ОснСклад);  
    Запрос.УстановитьТекстовыйПараметр("ВыбСкладТ", СкладТ);  
    
    ТабЗапроса = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);    
    
    ТабЗапроса.ВыбратьСтроку();
15 trad
 
10.01.14
17:10
(14) тестовый и ТП-шный запросы же разные
16 monsterZE
 
10.01.14
17:12
(15) ты про вложенную табличку?
17 monsterZE
 
10.01.14
17:13
(16) это чтобы он нормально жил в ТП.. на сколько я себе представляю
18 trad
 
10.01.14
17:22
вложенный запрос, как раз таки, скорее всего, не даст ТП нормально жить
19 trad
 
10.01.14
17:23
по поводу cast
кастуй лучше в varchar(100) - меньше данных передаваться будет от сервере клиенту
20 monsterZE
 
10.01.14
17:23
(19) так я его обернул только потому. что SELECT DISTINCT в ТП, вроде как не работает?
21 trad
 
10.01.14
17:26
применение такого условия Жур.IDDocDef = $ВидДокумента.ПриходнаяНал
скорее всего приведет к использованию более селективного индекса (что есть хорошо)
22 monsterZE
 
10.01.14
17:27
еще такой момент - виснет не столько на кастовании
сколько, когда добавляется
и склад = выб склад
но, убираешь кастование - и оно оживает
23 trad
 
10.01.14
17:28
(20) а тебе надо написать так запрос, чтобы не было надобности ни в distinct ни в group by
24 trad
 
10.01.14
17:30
(22) для определения действительных причин "умирания" "оживания" надо смотреть планы выполнения запросов для каждого случая и сравнивать их
25 trad
 
10.01.14
17:34
конечно, отбор документов по некоторым критериям из таб.части - не благодарная задача,
но, если все же требуется, я бы попробовал отказаться от дистинкта, а отбор сделал по корреляционному подзапросу
26 monsterZE
 
10.01.14
17:39
хм.. добавил ща условие по отбору только определенного типа документа - стало намного лучше
27 monsterZE
 
10.01.14
17:40
понятно, что это ж.. лезть в ТЧ дока цеплять реквизит товара и по нему отбирать =(
ну а как тогда подругому отсеить ненужные строки, если без distinct-а
28 trad
 
10.01.14
17:41
(25)+
например вместо вот этого

    ТекстЗапроса = ТекстЗапроса + "
    |    INNER JOIN
    |        $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK) ON ДокПСтр.IDDoc = ДокП.IDDoc
    |    INNER JOIN
    |        $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар";
    РазмерСпискаСклад = СписВыбСклад.РазмерСписка();
    Если СписВыбСклад.РазмерСписка()>0 Тогда    
        ТекстЗапроса    = ТекстЗапроса + " AND $СпрТов.СкладТ IN (:СписСкладов)";
        

написал бы как то так

    ТекстЗапроса = ТекстЗапроса + "
    |WHERE
    |...
    |and exists(
    |    select ДокПСтр.IDDoc
    |    from $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK)
    |    join $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
    |    where ДокПСтр.IDDoc = ДокП.IDDoc
    |      and $СпрТов.СкладТ IN (:СписСкладов)
    |)
29 monsterZE
 
10.01.14
17:45
(28) trad, пасиб! завтра буду эксперементировать. =)
30 monsterZE
 
11.01.14
13:06
(28) переделал на "без distinct" - получается медленние
select top 20
ДокП.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),':') as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from dh214 as ДокП (NOLOCK)
INNER JOIN
    _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокП.IDDoc
    AND Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN '20140111' AND '20140111Z')
where ДокП.sp216 = '     2   '

    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN ('     5   ')
        WHERE
            ДокПСтр.IDDoc = ДокП.IDDoc
        )
order by ДокП.IDDoc
31 sapphire
 
11.01.14
13:10
(0) Основание часом не строка неограниченной длины?
32 monsterZE
 
11.01.14
13:13
31 - ага =\
33 monsterZE
 
11.01.14
13:15
с вариантом без дестинкт самое дорогое получается поиск в индексе 1с_журн
34 monsterZE
 
11.01.14
13:16
к (31) думаешь стоит ее ограничить?
35 sapphire
 
11.01.14
13:18
(32) где храняться строки бесконечной длины?
36 Вуглускр1991
 
11.01.14
13:18
А ТП здесь все понимают канонически?
37 sapphire
 
11.01.14
13:20
(34) Не надо. Надо написать запрос несколько иначе:
Получение необходимых документов, что бы работало быстро.
Получение оснований, что бы тоже работало приемлемо.
38 monsterZE
 
11.01.14
13:24
(36) ТП - Табличное поле в 1с++
39 sapphire
 
11.01.14
13:27
(26) Используй временные таблицы, ИМХО, шустрее будет
и запросы отладить проще.
40 viktor_vv
 
11.01.14
14:14
(39) Временные таблицы не получится использовать, когда запрос источник данных для ТП.
41 viktor_vv
 
11.01.14
14:16
И таки да, если тормоза действительно от Основания, то можно его потом выводить в ТП при выводе строки.
42 sapphire
 
11.01.14
14:18
(40) Я уже давно не смотрел клюшки, низьзя, так нельзя.
А при выводе строки, по идее такожде тупить будет, коли не хуже.
43 viktor_vv
 
11.01.14
14:22
(42) да не должно оно тупить, там же дергаться будет только то, что на экран влезло.
Это если тупняк действительно из-за строки с неограниченной длиной.
44 viktor_vv
 
11.01.14
14:23
(43) + имхо.
45 monsterZE
 
11.01.14
14:35
(43) Если будут еще затупы - перенесу в при_выводе_строки
пока очень помогло в старый запрос добавить условие по типу документа
46 viktor_vv
 
11.01.14
14:56
(45) Я тоже сомневаюсь что из-за строки.
Плюс запросы с журналом обычно делаю таблицу журнала основной с условиями в where и левым уже к ней леплю, как-то с inner периодически на грабли наступал. Оно конечно от перемены мест план не должен поменяться, но когда несколько соединений могу быть нюансы.
47 trad
 
11.01.14
19:13
(30) добавь в селект позицию документа Жур.Date_Time_IDDoc
и в ключе порядка укажи позицию
48 monsterZE
 
13.01.14
12:56
(47) хм - плюсов не дало..
поменял AND EXISTS на AND ДокП.IDDoc IN
примерно сравнялось по скорости с дестинкт-вариантом..
49 ADirks
 
13.01.14
13:53
я бы как-то так нарисовал

select top 20

    ДокП.IDDoc as Док,
    0 as Маркер,

    (Жур.Closed & 1 - Жур.ISMARK) as Статус,
    left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
    dbo.ВремяСтрокой(Жур.Date_Time_IDDoc) Время,

    ДокП.Фирма as ПризнакНакладной,
    Жур.DocNo as НомерДок,
    ДокП.Контрагент as Клиент,
    CAST(ДокП.Комментарий as VarChar(100)) as Основание,
    ДокП.Договор as Закреплен
from
    ЖурналДокументов Жур
    LEFT JOIN докЗаявка as ДокП ON ДокП.идДок9 = Жур.идДок9

where
    Жур.IDDocDef = 15124
    AND (Жур.Date_Time_IDDoc BETWEEN '20130901' AND '20140111Z')
    AND ДокП.Фирма = '     2   '

    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
          докТЧЗаявка as ДокПСтр
          INNER JOIN спрНоменклатура as СпрТов  ON
            СпрТов.ид13 = ДокПСтр.Товар
            AND СпрТов.ТипКонструкции IN ('   V7O   ')

        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        )

    and Жур.Date_Time_IDDoc > '20130912'
order by
    Жур.Date_Time_IDDoc


-----------------------------------------
Заметь, вместо ДокП.IDDoc везде надо использовать Жур.IDDoc
и ключ порядка обязательно по Жур.Date_Time_IDDoc - это кардинально меняет план запроса.
50 ADirks
 
13.01.14
13:57
И ещё, может быть в данном случае стоит задуматься о некоей избыточности данных, в целях ускорения.
Т.е. завести например справочник с полями Документ, СкладТ. Заполнять этот справочник при записи документа. А ещё лучше SQL-табличку с такими же колонками, но с кластерным индексом (СкладТ, Документ)
51 monsterZE
 
13.01.14
14:40
пасиб! попробую и этот вариант.
я делал для расходников отдельный справочник
из него отбирает моментально (но там немного больший функционал)
если приспичит со скоростью и здесь - буду думать над (50)
52 trad
 
13.01.14
14:52
(48)далее мне сложно что-либо советовать. Нужно изучать планы выполнения.
53 Принт
 
13.01.14
14:52
(0) ТП, простите, что?
54 trad
 
13.01.14
14:59
(53) см (2), (4)
55 trad
 
13.01.14
15:00
(53) ТП - табличное поле в семерке
56 monsterZE
 
13.01.14
15:19
Всем спасибо за участие =) третий вариант работает примено также как второй с екзистс - вот так получается быстрее, но вобщем на уровне с дистинки и вторым запросом

select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),'':'') as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
    AND (ДокП.sp216 = ''     2   '')
where Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN ''20131201'' AND ''20131213Z'')
    AND Жур.IDDoc IN
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc
57 Ёпрст
 
13.01.14
15:23
забавное условие на iddoc
58 Ёпрст
 
13.01.14
15:24
+ в подзапросе условие на него же еще и коррелированное
59 monsterZE
 
13.01.14
15:26
гы.. поставил в этот вариант два месяца - все также быстро
поставил два месяца в запрос с дистинкт и 1с умерла =)
60 monsterZE
 
13.01.14
15:27
(57)что за условие? чет не вижу =)
61 Ёпрст
 
13.01.14
15:36
(60)

AND Жур.IDDoc IN (select iddoc ... where IDDoc = Жур.IDDoc)
62 monsterZE
 
13.01.14
15:42
(61) хм, ну да.. =)
меняю его на екзистс и с двух месячным периодом получаю так-же вылет 1сы
63 Ёпрст
 
13.01.14
15:44
а так ?

AND exists (select * from ... where IDDoc = Жур.IDDoc)
64 monsterZE
 
13.01.14
15:53
(63) в смысле так - ? вылет

            |    AND exists (
            |        select *
            |        from
            |            $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK)
            |          INNER JOIN
            |            $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
            |            AND $СпрТов.СкладТ IN (:СписСкладов)
            |        where
            |            IDDoc = Жур.IDDoc)
65 Ёпрст
 
13.01.14
15:56
так:

|    AND exists (
            |        select *
            |        from
            |            $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK)
            |          INNER JOIN
            |            $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
            |            AND $СпрТов.СкладТ IN (:СписСкладов)
            |        where
            |            ДокПСтр.IDDoc = Жур.IDDoc)
66 monsterZE
 
13.01.14
16:02
вобщем вот подзапрос
        ПодзапросОтбораПоСкладам = "
        |    AND EXISTS
        //|    AND Жур.IDDoc IN
        |        (
        |        SELECT
        |            ДокПСтр.IDDoc
        |        FROM
        |            $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK)
        |          INNER JOIN
        |            $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
        |            AND $СпрТов.СкладТ IN (:СписСкладов)
        |        WHERE
        |            ДокПСтр.IDDoc = Жур.IDDoc
        |        )
        |";
67 monsterZE
 
13.01.14
16:03
смотрю с дебаг(1)
с ексзистс:
если пролетает аск деск - то работает
но медленно
если аск деск не видно - как будто на одном месте крутится
68 Ёпрст
 
13.01.14
16:04
(67) а как в (65) что ?
69 monsterZE
 
13.01.14
16:08
(65) циклится и вылетает
70 Ёпрст
 
13.01.14
16:21
не верится, что (66) работает, а (65) нет.
71 monsterZE
 
13.01.14
16:22
(70) нет - (66) тоже не работает =)
если относительно большой период ставишь - тоже самое
72 monsterZE
 
13.01.14
16:23
если условие с IN - пролетают два запроса и ТП обновляется
если условие с EXISTS - лезет бесконечный цикл из запросов и 1с валится
73 Ёпрст
 
13.01.14
16:26
а че за реквизит СкладТ ? Накой он в товарах.. ?
74 monsterZE
 
13.01.14
16:29
(73) это физический склад товара
75 Ёпрст
 
13.01.14
16:32
(74) это как ?
:)
76 monsterZE
 
13.01.14
16:34
(75) вот так =) оптовая база
5 сторон по несколько складов на каждой
А1, А2, Б3, Г1,...
77 Ёпрст
 
13.01.14
16:37
Дык чего за товар такой, что он всегда на одном складе ?
78 Ёпрст
 
13.01.14
16:37
конкретном ?
79 monsterZE
 
13.01.14
16:39
позиции товары закреплены за определенными складами (конкретными) электрика, сантехника, стройка, посуда, пластмасса, швейка, ...
80 trad
 
13.01.14
17:15
(72)
1.покажи отладочный запрос с exists
2.не могу вкурить запрос (56) из-за лишней скобки в конце
81 ADirks
 
13.01.14
17:31
А кстати, настройка 'max degree of parallelism' какое значение имеет? А то бывает, что распараллеливание даёт такие эффекты :)

exec sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
exec sp_configure 'max degree of parallelism'
82 Ёпрст
 
13.01.14
17:32
(81) дык, наверняка 1..
83 ADirks
 
13.01.14
17:33
(82) почему наверняка?  по умолчанию то 0.
84 Ёпрст
 
13.01.14
17:38
(83) та обычно все первым делом паралелизм отключають ;)
85 Ёпрст
 
13.01.14
17:39
мне вот непонятно, чего с экзистом не работает, а с ин работает..
86 ADirks
 
13.01.14
17:41
(84) не все такие хитрые :)

(85) это да, я пробовал и так и так - результат вообще идентичный
87 monsterZE
 
13.01.14
17:43
нормальный запрос из 56
        ТекстЗапроса = "    
        |SELECT
        |     left(Жур.Date_Time_IDDoc, 8) as [ДатаДок $Дата]
        |    ,Жур.DocNo as НомерДок
        |    ,Жур.Date_Time_IDDoc as ПозДок
        |    ,(Жур.Closed & 1 - Жур.ISMARK) as Статус
        |    ,dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),':') as ВремяДок
        |   ,Жур.IDDoc as [Док $Документ.ПриходнаяНал]
        |   ,$ДокП.ПризнакНакладной as [ПризнакНакладной $Перечисление.ПризнПрихНакл]
        |    ,$ДокП.Клиент as [Клиент $Справочник.Клиенты]
        |    ,CAST(ДокП.$ОбщийРеквизит.Основание as VarChar(100)) as Основание
        |    ,$ДокП.ЗакрепленЗа as [Закреплен $Справочник.ЗакрепДокЗа]
        |    ,0 as Маркер
        |FROM
        |    _1SJourn as Жур (NOLOCK)
        |LEFT JOIN
        |    $Документ.ПриходнаяНал as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
        |    AND ($ДокП.Склад = :ОснСклад)
        |";
        
        // указан клиент
        Если ВыбКлиент.Выбран()=1 Тогда              
            ТекстЗапроса = ТекстЗапроса + " AND ($ДокП.Клиент = :ВыбКлиент)";  
            Источник.УстановитьТекстовыйПараметр("ВыбКлиент", ВыбКлиент);  
        КонецЕсли;
        
        ТекстЗапроса = ТекстЗапроса + "        
        |WHERE
        |    Жур.IDDocDef = $ВидДокумента.ПриходнаяНал
        //|    AND Жур.Closed & 1 = 1
        |";
        
        Источник.УстановитьТекстовыйПараметр("ОснСклад", Константа.ОснСклад);  
        
        // указан период
        Если (НачДата<>"") и (КонДата<>"") Тогда
            ТекстЗапроса = ТекстЗапроса + " AND (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)";  
            Источник.УстановитьТекстовыйПараметр("НачДата", НачДата);  
            Источник.УстановитьТекстовыйПараметр("КонДата", КонДата);  
        КонецЕсли;    
        
        ПодзапросОтбораПоСкладам = "
        //|    AND EXISTS
        |    AND Жур.IDDoc IN
        |        (
        |        SELECT
        |            ДокПСтр.IDDoc
        |        FROM
        |            $ДокументСтроки.ПриходнаяНал as ДокПСтр (NOLOCK)
        |          INNER JOIN
        |            $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокПСтр.Товар
        |            AND $СпрТов.СкладТ IN (:СписСкладов)
        |        WHERE
        |            ДокПСтр.IDDoc = Жур.IDDoc
        |        )
        |";
                                          
        // указан склад            
        //Если РазмерСпискаСклад>0 Тогда      
        //    ТекстЗапроса    = ТекстЗапроса + "AND $СпрТов.СкладТ IN (:СписСкладов)";  
        //    Запрос.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр);  
        //КонецЕсли;

        // указан склад
        РазмерСпискаСклад = СписВыбСклад.РазмерСписка();
        Если СписВыбСклад.РазмерСписка()>0 Тогда    
            ТекстЗапроса    = ТекстЗапроса + ПодзапросОтбораПоСкладам;  
            СписВыбСкладСтр = "";
            
            Для ъ=1 По РазмерСпискаСклад Цикл
                СписВыбСкладСтр = СписВыбСкладСтр+МД.ЗначениеВСтрокуБД(СписВыбСклад.ПолучитьЗначение(ъ))+?(ъ<РазмерСпискаСклад,"','","");
            КонецЦикла;
            
            Источник.УстановитьТекстовыйПараметр("СписСкладов", СписВыбСкладСтр);  
        КонецЕсли;
        
        Источник.УстТекстЗапроса(ТекстЗапроса);
        
        Источник.УстИДПоле("Док");
        //Источник.УстКлючПорядка("Док");
        Источник.УстКлючПорядка("ПозДок");
88 monsterZE
 
13.01.14
17:43
параллелилизм = 0
89 ADirks
 
13.01.14
17:44
(88) попробуй в 1 выставить

exec sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
sp_configure 'max degree of parallelism', 1
RECONFIGURE WITH OVERRIDE
exec sp_configure 'max degree of parallelism'
90 monsterZE
 
13.01.14
17:57
(89) ок, но уже завтра
я в студии мышковозюканьем выставляю =)
91 monsterZE
 
14.01.14
10:10
итак, параллелилизм тут не при чем. =)
92 monsterZE
 
14.01.14
10:12
можно видео на тф записать.. мож по нему чего понятнее будет?
93 trad
 
14.01.14
10:19
Покажи все таки отладочный запрос с exists.
Интересно почему из-за него циклится.
Точнее понятно, что циклится из-за неуникальности КП, но почему возникает эта неуникальность непонятно.
94 monsterZE
 
14.01.14
10:21
(93) я могу тока его, если на тф записать =)
ибо он циклится и 1с падает.
в тяжелых запросах в студии его нет
95 trad
 
14.01.14
10:55
а не в тяжелых? фильтры же другие есть
96 monsterZE
 
14.01.14
11:10
(95) чет ковырял трассировки в профайлере - не ловит ничего =(
97 monsterZE
 
14.01.14
11:13
..нашел себя по пиду =) не туда номер подставлял
98 monsterZE
 
14.01.14
11:14
от периода похоже не зависит..
сразу ставлю два месяца - норм
три месяца - норм
пару дней - каюк =)
99 monsterZE
 
14.01.14
11:16
последние запросы из профайлера от не последних ничем не отличаются
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
dbo.formatTime(SUBSTRING(Жур.Date_Time_IDDoc,9,6),':') as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
    AND (ДокП.sp216 = '     2   ')
where Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN '20131201' AND '20140114Z')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN ('     5   ')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        )
order by Жур.Date_Time_IDDoc desc
100 monsterZE
 
14.01.14
11:20
на маленьких периодах не заметно.. можно долго перебирать
а на больших - как будто буфер какой-то переполняется =\
101 monsterZE
 
14.01.14
11:44
в профайлере не все смотрю - пакеты не включил
ща еще раз
102 monsterZE
 
14.01.14
12:21
вобщем вот это последние повторяющиеся запросы:
exec sp_executesql N'
select
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
    AND (ДокП.sp216 = ''     2   '')
where (Жур.Date_Time_IDDoc = @OKParam_0) and (Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN ''20131001'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
',N'@OKParam_0 char(23)','2013122679VQ5C  Y3DY   '
----
exec sp_executesql N'
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
    AND (ДокП.sp216 = ''     2   '')
where (Жур.Date_Time_IDDoc > @OKParam_0) and (Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN ''20131001'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc
',N'@OKParam_0 char(23)','2013122679VQ5C  Y3DY   '
103 trad
 
14.01.14
12:51
LEFT JOIN dh214 замени на INNER JOIN dh214
либо условие
AND (ДокП.sp216 = ''     2   '')
перенеси в where
104 trad
 
14.01.14
12:52
иначе Жур.IDDoc as Док, может быт null
105 monsterZE
 
14.01.14
13:01
(104) - ага, уже сделал.
а то лезли доки с не основного склада
106 Ёпрст
 
14.01.14
14:46
откуда там )) в конце ?
107 monsterZE
 
14.01.14
15:13
(106) - хороший вопрос
108 monsterZE
 
14.01.14
15:17
вот тут она должна быть

where (Жур.IDDocDef = 214
AND (Жур.Date_Time_IDDoc BETWEEN ''20140114'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        )) and (Жур.IDDoc = @IDFieldParam)
order by Жур.Date_Time_IDDoc
109 monsterZE
 
14.01.14
15:23
чета как-то странно оно условия выстраивает
110 monsterZE
 
14.01.14
15:30
оно собирает все мои условия в скобки.. видимо иногда что-то идет не так =)
111 monsterZE
 
14.01.14
15:35
да нет.. может глюк какой, сейчас немного условия переделал - с екзист все равно валится

exec sp_executesql N'
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc
',N'@OKParam_0 char(23)','201312269Q1DOW  Y438   '
112 monsterZE
 
14.01.14
15:36
в 102 все правильно
вот открывающая скобка
where (Жур.Date_Time_IDDoc = @OKParam_0) and (Жур.IDDocDef = 214
113 trad
 
14.01.14
15:45
(106)
(Жур.IDDocDef = 214
...
AND EXISTS
        (
...
        ))
114 monsterZE
 
14.01.14
15:56
в профайлере

exec sp_executesql N'
select top 1
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        )) and (Жур.IDDoc = @IDFieldParam)
order by Жур.Date_Time_IDDoc
',N'@IDFieldParam char(9)','  YJBL   '
-
exec sp_executesql N'
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc
',N'@OKParam_0 char(23)','201401147ZKD6O  YJBL   '
-
exec sp_executesql N'
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc < @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc desc
',N'@OKParam_0 char(23)','201401148IFT28  YJHG   '
-
exec sp_executesql N'
select
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc = @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
',N'@OKParam_0 char(23)','201312269Q1DOW  Y438   '
-
exec sp_executesql N'
select top 20
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc > @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
order by Жур.Date_Time_IDDoc
',N'@OKParam_0 char(23)','201312269Q1DOW  Y438   '
-
exec sp_executesql N'
select
Жур.Date_Time_IDDoc as ПозДок,
Жур.IDDoc as Док,
0 as Маркер,
(Жур.Closed & 1 - Жур.ISMARK) as Статус,
left(Жур.Date_Time_IDDoc, 8) as ДатаДок,
0 as ВремяДок,
ДокП.sp226 as ПризнакНакладной,
Жур.DocNo as НомерДок,
ДокП.sp217 as Клиент,
CAST(ДокП.sp1008 as VarChar(100)) as Основание,
ДокП.sp1447 as Закреплен
from _1SJourn as Жур (NOLOCK)
LEFT JOIN
    dh214 as ДокП (NOLOCK) ON ДокП.IDDoc = Жур.IDDoc
where (Жур.Date_Time_IDDoc = @OKParam_0) and ((Жур.IDDocDef = 214)
    AND (ДокП.sp216 = ''     2   '')
AND (Жур.Date_Time_IDDoc BETWEEN ''20131101'' AND ''20140114Z'')
    AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        ))
',N'@OKParam_0 char(23)','201312269Q1DOW  Y438   '

и погнал
115 trad
 
14.01.14
16:11
заколдованное какое-то ТП

проверь это

select date_time_iddoc, count(*)
from _1sjourn (nolock)
group by date_time_iddoc
having count(*) > 1

select iddoc, count(*)
from dh214 (nolock)
group by iddoc
having count(*) > 1

чем черт не шутит
116 trad
 
14.01.14
16:12
и еще, версия 1c++ не сильно древняя?
117 monsterZE
 
14.01.14
16:15
кста, это проявляется только, если запрос используется в ТП
т.е., если отдельно запускать - с екзист работает беспроблем
118 monsterZE
 
14.01.14
16:16
(116) 3.2.3.1
119 Ёпрст
 
14.01.14
16:16
(118) вот на этой пробуй
http://www.1cpp.ru/forumfiles/Attachments/icpp-3-2-4-1.rar
120 Ёпрст
 
14.01.14
16:17
там ТП точно правили
121 monsterZE
 
14.01.14
16:24
(119) ок, попробую эту версию.. но ток в конце раб-дня
122 monsterZE
 
15.01.14
10:09
проверил на новой версии - все ок!
и работает быстрее.. заметно на глаз =)
123 monsterZE
 
15.01.14
10:10
сегодня обновлю на рабочей базе, посмотрю как будут себя вести остальные отчеты
124 monsterZE
 
15.01.14
10:13
мля, поторопился - без отбора по складу проверял %-)
125 trad
 
15.01.14
10:17
(124) т.е. проблема проявляется при наличии условия AND (ДокП.sp216 = ''     2   '') ?
126 monsterZE
 
15.01.14
10:25
(125) не не не
sp216 - это просто основной склад товара
с которого ведется торговля
проявляется, когда к основному запросу добавляется подзапрос
причем с использованием екзистс
127 monsterZE
 
15.01.14
10:25
проверил с новой версией - тоже самое
128 monsterZE
 
15.01.14
10:26
когда добавляется вот этот кусочек

AND EXISTS
        (
        SELECT
            ДокПСтр.IDDoc
        FROM
            dt214 as ДокПСтр (NOLOCK)
          INNER JOIN
            sc33 as СпрТов (NOLOCK) ON СпрТов.ID = ДокПСтр.sp227
            AND СпрТов.sp1181 IN (''     5   '')
        WHERE
            ДокПСтр.IDDoc = Жур.IDDoc
        )
129 monsterZE
 
15.01.14
10:31
(125) схема такая - торгуют с одного склада, на котором лежат остатки в 1с
но физически товар лежит на разных удаленных складах
документы выписываются без деления по складам,
а складских работников интересует именно ихний товар
130 trad
 
15.01.14
11:10
повторил в точности твой запрос, поменяв идентификаторы метаданных на свои - все отлично крутится.
можешь проверить http://rghost.ru/51663691
131 monsterZE
 
15.01.14
12:02
(130) я ща заюзаю по твоему примеру, но! ты пропустил - у меня тоже запрос выполняется. н-ное количество раз и при очередном обновлении - циклится. т.е. 3 запроса проходят нормально, на 4м завал.
132 monsterZE
 
15.01.14
13:03
..ну что, после часовых поползновений:
екзистс - работает существенно медленние
это как-то связано со столбиком картинок (иконки статуса)
133 monsterZE
 
15.01.14
13:14
вот мое ПриВыводеСтроки:

Процедура ТППриВыводеСтроки(ТП, ОформлениеСтроки, ДанныеСтроки, ТипРегиона)
                      
    Если ТипРегиона = 3 Тогда
        ОбъектЯчейка = ОформлениеСтроки.Ячейки.Получить("Статус");
        ТекДанные    = ДанныеСтроки.Получить("Статус");    
        Если ТекДанные = -1 Тогда
            ТекДанные  = 2;
        КонецЕсли;    
        ОбъектЯчейка.ОтображатьТекст    = 0 ;
        ОбъектЯчейка.ОтображатьКартинку = 1 ;
        ОбъектЯчейка.ИндексКартинки     = ТекДанные;
    КонецЕсли;
    
КонецПроцедуры
134 monsterZE
 
15.01.14
13:31
валится, даже если вот так только оставляю:

    Если ТипРегиона = 3 Тогда
        ОбъектЯчейка = ОформлениеСтроки.Ячейки.Получить("Статус");
    КонецЕсли;
135 monsterZE
 
15.01.14
13:33
даже если просто проверку на тип региона оставить.. пустую
136 monsterZE
 
15.01.14
21:58
trad, попробуй из интереса добавить
и погонять на больших периодах 1-2-3 мес

Процедура ТППриВыводеСтроки(ТП, ОформлениеСтроки, ДанныеСтроки, ТипРегиона)
а=1;
КонецПроцедуры
137 trad
 
16.01.14
09:00
попробовал - все ОК
138 trad
 
16.01.14
09:02
для некоторого ускорения можно еще такую конструкцию добавить
... as СпрТов (NOLOCK index=idd) ON ...
и обязательно отключить параллелелизм
139 monsterZE
 
18.01.14
10:21
(138) ап, для размышления =)
добавляю index=idd
и начинает также падать с Жур.IDDoc IN
140 monsterZE
 
18.01.14
10:26
мож у меня чего не так с индексами?
каждую ночь делается:
-проверка целостности
-реорганизация индекса
-обновление статистики
средствами скл.
141 monsterZE
 
18.01.14
10:32
к (139) но как-то реже что-ли падает.. как-то нет четкой взаимосвязи =(
142 monsterZE
 
18.01.14
10:48
я хз короче.. =) екзистс с индекс идд
падает реже. работает быстрее.
обновил 1с++
отключил параллелизм
заметил что как-то кэширование что-ли "заработало" =)
делаешь одинаковые запросы - повторные выполняются почти моментально.