Version 10 (modified by TS, 11 years ago) |
---|
Przewodnik użytkownika/Tworzenie raportów w SQL? > Filtry dla raportów ¶
Menu ¶
- Wstęp
- Standardowe Parametry
- Obsługiwane tokeny
- Definiowanie filtrów
- Wazne uwagi
- Definicja nowego filtra
- Typ opcji
Wstęp ¶
Moduł raportów w systemie eDokumenty umożliwia filtrowanie danego raportu poprzez określenie parametrów na dwa sposoby:
- standardowe parametry
- utworzenie filtrów przez użytkownika
Standardowe parametry ¶
Standardowe parametry to specjalne tokeny dzięki, którym możemy obsłużyć przekazywane dane z listy, kartoteki lub poprzez formularz parametrów do raportu.
Należy zwrócić uwagę na miejsce z którego jest wywoływany raport gdyż ma to wpływ na definicję operatora SQL przed takim tokenem. Warunki stosowanie operatorów:
Operator | Kiedy stosować | Przykład parametru |
IN | dla listy gdyż możemy otrzymać kilka zaznaczonych elementów. Token zostanie zamieniony na identyfikatory z danej listy np.: 1,2,3,4 | Miejsce: Lista klientów Parametr: contid IN ({CONTID}) |
znak = | dla kartoteki przekazywana jest tylko jedna wartość do parametru | Miejsce: Kartoteka klienta Parametr: contid = {CONTID} |
W przypadku jeśli w definicji raportu użyjemy np.: {CONTID} a raport zostanie wywołany z modułu (przekazane zostaną zaznaczone elementy) wtedy token zostanie zamieniony na pierwszy z zaznaczonych elementów.
W przypadku niewłaściwego podpięcia raportu lub niewłaściwego użycia operatora raport wygeneruje błąd.
Obsługiwane tokeny ¶
Obecnie obsługiwane tokeny to:
Nazwa | Opis | Wartość domyślna | Określanie na formularzu |
{DATE_FROM} | Data od | Początek bieżącego miesiąca | TAK |
{DATE_TO} | Data do | Koniec bieżącego miesiąca | TAK |
{USR_ID} | Pracownik | Pracownik z listy | TAK |
{LOGGED_USR_ID} | Zalogowany pracownik | Id zalogowanego pracownika (users.usr_id) | NIE |
{ENT_ID} | Identyfikator podmiotu | Identyfikator podmiotu | NIE |
{FILTER_STRING} | Ciąg filtrujący | 'TRUE' | TAK - definicja filtrów to określa |
{ACORID} | Jednostka rozliczeniowa | 0 | TAK |
{TOVCID} | Miejsce powstawania kosztów | 0 | TAK |
{ADANID} | Dodatkowa analityka | 0 | TAK |
{CONTID} | Klient | Pierwszy nie usunięty klient z listy (sortowany po contid) | TAK |
{CONTIDS} | Klient | Pierwszy nie usunięty klient z listy (sortowany po contid) | TAK |
{DOC_ID} | Dokument (z listy lub kartoteka) | 0 | NIE |
{DOC_IDS} | Dokument (z listy lub kartoteka) | 0 | NIE |
{DOCIDS} | Dokument (z listy lub kartoteka) | 0 | NIE |
{PRC_ID} | Sprawa | 0 | TAK |
{PRC_IDS} | Sprawa | 0 | TAK |
{PRCIDS} | Sprawa | 0 | TAK |
{EVNTID} | Zdarzenie (z listy lub kartoteka) | 0 | NIE |
{EVNTIDS} | Zdarzenie (z listy lub kartoteka) | 0 | NIE |
{CAMPID} | Kampania (z listy lub kartoteka) | 0 | TAK |
{CAMPIDS} | Kampania (z listy lub kartoteka) | 0 | TAK |
{DEVCID} | Urządzenie (z listy lub kartoteka) | 0 | TAK |
{DEVCIDS} | Urządzenie (z listy lub kartoteka) | 0 | TAK |
{DEPOID} | Produkt (z listy lub kartoteka) | 0 | TAK |
{DEPOIDS} | Produkt (z listy lub kartoteka) | 0 | TAK |
{RES_ID} | Zasób (z listy lub kartoteka) | 0 | TAK |
W momencie jeśli w danym raporcie zostanie użyty taki token to system wygeneruje odpowiednie pole na formularzu parametrów do raportu - jeśli jest obsługiwane. Poniższy zrzut ekranu przedstawia wszystkie tokeny możliwe do określania poprzez formularz.
Definiowanie filtrów ¶
Od wersji 4.0 system eDokumenty umożliwia definiowanie własnych parametrów do raportów określanych jako Filtry.
Na wstępie należy wyszukać interesujący nas raport lub dodać nowy Tworzenie raportów w SQL?.
Przykładowa definicja raportu (kod SQL):
SELECT contid, name_1, adddat, macrtk, is_del FROM contacts WHERE ent_id = {ENT_ID} AND {FILTER_STRING}
Ważne uwagi ¶
Aby filtrowanie było możliwe wymagane jest dodanie specjalnego tokenu {FILTER_STRING}, który w momencie akceptacji filtrów zostanie zamieniony na warunki SQL zgodne z definicją filtrów. Jeśli w definicji raportu zabraknie tego tokenu to pomimo definicji filtrów nie będą one dostępne na panelu parametrów.
Istotną kwestią jest również miejsce w którym jest dodany token {FILTER_STRING} oraz operator jaki go poprzedza (AND/OR zalecany AND). Być może przykład będzie dość abstrakcyjny jednak proszę zwrócić uwagę na zapytanie zagnieżdżone:
SELECT * FROM (SELECT contid, name_1, adddat, macrtk, is_del FROM contacts WHERE ent_id = {ENT_ID} LIMIT 100) AS foo AND {FILTER_STRING}
Ważne jest aby przy takiej definicji raportu filtry wskazywały na kolumny umieszczone w głównym zapytaniu.
Definicja nowego filtra ¶
Po otwarciu dialoga raportu powinna nam się pojawić dodatkowa zakładka - "Filtry".
Przyciski na widocznym zrzucie umożliwiają standardowe zarządzanie filtrami:
Nazwa przycisku | Opis |
Nowy | definicja nowego filtra/grupy |
Edycja | edycja istniejącego filtra/grupy możliwa również poprzez dwukrotne kliknięcie elementu drzewka |
Usuń | sunięcie filtra lub grupy (usuwane są też wszystkie podrzędne) |
Odśwież listę | odświeża listę filtrów |
Klikając przycisk "Nowy" otrzymujemy formularz dzięki, której możemy zdefiniować nowy filtr lub grupę (zależne od wyboru pola Rodzaj - poniższy zrzut ekranu).
Opis pól:
Nazwa pola | Opis |
Nazwa | nazwa filtra lub grupy filtrów w zależności co zostanie wybrane w polu rodzaj |
Opis | dodatkowa informacja wyświetlania po najechaniu na nazwę filtra w panelu filtrów raportu (dostępny na wygenerowanym raporcie) |
Nadrzędny | w przypadku jeśli dany filtr lub grupa ma należeć do grupy należy wybrać z dostępnej listy |
Rodzaj | Grupa - grupuje kilka filtrów lub innych grup Filtr - konkretny filtr - filtry mogą być definiowane bez elementu nadrzędnego lub mogą należeć do grupy. Filtr nie może należeć do innego filtra |
Typ opcji | rodzaj wygenerowanego pola na panelu filtrów w wygenerowanym raporcie. Szczegóły poniżej |
Filtr | wyrażenie filtrujące. W zależności od typ opcji może wymagać podanie tokenu {value} - szczegóły poniżej |
Wartości dla listy | tylko dla typu: Lista jednokrotnego wyboru, Lista wielokrotnego wyboru, Pola radiowe - kwerenda SQL, gdzie pierwsza wartość to klucz, który musi być typu INTEGER natomiast druga to opis wartości. Można stosować następujące tokeny: {LOGGED_USER} - identyfikator zalogowanego pracownika (users.usr_id) {LOGGED_ORUNID} - identyfikator jednostki zalogowanego pracownika (organization_units.orunid) {ENT_ID} - identyfikator podmiotu (podmioty.id_pod) {CURRENT_DATE} - bieżąca data w formacie YYYY-MM-DD {CURRENT_TIME} - bieżący czas w formacie HH:MM |
Typ opcji ¶
Poniżej znajduje się aktualna lista typów opcji oraz przykład definicji:
Typ opcji | Opis | Przykład filtru | Wymaga tokenu {value} |
Wartość BOOLEAN | Zastosowanie dla kolumn typu boolean gdzie wartość to TRUE lub FALSE | is_del IS {value} | Tak |
Wartość TEXT | Dowolne pole tekstowe do którego chcemy zastosować wyszukiwanie | name_1 ~* E'{value}' | Tak |
Pole zaznaczane | Jedna opcja zaznaczenia filtruje tylko wtedy gdy jest zaznaczony. Jeśli podamy w filtrze token {value} zostanie zamieniony na TRUE | is_del IS TRUE to samo da nam is_del IS {value} ale is_del IS FALSE nie jest tym samym co is_del IS {value} - {value} jest zawsze zamieniane na TRUE | Nie ale może być patrz przykład |
Lista jednokrotnego wyboru | Pole typu Select gdzie można wybrać tylko jedną wartość. Wymagane jest zadeklarowanie SQL dla listy opcji | adduid = {value} | Tak |
Lista wielokrotnego wyboru | Lista z opcjami do wyboru | adduid | Nie tylko należy zadeklarować kolumnę której filtr dotyczy |
Pola radiowe | Lista z opcjami do wyboru | adduid | Nie tylko należy zadeklarować kolumnę której filtr dotyczy |
Pole daty z godziną | Wizualizacja tego filtru posiada dodatkowe pole do określania godziny jeśli jest wymagana taka do dokładność | adddat >= '{value}' lub można adddat >= '2012-01-01 12:00' | Raczej tak niepodanie tokenu {value} jest niecelowe |
Pole daty bez godziny | Brak pola godzina | adddat >= '{value}' lub można adddat >= '2012-01-01' | Raczej tak niepodanie tokenu {value} jest niecelowe |
Wybór miesiąca oraz roku | Umożliwia wybranie roku oraz miesiąca. Zwracana wartość to rok plus miesiąc oraz 1 dzień czyli np. 2012-02-01. Umożliwia to budowanie zakresów miesięcy jeśli zdefiniujemy drugi filtr tego typu w grupie | adddat >= '{value}' | Tak |
Kontakt z książki adresowej | Zwraca identyfikator (contacts.contid) klienta | contid = {value} | Tak |
Lista spraw | Zwraca identyfikator sprawy (processes.prc_id) | prc_id = {value} | Tak |
Osoba kontaktowa | Zwraca identyfikator osoby kontaktowej (contact_persons.copeid) | copeid = {value} | Tak |
Urządzenie | Zwraca identyfikator urządzenia (devices.devcid) | devcid = {value} | Tak |
Projekt | Zwraca identyfikator projektu (projects.projid) | projid = {value} | Tak |
Lista pracowników | Zwraca identyfikator wybranych pracowników (users.usr_id). WAŻNE - wymagane jest aby był operator IN w wyrażeniu filtrującym gdyż wartości są zwracane w postaci 1,2,3,4 | adduid IN ({value}) | Tak |
W moim przypadku chcę filtrować listę klientów według parametru opiekun dlatego:
- Typ opcji : Lista pracowników
- Filtr: macrtk IN ({value}) - pole macrtk przechowuje id opiekuna (users.usr_id)
Po zapisaniu filtr jest dostępny z poziomu listy filtrów danego raportu:
(Nowy filtr na liście filtrów w raporcie)
Oraz dodatkowo po wygenerowaniu raportu klikając przycisk Określ parametry otrzymujemy formularz jak na zrzucie poniżej:
(Filtr na wygenerowanym raporcie)
Po zatwierdzeniu (przycisk Zapisz na formularzu Określ parametru raportu) raport zostanie ponownie wygenerowany uwzględniając nasz wybór.
Dynamiczne grupowanie ¶
Aby na panelu filtrów widoczna była opcja dynamicznego grupowania (po kolumnach zdefiniowanych na panelu Wybór kolumn) w definicji SQL raportu należy dodać token {GROUP_BY}. Jest to jednak token sterujący dlatego należy go poprzedzić --. Pozycja tokena {GROUP_BY} nie ma znaczenia ważne aby był zakomentowany.
Przykład SQL
SELECT * FROM contacts --{GROUP_BY}
Przydatne kwerendy SQL do filtrów ¶
MAGAZYNY
SELECT wahaid, name__ FROM warehouses WHERE is_del IS false ORDER BY prior_
GRUPY PRODUKTÓW
SELECT pgr_id, name__ FROM product_groups WHERE is_act IS TRUE AND is_del IS FALSE AND pgr_id NOT IN (SELECT prn_id FROM product_groups) ORDER BY prn_id, name__
STATUSY
SELECT tpstid, dscrpt FROM types_of_processes_states WHERE clsnam = 'PROCESS' ORDER BY state_
KOMÓRKI ORGANIZACYJNE
SELECT orunid, orunsm AS caption FROM organization_units WHERE is_del IS FALSE AND ndetpe = 'ORGCELL' AND chkUsrOrgAcc({LOGGED_USR_ID}, orunid) - ten filtr ogranicza do tych do których user ma prawo ORDER BY orunsm
Załączniki ¶
- filtr_na_raporcie.png (43.2 KB) - dodany przez TS 13 years temu.
- filtr_raportu.png (21.3 KB) - dodany przez TS 13 years temu.
- nowy_filtr_na_liscie.png (13.3 KB) - dodany przez TS 13 years temu.
- panel_filtry.png (17.9 KB) - dodany przez TS 13 years temu.
- podstawowe_parametry.png (31.9 KB) - dodany przez TS 13 years temu.