Awizacja swobodna i okienka czasowe

System awizacji transportu może pracować w dwóch trybach. W pierwszym kontrahent podaje dowolny czas rozpoczęcia i zakończenia wizyty. W drugim wybiera okienko, czyli zdefiniowany przedział niezbędny do zrealizowania załadunku albo rozładunku konkretnego transportu. Kalendarz obsługuje oba tryby i pokazuje dyspozytorowi wszystkie zaplanowane wizyty pojazdów w jednym widoku.

CechaAwizacja swobodnaOkienka czasowe
Początek i koniec wizytydowolne, wpisane przez kontrahentazdefiniowane w konfiguracji kalendarza
Siatka kalendarzanieregularne luki między wizytamiregularne sloty, na przykład co 20 minut
Typowe zastosowanietransport nietypowy albo jednorazowydostawy powtarzalne o znanym czasie obsługi
Główne ryzykonakładanie się wizyt i porozrywane wolne przedziałyokienko za krótkie albo za długie dla danego ładunku

Okienka dobiera się do rodzaju transportu. Firmy kurierskie, które realizują małe dostawy do kilku palet, dostają inne okienka niż dostawy większe. Dla transportów powyżej 10 palet obowiązuje osobna pula. Obejmuje ona przesyłki całopaletowe, a także kontenery i cysterny. O tym, jak firmy kurierskie wpisują się w harmonogram magazynu, pisze artykuł o firmach kurierskich w magazynie.

Reguła: rodzaj transportu wybiera pulę okienek, a nie odwrotnie. Kurier z kilkoma paletami nie powinien zajmować okna zaprojektowanego dla cysterny.

Dzięki takiemu podziałowi dostawca i odbiorca wiedzą, kiedy ładunek zostanie obsłużony. Magazyn planuje obsadę na podstawie znanych okienek, a przewoźnik układa trasy z realnymi punktami zatrzymania. Ogólne zasady długości okna omawia artykuł o oknach czasowych, a podział kalendarza między awizacje jednorazowe i cykliczne opisuje tekst o module awizacji VSS.net.

Awizacja swobodna zawsze musi zostać przełożona na siatkę, bo rampa jest rezerwowana w całych slotach. Czas obsługi zaokrągla się w górę do pełnej liczby slotów. Wizyta trwająca 50 minut zajmie w siatce 20-minutowej trzy sloty, czyli godzinę, a dziesięć minut zapasu będzie niedostępne dla innych. Przykład w T-SQL: SELECT CEILING(50 / 20.0) AS Slots; zwraca 3.

Definicja kalendarza w kartotekach

Kalendarze konfiguruje się w sekcji Kartoteki, w pozycji Kalendarze. Formularz ustawień ma trzy zakładki. Pierwsza nosi nazwę Dane podstawowe, druga Uprawnienia, trzecia Zdarzenia. Zakładka podstawowa zawiera pola, które opisują, skąd kalendarz bierze zasoby i jak wyświetla czas. Znaczenie pól wynika z ich nazw oraz wartości widocznych w formularzu.

Formularz ustawień kalendarza w Kartotekach z zakładkami Dane podstawowe, Uprawnienia i Zdarzenia oraz polami Zapytanie RESOURCES, Kolorystyka obiektów i Godzina rozpoczęcia
Definicja kalendarza w sekcji Kartoteki. Pola zapytań i godzin decydują o zasobach i siatce czasu widocznych w kalendarzu.
Pole formularzaCo ustala
Kod i nazwa kalendarzaidentyfikator oraz nazwa, pod którą kalendarz pojawia się w menu
Zapytanie - RESOURCESzapytanie SQL zwracające zasoby, na przykład rampy, które tworzą kolumny widoku
Warunek filtrowania danychzapytanie ograniczające dane do zakresu użytkownika lub magazynu
Lista możliwych widoków i sposób prezentacjiwidoki dostępne w kalendarzu oraz domyślny tryb pokazywania zdarzeń
Kolorystyka obiektówschemat kolorów zdarzeń w kalendarzu
Pierwszy dzień tygodnia oraz godzinygranice siatki: godziny rozpoczęcia i zakończenia oraz czas pracy

Pola zapytań przyjmują instrukcje SQL, więc kalendarz można podłączyć do dowolnego zestawu zasobów bez zmiany kodu aplikacji. Ta elastyczność ma cenę: zapytanie z formularza jest zwykłym zapytaniem do bazy, więc jego koszt zależy od indeksów. Zapytanie bez indeksu w kartotece z tysiącami rekordów spowolni cały widok, a nie tylko jednego użytkownika. Pozostałe słowniki systemu opisuje artykuł o kartotekach w VSS.net.

Zasoby kalendarza i zapytanie SQL

Każdy wiersz zwrócony przez zapytanie w polu RESOURCES staje się zasobem kalendarza. W kalendarzu według obiektów zasobem jest zwykle rampa, więc widok obiektu można podzielić na sloty odpowiadające poszczególnym rampom. Poniższe zapytanie zwraca rampy wybranego magazynu, ale tylko te, do których rola użytkownika ma dostęp. Nazwy tabel są poglądowe i nie odwzorowują schematu produktu.

SELECT d.DockCode AS ResourceId,
       d.DockName AS ResourceTitle
  FROM dbo.Dock AS d
 WHERE d.WarehouseId = @WarehouseId
   AND d.IsActive = 1
   AND EXISTS (SELECT 1
                 FROM dbo.RoleWarehouse AS rw
                WHERE rw.RoleId = @RoleId
                  AND rw.WarehouseId = d.WarehouseId)
 ORDER BY d.DockCode;

Drugie zapytanie pobiera zdarzenia widoczne w oknie kalendarza. Warunek zakresu musi łapać także wizyty rozpoczęte przed początkiem widoku i kończące się po nim. Częsty błąd polega na filtrowaniu po samym początku wizyty, przez co blok trwający przez północ znika z widoku następnego dnia. Do przechowywania czasu nadaje się typ datetime2, który opisuje dokumentacja Microsoft Learn.

CREATE NONCLUSTERED INDEX IX_Advice_Dock_Slot
    ON dbo.Advice (DockCode, SlotStart)
    INCLUDE (SlotEnd, Status);

SELECT a.AdviceId, a.DockCode, a.SlotStart, a.SlotEnd
  FROM dbo.Advice AS a
 WHERE a.SlotStart < @RangeEnd
   AND a.SlotEnd   > @RangeStart
   AND a.Status IN (0, 1);

Test nakładania się dwóch przedziałów sprowadza się do dwóch nierówności: zdarzenie zaczyna się przed końcem zakresu i kończy po jego początku. Indeks zaczyna się od kolumny rampy, bo kalendarz odpytuje jedną rampę naraz, a pole SlotEnd w klauzuli INCLUDE oszczędza odczytu z tabeli. Wydarzenia całodniowe nie trafiają do siatki godzinowej. Pojawiają się jako wpisy w nagłówkach dni.

Kalendarze według obiektów i sloty ramp

Menu kalendarza jest podzielone na sekcje, żeby łatwiej kontrolować obiekty magazynowe. Pierwsza obejmuje kalendarze według obiektów, a druga kalendarze pozostałe. Widok obiektu dzieli się dodatkowo na sloty, na przykład po jednym na rampę, dzięki czemu dyspozytor widzi obciążenie każdego stanowiska osobno, a nie sumę dla całego magazynu.

Kalendarz w roli Brama i ochrona z planem dnia w kolumnach Transport awizowany, Oczekujące na wjazd i Oczekuje na wyjazd oraz ikonami pojazdów w rzędach godzin
Plan dnia w roli Brama i ochrona. Kolumny odpowiadają etapom wizyty, a ikony pojazdów pokazują, na którym etapie znajduje się każdy transport.

Kalendarz z rysunku pochodzi z roli Brama i ochrona. Kolumny odpowiadają etapom: transport awizowany, oczekujące na wjazd i oczekujące na wyjazd, a ikony pojazdów układają się w rzędach godzin. Ochrona przy bramie widzi w ten sposób nie tylko plan, lecz także pojazdy, które już przeszły do kolejnego etapu. Pełną listę pozycji menu awizacji, w tym kalendarze, przedstawia artykuł o awizacjach VSS.net.

Widok Agenda z początku artykułu ustawia zdarzenia w kolejności godzin. Wpis zawiera nazwę kontrahenta i numer zamówienia, a pod nimi numer awizacji, numer rejestracyjny pojazdu oraz telefon kierowcy. Kolor wpisu wskazuje obiekt, więc magazynier przygotowujący rozładunek odczytuje z jednej linii, kogo się spodziewać. Telefon kierowcy ma pod ręką na wypadek opóźnienia. Agenda jest wygodna na odprawie porannej, a widok obiektów z rampami lepiej pokazuje obciążenie stanowisk.

Podział na obiekty i sloty ma konsekwencje dla wydajności i czytelności. Kalendarz jednej rampy z 20-minutowymi slotami ma 72 pola na dobę. Magazyn z ośmioma rampami ma ich już 576, dlatego widok obiektu warto zawężać do godzin pracy, które kalendarz przyjmuje jako parametr. Więcej o rozmieszczeniu ramp i przydziale bram mówi artykuł o zarządzaniu dokami w magazynie.

Rezerwacja okna bez udziału dyspozytora

Rezerwacja okna czasowego jest dostępna dla działu logistyki lub zaopatrzenia oraz dla dostawców i przewoźników. Wystarcza przeglądarka internetowa albo telefon z Androidem z aplikacją SoftwareStudio. Proces przebiega bez udziału dyspozytora, a system pokazuje dostawcy wyłącznie wolne terminy, więc nie ma ryzyka podwójnej rezerwacji tego samego okna.

  • Dodanie awizacji - dwukrotne kliknięcie wybranej godziny otwiera formularz, w którym wypełnia się pola oznaczone pogrubioną czcionką.
  • Wyświetlanie zdarzeń - utworzone wydarzenia pojawiają się w kalendarzu jako pola, a całodniowe jako wpisy w nagłówkach dni.
  • Edycja szczegółów - dwukrotne kliknięcie pola otwiera formularz edycji, identyczny jak formularz dopisania.
  • Zmiana terminu - przeciągnięcie bloku na inną godzinę lub inny zasób zastępuje edytowanie pól po kolei.

Kalendarz obsługuje awizacje jednorazowe oraz cykliczne. Czas dzieli się na okna, na przykład co 20 minut, a miejsca załadunku i rozładunku, czyli doki, wybiera się z listy. Awizację można powiązać z innymi dokumentami w systemie magazynowym, a potwierdzenie trafia do uczestników e-mailem lub SMS-em. Opis rejestracji awizacji dostaw przedstawia artykuł o awizacji dostaw, a wersję przeglądarkową kalendarza pokazuje aplikacja kalendarz do awizacji dostaw.

Dla dyspozytora oznacza to mniej rozmów telefonicznych z pytaniem o godzinę przyjazdu. Informacja jest widoczna w kalendarzu razem z historią wcześniejszych wizyt danego przewoźnika. Zmiana zapisana w kalendarzu jest od razu widoczna dla pozostałych osób w magazynie, więc nie trzeba przenosić zgłoszenia z osobnego dokumentu do harmonogramu. Rozwiązanie dla firm transportowych, które same planują sloty u wielu odbiorców, przedstawia artykuł o kalendarzu dla firmy transportowej.

Historia zapisana w kalendarzu przydaje się przy rozliczeniach z przewoźnikami. Gdy dojdzie do sporu o rzeczywisty czas przyjazdu albo długość rozładunku, dyspozytor ma zapis: kto zarezerwował okno oraz na jak długo, a także jak przebiegła obsługa pojazdu. Dane z poprzednich tygodni można też wykorzystać do korekty reguł długości okna.

Role i widoczność kalendarzy

Kalendarz jest wspólnym narzędziem wielu firm, więc nie każdy powinien widzieć wszystko. Zakładka Uprawnienia w definicji kalendarza pozwala zablokować dostęp do określonych widoków dla określonych ról. Taki podział ogranicza ryzyko przypadkowej zmiany cudzej awizacji i porządkuje pracę na wspólnym kalendarzu.

RolaCo widziCo może zrobić
Firma transportowawyłącznie własne awizacjezakładać i edytować własne wizyty
Kierownik magazynukalendarze wszystkich firmzarządzać ich widocznością w kalendarzu głównym
Ochrona przy bramieplan dnia z etapami wizytyzmieniać status wizyty w oknie Dyspozycja

Bezpieczna kolejność nadawania dostępu zaczyna od zera. Nowe konto firmy transportowej powinno startować bez widoczności jakiegokolwiek kalendarza, a dostęp dostaje jawnie, po zatwierdzeniu przez kierownika magazynu. Odwrotna kolejność, czyli odbieranie uprawnień po fakcie, zostawia okres, w którym nowy partner widzi harmonogram konkurencji, a magazyn nie ma o tym informacji.

W bazie SQL Server ten sam efekt można uzyskać na poziomie wierszy, tak żeby ograniczenie działało nawet przy bezpośrednim zapytaniu do tabeli. Służy do tego funkcja Row-Level Security. Predykat filtra zwraca wiersz, jeśli należy do przewoźnika zapisanego w kontekście sesji albo jeśli sesja działa w roli dyspozytora. Przykład jest ilustracją mechanizmu, a nie opisem implementacji produktu.

CREATE FUNCTION dbo.fn_AdviceFilter (@CarrierId int)
    RETURNS TABLE
    WITH SCHEMABINDING
AS
RETURN SELECT 1 AS allowed
        WHERE @CarrierId = CAST(SESSION_CONTEXT(N'CarrierId') AS int)
           OR SESSION_CONTEXT(N'IsDispatcher') = 1;
GO

CREATE SECURITY POLICY dbo.AdvicePolicy
    ADD FILTER PREDICATE dbo.fn_AdviceFilter(CarrierId) ON dbo.Advice
    WITH (STATE = ON);

Aplikacja ustawia kontekst sesji po zalogowaniu użytkownika, a baza dopisuje filtr do każdego zapytania. Szczegóły składni i ograniczenia opisuje dokumentacja Row-Level Security w Microsoft Learn. Nadawanie ról w samej aplikacji przedstawia artykuł o module Administrator w VSS.net.

Reguła: ukrycie widoku w interfejsie nie jest zabezpieczeniem, dopóki baza zwraca dane każdemu, kto zna adres zapytania.

Widok dnia według etapów i widok bram

Sekcja Informacje udostępnia dwa widoki, które odpowiadają na inne pytania niż kalendarz roboczy. Widok Okna czasowe pokazuje wybrany dzień w kolumnach etapów wizyty. Zaczynają się od awiza czekającego na transport i bramy oczekującej na wjazd, po czym następują magazyn rampy oraz magazyn rampa wolna lub wyjazd. Dalej stoją parking i agencja celna, a ostatnia kolumna zbiera awizacje zamknięte. Kolumny odpowiadają kolejnym etapom wizyty, więc położenie bloku od razu wskazuje, gdzie pojazd się znajduje.

Widok dzienny Okna czasowe z 18 maja 2026 z kolumnami etapów od Awizo czeka na transport do Awizacja zamknięta i blokami awizacji przypisanymi do godzin
Widok Okna czasowe w sekcji Informacje. Kolumny etapów pozwalają ocenić w jednym miejscu, ile pojazdów czeka na bramie, ile stoi przy rampach, a ile zamknięto.

Widok Awizacja bram układa tydzień od poniedziałku do niedzieli i przypisuje bloki do godzin, a legenda wskazuje bramę, na przykład wjazd dla pojazdów ciężarowych. Kierownik logistyki porównuje nim obciążenie kolejnych dni i zauważa dzień, w którym wszystkie okna zbiegają się w tych samych godzinach. Wtedy przenosi część wizyt przeciągnięciem, zamiast prosić przewoźników o zmianę terminu jedną wiadomością na raz.

Oba widoki korzystają z tych samych rekordów awizacji co kalendarz roboczy, więc zmiana terminu w jednym miejscu jest widoczna w pozostałych. Konfiguracja kalendarza zdecyduje jednak, które z nich są dostępne dla danej roli. Pozostałe możliwości kalendarzy, w tym integrację z modułami wag samochodowych i bramy, przedstawia artykuł o funkcjach kalendarzy w VSS.net. Praktykę delegowania awizacji na kontrahentów omawia tekst o systemie VSS.net. Zakres modułu przedstawia strona aplikacji kalendarz, a działanie widoków można obejrzeć w demo online.