|  10.06.2014, 17:00 | #1 | 
| Участник | код в CIL и без 
			
			Хочу поделиться опытом связанным с 2012: Был вот такой код X++: void test() { Map valList = new Map(Types::String, Types::Container); Real value; ; valList.insert(value, conNull()); } 1. Прежде всего, это передача различных типов данных. а) например, при работе с Net-сборками: Без цила работает так X++: void test(CLRObject _obj) { System.Collections.Hashtable hash; ; hash = new System.Collections.Hashtable(_obj); } X++: void test(CLRObject _obj) { System.Collections.Hashtable hash; System.Collections.IDictionary iDictionary; ; if ( #isDictionary ) { iDictionary = _obj; hash = new System.Collections.Hashtable(iDictionary); } } в) Аналогично, надо внимательно относиться к классам дочерним и родительским, к передаче данных через контейнер, к использованию anytype и common и т.д. 2. insert_recordset без цила позволяет писать в таблицу константы (используя переменные правильного типа), в циле этот номер не проходит, приходится выполнять две операции, сначала используя insert_recordset прописать идентификаторы, а затем при помощи update_recordset прописать текстовые константы. 3. Метод внутри метода (вложенный): с ним нет проблем, кроме одной: если вложенный метод является рекурсивным, то цил даже отказывается компилиться У меня пока все, может быть кто то еще с чем то подобным встречался ? Последний раз редактировалось Мартынов Дмитрий; 10.06.2014 в 17:02. Причина: ня | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2), Logger (3), Link (4), S.Kuskov (5), pedrozzz (1). | |
|  10.06.2014, 17:28 | #2 | 
| Участник | 
			
			Интересные наблюдения, пригодятся в работе, спасибо!
		 | 
|  | 
|  10.06.2014, 17:36 | #3 | 
| Участник | 
			
			Уточните версию. Это R2? для R3 актуально?
		 | 
|  | 
|  10.06.2014, 18:14 | #4 | 
| Участник | 
			
			R2
		 | 
|  | 
|  10.06.2014, 20:56 | #5 | 
| Молодой, подающий надежды | 
			
			CIL валится, если значение переменной класса-наследника инициализировать экземпляром родителя. Живой пример в стандартном функционале привел в другой ветке
		 | 
|  | 
|  10.06.2014, 21:03 | #6 | 
| Молодой, подающий надежды | Цитата: 
		
			В последнее время я попробовал работать с SysOperation вместо RunBaseBatch, а там все работает только через цил.
		
	 EnumTypeParameter = SysOperationExecutionMode EnumParameter = Synchronous то код будет выполняться как и прежде, без всякого CIL. Если для вызова сервиса используете свой контроллер (наследник SysOperationServiceController), то аналогично, указываем энум и значение на менюайтеме, а после создания экземпляра контроллера дергаем X++: controller.initializeFromArgs(_args); | 
|  | |
| За это сообщение автора поблагодарили: Мартынов Дмитрий (1). | |
|  11.06.2014, 12:56 | #7 | 
| Участник | |
|  | |
| За это сообщение автора поблагодарили: gl00mie (1). | |
|  29.06.2014, 18:52 | #8 | 
| Читатель | 
			
			Еще не особо работают неявные преобразования типов, например такой код X++: str key = conPeek([systemDateGet()], 1); | 
|  |