| 
			
			 | 
		#241 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот еще из новинок D365 - когда создаете индекс по умолчанию он теперь уникальный -Allow duplicates = No. А чтобы так сказать преждевременно не спугнуть разработчика, новый движок синхронизации в целях оптимизации вообще не пытается синхронизировать таблицу в окружении разработки если менялись только индексы. 
		
		
		
		
		
		
		
	Т.е. создаете индекс(не меняя никаких сво-в), тестируете, все ОК. далее заливаете на LCS, отдаете клиенту и вуаля - получаете ошибку синхронизации. Создал по этому поводу реквест на ideas https://ideas.dynamics.com/ideas/dyn...ions/ID0001383  | 
| 
	
 | 
| 
			
			 | 
		#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)) Я ничего не понял.  
		 | 
| 
	
 | 
| 
			
			 | 
		#243 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
коды системных полей могут отличаться в map и в таблицах, которые реально находятся под мапом.  | 
| 
	
 | 
| 
			
			 | 
		#244 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Интересно если в первом случае сделать fieldNum(Common, DataAreaId)? 
		
		
		
		
		
		
			
		
		
		
		
	По-идее должны быть одинаковые идентификаторы системных полей, но вдруг  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#246 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		
		
		
		
			 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2). | |
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#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)); ![]()  
		 | 
| 
	
 | 
| 
			
			 | 
		#249 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну слава богу. А то мне уж начало казаться что мне одному мягко говоря неудобен новый инфолог.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Дмитрий  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#251 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#252 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Это изменение отревьюило 2 человека.. То есть втроем, с учетом того что сам девелопер тоже правил, они не смогли нормально скобочки сосчитать, и их никак не удивила эта странная констркция со сравнением двух энумов..  
		 | 
| 
	
 | 
| 
			
			 | 
		#253 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Есть такая полезная программка PVS-Studio. 
		
		
		
		
		
		
			Один из постов про нее на хабре очень в тему. https://habrahabr.ru/company/pvs-studio/blog/329090/ Не мешало бы аналог для АХ забабахать  
		
				__________________ 
		
		
		
		
	// no comments  | 
| 
	
 | 
| 
			
			 | 
		#254 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		 | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#256 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
if (this.itemPrice(ModuleInventPurchSales::Sales) == 0) Такое случается по запаре. Ничего особенного. Но вот фикс шедеврален! Это же человек не просто колотил код на скорость. Это вдумчиво выловили баг, подумали над его природой и исправили. Кажется я начинаю понимать почему местный саппорт так неохотно репортит даже доказанные баги с указанием где что и как поломано в продуктовую команду. 
				__________________ 
		
		
		
		
	Isn't it nice when things just work?  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
| 
			
			 | 
		#257 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Или через тернарный оператор: 
		
		
		
		
		
		
			X++: mcrCatalogAreaAnalysisTmp.CogsPercent = sales ? cost / sales : 0; 
				__________________ 
		
		
		
		
	// no comments  | 
| 
	
 | 
| 
			
			 | 
		#258 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		 | 
| 
	
 | 
| 
			
			 | 
		#259 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну у человека была задача пофиксить ошибку компиляции, которой раньше не было 
		
		
		
		
		
		
		
	![]() Может быть он и видел эти скобочки, но исправление скобочек приведёт что что-то будет по другому работать, а следовательно могут упасть автоматы, а потом найдут того, кто поменял и спросят - зачем поменял, а автоматы не поменял, а менять автоматы надо полдня прогонять их и разбираться почему они падают(не факт что из-за изменения, но это надо ещё доказать), и вообще тебе надо было сделать чтоб компилировалось просто  
		 | 
| 
	
 | 
| 
			
			 | 
		#260 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Как раз не вдумчиво. Механически заменили константу 0 на его аналог в енуме. Это чистой воды копи-пастинговый, рутинный подход. Программисты любят копи-паст, как ни крути.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/  | 
| 
	
 |