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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2009, 10:43   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
bug в ax3kr3 confind
Рбнаружил в KR3 такой очень неприятный баг: если в контейнере содержится пустое строковое, то confind при поиске значения отсутствующего в контейнере выдает позицию пустой строки!
как с таким багом люди на KR3 работают (или я может чего то не знаю)? в каком релизе все нормально работает?

X++:
static void Job167(Args _args)
{
    container   c = [3,5,"","",8];
    int         i;
;
    i = confind(c,2);   // found 3  bug!
    i = confind(c,3);
    i = confind(c,4);  // found 3  bug!
    i = confind(c,5);
}
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 14.12.2009 в 10:52.
За это сообщение автора поблагодарили: Bishop (2), Logger (3).
Старый 14.12.2009, 12:43   #2  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
В AX 4.0 SP2 уже исправлено.
Проверил у себя на AX 3.0 KR3 - действительно работает некорректно!
Причем, если в контейнере искомый элемент стоит дальше пустого значения, то все равно confind() возвращает индекс первого пустого значения.
Похоже, редко confind() применяли (и применяют) к контейнерам с разнотиповыми элементами...
Еще, поиск пустой строки в контейнере всегда возвращает первый нестроковый элемент... (в той же AX 3.0 KR3):
c = ["A","B",1,2,3,""]
confind(c, "") = 3
Старый 14.12.2009, 12:51   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Проверил в АХ 2009. Там уже все ОК.
Честно говоря, с таким поведением немного стремно было бы работать.

Хотя, confind не такая уж и частая операция, если так подумать.
Старый 14.12.2009, 14:08   #4  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Хотя, confind не такая уж и частая операция, если так подумать.
не сказал-бы, если посмотреть в АОТ
__________________
--- SHiSHok
Старый 14.12.2009, 17:47   #5  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
свою функцию корректного поиска в контейнере то написали, но не хотелось бы таким способом исправлять ошибку.
есть идеи как минимальными затратами устранить баг?
__________________
--- SHiSHok
Старый 14.12.2009, 17:59   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вообще-то, с ошибкой будет искать и собственно пустую строку

X++:
i = confind(c,"");   // found 1  bug!
Напрашивающийся вариант решения - это сравнение базовых типов. Того значения, которое ищем и того, которое нашли.

Другой вариант - вместо пустой строки записывать некий спец.символ. Например, num2char(1). Как ни странно, но num2char(0) ведет себя также как и пустая строка.

Да, кстати, в AX2.5 этого глюка не было.

==========================================
Ну, и еще один вариант поиска, правда, не для всех типов данных

X++:
print strScan(","+con2str(c)+",",strFmt(",%1,",2),1,1000);
print strScan(","+con2str(c)+",",strFmt(",%1,",3),1,1000);
print strScan(","+con2str(c)+",",strFmt(",%1,",""),1,1000);
pause;

Последний раз редактировалось Владимир Максимов; 14.12.2009 в 18:06.
Старый 14.12.2009, 18:08   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
есть идеи как минимальными затратами устранить баг?
Откажитесь от хранения в контейнере данных, по которым вы осуществляете поиск Вообще, много раз уже с этими контейнерами возникали косяки, я лично, если нужно что-то куда-то "складывать" по ходу работы и потом это искать/доставать, использую Set или Map.
Старый 15.12.2009, 10:58   #8  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Откажитесь от хранения в контейнере данных, по которым вы осуществляете поиск
быстрый анализ показал : контейнер используют (c confind) порядка 170 объектов (среди них \Classes\ClassFactory , \Classes\Queue , \Classes\NumberSeqReference , и еще много интересных обьектов).
Т.о. можно сказать что под вопросом функционирование всего приложения в KR2,3.
Как я понимаю, линейка версии 3 больше не поддерживается и не фиксится?

Цитата:
Сообщение от gl00mie Посмотреть сообщение
если нужно что-то куда-то "складывать" по ходу работы и потом это искать/доставать, использую Set или Map.
а может и они уже неправильно работают
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 15.12.2009 в 11:02.
Старый 15.12.2009, 11:37   #9  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Откажитесь от хранения в контейнере данных, по которым вы осуществляете поиск Вообще, много раз уже с этими контейнерами возникали косяки, я лично, если нужно что-то куда-то "складывать" по ходу работы и потом это искать/доставать, использую Set или Map.
Есть случаи, когда Set и Map не подходят, в отличие от контейнера:
1) требуется хранить разнотиповые значения (это можно обойти использованием в качестве ключа тех же контейнеров);
2) требуется хранить повторяющиеся элементы;
3) требуется хранить значения в порядке поступления, а не в сортированном виде;
Ну, и еще, контейнеры удобнее передавать между классами и просматривать их содержимое в дебаггере.

Цитата:
Сообщение от SHiSHok Посмотреть сообщение
быстрый анализ показал : контейнер используют (c confind) порядка 170 объектов (среди них \Classes\ClassFactory , \Classes\Queue , \Classes\NumberSeqReference , и еще много интересных обьектов).
Т.о. можно сказать что под вопросом функционирование всего приложения в KR2,3.
Данная ошибка в AX 3.0 KR3 confind() возникает только при наличии в контейнере разнотиповых данных.
Если вы найдете в стандартной аксапте место применения confind() к контейнеру, потенциально содержащему разные типы, тогда можно ставить под вопрос...
Думаю, что не найдете
За это сообщение автора поблагодарили: alex55 (1).
Старый 15.12.2009, 12:28   #10  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от Bishop Посмотреть сообщение
Данная ошибка в AX 3.0 KR3 confind() возникает только при наличии в контейнере разнотиповых данных.
пока мы тоже к этому выводу пришли. но не только когда в контейнере разнотиповые данные, а при работе с разными типами при помощи контейнера. т.е. вариант confind([3,5,0,0,8],''); неправильно работает.

Цитата:
Сообщение от Bishop Посмотреть сообщение
Если вы найдете в стандартной аксапте место применения confind() к контейнеру, потенциально содержащему разные типы, тогда можно ставить под вопрос...
Думаю, что не найдете
раз у народа работает KR3 и никто до сих пор этого глюка не заметили, то надеюсь что не найду. А вот в функционале наших поставщиков этих контейнеров... очень любили они их (собственно там и напоролся).
__________________
--- SHiSHok
Старый 15.12.2009, 22:04   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Bishop Посмотреть сообщение
Есть случаи, когда Set и Map не подходят, в отличие от контейнера:
1) требуется хранить разнотиповые значения (это можно обойти использованием в качестве ключа тех же контейнеров);
Я отдельно упомянул, что рассматривается вариант, когда требуется искать в "накопленных" данных. Слабо представляю ситуацию, когда требуется искать среди разнотипных значений.
Цитата:
Сообщение от Bishop Посмотреть сообщение
2) требуется хранить повторяющиеся элементы;
3) требуется хранить значения в порядке поступления, а не в сортированном виде;
List
Цитата:
Сообщение от Bishop Посмотреть сообщение
Ну, и еще, контейнеры удобнее передавать между классами и просматривать их содержимое в дебаггере.
Заметьте, что контейнеры передаются по значению, в связи с чем их удобно передавать между уровнями (клиентом и сервером), в то время как на одном уровне их передача порождает лишние накладные расходы. А для отладки можно и классы-коллекции запаковать в контейнер, благо это не так часто нужно.
За это сообщение автора поблагодарили: alex55 (1).
Старый 15.12.2009, 22:27   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Интересно, а имеет смысл требовать хотфикса для этого глюка или из-за окончания поддержки трешки это бессмысленно ? Если не ошибаюсь гарантировался выпуск фиксов только для критичных багов.
Старый 16.12.2009, 00:40   #13  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Я отдельно упомянул, что рассматривается вариант, когда требуется искать в "накопленных" данных. Слабо представляю ситуацию, когда требуется искать среди разнотипных значений.
Я лишь намекнул, что обсуждаемый здесь глюк в confind() как раз выявлен в ситуации использования контейнера с "ассорти". И совет отказаться от контейнеров в пользу Map или Set при поиске данных некорректен для данного случая.
Я сам слабо представляю такую ситуацию. И то, что это выявлено (по крайней мере, на axforum) в конце 2009 года, говорит само за себя.
Старый 16.12.2009, 02:05   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Logger Посмотреть сообщение
Интересно, а имеет смысл требовать хотфикса для этого глюка или из-за окончания поддержки трешки это бессмысленно ? Если не ошибаюсь гарантировался выпуск фиксов только для критичных багов.
Я думаю, что шансов его получить - очень мало.
В будущее мы смотрим, назад не оглядываемся
Старый 16.12.2009, 11:13   #15  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Я думаю, что шансов его получить - очень мало.
В будущее мы смотрим, назад не оглядываемся
Баг я бы сказал критичный и многие клиенты еще долго будут на 3-й версии работать. Но, учитывая как из мелкософта тяжело все выбивается, думаю что финал 3й версии останется с дыркой
__________________
--- SHiSHok
Теги
confind, container, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
palleagermark: Possible upgrade bug in \Classes\ReleaseUpdateDB41_Administration\renumberEPParametersKey Blog bot DAX Blogs 0 11.02.2009 23:05
palleagermark: Bug in EP 2009 when having the debug flag set to true Blog bot DAX Blogs 0 05.01.2009 11:06
a little bug in MainMenu creation Blog bot DAX Blogs 1 15.04.2008 14:33
dynamicsmatters: V3 - V4 Interesting bug Blog bot DAX Blogs 0 16.07.2007 02:58
Kashperuk Ivan: A bug in validation of methods' access modifiers and class abstract modifier Blog bot DAX Blogs 0 27.06.2007 21:40

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

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

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