Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос
,
0 lapinio
 
16.08.12
12:12
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВнутренниеДокументы.Ссылка,
   ВнутренниеДокументы.ПометкаУдаления,
   ВнутренниеДокументы.ВидДокумента,
   ВнутренниеДокументы.ДатаСоздания,
   ВнутренниеДокументы.Ответственный
ИЗ
   Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ДоступПользователей.Пользователь КАК Пользователь,
           ДоступПользователей.Объект КАК Объект,
           ДоступПользователей.Автор КАК Автор,
           ДоступПользователей.ДатаОткрытияДоступа КАК ДатаОткрытияДоступа
       ИЗ
           РегистрСведений.ДоступПользователей КАК ДоступПользователей) КАК РегистрСведенийДоступПользователей
       ПО (ВЫБОР
               КОГДА &ВсеДокументы
                   ТОГДА ИСТИНА
               ИНАЧЕ ВнутренниеДокументы.Ссылка = РегистрСведенийДоступПользователей.Объект
                       И РегистрСведенийДоступПользователей.Пользователь = &Ответственный
           КОНЕЦ)
1 Alex375
 
16.08.12
12:14
1. убери "ВЫБОР" из условия объединения таблиц
2 Alex375
 
16.08.12
12:14
2. вместо подзапроса используй пакетный режим - может повысить производительность на SQL
3 lapinio
 
16.08.12
12:14
Выбор нужен для фильтра вывода документов
4 lapinio
 
16.08.12
12:15
Это в динамическом списке там нет виртуальных таблиц
5 Alex375
 
16.08.12
12:16
выбор в объединении ОЧЕНЬ сильно тормозит запрос. Это у тебя самое узкое место сейчас
6 vde69
 
16.08.12
12:16
вроде нормальный запрос, проверь индесы
7 vde69
 
16.08.12
12:17
кстати выбор можно заменить на

&ВсеДокументы
           
или

(ВнутренниеДокументы.Ссылка = РегистрСведенийДоступПользователей.Объект
                       И РегистрСведенийДоступПользователей.Пользователь = &Ответственный)

будет немного лучше
8 lapinio
 
16.08.12
12:19
проверял. Вроде индексированны. Но запрос долго отрабатывает при открытии формы. База крутится SQL. 5 мин открывается. Или не катит Все документы это кнопка которая видна админу а пользователи видят только свои документы
9 lapinio
 
16.08.12
12:23
или прокатило спасибо за подсказку а что еще можно
10 vde69
 
16.08.12
12:25
статистику обновить (через часок работы)
11 lapinio
 
16.08.12
12:26
ЧТо такое Статистика?
12 МихаилМ
 
16.08.12
12:28
такая конструкция "КОГДА &ВсеДокументы"

дурной тон программирования запросов

тк субд не сохраняет такие планы запроса. и стоиих каждый раз заново.

для postgreSQL это вообще катастрофа.

формируйте текст запроса динамически. либо сооздайте 2 формы.
13 lapinio
 
16.08.12
12:35
Форма должна быть одна. Смысл этого запроса такой.

1. Текущий пользователь должен видеть только свои документы или если дали доступ к этому документу
2.Админ должен видеть все документы
3. Данные сравниваются из регистра сведений не периодического если это тек поль и не админ.
4. ВсеДокументы это кнопка для отображнения всех док
14 МихаилМ
 
16.08.12
12:47
тогда передавайте два параметра

условие такое

И РегистрСведенийДоступПользователей.Пользователь >= &ОтветственныйМIN
И РегистрСведенийДоступПользователей.Пользователь < &ОтветственныйМАХ

 
в случае отбора  ОтветственныйМIN = ОтветственныйМАХ

с случае полного выбора ОтветственныйМIN = минимальное значение ссылки
ОтветственныйМАХ = максимальное
                       

или передавайте список, или вычисляте в временной таблице
15 lapinio
 
16.08.12
12:49
ВЫБРАТЬ
   Спр.Ссылка,
   Спр.ВидДокумента,
   Спр.ДатаСоздания,
   Спр.Ответственный,
   Спр.ПометкаУдаления
ИЗ
   (ВЫБРАТЬ
       ВнутренниеДокументы.Ссылка КАК Ссылка,
       ВнутренниеДокументы.ВидДокумента КАК ВидДокумента,
       ВнутренниеДокументы.ДатаСоздания КАК ДатаСоздания,
       ВнутренниеДокументы.Ответственный КАК Ответственный,
       ВнутренниеДокументы.ПометкаУдаления КАК ПометкаУдаления
   ИЗ
       Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы) КАК Спр
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ДоступПользователей.Пользователь КАК Пользователь,
           ДоступПользователей.Объект КАК Объект,
           ДоступПользователей.Автор КАК Автор,
           ДоступПользователей.ДатаОткрытияДоступа КАК ДатаОткрытияДоступа
       ИЗ
           РегистрСведений.ДоступПользователей КАК ДоступПользователей) КАК Регистр
       ПО Спр.Ссылка = Регистр.Объект
ГДЕ
   (&ВсеДокументы = ИСТИНА
           ИЛИ Спр.Ссылка = Регистр.Объект
               И Регистр.Пользователь = &Ответственный)
16 lapinio
 
16.08.12
12:50
Так быстро
17 acsent
 
16.08.12
12:50
попробуй напрямую присоединять таблицу
18 lapinio
 
16.08.12
12:53
Спасибо вам за помощь
19 lapinio
 
16.08.12
12:53
)))))
Основная теорема систематики: Новые системы плодят новые проблемы.