Skip to content

Rezerwacje

W tym dokumencie znajdziesz podstawowe informacje dotyczące obsługi rezerwacji w systemie platformaERP.

Jakie dokumenty wprowadzają rezerwacje

  1. Zamówienia o typie ZR — zamówienie rezerwacyjne, na zamówieniu ZR termin jest wymagany.
  2. Zamówienia o typie ZS, ZSC z terminem — na zamówieniach ZS, ZSC termin jest opcjonalny.
  3. Jeżeli termin jest wprowadzony na pozycji, ma on pierwszeństwo przed terminem z nagłówka.

Niezrealizowane zamówienia powyższych typów, z wypełnionym terminem na pozycjach lub w nagłówku, wprowadzają rezerwacje na indeksie.

Jak liczona jest rezerwacja

  • Rezerwacja jest liczona sumarycznie dla indeksu.
  • W szczegółach indeksu wyświetlana jest lista rezerwacji.
  • W kontekście dokumentu, np. wydania, obliczany jest wskaźnik rezerwacji uwzględniający magazyn, stan, termin

Przykład obliczania wskaźnika rezerwacji:

Operacja Termin MAG Ilość
Stan magazynowy bieżąca 100 2
Stan magazynowy bieżąca 200 10
Zamówienie ZS1 2026-08-01 200 5
Zamówienie ZR2 2026-08-02 200 5
Zamówienie ZS3 2026-08-03 - 2
Zamówienie ZS4 2026-08-04 200 2

Zasady wyliczania:

  1. Zamówienia sortowane są rosnąco wg daty zamówienia.
  2. Zamówienie z przypisanym magazynem (MAG) rezerwuje ilość na tym magazynie.
  3. Zamówienie bez przypisanego magazynu (MAG = -) rezerwuje na każdym magazynie.

Scenariusze:

  1. Próba realizacji zamówienia ZS4: MAG (10 + 2) - ZAM (5 + 5 + 2 + 2) = 12 - 14 => wynik: niepowodzenie
  2. Próba realizacji zamówienia ZS3 z MAG 200: MAG (10) - ZAM (5 + 5 + 2) = 10 - 12 => wynik: niepowodzenie
  3. Próba realizacji zamówienia ZS3 z MAG 100: MAG (2) - ZAM (2) = 2 - 2 => wynik: POWODZENIE
  4. Próba realizacji zamówienia ZR2 z MAG 200: MAG (10) - ZAM (5 + 5) = 10 - 10 => wynik: POWODZENIE

Ile jest ogólnie zarezerwowane z danego indeksu

  • Karta indeksu (kartoteka indeksu) - w nagłówku widoczne jest pole „Il. rezerwacja". To suma ze wszystkich niezrealizowanych zamówień ZS/ZSC/ZR z wypełnionym terminem, liczona globalnie (bez podziału na magazyny).
  • Ta sama wartość jest dostępna jako kolumna na listach indeksów.
  • Wskaźnik jest przeliczany automatycznie przy zmianach statusu zamówienia/pozycji (zatwierdzenie, realizacja, anulowanie)

Jakie zamówienia rezerwują dany indeks

  • Karta indeksu → zakładka „Rezerwacje".
  • Pokazuje listę zamówień typu ZS, ZSC, ZR, które mają niezrealizowaną ilość i wypełniony termin realizacji (na pozycji lub w nagłówku zamówienia).
  • Kolumny: numer zamówienia, data zamówienia, termin, kontrahent, magazyn, ilość pozostała do realizacji.
  • Posortowane rosnąco wg terminu — zamówienie z najwcześniejszym terminem ma „pierwszeństwo" do stanu magazynowego.
  • Zamówienie bez wypełnionego terminu nie pojawi się na liście i nie rezerwuje stanu, nawet jeśli jest zatwierdzone.

Czy mogę bezpiecznie wydać towar z dokumentu magazynowego (WZ, RW, ...)

  • Otwórz dokument magazynowy w statusie SZKIC → zakładka „Rezerwacje".
  • Zakładka sprawdza, czy po zdjęciu ze stanu pozycji rozchodowych tego dokumentu, stan na magazynie dokumentu nadal pokryje rezerwacje innych, kwalifikujących się zamówień.
  • Pokazywane są tylko indeksy, dla których jest problem — stan nie pokrywa rezerwacji (kolumna „dostępne" ma wartość ujemną).
  • Pusta zakładka = brak kolizji, dokument można bezpiecznie zatwierdzić/wydać.
  • Kolumny: indeks, stan magazynowy, ilość zarezerwowana, ilość dostępna (stan - rezerwacja).

DB - important (TECHNICAL)

  • ilość zamówiona - itemOrderQuantity
  • ilość zarezerwowana - itemReservationQuantity
  • obliczanie itemOrderQuantity: EXEC [wms].[item_updateItemOrderQuantity] @itemID = @itemID
  • obliczanie itemReservationQuantity: EXEC [wms].[item_updateItemReservationQuantity] @itemID = @itemID
  • [document].[order].[orderExpectedDate], [document].[order].[orderLineExpectedDate] - spodziewany termin

Implementacja [wms].[item].[itemReservationQuantity] (TECHNICAL)

  • kolumna [wms].[item].[itemReservationQuantity] decimal(18,3), default 0
  • procedura [wms].[item_updateItemReservationQuantity] (@itemID, @orderID, @orderLineID, @allItems, @checkOnly)
  • liczona jako SUM(orderLine.itemQuantityLeft) dla ZS (F6D5306B-1213-4552-AE57-C63F7CB12ED5), ZSC (180D94A3-4EEA-4B88-8AA9-0789C4FD9356) i ZR (79818C9D-B226-4E90-B262-2304EAA0FC16), pozycje zatwierdzone i niezrealizowane (orderLineStatus >= 1 and < 3, itemQuantityLeft > 0) - szkice nie rezerwują , wymagany termin w naglowku lub na pozycji [document].[order].[orderExpectedDate], [document].[order].[orderLineExpectedDate] .
  • wywołania (analogicznie do itemOrderQuantity): document.documentline_updateOrderRealizedQuantity, document.order_UpdateOrderStatus, erp.order_UpdateOrderStatus, erp.orderLine_InsertUpdate
  • kontrola spójności: EXEC [tools].[test_system] @code = '098'
  • migracja istniejących baz: EXEC [common].[maintence] @option=20 (dodaje kolumnę i przelicza jednorazowo)

Implementacja rezerwacji bieżącej [document].[document_checkReservation] (TECHNICAL)

Uwzględniane są tylko pozycje zamówień ze spodziewanym terminem — [document].[orderLine].[orderLineExpectedDate], z fallbackiem na [document].[order].[orderExpectedDate]. Termin jest też datą, wg której ustawia się kolejka rezerwacji.

EXEC [document].[document_checkReservation] @documentID = @documentID

Parametr @showAll = 1 zwraca wszystkie indeksy dokumentu (bez filtra braków) — do diagnostyki.

Wejście: @documentID (dokument magazynowy). Magazyn i data brane są z nagłówka dokumentu.

Drugi tryb — @itemID zamiast @documentID — zwraca listę zamówień rezerwujących dany indeks (bez agregacji, na wszystkich magazynach), używany przez zakładkę „Rezerwacje" na karcie indeksu (srs/400):

EXEC [document].[document_checkReservation] @itemID = @itemID

Kolumna Opis
orderID, orderFullNR, orderDate zamówienie
orderLineExpectedDate termin realizacji pozycji (fallback na termin nagłówka)
firmID, firmName kontrahent
warehouseID, warehouseCode magazyn zamówienia (null/pusty = rezerwuje na każdym magazynie)
orderLineID, itemQuantityLeft pozycja i ilość pozostała do realizacji

Ten tryb nie filtruje po magazynie ani po stanie — pokazuje surową listę rezerwacji tego indeksu, posortowaną rosnąco wg terminu. Warunki kwalifikacji (typ ZS/ZSC/ZR, status, termin) są identyczne jak w trybie @documentID.

Zwraca tylko indeksy, dla których stan magazynu nie pokrywa rezerwacji:

Kolumna Opis
itemID, itemCode, itemName indeks
stockQuantity stan bieżący na magazynie dokumentu (wms.stockBalance)
reservationQuantity wyliczona rezerwacja
availableQuantity stockQuantity - reservationQuantity (zawsze < 0 w wyniku)

Zasady wyliczania:

  • pod uwagę brane są pozycje rozchodowe dokumentu (sign = -1, status >= 0, itemQuantity > 0) — uwaga: komentarz w skrypcie document.documentLine błędnie podawał 0, faktycznie rozchód to -1
  • rezerwacja = SUM(orderLine.itemQuantityLeft) z niezrealizowanych pozycji ZS, ZSC, ZR (orderLineStatus >= 1 and < 3, itemQuantityLeft > 0) z wypełnionym terminem — isnull(orderLine.orderLineExpectedDate, order.orderExpectedDate); pozycja bez terminu nie rezerwuje
  • magazyn: zamówienie z warehouseID = magazyn dokumentu lub zamówienie bez magazynu (rezerwuje na każdym magazynie)
  • data odcięcia: termin zamówienia powiązanego z pozycją dokumentu, dla pozycji bez powiązania (lub bez terminu) — data dokumentu; brane są zamówienia z termin <= data odcięcia (realizuje regułę sortowania rosnąco wg terminu)
  • gdy jeden indeks występuje na kilku pozycjach dokumentu, brana jest najpóźniejsza data odcięcia
  • kryterium wyniku: stan - rezerwacja < 0 (zgodnie ze scenariuszem ZR2: 10 - 10 = 0 => POWODZENIE)
  • realizowane zamówienie jest wliczane do rezerwacji, bo jego itemQuantityLeft jest jeszcze > 0 (jak w scenariuszach z README)
  • typ ZR (79818C9D-B226-4E90-B262-2304EAA0FC16) jest uwzględniony w obu procedurach rezerwacji oraz w gałęziach przeliczających (documentline_updateOrderRealizedQuantity, document.order_UpdateOrderStatus, erp.order_UpdateOrderStatus, erp.orderLine_InsertUpdate)

Weryfikacja scenariuszy z README:

Scenariusz stan rezerwacja dostępne wynik
ZS4 @200 10 14 -4 niepowodzenie
ZS3 @200 10 12 -2 niepowodzenie
ZS3 @100 2 2 0 POWODZENIE
ZR2 @200 10 10 0 POWODZENIE

Uwaga do scenariusza 1 w opisie: sumuje stan z dwóch magazynów (10 + 2), pozostałe scenariusze liczą stan per magazyn. Implementacja liczy per magazyn dokumentu — wynik (niepowodzenie) jest ten sam.