| | 1 | = [wiki:DeployerGuide Przewodnik wdrożeniowca] > Tworzenie raportów w SQL = |
| | 2 | |
| | 3 | Do tworzenia zaawansowanych raportów SQL przydatna będzie oprócz PGAdmina również dokumentacja bazy danych. |
| | 4 | Znajduje się ona w sekcji download jako plik !DokumentacjaBazyDanycheDokumenty.zip. |
| | 5 | |
| | 6 | == Instrukcja tworzenia nowego raportu == |
| | 7 | 1. Przechodzimy do eDokumentów, moduł Raporty > Nowy raport (min. Nazwa, Grupa) - zapisujemy, otwierają się dodatkowe zakładki[[BR]] |
| | 8 | |
| | 9 | 2. W zakładce Definicja wpisujemy Kwerendę SQL "SELECT * FROM events" (UWAGA! Zapytanie musi zwracać przynajmniej 1 rekord)[[BR]] |
| | 10 | |
| | 11 | 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]] |
| | 12 | |
| | 13 | 4. Zapisujemy raport.[[BR]] |
| | 14 | |
| | 15 | 5. Otwieramy raport aby obejrzeć wyniki[[BR]] |
| | 16 | |
| | 17 | |
| | 18 | == W kwerendach można stosować parametry == |
| | 19 | |
| | 20 | {{{ |
| | 21 | {USR_ID} (string) - przecinkami rozdzielona lista użytkowników do którym ma dostęp zalogowany user |
| | 22 | {LOGGED_USR_ID} (int) - usr_id aktualnie zalogowanego pracownika |
| | 23 | {DATE_FROM} (string) - np. adddat::date >= '{DATE_FROM}' |
| | 24 | {DATE_TO} (string) -np. adddat:: <= '{DATE_TO}' |
| | 25 | {CONTID} (int) - id kontatku |
| | 26 | {PRC_ID} (int) - id sprawy |
| | 27 | {CONTIDS} (string) - id wybranych kontaktów z listy kontaktów dla których ma zostać wydrukowany wybrany raport |
| | 28 | }}} |
| | 29 | |
| | 30 | będą one mapowane na formularzu "Parametry raportu" i z odpowiednich pól pobierane będą wartości. |
| | 31 | |
| | 32 | == Użyteczne konstrukcje i funkcje językowe SQL == |
| | 33 | |
| | 34 | {{{ |
| | 35 | -- Zwraca sformatowaną kwotę |
| | 36 | SELECT bmoney(100.90, 'PLN') |
| | 37 | |
| | 38 | -- Formatuje datę |
| | 39 | SELECT to_char(d.adddat, 'YYYY-MM-DD') FROM documents d; |
| | 40 | |
| | 41 | -- Pobiera rok |
| | 42 | select extract(YEAR from CURRENT_DATE); |
| | 43 | |
| | 44 | -- Formatuje kwotę z pól tekstowych np. z formularzy customowych |
| | 45 | select cast(regexp_replace(regexp_replace('301 110,43',' ',''),',', '.') as numeric(12,2)) + 12.50; |
| | 46 | |
| | 47 | -- Warunkowo koloruje pole |
| | 48 | CASE WHEN p.pr_sta = 1 THEN '<div style="color: red">Rozpoczęte</div>' WHEN p.pr_sta = 2 THEN 'W trakcie realizacji' WHEN p.pr_sta = 3 THEN 'Zakończone' END AS status, |
| | 49 | |
| | 50 | -- Selectuje tydzień |
| | 51 | to_char(CURRENT_DATE, 'WW') = to_char (adddat, 'WW') |
| | 52 | |
| | 53 | }}} |
| | 54 | |
| | 55 | == Przykładowe użyteczne zapytania do bazy edokumenty == |
| | 56 | |
| | 57 | {{{ |
| | 58 | -- |
| | 59 | -- Pobranie danych z formularzy dynamicznych |
| | 60 | -- |
| | 61 | SELECT to_char(d.adddat, 'YY-MM-DD') AS day, |
| | 62 | -- rozmowy |
| | 63 | (SELECT count(*) /10 |
| | 64 | FROM events_view e WHERE e.trmtyp = 'PHONECALL' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 |
| | 65 | AND e.start_ <= d.adddat) AS rozmowy_handlowe, |
| | 66 | -- spotkania |
| | 67 | (SELECT count(*) |
| | 68 | FROM events_view e WHERE e.trmtyp = 'MEETING' AND emp_id IN (84,62) AND e.start_ >= d.adddat::date - 7 |
| | 69 | AND e.start_ <= d.adddat) AS spotkania, |
| | 70 | -- wartość pola featid 98 |
| | 71 | f3.data__::int AS odwedok |
| | 72 | FROM documents d |
| | 73 | INNER JOIN features_text_view f3 ON d.doc_id = f3.tbl_id AND f3.featid = 98; |
| | 74 | -- cecha z listy wyboru |
| | 75 | 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 |
| | 76 | |
| | 77 | -- |
| | 78 | -- Wybiera symbol teczki z numeru sprawy oo formacie ''2/03/08/UP/AW'' |
| | 79 | -- |
| | 80 | SELECT substring(symbol from '[0-9]*/[0-9]*/[0-9]*/([A-Z]*)') FROm processes; |
| | 81 | |
| | 82 | -- |
| | 83 | -- Wybiera krótką nazwę klienta jeśli jest, a jeśli jest pusta to długą |
| | 84 | -- |
| | 85 | SELECT COALESCE(c.name_2, c.name_1) FROM contacts c; |
| | 86 | |
| | 87 | -- |
| | 88 | -- Wybiera sprawy z wartościami cech (tekstowe i opcje) |
| | 89 | -- |
| | 90 | SELECT p.dscrpt, p.symbol, 'PROCESS'::text AS clsnam, prc_id AS keyval, |
| | 91 | f1.data__ AS opinia, f2.ftopnm AS reklamacja, f3.data__ AS dzialanie_korygujace, |
| | 92 | f4.data__ AS dzialanie_Klient, f5.data__ AS przyczyna |
| | 93 | FROM processes_view p |
| | 94 | LEFT JOIN features_text_view f1 ON p.prc_id = f1.tbl_id AND f1.featid = 14 |
| | 95 | LEFT JOIN features_opt_view f2 ON p.prc_id = f2.tbl_id AND f2.featid = 15 |
| | 96 | LEFT JOIN features_text_view f3 ON p.prc_id = f3.tbl_id AND f3.featid = 16 |
| | 97 | LEFT JOIN features_text_view f4 ON p.prc_id = f4.tbl_id AND f4.featid = 17 |
| | 98 | LEFT JOIN features_text_view f5 ON p.prc_id = f5.tbl_id AND f5.featid = 18 |
| | 99 | WHERE p.prtpid = 1 |
| | 100 | |
| | 101 | -- |
| | 102 | -- Wybiera dane do trendu - do wykresu |
| | 103 | -- |
| | 104 | SELECT extract(month from rlstrt) as m, |
| | 105 | sum((time__::numeric(12,2)/3600)::numeric(12,2)) AS sum |
| | 106 | FROM rcp_cards_view |
| | 107 | WHERE rlstrt IS NOT NULL AND is_fak = TRUE AND is_del = FALSE AND tpstid = 9 |
| | 108 | AND rlstrt + interval '1 year' >= CURRENT_DATE |
| | 109 | GROUP BY extract(year from rlstrt), |
| | 110 | extract(month from rlstrt) |
| | 111 | ORDER BY extract(year from rlstrt), extract(month from rlstrt) |
| | 112 | |
| | 113 | }}} |
| | 114 | |
| | 115 | == Umożliwienie otwierania dialogów (formularzy) z wyników raportu == |
| | 116 | |
| | 117 | Tworzymy zapytanie które w kolumnach o nazwach ''clsnam'' i ''keyval'' będą zawierać odpowiednio NAZWĘ_FORMULARZA i wartość klucza podstawowego rekordu np. |
| | 118 | {{{ |
| | 119 | SELECT |
| | 120 | 'PROCESS' AS clsnam, |
| | 121 | prc_id AS keyval, |
| | 122 | dscrpt FROM processes; |
| | 123 | }}} |
| | 124 | |
| | 125 | Następnie na zakładce ''Definicja'' raportu wpisujemy aliasy tych pól. |
| | 126 | * Typ z pola: clsnam |
| | 127 | * ID z pola: keyval |
| | 128 | |
| | 129 | Dostępne formularze i ich przykładowe klucze podstawowe: |
| | 130 | {{{ |
| | 131 | PROCESS - prc_id - Kartoteka sprawy |
| | 132 | CONTACT - contid - Kartoteka klienta |
| | 133 | DOCUMENT - doc_id - Formularz dowolnego typu dokumentu |
| | 134 | EVENT - evntid - Formularz dowolnego typu zdarzenia ?? |
| | 135 | RCP - rcp_id - Formularz karty pracy |
| | 136 | }}} |
| | 137 | |
| | 138 | == Wykresy == |
| | 139 | |
| | 140 | 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). |
| | 141 | |
| | 142 | Aby wydrukować wykres kołowy jego definicja musi być tak ułożona, aby pierwsza kolumna wskazywała na opis a druga na wartość !! |
| | 143 | |
| | 144 | == Menu raportów == |
| | 145 | |
| | 146 | Wybrane raporty można udostępnić w formularzu sprawy lub klienta. W tym celu należy wybrać Ustawienia -> Menu raportów. W polu "Nazwa dialogu" wpisujemy !ExtendedContactPanel dla formularza klienta lub AProcessForm dla formularza sprawy. W selekcie wybieramy interesujący nas raport. W raporcie tym odpowiednio używamy parametru {CONTID} i {PRC_ID} aby raport użył otwartej kartoteki jako parametru. |
| | 147 | |
| | 148 | == Biblioteka raportów == |
| | 149 | |
| | 150 | Raporty z biblioteki można pobierać poprzez przeglądarkę lub klienta webdav z serwera support. |
| | 151 | |
| | 152 | Autoryzowani partnerzy mogą również współtworzyć raporty, uzyskując dostęp do biblioteki poprzez SVN. Polecany klient TortoiseSVN. |
| | 153 | |
| | 154 | Na razie repozytorium dostępne jest pod adresem ''https://edokumenty.beta:444/svn/repos/Wdrozenia'' |
| | 155 | Przykładowa konfiguracja dla tunelu z deva na lokalny port 44443. Hasła takie jak do traca. |
| | 156 | |
| | 157 | {{{ |
| | 158 | ssh -N -f -L 44443:localhost:44444 tunnel@dev.bnet.pl |
| | 159 | svn co https://localhost:44443/svn/repos/Wdrozenia |
| | 160 | }}} |
| | 161 | |
| | 162 | Każdy katalog zawierać może jeden raport, każdy raport reprezentowany musi być przez co najmniej 3 pliki. |
| | 163 | * ''Zestawienie spotkan.report'' - nazwa opisowa |
| | 164 | * ''Spotkania.sql'' - może zawierać również dodatkowe kwerendy ale wyraźnie oddzielone od właściwej oraz komentarze |
| | 165 | * ''Spotkania.png'' - screenshot dla łatwiejszej orientacji |
| | 166 | * opcjonalnie pliki HTML dla raportów z szablonami np. ''szablonAudytu.html'' |
| | 167 | |
| | 168 | |
| | 169 | == Tips & Tricks == |
| | 170 | |
| | 171 | Dla łatwiejszego tworzenia raportów można użyć narzędzia PgAdmin, wówczas dla sieci lokalnej konfiguracja pg_hba.conf powinna |
| | 172 | wyglądać dla sieci w której serwer ma adres przykładowo: |
| | 173 | |
| | 174 | {{{ |
| | 175 | [root@edokumenty ~]# ip a | grep eth0 |
| | 176 | inet 10.8.16.33/24 brd 10.8.16.255 scope global eth0 |
| | 177 | |
| | 178 | # TYPE DATABASE USER CIDR-ADDRESS METHOD |
| | 179 | host oblig all 10.8.16.255/24 trust |
| | 180 | }}} |
| | 181 | |
| | 182 | W postgresql.conf należy ustawić nasłuchiwanie na wszystkich interfejsach sieciowych. |
| | 183 | {{{ |
| | 184 | listen_addresses = '*' |
| | 185 | }}} |
| | 186 | |
| | 187 | Po skończeniu wdrożenia koniecznie przywrócić do pierwotnej postaci. |