Przejdź do głównej zawartości

Posty

Wyświetlanie postów z 2016

Łą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 ;-)



Licencjowanie komponentów Crystal Reports

Dzisiejszy wpis przeznaczony jest dla programistów, którzy budują rozwiązania z użyciem komponentów programistycznych Crystal Reports.

Jednak tym razem nie będę pisać o aspektach technicznych lecz chciałem zwrócić waszą uwagę na kwestie licencjonowania komponentów programistycznych Crystal Reports bo to nie jest łatwa sprawa.

Jeśli posiadamy płatną licencję na Visual Studio lub używamy darmowej wersji Community to ze strony SAP'a możemy pobrać za darmo Crystal Reports for Visual Studio. Przypominam, że darmowa wersja Visual Studio Express nie wspiera Crystal Reports. Swoją drogą jeśli ktoś z Was używa jeszcze wersji Express to niech czym prędzej ją odinstaluje(!) i zainstaluje w to miejsce wersję Community. To w pełni funkcjonalne Visual Studio niemal jak wersja Professional a do tego darmowa! Jeszcze do niedawna Microsoft kazał sobie płacić za to około 2000 PLN.

Ale wróćmy do licencjonowania Crystal Reports. Niespodzianki mogą pojawić się z chwilą wdrożenia naszego rozwiązania u …

Crystal Reports na wielu monitorach

Często pracuję z Crystal Reports na dodatkowym monitorze lub na szkoleniach z podłączonym projektorem. Wszystko ładnie pięknie działa, aż do czasu gdy wrócimy do podstawowej konfiguracji z jednym monitorem.

Crystal Reports wraca na swoje miejsce, ale niektóre opcje zachowują się tak jakby Crystal Reports się zawiesił(!).

Okazuje się, że Crystal Reports wcale się nie zawiesił, lecz okna dialogowe pamiętają stare położenie na odłączonym monitorze. Wyświetlają się ale w sposób niewidoczny na użytkownika na drugim monitorze którego nie ma i czekają na naciśnięcie OK :)

Zazwyczaj są to okna modalne, które blokują interfejs użytkownika aż do zatwierdzenia i wygląda tak jakby Crystal Reports się zawieszał.

Na szczęście z pomocą przychodzi "tajna kombinacja klawiszy", systemu Windows która umożliwia przesunięcie okna pomiędzy ekranami:

⊞ Win+←/→

Teraz wszystko wraca do normy :)

Mam nadzieję, że w przyszłej wersji Crystala zostanie to naprawione. Ale moim marzeniem jest aby zakładki d…

Crystal Reports 2016 nadchodzi...

Dzięki uprzejmości Marka Wawrzynczykai pamięci o mnie (uczestnik mojego szkolenia) dotarła do mnie informacja, że będzie nowy CrystalReports2016!
Od razu jak lew rzuciłem się na dokument opisujący nadchodzące zmiany. Choć szczerze mówiąc, nie spodziewałem się zbyt wiele. Myślałem, że będzie to znów kosmetyczna zmiana, nowy numer, nowe logo tak jak było z wersjami Crystal Reports 2011 i 2013. Sam wciąż używam Crystal Reports 2008 i nie widziałem sensu przesiadania się na nowsze wersje :) Nieźle się ubawiłem gdy przeczytałem, że jeden z Crystalowych guru niejaki Ken Hamady również używa CR 2008 http://kenhamady.com/cru/archives/2703 :) 
Ale przejdźmy do konkretów. Cóż takiego możemy się spodziewać w nowej wersji?
- wyrównywanie w pionie  NARESZCIE!!! Jedna z najbardziej brakujących opcji.
Gdy miłośnikom Excela mówiłem na swoich szkoleniach, że Crystal Reports nie posiada wyrównania w pionie to nie dowierzali. Teraz będę miał mocny argument :)
- formatowanie warunkowe na Line i Box  Czasami…

Zalogowany użytkownik

Prowadząc konsultacje u moich klientów spotkałem się z takim pytaniem w jaki sposób wyświetlić nazwę aktualnie zalogowanego użytkownika na raporcie. To pomaga w ustaleniu kto drukował dany raport.

Niestety Crystal Reports nie posiada gotowej funkcji.

Co prawda są pola specjalne Current CE User ID, Current CE User Name, ale one działają tylko w przypadku gdy posiadamy produkt Crystal Reports Server.

Ale na szkoleniu dla zaawansowanych wpadłem wspólnie z uczestnikami na bardzo proste rozwiązanie.

Należy utworzyć wyrażenie SQL (SQL Expression) a w jej treści wpisać CURRENT_USER i takie pole na raporcie. Tylko tyle! Raport wywoła funkcję SQL Server i pobierze aktualnie zalogowanego użytkownika do bazy danych. Uwaga - nie do domeny! No chyba, że mamy włączoną autentyfikację Windows.

Oczywiście to idealnie zadziała tylko w przypadku gdy każdy posiada inny login do bazy danych lub używamy wspomnianej autentykacji windowsowej.

Jeśli wszyscy pracujemy na jednym koncie - mam nadzieję, że  nie …

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 …