Time slot management software online - zasada działania

Time slot management software online zastępuje telefoniczne ustalanie terminów kalendarzem ramp, do którego przewoźnicy mają dostęp przez przeglądarkę. Magazyn definiuje, ile transportów może obsłużyć w danej godzinie. Przewoźnik wybiera wolny termin sam, a system pilnuje, żeby żadna rampa nie została zarezerwowana ponad swoją pojemność.

Różnica w stosunku do arkusza albo wspólnego kalendarza pocztowego polega na regułach. Kalendarz przyjmie każdą rezerwację, którą ktoś wpisze. System slotów sprawdza przy zapisie zgodność rampy z ładunkiem oraz liczbę rezerwacji w tym samym przedziale. Z systemu korzystają cztery grupy użytkowników:

  • Przewoźnik lub spedytor - rezerwuje slot z numerem rejestracyjnym pojazdu i danymi ładunku, a w odpowiedzi dostaje numer rezerwacji.
  • Dostawca - zakłada awizo dostawy i wskazuje przewoźnika albo rezerwuje slot samodzielnie, jeśli organizuje transport.
  • Magazyn - definiuje rampy i siatkę slotów oraz zatwierdza wyjątki od reguł rezerwacji.
  • Ochrona na bramie - weryfikuje przyjeżdżający pojazd z listą rezerwacji i kieruje go na rampę albo parking.

Pojęcia okna i slotu bywają używane zamiennie. W tym artykule okna czasowe oznaczają ramy godzinowe pracy magazynu, a slot to pojedyncza rezerwacja w tych ramach. Szersze omówienie tego rozróżnienia zawiera tekst o tym, czym są sloty czasowe w logistyce.

Wersja online ma istotną konsekwencję organizacyjną. Z systemu korzystają firmy zewnętrzne, które nie podlegają poleceniom kierownika zmiany, więc reguły rezerwacji muszą być zapisane w konfiguracji, a nie w zwyczajach magazynu. Każdy wyjątek, którego system nie potrafi obsłużyć, wraca do telefonu i e-maila, czyli do stanu sprzed wdrożenia.

Rezerwacja okien czasowych w przeglądarce

Rezerwacja przebiega w kilku krokach. Przewoźnik wskazuje magazyn i dzień, a potem rodzaj operacji. Portal pobiera wtedy listę wolnych slotów asynchronicznie, bez przeładowania strony. Zapytanie przekazuje liczbę palet, bo od niej zależy długość slotu, a więc to, które terminy w ogóle się zmieszczą.

// Pobranie wolnych slotów dla magazynu i dnia (endpoint poglądowy)
$.ajax({
    url: '/api/sloty/wolne',
    method: 'GET',
    data: { magazynId: 3, dzien: '2026-10-05', liczbaPalet: 24 },
    dataType: 'json'
}).done(function (sloty) {
    renderujKalendarz(sloty);   // [{ rampaId, start, koniec }, ...]
}).fail(function (xhr) {
    pokazKomunikat('Nie udało się pobrać wolnych terminów (' + xhr.status + ').');
});

Lista wolnych slotów jest tylko podpowiedzią. Między jej pobraniem a kliknięciem „Rezerwuj” inny przewoźnik może zająć ten sam termin, dlatego ostateczna weryfikacja odbywa się w bazie danych przy zapisie. Część systemów zakłada rezerwację wstępną na czas wypełniania formularza. Wygasa ona automatycznie, jeśli przewoźnik nie potwierdzi jej w ciągu kilku minut.

Statusy rezerwacji

Rezerwacja przechodzi przez stałą sekwencję statusów. Każde przejście zapisuje się z czasem i autorem, co pozwala później policzyć punktualność przewoźników.

StatusZdarzenie wyzwalająceCzy blokuje slot
WstępnaWybór terminu w portaluTak, do upływu limitu czasu
PotwierdzonaZapis formularza z danymi pojazduTak
Na placuRejestracja wjazdu na bramieTak
ZakończonaZwolnienie rampy po obsłudzeNie, slot zamknięty
AnulowanaRezygnacja przewoźnika albo magazynuNie, slot wraca do puli

Rezygnacja przed terminem zwalnia slot dla innych przewoźników. Mechanikę rezerwacji od strony przewoźnika, łącznie z anulowaniem i zmianą terminu, opisuje artykuł o tym, jak działa slot booking w praktyce.

Powiadomienia o zmianie statusu wysyła się e-mailem albo SMS-em. Kierowca dostaje numer rezerwacji, który podaje na bramie. Przy spóźnieniu przekraczającym tolerancję system zmienia status rezerwacji i zwalnia rampę dla kolejnego pojazdu z kolejki. Tolerancję ustala magazyn, zwykle osobno dla rozładunku i załadunku.

Dłonie na tablecie z wykresem słupkowym obciążenia ramp w kolejnych godzinach, w tle regały magazynowe z paletami
Podgląd obciążenia ramp w ciągu dnia - widok, z którego korzysta magazyn przy zatwierdzaniu wyjątków od siatki slotów.

Pojemność ramp i siatka slotów

Pojemność magazynu w systemie slotów nie jest jedną liczbą. Składa się z pojemności poszczególnych ramp w kolejnych przedziałach czasu, pomniejszonej o przerwy i okna zarezerwowane dla transportów stałych. Konfiguracja zaczyna się od opisu ramp.

Parametr rampyPrzykładowa wartośćWpływ na przydział
Godziny pracy6:00-22:00, przerwa 13:00-13:30Wyznacza zakres siatki slotów
Podstawowa jednostka slotu15 minutDługość każdego slotu jest jej wielokrotnością
Obsługiwane operacjeRozładunek, załadunekOdrzuca rezerwacje innego typu
Typ rampyChłodnicza, z uszczelnieniemTowar chłodzony trafia tylko na rampy tego typu
Transporty jednocześnie1Pojemność pojedynczego slotu

Pojemność zużywa się proporcjonalnie do czasu obsługi. Transport 33 palet z rozładunkiem ręcznym zajmuje rampę dłużej niż ten sam wolumen rozładowywany wózkiem, więc konsumuje więcej jednostek siatki. Sposób liczenia takiej konsumpcji w Studio VSS.net opisuje artykuł o tym, jak system zarządza konsumpcją pojemności bram.

Siatka slotów ma też wymiar tygodniowy. Transporty stałe, na przykład codzienne dostawy od jednego producenta o stałej godzinie, rezerwuje się z góry jako sloty cykliczne. Pozostała pojemność trafia do puli dostępnej dla przewoźników w portalu. Proporcję między slotami cyklicznymi a pulą otwartą warto przeglądać co kwartał, bo sloty cykliczne mają tendencję do zajmowania coraz większej części dnia.

Wpływ liczby ramp na przepustowość, łącznie z rezerwą na transporty nieplanowane, omawia tekst o tym, jak planować rezerwowanie doków magazynowych pod kątem pojemności. Organizację pracy przy samych rampach, od podstawienia pojazdu po zwolnienie doku, opisuje artykuł o tym, jak wygląda zarządzanie dokami w magazynie.

Ciągnik siodłowy z naczepą plandekową na mokrym placu manewrowym centrum logistycznego, w tle inne naczepy i budynek magazynu
Plac przed magazynem - liczba ramp i czas obsługi pojazdów wyznaczają pojemność, którą system dzieli na sloty.

Algorytm przydziału slotów

Algorytm odpowiada na pytanie, które sloty pokazać przewoźnikowi jako wolne. Najprostsza wersja przegląda rampy w ustalonej kolejności i zwraca pierwsze przedziały, w których zmieści się transport. Metoda jest szybka i przewidywalna, ale prowadzi do przeciążenia pierwszych ramp na liście.

Lepsze wyniki daje przydział z kilkoma kryteriami. Algorytm najpierw odrzuca rampy, które nie spełniają warunków twardych, a pozostałe sortuje według obciążenia. Warunki uwzględniane przy wyliczaniu wolnych slotów to zwykle:

  • Zgodność rampy - typ operacji i typ rampy muszą pasować do ładunku. Towar chłodzony nie trafi na rampę bez uszczelnienia.
  • Czas obsługi - długość slotu liczona z liczby palet i sposobu rozładunku, zaokrąglona w górę do jednostki siatki.
  • Bufor między slotami - czas na odjazd poprzedniego pojazdu i podstawienie następnego. Bez niego jedno opóźnienie przesuwa cały dzień.
  • Obciążenie rampy - przy kilku pasujących rampach system proponuje najpierw tę, która ma w danym dniu najwięcej wolnego czasu.

Reguła: długość slotu liczy system, nie przewoźnik. Przewoźnik podaje ładunek, a nie czas obsługi.

Zmiana liczby palet po rezerwacji zmienia długość slotu. Jeśli nowy czas obsługi nie mieści się w zarezerwowanym przedziale, system proponuje inny termin, zamiast po cichu wydłużać slot kosztem następnej rezerwacji na tej samej rampie.

Przewidywany czas obsługi warto kalibrować na danych historycznych. Porównanie zaplanowanej długości slotu z czasem faktycznym, zapisanym przy zwolnieniu rampy, pokazuje po kilku tygodniach, czy współczynniki na paletę są realistyczne. Zasady definiowania okien i ich długości dla poszczególnych ramp zebraliśmy w artykule o tym, jak przebiega definiowanie okien czasowych i rezerwacja doków.

Tablet z tabelą harmonogramu slotów na tle hali magazynowej z regałami paletowymi i ciągnikiem siodłowym przy rampie
Harmonogram slotów wyliczony z czasu obsługi transportów - wynik działania algorytmu przydziału dla jednego dnia.

Konflikty rezerwacji w SQL Server

Najtrudniejszy moment w systemie slotów to chwila, w której dwóch przewoźników klika ten sam termin w odstępie kilkudziesięciu milisekund. Obie aplikacje sprawdziły wcześniej, że slot jest wolny. Jeśli zapis nie jest chroniony w bazie, obie rezerwacje trafią do tabeli i na rampę przyjadą dwie ciężarówki.

Przy pojemności jednego transportu na slot wystarcza ograniczenie w strukturze tabeli. Unikalny indeks filtrowany na parze rampa i początek slotu odrzuci drugi zapis błędem 2601, a aplikacja pokaże komunikat o zajętym terminie.

-- Jedna aktywna rezerwacja na rampę i początek slotu (nazwy poglądowe)
CREATE UNIQUE NONCLUSTERED INDEX UX_Rezerwacja_RampaSlot
    ON dbo.Rezerwacja (RampaId, SlotStart)
    WHERE Anulowana = 0;

Blokada wiersza slotu

Indeks nie wystarcza, gdy slot ma pojemność większą niż jeden albo gdy sloty różnej długości mogą się nakładać. Wtedy procedura rezerwacji musi najpierw zablokować wiersz opisujący slot. Nową rezerwację wstawia dopiero po policzeniu istniejących. Wskazówki UPDLOCK i HOLDLOCK sprawiają, że druga transakcja czeka na zakończenie pierwszej.

CREATE PROCEDURE dbo.RezerwujSlot
    @RampaId int, @SlotStart datetime2(0), @PrzewoznikId int, @AwizoId int
AS
BEGIN
    SET NOCOUNT ON;
    SET XACT_ABORT ON;
    BEGIN TRANSACTION;

    DECLARE @Pojemnosc int, @Zajete int;

    -- Blokada aktualizacji na wierszu slotu do końca transakcji
    SELECT @Pojemnosc = s.Pojemnosc
    FROM dbo.SlotRampy AS s WITH (UPDLOCK, HOLDLOCK)
    WHERE s.RampaId = @RampaId AND s.SlotStart = @SlotStart;

    SELECT @Zajete = COUNT(*)
    FROM dbo.Rezerwacja AS r
    WHERE r.RampaId = @RampaId AND r.SlotStart = @SlotStart AND r.Anulowana = 0;

    IF @Pojemnosc IS NULL OR @Zajete >= @Pojemnosc
        THROW 50010, N'Slot jest już zajęty.', 1;

    INSERT dbo.Rezerwacja (RampaId, SlotStart, PrzewoznikId, AwizoId, Anulowana)
    VALUES (@RampaId, @SlotStart, @PrzewoznikId, @AwizoId, 0);

    COMMIT TRANSACTION;
END;

Przy włączonym SET XACT_ABORT ON instrukcja THROW wycofuje otwartą transakcję i zwalnia blokady. Obie wskazówki opisuje strona Microsoft Learn o wskazówkach tabeli w T-SQL. Porównanie obu podejść zestawia tabela.

MechanizmKiedy wystarczaZachowanie przy konflikcie
Unikalny indeks filtrowanyPojemność slotu = 1, stała siatkaDrugi INSERT kończy się błędem 2601
UPDLOCK + HOLDLOCK w procedurzePojemność większa niż 1 albo sloty różnej długościDruga transakcja czeka, potem widzi zajęty slot

Zakleszczenia i ponowienia

Blokady utrzymywane do końca transakcji zwiększają ryzyko zakleszczenia, gdy dwie procedury blokują zasoby w różnej kolejności. SQL Server przerywa wtedy jedną z transakcji błędem 1205. Aplikacja powinna rozpoznać ten numer i ponowić rezerwację raz albo dwa razy z krótkim opóźnieniem, zanim pokaże błąd przewoźnikowi. Stała kolejność blokowania, najpierw wiersz slotu, potem tabela rezerwacji, ogranicza takie przypadki do minimum.

Rezerwacje wstępne wygasają dzięki zadaniu cyklicznemu, które zmienia status wierszy starszych niż limit czasu. Zadanie aktualizuje małe partie, na przykład po 500 wierszy w jednej transakcji, żeby nie wywołać eskalacji blokad do poziomu tabeli. SQL Server próbuje eskalować blokady, gdy pojedyncza instrukcja założy około 5000 blokad na jednym obiekcie. Mechanizmy blokad i wersjonowania wierszy opisuje przewodnik po blokadach i wersjonowaniu wierszy w SQL Server.

Integracja z WMS i obsługą placu

Rezerwacja slotu jest początkiem łańcucha zdarzeń. Po zapisie system przekazuje awizo do WMS, który przygotowuje zlecenie przyjęcia i przydziela obsadę rampy. Zakres danych wymienianych między systemami i momenty synchronizacji opisuje artykuł o tym, jak rezerwacja okien czasowych integruje się z WMS.

Na terenie zakładu rezerwację przejmuje moduł obsługi placu. Yard management system porównuje numer rejestracyjny przy bramie z listą rezerwacji na dany dzień. Pojazd z rezerwacją jedzie na rampę albo na parking buforowy, a pojazd bez niej trafia do osobnej kolejki. Zasady obsługi takiego przypadku omawia tekst o tym, jak magazyn traktuje transport nieawizowany.

Po stronie dostawcy rezerwacja slotu łączy się z zapowiedzią ładunku. Awizo niesie dane o towarze i nośnikach, a slot niesie termin i rampę. Sekwencję obu kroków opisuje artykuł o tym, jak przebiega awizowanie dostawy. Rozwiązanie SoftwareStudio w tym obszarze przedstawia strona Time Slot Management System.

Wymagania techniczne wdrożenia

Po stronie przewoźnika wystarczy przeglądarka i dostęp do Internetu. Portal działa przez HTTPS, a konta zakłada magazyn, nadając uprawnienia do wybranych obiektów. Po stronie magazynu system potrzebuje serwera aplikacji, najczęściej IIS na Windows Server, oraz bazy danych.

Wybór edycji SQL Server zależy od skali. Edycja Express jest bezpłatna, ale ma limity, które przy kilku obiektach i kilkuletniej historii rezerwacji szybko stają się odczuwalne. Poniższe wartości dotyczą wersji od 2016 do 2022.

ParametrSQL Server ExpressSQL Server Standard
Maksymalny rozmiar bazy10 GBBrak limitu edycji
Pula buforów1410 MB128 GB
Moc obliczeniowaMniejsza z wartości: 1 gniazdo lub 4 rdzenieMniejsza z wartości: 4 gniazda lub 24 rdzenie
SQL Server AgentNiedostępnyDostępny

Brak SQL Server Agent w edycji Express ma praktyczne znaczenie. Zadania cykliczne, takie jak wygaszanie rezerwacji wstępnych albo archiwizacja historii, trzeba wtedy uruchamiać z harmonogramu zadań Windows albo z samej aplikacji. Aktualne limity poszczególnych edycji podaje strona edycje i funkcje SQL Server 2022.

Portal rezerwacji jest dostępny z Internetu, więc wymaga tych samych zabezpieczeń co inne systemy zewnętrzne. Certyfikat TLS na serwerze IIS i blokada konta po serii nieudanych logowań to minimum. Przewoźnik widzi wyłącznie własne rezerwacje, dlatego procedury filtrują dane po identyfikatorze firmy przypisanym do sesji, a nie po parametrze przesłanym z przeglądarki. Ta sama zasada dotyczy wywołań AJAX: każdy endpoint sprawdza uprawnienia po stronie serwera, niezależnie od tego, co pokazuje interfejs.