Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Witam, jestem początkujący.
W Crystalu próbuje zamienić liczbę w formacie 1.000 na liczbę 1.

Założenia:
-jeśli w polu liczba wyświetla się w formacie 1.00 lub 1.000 to powinna zostać zamieniona na 1
-jeśli liczba ma wartość 1.50 to powinna zostać zamieniona na 1.5

Jak tego dokonać?
(CR8,5)Ten post został edytowany przez Autora dnia 10.09.16 o godzinie 12:38
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Witaj w gronie użytkowników Crystal Reports :)

Niestety nie ma gotowej takiej opcji w Crystal Reports ale możemy formatować warunkowo.

1. Zaznacz pole i wybierz opcję Format Field
2. Na zakładce Number wciśnij przycisk Customize
3. Przy opcji Decimals wciśnij przycisk z ołówkiem

Obrazek


4. Wpisz formułę poniżej, tylko pamiętaj aby zamienić tabela.pole na własne pole.


Len(Replace(ToText({tabela.pole} - Truncate({tabela.pole})), '0', '')) - 1


Gotowe!

Jako zadanie domowe proponuję odszyfrowanie tej formuły ;-)
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Hej, dzięki za przykład, niestety nie działa tak jak powinien, bo dodaje 000 na końcu:

Wygląda to tak:

Obrazek


Gdy użyje następującej formuły:
if (truncate(CurrentFieldValue)-CurrentFieldValue)<>0 then 2
else 0


To wydruk już jest lepszy:

Obrazek


Nadal jednak w pierwszej pozycji nie obcina tego zera na końcu a powinno..
Jest jakiś błąd w formule że tego zera nie obcina czy zwykły brak jakiejś części formuły?
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

To ciekawe bo u mnie działa prawidłowo:


Obrazek


Po lewej stronie oryginalna wartość a po prawej sformatowana formułą.

Twoja formuła na sztywno zaokrągla do 2 miejsc po przecinku.
Trzeba właśnie policzyć ile miejsc ma zaokrąglać.

Na podstawie twojej formuły nieco udoskonaliłem swoją :)


Len(Replace(ToText(CurrentFieldValue - Truncate(CurrentFieldValue)), '0', '')) - 1


Ale pomyślę jeszcze czy można ją uprościć aby nie konwertować na tekst.
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

U mnie nadal na wydruku dodaje 000 na końcu..
Może przyczyna leży w innej wersji CR?
Ja używam wersji 8,5 (wymusza to na mnie Subiekt GT, inne wersje nie działają).Ten post został edytowany przez Autora dnia 12.09.16 o godzinie 12:10
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Spróbuj w takim razie przetestować CR 8.5

Wpisz do formuły Decimals wartość z ręki, np. 0, 1, 2 itd i zobacz czy dobrze formatuje.

Drugi test to przenieś mój kod do zwykłej formuły, umieść na raporcie i zobacz jakie wartości zwraca.
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Gdy dodaję w pole formuły pojedyncze cyfry 0, 1, 2, 3.. to zwraca wartości prawidłowe do określonej ilości miejsc po przecinku, no i zaokrągla do pełnych wartości tak jak być powinno

Po wklejeniu kodu do pola pustej formuły i umieszczeniu na raporcie daje całkowite bzdury nie mające związku z polem ilości.
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Marek O.:
Po wklejeniu kodu do pola pustej formuły i umieszczeniu na raporcie daje całkowite bzdury nie mające związku z polem ilości.

A zamieniłeś CurrentFieldValue na pole Ilość?
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Tak, bo inaczej krzyczał że formula może być wykorzystana tylko przy formatowaniu danego pola :)

Zamiast CurrentFieldValue wstawiałem {Obroty.ob_Ilosc} i wtedy pokazywał takie cuda:

Obrazek


-edit-
Udało się, sprawa rozwiązana tak:
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},0) then 0 else
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},1) then 1 else
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},2) then 2 else 3
Ten post został edytowany przez Autora dnia 12.09.16 o godzinie 16:09
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Marek O.:
Udało się, sprawa rozwiązana tak:
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},0) then 0 else
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},1) then 1 else
If {Obroty.ob_Ilosc}=truncate({Obroty.ob_Ilosc},2) then 2 else 3

Nie podoba mi się to rozwiązanie bo jest sztywne i ma powielony kod.
Ale to twój raport ;-)
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Rozwiązanie jest może niezbyt PRO, z tym że jak do tej pory jest jedynym które spełniło swoje zadanie, dopóki nie znajdę innego to będzie musiało zostać jak jest :)
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Rozwiązanie bardziej PRO:


local NumberVar i := 0;
while not(CurrentFieldValue=truncate(CurrentFieldValue,i))
do i := i + 1;
i
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Działa ok z jednym mankamentem, o ile wartości typu
0,2
1
1,3
2,45 wyświetla poprawnie i obcina zera na końcu,
to wartość 1,234 pokazuje jako 1,2340.. tak więc to jeszcze nie to
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

To ciekawe bo wpisałem w pole 1.234

z formułą:


local NumberVar i := 0;
while not(CurrentFieldValue=truncate(CurrentFieldValue,i))
do i := i + 1;
i


i wyświetla mi liczbę 1,234
Marek Ostrowski

Marek Ostrowski ogolne it, plik

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Sprawdzałeś na Subiekcie czy w Crystalu?

Podejrzewam że to może być specyfika samego Subiekta że w ten sposób to działa
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zamienić wartość liczbową z przecinkiem na liczbę...

Tylko w Crystalu bo nie mam obecnie zainstalowanego Subiekta.
Ale Subiekt nie ma tutaj nic do tego, raczej wersja CR 8.5 Choć ta opcja nie była zmieniana od lat...



Wyślij zaproszenie do