Co pokazuje harmonogram platformy do awizacji
Platforma do awizacji SoftwareStudio jest modułem klasy systemu YMS, który planuje wizyty pojazdów i porządkuje pracę na placu manewrowym. Jej centralnym ekranem jest harmonogram okien czasowych. Dyspozytor widzi na nim, które pojazdy są zapowiedziane, które czekają przed bramą, a które stoją już przy rampie, więc decyzje o kolejności obsługi opierają się na jednym obrazie sytuacji.
Widok Okna czasowe grupuje wizyty w kolumnach według statusu, a kolor nagłówka kolumny odpowiada kolorowi w legendzie pod tabelą. Godziny biegną w pionie, więc zagęszczenie wizyt w danym przedziale widać od razu. Wersję platformy zorientowaną na moduł YMS opisuje odrębny artykuł o platformie do awizacji YMS, a zasady definiowania reguł okien zbiera tekst o zarządzaniu oknami czasowymi.
| Kolumna statusu w widoku Okna czasowe | Znaczenie dla dyspozytora |
|---|---|
| 1. Awizo czekamy na transport | wizyta zapowiedziana, pojazd jeszcze nie dojechał |
| 2. Brama oczekuje na wjazd | pojazd zgłosił się przy bramie i czeka na wpuszczenie |
| 3. Magazyn rampy | pojazd obsługiwany przy rampie magazynu |
| 4. Magazyn rampa wolna / wyjazd | obsługa zakończona, pojazd opuszcza rampę i teren |
| 5. Parking | pojazd oczekuje na parkingu przed obsługą |
| 6. Agencja Celna | wizyta obsługiwana w punkcie odprawy celnej |
| 9. Awizacja zamknięta | wizyta zakończona, wpis trafia do historii |
Reguła: wizyta ma w danej chwili jeden status, a każda zmiana statusu zostawia wpis z godziną i nazwą użytkownika, bo tylko taki ślad pozwala później policzyć czas oczekiwania.
Legenda na zrzucie ekranu zawiera statusy od 1 do 6 oraz 9. Numeracja sugeruje, że system rezerwuje jeszcze dwie pozycje, ale w tym widoku nie mają one własnych kolumn, więc nie wchodzą do opisu.
Kontrola przejść między statusami
Numerowane statusy zapraszają do prostego modelu maszyny stanów. Dozwolone przejścia zapisuje się w małej tabeli słownikowej, a procedura zmiany statusu sprawdza, czy para stan bieżący i stan docelowy istnieje. Dzięki temu wizyta nie przeskoczy z pierwszej kolumny do zamkniętej bez zapisu o wjeździe, a reguła żyje w danych, więc administrator może ją zmienić bez wdrożenia kodu. Macierz poniżej jest przykładowa i nie odwzorowuje ustawień produktu.
CREATE TABLE dbo.StatusTransition (
FromStatus tinyint NOT NULL,
ToStatus tinyint NOT NULL,
PRIMARY KEY (FromStatus, ToStatus)
);
INSERT INTO dbo.StatusTransition (FromStatus, ToStatus)
VALUES (1, 2), (1, 5), (5, 2), (2, 3), (3, 4), (4, 9);
-- w procedurze zmiany statusu
IF NOT EXISTS (SELECT 1 FROM dbo.StatusTransition
WHERE FromStatus = @Current AND ToStatus = @Target)
THROW 50001, N'Niedozwolone przejście statusu wizyty.', 1;
Komunikat błędu warto przekładać na język użytkownika, na przykład „Pojazd nie wjechał jeszcze na teren zakładu”. Dostawca albo ochroniarz rozumie taki komunikat i wie, jaki krok wykonać jako następny.
Widoki harmonogramu w pracy dyspozytora
Harmonogram przełącza się między dniem i tygodniem, a także agendą. Widok dzienny służy do pracy w trakcie zmiany, kiedy liczy się kolejność najbliższych godzin. Widok tygodniowy pokazuje obciążenie bramy w kolejnych dniach, więc nadaje się do rozkładania wizyt na mniej zajęte doby. Agenda porządkuje wizyty w prostą listę według godzin, a oś czasu z dnia bieżącego pasuje do dużych ekranów w hali.

Na widoku tygodniowym bramy każda wizyta ma ikonę pojazdu oraz nazwę kontrahenta i numer awizacji. Dwa kolory ikon pozwalają odróżnić wizyty na pierwszy rzut oka. Legenda opisuje samą bramę, czyli wjazd dla pojazdów ciężarowych, a przegląd wjazdów tygodnia zastępuje pytania telefoniczne o to, kto i kiedy przyjedzie.
Plan dnia dla ochrony bramy
Osobny kalendarz dostaje pracownik ochrony. Kolumny odpowiadają jego zadaniom: transport awizowany, oczekujący na wjazd oraz oczekujący na wyjazd. Widok ma przełączniki Dzień i Tydzień oraz Agenda, a także oś czasu dnia, a zwykły wjazd nie wymaga wpisywania danych, bo pojazd jest już zapowiedziany.

Czerwona linia pokazuje aktualną godzinę, więc ochrona widzi, które wizyty są spóźnione względem okna. Wizyty spoza harmonogramu trafiają do osobnej listy opisanej w artykule o transporcie nieawizowanym.
Rezerwacja slotu przez dostawcę
Dostawca po zalogowaniu do portalu samodzielnie wybiera wolny slot czasowy. Magazyn widzi zgłoszenie natychmiast po zatwierdzeniu. Podział pracy jest prosty: dostawca ma dostęp do wolnych terminów, a dyspozytor zajmuje się wyjątkami. Zasadę rezerwacji przedziałów czasowych rozwija artykuł o slot booking, a pojęcie samego przedziału definiuje tekst o slotach czasowych w logistyce.
Ograniczenie w bazie zamiast sprawdzania w kodzie
Największym ryzykiem przy rezerwacji online jest kolizja: dwóch dostawców wybiera ten sam slot w tej samej sekundzie. Sprawdzenie dostępności w aplikacji przed zapisem nie wystarcza, bo między odczytem a zapisem druga sesja zdąży zająć termin. Pewną ochroną jest ograniczenie w bazie. Indeks unikalny z filtrem obejmuje tylko rezerwacje aktywne, więc anulowana rezerwacja zwalnia slot, a druga próba zajęcia tego samego terminu kończy się błędem.
CREATE TABLE dbo.DockBooking (
BookingId int IDENTITY PRIMARY KEY,
DockId int NOT NULL,
SlotStart datetime2(0) NOT NULL,
CarrierId int NOT NULL,
Status tinyint NOT NULL -- 1 aktywna, 9 anulowana
);
CREATE UNIQUE INDEX UX_DockBooking_ActiveSlot
ON dbo.DockBooking (DockId, SlotStart)
WHERE Status <> 9;
Tabela i indeks są poglądowe, a mechanizm opisuje dokumentacja indeksów filtrowanych w Microsoft Learn. Po stronie bazy błąd naruszenia unikalności ma numer 2601 albo 2627. Warstwa aplikacji tłumaczy go na kod HTTP 409, a przeglądarka pokazuje dostawcy komunikat o zajętym terminie.
async function bookSlot(dockId, slotStart) {
const res = await fetch('/api/bookings', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ dockId, slotStart })
});
if (res.status === 409) {
alert('Ten termin został właśnie zajęty. Wybierz inny slot.');
return null;
}
if (!res.ok) throw new Error('HTTP ' + res.status);
return res.json();
}
Przykład używa adresu /api/bookings jako miejsca zastępczego i nie opisuje interfejsu produktu. Ważny jest schemat obsługi: odpowiedź 409 nie jest awarią, tylko normalnym wynikiem wyścigu, więc formularz odświeża listę wolnych slotów zamiast wyświetlać błąd techniczny.
Siatka slotów i długość okna
Kalendarz opiera się na siatce slotów o stałej długości. Okno wizyty ma długość równą wielokrotności slotu: czas obsługi dzieli się przez długość slotu i zaokrągla w górę. Wizyta trwająca 50 minut przy siatce 20-minutowej zajmuje trzy sloty, czyli 60 minut. Krótsza siatka zmniejsza straty na zaokrągleniu, ale zwiększa liczbę wierszy w tabeli i utrudnia dyspozytorowi czytanie widoku. Wybór długości siatki jest więc kompromisem między dokładnością a czytelnością.
Sloty na wybrany dzień generuje się zapytaniem rekurencyjnym, które dokłada jedną siatkę na każdą rampę. Zapytanie wypełnia tabelę wolnych terminów, z której portal dostawcy odczytuje oferowane godziny.
DECLARE @From datetime2(0) = '2026-10-01 06:00',
@To datetime2(0) = '2026-10-01 22:00';
WITH t AS (
SELECT @From AS SlotStart
UNION ALL
SELECT DATEADD(MINUTE, 20, SlotStart)
FROM t
WHERE DATEADD(MINUTE, 20, SlotStart) < @To
)
SELECT d.DockId, t.SlotStart
FROM t
CROSS JOIN dbo.Dock AS d
OPTION (MAXRECURSION 0);
Opcja MAXRECURSION 0 wyłącza domyślny limit 100 poziomów rekurencji, który przy siatce 20-minutowej wystarczy na około 33 godziny. Dla dłuższych zakresów, na przykład na cały miesiąc, limit trzeba zdjąć albo generować sloty tabelą liczb.
Narzędzia dyspozytora w menu platformy
Poza harmonogramem menu roli Informacje zawiera pozycje pomocnicze, które domykają obieg wizyty. Nazwy pozycji pochodzą z ekranu platformy, a poniższa tabela opisuje ich zastosowanie w codziennej pracy.
| Pozycja menu | Zastosowanie |
|---|---|
| Okna czasowe | statusy wizyt w widoku dnia i tygodnia |
| Awizacja ramp oraz Awizacja bram | harmonogramy osobno dla ramp magazynu i dla wjazdów przez bramę |
| Transporty i Transport nieawizowany | lista wizyt oraz wizyty bez rezerwacji |
| Księga gości | rejestr wejść z historią |
| Raporty i Zestawienia | dane zbiorcze o wizytach, dostępne także w eksporcie do Excela i archiwum PDF |

Raport TOP 10 grupuje transporty według kontrahenta oraz przewoźnika, a także numeru rejestracyjnego. Dodatkowo pokazuje rozkład według dni tygodnia. Rozkład dziennych wizyt jest podstawą do przesuwania okien: jeśli poniedziałek obsługuje więcej wizyt niż środa, dyspozytor przenosi część rezerwacji, zanim powstanie kolejka.
Obciążenie według dnia i godziny
To samo zestawienie policzy zapytanie SQL, które grupuje rezerwacje po dniu tygodnia i godzinie. Wynik zasila mapę cieplną, w której najciemniejsze pola pokazują przeciążone przedziały. Funkcja DATEPART z argumentem WEEKDAY zależy od ustawienia DATEFIRST sesji, więc numery dni w raporcie warto ustalić jawnie.
SET DATEFIRST 1; -- poniedziałek = 1
SELECT DATEPART(WEEKDAY, SlotStart) AS DayNo,
DATEPART(HOUR, SlotStart) AS HourNo,
COUNT(*) AS Bookings
FROM dbo.DockBooking
WHERE Status <> 9
AND SlotStart >= DATEADD(DAY, -28, SYSDATETIME())
GROUP BY DATEPART(WEEKDAY, SlotStart), DATEPART(HOUR, SlotStart)
ORDER BY DayNo, HourNo;
Cztery tygodnie danych wystarczają, aby odróżnić stały wzorzec od jednorazowego szczytu. Okna, które przez cały okres pozostają puste, są kandydatami do skrócenia albo zamknięcia, a okna zawsze pełne wymagają dodatkowej rampy lub przesunięcia części dostaw.
Punktualność dostaw względem okna
Harmonogram ma sens tylko wtedy, gdy pojazdy zjawiają się w swoich oknach. Punktualność mierzy się jako odsetek wizyt, w których przyjazd mieści się w tolerancji wokół początku okna, na przykład plus minus 15 minut. Tolerancja jest parametrem biznesowym: krótka rampa z ciasnym harmonogramem potrzebuje mniejszej, a plac z dużym zapasem miejsca może przyjąć większą.
Wskaźnik liczy się dla przewoźnika albo kontrahenta, a jego wynik trafia do rozmów o jakości współpracy. Warto raportować go w dwóch przekrojach: według przewoźnika i według godziny okna, bo ta sama firma bywa punktualna rano i spóźniona po południu. Zapytanie łączy rezerwację z zapisem przyjazdu i porównuje dwie godziny.
WITH v AS (
SELECT b.CarrierId,
CASE WHEN ABS(DATEDIFF(MINUTE, b.SlotStart, a.ArrivedAt)) <= 15
THEN 1 ELSE 0 END AS IsOnTime
FROM dbo.DockBooking AS b
JOIN dbo.Arrival AS a ON a.BookingId = b.BookingId
WHERE b.Status <> 9
)
SELECT CarrierId,
COUNT(*) AS Visits,
CAST(100.0 * SUM(IsOnTime) / COUNT(*) AS decimal(5,1)) AS OnTimePct
FROM v
GROUP BY CarrierId
ORDER BY OnTimePct;
Niski wynik nie zawsze oznacza winę przewoźnika. Jeżeli okna są krótsze niż realny czas obsługi, poprzednia wizyta wydłuża się i cała kolejka przesuwa, a kolejni kierowcy czekają mimo punktualnego przyjazdu. Zanim wskaźnik trafi do umowy z przewoźnikiem, trzeba więc porównać go z czasem trwania wizyt na rampie. Zasady wyznaczania długości okien opisuje artykuł o oknach czasowych.
Wdrożenie platformy do awizacji
Platformę wdraża się zwykle bez przebudowy infrastruktury informatycznej firmy. Wystarczy zdefiniować punkty integracji z systemem magazynowym oraz przeszkolić zespół ochrony i dyspozytorów. Z platformy korzystają najczęściej centra dystrybucyjne obsługujące wielu dostawców, zakłady produkcyjne pracujące w modelu just in time oraz firmy logistyczne zarządzające ruchem pojazdów wielu klientów. Zasady łączenia z magazynem opisuje artykuł o integracji systemów magazynowych.
Konfigurację przed pierwszą awizacją porządkują cztery grupy danych.
- Rampy i bramy - lista stanowisk z kodami, do których kalendarz przypisuje wizyty.
- Reguły slotów - długość siatki czasowej i zasady wyliczania długości okna dla pojazdu.
- Konta i role - uprawnienia dyspozytora i ochrony oraz dostawców z przewoźnikami.
- Punkty integracji - komunikaty do WMS i ERP oraz odbiór potwierdzeń dostawy.
Pełny obraz procesu przedstawia artykuł o awizacji dostaw, a ogólne cele systemu opisuje tekst o systemie awizacji. Kalendarze i ich widoki omawia artykuł o kalendarzach w VSS.net, a przegląd ramp i doków uzupełnia stronę o oknach czasowych w systemie YMS.
Demonstracja pozwala obejrzeć harmonogram na danych przykładowych, zanim zapadnie decyzja o wdrożeniu. Interaktywne demo awizacji działa w przeglądarce bez rejestracji, a producent publikuje też stronę o platformie do awizacji.




