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