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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2009, 16:26   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Случай из жизни: как я каст тейбл с адресом джоинил(может кому-то полезно будет)
Это история одного ламерского бага, который я недавно, так-сказать, создал. Может будет полезно начинающим или условно начинающим, таким же как и я. В общем, стояла задача расширенного поиска кастомеров. Отдельными критериями поиска были адресные поля, но не стандартные, а из адреса доставки(delivery). Результат поиска отображался с помощью формочки с CustTable'овским источником данных, у которого был перегружен запрос на executeQuery. В общем, сам запрос этот был весьма бесхитростным, кроме некоторых нюансов, которые для этой темы, по большому счету, не важны. Важно то, что к CustTable"овскому источнику джоинился источник Address. И важно как: inner join. Ну и следовательно, следуя методу find таблицы Address выставлялись значения рэнджей этого источника. Фрагмент кода для наглядности:
X++:
addressDS = custTableDS.addDataSource(tablenum(Address));
addressDS.addLink(fieldnum(CustTable, RecId), fieldnum(Address, AddrRecId));
addressDS.addRange(fieldnum(Address,AddrTableId)).value(queryValue(tablenum(CustTable)));
addressDS.addRange(fieldnum(Address,Type)).value(queryValue(AddressType::Delivery));
Так вот, во всех компаниях поиск работал, как надо. Во всех, кроме одной. В этой самой «одной» получалась следующая картинка: каждый найденый кастомер отображался 2 раза. То есть грид содержал 2 идентичных записи(на форме отображались только записи из CustTable). Так вот, оказалось причина именно в связи 1:1. Оказалось, что индекс TypeIdx таблицы Address, содержащий поля AddrTableId, AddrRecId, AddressType (именно те поля, по которым работает find) не уникальный. Не спроста в find есть спецификатор firstonly. Так что у каждого кастомера может быть дофигища адресов доставки. Оказалось, что в этой компании именно такая ситуация(а точнее по 2 деливери адреса) и наблюдалась. Может в результате неправильного data migration, может просто фишка такая. И что интересно, зачем в системе допущена такая возможность и как дифферинциировать эти 2 адреса, если тот же файнд учитывает только вышеуказанные 3 критерия – для меня загадка. Но, тем не менее, будьте бдительны, граждане! После изменения типа связи с inner join на exist join все заработало «правильно». «Правильно», потому что анализироваться будут всегда первые адреса доставки.
__________________
Axapta has seduced me deadly!
За это сообщение автора поблагодарили: mazzy (5), Bober (1).
Старый 10.08.2009, 22:38   #2  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Может быть, сделать на форуме микро-раздел "Озарения начинающих" ? (щас чуствую у меня начнут респекты минусовать)
За это сообщение автора поблагодарили: denny (1), ZVV (1).
Старый 11.08.2009, 00:06   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Bober Посмотреть сообщение
Может быть, сделать на форуме микро-раздел "Озарения начинающих" ?
Мне кажется, подобным местом вполне могут быть персональные блоги, которые еще официально не "презентованы", но функционал уже запущен и вполне себе работает (если кто еще не в курсе, то см. как это выглядит у mazzy или у меня).

И я считаю, что в этом блоге человек может писать всё, что ему угодно (в разумных пределах, которые он установит себе сам, ну и с оглядкой на общие Правила Форума и цензурность используемых выражений, конечно, ). Писать, не стесняясь своей "начинающности". Через какое-то время другие начинающие будут ему благодарны, когда увидят, что все через это проходят и это их вдохновит.
За это сообщение автора поблагодарили: Bober (2).
Старый 11.08.2009, 10:05   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от HorrR Посмотреть сообщение
Так что у каждого кастомера может быть дофигища адресов доставки.
Может у клиента склады по всей стране. Что в этом удивительного.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.08.2009, 12:58   #5  
aidsua is offline
aidsua
AX*****
Аватар для aidsua
 
106 / 40 (2) +++
Регистрация: 28.09.2005
Адрес: 2:463/Kyiv
Или клиент -- сеть АЗС..
__________________
О, как беден, как груб наш русский язык! [c] А.С.Пушкин
Теги
join, адрес, как правильно, crm2011

 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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