= [wiki:DeployerGuide Przewodnik wdrożeniowca] > Tworzenie raportów w SQL = Do tworzenia zaawansowanych raportów SQL przydatna będzie oprócz PGAdmina również dokumentacja bazy danych. Znajduje się ona w sekcji download jako plik !DokumentacjaBazyDanycheDokumenty.zip. == Instrukcja tworzenia nowego raportu == 1. Przechodzimy do eDokumentów, moduł Raporty > Nowy raport (min. Nazwa, Grupa) - zapisujemy, otwierają się dodatkowe zakładki[[BR]] 2. W zakładce Definicja wpisujemy Kwerendę SQL "SELECT * FROM events" (UWAGA! Zapytanie musi zwracać przynajmniej 1 rekord)[[BR]] 3. Zapisujemy, Otwieramy do edycji ponownie. Na zakładce Wybór kolumn przenosimy klikając w przyciski te pola które chcemy wyświetlić.[[BR]] 4. Zapisujemy raport.[[BR]] 5. Otwieramy raport aby obejrzeć wyniki[[BR]] == W kwerendach można stosować parametry == {{{ {USR_ID} (string) - przecinkami rozdzielona lista użytkowników do którym ma dostęp zalogowany user {LOGGED_USR_ID} (int) - usr_id aktualnie zalogowanego pracownika {DATE_FROM} (string) - np. adddat::date >= '{DATE_FROM}' {DATE_TO} (string) -np. adddat:: <= '{DATE_TO}' {CONTID} (int) - id kontatku {PRC_ID} (int) - id sprawy {CONTIDS} (string) - id wybranych kontaktów z listy kontaktów dla których ma zostać wydrukowany wybrany raport }}} będą one mapowane na formularzu "Parametry raportu" i z odpowiednich pól pobierane będą wartości. == Użyteczne konstrukcje i funkcje językowe SQL == {{{ -- Zwraca sformatowaną kwotę SELECT bmoney(100.90, 'PLN') -- Formatuje datę SELECT to_char(d.adddat, 'YYYY-MM-DD') FROM documents d; -- Pobiera rok select extract(YEAR from CURRENT_DATE); -- Formatuje kwotę z pól tekstowych np. z formularzy customowych select cast(regexp_replace(regexp_replace('301 110,43',' ',''),',', '.') as numeric(12,2)) + 12.50; -- Warunkowo koloruje pole CASE WHEN p.pr_sta = 1 THEN '
Rozpoczęte
' WHEN p.pr_sta = 2 THEN 'W trakcie realizacji' WHEN p.pr_sta = 3 THEN 'Zakończone' END AS status, -- Selectuje tydzień to_char(CURRENT_DATE, 'WW') = to_char (adddat, 'WW') }}} == Przykładowe użyteczne zapytania do bazy edokumenty == {{{ -- -- Pobranie danych z formularzy dynamicznych -- SELECT to_char(d.adddat, 'YY-MM-DD') AS day, -- rozmowy (SELECT count(*) /10 FROM events_view e WHERE e.trmtyp = 'PHONECALL' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 AND e.start_ <= d.adddat) AS rozmowy_handlowe, -- spotkania (SELECT count(*) FROM events_view e WHERE e.trmtyp = 'MEETING' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 AND e.start_ <= d.adddat) AS spotkania, -- wartość pola featid 98 f3.data__::int AS odwedok FROM documents d INNER JOIN features_text_view f3 ON d.doc_id = f3.tbl_id AND f3.featid = 98; -- cecha z listy wyboru INNER JOIN features_opt_view f3 ON d.is_del IS NOT true AND d.gostof IS NULL AND d.doc_id = f3.tbl_id AND f3.ftopid = 119 -- -- Wybiera symbol teczki z numeru sprawy oo formacie ''2/03/08/UP/AW'' -- SELECT substring(symbol from '[0-9]*/[0-9]*/[0-9]*/([A-Z]*)') FROm processes; -- -- Wybiera krótką nazwę klienta jeśli jest, a jeśli jest pusta to długą -- SELECT COALESCE(c.name_2, c.name_1) FROM contacts c; -- -- Wybiera sprawy z wartościami cech (tekstowe i opcje) -- SELECT p.dscrpt, p.symbol, 'PROCESS'::text AS clsnam, prc_id AS keyval, f1.data__ AS opinia, f2.ftopnm AS reklamacja, f3.data__ AS dzialanie_korygujace, f4.data__ AS dzialanie_Klient, f5.data__ AS przyczyna FROM processes_view p LEFT JOIN features_text_view f1 ON p.prc_id = f1.tbl_id AND f1.featid = 14 LEFT JOIN features_opt_view f2 ON p.prc_id = f2.tbl_id AND f2.featid = 15 LEFT JOIN features_text_view f3 ON p.prc_id = f3.tbl_id AND f3.featid = 16 LEFT JOIN features_text_view f4 ON p.prc_id = f4.tbl_id AND f4.featid = 17 LEFT JOIN features_text_view f5 ON p.prc_id = f5.tbl_id AND f5.featid = 18 WHERE p.prtpid = 1 -- -- Wybiera dane do trendu - do wykresu -- SELECT extract(month from rlstrt) as m, sum((time__::numeric(12,2)/3600)::numeric(12,2)) AS sum FROM rcp_cards_view WHERE rlstrt IS NOT NULL AND is_fak = TRUE AND is_del = FALSE AND tpstid = 9 AND rlstrt + interval '1 year' >= CURRENT_DATE GROUP BY extract(year from rlstrt), extract(month from rlstrt) ORDER BY extract(year from rlstrt), extract(month from rlstrt) }}} == Umożliwienie otwierania dialogów (formularzy) z wyników raportu == Tworzymy zapytanie które w kolumnach o nazwach ''clsnam'' i ''keyval'' będą zawierać odpowiednio NAZWĘ_FORMULARZA i wartość klucza podstawowego rekordu np. {{{ SELECT 'PROCESS' AS clsnam, prc_id AS keyval, dscrpt FROM processes; }}} Następnie na zakładce ''Definicja'' raportu wpisujemy aliasy tych pól. * Typ z pola: clsnam * ID z pola: keyval Dostępne formularze i ich przykładowe klucze podstawowe: {{{ PROCESS - prc_id - Kartoteka sprawy CONTACT - contid - Kartoteka klienta DOCUMENT - doc_id - Formularz dowolnego typu dokumentu EVENT - evntid - Formularz dowolnego typu zdarzenia ?? RCP - rcp_id - Formularz karty pracy }}} == Wykresy == Dostępna jest możliwość drukowania wykresów, należy jednak odpowiednio sformułować zapytanie, tak aby wyniki możliwe były do wyświetlenia na wykresie: słupkowym, liniowym i kołowym (Pie). Aby wydrukować wykres kołowy jego definicja musi być tak ułożona, aby pierwsza kolumna wskazywała na opis a druga na wartość !! == Menu raportów == Wybrane raporty można udostępnić w formularzu sprawy lub klienta. Będą dostępne na dole kartoteki pod przyciskiem ''Raporty''. [[Image(kartoteka-dodaj-raport.png)]][[BR]] ''Rys. 1'' Aby dodać raport można użyć przycisków ''Dodaj raport'' (Rys. 1), można również to zrobić w Ustawieniach. W tym celu należy wybrać Ustawienia -> Menu raportów. W polu "Nazwa dialogu" wybieramy nazwę formatki do której chcemy dodać raport najczęściej będą to kartoteka klienta lub kartoteka sprawy. W liście wyboru ustawiamy interesujący nas raport. W definicji wywoływanego w ten sposób raportu używamy odpowiednio parametru {CONTID} albo {PRC_ID} - aby raport użył otwartej kartoteki jako parametru. == Biblioteka raportów == Raporty z biblioteki można pobierać poprzez przeglądarkę lub klienta webdav z serwera support. Autoryzowani partnerzy mogą również współtworzyć raporty, uzyskując dostęp do biblioteki poprzez SVN. Polecany klient TortoiseSVN. Na razie repozytorium dostępne jest pod adresem ''https://edokumenty.beta:444/svn/repos/Wdrozenia'' Przykładowa konfiguracja dla tunelu z deva na lokalny port 44443. Hasła takie jak do traca. {{{ ssh -N -f -L 44443:localhost:44444 tunnel@dev.bnet.pl svn co https://localhost:44443/svn/repos/Wdrozenia }}} Każdy katalog zawierać może jeden raport, każdy raport reprezentowany musi być przez co najmniej 3 pliki. * ''Zestawienie spotkan.report'' - nazwa opisowa * ''Spotkania.sql'' - może zawierać również dodatkowe kwerendy ale wyraźnie oddzielone od właściwej oraz komentarze * ''Spotkania.png'' - screenshot dla łatwiejszej orientacji * opcjonalnie pliki HTML dla raportów z szablonami np. ''szablonAudytu.html'' == Tips & Tricks == Dla łatwiejszego tworzenia raportów można użyć narzędzia PgAdmin, wówczas dla sieci lokalnej konfiguracja pg_hba.conf powinna wyglądać dla sieci w której serwer ma adres przykładowo: {{{ [root@edokumenty ~]# ip a | grep eth0 inet 10.8.16.33/24 brd 10.8.16.255 scope global eth0 # TYPE DATABASE USER CIDR-ADDRESS METHOD host oblig all 10.8.16.255/24 trust }}} W postgresql.conf należy ustawić nasłuchiwanie na wszystkich interfejsach sieciowych. {{{ listen_addresses = '*' }}} Po skończeniu wdrożenia koniecznie przywrócić do pierwotnej postaci.