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 :)
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date(Mid({SalesOrderHeaders.OrderDate}, 1, 4), Mid({SalesOrderHeaders.OrderDate}, 5, 2), Mid({SalesOrderHeaders.OrderDate}, 7, 2)) |
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date(Picture({SalesOrderHeaders.OrderDate}, "xxxx-xx-xx")) |
Proste i piękne nieprawdaż?
Polecam :)
Komentarze