Имя: Пароль:
1C
 
слабое место запроса
,
0 Dom26
 
17.04.19
10:35
долго работает запрос, проблема в том что достаю три вида документа да еще и из двух регистров

Запрос = Новый Запрос;                      
    Запрос.Текст = "ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект КАК Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ПОМЕСТИТЬ Статусы
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.бит_ПроектДоговора
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                   |    ВложенныйЗапрос1.Заявка.Дата КАК ДатаЗаявки,
                   |    ВложенныйЗапрос1.Заявка.Номер КАК НомерДокумента,
                   |    ВложенныйЗапрос1.Заявка КАК Документ,
                   |    ВложенныйЗапрос1.Заявка.Организация КАК Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент КАК Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.бит_ПроектДоговора) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ПроектДоговора)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.бит_ПроектДоговора) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ПроектДоговора)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств)))
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ДатаЗаявки";
1 Dom26
 
17.04.19
10:36
рабоет долго, , где тут могут быть слабые места?
2 Dom26
 
17.04.19
10:41
даже не получается из трех регистров
3 НЕА123
 
17.04.19
10:41
а зачем в одну ВТ все?
4 Широкий
 
17.04.19
10:41
СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
И
ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода

Терпения не хватило прописать Выразить?
5 Dom26
 
17.04.19
10:44
(4) блин точно, ща посомтрим
6 Мимохожий Однако
 
17.04.19
10:44
Замерь запросы по отдельности. Оптимизируй, а потом объединяй. Или измени план запроса на другой
7 Мимохожий Однако
 
17.04.19
10:47
Можно сначала получить все документы, а потом уже обращаться к таблице истории изменения статусов
8 Широкий
 
17.04.19
10:48
Какой нафиг смысл 3 объединений если у тебя все равно индекс не юзается..
Далай одну выборку (я про самое первое)
9 Широкий
 
17.04.19
10:50
+6 и да.. сначала получи доки за период..
Потом сделай запро к Регистру сведений с фильтром по выбранным докам - и потом все соедини
10 Dom26
 
17.04.19
10:56
(8) а разве не обьединения не лучше чем или тут?
11 Жан Пердежон
 
17.04.19
11:05
(0) кстати, если тебе нужен текущий статус, а значение из истории на определенный момент - лучше использовать
РС.бит_СтатусыОбъектов
12 Широкий
 
17.04.19
11:08
(10) че лучше то?
СрезПоследних само по себе тяжелое.. а ты его три раза делаешь. Причем поиск не по индекус идет
13 Dom26
 
17.04.19
11:17
(12) а еще такой вопросик надо отдельно ставить условие на тип дока если есть выразить ().дата между...?
14 toypaul
 
гуру
17.04.19
11:18
заменить ВЫРАЗИТЬ(Ссылка) на соединение с таблицей нужного документа и сделать отбор по дате из этой таблицы
15 craxx
 
17.04.19
11:18
И вложенные запросы я бы как можно меньше пользовал. Лучше еще одну ВТ
16 Dom26
 
17.04.19
11:44
(14) а разве в связи не надо тоже выразить тогда писать?
17 toypaul
 
гуру
17.04.19
11:53
(16) нет
18 Nyoko
 
17.04.19
12:11
(0)
Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот)))
Замени лучше

Заявка = Статусы.Объект и Статусы.Объект Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
19 Nyoko
 
17.04.19
12:11
Заявка = Статусы.Объект и Статусы.Объект ссылка Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
20 Широкий
 
17.04.19
12:12
(13) см 9  -у тебя список доков должен быть в фильтре
21 Glup0sti
 
17.04.19
12:37
Явная ошибка 3 раза срез последних. Нужно "... Объект В (ВЫБРАТЬ Ссылка ИЗ Документ.бит_ПроектДоговора ГДЕ Дата МЕЖДУ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка ИЗ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот ГДЕ Дата МЕЖДУ...) ".

Вложенный запрос вообще не нужен, соединяешь сразу СтоунДоступностьЗаявокВАрхиве  И Статусы. ВЫРАЗИТЬ в условии соединения беЗсмысленно

Возможно РАЗРЕШЕННЫЕ и на ВТ поставить.

Остальное только по плану запроса.
22 Dom26
 
17.04.19
16:05
(21) там же куча условий во ввложеных запросах, разве сначало он не прведет связь и только потомне наложит условия?
23 Euguln
 
17.04.19
16:11
1. Все обращения к БД по возможности поместить в ВТ.
2. ВТ проиндексировать.
3. Условия отбора ВТ регистра засунуть в поле и проиндексировать.
24 Маленький Вопросик
 
17.04.19
17:21
Избавься от конструкций

ВложенныйЗапрос1.Заявка.Дата,

Как ребята сказали проиндексируй ВТ.
25 Simod
 
18.04.19
08:04
Трэш какой-то...

Использование "... ССЫЛКА ..." позволяет проверить тип ОБЪЕКТА без соединения с таблицей объекта, а ВЫРАЗИТЬ(...) создает соединение для проверки вхождения ДАТА в диапазон. Поэтому, конструкции типа:

ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода
...
И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот

идентичны внутреннему соединению

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот КАК ЗаявкаНаСогласованиеАктаВыполненныхРабот
    ПО СтоунДоступностьЗаявок.Заявка = ЗаявкаНаСогласованиеАктаВыполненныхРабот.Ссылка
    И ЗаявкаНаСогласованиеАктаВыполненныхРабот.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Как сказали ранее, для среза последних следует собрать ВТ объединением трех типов документов и проиндексировать.
26 xXeNoNx
 
18.04.19
09:08
А расскажите мне что значит:

СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
27 Darych
 
18.04.19
09:11
(25) ну индексация... померить так и так надо)
28 xXeNoNx
 
18.04.19
09:13
А шо, нельзя сначала доки получить, а потом сделать отбор срезе?
29 xXeNoNx
 
18.04.19
09:19
(23) лишь бы все индексировать...., тут и помимо индексов косяков дохрена
30 Glup0sti
 
18.04.19
09:53
(22) если хочется, некоторые условия можно в условия соединения, оптимизатор разберется в порядке применения ограничений
31 luter-89
 
18.04.19
09:56
(23) Лишь бы проиндексировать.
Там где надо и там где не надо...
32 Simod
 
18.04.19
10:14
Да, если собрать таблицу по трем типам документов, то индексация может ничего не дать, т.к. поле будет составного типа. Но попробовать стоит.
33 Euguln
 
18.04.19
11:38
(29) см п 1.
Основная теорема систематики: Новые системы плодят новые проблемы.