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ę:

Zamiana daty i czasu na data-czas

Kolejne szkolenie u klienta i kolejne wyzwanie za mną... Chodziło o wygenerowanie raportu czasu pracy z uwzględnieniem, że zmiana następuje o godz. 6:00 a nie o północy. To znaczy, że godziny do 6:00 powinny być jeszcze zaliczane do dnia poprzedniego. Dodatkowym utrudnieniem u klienta był fakt, że data w bazie danych była rozbita na 2 pola: data w formacie: yyyy-mm-dd 00:00:00 godzina w formacie: 1900-01-01 HH:mm W takim razie do dzieła! Załóżmy, że mamy następującą tabelę: 1. Tworzymy formułę która zamieni 2 osobne pola z datą i czasem w jedno pole typu datetime: W ten sposób otrzymamy jedną wartość w formacie yyyy-mm-dd HH:mm 2. Następnie od tak utworzonej daty odejmujemy 6 godzin: Otrzymamy w rezultacie coś takiego: Kolumna WorkDate wyświetla datę do której została zakwalifikowana pozycja. Na podstawie tak utworzonej formuły można utworzyć grupowanie na raporcie.

Koszmar z limitem

Witajcie po dłuższej przerwie. Jakiś czas temu prowadziłem szkolenie w firmie i z jakiegoś powodu nie chciały nam się wyświetlać się wszystkie tabele z ich bazy danych. Na początku myślałem, że to kwestia uprawnień ale okazało się, że użytkownicy mają prawa do odczytu wszystkich tabel a problem wynika z czegoś innego... Okazało się, że winowajcą jest sam Crystal Reports, który ma ustawiony limit(!) na ilość obiektów pobieranych elementów ze struktury bazy danych, czyli tabel, widoków i procedur składowanych razem wziętych. Domyślnie jest to  8000 . Większość baz danych nie przekracza tego limitu, więc możecie spać spokojnie, ale przy większym systemie może nadejść koszmar, który zerwie Was na równe nogi. Pamiętajcie wówczas o moim blogu -  ten limit można zmienić (w praktyce podwyższyć). Niestety nie ma do tego opcji w Crystal Reports, trzeba pogrzebać w rejestrach windows: Zamykamy Crystal Reports Uruchamiamy aplikację Edytor rejestru , z linii poleceń: ...