AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 04.03.2008, 17:42   #1  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: 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;
}
то выбираются все записи
Alt 04.03.2008, 17:43   #2  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
упс, забыл
DAX 40 SP2EE
Alt 04.03.2008, 17:45   #3  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
А какой SQL генерится?
Alt 04.03.2008, 18:50   #4  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
вот такой:
Code:
Оператор 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, Использовано повторно=Нет]
Alt 04.03.2008, 19:09   #5  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Мутно. А чего поле называется TST_PriceItemId в коде и HMK_PriceITEMID в TSQL?

Я проверил на выполнение на 2 полях (ItemGroupId & ModelGroupId)
Работает и тот джоб, и тот. (на AX 5)
Alt 04.03.2008, 19:21   #6  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
Zitat:
Zitat von kashperuk Beitrag anzeigen
Мутно. А чего поле называется TST_PriceItemId в коде и HMK_PriceITEMID в TSQL?
шифруюсь

Zitat:
Zitat von kashperuk Beitrag anzeigen
Я проверил на выполнение на 2 полях (ItemGroupId & ModelGroupId)
Работает и тот джоб, и тот. (на AX 5)
У коллеги моего тоже все работает. От чего это зависит, я понять не могу. Думал, может, конфигурационные утилиты не так настроены, опять же у коллеги такие же как у меня. но результат другой.
Alt 04.03.2008, 19:21   #7  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
SQL правильный. Как он норабатывает в Менеджемент Студио?
Alt 04.03.2008, 19:28   #8  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Еще: при сравнении аксапта не учитывает регистр символов. Может ли так быть настроен SQL, что он это учитывает по другому?
This post has been rated by: Starling (1).
Alt 04.03.2008, 21:24   #9  
kvan ist offline
kvan
Moderator
Benutzerbild von kvan
Дети Юза
 
775 / 49 (3) +
Registriert seit: 07.08.2002
Ort: Donetsk
Zitat:
Zitat von belugin Beitrag anzeigen
SQL правильный. Как он норабатывает в Менеджемент Студио?
В студии отрабатывает корректно.

Zitat:
Zitat von belugin Beitrag anzeigen
Еще: при сравнении аксапта не учитывает регистр символов
Регистр не имеет значения т.к. коды номенклатуры цифровые.
__________________
С уважением, kvan.
Alt 04.03.2008, 21:57   #10  
kvan ist offline
kvan
Moderator
Benutzerbild von kvan
Дети Юза
 
775 / 49 (3) +
Registriert seit: 07.08.2002
Ort: Donetsk
Поигрался с запросами

Следующий код отрабатывает правильно
X++:
while select ItemId, TST_PriceItemId from inventTable
where inventTable.TST_PriceItemId == inventTable.ItemId
{
    info(inventTable.ItemId);
}
и генерит правильный SQL-запрос
Code:
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-запрос
Code:
SELECT A.ITEMGROUPID, ...(перечень всех полей), A.RECID FROM INVENTTABLE A 
WHERE ((DATAAREAID=?) AND (ITEMID=TST_PRICEITEMID))
У кого какие мысли?
__________________
С уважением, kvan.
Alt 05.03.2008, 10:12   #11  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von kvan Beitrag anzeigen
У кого какие мысли?
axCoder: Unwanted fields fetching when selecting by unique index
This post has been rated by: Kabardian (2).
Alt 05.03.2008, 10:15   #12  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Попобробуйте добавить условие && InventTable.recID
Alt 05.03.2008, 10:31   #13  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2499 (89) +++++++++
Registriert seit: 20.08.2005
Угу.
Помимо того, что выдергивает все поля, такое впечатление, что где-то внутри "взводит" firstonly для такого запроса. Очень похоже по обмену с б/д.
Как вариант, можно еще сделать группировку по нужным полям
__________________
Axapta v.3.0 sp5 kr2
Alt 05.03.2008, 11:16   #14  
kvan ist offline
kvan
Moderator
Benutzerbild von kvan
Дети Юза
 
775 / 49 (3) +
Registriert seit: 07.08.2002
Ort: Donetsk
Zitat:
Zitat von belugin Beitrag anzeigen
Попобробуйте добавить условие && 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.
Alt 05.03.2008, 11:20   #15  
kvan ist offline
kvan
Moderator
Benutzerbild von kvan
Дети Юза
 
775 / 49 (3) +
Registriert seit: 07.08.2002
Ort: Donetsk
Zitat:
Zitat von AndyD Beitrag anzeigen
Угу.
Помимо того, что выдергивает все поля, такое впечатление, что где-то внутри "взводит" firstonly для такого запроса. Очень похоже по обмену с б/д.
В том то и дело. Поэтому и пытаемся понять - может где то не так что то настроено или какие нибудь хинты или еще чего включены\ выключены.
__________________
С уважением, kvan.
Alt 05.03.2008, 11:21   #16  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
Создал новую таблицу. Написал для нее такой же Job. Получил корректный результат.
Кажется, начинаю догадываться, в чем проблема. При импорте данных система ругалась на ID 50008. Сразу не стал разбираться, в чем бок. Посмотрел на поле TST_PriceItemId его ID 50008. Щас повторю импорт и посмотрю точное сообщение.
Alt 05.03.2008, 12:09   #17  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
Повторный импорт к возникновению сообщения об оштибке не приводит.
Но проблема все таки не в поле TST_PriceItemId. Перенес значение из этого поля в другое - стандартное. Результат такой же.
Alt 05.03.2008, 12:15   #18  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Судя по всему глюк кеша
Alt 05.03.2008, 12:50   #19  
Starling ist offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Registriert seit: 20.10.2005
Ort: Kiev
Zitat:
Zitat von belugin Beitrag anzeigen
Судя по всему глюк кеша
Установил для InventTable свойство CacheLookup в None
Сделал рестар АОС
Запустил джобу
Результат тотже.
Alt 05.03.2008, 12:53   #20  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Это бага кеша, None в некоторых аспектах действует как Found (см ссылку, которую ранее приводил)
Stichworte
ax4.0

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Расширенные возможности 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.