Studio WMS.net - instrukcja obsługi

Model danych i znaczniki zapisów modułu Dozór celny - dla wdrożeniowców

Moduł Dozór celny przechowuje dane w dziewięciu tabelach z przedrostkiem x_cel_ i jednym widoku. Strona opisuje kolumny, klucze, indeksy unikalne oraz wartości kodowe, które wdrożeniowiec spotka w zapytaniach diagnostycznych. Ruchy magazynowe nie mają własnych tabel: PZC i WZC zapisują zwykłe wiersze dokumentów magazynowych. Warstwy modułu opisuje strona architektura i włączenie.

Na tej stronie

  1. Przegląd tabel i relacji
  2. Tabela x_cel_agencja
  3. Tabela x_cel_kontener
  4. Tabela x_cel_magazyn
  5. Tabela x_cel_dokument
  6. Tabela x_cel_dokument_poz
  7. Tabela x_cel_partia
  8. Tabela x_cel_status_hist
  9. Tabela x_cel_import
  10. Tabela x_cel_pzc
  11. Widok wms_cel_partie
  12. Znaczniki i kody
  13. Klucz partii i indeksy unikalne
  14. Numeracja dokumentów i numer palety
  15. Kasowanie logiczne
  16. Funkcje
  17. Zapytania diagnostyczne
  18. Najczęstsze pytania
  19. Słownik pojęć

Przegląd tabel i relacji

Centralną tabelą jest x_cel_partia: jeden wiersz to jedna partia towaru pod ewidencją celną razem z jej statusem. Partia należy do dokumentu celnego (x_cel_dokument), a ten ma pozycje zgłoszenia (x_cel_dokument_poz). Każda zmiana statusu zostawia ślad w x_cel_status_hist, a komunikaty od agencji trafiają do x_cel_import. Tabela x_cel_pzc wiąże dokument magazynowy PZC z dokumentem celnym i kontenerem. Trzy kartoteki pomocnicze to agencje (x_cel_agencja), kontenery (x_cel_kontener) i magazyny (x_cel_magazyn).

Model danych modułu Dozór celnyDokument celny ma pozycje zgłoszenia i partie. Partia ma historię zmian statusu i łączy się z ruchami magazynowymi kluczem złożonym z magazynu, klienta, indeksu i numeru partii. Kolejka importu wskazuje agencję i dokument, a tabela PZC wiąże dokument magazynowy z dokumentem celnym.x_cel_agencjaID NIP NAZWAEMAIL SPOSOB KLUCZ_APIx_cel_dokumentID TYP NUMER NRIDODNID_AGENCJI KOD_PROCEDURYSTATUS (1-3) MAGAZYNDATA_PRZYJECIA NR_KONTENERAx_cel_dokument_pozID ID_DOK LPNRIDASN ILOSC JMMASA_BRUTTO WARTOSCx_cel_importID KANAL ID_AGENCJITYP_KOMUNIKATU NUMERTRESC HASH_TRESCISTATUS_PRZETW (0-3) BLADID_DOK MAGAZYNx_cel_partiaID ID_DOKMAGAZYN NRIDODN NRIDASNNRSERII (numer partii)STATUS (1-5) STATUS_PRZEDPOCZATEK_DOZORU TERMIN_DOZORUPOWOD_BLOKADY REFNO_PZCx_cel_pzcREFNO ID_DOKNR_KONTENERA LOGINx_cel_status_histID ID_PARTIISTATUS_PRZED STATUS_POZRODLO UZASADNIENIEID_IMPORT LOGIN KIEDYdpmagREFNO PRX TYPDOKMAGAZYN NRIDODNNRIDASN NRSERIIILOSC ACHx_cel_magazynMAGAZYN TYP (SC, MCS, KRAJ)NR_ZEZWOLENIA LIMIT_DNIx_cel_kontenerNUMER (ISO 6346) ROZMIARARMATOR DATA_WJAZDU1:N1:N1:N ID_DOKID_DOKID_DOK1:N ID_PARTIIklucz partiiREFNO
Tabele modułu i ich relacje: dokument celny z pozycjami i partiami, historia statusu, kolejka importu, powiązanie PZC oraz kartoteki agencji, kontenerów i magazynów.

Wszystkie tabele leżą w schemacie dbo, a opisy tabel są zapisane jako właściwość MS_Description. Ich odczyt umożliwia sprawdzenie przeznaczenia tabeli bez zaglądania do dokumentacji.

SELECT o.name AS tabela, CAST(ep.value AS nvarchar(400)) AS opis
FROM sys.objects o
LEFT JOIN sys.extended_properties ep
       ON ep.major_id = o.object_id AND ep.minor_id = 0 AND ep.name = 'MS_Description'
WHERE o.type = 'U' AND o.name LIKE 'x[_]cel[_]%'
ORDER BY o.name;

Tabela x_cel_agencja

Kartoteka agencji celnych, czyli przedstawicieli, którzy składają zgłoszenia za klienta i przysyłają komunikaty. Agencji nie można usunąć na ekranie.

KolumnaTypZnaczenieWartości
IDint, identityKlucz główny.
ACHvarchar(1)Znacznik aktywności.1 aktywna, X usunięta
NAZWAnvarchar(200)Nazwa agencji.
NIPvarchar(15)NIP, 10 cyfr na ekranie; po nim komunikat wskazuje agencję (pole agencjaNip).
EMAILvarchar(200)Adres do komunikatów.
SPOSOBvarchar(10)Sposób wymiany.API, FTPS, RECZNIE (domyślnie)
KLUCZ_APIvarchar(64)Identyfikator klucza API, nie sam sekret.
ROLASYS, LOGIN, KIEDYvarchar(3), varchar(50), datetimeZnaczniki zapisu.ROLASYS równe WMS

Tabela x_cel_kontener

Kartoteka kontenerów. Numer jest unikalny wśród wierszy aktywnych, więc ten sam kontener nie wystąpi w kartotece dwa razy.

KolumnaTypZnaczenieWartości
IDint, identityKlucz główny.
ACHvarchar(1)Znacznik aktywności.1, X
NUMERvarchar(11)Numer ISO 6346 z cyfrą kontrolną; unikalny indeks UQ_x_cel_kontener_NUMER dla ACH równego 1.
ROZMIARvarchar(3)Rozmiar w stopach.20, 40
ARMATORnvarchar(100)Armator.
DATA_WJAZDU, DATA_ZWROTUdateData wjazdu i data zwrotu pustego kontenera.
MAGAZYN, LOGIN, KIEDYvarchar(20), varchar(50), datetimeMagazyn i znaczniki zapisu.

Tabela x_cel_magazyn

Ustawienia magazynu, kluczem jest kod magazynu. Magazyn bez wiersza w tej tabeli jest traktowany jak krajowy z limitem 90 dni.

KolumnaTypZnaczenieWartości
MAGAZYNvarchar(20)Klucz główny, kod magazynu ze skorowidza MAG.
TYPvarchar(4)Typ magazynu.SC skład celny, MCS magazyn czasowego składowania, KRAJ (domyślnie)
NR_ZEZWOLENIAvarchar(50)Numer zezwolenia.
LIMIT_DNIintLimit dni dozoru; termin dozoru partii to data przyjęcia powiększona o ten limit.1-3650, domyślnie 90
LOGIN, KIEDYvarchar(50), datetimeZnaczniki zapisu.

Tabela x_cel_dokument

Dokument celny jednego z trzech typów (T1, DSK, MRN). Unikalny indeks UQ_x_cel_dokument_TYP_NUMER obejmuje typ i numer dokumentu oraz klienta, tylko dla wierszy aktywnych, więc dokument o tym samym numerze może istnieć u dwóch różnych klientów.

KolumnaTypZnaczenieWartości
IDint, identityKlucz główny.
ACHvarchar(1)Znacznik aktywności; usunięcie dokumentu ustawia X.1, X
TYPvarchar(4)Rodzaj dokumentu.T1, DSK, MRN
NUMERvarchar(40)Numer dokumentu; dla T1 i MRN dokładnie 18 znaków.
NRIDODNbigintKlient, czyli kontrahent z tabeli knkon.
ID_AGENCJIintAgencja z x_cel_agencja.
KOD_PROCEDURYvarchar(2)Kod procedury celnej ze skorowidza CPR.71, 40, 42, 51, 53
DATA_PRZYJECIA, DATA_ZWOLNIENIAdateData przyjęcia dokumentu i data zwolnienia z komunikatu.
STATUStinyintStatus zapisany na dokumencie.1 pod dozorem, 2 zgłoszony, 3 zwolniony
NR_KONTENERAvarchar(11)Kontener dokumentu.
MAGAZYN, ODDZIALvarchar(20)Magazyn i oddział.
ROLASYSvarchar(3)Rola systemowa.WMS
PLIK, UWAGI, LOGIN, KIEDYnvarchar, datetimeNazwa pliku, uwagi (500 znaków) i znaczniki zapisu.

Tabela x_cel_dokument_poz

Pozycje zgłoszenia dokumentu celnego. To na nich opiera się saldo dokumentu i kontrola rozbieżności w raportach.

KolumnaTypZnaczenieWartości
ID, ID_DOKintKlucz główny i dokument nadrzędny.
ACHvarchar(1)Znacznik aktywności; usunięcie pozycji ustawia X.1, X
LPintNumer pozycji.
NRIDASNbigintIndeks z kartoteki asortymentu klienta (tabela knaso).
OPIS, JMnvarchar(200), varchar(10)Opis towaru i jednostka miary.
ILOSCdecimal(15,3)Ilość zgłoszona.większa od 0
MASA_BRUTTO, WARTOSCdecimal(15,3), decimal(15,2)Masa brutto w kg i wartość.

Tabela x_cel_partia

Partia pod ewidencją celną. Wiersz powstaje przy zatwierdzeniu PZC, a jego pola statusu (STATUS, STATUS_PRZED) oraz powodu blokady zmieniają procedury modułu.

KolumnaTypZnaczenieWartości
ID, ID_DOKintKlucz główny i dokument celny.
ACHvarchar(1)Znacznik aktywności.1, X
NRIDODN, NRIDASNbigintKlient i indeks asortymentu.
NRSERIIvarchar(20)Numer partii, ten sam co w ruchach magazynowych.
MAGAZYN, ODDZIALvarchar(20)Magazyn i oddział.
NR_KONTENERAvarchar(11)Kontener partii.
STATUStinyintStatus celny.1 pod dozorem, 2 zgłoszony, 3 zwolniony, 4 unijny, 5 zablokowany
STATUS_PRZEDtinyintStatus sprzed blokady; do niego wraca zdjęcie blokady.puste poza statusem 5
POWOD_BLOKADYnvarchar(500)Treść powodu blokady.
POCZATEK_DOZORU, TERMIN_DOZORUdatePoczątek dozoru i jego termin.
ILOSC_PRZYJETAdecimal(15,3)Ilość przyjęta na PZC.
REFNO_PZCbigintREFNO dokumentu PZC.
ODPOWIEDZIALNY, LOGIN, KIEDYvarchar(50), datetimeOsoba odpowiedzialna i znaczniki zapisu.
STAMProwversionWersja wiersza.

Tabela x_cel_status_hist

Historia zmian statusu partii. Tabela nie ma znacznika ACH, bo wpisy nie są kasowane.

KolumnaTypZnaczenieWartości
ID, ID_PARTIIintKlucz główny i partia (indeks IX_x_cel_status_hist_PARTIA po partii i czasie).
STATUS_PRZED, STATUS_POtinyintStatus przed zmianą (puste przy przyjęciu) i po niej.1-5
ZRODLOvarchar(10)Skąd pochodzi zmiana.PZC, IMPORT, RECZNIE, SYSTEM
UZASADNIENIEnvarchar(500)Opis zmiany.
ID_IMPORTintKomunikat, który wywołał zmianę.tylko przy IMPORT
LOGIN, KIEDYvarchar(50), datetimeKto i kiedy.

Tabela x_cel_import

Kolejka komunikatów od agencji. Unikalny indeks UQ_x_cel_import_HASH na kolumnie HASH_TRESCI nie dopuszcza dwóch komunikatów o identycznej treści. Szczegóły przetwarzania opisuje strona komunikaty agencji.

KolumnaTypZnaczenieWartości
IDint, identityKlucz główny.
KANALvarchar(5)Kanał odbioru.API, FTPS, PLIK
ID_AGENCJIintAgencja, jeśli rozpoznana.
TYP_KOMUNIKATU, TYP_DOKUMENTU, NUMERvarcharPola odczytane z treści: rodzaj komunikatu, typ dokumentu i numer.ZGLOSZENIE, ZWOLNIENIE; T1, DSK, MRN
TRESCnvarchar(max)Treść komunikatu (JSON).
HASH_TRESCIvarbinary(32)SHA-256 treści.
STATUS_PRZETWtinyintWynik przetwarzania.0 oczekuje, 1 przetworzony, 2 błąd, 3 częściowy
BLADnvarchar(1000)Treść błędu albo uwagi przy wyniku częściowym.
ID_DOK, MAGAZYNint, varchar(20)Dokument celny i magazyn.
DATA_ODBIORU, DATA_PRZETW, LOGINdatetime, varchar(50)Czas odbioru, czas przetworzenia i login.

Tabela x_cel_pzc

Powiązanie dokumentu magazynowego PZC z dokumentem celnym i kontenerem. Wiersz powstaje już w buforze, a przy zatwierdzeniu procedura zapisu PZC aktualizuje go o dokument celny i kontener podane w zapytaniu.

KolumnaTypZnaczenieWartości
REFNObigintKlucz główny: numer referencyjny dokumentu PZC w ruchach magazynowych.
ID_DOKintDokument celny.
NR_KONTENERAvarchar(11)Kontener przyjęcia.
LOGIN, KIEDYvarchar(50), datetimeZnaczniki zapisu.

Widok wms_cel_partie

Widok łączy partie aktywne z bieżącym stanem policzonym z ruchów magazynowych. Zwraca wszystkie kolumny partii oraz trzy kolumny wyliczane (STAN, WYDANO, DNI_DO_KONCA). Stan to suma ilości zatwierdzonych ruchów (ACH równe 1, ROLASYS równe WMS) po kluczu partii (magazyn, klient, indeks, numer partii). Przesunięcia ZL dają zero netto, więc nie zmieniają stanu. Pole WYDANO to ILOSC_PRZYJETA pomniejszona o STAN, ale nie mniej niż zero. Pole DNI_DO_KONCA to liczba dni od dziś do TERMIN_DOZORU i bywa ujemne po terminie.

DECLARE @MAG varchar(20) = 'KOD_MAGAZYNU';
SELECT v.ID, v.NRSERII, v.STATUS, dbo.sf_cel_status(v.STATUS) AS STATUS_OPIS,
       dbo.sf_cel_dok(d.TYP, d.NUMER) AS DOKUMENT, v.NR_KONTENERA,
       v.TERMIN_DOZORU, v.DNI_DO_KONCA, v.ILOSC_PRZYJETA, v.STAN, v.WYDANO
FROM dbo.wms_cel_partie v
JOIN dbo.x_cel_dokument d ON d.ID = v.ID_DOK
WHERE v.MAGAZYN = @MAG
ORDER BY v.STATUS, v.TERMIN_DOZORU, v.NRSERII;

Znaczniki i kody

Poniższa tabela zbiera wartości kodowe, które występują w tabelach modułu, a także w ruchach magazynowych i skorowidzach.

Pole lub znacznikWartościZnaczenie
ACH w tabelach modułu1, X1 wiersz aktywny, X wiersz usunięty logicznie.
ACH w ruchach magazynowych1, 0, X1 aktywny (zatwierdzony), 0 bufor, X usunięty; kontrola wydania obejmuje ACH równe 0 i 1.
ROLASYSWMSRola systemowa wierszy modułu i ruchów branych do stanu.
PRX i TYPDOK dokumentu przyjęciaPZ i PZCDokument PZC w ruchach magazynowych.
PRX i TYPDOK dokumentu wydaniaWZ i WZCDokument WZC; ilości pozycji są ujemne.
STATUS partii1-5Pod dozorem, Zgłoszony, Zwolniony, Unijny, Zablokowany.
STATUS dokumentu celnego1-3Pod dozorem, zgłoszony, zwolniony; na ekranie status dokumentu bywa wyliczany z partii.
STATUS_PRZETW0-3Oczekuje, Przetworzony, Błąd, Częściowy.
ZRODLO w historiiPZC, IMPORT, RECZNIE, SYSTEMPrzyjęcie, komunikat agencji, ręczna zmiana statusu, automatyczna blokada po terminie.
KANALAPI, FTPS, PLIKKanał odbioru komunikatu.
TYP dokumentu celnegoT1, DSK, MRNRodzaj dokumentu.
TYP magazynuSC, MCS, KRAJSkład celny, magazyn czasowego składowania, magazyn krajowy.
SPOSOB agencjiAPI, FTPS, RECZNIESposób wymiany komunikatów.
Kody procedur w skorowidzu CPR71, 40, 42, 51, 53Składowanie w składzie celnym, dopuszczenie do obrotu, dopuszczenie z dostawą wewnątrzwspólnotową, uszlachetnianie czynne, odprawa czasowa.
PRX skorowidzówCPR, MAG, JQS21Procedury celne, magazyny, transakcje.
PRX menuMBR, BARWiersz sekcji i wiersz paska.

Klucz partii i indeksy unikalne

Partię identyfikuje kombinacja czterech pól: magazyn, klient (NRIDODN), indeks asortymentu (NRIDASN) i numer partii (NRSERII, ten sam co w ruchach magazynowych). Unikalny indeks UQ_x_cel_partia_KLUCZ jest filtrowany po ACH równym 1, więc tej samej partii nie da się objąć ewidencją celną dwa razy. Próba przyjęcia na drugim PZC kończy się błędem 50205. Ten sam klucz łączy partię z ruchami magazynowymi, więc wiersz partii bez pasujących ruchów ma STAN równy 0.

Pozostałe indeksy mają charakter pomocniczy. Indeks IX_x_cel_partia_TERMIN obejmuje TERMIN_DOZORU i jest filtrowany po statusie niższym niż 3 albo równym 5 (pod dozorem, zgłoszony, zablokowany), co przyspiesza kokpit oraz raport terminów. Indeks IX_x_cel_partia_DOK i IX_x_cel_dokument_poz_DOK przyspieszają odczyt partii i pozycji dokumentu. Indeks IX_x_cel_import_OCZEKUJE wskazuje komunikaty ze statusem 0.

SELECT i.name, i.is_unique, i.filter_definition
FROM sys.indexes i
WHERE i.object_id IN (OBJECT_ID('dbo.x_cel_partia'), OBJECT_ID('dbo.x_cel_dokument'),
                      OBJECT_ID('dbo.x_cel_kontener'), OBJECT_ID('dbo.x_cel_import'))
  AND i.name LIKE '%x[_]cel%'
ORDER BY i.name;

Numeracja dokumentów i numer palety

Numer dokumentu PZC albo WZC powstaje dopiero przy zatwierdzeniu, z licznika miesięcznego. Procedura dostaje typ rejestru wraz z typem dokumentu oraz maskę #RRRR-#MM-#XXXXX-#TYP z datą dokumentu, a wynik ma postać RRRR-MM-NNNNN-TYP, np. 2026-10-00001-PZC. Licznik liczy osobno dla każdego miesiąca i typu. Dokument w buforze nie ma jeszcze numeru z tego licznika.

Numer palety pochodzi z osobnego licznika ciągłego (parametry PR i PAL, maska #XXXXXXXXXXXXXXXXXX). Przycisk Nowy numer nośnika na ekranie PZC pobiera kolejną wartość z tego licznika.

Kasowanie logiczne

Moduł nie usuwa fizycznie wierszy kartotek i dokumentów. Usunięcie dokumentu celnego lub jego pozycji ustawia ACH równe X; zapytania i indeksy unikalne pomijają takie wiersze. Dzięki filtrowi w indeksie można ponownie dodać dokument o tym samym numerze po usunięciu poprzedniego. Usunięcie jest możliwe tylko wtedy, gdy dokument nie ma przyjętych partii (kody 50021 i 50022). Wpisy historii statusu i kolejki importu nie mają kasowania.

Funkcje

Cztery funkcje skalarne obsługują wyświetlanie i walidację.

  • sf_cel_status - zamienia kod statusu 1-5 na nazwę: Pod dozorem, Zgłoszony, Zwolniony, Unijny, Zablokowany.
  • sf_cel_dok - składa numer do wyświetlenia z typu i numeru, ale nie dubluje typu, gdy numer już się nim zaczyna (np. DSK/DEMO/0001/26).
  • sf_cel_iso6346_cyfra - liczy cyfrę kontrolną ISO 6346 z pierwszych dziesięciu znaków; zwraca -1, gdy format jest zły.
  • sf_cel_iso6346_ok - sprawdza cały numer kontenera po przycięciu spacji oraz zamianie na wielkie litery; zwraca 1 dla zgodnego numeru.

Cyfra kontrolna ISO 6346 powstaje tak: litery dostają wartości od A równego 10 z pominięciem wielokrotności 11, wartość każdego z dziesięciu znaków mnoży się przez 2 do potęgi równej pozycji minus jeden, sumę dzieli się z resztą przez 11, a resztę przez 10. Ekran kartoteki kontenerów opisuje strona agencje i kontenery.

Zapytania diagnostyczne

Zapytania poniżej tylko czytają dane. Pierwsze pokazuje historię jednej partii w kolejności zdarzeń, drugie wskazuje wiersze ruchów magazynowych dokumentów PZC i WZC.

DECLARE @MAG varchar(20) = 'KOD_MAGAZYNU', @PARTIA varchar(20) = 'NUMER_PARTII';
SELECT h.KIEDY, h.STATUS_PRZED, h.STATUS_PO, h.ZRODLO, h.UZASADNIENIE, h.LOGIN, h.ID_IMPORT
FROM dbo.x_cel_status_hist h
JOIN dbo.x_cel_partia p ON p.ID = h.ID_PARTII
WHERE p.MAGAZYN = @MAG AND p.NRSERII = @PARTIA
ORDER BY h.KIEDY, h.ID;
SELECT TOP (50) m.ID_DPMAG, m.REFNO, m.PRX, m.TYPDOK, m.ACH, m.NRSERII, m.ILOSC
FROM dbo.dpmag m
WHERE m.TYPDOK IN ('PZC', 'WZC')
ORDER BY m.ID_DPMAG DESC;

Najczęstsze pytania

Jak policzyć, ile partii ma dany status?

Zlicz wiersze x_cel_partia z ACH równym 1 po kolumnie STATUS, w ramach jednego magazynu. Kokpit pokazuje te same liczniki, a status 5 zawiera partie zablokowane ręcznie i po terminie.

Czym różni się ACH równe 0 od X w ruchach magazynowych?

ACH równe 0 oznacza bufor, czyli dokument jeszcze niezatwierdzony, a X oznacza wiersz usunięty. Do stanu partii wchodzą tylko ruchy z ACH równym 1.

Dlaczego dokument celny o tym samym numerze może być w rejestrze dwa razy?

Unikalność dotyczy trzech pól: typu, numeru i klienta, i tylko wierszy aktywnych. Ten sam numer u innego klienta albo po usunięciu poprzedniego dokumentu jest dopuszczalny.

Skąd się bierze pole Wydano?

Widok wms_cel_partie liczy je jako ilość przyjętą minus bieżący stan, z dolną granicą zero. Nie ma osobnej kolumny z zapisaną wartością.

Czy kolumna KLUCZ_API przechowuje sekret agencji?

Nie, tylko identyfikator klucza do 64 znaków. Wartości kluczy nie podaje się w dokumentacji ani w zapytaniach diagnostycznych.

Słownik pojęć

ACH
Znacznik aktywności wiersza: 1 aktywny, X usunięty logicznie, a w ruchach magazynowych także 0 dla bufora.
Klucz partii
Magazyn, klient, indeks asortymentu i numer partii razem; unikalny wśród wierszy aktywnych tabeli x_cel_partia.
Hash treści
Skrót SHA-256 treści komunikatu, zapisany z unikalnym indeksem, który blokuje duplikaty.
Kasowanie logiczne
Oznaczenie wiersza jako usuniętego bez fizycznego usuwania; zapytania pomijają takie wiersze.
Stan partii
Suma ilości zatwierdzonych ruchów magazynowych po kluczu partii; przesunięcia ZL dają zero netto.
Licznik miesięczny
Numerator dokumentów liczący od początku każdego miesiąca, z którego pochodzi numer w formacie RRRR-MM-NNNNN-TYP.