I hate you Crystal Reports

Zaczynając moją pracę jednym z pierwszych zadań było zaznajomienie się z Crystal Reports. Na szczęście nie było to moje główne zadanie. Wprawdzie czasem po dłuższej sesji kodowania odpoczynkiem było przygotowanie jakiegoś raportu. Jednak czym dalej w las tym ciemniej. Ponieważ uczyłem się budowania raportów (a nie było to moje główne zajęcie) popełniałem błędy. Czasem wynikały one z niewłaściwego przekazywania danych a czasem z nieznajomości do końca technologii. Najgorzej jednak było poprawiać raporty już istniejące. Dziś na szczęście budowanie raportów to już nie moje zadanie.
I w zasadzie mógłbym ten wpis skończyć w tym miejscu, gdyby nie jeden drobiażdżek. Otóż pewnego pięknego dnia zostałem poinformowany, że mój raport “czasami” nie działa dobrze. “Czasami” czyli po prostu nie działa. No cóż musiałem skonsultować z klientem co takiego nie działa.

Klientka: Panie Wojtku bo mi program czasami źle drukuję kwotę słownie.
Ja: Nie wydaje mi się, żeby to było możliwe, mamy wielu klientów i nie było nigdy narzekań ma tą funkcję zresztą to nawet nie my przygotowywaliśmy funkcję zamieniającą kwotę na słowa. Funkcję tę przygotowała duża firma SAP więc to nie jest niesprawdzone narzędzie.
K: Ja rozumiem i nigdy nie narzekałam, ale wypisuje mi kwotę o złotówkę większą.
J: Niemożliwe, niech mi Pani to pokażę.

… 2 minuty później

J: Bardzo przepraszam, niespodziewałem się takiego obrotu sprawy. Poprawię to jak szybko się tylko da.

Crystal Reports posiada świetną(jak kiedyś sądziłem) funkcję ToWords. Przyjmuje ona za parametr liczbę, którą zamienia na słowa. Opcjonalnym parametrem jest określenie precyzji(domyślnie dwa).
Czyli w moim przypadku

ToWords({@value})

Zanim napiszę co się stało małe zadanko.
Oto cztery liczby:

  • 1.6
  • 1.4
  • -1.6
  • -1.4

Przeczytajcie je na głos po polsku i angielsku. Proste co nie?
Tylko że według Crystal Reports popełniliście błąd. Po angielsku przeczytaliście wszystko poprawnie a po polsku popełniliście jeden błąd. Według Crystal Reports -1,6 czytamy minus dwa i 60/100. Liczby ujemne gdzie część ułamkowa jest większa niż 1/2 są odczytywane jako liczby o jeden mniejsze. Wysłałem maila do pomocy technicznej i nie dostałem odpowiedzi. Pobrałem najnowszą wersję i problem dalej nie jest rozwiązany (sprawdzałem zarówno w środowisku 32 bitowym jak i 64 bitowym).
Klientka oczywiście dostała poprawioną wersję. Teraz formuła wygląda tak:

if({@value}>0) then
    ToWords({@value})
else
    "minus " + ToWords(-1*{@value})

no ale to chyba nie o to chodzi!!
(dodatkowo żeby było ciekawiej taką formułę musiałem wprowadzić jeszcze w kilkunastu miejscach)

5 thoughts on “I hate you Crystal Reports

  1. Pingback: dotnetomaniak.pl
  2. Skoro juz poprawiałeś mogłeś dokonać hermetyzacji, przenosząc poprawiony kod do jakiejś statycznej funkcji, by w przypadku naprawienia błędu przez Crystal Reports wystarczyło zmienić kod tylko w jednym miejscu a nie kilkunastu miejscach.

    Pozdrawiam

    1. Jak już wspomniałem część raportów nie była mojego autorstwa tylko dostałem je w spadku. W Crystal Reports rzeczywiście jest opcja tworzenia funkcji którą możemy wykorzystywać w różnych raportach (Crystal Reports Repository), ale niestety nie mogę z niej korzystać ponieważ wymaga ona licencji, której niestety nie posiadam (choć gdybym posiadał to Twój sposób byłby bardzo dobry).

  3. Oj miałem nieprzyjemność pracy z Crystal Reports. Niestaty nie jest to wymarzone narzędzie, do tworzenia raportów.

    Pozdrawiam.

Comments are closed.