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ę:
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
dateadd("d",{tabela.data_clarion},#1800-12-28#) |
Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:
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
Function (numberVar clarionDate) | |
dateadd('d', clarionDate, #1800-12-28#) |
Komentarze
1. Tzw. "Krótki Clarion" - ciąg 5 cyfr, które przechowują informację o ilości dni od daty '1800-12-28' - służy do zapisu dnia
2. Tzw. "Długi Clarion" - ciąg 9 cyfr, które przechowują informację o ilości sekund od daty '1990-01-01' - służy do zapisu dnia i godziny
3. Zwykła data w SQL, w części struktur data jest kodowana jako datetime lub date na bazie.
Dodatkowo należy znać metody konwersji z Clariona na datę i odwrotnie:
--Data w postaci długiego Clariona (może on zwracać również godzinę)
SELECT DATEDIFF(s, CONVERT(datetime, '1990-01-01', 120), CONVERT(datetime,GETDATE(), 120))
--Data w postaci krótkiego Clariona (zwraca tylko datę)
select DATEDIFF(d,CONVERT(date,'1800-12-28',120),convert(date,GETDATE(),120))
--Zamiana długiego Clariona na DateTime
select DATEADD(second,123456789,CONVERT(DATETIME,'1990-01-01',120))
--Zamiana krótkiego Clariona na Date
select DATEADD(day,73691,CONVERT(DATE,'1800-12-28',120))
Chyba napiszę u siebie o tym artykuł, dawno o tym nic nie dodawałem.
https://www.goldenline.pl/grupy/Komputery_Internet/crystal-reports/time-clarion-do-cr,3928886/#59976066