- Kod PRX występuje niemal w każdej tabeli systemu i mówi, do jakiego rodzaju należy dany rekord.
- Ta tabela nadaje kodom znaczenie: opis, przypisanie do sekcji menu, kolejność i ikonę.
- Kolumna
ROLAogranicza widoczność kodu; pusta wartość oznacza dostępność dla wszystkich ról. - Kolumna
X_SKOROWIDZEmieści parametry formularza dopisywania — dzięki temu każdy rodzaj może mieć własny zestaw pól.
Do czego służy tabela [dbo].[_prx]
Kod PRX jest w StudioSystem tym, czym w kartotece papierowej byłby kolor teczki. Występuje w dokumentach, słownikach, statusach i rejestrach, a jego zadaniem jest odpowiedź na pytanie „jakiego rodzaju jest ten rekord”. Tabela [dbo].[_prx] przechowuje wykaz tych kodów razem z ich znaczeniem.
Definicja obejmuje trzy warstwy. Pierwsza to sam kod i jego opis. Druga — miejsce w interfejsie: sekcja skorowidzy, kolejność sortowania, strona menu, ikona, kolor tła i informacja, czy kod tworzy podmenu. Trzecia to dostęp: kolumna ROLA pozwala udostępnić dany rodzaj tylko wybranej grupie użytkowników, a pusta wartość oznacza widoczność powszechną.
Osobno stoi kolumna X_SKOROWIDZE o pojemności pięciu tysięcy znaków. Mieści parametry formularza dopisywania i edycji dla danego rodzaju. Dzięki temu skorowidz kontrahentów może mieć inne pola niż skorowidz magazynów, mimo że oba korzystają z tej samej mechaniki — a różnica jest opisana w danych, nie w kodzie aplikacji.
Ten sam mechanizm obsługuje dokumenty, słowniki i statusy — rozróżnia je wyłącznie zawartość tabeli, nie kod aplikacji.
Budowa tabeli — wykaz kolumn
Czternaście kolumn dzieli się na identyfikację kodu, jego prezentację w menu oraz konfigurację skorowidza.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
| Identyfikacja kodu | |||
ID_PRX | int liczba całkowita | tak | Unikalny identyfikator wiersza tabeli |
PRX | varchar(5) tekst do 5 znaków | tak | Unikalny kod rodzaju dokumentu |
OPIS | varchar(250) tekst do 250 znaków | nie | Opis kodu |
AKTYWNE | bit wartość logiczna 0/1 | nie | Oznaczenie czy dany kod jest aktywny |
SYSTEMOWE | bit wartość logiczna 0/1 | tak | Oznaczenie czy dany kod jest synchronizowany z bazy ROOT |
| Miejsce w interfejsie | |||
SEKCJA | varchar(50) tekst do 50 znaków | tak | Oznaczenie sekcji do grupowania kodów w menu skorowidzy |
KOLEJNOSC | int liczba całkowita | tak | Oznacznie kolejności sortowania pozycji w menu skorowidzy danej sekcji |
POZYCJA | varchar(1) tekst do 1 znaków | tak | Określenie pozycji L - po lewej stronie menu skorowidzy, R - po prawej stronie |
SUBMENU | bit wartość logiczna 0/1 | tak | Oznaczenie czy dany kod tworzy SubMenu |
IKONA | varchar(100) tekst do 100 znaków | nie | Plik ikony opisujący dany kod PRX wykorzystywany w budowaniu submenu |
BACKCOLOR | varchar(20) tekst do 20 znaków | nie | Tło obiektu dla submenu budowanego dla listy PRX |
TOOLBAR | varchar(50) tekst do 50 znaków | nie | Opcjonalne podanie kodu dla menu typu TOOLBAR |
| Dostęp i skorowidz | |||
ROLA | varchar(20) tekst do 20 znaków | nie | Nazwa roli dla jakiej jest przypisany dany kod, puste oznacza że kod jest dostępny w całym systemie |
X_SKOROWIDZE | varchar(5000) tekst do 5000 znaków | nie | Budowanie skorowidzy definiowanie parametrów edycji i dopisywania formularza q_insert_update - widoczne i jaki tytuł kontrolki |
Kolumna POZYCJA przyjmuje jeden znak: L umieszcza kod po lewej stronie menu skorowidzy, R po prawej. To ustawienie działa razem z kolumną KOLEJNOSC, która porządkuje pozycje wewnątrz każdej ze stron.
Indeksy i wydajność zapytań
Odczyt odbywa się dwojako: punktowo przy sprawdzaniu znaczenia kodu oraz zakresowo przy budowaniu skorowidzy.
| Indeks | Kolumny | Rodzaj |
|---|---|---|
PK__prx | ID_PRX | klucz główny |
PRX | PRX | unikalny |
Indeks na kolumnie PRX jest unikalny — wymusza, że jeden kod ma dokładnie jedno znaczenie. To ograniczenie ma szerszy skutek, niż mogłoby się wydawać: kod PRX występuje w kilkunastu innych tabelach, więc jego niejednoznaczność rozlałaby się na cały system.
Jak nadawać kody, żeby po roku nadal miały sens
Kod PRX ma od trzech do pięciu znaków, co nie zostawia miejsca na rozwlekłość. Poniżej praktyka, która sprawdza się przy rozbudowie systemu.
- Kod ma być skrótem, nie numerem.
KTRHdla kontrahentów mówi więcej niżS01i po roku nadal jest czytelny. - Nie zmieniaj kodu już używanego. Występuje w dokumentach, historii i dzienniku zdarzeń — zmiana zrywa te powiązania bez ostrzeżenia.
- Grupuj przez sekcję, nie przez przedrostek kodu. Od porządkowania skorowidza jest kolumna
SEKCJA. - Zostaw miejsce w numeracji kolejności. Wartości co dziesięć pozwalają wstawić nową pozycję bez przenumerowania wszystkich.
- Wypełniaj opis pełnym zdaniem. Skrót w kolumnie
PRXjest dla systemu, opis — dla człowieka, który zobaczy go za dwa lata.
Najkosztowniejszy błąd to drugi punkt. Ponieważ kod PRX jest zapisywany w rekordach, a nie tylko wskazywany identyfikatorem liczbowym, jego zmiana pozostawia w bazie dokumenty odwołujące się do kodu, którego już nie ma. Nie wywołuje to błędu — powoduje jedynie, że rekordy przestają być widoczne w swoim skorowidzu, co bywa zauważane po tygodniach.
Jak korzystać z tabeli w praktyce
Przy pracy ze słownikiem kodów PRX obowiązują następujące zasady:
- Traktuj kod jako wartość niezmienną od chwili pierwszego użycia w dokumencie.
- Wyłączaj nieużywane rodzaje znacznikiem
AKTYWNEzamiast usuwać wiersz; rekordy historyczne nadal się do niego odwołują. - Sprawdzaj po wdrożeniu, czy istnieją rekordy z kodem nieobecnym w słowniku — nie powodują błędu, ale znikają ze skorowidzy.
- Ustawiaj
ROLAświadomie; pusta wartość udostępnia rodzaj wszystkim, także tym, którzy nie powinni go widzieć. - Numeruj kolejność co dziesięć, żeby wstawienie nowej pozycji nie wymagało przenumerowania pozostałych.
- Testuj zawartość kolumny
X_SKOROWIDZEna kopii bazy — błąd w parametrach formularza blokuje dopisywanie rekordów danego rodzaju.
Kontrola spójności: rodzaje zdefiniowane w słowniku zestawione z kodami faktycznie występującymi w dzienniku zdarzeń:
SELECT d.PRX,
COUNT(*) AS ZDARZEN,
MAX(p.OPIS) AS OPIS_W_SLOWNIKU,
CASE WHEN MAX(p.PRX) IS NULL THEN 'BRAK W SLOWNIKU' ELSE '' END AS UWAGA
FROM dbo._dziennik AS d
LEFT JOIN dbo._prx AS p ON p.PRX = d.PRX
WHERE d.KIEDY >= DATEADD(MONTH, -6, GETDATE())
GROUP BY d.PRX
ORDER BY ZDARZEN DESC;
Wiersze z adnotacją o braku w słowniku wskazują kody używane przez system, lecz nieopisane — zwykle są to pozostałości po kodzie zmienionym albo usuniętym ze słownika.
Kody PRX są elementem, który wygląda na drobiazg techniczny, a w praktyce wyznacza strukturę całego systemu. Kilkanaście minut poświęconych na przemyślenie ich nazewnictwa przy wdrożeniu oszczędza późniejszych prób naprawienia czegoś, co technicznie działa, ale czego nikt już nie rozumie.
Powiązane tabele i dokumentacja
Kody PRX pojawiają się w większości struktur systemu — poniżej te, które odwołują się do nich najczęściej: