| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Нарпимер есть следущее: 
		
		
		
		
		
		
		
	X++: Dimensions dimensions; ; // обычный способ с явным указанием поля // dimensions.Num = "text1"; // а хотелось бы так: // dimensions.indexOfField(1) = "some text"; dimensions.insert();  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: dimensions.(FieldNum(Dimensions, Num)) = "some text";  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо. Но дело как раз в том что я не хочу явно указывать имя поля Num, моя переменная называется Column и принимает значения от 0 до кол-ва столбцов. Если я пишу  
		
		
		
		
		
		
		
	dimensions.(FieldNum(Dimensions, Column)) = "some text"; то возникает ошибка "Таблица не содержит это поле"  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По номеру поля в порядке его расположения в таблице Вы не обратитесь к нему. Обращаться можно по идентификатору. Предлагаю Вам переменную Column заполнять значением fieldNum.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Через dictTable, наверно, можно вытащить fieldId по порядковому номеру. 
		
		
		
		
		
		
		
	Но идея какая-то странноватая... может расскажите, зачем оно вам понадобилось?  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: dimensions.([COLOR=blue]FieldNum[/COLOR](Dimensions, "field_" + int2str(Column))) = [COLOR=red]"some text"[/COLOR]  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В цикле перебирать поля и заполнять их нужными значениями.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте через DictTable.fieldCnt2Id(int _cnt) получить id поля.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 
			
			yuriuss, я думаю вы неправильно ставите задачу. Еще раз, зачем вам это надо? Какую задачу вы решаете? В аксапте нет такого понятия, как "порядковый номер поля". Для этих целей есть fieldId. Перебирать поля можно по ним. 
		
		
		
		
		
		
		
	У филдНама второй аргумент - не стринг.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А я бы не спешил давать такой совет, так как он может оказаться вредным. Я бы сначала попробовал понять, какую задачу решаем-то?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Задача такая. Делаем импорт таблицы из одной базы в другую через ADO. Сразу скажу что надо сделать таким способом, без использования репликаций и стандартного импорт/экспорта. В принимающей базе создаётся конекшн, далее формируется Recordset в цикле обрабатываются строки где я знаю какие есть имена исходной таблицы. Чтобы не писать эквивалент полей в принимающей таблицы и исходной можно создать цикл где будут заполняться строки принимающей таблицы, примерно так: 
		
		
		
		
		
		
		
		
			X++: while (!adoRecordSet.EOF()) { for (col=0; col<=(adoFields.count()-1); col++) { adoField = adoFields.itemIdx( col ); fieldName = adoField.name(); value = adoField.value(); // ниже строчка какбы хотелось реализовать dimensions.(FieldNum(Dimensions, col)) = value; } dimensions.insert(); adoRecordSet.moveNext(); } Последний раз редактировалось yuriuss; 07.07.2008 в 15:44.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Когда Вы делаете экспорт таблицы добавте в recordset еще одно поле fieldId,  в которое помещайте fieldNum. А при импорте обращайтесь к этому полю. Так будет проще всего. Хотя, как здесь уже писали можно и через dictTable.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а почему Вам не использовать имена полей как советовал gl00mie? 
		
		
		
		
		
		
			X++: hile (!adoRecordSet.EOF())
{
for (col=0; col<=(adoFields.count()-1); col++)
{
            adoField = adoFields.itemIdx( col );
            fieldName = adoField.name();
            value = adoField.value();
 
            // ниже строчка какбы хотелось реализовать
            dimensions.(FieldName2id(tablenum(Dimensions), fieldName)) = value;
}
           dimensions.insert();
 
           adoRecordSet.moveNext();
}
				__________________ 
		
		
		
		
	aLL woRk aNd nO JoY MAKes jAck a dULL Boy  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возникает ошибка на строке 
		
		
		
		
		
		
		
	X++: dimensions.(FieldName2id([COLOR=blue]tablenum[/COLOR](Dimensions), fieldName)) = value;Цитата: 
	
		
			Ошиба времени выполнения. Неправильные типы аргументов в операции присвоения значения переменной.
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			объявите value как anytype. А получайте значение примерно следующим образом 
		
		
		
		
		
		
		
		
			value = this.getValue(adoField.value()); Где X++: anytype getValue(COMVariant _value) { anytype v; switch(_value.variantType()) { case COMVariantType::VT_BOOL: v = _value.boolean(); break; case COMVariantType::VT_BSTR: v = _value.bStr(); break; case COMVariantType::VT_INT: v = _value.int(); break; case COMVariantType::VT_DATE: v = _value.date(); break; case COMVariantType::VT_DISPATCH: v = COM::createFromVariant(_value); break; case COMVariantType::VT_I4: v = _value.int(); break; case COMVariantType::VT_R8: v = _value.double(); break; default: throw Error(strfmt("Неизвестный тип данных: %1", _value.variantType())); } return v; } } Последний раз редактировалось _scorp_; 07.07.2008 в 16:50.  | 
| 
	
 |