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