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, как будто поле является первым и единственным элементом массива. |
|