Подскажите, почему все зависает из-за такого запроса

1. ChapaevAB 02.08.24 08:38 Сейчас в теме
Здравствуйте, сделал внешний отчет в СКД, добавил, открыл и все зависло. Произошло это после того, как я изменил схему объединения таблиц. Пока делал через ЛЕВОЕ СОЕДИНЕНИЕ, не зависало, потом решил, что оно мне не нужно и достаточно ВНУТРЕННЕГО. Условия соединения остались теми же. Подскажите по какой причине зависает 1С из-за моего запроса? Что за зацикливание я делаю? Не могу сам понять.

ВЫБРАТЬ
	ОбъектыЭксплуатации.Наименование КАК Наименование,
	ОбъектыЭксплуатации.ЗаводскойНомер КАК ЗаводскойНомер,
	ОбъектыЭксплуатации.СерийныйНомер КАК СерийныйНомер,
	ОбъектыЭксплуатации.Статус КАК Статус,
	ОбъектыЭксплуатации.Родитель.Наименование КАК РодительНаименование,
	ОбъектыЭксплуатации.Ссылка КАК Ссылка,
	РегистрацияДефекта.ОбъектЭксплуатации.Ссылка КАК ОбъектЭксплуатацииСсылка,
	РегистрацияДефекта.Дата КАК Дата,
	РегистрацияДефекта.КраткоеОписаниеДефекта КАК КраткоеОписаниеДефекта,
	РегистрацияДефекта.ОписаниеДефекта КАК ОписаниеДефекта,
	РегистрацияДефекта.Решение КАК Решение,
	ЗаказНаРемонт.ОбъектЭксплуатации.Ссылка КАК ОбъектЭксплуатацииСсылка1,
	ЗаказНаРемонт.МатериалыИРаботы.(
		Номенклатура.Наименование КАК НоменклатураНаименование
	) КАК МатериалыИРаботы,
	ОбъектыЭксплуатации.ЭксплуатирующееПодразделение.Наименование КАК ЭксплуатирующееПодразделениеНаименование,
	ОбъектыЭксплуатации.Расположение КАК Расположение
ИЗ
	Документ.РегистрацияДефекта КАК РегистрацияДефекта,
	Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации,
	Документ.ЗаказНаРемонт КАК ЗаказНаРемонт
ГДЕ
	ОбъектыЭксплуатации.Родитель.Наименование = "Источники БП" И
	РегистрацияДефекта.ОбъектЭксплуатации.Ссылка = ОбъектыЭксплуатации.Ссылка И
	ЗаказНаРемонт.ОбъектЭксплуатации.Ссылка = ОбъектыЭксплуатации.Ссылка
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. Anton_new01 02.08.24 09:26 Сейчас в теме
(1)
попробуйте такой вариант:
ВЫБРАТЬ
    ОбъектыЭксплуатации.Ссылка КАК Ссылка,
    ОбъектыЭксплуатации.Наименование КАК Наименование,
    ОбъектыЭксплуатации.ЗаводскойНомер КАК ЗаводскойНомер,
    ОбъектыЭксплуатации.СерийныйНомер КАК СерийныйНомер,
    ОбъектыЭксплуатации.Статус КАК Статус,
    ОбъектыЭксплуатации.Родитель КАК Родитель,
    ОбъектыЭксплуатации.ЭксплуатирующееПодразделение КАК ЭксплуатирующееПодразделениеНаименование,
    ОбъектыЭксплуатации.Расположение КАК Расположение,
    РегистрацияДефекта.Ссылка Как РегистрацияДефекта,
    РегистрацияДефекта.Дата КАК Дата,
    РегистрацияДефекта.КраткоеОписаниеДефекта КАК КраткоеОписаниеДефекта,
    РегистрацияДефекта.ОписаниеДефекта КАК ОписаниеДефекта,
    РегистрацияДефекта.Решение КАК Решение,
    МатериалыИРаботы.Номенклатура КАК НоменклатураНаименование,

ИЗ         
    Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
    соединение Документ.РегистрацияДефекта КАК РегистрацияДефекта
     по ОбъектыЭксплуатации.ссылка = РегистрацияДефекта.ОбъектЭксплуатации 
    соединение Документ.ЗаказНаРемонт КАК ЗаказНаРемонт
     соединение Документ.ЗаказНаРемонт.МатериалыИРаботы как МатериалыИРаботы
     по ЗаказНаРемонт.ссылка = МатериалыИРаботы.ссылка
по ОбъектыЭксплуатации.ссылка = ЗаказНаРемонт.ОбъектЭксплуатаци
ГДЕ
    ОбъектыЭксплуатации.Родитель.Наименование = "Источники БП" 
Показать


PS. канешь условие по строке через точку это не хорошо, но соединения я более менее обозначил.
ChapaevAB; +1 Ответить
17. ChapaevAB 02.08.24 10:14 Сейчас в теме
Спасибо, да суть я понял. Т.е. если в запросе есть табличная часть, то ее нужно соединять, как еще одну таблицу?
23. Anton_new01 02.08.24 11:13 Сейчас в теме
2. laperuz 47 02.08.24 08:40 Сейчас в теме
И где вы видите внутреннее?

У вас декартово произведение трёх таблиц
4. user2033930 02.08.24 08:41 Сейчас в теме
(2) ... там ещё и табличная часть.
6. ChapaevAB 02.08.24 08:53 Сейчас в теме
(4)
там ещё и табличная часть.

А что такого в том что табличная часть в запросе? Поясните пожалуйста, интересно.
7. user2033930 02.08.24 08:56 Сейчас в теме
(6) То, что в данном конкретном случае она тоже участвует в декартовом произведении.
8. Anton_new01 02.08.24 08:57 Сейчас в теме
(6) главная проблема в отсутствии соединения.
т.е. у вас система берет 3 таблицы (100к записей, 100к записей и 100к записей) - получает произведение = 10^15 записей и это все в оперативной памяти.
и длаее из этой абстракции что-то выковыривает. естественно что у вас не хватает оперативки.
ChapaevAB; +1 Ответить
12. ChapaevAB 02.08.24 09:07 Сейчас в теме
(8) Т.е. все-таки вопрос в оптимизации? Еще к тому же я делаю все это на локальном ПК. Но занятость ЦП всего 10% и памяти только 36%.
13. user2033930 02.08.24 09:08 Сейчас в теме
(12) Вопрос вообще не в оптимизации. Вопрос в понимании того, для чего вообще существуют запросы, и что соединение - краеугольный камень возможностей запросов, а не способ оптимизации.
14. Anton_new01 02.08.24 09:09 Сейчас в теме
(12) % загрузки процессора может быть ограничен админскими настройками...

это сложно назвать "оптимизацией". просто в корне не верный подход изначально.
9. ChapaevAB 02.08.24 09:04 Сейчас в теме
(2) Если не прав, поправьте. Я понимаю, что декартово (т.е. перекрестное соединение) это когда нет условия. Но, когда мы добавляем условие их соединения в разделе ГДЕ, то и получаем внутреннее или нужно писать зарезервированное слово ВНУТРЕННЕЕ СОЕДИНЕНИЕ?
10. laperuz 47 02.08.24 09:06 Сейчас в теме
(9) Нет, когда мы добавляем условие в ГДЕ, это мы накладываем отбор на результат соединения, а соединение через ИСТИНА по факту происходит. Т.е. сначала всё со всем соединилось, и только потом отборы.

Внутреннее соединение предполагает наличие условия соединения в секции ПО, и да, делается это через ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
ChapaevAB; +1 Ответить
11. Anton_new01 02.08.24 09:07 Сейчас в теме
(9)
конструкция "ГДЕ" - Это условия выбора из 10^15 записей.

а конструкция "соединение" - это условия по которым вы соединяете и получаете не 10^15 записей, а где-то 10^5. т.е. на десять порядков меньше!!!.
и далее к ним уже применяете конструкцию "где".
3. user2033930 02.08.24 08:40 Сейчас в теме
5. BOFFKA 02.08.24 08:43 Сейчас в теме
16. GeraltSnow 175 02.08.24 09:28 Сейчас в теме
У вас тотальное непонимание того, как работают запросы. Разница между условиями отбора и условиями соединения - это самая база. Рекомендую книжку Хрусталевой по языку запросов, в бумажном виде она стоит рубелей 300, в электронном подешевле, на итс вообще бесплатно при наличии туда доступа.
DJ_Codebase; Zevzm; user2033930; homer_; nomad_irk; Sashares; +6 Ответить
21. Indgo 414 02.08.24 10:48 Сейчас в теме
(16)
У вас тотальное непонимание того, как работают запросы. Разница между условиями отбора и условиями соединения - это самая база. Рекомендую книжку Хрусталевой по языку запросов, в бумажном виде она стоит рубелей 300, в электронном подешевле, на итс вообще бесплатно при наличии туда доступа.

Я же всеже за то, чтобы изучать сам язык запросов TSQL, а там уже потом можно и Хрусталеву почитать.
starjevschik; +1 Ответить
18. starjevschik 02.08.24 10:17 Сейчас в теме
Программиста гоните в шею. Он вас обманул, он не программист.
20. Indgo 414 02.08.24 10:47 Сейчас в теме
(18)
Программиста гоните в шею. Он вас обманул, он не программист.

Запрос же написал, значить программист ;-)
22. starjevschik 02.08.24 10:59 Сейчас в теме
(20) так это не он написал, а конструктор запроса. Он умеет тыкать кнопки на мышке, мышкокнопкотыкатель, наверное.
24. Indgo 414 02.08.24 11:24 Сейчас в теме
(22) Да конструктором запросов можно такого накликать потом 100 программистов не расколдует. ;-)
19. Indgo 414 02.08.24 10:43 Сейчас в теме
1. Для начала перепишите запрос через Левое Соединение.
2. Использовать в запросе выборку из ТЗ документа - это крайне дурной тон и говорит о не правильной архитектуре Конфигурации и базы. Переделайте архитектуру, так чтобы можно было присоединять Регистры Сведений, Накоплений итп., которые дублируют необходимые поля первичного документа (включая таблицы)
3. Если вам необходимо искать пересечения то используйте Левое Соединение с Условием Где таблица.значение IS NOT NULL вместо Внутреннего Соединения.
26. ChapaevAB 02.08.24 13:52 Сейчас в теме
(19) Я начинающий, можно сказать первый раз вижу 1с в сравнении с вами, даже курсов никаких не проходил, в программировании немного разбираюсь, вот и занимаюсь такими доработками на работе. Учусь так сказать. И кстати, это базовая конфигурация.

А чем ЛЕВОЕ СОЕДИНЕНИЕ хуже ВНУТРЕННЕГО?
27. user2033930 02.08.24 13:56 Сейчас в теме
(26)
даже курсов никаких не проходил, в программировании немного разбираюсь
Заметно.
занимаюсь такими доработками на работе. Учусь так сказать.
Уверен, что работа - это место для учёбы?
И кстати, это базовая конфигурация.
О чём это нам должно сказать? О том, что для работы с ней достаточно базового уровня программирования? Так я тебя огорчу...
А чем ЛЕВОЕ СОЕДИНЕНИЕ хуже ВНУТРЕННЕГО?
Примерно тем же самым, чем переднее колесо хуже заднего.
29. пользователь 02.08.24 14:07
Сообщение было скрыто модератором.
...
31. Zevzm 02.08.24 14:10 Сейчас в теме
(27) Не мешайте человеку "вытворять", именно такие люди никогда не оставят нас без работы.
user2033930; +1 Ответить
25. Bukaska 140 02.08.24 12:49 Сейчас в теме
запрос с документов - это вообще издевательство над машиной.
Документы не проводятся ни в какие регистры что ли? Неужели данные с последних нельзя взять?
Это как вместо иголки в шкатулке вы ищете ту же иголку...но в стоге сена.. нет слов
28. ChapaevAB 02.08.24 14:06 Сейчас в теме
Всем спасибо за помощь, помогли, начинает что-то получаться. Но еще есть вытекающие вопросы.
30. пользователь 02.08.24 14:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот