|  14.05.2004, 14:38 | #1 | 
| ---------------- | Копирование Range по имени (2.5) 
			
			Понадобилось мне скопировать набор range из одной таблицы в другую по одноименным полям.  Код, который воспроизводит данный процесс на тестовой формочке: PHP код: 
			Создал тестовый пример - форма с одним DS (InventTable) в init устанавливается фильтр на поле ItemId. При установке пользовательского фильтра на этоже поле и копировании ограничений получаем: [FIG1] Кто-то может объяснить такой феномен? | 
|  | 
|  14.05.2004, 15:51 | #2 | 
| Moderator | 
			
			Ну так все правильно, при добавлении ranges по одному полю они объединяются по ИЛИ (было бы странно, если бы поле имело одновременно 2 значения   , а более общие условия можно исключить как избыточные), а по разным полям - по И. Интересно, как ты получил такой исходный запрос с И? 
				__________________ Андрей. | 
|  | 
|  14.05.2004, 16:02 | #3 | 
| Moderator | 
			
			Wamr, извини, только сейчас заметил, что прикреплен пример формы. Теперь увидел, как получается такой запрос... Но addRange(), тем не менее, работает только так. 
				__________________ Андрей. | 
|  | 
|  14.05.2004, 16:08 | #4 | 
| Moderator | 
			
			Кстати, разные результаты в 2.5 и 3.0! В 2.5 работает как описано у тебя, а в 3.0 вообще при наложении фильтра остается только 1 range, последний: SELECT * FROM InventTable WHERE ((ItemId = 10817)) 
				__________________ Андрей. | 
|  | 
|  14.05.2004, 16:22 | #5 | 
| ---------------- | Цитата: 
		
			Изначально опубликовано Dron AKA andy  Но addRange(), тем не менее, работает только так.  PHP код: 
			 | 
|  | 
|  14.05.2004, 16:30 | #6 | 
| ---------------- | Цитата: 
		
			Изначально опубликовано Dron AKA andy  Кстати, разные результаты в 2.5 и 3.0! В 2.5 работает как описано у тебя, а в 3.0 вообще при наложении фильтра остается только 1 range, последний: SELECT * FROM InventTable WHERE ((ItemId = 10817)) Например, я из кода установил range со статусом LOCK, потом пользователь установил свой фильтр по томуже полю. В результате юзер не сможет поправить фильтр из стандартной формы фильтрации, так как статус у него сохранился (LOCK). Или еще. Опять же из кода поставили фильтр, потом пользователь установил свой, теперь у меня нет возможности грохнуть свой и сохранить юзерский. | 
|  | 
|  14.05.2004, 17:06 | #7 | 
| Moderator | Цитата: 
		
			shift = fieldId_Sour & 0xFFFF0000;
		
	  ? Добавление: А, понял, все же по info() видно   
				__________________ Андрей. | 
|  | 
|  14.05.2004, 17:15 | #8 | 
| ---------------- | Опыт - сын ошибок трудных 
			
			Методом проб и ошибок. Раньше часто замечал, что некоторые методы возвращают вместо fieldId значение 0x10000 + fieldId, но закономерности не видел. В данном случаи range добавленый программно возвращает fieldId, а вот добавленный юзер fieldId "с хвостиком". И что самое прикольно addRange понимает оба варианта, но воспринимает их как разные поля (т.е. объединяет по AND). | 
|  | 
|  14.05.2004, 17:20 | #9 | 
| ---------------- | Еще вспомнил 
			
			В Global есть метод PHP код: 
			  | 
|  | 
|  14.05.2004, 18:33 | #10 | 
| ---------------- | Интересный вывод PHP код: 
			Т.е. любое простое поле имеет дублирующий fieldId, как будто поле является первым и единственным элементом массива. | 
|  |