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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2004, 15:44   #21  
sassas
Гость
 
n/a
все еще хуже: max (enum) -> 250
Старый 25.08.2004, 05:11   #22  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано mazzy

Нет, уж!
Огромное спасибо за вопросы!

Побольше бы таких неожиданных и интересных.
Вот вот! Мне тоже понравилось какая ниточка распуталась из простого вопроса. Если не ошибаюсь где то тут видел раздел "глюки и фичи аксапты", куда предлагали складывать подобные замечательные замечательности, из-за которых начинающие программисты рано седеют. (там что то было про глюк при извлечении из контейнера по три штуки в цикле было, сейчас не смог найти).
Как раз материальчик для того раздела.
Старый 25.08.2004, 06:05   #23  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Всё таки нашел тот топик и еще раз заценил тот глюк с контейнером.
Решил расследовать причины такого странного поведения контейнера и написал следующий Job:
(крайне рекомендуется запустить и насладится результатом всем, кто пользовался или собирается пользоваться ф-ей conDel)

PHP код:
static void Job5(Args _args)
{
    
int k// длина контейнера
    
int d// число элементов для удаления "за раз"
    
int is;
    
container con;
    
void checkContainer()
    {
        
con conNull();
        for ( 
1<= ki++ )
            
con += i;
        
k mod d;
        for ( 
1<= k div di++ )
            
con conDelcon1);
        if ( 
conLencon ) != )
        {
            
info"нач. длина " int2str) + "; удаляем по " int2str) + " эл. за раз в цикле " int2strk div d ) + " итераций; " +
                  
"в конце должно статься " int2str) + " эл.; реально осталось " int2strconLencon ) ) + " эл.!" );
        }
    }
    ;

    for ( 
1<= 100k++ )
    {
        for ( 
1<= kd++ )
        {
            
checkContainer();
        }
    }

Результаты ошеломляют.
Особенно рекомендую посмотреть нижнюю часть инфолога.
Причина видимо кроется в том, что контейнеры как и любая нормальная динамическая структура выделяет память под свои элементы если в нём не хватает места не по одному элементу, а порциями. Как видно в X++ начальное значение этой порции равно 50 элементов, именно с этого количества элементов в контейнере начинаются страшные глюки. Соответственно в любом контейнере хранятся два параметра - n - реальное число элементов в массиве и m - число элементов под которое выделена память. m может быть больше или равно n.
Так вот такое ощущение что conDel в каком то месте ошибочно вместо n обращается к m или наоборот!
За это сообщение автора поблагодарили: alex55 (1).
Старый 13.10.2004, 16:18   #24  
Yury is offline
Yury
Участник
 
27 / 16 (1) ++
Регистрация: 25.09.2002
Вдогонку
real a = -257;
boolean b = a;
;
info(strfmt("%1", b));

if (b)
{
info("все-таки true");
}
Старый 13.10.2004, 17:16   #25  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
static void TestEnum(Args _args)
{
int i, i2;
real r, r2;
real a = -257;
boolean b;// = a;
//NoYes b;// = a;
;
b = a;
info(strfmt("b = %1", b));
// проверяем что же реально хранится в переменной b и видим что там
// лежит 255, которое расценивается как true в условии if, но !
// которое strFMT не умеет преобразовывать в строку "Да" или в строку "Нет"
i = b;
r = b;

b = true; // а здесь уже будет лежать единичка
info(strfmt("b = %1", b));
i2 = b; // так что strFMT отработает нормально
r2 = b;
info(strFMT('реальное содержимое при копировании в int %1 ; %2 ', i, i2));
info(strFMT('реальное содержимое при копировании в real %1 ; %2 ', r, r2));

}

А все из-за того что фактически вместо boolean используется shortint и при присваивании происходит простое копирование в памяти без проверки типов.
Старый 27.11.2008, 11:23   #26  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, похоже, что проблемы с преобразованием int в boolean решили между 3.0 и 2009.
Старый 27.11.2008, 12:02   #27  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ну, похоже, что проблемы с преобразованием int в boolean решили между 3.0 и 2009.
В каком-то из KR пофиксили.
Старый 27.11.2008, 12:13   #28  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Взял свой же джоб из предыдущих сообщений на 3.0 KR2 все ок. Более свежих версий под рукой сейчас нет, проверьте у кого есть - не раз были случаи что исправленное ранее всплывало снова и снова.

А вообще в очередной раз "порадовала" скорость исправления. Признав ошибку критической правили полтора года и то после неоднократных повторных пинаний
Старый 27.11.2008, 12:41   #29  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от db Посмотреть сообщение
Взял свой же джоб из предыдущих сообщений на 3.0 KR2 все ок. Более свежих версий под рукой сейчас нет, проверьте у кого есть - не раз были случаи что исправленное ранее всплывало снова и снова.
Если вы про job9 Проверка на RecId

то у меня он выдал 4 раза "ok", как я понимаю, это означает что бага исправлена.
Ax KR3 (build 7609)

"все ок." - вы имели в виду что бага исправлена ? Или что джоб продолжает ругаться ?

Последний раз редактировалось Logger; 27.11.2008 в 12:44.
Старый 27.11.2008, 13:37   #30  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
исправлена
Теги
recid, баг, ошибка, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
Как сформировать RecId Arahnid DAX: Программирование 18 14.07.2008 15:02
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

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

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

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