12.04.2017, 04:47 | #241 |
Участник
|
Вот еще из новинок D365 - когда создаете индекс по умолчанию он теперь уникальный -Allow duplicates = No. А чтобы так сказать преждевременно не спугнуть разработчика, новый движок синхронизации в целях оптимизации вообще не пытается синхронизировать таблицу в окружении разработки если менялись только индексы.
Т.е. создаете индекс(не меняя никаких сво-в), тестируете, все ОК. далее заливаете на LCS, отдаете клиенту и вуаля - получаете ошибку синхронизации. Создал по этому поводу реквест на ideas https://ideas.dynamics.com/ideas/dyn...ions/ID0001383 |
|
17.05.2017, 14:56 | #242 |
Участник
|
Вчера вылезло нечто странное в 2012 аксапте.
Код шёл примерно так (очень упрощенная версия) X++: [record1] = map.lookup(#current); tmpTable.value = strfmt("%1", record1.(fieldnum(RealTable, dataAreaid))) это вылетало с "Внутренняя ошибка номер 25". Научный метод тыка показал, что info(record1.dataAreaId); работает и показывает код компании. А вот info(record1.(fieldnum(RealTable, dataAreaid))) вылетает. Веселье продолжилось, дальнейшее шаманство показало что X++: [recordTmp] = map.lookup(#current); record1.data(recordTmp); // <<< копируем полученное из map'а info(record1.(fieldnum(RealTable, dataAreaid))) tmpTable.value = record1.(fieldnum(RealTable, dataAreaid)) Я ничего не понял. |
|
17.05.2017, 15:10 | #243 |
Участник
|
Цитата:
коды системных полей могут отличаться в map и в таблицах, которые реально находятся под мапом. |
|
17.05.2017, 15:50 | #244 |
Участник
|
Интересно если в первом случае сделать fieldNum(Common, DataAreaId)?
По-идее должны быть одинаковые идентификаторы системных полей, но вдруг |
|
17.05.2017, 16:42 | #245 |
Участник
|
Думаю это глюк с наследованием таблиц, вот пример накидал в джобике
X++: static void InhTab(Args _args) { AgreementHeader ah; SalesAgreementHeader sah; container buf; Common record; select firstOnly sah; buf = [sah]; [record] = buf; info(record.(fieldNum(Common, dataAreaId))); } билд 6.3.3000.617
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
25.05.2017, 11:28 | #246 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
06.07.2017, 05:57 | #247 |
Участник
|
инфолог тоже не пережил дигитал трансформашн
такой код в ах2012 и ниже выдавал 502 сообщения с ошибками и 502 инфо(что и ожидалось). при этом можно было скопировать содержимое одним кликом X++: int i; for( i =1; i <= 502; i++) error(strFmt("line error %1", i)); for( i =1; i <= 502; i++) info(strFmt("line info %1", i)); Последний раз редактировалось trud; 06.07.2017 в 06:02. |
|
06.07.2017, 08:08 | #248 |
Участник
|
Цитата:
Сообщение от trud
инфолог тоже не пережил дигитал трансформашн
такой код в ах2012 и ниже выдавал 502 сообщения с ошибками и 502 инфо(что и ожидалось). при этом можно было скопировать содержимое одним кликом X++: int i; for( i =1; i <= 502; i++) error(strFmt("line error %1", i)); for( i =1; i <= 502; i++) info(strFmt("line info %1", i)); |
|
06.07.2017, 17:00 | #249 |
Участник
|
Ну слава богу. А то мне уж начало казаться что мне одному мягко говоря неудобен новый инфолог.
__________________
Дмитрий |
|
17.07.2017, 12:23 | #250 |
Участник
|
После изменения энума ModuleInventPurchSales чтоб он был Extensible, нашли такой код в классе MCRCatalogAreaAnalysisDP, так как стал валится Compiler Warning: ExtensibleEnumInNumericalAssignment
X++: AmountMST cost = this.itemPrice(ModuleInventPurchSales::Invent); AmountMST sales = this.itemPrice(ModuleInventPurchSales::Sales); ... //Avoid division by zero if (this.itemPrice(ModuleInventPurchSales::Sales == 0)) { mcrCatalogAreaAnalysisTmp.CogsPercent = 0; } else { mcrCatalogAreaAnalysisTmp.CogsPercent = cost / Sales; } Последний раз редактировалось kashperuk; 17.07.2017 в 12:26. |
|
|
За это сообщение автора поблагодарили: Stitch_MS (2), gl00mie (2), skuull (2), macklakov (1). |
17.07.2017, 14:52 | #251 |
Участник
|
|
|
17.07.2017, 16:03 | #252 |
Участник
|
Цитата:
Это изменение отревьюило 2 человека.. То есть втроем, с учетом того что сам девелопер тоже правил, они не смогли нормально скобочки сосчитать, и их никак не удивила эта странная констркция со сравнением двух энумов.. |
|
17.07.2017, 18:38 | #253 |
Участник
|
Есть такая полезная программка PVS-Studio.
Один из постов про нее на хабре очень в тему. https://habrahabr.ru/company/pvs-studio/blog/329090/ Не мешало бы аналог для АХ забабахать
__________________
// no comments |
|
17.07.2017, 21:48 | #254 |
Участник
|
А сколько ещё изменений было в этом ревью ? Там же есть зависимость между длинной изменения и качеством его ревью
|
|
18.07.2017, 00:27 | #255 |
Banned
|
Цитата:
X++: AmountMST cost = this.itemPrice(ModuleInventPurchSales::Invent); AmountMST sales = this.itemPrice(ModuleInventPurchSales::Sales); ... //Avoid division by zero if (sales == 0) { mcrCatalogAreaAnalysisTmp.CogsPercent = 0; } else { mcrCatalogAreaAnalysisTmp.CogsPercent = cost / sales; } |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
18.07.2017, 03:30 | #256 |
NavAx
|
Цитата:
if (this.itemPrice(ModuleInventPurchSales::Sales) == 0) Такое случается по запаре. Ничего особенного. Но вот фикс шедеврален! Это же человек не просто колотил код на скорость. Это вдумчиво выловили баг, подумали над его природой и исправили. Кажется я начинаю понимать почему местный саппорт так неохотно репортит даже доказанные баги с указанием где что и как поломано в продуктовую команду.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
18.07.2017, 06:14 | #257 |
Участник
|
Или через тернарный оператор:
X++: mcrCatalogAreaAnalysisTmp.CogsPercent = sales ? cost / sales : 0;
__________________
// no comments |
|
18.07.2017, 11:27 | #258 |
Участник
|
Еще где-то 10 других изменений. Я их побоялся смотреть
|
|
18.07.2017, 11:53 | #259 |
Участник
|
Ну у человека была задача пофиксить ошибку компиляции, которой раньше не было
Может быть он и видел эти скобочки, но исправление скобочек приведёт что что-то будет по другому работать, а следовательно могут упасть автоматы, а потом найдут того, кто поменял и спросят - зачем поменял, а автоматы не поменял, а менять автоматы надо полдня прогонять их и разбираться почему они падают(не факт что из-за изменения, но это надо ещё доказать), и вообще тебе надо было сделать чтоб компилировалось просто |
|
18.07.2017, 13:02 | #260 |
Участник
|
Как раз не вдумчиво. Механически заменили константу 0 на его аналог в енуме. Это чистой воды копи-пастинговый, рутинный подход. Программисты любят копи-паст, как ни крути.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|