![]() |
#1 |
Участник
|
Связывание нескольких таблиц
Каким образом средствами Axapta получить данный запрос:
SELECT A.ITEMGROUPID,A.ITEMID,SUM(B.AVAILPHYSICAL),C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID FROM INVENTTABLE A inner join INVENTSUM B on (A.ITEMID=B.ITEMID) inner join INVENTDIM C on ((b.inventdimid=c.inventdimid) and (B.AVAILPHYSICAL>0)) LEFT OUTER JOIN INVENTBATCH D ON ((C.INVENTBATCHID=D.INVENTBATCHID) AND (D.ITEMID = b.itemid)) GROUP BY A.ITEMGROUPID,A.ITEMID,B.ITEMID,C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID ORDER BY A.ITEMGROUPID DESC,A.ITEMID,B.ITEMID,C.INVENTDIMID,D.PRODDATE,D.INVENTBATCHID Все проблема в условии LEFT OUTER JOIN INVENTBATCH D ON ((C.INVENTBATCHID=D.INVENTBATCHID) AND (D.ITEMID = b.itemid)) Axpata строит внутренее объединение через WHERE, а мне необходимо через inner join Запрос необходим для показа в форме существующей номеклатуры с указанием даты производства товара. Задачу конечно можно решить через временный таблицы (скорость будет не очень) или не делать объединение с InventBatch, а показывать нужные поля из этой таблицы другим способом (через метод display) Но важно принципиально - можно построить такой запрос или нет |
|
![]() |
#2 |
Дмитрий Ерин
|
А если "напрямую" к серверу? Не пробовал? Интересно, что получится...
PHP код:
![]() |
|
![]() |
#3 |
Участник
|
Про "прямой" SQL запрос я читал в форуме, но можно ли его каким либо образом "прикрутить" к визуальным компонентам на форме.
|
|
![]() |
#4 |
Дмитрий Ерин
|
Да уж, с этим сложнее...
Если только "ручками", но это уже - маразм! Будем ждать ответов ГУРУ ![]() |
|
![]() |
#5 |
Участник
|
В Data Source формы:
InventDim InventBatch (outer join с InventDim) InventSum (inner join с InventDim) далее по вкусу InventTable InventTableModule у меня такое же прошло с ГТД outer join строит именно left outer join в SQL |
|
![]() |
#6 |
Участник
|
используй NotExist Join
Действительно, в аксапте нет Outer join.
Но в аксапте есть exist join и notexist join. Я, помнится мне, для получения запросов такого рода из аксапты использовал именно notexist join. Правда в итоге вместо одного запроса получается два. К томуже notexist join на больших БД работает довольно медленно. Что ж, исскуство требует жертв ![]() |
|
![]() |
#7 |
Участник
|
![]() Цитата:
Изначально опубликовано Ruff
Вообще-то на менее сложных запросах работает медленно ![]() |
|
![]() |
#8 |
Участник
|
Проблему решил следующим образом
QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе) |
|
![]() |
#9 |
Участник
|
![]() Цитата:
Изначально опубликовано Волчара
Действительно, в аксапте нет Outer join. Но в аксапте есть exist join и notexist join. Я, помнится мне, для получения запросов такого рода из аксапты использовал именно notexist join. Правда в итоге вместо одного запроса получается два. К томуже notexist join на больших БД работает довольно медленно. Что ж, исскуство требует жертв ![]() NotExistsJoin строит запрос вида not exists in (запрос) !!! |
|
![]() |
#10 |
Участник
|
Поспешил с предыдущим письмом:
(Проблему решил следующим образом QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе)) Последнее выражение (ij InventDim) не странслируется в SQL-запрос. Ранее в форуме читал о такой фичи Axapta. Действительно это так или нет |
|
![]() |
#11 |
Участник
|
Цитата:
Изначально опубликовано jan_psn
Поспешил с предыдущим письмом: (Проблему решил следующим образом QBE: InventTable -ij InventSum --oj InventDim ---oj InventBatch --ij InventDim Связь InventSum.ItemID = InventBatch.ItemID установил через AddDynaLink Второй InventDim необходим в с случае установки фильтра по полю InventLocationID (Выдаем картотеку на определенном складе)) Последнее выражение (ij InventDim) не странслируется в SQL-запрос. Ранее в форуме читал о такой фичи Axapta. Действительно это так или нет |
|
![]() |
#12 |
Участник
|
Опишу возникшую проблему.
Стандартная форма Axapta SalesQuickQuote работает не совсем корреектно в некоторых случаях. Возникла необходимость в изменении поведения данной формы (создаю новую): 1. Данные отсортировать по номенклатурной группе, затем по наименованию 2. Подключить таблицу InventBatch (к примеру) и отсортировать по полю ProdDate 3. Выводить только товар имеющийся на определенном складе Проблема с подключением InventBatch: 1. Объединяем с InventSum через Outer Join 2. Как установить условие InventBatch.ItemID==InventSum.ItemID ? Сделал через AddDynaLink. Прошло - SQL запрос сформировался верным (смотрю через мониторинг) Напрашивается решение через расширенный фильтр, но не получилось. Следующая проблема - наложения условия на InventDim.InventLocationID При выполнении AddRange условие добавляется в ON, а необходимо в WHERE. В виду того что объединение внешнее, то записи все равно выводятся, но с пустым InventLocationID (если уловие не выполняется) Решил проблему следующим образом - подключил через InnerJoin еще InventDim и объеденил с первым InventDim и на добавленный InventDim наложил условие по InventLocationId. В результате получили InventTable -ij InventSum --oj InventDim ---oj InventBatch ---ij InventDim Криво все это. Чего то я не понимаю (не знаю). |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|