AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2006, 19:57   #1  
murad is offline
murad
Участник
 
55 / 10 (1) +
Регистрация: 05.10.2005
? OR-запрос выдает ошибку
Делаю аналог Directory для добавления товара в заказ.
Сначала выбирается Товар (ItemID из InventTable) затем выбирается склад-ячейка (InventDimID из InventDim, связанный с InventSum)
Затем мне необходимо отобразить в списке выбранные товары в разрезе cкладов и ячеек.
То есть, как я понимаю, нужен запрос связывающий таблицы InventSum и InventDim,
и имеющий условие
(ItemID=A AND InventDim=B) OR (ItemID=C AND InventDim=D) и так далее..

Почитал, как добавляется такой Range. Сделал в цикле так:
Код:
AddRange("InventDim", "InventDimID", "(InventDim.InventDimID='" + InventID + "') AND(InventSum.ItemId='" + ItemID + "')");
Получаю ошибку: Query extended range failure: InventDim.InventDimID is not a valid datasource.field

При этом получается такой запрос
SELECT ItemId, ItemName FROM InventSum JOIN inventDimId, InventLocationId, wMSLocationId FROM InventDim WHERE InventSum.InventDimId = InventDim.inventDimId AND (((InventDim.InventDimID='00000007_089')AND(InventSum.ItemId='000000004')) OR ((InventDim.InventDimID='00000008_089')AND(InventSum.ItemId='000000004')))

Объясните плиз, в чём проблема?
И правильно ли я понимаю назначение этих таблиц?
Старый 27.05.2006, 01:09   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ошибку вы получаете, насколько я понял - при выполнении запроса?
Честно говоря, мало информации, чтобы что-то посоветовать.
Но что сразу бросается в глаза, так это ваше InventDimID и AND
В руководстве разработчика написано, что при использовании сложных запросов нужно все равно использовать языковые конструкции Х++ = то есть не OR а ||, и не AND - а &&
InventDimID = Может заменить его на InventDimId? Не уверен правда, что это даст эффект

А вообще, обычно используются спец.методы типа tableStr, fieldStr - дабы не ошибится в написании - вот так: fieldStr(InventDim, InventDimId)
Старый 27.05.2006, 11:10   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
и еще вместо названия таблицы должно присутствовать имя датасорса: querybuilddatasource.name()
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: murad (1).
Старый 28.05.2006, 13:38   #4  
murad is offline
murad
Участник
 
55 / 10 (1) +
Регистрация: 05.10.2005
Цитата:
Сообщение от kashperuk
Ошибку вы получаете, насколько я понял - при выполнении запроса?
Честно говоря, мало информации, чтобы что-то посоветовать.
Но что сразу бросается в глаза, так это ваше InventDimID и AND
В руководстве разработчика написано, что при использовании сложных запросов нужно все равно использовать языковые конструкции Х++ = то есть не OR а ||, и не AND - а &&
Самое странное, что OR'ы полученные в этом запросе, делаю не я - они получаются, когда выставляешь несколько раз AddRange по одному полю. Поэтому я стал придерживаться синтаксиса OR вместо || и AND вместо &&
Цитата:
Сообщение от kashperuk
InventDimID = Может заменить его на InventDimId? Не уверен правда, что это даст эффект
Пробовал, не помогает
Цитата:
Сообщение от kashperuk
А вообще, обычно используются спец.методы типа tableStr, fieldStr - дабы не ошибится в написании - вот так: fieldStr(InventDim, InventDimId)
Дело в том, что я получаю доступ извне, и как вызвать эти спец. методы из Functions я пока не представляю. Раньше спрашивал на форуме, но не получил ответа.
Старый 28.05.2006, 13:44   #5  
murad is offline
murad
Участник
 
55 / 10 (1) +
Регистрация: 05.10.2005
Цитата:
Сообщение от sukhanchik
и еще вместо названия таблицы должно присутствовать имя датасорса: querybuilddatasource.name()
Спасибо, попробовал, выяснил для себя преинтереснейшую вещь:
имя Datasource меняется с InventDim на InventDim_1, и Invent_Sum на InventSum_1.
При этом сам запрос получается:

SELECT ItemId, ItemName FROM InventSum JOIN inventDimId, InventLocationId, wMSLocationId FROM InventDim WHERE InventSum.InventDimId = InventDim.inventDimId AND (((InventDim_1.inventDimId='00000005_089')&&(InventSum_1.ItemId='000000005')) OR ((InventDim_1.inventDimId='00000003_089')&&(InventSum_1.ItemId='000000005')))

Ничего не понимаю , как в одном запросе система выставляет разные имена таблиц?
После этого ругаться стал несколько иначе
Query extended range failure: Syntax error near 27. at AxaptaCOMConnector.IAxaptaObject.Call
Старый 28.05.2006, 15:01   #6  
murad is offline
murad
Участник
 
55 / 10 (1) +
Регистрация: 05.10.2005
Путем перебора было обнаружено, что
1) надо использовать синтаксис && и || (несмотря на то, что сама Axapta подставляет OR и AND) для формирования связей
2) надо использовать querybuilddatasource.name(), несмотря на то, что получаются разные имена таблиц в запросе
3) в условиях надо обязательно использовать двойные кавычки, а именно InventSum.ItemId="000000004", на одинарные ругается.
Спасибо за помощь, но вот только подставить в такие условия LIKE так и не получилось, ругается на нехватающий parenthesis.
Теги
запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
При загрузке портала выдает запрос на ввод логина и пароля zelibobis DAX: Администрирование 2 01.02.2008 16:37
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Axapta выдает ошибку, что AxCom.dll не зарегистр,хотя... yooshi DAX: Функционал 1 31.10.2005 17:48
Мастер настройки корпоративного портала выдаёт ошибку djoker DAX: Функционал 2 24.02.2005 05:32

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:34.