|
04.03.2008, 17:42 | #1 |
Участник
|
условие where по полям одной и той же таблицы
Добрый день.
С чем может быть связано, что вот такой код не работает нормально X++: static void Job1(Args _args) { InventTable inventTable; ; while select inventTable where inventTable.ItemId == inventTable.TST_PriceItemId { print inventTable.ItemId; } pause; } Если написть так 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 |
Участник
|
упс, забыл
DAX 40 SP2EE |
|
04.03.2008, 17:45 | #3 |
Участник
|
А какой SQL генерится?
|
|
04.03.2008, 18:50 | #4 |
Участник
|
вот такой:
Код: Оператор 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 |
Участник
|
Мутно. А чего поле называется TST_PriceItemId в коде и HMK_PriceITEMID в TSQL?
Я проверил на выполнение на 2 полях (ItemGroupId & ModelGroupId) Работает и тот джоб, и тот. (на AX 5) |
|
04.03.2008, 19:21 | #6 |
Участник
|
Цитата:
У коллеги моего тоже все работает. От чего это зависит, я понять не могу. Думал, может, конфигурационные утилиты не так настроены, опять же у коллеги такие же как у меня. но результат другой. |
|
04.03.2008, 19:21 | #7 |
Участник
|
SQL правильный. Как он норабатывает в Менеджемент Студио?
|
|
04.03.2008, 19:28 | #8 |
Участник
|
Еще: при сравнении аксапта не учитывает регистр символов. Может ли так быть настроен SQL, что он это учитывает по другому?
|
|
|
За это сообщение автора поблагодарили: Starling (1). |
04.03.2008, 21:24 | #9 |
Moderator
|
В студии отрабатывает корректно.
Регистр не имеет значения т.к. коды номенклатуры цифровые.
__________________
С уважением, kvan. |
|
04.03.2008, 21:57 | #10 |
Moderator
|
Поигрался с запросами
Следующий код отрабатывает правильно X++: while select ItemId, TST_PriceItemId from inventTable where inventTable.TST_PriceItemId == inventTable.ItemId { info(inventTable.ItemId); } Код: 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); } Код: SELECT A.ITEMGROUPID, ...(перечень всех полей), A.RECID FROM INVENTTABLE A WHERE ((DATAAREAID=?) AND (ITEMID=TST_PRICEITEMID))
__________________
С уважением, kvan. |
|
05.03.2008, 10:12 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Kabardian (2). |
05.03.2008, 10:15 | #12 |
Участник
|
Попобробуйте добавить условие && InventTable.recID
|
|
05.03.2008, 11:16 | #13 |
Moderator
|
Добавил не 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, 10:31 | #14 |
Участник
|
Угу.
Помимо того, что выдергивает все поля, такое впечатление, что где-то внутри "взводит" firstonly для такого запроса. Очень похоже по обмену с б/д. Как вариант, можно еще сделать группировку по нужным полям
__________________
Axapta v.3.0 sp5 kr2 |
|
05.03.2008, 11:20 | #15 |
Moderator
|
В том то и дело. Поэтому и пытаемся понять - может где то не так что то настроено или какие нибудь хинты или еще чего включены\ выключены.
__________________
С уважением, kvan. |
|
05.03.2008, 11:21 | #16 |
Участник
|
Создал новую таблицу. Написал для нее такой же Job. Получил корректный результат.
Кажется, начинаю догадываться, в чем проблема. При импорте данных система ругалась на ID 50008. Сразу не стал разбираться, в чем бок. Посмотрел на поле TST_PriceItemId его ID 50008. Щас повторю импорт и посмотрю точное сообщение. |
|
05.03.2008, 12:09 | #17 |
Участник
|
Повторный импорт к возникновению сообщения об оштибке не приводит.
Но проблема все таки не в поле TST_PriceItemId. Перенес значение из этого поля в другое - стандартное. Результат такой же. |
|
05.03.2008, 12:15 | #18 |
Участник
|
Судя по всему глюк кеша
|
|
05.03.2008, 12:50 | #19 |
Участник
|
|
|
05.03.2008, 12:53 | #20 |
Участник
|
Это бага кеша, None в некоторых аспектах действует как Found (см ссылку, которую ранее приводил)
|
|