Przejdź do głównej zawartości

Funkcje warunkowe

W większości raportów w formułach stosujemy funkcje warunkowe.
Okazuje się, że Crystal Reports posiada wiele różnych konstrukcji warunkowych, które warto znać i dobierać do konkretnego przypadku.


Funkcja if-else-then

To podstawowa i najczęściej stosowana funkcja warunkowa w Crystal Reports.

Przykład:


Pamiętajcie, że typ formuły jest określany na podstawie pierwszej zwracanej wartości. W związku z tym nie możemy mieszać typów w jednej formule.

Przykład niepoprawny:
if {Orders Detail.Quantity} <> 0 then {Orders Detail.Quantity} else "nothing" 

Taka formuła wyświetli błąd, gdyż Crystal spodziewa się wartości numerycznej na podstawie pierwszej pierwszej wartości. Zatem musimy dokonać jawnej konwersji typu.

Przykład poprawny:
If {Orders Detail.Quantity} <> 0 Then ToText({Orders Detail.Quantity}) Else "nothing" 



Funkcje if-then-else można zagnieżdżać, ale lepiej zachować umiar.


Przykład:




Funkcja IIF
Bardzo podobną konstrukcją do if-else-then jest funkcja IIF i różni się tylko składnią.


Przykład:







Funkcja Switch
Funkcja switch umożliwia zastąpienie wielu zagnieżdżonych funkcji if-then-else jedną zgrabną konstrukcją. Dzięki temu nasza formuła stanie się bardziej czytelna i możemy uniknąć błędów.


Przykład



Funkcja select-case
To bardzo słabo udokumentowana funkcja (brak opisu w helpie) ale może bardzo uprościć nasze formuły.

Przykład:


Funkcja Choose
Jeszcze na koniec jedna ciekawa funkcja Choose, która na podstawie pierwszego argumentu, który musi być liczbą, zwraca określony element z listy. Oczywiście może być stosowana tylko w bardzo specyficznych sytuacjach.

Przykład

zwraca "środa".

Co ciekawe, można również zwracać zakresy danych.

Przykład

Komentarze

Popularne posty z tego bloga

Konwersja daty w CDN Optima

Crystal Reports jest bardzo często zintegrowany z popularnymi aplikacjami. Przykładem jest system CDN Optima . Początkujących użytkownikom sprawiają kolumny z datą, bo data nie jest zapisana jako datetime lecz jako liczba. Otóż data w CDN Optima zapisana jest w formacie Clarion, czyli liczba dni, które upłynęły od daty 1800-12-28 . (Czy ktoś wie co to za data w historii?) Dlatego jeśli chcemy użyć takiego pola na raporcie, pierwsze co powinniśmy zrobić to dokonać konwersji liczby na datę. W innym przypadku Crystal Reports nie będzie wiedział, że jest to data i żadne formatowanie dat, grupowanie po okresach nie będzie działać. Formuła do konwersji formatu Clarion na datę : Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Kody kreskowe w Crystal Reports 2008

Crystal Reports 2008 posiada wbudowaną obsługę kodów kreskowych. Niestety w standardzie otrzymujemy tylko Code 39. Jeśli chcemy skorzystać z innych kodów, np. Code 128 narzędzie kieruje nas na stronę firmy Azalea, gdzie możemy dokupić pakiet innych kodów. Czy to jedyne rozwiązanie? Na szczęście nie. Znalazłem stronę francuską poświęconą kodom kreskowych: http://grandzebu.net/index.php?page=/informatique/codbar-en/ean13.htm Strasznie stary wygląd strony, ale zawiera wiele cennych linków: Code 128 w postaci darmowej czcionki TTF: http://grandzebu.net/informatique/codbar/code128.ttf Code 128 w postaci darmowej funkcji UFL do Crystal Reports: http://grandzebu.net/informatique/codbar/code128_Crystal%20reports.zip Co więcej, tych rozwiązań można również użyć w starszych wersjach Crystal Reports.

Słownie złotych

Czasami na raportach, na przykład na fakturach, zachodzi potrzeba zamiany liczby na słownie złotych. Crystal to umożliwia ale tylko na język ang. Dlatego napisałem funkcję UFL do CR, która to realizuje. Jest to funkcja typu Crystal Reports UFL (User Function Libraries) i korzysta sie z niej tak samo jak z wbudowanych funkcji Crystal Reports. Obecny zakres liczb od 0 do biliona. Opis instalacji 0. Pobierz 1. Rozpakować archiwum i skopiować plik CRUFLslw.dll do np. katalogu C:\WINDOWS\system32 2. Uruchomić linię poleceń: CMD 3. Przejść do katalogu z plikiem: CD C:\WINDOWS\system32 3. Uruchomić polecenie rejestracji biblioteki: regsvr32 CRUFLslw.dll Powinno wyświetlić się okno z informacją "DllRegisterServer in CRUFLslw.dll succeeded." 4. Uruchomić Crystal Reports 5. Utworzyć nową formułę i wpisać np. slownie(123.45) Przetestowałem również z Crystal Reports 2008 i działa.