Informatyzacja Przedsiębiorstw Microsoft Dynamics NAV 2016 Development Environment RAPORTY Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 1
Plan zajęć 1 Przygotowanie raportu... 3 1.1 Przygotowanie danych... 3 1.2 Przygotowanie tabeli Customer... 4 1.3 Utworzenie modelu danych... 4 2 Projektowanie wyglądu raportu... 8 2.1 Ustawienia początkowe MS SQL Server Report Builder... 8 2.2 Layout raportu... 9 2.3 Tworzenie grup... 14 2.4 Własność RepeatOnNewPage... 17 3 Modyfikowanie własności Data Item... 19 3.1 PrinOnlyIfDetail... 19 3.2 ReqFilterFields... 20 3.3 ReqFilterHeading... 21 4 Projektowanie Request Page... 22 4.1 Dodawanie i ukrywanie zakładek w Request Page... 22 4.2 Dodanie Check Box na Request Page... 24 4.3 Pomijanie sekcji w raportach... 26 5 Lista uczestników szkolenia - przykład... 28 5.1 Struktura raportu... 28 5.1.1 Ważniejsze właściwości niektórych elementów:... 29 5.2 Labels... 31 5.3 W Report Builder tworzymy następujący layout... 31 5.3.1 Layout krok po kroku - HEADER... 31 5.3.2 Layout krok po kroku BODY... 35 5.3.3 Layout BODY dodatkowe pola podsumowujące... 40 5.4 Wywołanie raportu... 45 Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 2
1 Przygotowanie raportu Przykłady w ćwiczeniu pomogą zrozumieć podstawowe zasady tworzenia raportów w Microsoft Dynamics NAV. Tworzony raport będzie prezentował listę nabywców według sprzedawcy. Zaprezentowane zostanie tworzenie modelu danych w Report Designer poprzez definiowanie Data Items, tworzenie połączeń pomiędzy Data Items i ustawienie sortowania wyświetlanych danych. 1.1 Przygotowanie danych Aby dane prezentowane w raporcie były różnorodne, połączymy kilku nabywców z różnymi sprzedawcami. Na kartotece nabywcy (menu Działy Sprzedaż i Marketing Sprzedaż Nabywcy) ustawiamy pole Kod sprzedawcy. Według poniższego przykładu należy ustawić Kod sprzedawcy: Joanna Rybka dla nabywców Grupa Cronos S.A. oraz ElectronicBay. Na kartotekach pozostałych nabywców powinien być ustawiony Kod sprzedawcy: Roman Stachnio. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 3
1.2 Przygotowanie tabeli Customer Zanim zaczniemy przygotowywać raport należy zmodyfikować tabelę Customer poprzez dodanie nowego klucza. Ćwiczenie krok po kroku: 1. Otwórz tabelę 18 Customer w trybie projektowania. 2. Kliknij Widok Keys i dodaj nowy klucz Salesperson Code : 3. Zamknij okno z kluczami. 4. Skompiluj i zamknij tabelę. 1.3 Utworzenie modelu danych Ćwiczenie krok po kroku: 1. W Object Designer kliknij Report, następnie New. 2. Uruchomi się Report Designer. Kliknij w pierwszy wiersz, wybierz DataItem jako Data Type i tabelę numer 13 Salesperson/Purchaser w kolumnie Data Source. Domyślnie kolumna Name zawiera nazwę DataItem, ale można ją zmodyfikować. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 4
3. Przejdź do nowej linii i wybierz Column w kolumnie Data Type. Kliknij na Data Source i wybierz z tabeli Salesperson/Purchaser pole Code. 4. Zapisz raport klikając Plik Save As, podaj numer 50000 i nazwę Customer by Salesperson. 5. Analogicznie jak w punkcie 3 dodaj pole Name z tabeli Salesperson/Purchaser. Nadaj nazwy dodanym elementom. Zrób wcięcie tych elementów w stosunku do DataItem. 6. Raport ma prezentować nabywców dla każdego sprzedawcy, dlatego najpierw musi odczytać rekord z tabeli 13 Salesperson/Purchaser, a następnie wszystkich nabywców tego sprzedawcy. Żeby to uzyskać należy dodać jako DataItem tabelę 18 Customer (zwróć uwagę na odpowiednie wcięcie). Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 5
7. Dodaj odpowiednio wcięte pola z tabeli Customer według poniższego rysunku. Zaznacz opcję Include Caption dla wszystkich pól z tabel. 8. Przejdź do właściwości DataItem z tabelą Customer. Sprawdź, że własność DataItemLinkReference jest ustawione na <Salesperson/Purchaser>. Otwórz własność DataItemLink i zdefiniuj powiązanie pomiędzy tabelami. Kliknij OK i sprawdź jak się zmieniła własność DataItemLink. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 6
9. We właściwości DataItemTableView ustaw sortowanie dla tabeli Customer. Kliknij Assit-Edit i wybierz klucz Salesperson Code : Kliknij OK i sprawdź jak się zmieniła własność DataItemTableView. 10. Zamknij okno własności Customer. 11. Zapisz, skompiluj i zamknij raport. Model danych jest gotowy, następny krok to utworzenie wyglądu (layout u) raportu. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 7
2 Projektowanie wyglądu raportu W ćwiczeniu wygląd raportu jest projektowany z wykorzystaniem MS SQL Server Report Builder (w skrócie Report Builder). Alternatywnie można korzystać ze środowiska Microsoft Visual Studio. 2.1 Ustawienia początkowe MS SQL Server Report Builder Aby projektowanie raportów możliwe było z narzędziem MS SQL Server Report Builder należy w NAV Development Environment w menu Narzędzia Opcje ustawić opcję Użyj kreatora raportów na wartość Yes. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 8
2.2 Layout raportu Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i otwórz w trybie projektowania, uruchomi się Report Designer. 2. W Report Designer kliknij Widok Layout. Uruchomi się Report Builder. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 9
3. Z zakładki Insert wybierz Insert Table i kliknij na pole raportu. Pojawi się tabela w polu raportu. 4. Domyślnie tabela ma wymiary 2x3. Aby dodać nowe kolumny kliknij prawym przyciskiem na ostatnią kolumnę i wybierz Insert Column - Right. Dodaj w ten sposób trzy kolumny. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 10
5. Z lewej strony Report Builder a dostępna jest sekcja Report Data z zakładką Datasets, za pomocą której będzie można wstawiać wartości do poszczególnych komórek tabeli. Przeciągnij do drugiego wiersza tabeli kolejno wartości SalPurCode, SalPurName, CustNo, CustName, CustAddress, CustCity z zakładki Datasets. Wygląd tabeli powinien być następujący: 6. Usuń wartości z wszystkich komórek pierwszego wiersza, a następnie dodaj odpowiednie wartości nagłówków z zakładki Parameters. Wygląd tabeli powinien być następujący: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 11
7. Zapisz raport i wyjdź z Report Builder. Następnie w Report Designer kliknij na jakieś pole, pojawi się następujący komunikat: 8. Kliknij Tak, a następnie skompiluj i zapisz raport. 9. Uruchom raport z Object Designera, klikając przycisk Run. 10. Pojawi się okno opcji raportu. Kliknij Podgląd. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 12
11. Raport ma następujący wygląd: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 13
2.3 Tworzenie grup Utworzenie grupy pozwoli na wyświetlenie danych bez duplikowania niektórych informacji. W tym przypadku grupowanie będzie tworzone po polu Salesperson/Purchaser.Code. 1. Uruchom layout raportu 50000 w Report Builder. 2. Kliknij prawym przyciskiem myszy na drugi wiersz tabeli, a następnie wybierz Add Group --> Parent Group. 3. Wybierz grupowanie po SalPurCode oraz zaznacz Add group header i Add group footer. 4. Zapisz raport w Report Builder, a także zapisz i skompiluj w NAVie. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 14
5. Uruchom raport. Powinien wyglądać następująco: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 15
6. Kolumna z kodem została zduplikowana. Otwórz layout raportu w Report Builder i usuń drugą kolumnę. 7. Usuń wartość z pola pierwszej kolumny i pierwszego wiersza, a następnie dodaj tam caption dla SalPurCode z zakładki Parameters. 8. Przenieś wartość SalPurName o jedno pole wyżej, aby wyeliminować duplikowanie nazwiska. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 16
9. Aby usunąć obramowanie tabeli, zaznacz wszystkie komórki tabeli (zaznaczenie samej tabeli nie wystarcza), a następnie w sekcji Properties (po prawej stronie) ustaw wartość Border Style --> Default na None. 10. Zapisz raport i sprawdź rezultat. 2.4 Własność RepeatOnNewPage Jeżeli wydruk utworzonego raportu zajmuje więcej niż jedną stronę, domyślnie na drugiej stronie nie widać nagłówka (sekcja Header tabeli). Aby pokazać nagłówek na każdej stronie raportu, należy ustawić własność RepeatOnNewPage. Ćwiczenie krok po kroku: 1. W Object Designer otwórz raport 50000 w trybie projektowania. 2. Uruchom layout raportu 50000 w Report Builder. 3. W sekcji grupowania włącz tryb Advanced mode. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 17
4. Zaznacz na dole w sekcji Row Groups pierwszy wiersz i ustaw dla niego wartość RepeatOnNewPage na True. 5. Skompiluj i zamknij raport. 6. Uruchom raport i sprawdź działanie własności RepeatOnNewPage. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 18
3 Modyfikowanie własności Data Item Ćwiczenie pokazuje jak ustawić kilka przydatnych własności raportu. 3.1 PrinOnlyIfDetail Własność jest wykorzystywana do drukowania DataItem ów tylko, gdy DataItem podrzędny ma jakieś dane. W tym przypadku zostaną wydrukowani tylko sprzedawcy, którzy posiadają swoich nabywców. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Otwórz okno własności DataItem Salesperson/Purchaser i ustaw własność PrintOnlyIfDetail na Yes. 3. Zamknij okno własności. 4. Skompiluj i zamknij raport. 5. Uruchom raport i sprawdź jego działanie. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 19
3.2 ReqFilterFields Własność wykorzystywana do ustawienia jakie pola ma widzieć użytkownik w Request Page, czyli z jakich pól będzie mógł korzystać zakładając filtry. Ćwiczenie pokaże jak umożliwić filtrowanie wg pól Code oraz Name tabeli Salesperson/Purchaser. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Otwórz okno własności DataItem Salesperson/Purchaser i ustaw własność ReqFilterFields na Code,Name, możesz użyć przycisku Assist-Edit. 3. Zamknij okno własności. 4. Skompiluj i zamknij raport. 5. Uruchom raport i sprawdź jak się zmienił Request Page : Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 20
3.3 ReqFilterHeading Własność pozwala na zmianę wyświetlanej nazwy DataItem na Request Page. Domyślnie jest to nazwa DataItemu. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Otwórz okno własności DataItem Salesperson/Purchaser i ustaw własności: a. ReqFilterHeading na Sprzedawca b. ReqFilterHeadingML na ENU=Salesperson;PLK=Sprzedawca 3. Zamknij okno własności. 4. Skompiluj i zamknij raport. 5. Uruchom raport i sprawdź jak się zmienił Request Page : Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 21
4 Projektowanie Request Page Ćwiczenie pokazuje jak zaprojektować Request Page dla raportu i w jaki sposób pokazywać lub ukrywać zakładki oraz dodawać kontrolki do zakładki Opcje. 4.1 Dodawanie i ukrywanie zakładek w Request Page Każdy DataItem domyślnie posiada swoją zakładkę w Request Page, zakładka ta może zostać ukryta. Aktualnie raport 50000 Customer by Salesperson ma dwa DataItem y Salesperson/Purchaser oraz Customer, ale kiedy raport zostanie uruchomiony widać tylko jedną zakładkę Sprzedawca. Poniższe ćwiczenie pokazuje jak dodać lub ukryć zakładkę. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Otwórz własności DataItem Customer i wyczyść własność DataItemTableView. Dotychczasowe ustawienie DataItemTabkeView na klucz Salesperson Code powodowało, że DataItem Customer był ograniczony tylko do jednego nabywcy (związanego z konkretnym sprzedawcą). Zakładka Customer w Request Page się zatem nie pokazywała, bo i tak filtrowanie nie miałoby sensu. 3. Zamknij okno własności. Skompiluj i zamknij raport. 4. Uruchom raport, zaobserwuj, że teraz widać dwie zakładki. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 22
5. Przejdź ponownie do projektowania raportu. 6. Otwórz własności DataItem Customer i ustaw własność DataItemTableView na SORTING(No.) (czyli sortowanie po kluczu głównym tabeli Customer ). 7. Zamknij okno własności oraz skompiluj i zamknij raport. 8. Uruchom raport, zaobserwuj, że teraz widać jedną zakładkę Sprzedawca. 9. Przejdź ponownie do projektowania raportu. 10. Otwórz własności DataItem Customer i ustaw własność ReqFilterFields na No.. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 23
11. Zamknij okno własności oraz skompiluj i zamknij raport. 12. Uruchom raport, zaobserwuj, że teraz znów widać dwie zakładki. Przez ustawienie ReqFilterFields na No. dla DataItem Customer użytkownik ma widzieć w Request Page pole No., by móc zakładać na nim filtry. Musi zatem pokazać się zakładka Customer z polem No.. 4.2 Dodanie Check Box na Request Page Na Request Page można dodawać kontrolki, które mogą służyć do interakcji z użytkownikiem. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Kliknij Widok C/AL Globals. 3. Dodaj zmienną ShowDetails : 4. Zamknij okno C/AL Globals. 5. Kliknij Widok Request Page. Uruchomi się Request Options Page Designer. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 24
6. Dodaj nowe pole z SourceExpr ShowDetails. 7. Otwórz własności nowego pola i ustaw: a. Caption: Pokaż szczegóły b. CaptionML: ENU=Show Details;PLK=Pokaż szczegóły 8. Zamknij okno własności i okno Request Options Page Designer. 9. Skompiluj i zamknij raport. 10. Uruchom raport i sprawdź nową opcję Pokaż szczegóły. Na tym etapie możliwe jest zaznaczanie/odznaczanie CheckBoxa, ale żadna fukcjonalność nie jest jeszcze z nim powiązana. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 25
4.3 Pomijanie sekcji w raportach Zmienna Pokaż szczegóły zostanie wykorzystana do pokazywania lub ukrywanie sekcji w raporcie. Ćwiczenie krok po kroku: 1. W Object Designer odszukaj raport 50000 i przejdź do projektowania. 2. Dodaj na końcu raportu nowe pole typu Column i wybierz jako DataSource ShowDetails. 3. Uruchom layout raportu. Zaznacz wiersz z wartościami grupy i wybierz opcję Row Visibility. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 26
4. Wybierz opcję Show or hide based on an expression oraz opcję wprowadzania formuły. 5. Wprowadź następującą formułę: 6. Skompiluj i zamknij raport. 7. Uruchom raport i sprawdź działanie opcji Pokaż szczegóły. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 27
5 Lista uczestników szkolenia - przykład Należy przygotować raport prezentujący na osobnych stronach listę uczestników poszczególnych rejestracji szkoleń. 5.1 Struktura raportu Tworzymy strukturę Raportu o nazwie Seminar Participant List : Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 28
5.1.1 Ważniejsze właściwości niektórych elementów: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 29
Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 30
5.2 Labels Raport uzupełniamy o etykiety związane z wyświetlanym tytułem raportu oraz słowem Strona. Następujące etykiety( menu Widok -> Labels) należy zdefiniować wielojęzycznie: 5.3 W Report Builder tworzymy następujący layout 5.3.1 Layout krok po kroku - HEADER 1. Dodajemy Header z zakładki Insert w górnym menu. Na Headerze nanosimy kilka TextBox ow: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 31
2. Kolejno ustawiamy Expression (na TextBoxie, prawy przycisk myszy Expression ) dla wszystkich TextBoxów: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 32
Dla pola związanego z datą, ustawiamy we właściwościach (pod prawym przyciskiem myszy Placeholder Properties) odpowiedni format daty: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 33
Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 34
5.3.2 Layout krok po kroku BODY 1. Korzystając z menu Insert Table Insert Table wstawiamy tabelę trzykolumnową i łączymy ją z odpowiednimi elementami przeciągniętymi z obszaru Report Data Dataset: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 35
2. Dodajemy grupę nadrzędną: 3. Ustawiamy grupowanie po numerze w Seminar Registration Header i dodajemy header dla grupy: 4. Usuwamy zbędną kolumnę i wiersz, tak by layout przyjął następującą postać: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 36
5. Dodajemy kolejne wiersze i wiążemy w nimi odpowiednie elementy tak by otrzymać poniższy layout: 6. Sprawdzamy działanie raportu. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 37
7. Pogrubiamy komórki związane z tytułem raportu (w nagłówku raportu) i numerem rejestracji (w ciele raportu). Wyrównujemy odpowiednio komórki w nagłówku raportu związane z etykietą Strona, UserID, oraz w ciele raportu komórki związane z polem Seminar Duration. Następnie usuwamy obramowania wszystkich komórek, a potem dodajemy grubszą linię oddzielającą przedostatni wiersz od ostatniego: 8. Sprawdzamy działanie raportu. 9. Aby dane związane w każdą rejestracją były drukowane tylko jeśli są jacyś uczestnicy szkolenia, ustawiamy własność PrintOnlyIfDetail w strukturze danych dla DataItem SeminarRegistrationHeader. 10. Sprawdzamy działanie raportu. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 38
11. Aby dane dotyczące kolejnych rejestracji drukowane były na osobnych stronach ustawiamy odpowiednio własność PageBreak grupy nadrzędnej: 12. Sprawdzamy działanie raportu. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 39
5.3.3 Layout BODY dodatkowe pola podsumowujące Dodajmy do naszego raportu dwa przykładowe pola z podsumowaniami. Będą ona zawierały zliczenie ilu było uczestników w poszczególnych rejestracjach i ilu było łącznie wszystkich uczestników (zliczenie po wszystkich rejestracjach w bazie). 1. Rozszerzamy listę dostępnych etykiet (menu Widok -> Labels): Etykiety muszą być zdefiniowane wielojęzycznie. 2. Rozszerzamy layout raportu dodając nowy wiersz: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 40
Efekt dodania wiersza: Należy zwrócić uwagę, że wiersz ten jest ujęty w klamrę widoczną z lewej strony, co oznacza, że zawarte w nim informacje będą wyświetlane raz dla każdej rejestracji. 3. Z ostatnim polami nowododanego wiersza wiążemy odpowiednie Expressions (efekt dodania odpowiednich Expressions przedstawiony jest niżej). Pole po lewej to przeciągnięta odpowiednia etykieta ze zbioru Parameters. Pole po prawej jest stworzone jako Expression z kategorii Common Functions Aggregate Count. W przykładzie wybrano zliczanie pól ParticipantContactNo. Pogrubiamy nowododane pola, ponadto lewe pole (z liczbą) wyrównujemy do prawej). Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 41
Efekt dodania odpowiednich Expressions: 4. Sprawdzamy działanie raportu. Przykład wyniku uruchomienia raportu: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 42
5. Ponownie rozszerzamy layout raportu dodając nowy wiersz: 6. Efekt dodania wiersza: Należy zwrócić uwagę, że wiersz ten NIE jest ujęty w klamrę widoczną z lewej strony, co oznacza, że zawarte w nim informacje będą wyświetlane raz dla całego raportu. Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 43
7. Z ostatnim polami nowododanego wiersza wiążemy odpowiednie Expressions jak poniżej. Pogrubiamy nowododane pola, ponadto lewe pole (z liczbą) wyrównujemy do prawej). 8. Sprawdzamy działanie raportu. Przykład ostatniej strony uruchomionego raportu: Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 44
5.4 Wywołanie raportu 1. Jeśli raport ma być drukowany z kartoteki Rejestracji szkolenia to należy na page u dodać nowy przycisk ( Page - Action). Przykład: 2. Jeśli system powinien podpowiadać filtr numeru rejestracji szkolenia, tak by drukowana mogła być lista uczestników aktualnie oglądanej rejestracji, można przykładowo zrealizować to oprogramowując trigger OnAction akcji realizującej na page u wywołanie raportu. Można wykorzystać funkcje filtrujące lokalną zmienną rekordową odnoszącą się do tabelki SeminarRegistrationHeader np. SeminarRegistrationHeader.SETRANGE("No.", Rec."No."); A następnie wywołać raport (np. funkcją Report.Runmodal) dla pofiltrowanej zmiennej np. REPORT.RUNMODAL(50010, TRUE, FALSE, SeminarRegistrationHeader); Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 45