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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.03.2008, 17:42   #1  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
условие where по полям одной и той же таблицы
Добрый день.

С чем может быть связано, что вот такой код не работает нормально
X++:
static void Job1(Args _args)
{
    InventTable inventTable;
    ;
    while select inventTable where inventTable.ItemId == inventTable.TST_PriceItemId
    {
        print inventTable.ItemId;
    }
    pause;
}
выбирается только 1-ая запись удовлетворяющая условию inventTable.ItemId == inventTable.TST_PriceItemId
Если написть так
X++:
static void Job1(Args _args)
{
    InventTable inventTable;
    ;
    while select inventTable
    {
        if(inventTable.ItemId == inventTable.TST_PriceItemId)
            print inventTable.ItemId;
    }
    pause;
}
то выбираются все записи
Старый 04.03.2008, 17:43   #2  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
упс, забыл
DAX 40 SP2EE
Старый 04.03.2008, 17:45   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А какой SQL генерится?
Старый 04.03.2008, 18:50   #4  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
вот такой:
Код:
Оператор SQL: (InventTable) SELECT A.ITEMGROUPID,A.ITEMID,A.ITEMNAME,A.ITEMTYPE,A.PURCHMODEL,A.HEIGHT,A.WIDTH,A.SALESMODEL,A.DEL_COSTGROUPID,A.REQGROUPID,A.EPCMANAGER,A.PRIMARYVENDORID,A.NETWEIGHT,A.DEPTH,A.UNITVOLUME,A.BOMUNITID,A.DENSITY,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.COSTMODEL,A.USEALTITEMID,A.ALTITEMID,A.PRODFLUSHINGPRINCIP,A.PBAITEMAUTOGENERATED,A.BOMMANUALRECEIPT,A.STOPEXPLODE,A.PHANTOM,A.BOMLEVEL,A.BATCHNUMGROUPID,A.AUTOREPORTFINISHED,A.ALTCONFIGID,A.STANDARDCONFIGID,A.PRODPOOLID,A.PROPERTYID,A.ABCTIEUP,A.ABCREVENUE,A.ABCVALUE,A.ABCCONTRIBUTIONMARGIN,A.COMMISSIONGROUPID,A.CONFIGURABLE,A.SALESPERCENTMARKUP,A.SALESCONTRIBUTIONRATIO,A.SALESPRICEMODELBASIC,A.MINAVERAGESETTLE,A.NAMEALIAS,A.PRODGROUPID,A.PROJCATEGORYID,A.GROSSDEPTH,A.GROSSWIDTH,A.GROSSHEIGHT,A.STANDARDPALLETQUANTITY,A.QTYPERLAYER,A.SORTCODE,A.CONFIGSIMILAR,A.SERIALNUMGROUPID,A.DIMGROUPID,A.MODELGROUPID,A.ITEMBUYERGROUPID,A.TAXPACKAGINGQTY,A.WMSPALLETTYPEID,A.DEL_STOPEXPLODEPRICE,A.WMSPICKINGQTYTIME,A.TARAWEIGHT,A.SCRAPVAR,A.SCRAPCONST,A.STANDARDINVENTCOLORID,A.STANDARDINVENTSIZEID,A.ITEMDIMCOMBINATIONAUTOCREATE,A.ITEMDIMCOSTPRICE,A.ITEMIDCOMPANY,A.ALTINVENTSIZEID,A.ALTINVENTCOLORID,A.FORECASTDMPINCLUDE,A.BOMCALCGROUPID,A.PBAITEMCONFIGURABLE,A.PBAINVENTITEMGROUPID,A.PBAHIDEDIALOG,A.PBAHIDEAPPROVAL,A.PBAAUTOSTART,A.PBAMANDATORYCONFIG,A.PACKING_RU,A.ASSETGROUPID_RU,A.ASSETID_RU,A.HMK_ITEMDOCUMENT,A.HMK_TEMPERATURETO,A.HMK_TEMPERATUREFROM,A.HMK_LENGTHOFSALES,A.HMK_TERMOFSALES,A.HMK_DATEOFPROD,A.HMK_GOODGROUPID,A.HMK_PRICEITEMID,A.RECVERSION,A.RECID FROM INVENTTABLE A WITH( INDEX(I_175ITEMIDX)) WHERE ((DATAAREAID=?) AND (ITEMID=HMK_PRICEITEMID)) [Код=92, Использовано повторно=Нет]
Старый 04.03.2008, 19:09   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Мутно. А чего поле называется TST_PriceItemId в коде и HMK_PriceITEMID в TSQL?

Я проверил на выполнение на 2 полях (ItemGroupId & ModelGroupId)
Работает и тот джоб, и тот. (на AX 5)
Старый 04.03.2008, 19:21   #6  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Мутно. А чего поле называется TST_PriceItemId в коде и HMK_PriceITEMID в TSQL?
шифруюсь

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Я проверил на выполнение на 2 полях (ItemGroupId & ModelGroupId)
Работает и тот джоб, и тот. (на AX 5)
У коллеги моего тоже все работает. От чего это зависит, я понять не могу. Думал, может, конфигурационные утилиты не так настроены, опять же у коллеги такие же как у меня. но результат другой.
Старый 04.03.2008, 19:21   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
SQL правильный. Как он норабатывает в Менеджемент Студио?
Старый 04.03.2008, 19:28   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Еще: при сравнении аксапта не учитывает регистр символов. Может ли так быть настроен SQL, что он это учитывает по другому?
За это сообщение автора поблагодарили: Starling (1).
Старый 04.03.2008, 21:24   #9  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
Сообщение от belugin Посмотреть сообщение
SQL правильный. Как он норабатывает в Менеджемент Студио?
В студии отрабатывает корректно.

Цитата:
Сообщение от belugin Посмотреть сообщение
Еще: при сравнении аксапта не учитывает регистр символов
Регистр не имеет значения т.к. коды номенклатуры цифровые.
__________________
С уважением, kvan.
Старый 04.03.2008, 21:57   #10  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Поигрался с запросами

Следующий код отрабатывает правильно
X++:
while select ItemId, TST_PriceItemId from inventTable
where inventTable.TST_PriceItemId == inventTable.ItemId
{
    info(inventTable.ItemId);
}
и генерит правильный SQL-запрос
Код:
SELECT A.ITEMID,A.TST_PRICEITEMID,A.RECID FROM INVENTTABLE A 
WHERE ((DATAAREAID=?) AND (TST_PRICEITEMID=ITEMID))
При этом первоначальный запрос отрабатывает некорректно
X++:
while select ItemId, TST_PriceItemId from inventTable
where inventTable.ItemId == inventTable.TST_PriceItemId
{
    info(inventTable.ItemId);
}
и генерит "неправильный" SQL-запрос
Код:
SELECT A.ITEMGROUPID, ...(перечень всех полей), A.RECID FROM INVENTTABLE A 
WHERE ((DATAAREAID=?) AND (ITEMID=TST_PRICEITEMID))
У кого какие мысли?
__________________
С уважением, kvan.
Старый 05.03.2008, 10:12   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от kvan Посмотреть сообщение
У кого какие мысли?
axCoder: Unwanted fields fetching when selecting by unique index
За это сообщение автора поблагодарили: Kabardian (2).
Старый 05.03.2008, 10:15   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Попобробуйте добавить условие && InventTable.recID
Старый 05.03.2008, 10:31   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Угу.
Помимо того, что выдергивает все поля, такое впечатление, что где-то внутри "взводит" firstonly для такого запроса. Очень похоже по обмену с б/д.
Как вариант, можно еще сделать группировку по нужным полям
__________________
Axapta v.3.0 sp5 kr2
Старый 05.03.2008, 11:16   #14  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
Сообщение от belugin Посмотреть сообщение
Попобробуйте добавить условие && InventTable.recID
Добавил не RecId, а поле с которым сравниваю (TST_PriceItemId) и все работает как нужно
X++:
while select ItemId, TST_PriceItemId from inventTable
where inventTable.TST_PriceItemId
   && inventTable.ItemId == inventTable.TST_PriceItemId
{
    info(inventTable.ItemId);
}
Но это мой код и тут я могу извращаться как угодно
А если такое выскочит где нить в стандарте?
(Сразу скажу что стандартный код на предмет наличия таких запросов не изучал)
__________________
С уважением, kvan.
Старый 05.03.2008, 11:20   #15  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
Сообщение от AndyD Посмотреть сообщение
Угу.
Помимо того, что выдергивает все поля, такое впечатление, что где-то внутри "взводит" firstonly для такого запроса. Очень похоже по обмену с б/д.
В том то и дело. Поэтому и пытаемся понять - может где то не так что то настроено или какие нибудь хинты или еще чего включены\ выключены.
__________________
С уважением, kvan.
Старый 05.03.2008, 11:21   #16  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Создал новую таблицу. Написал для нее такой же Job. Получил корректный результат.
Кажется, начинаю догадываться, в чем проблема. При импорте данных система ругалась на ID 50008. Сразу не стал разбираться, в чем бок. Посмотрел на поле TST_PriceItemId его ID 50008. Щас повторю импорт и посмотрю точное сообщение.
Старый 05.03.2008, 12:09   #17  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Повторный импорт к возникновению сообщения об оштибке не приводит.
Но проблема все таки не в поле TST_PriceItemId. Перенес значение из этого поля в другое - стандартное. Результат такой же.
Старый 05.03.2008, 12:15   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Судя по всему глюк кеша
Старый 05.03.2008, 12:50   #19  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Цитата:
Сообщение от belugin Посмотреть сообщение
Судя по всему глюк кеша
Установил для InventTable свойство CacheLookup в None
Сделал рестар АОС
Запустил джобу
Результат тотже.
Старый 05.03.2008, 12:53   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Это бага кеша, None в некоторых аспектах действует как Found (см ссылку, которую ранее приводил)
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расширенные возможности Query - арифметические операции в условие Where. Lemming DAX: Программирование 10 07.02.2008 14:38
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56
Не фильтруется форма по полям временной таблицы Bega DAX: Программирование 5 03.09.2005 11:39
Условие where в синтаксисе Query sev DAX: Программирование 25 04.08.2005 08:48
условие WHERE SomeField == NULL Alexey DAX: Программирование 7 23.01.2002 16:42

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

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

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