Import cenników od dostawców — koniec z ręcznym przepisywaniem z Excela i PDF-ów

· 8 min czytania · Zespół SilverData

Każdy dostawca ma swój format cennika, swój cykl aktualizacji i swój sposób powiadamiania — mail z załącznikiem, link do FTP, ktoś dzwoni. Ktoś w Twojej firmie musi to wszystko zebrać, otworzyć, sprawdzić co się zmieniło i wpisać nowe ceny zakupowe do ERP-a. To jedna z tych czynności, których nikt nie mierzy, dopóki nie zaczniesz szukać, gdzie ucieka marża.

W hurtowniach i firmach produkcyjnych ten temat wraca do nas regularnie. Firma ma 20–60 dostawców, każdy przysyła cennik co miesiąc albo co kwartał, część w Excelu, część w PDF-ie, część w mailu w treści. Ktoś w zakupach albo w księgowości robi to ręcznie: kopiuj, wklej, popraw formatowanie, znajdź odpowiedni SKU w ERP-ie, wpisz nową cenę. Po drodze zdarzają się literówki, przeoczone pozycje i sytuacje, w których nowa cena weszła w życie dwa tygodnie po podwyżce u dostawcy — bo cennik przyszedł, ale nikt go jeszcze nie „ogarnął".

U jednego z naszych klientów — 22-osobowej hurtowni elektrotechnicznej z 40 aktywnymi dostawcami — kierownik zakupów szacował, że ręczna aktualizacja cenników zajmuje 2,5 dnia roboczego miesięcznie. Po wdrożeniu prostego pipeline'u do parsowania Excela i PDF-a + walidacji przed importem do Comarch Optimy: 4 godziny miesięcznie na przegląd i akceptację. Marża odzyskana na wcześniejszym wykryciu podwyżek — kilka tysięcy złotych miesięcznie, głównie dlatego, że zaczęli podnosić własne ceny sprzedaży w tym samym tygodniu, w którym rósł koszt zakupu.

Dlaczego to takie kosztowne, choć wygląda błaho

Ręczna obróbka cenników ma trzy koszty, z których tylko pierwszy jest oczywisty.

Czas pracy. Kierownik zakupów w firmie z 40 dostawcami i średnio 200 pozycjami na cennik przerabia miesięcznie kilka tysięcy wierszy. Na jeden cennik idzie od 30 minut (mały, w Excelu, ładny) do 4 godzin (300 pozycji, PDF ze skanowanych stron, format zmieniony od poprzedniego razu). Sumarycznie: 15–25 godzin miesięcznie u typowego klienta.

Opóźnione podwyżki. Jeśli dostawca podniósł cenę 1 marca, a Ty wprowadziłeś nową do ERP-a 20 marca, to przez 20 dni sprzedawałeś towar ze starą marżą liczoną od starej ceny zakupu. Przy 50 000 zł miesięcznego zakupu i podwyżce 3% — to 500 zł „zjedzone" w jednym dostawcy w jednym miesiącu. Pomnóż przez wszystkich dostawców i przez rok.

Błędy cichnące w danych. Literówka w kwocie zakupowej (12,50 zamiast 125,00 zł) nie krzyknie od razu. Krzyknie za pół roku, gdy księgowa robi analizę marż i widzi, że pozycja X ma ujemną rentowność od maja. Rozplątanie tego — dni pracy plus rozmowa z klientem, któremu przez pół roku sprzedawaliśmy taniej niż powinniśmy.

Cztery formaty, w których najczęściej przychodzą cenniki

Zanim zaczniesz cokolwiek automatyzować, spisz sobie, co realnie masz na wejściu. Nasi klienci mają zwykle mieszankę czterech scenariuszy:

Rzadziej spotykamy CSV, API dostawcy (jeden na 40 klientów) albo pobieranie z portalu B2B dostawcy — jeśli takie masz, potraktuj je jako złoto i integruj natywnie.

Trzy warstwy dobrego procesu importu

Nie chodzi o to, żeby napisać jeden skrypt, który „zaimportuje cennik". Chodzi o to, żeby zbudować proces, który nie zaskoczy Cię za pół roku, gdy dostawca zmieni format. Trzy warstwy, które warto rozdzielić od razu:

Warstwa 1 — źródło. Dedykowana skrzynka mailowa (np. cenniki@twojafirma.pl), do której trafiają wszystkie cenniki. Dostawcy dostają jeden adres, pod który mają wysyłać. Jeden folder w Sharepoint albo FTP dla większych plików. Uniknij sytuacji, w której cennik krąży w wątku „RE: RE: RE: nowe ceny od marca".

Warstwa 2 — parsowanie i walidacja. Skrypt (Python albo .NET, obojętne) rozpoznaje nadawcę, wybiera odpowiedni parser i wyciąga listę pozycji: kod dostawcy → nazwa → nowa cena netto → waluta → data obowiązywania. Kluczowa jest walidacja: czy każda pozycja ma dopasowanie do SKU w ERP, czy zmiana ceny mieści się w rozsądnym zakresie (np. +/- 30%), czy waluta się zgadza z tym, co historycznie.

Warstwa 3 — akceptacja i import. Wyniki parsowania trafiają do widoku, w którym człowiek widzi w tabeli: „25 pozycji bez zmian, 12 z podwyżką 2–5%, 3 z podwyżką powyżej 20%, 2 nowe kody nie do zmapowania". Kierownik zakupów przegląda anomalie, klika „akceptuj" i wtedy — dopiero wtedy — dane lecą do ERP-a przez API albo import CSV.

Ta trzecia warstwa jest krytyczna. Automat bez człowieka na końcu wcześniej czy później wprowadzi bzdurę. Człowiek bez automatu przed sobą będzie tonął w tabelkach. Razem — sprawa jest do zrobienia w 4 godziny miesięcznie zamiast 25.

Mapowanie SKU dostawcy na SKU ERP — cichy zabójca

Największy ból na tym projekcie to zwykle nie parsowanie, tylko mapowanie. Dostawca ma swój kod (np. EL-KP-2400), Ty masz swój (np. KAB-CU-2.5), i nikt tego nigdzie systematycznie nie trzyma. Handlowcy „wiedzą, że to to samo". W praktyce mapowanie żyje w głowach dwóch osób — jak jedna zachoruje, integracja stoi.

Rozwiązanie jest nudne, ale skuteczne: tabela mapowania w bazie (albo w Excelu w SharePoincie na start), z kolumnami dostawca | kod dostawcy | SKU ERP | jednostka | mnożnik przelicznika | data ostatniej weryfikacji. Uzupełniana raz, przy każdej nowej pozycji — i utrzymywana. Jeśli parser trafi na kod bez mapowania, pozycja idzie do „inbox nowych kodów", a nie milcząco znika.

Dobra praktyka: raz na kwartał puścić raport „mapowania nieużywane od 12 miesięcy" i „mapowania z rozbieżnościami jednostek". Katalog dostawców żyje, kody się starzeją, mnożniki się zmieniają (dostawca przestał sprzedawać rolki po 100 m, teraz są po 50 m).

Kiedy zbudować, kiedy kupić

Na rynku są gotowe rozwiązania (Comarch OCR do faktur ma częściowe wsparcie dla cenników, są dedykowane produkty typu Vendorlink, są moduły w Symfonii). Nasza rekomendacja jest zwykle taka:

Rzadko widzimy sytuację, w której odpowiedź „zbuduj sami" i „kup gotowe" różni się tak drastycznie, jak twierdzą sprzedawcy. Zwykle koszt roczny wychodzi w tej samej kategorii — decydują detale (integracja z Twoim konkretnym ERP-em, obsługa Twoich walut, elastyczność mapowania).

Plan wdrożenia w 6 tygodni

U 20–40-osobowego klienta typowy projekt wygląda tak:

  1. Tydzień 1: audyt dostawców. Spis wszystkich cenników, formatów, częstotliwości, wielkości. Wybór 3–5 dostawców „na start" (największy wolumen, najbardziej stabilny format).
  2. Tydzień 2: dedykowana skrzynka i baza mapowań. Uruchomienie cenniki@, założenie tabeli mapowań i uzupełnienie jej dla pilotowych dostawców.
  3. Tydzień 3–4: parsery i widok akceptacji. Skrypty dla pilotowych formatów, prosty interfejs (może być nawet Streamlit albo formularz w Power Apps) do akceptacji zmian, integracja z API ERP-a.
  4. Tydzień 5: run równoległy. Nowy proces działa obok ręcznego, wyniki się porównuje. Wychodzą wszystkie krawędzie — inna waluta na jednym cenniku, dodatkowy rabat kolumnowy, którego nie było w specyfikacji.
  5. Tydzień 6: rozszerzenie. Włączanie kolejnych dostawców, dopisywanie parserów. Ta faza nigdy się nie kończy w 100% — zawsze jest dostawca, którego cennik przychodzi raz na pół roku i „zajmiemy się nim wtedy".

Trzy błędy, których warto uniknąć

Co dalej

Import cenników dostawców to jeden z tych obszarów, w których automatyzacja daje efekty widoczne w pierwszym miesiącu. Nie potrzebujesz do tego platformy za 100 tysięcy — potrzebujesz kilku tygodni developera, dyscypliny w utrzymaniu mapowań i procesu, w którym człowiek akceptuje anomalie.

Jeśli chcesz zobaczyć, jak to mogłoby wyglądać w Twoim konkretnym miksie dostawców i ERP-a — pół godziny rozmowy zwykle wystarczy, żeby rozłożyć projekt na etapy i oszacować koszt.

Cennik dostawcy, który leży dwa tygodnie na skrzynce, kosztuje Cię więcej niż automat, który go zaimportuje.

← Wróć na blog