Przejdź do głównej zawartości

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

dateadd("d",{tabela.data_clarion},#1800-12-28#)

Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Function (numberVar clarionDate)
dateadd('d', clarionDate, #1800-12-28#)

Komentarze

Szymon pisze…
Nie do końca jest tak jak opisano w artykule. Data w rozwiązaniach Comarch (Optima i XL) może być kodowana na kilka sposobów w tym:

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.
Marcin pisze…
Utworzyłem funkcję do zamiany czasu Clariona na czas CR:
https://www.goldenline.pl/grupy/Komputery_Internet/crystal-reports/time-clarion-do-cr,3928886/#59976066

Popularne posty z tego bloga

Funkcje Crystal Reports

Crystal Reports posiada bardzo dużo funkcji (ok. 200) do operacji na tekstach, liczbach, datach itd. Można się z nimi zapoznać przeglądając drzewo Funkcje (Functions) w Edytorze Formuł (Formula Editor) i czytając helpa. Warto je znać, aby nie wyważać otwartych drzwi.  Problem w tym, że trzeba wiedzieć czego się szuka.   Dla wielu osób dodatkową barierą może być język angielski, bo nawet w polskiej wersji Crystala, help, o przepraszam.... pomoc jest w języku Szekspira. Dlatego stworzyłem niegdyś listę funkcji Crystal Reports w języku polskim, którą otrzymywali uczestnicy moich szkoleń w formacie PDF.  Teraz postanowiłem  opublikować ją w sieci, aby była zawsze była pod ręką i dostępna dla szerszego grona.  Lista funkcja dostępna jest tutaj . Lista funkcji nie jest jeszcze w pełni kompletna, więc będę ją na bieżąco aktualizować. Czekam na wasze komentarze i uwagi, zwłaszcza propozycje lepszych tłumaczeń. Miłego korzystania!

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.