Kartoteki jako dane referencyjne awizacji

Sekcja Kartoteki w systemie VSS.net gromadzi dane, z których korzystają awizacje i brama. Sięgają do nich także moduły LPR oraz Yard Management. Dane wpisuje się raz, a potem wybiera z listy przy każdej nowej operacji, więc dyspozytor nie przepisuje nazwy firmy ani numeru rejestracyjnego przy kolejnej awizacji. Wszystkie rekordy można przeszukiwać i edytować w jednym miejscu, a nieaktualne archiwizować.

Prawo do edycji kartotek ma zwykle wyłącznie administrator systemu, co chroni dane referencyjne przed przypadkową zmianą przez operatorów bramy albo pracowników rampy. Zasady nadawania ról opisuje artykuł o module Administrator w VSS.net. Wspólne kartoteki jako źródło referencji dla wszystkich modułów omawia tekst o platformie VSS na wspólnej bazie SQL.

Pozycja menu KartotekiCo przechowujeGdzie jest używana
Kontrahencifirmy: nazwa, NIP, adres, dane kontaktowewybór partnera w formularzu awizacji
Przewoźnicyfirmy przewozowe z podglądem awizacji bieżących i historiiprzypisanie pojazdu i kierowcy do wizyty
Asortymenttowary wykorzystywane przy awizacji i w historii postojówopis ładunku w zgłoszeniu
Obiekty i magazynycentra logistyczne oraz magazyny w ich obrębiepierwsze dwa kroki kreatora awizacji
Bramy i dokipunkty załadunku i rozładunkukalendarz ramp i przydział miejsca
Kalendarze i skorowidzedefinicje kalendarzy oraz samodzielnie zarządzane listy wyboruwidoki harmonogramu i pola słownikowe formularzy

Reguła: rekord kartoteki wybiera się z listy, a nie wpisuje ponownie. Każde ręczne wpisanie tworzy wariant, którego raporty nie połączą z oryginałem.

Skorowidze zasługują na osobną uwagę, bo pozwalają samodzielnie zarządzać listami wyboru, na przykład rodzajami pojazdów albo powodami wizyty. Administrator dodaje wartość do skorowidza i od razu pojawia się ona w formularzach, bez zmian w programie. To zwykle jedyny sposób dostosowania systemu do słownictwa konkretnego magazynu.

Kartoteka magazynów i doków

Formularz dopisania magazynu zawiera obiekt i nazwę magazynu. Następne pola to dane adresowe oraz dane uzupełniające, a ostatnie to liczba doków. Liczba doków ma wpływ na resztę systemu: od liczby doków zależy, na ile zasobów kalendarz może podzielić magazyn. Pole Aktywne pozwala wyłączyć magazyn bez usuwania, więc historia awizacji nadal wskazuje na istniejący rekord.

Lista Doki przeładunkowe w sekcji Gate Assistant z kolumnami Aktywne, Magazyn, Kod, Opis, Rezerwacja dla oraz Ciągnik lub naczepa z danymi kontrahenta
Lista doków przeładunkowych w Gate Assistant. Kod i opis identyfikują dok, a kolumna rezerwacji wskazuje kontrahenta, któremu go przydzielono.

Lista doków przeładunkowych w sekcji Gate Assistant pokazuje ten sam podział z perspektywy bramy. Każdy dok ma kod i opis, a kolumna rezerwacji wskazuje kontrahenta, dla którego dok jest zarezerwowany. Dane o przydziale doków opisuje artykuł o zarządzaniu dokami w magazynie, a konfigurację kalendarza, który z tych doków tworzy kolumny, omawia tekst o kalendarzu Studio Awizacje.

Zmiana liczby doków w istniejącym magazynie wymaga ostrożności. Dodanie doku zwiększa liczbę zasobów, które kalendarz może pokazać. Wyłączenie doku, na który zarezerwowano już okna, powinno poprzedzić przeniesienie tych wizyt, bo w przeciwnym razie kalendarz może pokazać zdarzenia bez zasobu.

Kontrahenci i przewoźnicy w kartotekach

Kartoteka kontrahentów obejmuje dostawców oraz odbiorców, a także przewoźników. Zawiera dane identyfikacyjne firmy i dane kontaktowe, co zapewnia spójność przy planowaniu dostaw. Polecenia Dopisz i Edycja służą do dodawania firm oraz aktualizacji wpisów, a polecenia Awizacje i Historia do przeglądu współpracy. Z poziomu listy można też wysłać e-mail do wybranego kontrahenta.

Grupa pólKolumny widokuZastosowanie
IdentyfikacjaAktywne, Nazwa pełna, Nazwa, Nr SAP, NIPjednoznaczne rozpoznanie firmy także w systemie zewnętrznym
AdresMiejscowość, Kod, Ulica, Województwofiltrowanie kontrahentów według lokalizacji
KontaktEmail, Telefon, Język komunikacjipowiadomienia w języku odbiorcy
Zapis i wyglądKOLOR, Zapisał, Data zapisu, Nr referencyjnyoznaczenie w kalendarzu oraz ślad audytowy

Kolumna Nr SAP przechowuje numer kontrahenta z zewnętrznego systemu, dzięki czemu awizacja i dokument magazynowy dotyczą tej samej firmy. Kolumna Język komunikacji decyduje, w jakim języku trafią powiadomienia, o czym pisze artykuł o przepustce QR i prognozie dojazdu. Kolor kontrahenta pojawia się w kalendarzu, więc dyspozytor rozpoznaje firmę bez czytania nazwy.

Duplikaty kontrahentów są najczęstszą wadą kartotek. Ta sama firma wpisana raz z formą prawną, a raz bez niej rozbija historię na dwie części, a wraz z nią raporty punktualności. Przy polskich podmiotach dobrą barierą jest unikalność NIP wśród rekordów aktywnych. Filtrowany indeks unikalny pozwala jednocześnie trzymać w tabeli rekordy wycofane, których NIP wraca do użytku. Zagraniczni kontrahenci bez polskiego NIP zostają poza ograniczeniem, bo pole może mieć wartość NULL.

CREATE UNIQUE NONCLUSTERED INDEX UX_Contractor_Nip_Active
    ON dbo.Contractor (Nip)
 WHERE Ach <> 'X' AND Nip IS NOT NULL;

Warunek WHERE tworzy indeks filtrowany, który obejmuje tylko wiersze spełniające warunek. Zasady tworzenia takich indeksów opisuje dokumentacja indeksów filtrowanych w Microsoft Learn. Nazwa tabeli Contractor jest poglądowa. Według opisu produktu dane kontrahentów oraz pojazdów wraz z kierowcami są wymieniane z systemem ERP przedsiębiorstwa, a sposób powiązania rekordów omawia artykuł o integracji VSS z WMS i ERP. Rozdział wpisów w dokumentacji produktu przedstawia strona kartoteki kontrahentów.

Pojazdy i kierowcy jako klucze identyfikacji

Kartoteka pojazdów przechowuje numer rejestracyjny i typ nadwozia oraz przewoźnika, do którego pojazd należy. Dochodzą parametry potrzebne przy planowaniu załadunku, na przykład ładowność albo liczba palet. Dyspozytor widzi już przy awizacji, czy pojazd zmieści się na wybranej rampie, i nie potwierdza parametrów telefonicznie z kierowcą. Pojazdy nietypowe, na przykład chłodnie lub cysterny, warto opisać w polu uwag. Wtedy ochrona i rampa rozpoznają wymagania rozładunku.

Kartoteka ciągników w roli VSS Magazyn z kolumnami Aktywne, Nazwa ciągnika, Numer rejestracyjny, Numer SAP, Nr ewidencyjny, Kod kreskowy i Magazyn
Kartoteka ciągników w roli magazynu i transportu wewnętrznego. Numer rejestracyjny i kod kreskowy służą do rozpoznania pojazdu na placu.

Kartoteka ciągników z rysunku należy do roli magazynu i transportu wewnętrznego. Zawiera numer rejestracyjny oraz numery SAP i ewidencyjny. Kod kreskowy pozwala rozpoznać ciągnik także skanerem. Zasady obsługi tych pojazdów przedstawia artykuł o transporcie wewnętrznym w module VSS.net.

Kartoteka kierowcy zawiera imię i nazwisko oraz telefon. Przypisuje kierowcę do przewoźnika i pozwala opcjonalnie zapisać numer dokumentu tożsamości do weryfikacji na bramie. W polu uwag można zapisać znajomość języka albo uprawnienia ADR. Historia wizyt, czyli liczba awizacji, średni czas oczekiwania i liczba wizyt nieawizowanych, jest widoczna z poziomu tej samej kartoteki. Pozwala to ocenić rzetelność przewoźnika bez ręcznego zestawiania list.

Numer rejestracyjny jest kluczem, po którym moduł LPR łączy zdjęcie tablicy z awizacją. Klucz działa tylko wtedy, gdy zapis jest jednolity, bo w kartotece ktoś wpisze WX 12345, ktoś inny WX-12345, a OCR odczyta WX12345. Przed porównaniem numer sprowadza się do postaci znormalizowanej. Przykład w C# usuwa znaki inne niż litery i cyfry oraz zamienia litery na wielkie.

public static string NormalizePlate(string raw)
{
    if (string.IsNullOrWhiteSpace(raw)) return string.Empty;

    var sb = new StringBuilder(raw.Length);
    foreach (var ch in raw)
        if (char.IsLetterOrDigit(ch))
            sb.Append(char.ToUpperInvariant(ch));

    return sb.ToString();
}

Reguła: numer rejestracyjny porównuje się wyłącznie w postaci znormalizowanej, zarówno w kartotece, jak i w odczycie z kamery.

Normalizacja nie rozwiązuje pomyłek OCR między literą O a cyfrą 0 ani między I a 1. Do nich służy osobny słownik zamienników albo dopasowanie z tolerancją jednego znaku, ale wynik takiego dopasowania powinien trafić do potwierdzenia przez ochronę, a nie do automatycznego otwarcia szlabanu. Pojazd bez awizacji trafia na ścieżkę opisaną w artykule o transporcie nieawizowanym.

Historia wjazdów i kamery w module LPR

Moduł LPR rejestruje numer auta oraz czas wjazdu i wyjazdu, a także dane kontrahenta i kierowcy z numerem telefonu. Rejestr Historia jest pełnym zapisem ruchu pojazdów na terenie obiektu i pozwala wyszukiwać oraz filtrować zdarzenia. Każdy wpis ma numer referencyjny, który ułatwia audyt i jednoznaczną identyfikację rekordu.

GrupaKolumny historiiDo czego służy
Czas pobytuNumer auta, Dzień, Wjazd, Wyjazdobliczenie długości wizyty na terenie zakładu
UczestnicyKontrahent, Kierowca, Telefonpowiązanie wizyty z firmą i osobą
AudytZapisał, Nr referencyjnyidentyfikacja operatora i rekordu

Kamery zarządza się z sekcji Kamery, gdzie można je włączać i wyłączać oraz edytować ich parametry. Tabela zawiera pola Aktywne i Magazyn oraz kod z opisem kamery, a kolumna Automatyczny szlaban odpowiada integracji ze szlabanami. Kamery wykonują zdjęcia tablic rejestracyjnych, OCR rozpoznaje numery, a wynik trafia na serwer FTP i łączy się z awizacjami. Zdjęcia są przypisywane do konkretnych wizyt, więc zgodność pojazdu z planem można sprawdzić po fakcie.

Ekran LPR Szukaj z panelem filtrowania według numeru auta, kierowcy, telefonu i kontrahenta oraz miniaturami zdjęć ciężarówek z datą i godziną odczytu
Wyszukiwarka zdjęć w module LPR. Miniatury z datą i godziną pozwalają zestawić odczyt tablicy z awizacją, której dotyczy wizyta.

Ekran wyszukiwania z rysunku pozwala filtrować zdjęcia według numeru auta oraz danych kierowcy, a także według zamówienia lub firmy. Każdy kafelek pokazuje miniaturę pojazdu z datą i godziną odczytu. Poniższe zapytanie pokazuje mechanizm łączenia odczytu tablicy z awizacją: szuka zatwierdzonej awizacji o tym samym znormalizowanym numerze, której okno obejmuje czas odczytu z dwugodzinnym marginesem.

SELECT TOP (1) a.AdviceId
  FROM dbo.Advice AS a
 WHERE a.PlateNorm = @PlateNorm
   AND a.Status = 1
   AND @ReadAt BETWEEN DATEADD(HOUR, -2, a.SlotStart)
                   AND DATEADD(HOUR,  2, a.SlotEnd)
 ORDER BY ABS(DATEDIFF(MINUTE, a.SlotStart, @ReadAt));

Sortowanie po odległości od początku okna rozstrzyga sytuację, gdy ten sam pojazd ma dwie awizacje w krótkim odstępie. Wybór następuje wtedy na rzecz tej, która jest czasowo najbliżej odczytu. Historię wjazdów opisuje dokumentacja modułu na stronie historia LPR. Przebieg wizyty po odczycie tablicy, od bramy po wyjazd, przedstawia artykuł o yard management system.

Historia postojów i kontenery w Yard Management

Moduł Yard Management zapisuje każdy moment zajęcia i zwolnienia miejsca parkingowego wraz z numerem miejsca i pojazdem oraz czasem przyjazdu i odjazdu. Historia parkowania łączy się z awizacjami i transportami, więc daje pełny obraz ruchu na placu. Zestawienie można eksportować do raportów okresowych, na przykład dziennych albo miesięcznych, co pozwala przypisywać koszty postojów.

WidokZakres kolumnZastosowanie
Historia parkowaniapojazd i miejsce parkingowe; numer Load Plan; czasy podstawienia i zakończenia parkowania; uczestnicy wizytyaudyt postojów i przypisywanie kosztów
Kontenery na terenie obiektustatus i numer kontenera; typ i lokalizacja; uczestnicy transportu; asortyment i numer zamówienia; pola czasoweśledzenie lokalizacji i statusu każdego kontenera

Widok kontenerów pokazuje obok polskich nazw także pola w nazwach technicznych, takich jak LOGIN, DATE_FROM, TIME_FROM i DATE_REAL. Zapis tych pól jest surowy, więc przy eksporcie do zewnętrznego raportu trzeba je przemapować na czytelne etykiety. Polecenie Transport otwiera formularz zlecenia przemieszczenia, opisany w artykule o transporcie wewnętrznym. Dokumentację obu zestawień przedstawiają strony historia parkowania i kontenery na terenie obiektu. Zakres modułu placu opisuje też artykuł o Yard management SoftwareStudio.

Moduł przypomina o planowanych operacjach i informuje o opóźnieniach, co ułatwia koordynację załadunków i rozładunków. Przy dużej liczbie kontenerów na placu decydujące jest filtrowanie według statusu i lokalizacji, dlatego kolumna Status stoi w widoku na pierwszym miejscu.

Status rekordu i uprawnienia do edycji

Rekordy w bazie mają kolumnę statusu ACH. Wartość 0 oznacza bufor, 1 rekord zatwierdzony, a X anulowany albo usunięty. Rekord z oznaczeniem X nie znika z tabeli. Historia awizacji i raporty nadal się do niego odwołują. To rozwiązanie chroni spójność danych: fizyczne usunięcie kontrahenta z dziesiątkami awizacji zostawiłoby w historii wpisy bez właściciela.

UPDATE dbo.Contractor
   SET Ach = 'X', ModifiedBy = @User, ModifiedAt = SYSUTCDATETIME()
 WHERE ContractorId = @Id
   AND NOT EXISTS (SELECT 1
                     FROM dbo.Advice AS a
                    WHERE a.ContractorId = @Id
                      AND a.Status IN (0, 1)
                      AND a.SlotEnd > SYSUTCDATETIME());

Przykład jest ilustracją wzorca, a nie opisem schematu produktu. Aktualizacja anuluje kontrahenta tylko wtedy, gdy nie ma on bieżących ani przyszłych awizacji w buforze lub zatwierdzonych. W przeciwnym razie zapytanie nie zmienia żadnego wiersza, a aplikacja informuje użytkownika, które wizyty blokują operację.

  • Administrator - dopisuje i edytuje rekordy kartotek oraz wartości skorowidzów, a także je anuluje.
  • Operator bramy i dyspozytor - wybierają rekordy z list i dopisują wizyty, ale nie zmieniają samych kartotek.

Taki podział ma swoje ograniczenie. Gdy dyspozytor potrzebuje nowego przewoźnika natychmiast, zgłoszenie do administratora wydłuża obsługę pojedynczej awizacji. Magazyny z dużym ruchem rozwiązują to przez wyznaczenie kilku administratorów zmianowych albo przez osobne, ściśle ograniczone uprawnienie do dopisywania. Ogólny opis modułu przedstawia strona produktu Studio VSS.net, a dokumentację sekcji kartotek zawiera strona kartoteki. Model, w którym partnerzy sami zakładają awizacje na podstawie tych danych, opisuje artykuł o systemie VSS.net.