| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Особенности работы X++ и CIL
			 
			
			Добрый день!  
		
		
		
		
		
		
		
	При реализации сервиса в Dynamics AX 2012, внутри которого идет работа со стандартными классами, я нашел некоторую особенность. Код на Х++ и CIL работает по-разному: X++: container emptyFields; ; if (! _rec.DocumentNumber) { emptyFields += "@SYS8434"; } if (! _rec.DocumentDate) { emptyFields += "@SYS2587"; } if (! _rec.PayerAccount) { emptyFields += "@GLS100568"; } if (! _rec.PayeeAccount) { emptyFields += "@GLS100577"; } if (!_rec.AmountCur) { emptyFields += "@SYS860"; } if(emptyFields) { // даже если emptyFields пустое, в CIL вызывает исключение throw error(strFmt("@GLS115341", con2Str(emptyFields, #comma))); }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: if (conlen(emptyFields) > 0)
{
...
} | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А можно подробнее, как это "писать код на CIL"?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		![]() ldc.i4.0 bne.un.s 004a ldc.i4 0x5182 stloc.0 br.s 004b nop ldloc.0 ret  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: EVGL (1). | |
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Прям весь?  
		
		
		
		
		
		
			  Если есть примеры не корректной работы стандартной функциональности MS - пишите запросы в поддержку, они исправят.
		
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#. 
		
		
		
		
		
		
			На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?". 
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: ski (1). | |
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Утрирую, конечно, но как минимум проверять надо теперь весь.   
		
		
		
		
		
		
		
	Не писал никогда, бизнесу функционал нужен "уже вчера", а МС когда выпустят свои обновления?  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Ivanhoe
			 
 
			Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#. 
		
	На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?".  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Забавный вопрос. Конечно же используем X++ И конечно же он компилируется в CIL.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Isn't it nice when things just work?  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А зря. Обычно система работает довольно быстро, и хотфикс получают в короткие сроки - и тогда "все тестировать" не придется.
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Через 4 года я понял, что значит "Писать код на CIL". 
		
		
		
		
		
		
			1. Пример для числа с плавающей точкой На X++ можно написать так: myTable.(myFieldNum) = 0 А на CIL надо обязательно писать так: myTable.(myFieldNum) = 0.0. Иначе будут очень интересные эффекты. 2.Пример для даты На X++ можно написать так: str key = con2Str([transDate]) А на CIL надо обязательно писать так: str key = con2Str([strfmt("%1", transDate)]), иначе вместо даты в переменной key окажется строка "Microsoft.Dynamics.Ax.Xpp.AxShared.Date". 
				__________________ 
		
		
		
		
		
			Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 28.10.2020 в 11:44.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: AlGol (3), sukhanchik (4). | |
| 
			
			 | 
		#16 | 
| 
			
			 Axapta Retail User 
		
			
	 | 
	
	
	
		
		
		
		 
			
			rPayRateTrans.RateValue     = strFmt('%1', rhrmWorkConditionClass.PayRateValue); 
		
		
		
		
		
		
		
	Подобная запись ставки вызывает увеличение зарплаты в 100 раз при исполнении в CIL  
		 | 
| 
	
 | 
| 
	
	 | 
	
		
  |