Страница 1 из 1
Использование Выражения в Выражении над Выражением?
Добавлено: 04 окт 2006, 07:35
Александр

Подскажите кто знает.
Исходная позиция - выбор одного объекта в разных шагах действия Party по атрибуту
'Atr1' и переменным
'a' 'b' из действия в выражении поиска
1. Выражение
Найти всех у кого атрибут
Atr1 равен
a -'Выражение =
а' (Все понятно)
2. Выражение в выражении
Найти всех у кого атрибут
Atr1 равен
'55' -'Выражение =
if(b=1,'55','AA')' (Тоже все ясно)
3. Выражение в выражении над выражением
Найти всех у кого 15 бит
Atr1 равен
0 - 'Выражение =~???~ if(abs( Int (
Atr1 /16384) - Int (
Atr1 / (16384*2) )*2 )=0,0,1) Как это можно сделать средствами Лоции?? Что писать вместо
Atr1?
Т.е. Как использовать в выражении поиска выражение использующее само значение атрибута по которому строится поиск? Я понимаю что именно это значение мы и используем (в фоне)

Но есть ли какое то имя у этого значения - чтобы вставить его в функцию
Другими словами строится запрос по атрибуту, и выбирается все - если
значение этого атрибута (системная переменная с текущим значеним атрибута) прошедшее через функцию равно допустим '0' Как добраться до этой системной переменной
Средсвами SQL по моему (не знаю) можно это сделать - а средствами Лоции??

Добавлено: 04 окт 2006, 09:48
Anderyt
хм... не хватило терпения о конца проверить, но пришла в голову такая мысль. а что если проверять, не больше ли значение атрибута чем сумма всех старших разрядов? ну или там как они называются.. вообщем, если всего 16 разрядов, а мы хотим проверить значение 12-го, то нужно сравнить атрибут с 2^15+2^14+2^13. если атрибут больше - то 12-й = 1, если меньше - то 12-й = 0... или не все так просто?
я уже забыл все детали, для меня выражение abs( Int (Atr1 /16384) - Int (Atr1 / (16384*2) )*2 ) - одна большая тайна...
Добавлено: 04 окт 2006, 10:08
Anderyt
а, нет.... совсем не так...
хм... думаем дальше...
Добавлено: 04 окт 2006, 10:09
Александр
Понимаешь, все дело в том, как в выражение вставить значение атрибута?
>а мы хотим проверить значение 12-го, то нужно сравнить атрибут с 2^15+2^14+2^13.
Как сравнить? Где в условиях отбора объекта, и как вставить значение атрибута подлежащего сравнению?
Условия отбора/Атрибуты/Задание условия поиска объектов по атрибутам
(найти все объекты с 15 нулевым битом атрибута 'Информационный')
1. Тип - 'Атрибут'
2. Атрибут - 'Информационный'
3. Опер - '='
4. Значение (выражение) - 'if(abs( Int (Информационный /16384) - Int (Информационный / (16384*2) )*2 )=0,0,1)
Как в формулу засунуть атрибут Информационный по которому в то же время осуществляется отбор
P/S Формула простая
Код: Выделить всё
Без знака( Целое(Байт/№ бита) - Целое(Байт/(№ бита*2))*2 )
Добавлено: 04 окт 2006, 10:24
Anderyt
дак вот в том то и дело, что не вставлять значение атрибута в выражение, а СРАВНИВАТЬ это значение с чем то...
то есть
Атрибут / Информационный / > / число
или
Атрибут / Информационный / < / число
или и то и другое...
весь вопрос в том, что это за число, сравнив с которым значение, мы бы смогли понять, чему равен определенный бит этого значения?
или это нереально, найти такие числа?... мне уже начинает казаться, что нереально

Добавлено: 04 окт 2006, 10:38
Anderyt
а... вообщем, я снова за свое - если не могу найти решение проблемы, которая связана с имеющейся концепцией организации данных, то пытаюсь изменить концепцию так, чтобы проблемы не было (как и в случае с ветвлением в отчетах и связанными объектами)

если набор логических данных 10011001 представить не в виде числа 153, а в виде строки 8=1;7=0;6=0;5=1;4=1;3=0;2=0;1=1, то можно будет:
в действиях изменять значение определенного бита (если 4-й = 1 и мы хотим сделать его = 0, то ищем строчку 4=1, отрезаем все ДО этой подстроки, добавляем 4=0 и добавляем то, что было в исходной строке после найденной подстроки)
в действиях определять, чему равен определенный бит (если в строке есть подстрока 4=1, то 4-й бит = 1, если нету - то он = 0)
в формах объектов находить значение определенного бита (как в действии, поиском подстроки)
и наконец!
в действии искать объекты с опред-м значением опред. бита, с пом-ю запроса
Атрибут/Информационный/*/%4=1
вот...
Добавлено: 04 окт 2006, 10:47
Александр
Спасибо конечно
но вопрос не в том как обойти проблему (мы ее и так обошли немного подругому) - а в том можно ли использовать некую системную переменную содержащую значение текущего атрибута в выражении??
Ведь эта переменная где то есть точно, но просто закрыта от пользователей
Ладно, уже спросил у Техподдержки - ответят - напишу.
Добавлено: 04 окт 2006, 11:03
Anderyt

а как обошли, если не секрет?
Добавлено: 04 окт 2006, 11:34
Александр
Информационный байт/байты(числовые атрибуты) мы используем со многими объектами для хранения флагов и использования их в действиях и отображения в формах но в данном контексте еще и для выбора/поиска объектов
смотрим картинку
http://www.lplm.ru/phpBB2/viewtopic.php?t=156 где нарисована форма с флагами
Смысл следующий есть байт (например) 10001000 каждый бит которого
визуально именован (Машиностроение, ГИС и т.д)
Т.к. нет инструмента для предварительного анализа атрибута в поиске/выборе мы вводим 'искуственную' строку которая в соответсвии с информационным байтом принимает вид:
10001000 -'Машиностроение;ГИС'
10000000 -'Машиностроение'
00100001 -'AutoDesk;Литье'
00000000 -''
соответственно делаем поиск по искуственной(вспомогательной) строке
В общем теже... вид сбоку

Не хотели использовать лишнее-но пока пришлось

Добавлено: 04 окт 2006, 11:48
Anderyt
а, ну да, действительно... уже было упоминание об этой строке...
вот только... зачем хранить два, по сути одинаковых, атрибута?
ну это уже так, оффтопик, как обычно

Добавлено: 04 окт 2006, 13:01
Александр
Лоция с битами и предварительным анализом атрибута - не работает

а жаль...
тема закрыта
