left join в запросе в Create view
Модераторы: m0p3e, edward_K, Модераторы
left join в запросе в Create view
Стоит задача сделать запрос по тем документам из BaseDoc, nrec которых содержится во временной таблице ( к примеру tPickDoc)
Если в секлете написать условие tPickDoc.cRec == BaseDoc.NRec, то вернет только последнюю запись из tPickDoc. Что и логично.
Если же написать в обратном порядке BaseDoc.NRec == tPickDoc.cRec, то выдаётся информация по документу которого вообще нет в выборке.
Как правильнее сформирвоать запрос чтоб обрабатывались все записи из tPickDoc?
Проходка через цикл невозможна, так как после ваыполнения запроса, проводится ряд операций со спецификацией документа и нужно сначала получить данные из спецификаций всех выбранных документов и уже их обрабатывать.
Ссылка на исходный код: pastebin.com/gEragb38
Если в секлете написать условие tPickDoc.cRec == BaseDoc.NRec, то вернет только последнюю запись из tPickDoc. Что и логично.
Если же написать в обратном порядке BaseDoc.NRec == tPickDoc.cRec, то выдаётся информация по документу которого вообще нет в выборке.
Как правильнее сформирвоать запрос чтоб обрабатывались все записи из tPickDoc?
Проходка через цикл невозможна, так как после ваыполнения запроса, проводится ряд операций со спецификацией документа и нужно сначала получить данные из спецификаций всех выбранных документов и уже их обрабатывать.
Ссылка на исходный код: pastebin.com/gEragb38
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: left join в запросе в Create view
Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)
Re: left join в запросе в Create view
Скорее так и есть, но в этом случае галактика бесконечно выполняет задачу, а отладчик подписает. Я сделал вывод message на этапе добавления значений во временной таблицу. До этого этапа не доходит.Den писал(а):Для описанной цели предназначен inner join (на диалекте атлантиса это BaseDoc.NRec /== tPickDoc.cRec)
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: left join в запросе в Create view
basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
Re: left join в запросе в Create view
Забыл указать в сообщении что для теста бралась одна ДО. Всего их не больше 5 будет в этой в ременной таблице.Den писал(а):basedoc-ов у Вас значит много.
выход кардинальный один чтобы быстрее работало - сливать нужную информацию по ДО ,при загрузке вашей разработки, во времянку.
И весь код строить "вокруг нее"
По сути весь принцип работы приложения как вы описали выше. Работа идёт именно с временными таблицами. Проблема только выгрухить в них спецификацию из нескольких ДО
Последний раз редактировалось Руслан 23 авг 2019, 14:45, всего редактировалось 1 раз.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: left join в запросе в Create view
Главное кнч сколько их в basedoc
Re: left join в запросе в Create view
До этого данное приложение работало с одним ДО (ccBaseDoc = BaseDoc.NRec). Выгружалось мгновенно.Den писал(а):Главное кнч сколько их в basedoc
Сейчас просто вместо nrec ДО подкидываю таблицу с nrec'ами.
Просто не хочется из-за этого нюанса переписывать огромное приложение целиком.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: left join в запросе в Create view
Судя беглым взглядом по коду, это просто отчет по большому счету. Тогда да, нужно обходить все с tPickDoc.cRec == BaseDoc.NRec
И поправить в коде кнч где нужно что обходим все с узла tPickDoc (например, в методе FillHeader, как сейчас там начинается If GetFirst BaseDoc = tsOk , то кнч только 1 ДО будет учитываться)
И поправить в коде кнч где нужно что обходим все с узла tPickDoc (например, в методе FillHeader, как сейчас там начинается If GetFirst BaseDoc = tsOk , то кнч только 1 ДО будет учитываться)