|  17.11.2012, 00:57 | #1 | 
| Участник | Как гарантированно уронить клиента AX2009 
			
			Выделяем пару менюИтемов, и тыкаем в свойство Object Ахарта не вылетает? - Руки кривые!!!  ) | 
|  | |
| За это сообщение автора поблагодарили: Romb (1), ax_mct (1), iCloud (1). | |
|  03.12.2013, 14:23 | #2 | 
| Участник | 
			
			Как гарантированно уронить клиента AX2009 1. Создаем Query 2. В источники данных кидаем какую-нибудь табличку. 3. В добавленной табличке в связанные источники данных кидаем связанную табличку 4. Устанавливаем Relations = Yes у добавленной таблички 5. Идем в ветку Relations 6. Правой кнопкой мыши - Копировать Ахарта не вылетает? - Руки кривые!!! ) | 
|  | |
| За это сообщение автора поблагодарили: TasmanianDevil (1), Atar (2). | |
|  04.12.2013, 11:57 | #3 | 
| Участник | 
			
			В 2012 исправили или такие же баги ?
		 | 
|  | 
|  04.12.2013, 16:53 | #4 | 
| Участник | 
			
			В 2012 при выделении нескольких пунктов меню не показывается свойство Object, а при попытке копирования relation'а в запросе, созданного по Relations = Yes, ничего не происходит.
		 | 
|  | 
|  04.12.2013, 17:11 | #5 | 
| Участник |   | 
|  | 
|  07.12.2013, 03:11 | #6 | 
| Участник | 
			
			Как гарантированно уронить клиента AX2009 1. Берем метод таблицы. 2. Перетаскиваем этот метод с нажатым Ctrl в методы другой таблицы. 3. Удаляем перетащеный метод в исходной таблице 4. Сохраняем. Ахарта не вылетает? - Руки кривые!!! ) | 
|  | 
|  07.12.2013, 03:12 | #7 | 
| Участник | 
			
			Про драг-н-дроп в Ах еще много можно было бы написать... времени жалко.
		 | 
|  | 
|  10.12.2013, 08:44 | #8 | 
| Участник | |
|  | 
|  10.12.2013, 09:12 | #9 | 
| Участник | 
			
			При изменении свойств нескольким выделенным объектам заметил такую особенность. Если сначала открыть окно свойств а затем выделить несколько элементов, то с большой вероятностью будет ошибка. А если сначала выделить объекты и уже потом открыть окно свойств, то скорее всего все получится.
		 | 
|  | 
|  10.12.2013, 11:05 | #10 | 
| Участник | 
			
			На AX 2009 5.0.1500.3761 все стабильно! Выделяешь - вылетаешь!  Работает баг! | 
|  | 
|  10.12.2013, 18:02 | #11 | 
| Участник | 
			
			Как гарантированно уронить клиента AX2009 1. создаем джобик X++:     Map                 map;
    MapEnumerator       me;
    ;
    map = new Map(Types::String, Types::void);
    map.insert("1", null);
    map.insert("2", null);
    map.insert("3", null);
    me    = map.getEnumerator();
    while (me.moveNext())
    {
        if (me.currentKey() == "2")
        {
            map.remove(me.currentKey());
        }
        info(me.currentKey());
    }Ахарта не вылетает? - Руки кривые!!! ) PS не надо мне говорить, что я делаю неправильно. я знаю, что я делаю неправильно. Но от этого ахарта не должна ложиться насмерть... имхо. Последний раз редактировалось ta_and; 10.12.2013 в 18:08. | 
|  | 
|  10.12.2013, 18:08 | #12 | 
| Участник | 
			
			Ну... это называется "прострелить себе ногу" - с таким же успехом можно разыменовывать null. Оно как бы общеизвестно, что в цикле с использованием enumerator'ов нельзя менять соотв. коллекцию, а если очень хочется, то надо использовать iterator'ы. Вообще же рекомендуется все желаемые изменения сохранять где-нить сбоку и накатывать на коллекцию после завершения прохода по ней enumerator'ом. См. также Changes to the Collection Classes in Dynamics AX 2012
		 | 
|  | 
|  10.12.2013, 21:51 | #13 | 
| Участник | 
			
			Я от системы ожидаю адекватного поведения на мои ошибки. В приведенной документации (кстати по 2012) закономерно говорится, что в таких случаях будет выдано исключение. На этапе компиляции или рантайм - даже не важно. 2009 просто падает. безответно. Это очень хорошо в тестовом примере. А если эта хрень написана в 900 строках кода с вызовами разных побочных методов и дополнительных циклов, то искать эту ошибку очень весело. Ванька-встанька получается. | 
|  | |
| За это сообщение автора поблагодарили: ax_mct (2). | |
|  10.12.2013, 22:24 | #14 | 
| Banned | 
			
			Ноги Аксапте может и другой кто нибудь прострелить с задержкой выстрела до наступления какого либо условия или реального тестирования через месяцы. То есть знать такие вирусы просто необходимо даже если сам так делать не будешь. Я уверен что процентов 80% как минимум моих коллег о таком и не подозревают. Best Practices тоже штука общеизвестная но такое впечатление что всем незнакомая   | 
|  | 
|  11.12.2013, 00:20 | #15 | 
| Участник | 
			
			У любой системы есть способы ее использования, на которые она рассчитана, и способы, на которые она не рассчитана. Enumerator'ы коллекций не рассчитаны на то, что по ходу работы с ними коллекция будет изменяться. Под отладчиком видно, что изменение коллекции приводит к тому, что enumerator начинает ссылаться на "левый" кусок памяти (в отладчике виден мусор вместо текущего значения). Т.е. изменение коллекции "сбивает" некий указатель, который используется enumerator'ом, и в следующий раз он обращается к области памяти, которая не имеет к коллекции никакого отношения. Я лично подозреваю, что "дураконезащищенность" enumerator'ов была реализована намеренно для повышения производительности их работы. Про эту их особенность просто надо знать - подобно тому, как надо знать про особенности клиент-серверного взаимодействия и то, что некоторые вызовы обрабатываются локально, а некоторые - путешествуют по сети до другого компа и обратно. Цитата: | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2), Link (4). | |
|  11.12.2013, 00:43 | #16 | 
| Участник | 
			
			Ну, тут сколько не спорь, а приложение не должно падать при любом раскладе, даже если это не описано в документации. Должно красиво выдавать какое-нибудь умное сообщение и тогда уже падать   . | 
|  | 
|  03.02.2014, 00:39 | #17 | 
| Участник | 
			
			Как гарантированно уронить клиента AX2009 Берем любой Query с двумя связанными таблицами, с установленным свойством relations=Yes у которых связь идет по двум полям. Выделяем связи. Нажимаем Ctrl+C Ахарта не вылетает? - Руки кривые!!! | 
|  | 
|  11.10.2016, 02:09 | #18 | 
| Участник | 
			
			Не совсем в тему... Но тоже интересно. Найди ошибку. X++:     #DEFINE.FieldListAX(@"
             CustAccount
        ,    NameAlias
        ,    RouteId
        ,    CityDescription
        ,    CustGroupId
        ,    CustClassificationId
        ,    MainContactWorkerName
        ,    CreditMax
        ,    NumOfDays
        ,    CustDisc
        ,    DefaultAgreementId
        ,    DlvMode
        ") | 
|  | 
|  11.10.2016, 07:19 | #19 | 
| Участник | X++:     #localmacro.FieldListAX
        @"
             CustAccount
        ,    NameAlias
        ,    RouteId
        ,    CityDescription
        ,    CustGroupId
        ,    CustClassificationId
        ,    MainContactWorkerName
        ,    CreditMax
        ,    NumOfDays
        ,    CustDisc
        ,    DefaultAgreementId
        ,    DlvMode
        "
    #endmacroПоследний раз редактировалось S.Kuskov; 11.10.2016 в 07:31. | 
|  | 
| Теги | 
| ax2009 | 
|  | 
| 
 |