> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnilinker.pl/llms.txt
> Use this file to discover all available pages before exploring further.

# Mapowania pól

> Wybierz, które pole ERP wypełnia które pole w Omnilinkerze, i przekształcaj wartości podczas importu.

Mapowanie pola łączy jedno pole w Twoim ERP z jednym polem w Omnilinkerze, na przykład kolumnę Wapro
`INDEKS_KATALOGOWY` z polem **SKU** produktu. Gdy produkt lub marka przychodzi z ERP, Omnilinker odczytuje pola ERP
wskazane w Twoich mapowaniach, stosuje wartości domyślne i transformacje, a wynik zapisuje w katalogu.

Mapowania należą do połączenia i typu encji. Edytujesz je na karcie **Mapowania pól** połączenia.

<Note>
  Tylko mapowania typów **Produkt** i **Marka** zmieniają sposób importu danych. Dla poziomów cen, cen produktów,
  magazynów i stanów magazynowych dostawca używa stałego zestawu pól. Ich domyślne mapowania są wymienione niżej, żeby
  było widać, które kolumny ERP są odczytywane, ale ich edycja nie ma żadnego skutku.
</Note>

## Otwieranie mapowań pól

1. Otwórz **Integracja ERP** > **Połączenia** i wybierz **Szczegóły** przy połączeniu.
2. Otwórz kartę **Mapowania pól**.
3. Wybierz typ encji z listy **Typ encji** u góry karty.

Tabela pokazuje jeden wiersz na mapowanie: **Pole ERP**, **Pole katalogu**, **Wymagane**, **Wartość domyślna**,
**Transformacja**, **Kierunek synchronizacji pola** i **Hash**. Aby zmieniać mapowania, potrzebujesz uprawnienia
**Zarządzanie mapowaniami pól**.

## Stosowanie domyślnych mapowań dostawcy

Zacznij od mapowań domyślnych dostawcy, zamiast wpisywać każde mapowanie ręcznie.

<Steps>
  <Step title="Wybierz typ encji">
    Wybierz **Produkt** z listy **Typ encji**.
  </Step>

  <Step title="Załaduj ustawienia domyślne">
    Kliknij **Załaduj domyślne ustawienia**. Otworzy się okno z listą mapowań dostawcy dla tego typu encji i kolumną
    **Status**: **Nowe** przy mapowaniach, których jeszcze nie masz, i **Zaktualizuje** przy polach ERP, które już
    mapujesz.
  </Step>

  <Step title="Wybierz mapowania do zastosowania">
    Nowe mapowania są zaznaczone automatycznie. Istniejące nie są, więc Twoje zmiany zostają zachowane, chyba że je
    zaznaczysz. W razie potrzeby użyj **Zaznacz wszystko** lub **Odznacz wszystko**. Otwórz **Opisy mapowań**, aby
    sprawdzić, co zawiera każde pole ERP.
  </Step>

  <Step title="Zastosuj je">
    Kliknij **Zastosuj wybrane**. Mapowania zostaną dodane do tabeli z oznaczeniem **Nowe** lub **Zmodyfikowane**. Nie
    są jeszcze zapisane.
  </Step>

  <Step title="Zapisz">
    Kliknij **Zapisz wszystko**.
  </Step>
</Steps>

Powtórz te kroki dla typu **Marka**.

Mapowania dodane w ten sposób mają **Kierunek synchronizacji pola** ustawiony na **Tylko z ERP** i są uwzględniane w
weryfikacji hash.

Jeśli Omnilinker wyświetli komunikat **Brak domyślnych mapowań dla tego dostawcy i typu encji.**, dodaj mapowania
samodzielnie na podstawie sekcji [Domyślne mapowania Wapro](#domyślne-mapowania-wapro).

## Dodawanie i edycja mapowania

<Steps>
  <Step title="Otwórz okno mapowania">
    Kliknij **Dodaj mapowanie** albo ikonę edycji w wierszu.
  </Step>

  <Step title="Wybierz pola">
    W polu **Pole ERP** wybierz pole lub wpisz jego nazwę. W polu **Pole katalogu** wybierz pole Omnilinkera lub wpisz
    jego nazwę. Pola wymagane przez Omnilinkera mają oznaczenie **Wymagane**.
  </Step>

  <Step title="Ustaw opcje">
    Wypełnij opcje opisane w sekcji [Opcje mapowania](#opcje-mapowania).
  </Step>

  <Step title="Dodaj mapowanie do tabeli">
    Kliknij **Dodaj** (lub **Zapisz** podczas edycji).
  </Step>

  <Step title="Zapisz">
    Kliknij **Zapisz wszystko** na dole karty.
  </Step>
</Steps>

Zmiany wprowadzone na tej karcie są przechowywane do momentu zapisania. Dopóki masz niezapisane zmiany, karta pokazuje
**Niezapisane zmiany**. **Zapisz wszystko** zapisuje je, a **Odrzuć zmiany** je cofa. Ikona usuwania w wierszu usuwa
mapowanie, również dopiero po kliknięciu **Zapisz wszystko**.

Zapisane mapowania zaczynają działać w ciągu mniej więcej minuty.

## Opcje mapowania

| Opcja                             | Działanie                                                                                                                   |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Wartość domyślna**              | Używana, gdy pole ERP jest puste lub go brakuje. Do 500 znaków.                                                             |
| **Pole wymagane**                 | Jeśli pole ERP jest puste i nie ma wartości domyślnej, zmiana kończy się błędem z komunikatem wskazującym brakujące pole.   |
| **Kierunek synchronizacji pola**  | **Dwukierunkowa**, **Tylko z ERP**, **Tylko do ERP** lub **Bez synchronizacji**. Zobacz uwagę poniżej.                      |
| **Wyrażenie transformacji**       | Zmienia wartość podczas importu. Zobacz [Transformacje](#transformacje). Do 1000 znaków.                                    |
| **Uwzględnij w weryfikacji hash** | Czy zmiana tego pola jest traktowana jako zmiana w trybie skanowania skrótów. Zobacz [Wykrywanie zmian](#wykrywanie-zmian). |
| **Priorytet**                     | Kolejność pola w skrócie, 0–100. Widoczne, gdy zaznaczono **Uwzględnij w weryfikacji hash**.                                |

<Warning>
  **Kierunek synchronizacji pola** jeszcze niczego nie filtruje. Każde mapowanie produktu i marki jest stosowane do
  danych przychodzących z ERP, nawet jeśli ustawiono **Bez synchronizacji** lub **Tylko do ERP**. Aby pole ERP nie
  trafiało do Omnilinkera, usuń jego mapowanie.
</Warning>

### Pola wymagane

Każdy produkt musi mieć SKU i nazwę. Zmapuj pole ERP na **Sku** i na **Name**. Bez nich zmiany produktów kończą się
błędem. Marki wymagają pola **Name**.

## Transformacje

Transformacja zmienia wartość pola ERP, zanim Omnilinker ją zapisze. Możesz połączyć kilka transformacji średnikami.
Wykonują się od lewej do prawej, więc `TRIM;UPPERCASE;PREFIX:SKU-` najpierw usuwa spacje, potem zamienia litery na
wielkie, a na końcu dodaje prefiks. Transformacje są też wymienione w sekcji **Referencja transformacji** w oknie
mapowania.

| Transformacja     | Działanie                                                                        | Przykład                                  |
| ----------------- | -------------------------------------------------------------------------------- | ----------------------------------------- |
| `UPPERCASE`       | Zamienia tekst na wielkie litery                                                 | `hello` → `HELLO`                         |
| `LOWERCASE`       | Zamienia tekst na małe litery                                                    | `HELLO` → `hello`                         |
| `TRIM`            | Usuwa spacje na początku i na końcu                                              | `" text "` → `"text"`                     |
| `PREFIX:xxx`      | Dodaje tekst przed wartością                                                     | `PREFIX:SKU-` zamienia `123` na `SKU-123` |
| `SUFFIX:xxx`      | Dodaje tekst po wartości                                                         | `SUFFIX:-PL` zamienia `123` na `123-PL`   |
| `ROUND:n`         | Zaokrągla liczbę do *n* miejsc po przecinku                                      | `ROUND:2` zamienia `3.14159` na `3.14`    |
| `MULTIPLY:n`      | Mnoży liczbę przez *n*                                                           | `MULTIPLY:100` zamienia `1.5` na `150`    |
| `DIVIDE:n`        | Dzieli liczbę przez *n*                                                          | `DIVIDE:100` zamienia `150` na `1.5`      |
| `REPLACE:old:new` | Zamienia każde wystąpienie `old` na `new`                                        | `REPLACE:-:_` zamienia `a-b` na `a_b`     |
| `DEFAULT:value`   | Używa `value`, gdy wcześniejsza transformacja w łańcuchu zostawiła pustą wartość | `REPLACE:-:;DEFAULT:N/A`                  |

Co warto wiedzieć:

* W nazwach transformacji wielkość liter nie ma znaczenia. Tekst prefiksu i sufiksu zachowuje wielkość liter.
* Liczby w `ROUND`, `MULTIPLY` i `DIVIDE` używają kropki jako separatora dziesiętnego, na przykład `MULTIPLY:0.01`.
* `REPLACE` dzieli argumenty na dwukropkach, więc nie może zastąpić dwukropka.
* Nieznana transformacja albo transformacja niepasująca do wartości (na przykład `ROUND` na tekście) pozostawia
  wartość bez zmian.
* **Wartość domyślna** jest stosowana przed transformacjami, więc transformacje dotyczą również jej.
* Gdy pole ERP jest puste i nie ma **Wartości domyślnej**, transformacje są w całości pomijane. Aby wypełniać puste
  pola, używaj **Wartości domyślnej** zamiast `DEFAULT:`.

## Wykrywanie zmian

W [trybie skanowania skrótów](/pl/erp/sync-configuration#tryb-śledzenia-zmian) agent ustala, czy produkt lub marka się
zmieniły, porównując skrót (hash) ich pól z ostatnio wysłanym. Do skrótu trafiają tylko pola z zaznaczoną opcją
**Uwzględnij w weryfikacji hash**. Zmiana samego niezaznaczonego pola nie zostanie wysłana, dopóki nie zmieni się
inne pole uwzględnione w skrócie.

Kolumna **Hash** pokazuje wypełnioną kropkę i priorytet przy polach uwzględnionych w skrócie, a pustą kropkę przy
pozostałych.

Dodanie pola do skrótu lub usunięcie go zmienia wszystkie skróty. Następne skanowanie skrótów wyśle wtedy ponownie
wszystkie produkty. Jest to bezpieczne, ale przy dużym katalogu trwa dłuższą chwilę.

W trybie śledzenia zmian WFM\_INT ustawienia skrótu wpływają tylko na cotygodniowe uzgadnianie.

## Domyślne mapowania Wapro

Oto domyślne mapowania dostawcy Wapro. „Stosowane” oznacza, czy edycja mapowania zmienia import.

### Produkt

Stosowane: tak.

| Pole ERP             | Pole Omnilinkera            | Wymagane | Uwagi                                                                                |
| -------------------- | --------------------------- | -------- | ------------------------------------------------------------------------------------ |
| `INDEKS_KATALOGOWY`  | `Sku`                       | Tak      | Indeks katalogowy produktu. Identyfikuje też produkt we wszystkich magazynach.       |
| `KOD_KRESKOWY`       | `Gtin`                      |          | Podstawowy kod kreskowy (EAN)                                                        |
| `NAZWA_CALA`         | `Name`                      | Tak      | Pełna nazwa. Gdy jest pusta, agent wysyła zamiast niej nazwę skróconą `NAZWA`.       |
| `PRODUCENT`          | `BrandId`                   |          | Nazwa producenta. Omnilinker łączy produkt z marką o tej nazwie.                     |
| `RODZAJ`             | `ProductType`               |          | Rodzaj artykułu. Agent wysyła `Bundle` dla zestawu i `Simple` dla wszystkich innych. |
| `CENA_ZAKUPU_NETTO`  | `PurchasePrice.NetAmount`   |          | Cena zakupu netto                                                                    |
| `CENA_ZAKUPU_BRUTTO` | `PurchasePrice.GrossAmount` |          | Cena zakupu brutto                                                                   |
| `VAT_SPRZEDAZY`      | `PurchasePrice.VatRate`     |          | Stawka VAT. Wartość procentowa, taka jak `23`, jest przeliczana automatycznie.       |
| `WYMIAR_G`           | `Dimensions.Height`         |          | Wysokość                                                                             |
| `WYMIAR_W`           | `Dimensions.Width`          |          | Szerokość                                                                            |
| `WYMIAR_S`           | `Dimensions.Length`         |          | Głębokość                                                                            |
| `JED_WYMIARU`        | `Dimensions.Unit`           |          | Jednostka wymiarów                                                                   |
| `WAGA`               | `Weight.AmountInGrams`      |          | Waga. Kopiowana bez zmian, bez przeliczania jednostek.                               |
| `JED_WAGI`           | `Weight.Unit`               |          | Jednostka wagi                                                                       |

Jeśli marka produktu nie dotarła jeszcze do Omnilinkera, produkt zostaje zapisany bez marki. Powiązanie zostanie
dodane przy następnej synchronizacji produktu po dotarciu marki.

### Marka

Stosowane: tak. Wapro nie ma osobnej listy marek. Agent tworzy marki z unikalnych wartości `PRODUCENT` w artykułach,
bez rozróżniania wielkości liter.

| Pole ERP    | Pole Omnilinkera | Wymagane |
| ----------- | ---------------- | -------- |
| `PRODUCENT` | `Name`           | Tak      |

### Poziom cen

Stosowane: nie (stałe).

| Pole ERP                | Pole Omnilinkera | Uwagi             |
| ----------------------- | ---------------- | ----------------- |
| `NAZWA` (tabela `CENA`) | `Name`           | Nazwa poziomu cen |

### Cena produktu

Stosowane: nie (stałe).

| Pole ERP                               | Pole Omnilinkera | Uwagi                                         |
| -------------------------------------- | ---------------- | --------------------------------------------- |
| `CENA_NETTO` (tabela `CENA_ARTYKULU`)  | `NetAmount`      | Cena sprzedaży netto                          |
| `CENA_BRUTTO` (tabela `CENA_ARTYKULU`) | `GrossAmount`    | Cena sprzedaży brutto                         |
| `SYM_WAL` (tabela `CENA_ARTYKULU`)     | `Currency`       | Pusta wartość oznacza PLN                     |
| `VAT_SPRZEDAZY` (tabela `ARTYKUL`)     | `VatRate`        | Pusta wartość, `ZW` lub `NP` oznacza brak VAT |

### Magazyn

Stosowane: nie (stałe).

| Pole ERP                           | Pole Omnilinkera | Uwagi                                          |
| ---------------------------------- | ---------------- | ---------------------------------------------- |
| `SYMBOL` (tabela `MAGAZYN`)        | `Code`           |                                                |
| `NAZWA` (tabela `MAGAZYN`)         | `Name`           |                                                |
| `NIEAKTYWNY` (tabela `MAGAZYN`)    | `IsActive`       | Odwrócone: magazyn nieaktywny nie jest aktywny |
| `STAN_MAGAZYNU` (tabela `MAGAZYN`) | `State`          | Praca lub remanent (`Praca` / `Remanent`)      |

### Stan magazynowy

Stosowane: nie (stałe). Stan dostępny jest obliczany jako stan bieżący minus ilość na otwartych dokumentach minus
ilość zarezerwowana.

| Pole ERP          | Pole Omnilinkera | Uwagi                          |
| ----------------- | ---------------- | ------------------------------ |
| `STAN`            | `OnHand`         | Stan bieżący                   |
| `ZAREZERWOWANO`   | `Reserved`       | Ilość zarezerwowana            |
| `ILOSC_EDYTOWANA` | `Edited`         | Ilość na otwartych dokumentach |
| `STAN_MINIMALNY`  | `MinLevel`       | Stan minimalny                 |
| `STAN_MAKSYMALNY` | `MaxLevel`       | Stan maksymalny                |

## Rozwiązywanie problemów

<AccordionGroup>
  <Accordion title="Zmiany produktów kończą się błędem o brakującym polu wymaganym">
    Mapowanie oznaczone jako **Pole wymagane** nie miało wartości ani wartości domyślnej. Sprawdź, czy pole ERP
    zawiera dane, dodaj **Wartość domyślną** albo odznacz **Pole wymagane**. Komunikat na karcie
    **Logi synchronizacji** wskazuje nazwę pola.
  </Accordion>

  <Accordion title="Pole zmienione w Omnilinkerze wróciło do wartości z ERP">
    ERP nadpisuje każde zmapowane pole za każdym razem, gdy produkt się w nim zmieni. Zmień wartość w ERP albo usuń
    mapowanie, aby ERP przestał dostarczać to pole.
  </Accordion>

  <Accordion title="Zmiana w ERP nie dotarła">
    W trybie skanowania skrótów sprawdź, czy pole jest uwzględnione w weryfikacji hash. Zobacz
    [Wykrywanie zmian](#wykrywanie-zmian).
  </Accordion>
</AccordionGroup>

Zobacz też [Rozwiązywanie problemów](/pl/erp/troubleshooting).
