Страница 1 из 1

left join в запросе в Create view

Добавлено: 23 авг 2019, 13:15
Руслан
Стоит задача сделать запрос по тем документам из BaseDoc, nrec которых содержится во временной таблице ( к примеру tPickDoc)
Если в секлете написать условие tPickDoc.cRec == BaseDoc.NRec, то вернет только последнюю запись из tPickDoc. Что и логично.
Если же написать в обратном порядке BaseDoc.NRec == tPickDoc.cRec, то выдаётся информация по документу которого вообще нет в выборке.

Как правильнее сформирвоать запрос чтоб обрабатывались все записи из tPickDoc?

Проходка через цикл невозможна, так как после ваыполнения запроса, проводится ряд операций со спецификацией документа и нужно сначала получить данные из спецификаций всех выбранных документов и уже их обрабатывать.
Ссылка на исходный код: pastebin.com/gEragb38

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 13:20
Den
Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 14:10
Руслан
Den писал(а):Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)
Скорее так и есть, но в этом случае галактика бесконечно выполняет задачу, а отладчик подписает. Я сделал вывод message на этапе добавления значений во временной таблицу. До этого этапа не доходит.

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 14:21
Den
basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 14:41
Руслан
Den писал(а):basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
Забыл указать в сообщении что для теста бралась одна ДО. Всего их не больше 5 будет в этой в ременной таблице.
По сути весь принцип работы приложения как вы описали выше. Работа идёт именно с временными таблицами. Проблема только выгрухить в них спецификацию из нескольких ДО

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 14:45
Den
Главное кнч сколько их в basedoc

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 14:50
Руслан
Den писал(а):Главное кнч сколько их в basedoc
До этого данное приложение работало с одним ДО (ccBaseDoc = BaseDoc.NRec). Выгружалось мгновенно.
Сейчас просто вместо nrec ДО подкидываю таблицу с nrec'ами.

Просто не хочется из-за этого нюанса переписывать огромное приложение целиком.

Re: left join в запросе в Create view

Добавлено: 23 авг 2019, 15:16
Den
Судя беглым взглядом по коду, это просто отчет по большому счету. Тогда да, нужно обходить все с tPickDoc.cRec == BaseDoc.NRec
И поправить в коде кнч где нужно что обходим все с узла tPickDoc (например, в методе FillHeader, как сейчас там начинается If GetFirst BaseDoc = tsOk , то кнч только 1 ДО будет учитываться)