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

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

PavelT100

Во вью вывожу знаение категоризированной колонки вот по такой формуле:
Код:
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, но несмотря на это нолик дописывается - мозги вскипают.
 
H

hosm

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



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

PavelT100

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

Вариант:

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

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

nvyush

Спасибо. Проверил. Эта беда исчезла, но прорвало в другом месте, дело в том, что имеются еще записи со значениями поля 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"; "")?
 
H

hosm

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!