Przejdź do głównej zawartości

Konwersja tekstu na datę

Witajcie po dłuższej przerwie. Niektórzy pytają czy nadal zajmuje się Crystal Reports. Odpowiadam, że TAK! Tylko, że oprócz tworzenia raportów zajmuję się również rozwojem aplikacji w .NET i z braku czasu trochę zaniedbałem swojego bloga. Ale postaram się to nadrobić, zwłaszcza że nadchodzi nowy Crystal Reports 2016 o którym napiszę w kolejnym poście.

Ale do rzeczy...

Czasami zdarza się, że data zapisana jest w naszej bazie danych w postaci tekstu. Osobiście unikam takich rozwiązań, ale pomysłowość programistów nie zna granic ;-)

Generalnie do konwersji ciągu znaków na datę służy funkcja Date. Wystarczy jako argument przekazać pole date({Invoices.OrderDate}) i gotowe!

Ale to działa tylko w przypadku gdy data zapisana jest zgodnie ze standardem czyli na przykład z myślnikami: 2016-02-11

Ale w bazach danych, jeśli już ktoś zdecyduje się na przechowywanie daty jako tekst, to najczęściej stosowany jest zapis w formacie YYYYMMDD, który zajmuje mniej miejsca np. 20160211.

W takim przypadku funkcja Date już nie zadziała...

Ale nie ma się co poddawać! Dotychczas w takich przypadkach wycinałem poszczególne fragmenty daty: rok, miesiąc, dzień i podstawiałem do funkcji Date:


Takie rozwiązanie zadziała, ale przyznacie że ta formuła nie jest zbyt czytelna zwłaszcza dla początkujących adeptów Crystal Reports. Jeszcze gorzej jeśli zmieni się nazwa pola i musimy ją poprawić w kilku miejscach. Uff, ciężkie jest życie projektanta...

Ale ostatnio podczas prowadzenia szkolenia wpadłem na nowy pomysł: a gdyby tak odpowiednio sformatować datę, żeby funkcja Date ją rozumiała?

Przypomniało mi się, że w Crystalu istnieje funkcja Picture. Jej nazwa jest trochę myląca. Nie służy ona do formatowania obrazków, lecz do formatowania tekstu za pomocą tzw. maski.

Na przykład:
Picture({Customer.PostalCode}, "xx-xxx")

Idąc tym tropem wykorzystałem ją do sformatowania daty z myślnikami i podstawiłem pod funkcję Date:


Proste i piękne nieprawdaż?

Polecam :)
Prześlij komentarz

Popularne posty z tego bloga

Jak używać SQL Expression?

SQL Expression to taka formuła, której treścią jest zapytanie SQL do bazy danych.

Niestety, bezpośrednie wklejenie zapytania SQL kończy się najczęściej błędem"Error in compiling SQL Expression : Failed to retrieve data from the database".

Większość użytkowników w tym momencie kończy przygodę z SQL Expression, gdyż podręcznik użytkownika niewiele mówi na ich temat i nie przytacza żadnego przykładu.

Rozwiązanie jest na wyciągnięcie ręki...

Treść zapytania SQL musi być otoczone nawiasem! - to taki pomysł twórców Crystala.

Zapytania musi zwracać wartość skalarną! - czyli musi zwracać pojedynczą wartość, a nie zestaw rekordów. Najczęściej jakąś funkcję agregującą np. sumę

Oto przykład:

Gotowe! Taką formułę można umieścić na raporcie lub wykorzystać do dalszego przetwarzania.


To również bardzo dobry sposób na optymalizację raportu, zwłaszcza w przypadku gdy posiadamy w raporcie podraporty, które służą tylko pobieraniu pojedynczej wartości. Niestety trzeba znać chociażby podstawy jęz…

Lista funkcji Crystal Reports po polsku

Opracowałem kiedyś skróconą listę funkcji Crystal Reports po polsku, aby mieć podręczną ściągawkę podczas tworzenia formuł. Pewnie i Wam się przyda dlatego ją teraz publikuję. To oczywiście tylko kilkadziesiąt funkcji spośród kilkuset, które znajdują się w Crystal Reports. Dlatego zamierzam stworzyć kompletną listę funkcji CR 2008.

Postaram się również dodać kolumnę z wersją Crystal Reports od której jest dostępna funkcja, bo wciąż są użytkownicy starszych wersji.

Czekam na sugestie, komentarze i ewentualnie propozycje lepszych tłumaczeń.

Na początek pytanie - jaki format preferujecie? PDF, HTML a może HTML Help z możliwą wyszukiwania?

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:
if {Orders Detail.Quantity} <> 1 then "wiele wartości" else "wartość pojedyncza" 

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…