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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

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

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

Проходка через цикл невозможна, так как после ваыполнения запроса, проводится ряд операций со спецификацией документа и нужно сначала получить данные из спецификаций всех выбранных документов и уже их обрабатывать.
Ссылка на исходный код: pastebin.com/gEragb38
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Den писал(а):Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)
Скорее так и есть, но в этом случае галактика бесконечно выполняет задачу, а отладчик подписает. Я сделал вывод message на этапе добавления значений во временной таблицу. До этого этапа не доходит.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Den писал(а):basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
Забыл указать в сообщении что для теста бралась одна ДО. Всего их не больше 5 будет в этой в ременной таблице.
По сути весь принцип работы приложения как вы описали выше. Работа идёт именно с временными таблицами. Проблема только выгрухить в них спецификацию из нескольких ДО
Последний раз редактировалось Руслан 23 авг 2019, 14:45, всего редактировалось 1 раз.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

Главное кнч сколько их в basedoc
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

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

Просто не хочется из-за этого нюанса переписывать огромное приложение целиком.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

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