Подскажите, почему все зависает из-за такого запроса
Здравствуйте, сделал внешний отчет в СКД, добавил, открыл и все зависло. Произошло это после того, как я изменил схему объединения таблиц. Пока делал через ЛЕВОЕ СОЕДИНЕНИЕ, не зависало, потом решил, что оно мне не нужно и достаточно ВНУТРЕННЕГО. Условия соединения остались теми же. Подскажите по какой причине зависает 1С из-за моего запроса? Что за зацикливание я делаю? Не могу сам понять.
ВЫБРАТЬ
ОбъектыЭксплуатации.Наименование КАК Наименование,
ОбъектыЭксплуатации.ЗаводскойНомер КАК ЗаводскойНомер,
ОбъектыЭксплуатации.СерийныйНомер КАК СерийныйНомер,
ОбъектыЭксплуатации.Статус КАК Статус,
ОбъектыЭксплуатации.Родитель.Наименование КАК РодительНаименование,
ОбъектыЭксплуатации.Ссылка КАК Ссылка,
РегистрацияДефекта.ОбъектЭксплуатации.Ссылка КАК ОбъектЭксплуатацииСсылка,
РегистрацияДефекта.Дата КАК Дата,
РегистрацияДефекта.КраткоеОписаниеДефекта КАК КраткоеОписаниеДефекта,
РегистрацияДефекта.ОписаниеДефекта КАК ОписаниеДефекта,
РегистрацияДефекта.Решение КАК Решение,
ЗаказНаРемонт.ОбъектЭксплуатации.Ссылка КАК ОбъектЭксплуатацииСсылка1,
ЗаказНаРемонт.МатериалыИРаботы.(
Номенклатура.Наименование КАК НоменклатураНаименование
) КАК МатериалыИРаботы,
ОбъектыЭксплуатации.ЭксплуатирующееПодразделение.Наименование КАК ЭксплуатирующееПодразделениеНаименование,
ОбъектыЭксплуатации.Расположение КАК Расположение
ИЗ
Документ.РегистрацияДефекта КАК РегистрацияДефекта,
Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации,
Документ.ЗаказНаРемонт КАК ЗаказНаРемонт
ГДЕ
ОбъектыЭксплуатации.Родитель.Наименование = "Источники БП" И
РегистрацияДефекта.ОбъектЭксплуатации.Ссылка = ОбъектыЭксплуатации.Ссылка И
ЗаказНаРемонт.ОбъектЭксплуатации.Ссылка = ОбъектыЭксплуатации.Ссылка
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
попробуйте такой вариант:
PS. канешь условие по строке через точку это не хорошо, но соединения я более менее обозначил.
попробуйте такой вариант:
ВЫБРАТЬ
ОбъектыЭксплуатации.Ссылка КАК Ссылка,
ОбъектыЭксплуатации.Наименование КАК Наименование,
ОбъектыЭксплуатации.ЗаводскойНомер КАК ЗаводскойНомер,
ОбъектыЭксплуатации.СерийныйНомер КАК СерийныйНомер,
ОбъектыЭксплуатации.Статус КАК Статус,
ОбъектыЭксплуатации.Родитель КАК Родитель,
ОбъектыЭксплуатации.ЭксплуатирующееПодразделение КАК ЭксплуатирующееПодразделениеНаименование,
ОбъектыЭксплуатации.Расположение КАК Расположение,
РегистрацияДефекта.Ссылка Как РегистрацияДефекта,
РегистрацияДефекта.Дата КАК Дата,
РегистрацияДефекта.КраткоеОписаниеДефекта КАК КраткоеОписаниеДефекта,
РегистрацияДефекта.ОписаниеДефекта КАК ОписаниеДефекта,
РегистрацияДефекта.Решение КАК Решение,
МатериалыИРаботы.Номенклатура КАК НоменклатураНаименование,
ИЗ
Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
соединение Документ.РегистрацияДефекта КАК РегистрацияДефекта
по ОбъектыЭксплуатации.ссылка = РегистрацияДефекта.ОбъектЭксплуатации
соединение Документ.ЗаказНаРемонт КАК ЗаказНаРемонт
соединение Документ.ЗаказНаРемонт.МатериалыИРаботы как МатериалыИРаботы
по ЗаказНаРемонт.ссылка = МатериалыИРаботы.ссылка
по ОбъектыЭксплуатации.ссылка = ЗаказНаРемонт.ОбъектЭксплуатаци
ГДЕ
ОбъектыЭксплуатации.Родитель.Наименование = "Источники БП"
ПоказатьPS. канешь условие по строке через точку это не хорошо, но соединения я более менее обозначил.
(6) главная проблема в отсутствии соединения.
т.е. у вас система берет 3 таблицы (100к записей, 100к записей и 100к записей) - получает произведение = 10^15 записей и это все в оперативной памяти.
и длаее из этой абстракции что-то выковыривает. естественно что у вас не хватает оперативки.
т.е. у вас система берет 3 таблицы (100к записей, 100к записей и 100к записей) - получает произведение = 10^15 записей и это все в оперативной памяти.
и длаее из этой абстракции что-то выковыривает. естественно что у вас не хватает оперативки.
(9) Нет, когда мы добавляем условие в ГДЕ, это мы накладываем отбор на результат соединения, а соединение через ИСТИНА по факту происходит. Т.е. сначала всё со всем соединилось, и только потом отборы.
Внутреннее соединение предполагает наличие условия соединения в секции ПО, и да, делается это через ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
Внутреннее соединение предполагает наличие условия соединения в секции ПО, и да, делается это через ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
У вас тотальное непонимание того, как работают запросы. Разница между условиями отбора и условиями соединения - это самая база. Рекомендую книжку Хрусталевой по языку запросов, в бумажном виде она стоит рубелей 300, в электронном подешевле, на итс вообще бесплатно при наличии туда доступа.
(16)
Я же всеже за то, чтобы изучать сам язык запросов TSQL, а там уже потом можно и Хрусталеву почитать.
У вас тотальное непонимание того, как работают запросы. Разница между условиями отбора и условиями соединения - это самая база. Рекомендую книжку Хрусталевой по языку запросов, в бумажном виде она стоит рубелей 300, в электронном подешевле, на итс вообще бесплатно при наличии туда доступа.
Я же всеже за то, чтобы изучать сам язык запросов TSQL, а там уже потом можно и Хрусталеву почитать.
1. Для начала перепишите запрос через Левое Соединение.
2. Использовать в запросе выборку из ТЗ документа - это крайне дурной тон и говорит о не правильной архитектуре Конфигурации и базы. Переделайте архитектуру, так чтобы можно было присоединять Регистры Сведений, Накоплений итп., которые дублируют необходимые поля первичного документа (включая таблицы)
3. Если вам необходимо искать пересечения то используйте Левое Соединение с Условием Где таблица.значение IS NOT NULL вместо Внутреннего Соединения.
2. Использовать в запросе выборку из ТЗ документа - это крайне дурной тон и говорит о не правильной архитектуре Конфигурации и базы. Переделайте архитектуру, так чтобы можно было присоединять Регистры Сведений, Накоплений итп., которые дублируют необходимые поля первичного документа (включая таблицы)
3. Если вам необходимо искать пересечения то используйте Левое Соединение с Условием Где таблица.значение IS NOT NULL вместо Внутреннего Соединения.
(19) Я начинающий, можно сказать первый раз вижу 1с в сравнении с вами, даже курсов никаких не проходил, в программировании немного разбираюсь, вот и занимаюсь такими доработками на работе. Учусь так сказать. И кстати, это базовая конфигурация.
А чем ЛЕВОЕ СОЕДИНЕНИЕ хуже ВНУТРЕННЕГО?
А чем ЛЕВОЕ СОЕДИНЕНИЕ хуже ВНУТРЕННЕГО?
(26)
даже курсов никаких не проходил, в программировании немного разбираюсь
Заметно.
занимаюсь такими доработками на работе. Учусь так сказать.
Уверен, что работа - это место для учёбы?
И кстати, это базовая конфигурация.
О чём это нам должно сказать? О том, что для работы с ней достаточно базового уровня программирования? Так я тебя огорчу...
А чем ЛЕВОЕ СОЕДИНЕНИЕ хуже ВНУТРЕННЕГО?
Примерно тем же самым, чем переднее колесо хуже заднего.
запрос с документов - это вообще издевательство над машиной.
Документы не проводятся ни в какие регистры что ли? Неужели данные с последних нельзя взять?
Это как вместо иголки в шкатулке вы ищете ту же иголку...но в стоге сена.. нет слов
Документы не проводятся ни в какие регистры что ли? Неужели данные с последних нельзя взять?
Это как вместо иголки в шкатулке вы ищете ту же иголку...но в стоге сена.. нет слов
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот