Przejdź do głównej zawartości

Posty

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ę:
Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:
Najnowsze posty

Wskaźnik

W Crystal Reports brakuje opcji, która umożliwia wyświetlenia wartości w postaci graficznego wskaźnika tak jak to potrafi Excel. Na szczęście istnieje pewien sposób aby uzyskać efekt jak poniżej... Załóżmy, że mamy pole w tabeli, które posiada wartość procentową zapisaną w postaci ułamka 0..1 Skrypt do założenia przykładowej tabeli: Umieść pole Progress na raporcie Zaznacz opcję Size and Position i przy parametrze Width wpisz formułę: Dzięki temu rozmiar pola będzie uzależniony od wartości procentowej. Tajemnicza stała 1440 to coś podobnego do rozdzielczości DPI - więcej na ten temat znajdziesz w moim starym wpisie. Zaznacz pole, wybierz opcję Highlighting Expert, wpisz progi i określ formatowanie: Zaznacz pole, wybierz opcję Format Field, przejdź na zakładkę Common i w opcji Display String wpisz formułę: Gotowe!

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.

Łączenie wierszy w jedno pole tekstowe - cd 2

Witam po dłuższej przerwie. Ostatnio podczas zamkniętego szkolenia Crystal Reports dla zaawansowanych prezentowałem rozwiązanie łączenia kilku wierszy w jedno pole tekstowe, które opublikowałem w poprzednim poście. Opisany sposób bardzo się spodobał uczestnikom kursu, ale padło pytanie jak to zrobić w przypadku wielu pól? Mamy na przykład tabelę Artykuly (artykuły w sensie prawniczym a nie produkty) z następującymi kolumnami: Artykuł, Paragraf oraz Punkt. W wyniku mamy otrzymać następujący zapis prawniczy: 148 §2 pkt. 2, 172 §2 pkt. 1, 148 §1 pkt. 1. No to do dzieła! Na początek skrypt do utworzenia przykładowej tabeli wraz z danymi
Następnie zabieramy się za raport. 1. Formuła Init 2. Formuła Calculate 3. Formuła Display Rezultat:
Oczywiście takie rozwiązanie można zastosować do różnych przypadków. Na koniec dygresja: Każde szkolenie wnosi coś nowego do mojego warsztatu pracy dlatego tak lubię je prowadzić :)

Łączenie wierszy w jedno pole tekstowe - cd

W poprzednim poście opublikowałem rozwiązanie problemu połączenia wartości z kilku wierszy w jedno pole tekstowe.

Okazało się, że to rozwiązanie nie działa w przypadku gdy numery zamówień się powtarzają.

Czyli cytując mojego matematyka z podstawówki można powiedzieć: "Prawie dobrze, ale jeszcze niedostatecznie".

W takim razie pochyliłem się raz jeszcze nad tym problemem... i pomyślałem, że najlepiej będzie sprawdzać czy bieżący numer zamówienia jest już w tablicy. Ale w Crystal Reports nie ma takiej funkcji. Ale zaraz zaraz...  tablica elementów to zbiór. Skoro jest to zbiór to mogę zastosować operator in oraz jego negację not in. Bingo!

Czyli za pomocą operatora in sprawdzamy czy element istnieje już w tablicy. Jeśli nie to wstawiamy a w przeciwnym wypadku go pomijamy, a funkcję RecordNumber zastępujemy własnym licznikiem.

Rozwiązanie:

1. Formuła Iinit

// Deklaracja tablicy tekstowej shared StringVar array items; // Deklaracja licznika shared numbervar counter:=1; // Ustaw…

Łączenie wierszy w jedno pole tekstowe

Witam,
Co pewien czas na forach Crystalowych  np. GoldenLine powraca pytanie w jaki sposób połączyć wiele wierszy w jedno pole tekstowe. Postanowiłem raz a dobrze opisać uniwersalną metodę, którą będziecie mogli zastosować w swoich raportach.
Mamy na przykład raport z listą dokumentów z kilkoma kolumnami (numer dokument, data wystawienia, itd):

Przychodzi szef i prosi, abyśmy na końcu tego raportu dołożyli pole, które wyświetli wszystkie powyższe numery dokumentów w jednym ciągu np. SO43659, SO43660, SO43661, .....

Zamykając drzwi dodaje To ma być na jutro gotowe!"
Szybko odkrywamy, że nie da się tego wyklikać i rzeczywiście to jest prawda...
Do tego będziemy potrzebować całą skrzynię z narzędziami, a w niej: formuły, zmienne i tablice. Jesteście gotowi? Zaczynamy!

1. Tworzymy formułę Init // Deklaracja tablicy tekstowej shared StringVar array items; // Ustawiamy wielkość tablicy na podstawie ilości rekordów Redim items [count({SalesOrderHeader.SalesOrderID})]; // Formuła musi c…

Crystal Reports for Visual Studio 2015

Jeśli jesteś programistą i używasz, tak jak ja, najnowszej wersji Visual Studio 2015 to warto wiedzieć, że oficjalne wsparcie Crystal Reports jest dopiero od Service Pack 15. Jeśli zatem zainstalujesz starszą wersję Crystal Reports for Visual Studio to nie będzie chciała się zintegrować ze środowiskiem.

Zatem pamiętajcie aby instalować od razu Crystal Reports for Visual Studio Service Pack 15 lub w zwyż - na chwilę obecną Service Pack 16.

Strona ze wszystkimi Service Packami jest tutaj.

Polecam Wam również zapoznanie z notatkami od wydawcy, bo niosą one wiele cennych informacji.
Swoją drogą "podoba mi się" forma przekazywania ważnych informacji - ostrzeżenia, dopiski, różne czcionki, czerwony kolor - prawie jak w moim brudnopisie projektowym :)

Ale mam nadzieję, że się w tym odnajdziecie ;-)