# Przyjęcie jednym skanem: ilość i partia z programu ERP, nie z klawiatury

> W opisywanym wdrożeniu terminal bierze z kodu na etykiecie pierwszy element, a ilość i partię pobiera z programu ERP, bez wpisywania ich przez operatora.

Adres strony: https://magazyn.softwarestudio.com.pl/przyjecie-jednym-skanem-ilosc-i-partia-z-programu-erp/

---

Przyjęcie z etykiety z programu ERP sprowadza się w opisywanym wdrożeniu do jednego skanu: magazynier skanuje kod sztuki, a terminal sam odczytuje jej dane z programu ERP. Na tym kroku jedynym polem do wpisania jest pole skanu, a pozostałe pola są ukryte albo tylko do odczytu.
Kierownik magazynu albo osoba odpowiedzialna za przyjęcia widzi te same dane w zestawieniach, pod nagłówkami bliższymi procesowi niż standardowe. Opis dotyczy wyłącznie ekranu przyjęcia na terminalu.

W opisywanym wdrożeniu ilość i partia pochodzą z programu ERP, bo etykieta niesie klucz odczytu: gdy kod ma kilka elementów, terminal bierze pierwszy i według niego pyta program ERP. Zeskanowana sztuka trafia do skanów czekających na nośnik dopiero wtedy, gdy kartoteka ma dla niej dokładnie jeden wiersz, a kontrole stanu i skanów czekających niczego nie znajdą.

Odróżnia to opisywane wdrożenie od przyjęcia z wpisywaniem danych z klawiatury. Dane z programu ERP lądują w ruchu magazynowym w polach o innym znaczeniu niż standardowe, co opisujemy w osobnej sekcji. Artykuł kończy się na wpisie do skanów czekających, a o tym, co dzieje się z wpisem dalej, piszemy w tekście o [skanach czekających na nośnik](https://system.wms.net.pl/skany-czekaja-na-nosnik-stan-zmienia-zamkniecie-palety/).

## Terminal bierze z kodu pierwszy element

Po klawiszu ENTER terminal sprawdza, czy wartość w polu skanu zawiera znak rozdzielający. Jeśli tak, tnie wartość po tym znaku. Pierwszy element terminal bierze i wpisuje z powrotem do pola, a kod bez znaku rozdzielającego idzie do odczytu w całości. Wynik tej operacji jest kluczem, po którym terminal czyta dane sztuki z programu ERP. Pole skanu ma ustawiony limit długości.

Według dokumentacji wdrożenia powód jest taki, że etykieta może mieć kilka sekcji, a program ma czytać tylko pierwszą i na jej podstawie odczytać z bazy programu ERP informacje o sztuce. Według tej samej dokumentacji dane sztuki wpisuje się raz, przy znakowaniu, więc przy przyjęciu system odczytuje je z programu ERP zamiast prosić o ponowny wpis. Etykieta niesie więc klucz, a nie same dane. Inną kontrolę etykiet, opartą na dwóch skanach i słowniku kodów, opisuje strona o [innej kontroli etykiet](/kontrola-etykiet-na-kolektorze-dwa-skany-i-slownik-kodow/). Gdy ilość jest mierzona przy przyjęciu, a nie odczytana z etykiety, odpowiada na to strona o [ilości mierzonej przy przyjęciu](/jedna-sztuka-jeden-nosnik-waga-i-dlugosc-w-przyjeciu/).

> Z kodu o kilku elementach terminal bierze pierwszy, a ilość i partię czyta z programu ERP.

## Ilość i partię terminal pobiera z programu ERP po skanie

Odczyt z programu ERP to zapytanie dynamiczne wysyłane przez serwer połączony: pyta o wiersze, które pasują do kodu, bez względu na wielkość liter. Ekran używa pierwszego zwróconego wiersza. W odpowiedzi przychodzą ilość z kodem partii oraz indeks sztuki z numerem dokumentu zewnętrznego, a dochodzą do nich kod kontrahenta (zero, gdy go brak) i data etykiety.

Odpowiedź trafia do pól ukrytych albo tylko do odczytu, a kod kontrahenta do zmiennej skryptu terminala. Numer dokumentu zewnętrznego zapisuje się w dwóch polach formularza. Jedyne pole do wpisania na tym kroku to pole skanu, więc operator niczego nie wpisuje. Inny przypadek odczytu z programu ERP, czyli zamówienia czytane z widoku, opisuje artykuł o [imporcie zamówień z widoku](https://www.programmagazyn.pl/zamowienia-z-widoku-erp-filtr-wczytanych-i-paczka-importu/). Gdzie leżą dane klienta względem bazy produktu i jak zapytania wskazują połączenie, opisuje artykuł o [bazie dedykowanej klienta](https://www.softwarestudio.com.pl/magazyn-wms-net/roznice-klienta-w-osobnej-bazie-obok-bazy-produktu/).

## Odczytane dane trafiają do pól o innym znaczeniu niż w standardzie

W ruchu magazynowym dane z etykiety zajmują pola, które w standardzie platformy mają inne znaczenie. Numer dokumentu zewnętrznego trafia do pola numeru kontenera, a kod kontrahenta do pola dowolnego opisu pozycji. Kod etykiety zapisuje się w polu numeru nośnika z kodu EAN, kod partii w polu numeru serii, a data etykiety w polu daty zatwierdzenia dokumentu.

Tabela pokazuje dane z etykiety i ich miejsce w przyjęciu (przyjęcia zewnętrzne).

| Dana z programu ERP | Pole w ruchu magazynowym (znaczenie standardowe) | Nagłówek w zestawieniu przyjęć |
| --- | --- | --- |
| ilość | ilość pozycji | „Ilość” |
| kod etykiety | numer nośnika z kodu EAN | „Kod etykiety” |
| kod partii | numer serii | „Nr partii” |
| numer dokumentu zewnętrznego | numer kontenera | „Nr dokumentu dostawy” na liście skanów czekających, „Nr dokumentu przyjęcia” na liście pozycji przyjęć |
| kod kontrahenta | dowolny opis pozycji dokumentu | „Kod kontrahenta” |
| data etykiety | data zatwierdzenia dokumentu | nagłówek bez opisu (nazwa techniczna) na liście skanów czekających |

Zestawienia kierownika dają tym danym nagłówki bliższe procesowi niż standard. Pole numeru kontenera nazywa się „Nr dokumentu dostawy” na liście skanów czekających i „Nr dokumentu przyjęcia” na liście pozycji przyjęć, a obok stoją trzy kolejne nagłówki: „Kod etykiety”, „Nr partii”, „Kod kontrahenta”. Dla przyjęć wewnętrznych to samo pole nazywa się „Numer dokumentu PZ”, a kodu kontrahenta w zestawieniu nie ma. Data etykiety ma w zestawieniu skanów czekających nagłówek bez opisu, czyli nazwę techniczną.

## Dwie kontrole sprawdzają stan i skany czekające, zanim powstanie wpis

Zanim ruszą kontrole, indeks z odpowiedzi programu ERP jest szukany w kartotece WMS i musi trafić dokładnie jeden wiersz. W przeciwnym razie terminal pokazuje okno z komunikatem „Brak kartoteki asortymentowej!” z dopiskiem zeskanowanego kodu. Jak odświeżyć lokalną kopię kartoteki bez ryzyka pustej tabeli, opisuje artykuł o [odświeżaniu kopii kartoteki](https://sql.server.net.pl/sql-server/odswiezanie-kopii-kartoteki-merge-zamiast-truncate/).

Kontrola stanu to zapytanie do funkcji, która sumuje zatwierdzone ruchy magazynowe sztuki o danym kodzie etykiety. Gdy wynik jest niepusty, czyli suma jest różna od zera, terminal pokazuje okno z komunikatem, że sztuka jest już na stanie, z dopiskiem kodu. Stan liczy się netto, więc tę kontrolę zatrzymuje wyłącznie suma różna od zera. Kontrola skanów czekających pyta o ten sam kod wśród aktywnych wpisów skanów czekających, a niepusty wynik daje okno z komunikatem, że sztuka została już dopisana. Zapytanie dostaje numer dokumentu, ale go nie używa, więc sprawdza skany czekające wszystkich dokumentów.

- Kontrola stanu. Suma zatwierdzonych ruchów sztuki o tym kodzie; wynik niepusty zatrzymuje skan.
- Kontrola skanów czekających. Aktywne wpisy o tym samym kodzie w skanach czekających; wynik niepusty zatrzymuje skan.

Gdy obie kontrole zwrócą pusty wynik, zapis rusza od razu, a po skanie nie ma kroku „Zatwierdź” ani pytania o ilość. Zapis to jedno wstawienie wiersza do skanów czekających z danymi z etykiety i danymi sesji, a obok powstaje wpis do historii dokumentu. Na tym artykuł się kończy, bo dalszy los wpisu opisuje tekst o skanach czekających na nośnik.

Przykład (dane wymyślone): jedna sztuka przechodzi przez skan, a lista numerowana pokazuje kolejne kroki.

1. Magazynier skanuje etykietę sztuki o kodzie ABC-0001.
2. Terminal bierze pierwszy element kodu i pyta program ERP, a w odpowiedzi dostaje ilość 35 z partią P-17 oraz numer dokumentu dostawy D-5.
3. Indeks znajduje w kartotece dokładnie jeden wiersz, a żadna z dwóch kontroli nie znajduje tej sztuki ani na stanie, ani wśród skanów czekających.
4. Wpis powstaje bez wpisywania czegokolwiek, a na liście pojawia się wiersz z ilością 35.
5. Magazynier nie wpisał ani ilości, ani partii.
6. Ten sam kod zeskanowany drugi raz zatrzymuje się na drugiej kontroli i pokazuje okno z komunikatem.

## Operator widzi wynik skanu albo odrzucenie na tym samym ekranie

Po zapisie ekran pokazuje w polu „Ostatni zeskanowany towar” nazwę i ilość z etykiety. Licznik sztuk w bieżącym nośniku rośnie, a lista z trzema kolumnami („Indeks”, „Kod”, „Ilość”) dostaje nowy wiersz. Na ekranie pojawia się też podpowiedź „Pozycja została dopisana!”.

Skan, który nie przechodzi kontroli, pokazuje modalne okno „Komunikat” na prawie całą szerokość ekranu. Dzieje się tak w czterech sytuacjach: gdy brakuje danych etykiety, gdy brakuje wiersza w kartotece, gdy sztuka jest już na stanie albo gdy została już dopisana. Terminal odtwarza wtedy sygnał dźwiękowy, a pole skanu traci fokus. Po zamknięciu okna fokus wraca do pola, a jego zawartość jest zaznaczona.

## Weryfikacja etykiety odpowiada z danych magazynu, nie z programu ERP

Ekran „Weryfikacja etykiety” na terminalu tnie kod tak samo jak przyjęcie, ale czyta stan z bazy WMS, bez zapytania do programu ERP. Pokazuje nazwę z pola pomocniczego i indeks sztuki, a obok partię i ilość. Dalej widać nośnik i adres oraz znacznik blokady z odpowiedzią tak albo nie. Sztuka bez stanu daje okno „Nie znaleziono!”.

- Przyjęcie sztuki. Terminal czyta dane sztuki z programu ERP, w tym ilość i partię.
- Weryfikacja etykiety. Terminal czyta stan z bazy WMS i nie pyta programu ERP.

## Pytania do analizy

Przed wdrożeniem podobnego rozwiązania zadajemy cztery pytania. To pytania do czytelnika, a nie fakty o opisywanym wdrożeniu.

1. Które dane o sztuce są znane już przy znakowaniu i czy magazynier powinien wpisywać je jeszcze raz przy przyjęciu?
2. Czy kod na etykiecie ma nieść dane, czy tylko identyfikator, po którym system pobierze dane z programu ERP?
3. Co ma wychwycić kontrola ponownego przyjęcia: sztukę już będącą na stanie czy także dwukrotny skan w trakcie jednego przyjęcia?
4. Które dane z programu ERP trafiają w Twoim systemie do pól o innym znaczeniu i czy nagłówki zestawień to wyjaśniają?

## Pytania i odpowiedzi o przyjęciu jednym skanem

## Słownik pojęć o przyjęciu jednym skanem

Terminy używane przy opisie przyjęcia, w którym ilość i partię terminal pobiera z programu ERP.
