| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Переменная типа специфического перечисления
			 
			
			Здравствуйте. 
		
		
		
		
		
		
		
	Создаю функцию для получения переменной перечисления из formComboBoxControl'a результатом работы должен быть anyType. Проблема в сценарии, когда у контрола заполен enumType. Функция selection возвращает int - тип данных не соответствует первоначальному. Логично использовать функцию enumType в связке с selection для получения нужного значения. В Аксапте есть функция str2num, которая позволяет получить переменную типа специфического перечисления. Однако, первым параметром вызова она уже ожидает переменную типа целевого перечисления. Если у контрола заполнен extendedDataType - никакой здесь проблемы нет: X++: anyType ret = new Dictionary().typeObject(_formComboBoxControl.extendedDataType()).getValue(); ret = _formComboBoxControl.selection();  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Неочевидно что вы хотите. 
		
		
		
		
		
		
		
	Плясать имхо стоит от selection Вы можете зная selection определить значение / метку что соответствует выбранному и потом уже по ней найти соответствующее значение в типе  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			any2enum - пробовал, из int (formComboBox.selection()) не получится enum. 
		
		
		
		
		
		
		
		
			Решение придумал на основании похожей ветки, где нужно было из anyType получить enumId (Как получить из элемента enum-а код типа (enum-а)?). Не удалось придумать что-то проще, чем "закат солнца": X++: str strHexBigToLittleEndian(str _hexStr) { str ret; int jMax = strLen(_hexStr), j = jMax; #DEFINE.NEXTCHAR(1) #DEFINE.OFFSET(2) ; while (j >= #OFFSET) { ret += subStr(_hexStr, j - #NEXTCHAR, #OFFSET); j -= #OFFSET; } return ret; } X++: anyType int2enum(enumId _enumId, int _value) { #DEFINE.BLOBFORMAT('07fd04\%1ff') #DEFINE.ENUMIDOFFSET(8) #DEFINE.ENUMIDX(1) #DEFINE.HEXWIDTH(6) str blobStr = strFmt(#BLOBFORMAT, strHexBigToLittleEndian(int2hex(_enumId << #ENUMIDOFFSET | _value, #HEXWIDTH))); ; return conPeek(ContainerClass::blob2Container(BinData::stringToData(blobStr)), #ENUMIDX); } Конечно, на тему быстродействия заикаться не приходится, ну для разовых операций - вполне. Последний раз редактировалось Товарищ ♂uatr; 04.06.2025 в 16:03.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (5), Logger (5). | |
| Теги | 
| dictenum::value2id(), enum | 
| 
	
	 | 
	
		
  |