|  14.07.2010, 12:19 | #1 | 
| Участник | Помогите с range 
			
			Здравствуйте. Помогите с range, есть такой код: X++: QueryBuildRange range; str strOrganization; ; range = SysQuery::findOrCreateRange(queryRun.query().dataSourceTable(tableNum(RPayTrans)),fieldnum(RPayTrans, HrmOrganisationId) ); //строку упростили для наглядности (переменные достаются из контейнера) strOrganization = 'HrmOrganisationId = ' + "N'ЦД0001'" + ' OR HrmOrganisationId = ' + "N'УР0019'"; range.value("( " + strOrganization + ") "); Правильный запрос выглядит так: SELECT * FROM EmplTable ORDER BY EmplTable.EmplId ASC EXISTS JOIN * FROM RPayTrans WHERE EmplTable.EmplId = RPayTrans.Emplid AND ((PayPeriod = {ts '2010-06-30 00:00:00.000'})) AND ((NOT (Amount = 0))) AND ((HrmOrganisationId = N'ЦД0001' OR HrmOrganisationId = N'УР0019')) У меня же получается: SELECT * FROM EmplTable ORDER BY EmplTable.EmplId ASC EXISTS JOIN * FROM RPayTrans WHERE EmplTable.EmplId = RPayTrans.Emplid AND ((PayPeriod = {ts '2010-06-30 00:00:00.000'})) AND ((NOT (Amount = 0))) AND (((HrmOrganisationId=N'ЦД0001'OR HrmOrganisationId=N'УР0019'))) Как я понимаю, все дело в тройных кавычках. Как передать value чтобы было меньше кавычек не понимаю, или же как передать сразу контейнер? Спасибо. | 
|  | 
|  14.07.2010, 12:27 | #2 | 
| Участник | 
			
			range.value(QueryUtils::in(контейнер)); соответственно контейер должен содержать только ['ЦД0001','УР0019'] (т.е. коды подразделений) 
				__________________ Лучше сделать и жалеть, чем жалеть что не сделал | 
|  | 
|  14.07.2010, 12:34 | #3 | 
| Участник | Цитата: 
		
			QueryUtils
		
	 у нас ax4.0, sp2 | 
|  | 
|  14.07.2010, 12:57 | #4 | 
| Участник | Цитата: 
		
			а так не пробовали? X++: range.value(sysQuery::value(con2str(, ",")));Подумал и понял что сморозил глупость. Нужно при доставании из контейнера проделывать в цикле что-то вроде такого X++: for // перебор { strOrganization = Global::queryRangeConcat(strOrganization, SysQuery::value(conpeek(, i))); } range.value(strOrganization); 
				__________________ If it ain't broke, take it apart and find out why (с) Последний раз редактировалось Alexanderis.ua; 14.07.2010 в 13:15. Причина: написал не подумав как следует. каюсь. | 
|  | 
|  14.07.2010, 13:46 | #5 | 
| Участник | 
			
			УПС, это самописны класс Вот код этого метода можете попробовать X++: static str in(container _values, str _prefix="") { str result=""; int i; for(i=1;i<=conLen(_values);i++) { if(result) result+=","; result+=_prefix+queryValue(conPeek(_values, i)); } return result; } 
				__________________ Лучше сделать и жалеть, чем жалеть что не сделал | 
|  | |
| За это сообщение автора поблагодарили: Poleax (1). | |
|  14.07.2010, 13:48 | #6 | 
| Участник | 
			
			Или так X++: str result=""; int i; for(i=1;i<=conLen( );i++) { if(result) result+=","; result+=queryValue(conPeek( , i)); } range.value(result); 
				__________________ Лучше сделать и жалеть, чем жалеть что не сделал | 
|  | |
| За это сообщение автора поблагодарили: SashaR (1). | |
|  14.07.2010, 14:05 | #7 | 
| Участник | 
			
			Огромное спасибо, добавила этот метод и всё заработало. Чуть позже через global поиграюсь. ) Ещё раз, всем огромное спасибо. | 
|  | 
|  14.07.2010, 21:14 | #8 | 
| Участник | 
			
			Один минус этого метода - это ограничение длинны запроса в sql (в данном случае если много значений) . Выход - join. ))
		 
				__________________ Лучше сделать и жалеть, чем жалеть что не сделал | 
|  |