• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Формула во вью выводит очень странные значения

  • Автор темы PavelT100
  • Дата начала
P

PavelT100

#1
Во вью вывожу знаение категоризированной колонки вот по такой формуле:
Код:
v := Ver;
s := @RightBack(v; ".");
lll := @Length(s);

@If( lll = 1; @LeftBack(v; ".") + ".0" + s; v) + " ---- " + s + " ---- " + @Text(lll);
Если поле Ver имеет одно значение - то проблем не возникает.
Но вот попалась запись, которая имеет два значения "7.4.23" и "7.5.2"
Такая запись во вью появляется в двух местах.
Значение "7.5.2" правильно преобразуется и в итоге отображается "7.5.02 ---- 2 ---- 1" - это то, что я хотел.
Но значение "7.4.23" на удивление преобразуется криво "7.4.023 ---- 23 ---- 2". Ну как такое может быть ?
Я специально для отладки вывожу lll - оно действительно равно 2, не равно 1, но несмотря на это нолик дописывается - мозги вскипают.
 

hosm

* so what *
18.05.2009
2 442
6
#2
Для понимания см. хелп:
Operations on lists
Number equality, pair-wise - обрати внимание на 2-й пример )
@if(2:1=1) даст True



Я бы заменила на нечто подобное такому (проверьте)
Код:
s := "00"+@RightBack(v; ".");
@LeftBack(v; ".") +@Right(s;2);
 
P

PavelT100

#3
Спасибо. Проверил. Эта беда исчезла, но прорвало в другом месте, дело в том, что имеются еще записи со значениями поля Ver, которые не содержат точек вообще - в том варианте который вы мне порекомендовали эти значения заменяются на "00" - что плохо.

Вариант:

@If( @Contains(v;".") ; @LeftBack(v; ".") +"." +@Right(s;2); v)

увы не катит, я уже понимаю почему - потому, что @Contains(v;".")
для набора "Relise" : "7.5.12" выдает истину. Как мне заставить логические функции работать только с тем элементом массива который выводится в данный момент ?
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
Спасибо. Проверил. Эта беда исчезла, но прорвало в другом месте, дело в том, что имеются еще записи со значениями поля Ver, которые не содержат точек вообще - в том варианте который вы мне порекомендовали эти значения заменяются на "00" - что плохо.

Вариант:

@If( @Contains(v;".") ; @LeftBack(v; ".") +"." +@Right(s;2); v)

увы не катит, я уже понимаю почему - потому, что @Contains(v;".")
для набора "Relise" : "7.5.12" выдает истину. Как мне заставить логические функции работать только с тем элементом массива который выводится в данный момент ?
Может так:
@Replace(@If( @Contains(v;".") ; @LeftBack(v; ".") +"." +@Right(s;2); v); "00"; "")?
 

hosm

* so what *
18.05.2009
2 442
6
#5
ну, я же не могла предугадать, что у вас формат с точками не задан жестко :(
тогда обрабатывайте по одному значению - посмотрите хелп в сторону @for или @transform.
P.s. ошибка - они во вьюшках не работают :(

Хотя нет, это, наверно, хелп врет. @for юзали точно )))