Firma rzadko używa jednego programu. Księgowość pracuje na własnym programie, zamówienia obsługuje system ERP, towar zapisuje program magazynowy, a kontakty z klientami trafiają do CRM. Trudność zwykle nie leży w samych programach. Każdy z nich prowadzi własną wersję tych samych danych: kontrahenta, towaru czy zamówienia.
Poniższy tekst porządkuje programy dla firm według obszarów i pokazuje, który program jest właścicielem jakiego rekordu. Druga część dotyczy łączenia programów. Metody wymiany danych mają różne opóźnienia i różnie zawodzą, więc wybór zależy od tego, co program zewnętrzny udostępnia.
Programy dla firm - mapa obszarów i właściciele danych
Podział na obszary jest praktyczny, bo każdy obszar ma inny rytm pracy. Księgowość zamyka okresy, magazyn rejestruje ruch towaru w minutach, a CRM rośnie z każdą rozmową. Mapa poniżej wskazuje, który program prowadzi dany rekord jako źródło, a który tylko go odczytuje.
| Obszar | Program prowadzi jako źródło | Program tylko odczytuje |
|---|---|---|
| Księgowość | Dokument księgowy, dekret, konto | Kontrahent, dokument sprzedaży |
| ERP | Zamówienie, kartoteka towarowa, cennik | Stany fizyczne z magazynu |
| Magazyn | Lokalizacja, ruch magazynowy, dokument PZ, WZ, MM | Zamówienie do realizacji, kartoteka |
| CRM | Kontakt, szansa sprzedaży, historia rozmów | Kontrahent, zamówienia |
Reguła: każdy rekord ma jeden program-właściciela, a pozostałe programy dostają jego kopię i nie odsyłają zmian bez uzgodnionego mechanizmu.
Bez takiej reguły ten sam kontrahent ma w firmie trzy różne adresy, a nikt nie wie, który jest aktualny. Poprawka w CRM nie dociera do księgowości i faktura wychodzi na stary adres. Właściciel danych rozstrzyga takie spory bez dyskusji.
Księgowość - dokumenty źródłowe i zamknięte okresy
Program księgowy przyjmuje dokumenty źródłowe, na przykład faktury sprzedaży z ERP, i przypisuje im dekrety, czyli zapisy na kontach po stronie Wn i Ma. Okres księgowy po zamknięciu nie przyjmuje nowych dokumentów, więc program, który wysyła faktury, musi znać datę zamknięcia. Zasady prowadzenia ksiąg i rozliczeń podatkowych należy potwierdzić z księgowym firmy, bo ten tekst opisuje wyłącznie mechanikę programu.
Kontrola okresu wygląda w bazie prosto: program wysyłający sprawdza datę dokumentu w tabeli okresów przed zapisem do kolejki wymiany. Poniższe zapytanie jest przykładem, a nie schematem konkretnego programu księgowego.
SELECT COUNT(*) AS Zamkniety
FROM dbo.OkresKsiegowy
WHERE @DataDokumentu BETWEEN DataOd AND DataDo
AND Zamkniety = 1;
Wynik większy od zera oznacza, że dokument trzeba zaksięgować w bieżącym okresie albo odrzucić z komunikatem dla użytkownika. Przy fakturowaniu obowiązuje wybór między wersją lokalną a chmurową. Lokalna daje większą kontrolę nad danymi, ale wymaga regularnych aktualizacji i zabezpieczenia serwera. Wersja online działa z każdego miejsca i sama się aktualizuje, a często ma gotowe integracje z innymi programami.
| Cecha | Instalacja lokalna | Chmura |
|---|---|---|
| Kontrola nad danymi | Pełna, dane na serwerze firmy | Zależna od umowy z dostawcą |
| Aktualizacje | Wykonuje firma we własnym terminie | Wdraża dostawca automatycznie |
| Dostęp | Sieć firmowa lub VPN | Przeglądarka z dowolnego miejsca |
| Integracje | Pliki, widoki SQL, API dostawcy | Gotowe łączniki i API |
Firmy wybierające pakiet księgowy często porównują go z modułem księgowym systemu ERP. Jeden z przykładów opisuje artykuł o programie do pełnej księgowości, a sposób łączenia dokumentów sprzedaży z księgami omawia tekst o integracji z systemem enova.
ERP - jeden rejestr zamówień i zapasów
System ERP prowadzi zamówienia klientów i dostawców, a także kartotekę towarów. Jego wartością jest wspólny rejestr, w którym ten sam rekord zamówienia widzą sprzedaż i finanse. Najważniejszy mechanizm to rezerwacja: potwierdzone zamówienie zmniejsza ilość dostępną, choć towar fizycznie nadal leży w magazynie.
Ilość dostępna liczy się jako stan magazynowy pomniejszony o rezerwacje i powiększony o zamówione dostawy w drodze. Sposób liczenia bilansu zamówień i rezerwacji pokazuje artykuł o zamówieniach i rezerwacjach w systemie ERP, a ogólne kryteria wdrożenia zawiera tekst o opłacalności ERP w firmie.
SELECT t.TowarId,
s.Ilosc - ISNULL(r.Zarezerwowano, 0) + ISNULL(d.WDrodze, 0) AS Dostepne
FROM dbo.Towar AS t
JOIN dbo.StanMagazynowy AS s ON s.TowarId = t.TowarId
LEFT JOIN (SELECT TowarId, SUM(Ilosc) AS Zarezerwowano
FROM dbo.Rezerwacja WHERE Aktywna = 1 GROUP BY TowarId) AS r ON r.TowarId = t.TowarId
LEFT JOIN (SELECT TowarId, SUM(Ilosc) AS WDrodze
FROM dbo.ZamowienieDostawcy WHERE Status = N'wysłane' GROUP BY TowarId) AS d ON d.TowarId = t.TowarId;
Zapytanie liczy ilość dostępną osobno dla każdego towaru. Połączenia zewnętrzne (LEFT JOIN) chronią przed zgubieniem towarów, które nie mają żadnej rezerwacji ani dostawy w drodze.

Moduły ERP kupuje się zwykle etapami. Rozwiązania modułowe pozwalają zacząć od sprzedaży i zapasów, a księgowość lub produkcję dołożyć później. Przy zakupie wiele zależy od tego, czy program ma otwarte API i udokumentowane widoki, bo bez nich każda integracja wymaga pracy dostawcy.
Magazyn - stany fizyczne i dokumenty ruchu
Program magazynowy prowadzi to, czego ERP nie widzi: lokalizację palety oraz partię z terminem ważności, a także każdy ruch zapisany skanerem. Dokumenty magazynowe zmieniają stan fizyczny: PZ przyjmuje towar, WZ go wydaje, a MM przesuwa między lokalizacjami. ERP dostaje zwykle tylko sumę tych ruchów. Różnica między saldem w ERP a stanem w magazynie jest najczęstszym powodem sporu o to, ile towaru firma naprawdę ma.

Zakres systemu magazynowego opisuje artykuł o systemie zarządzania magazynem WMS, a wymianę dokumentów z ERP omawia tekst o integracji systemów magazynowych. SoftwareStudio z Poznania tworzy programy magazynowe na IIS i SQL Server; opis produktu znajduje się w serwisie Studio WMS.net.
Uzgadnianie salda ERP z magazynem
Różnicę między ERP a magazynem wyłapuje się porównaniem sum na koniec dnia, a nie ręcznym szukaniem. Zadanie nocne zapisuje stan z obu programów w tabeli porównawczej i oznacza towary, w których liczby się rozjeżdżają. Zwykle przyczyną jest ruch zapisany w jednym programie, a niedostarczony do drugiego, na przykład przez błąd w kolejce wymiany.
Raport różnic trafia do osoby odpowiedzialnej za magazyn, a nie do informatyków. To ona rozstrzyga, czy poprawić ERP, czy stan fizyczny, bo tylko ona widzi towar na regale.
Programy branżowe obok głównych
Poza czterema głównymi obszarami firma bywa wyposażona w programy dla wąskiego procesu. Przykładem jest gospodarka narzędziowa: Studio TCS.net obsługuje wypożyczanie narzędzi pracownikom i kontrahentom, pokazuje, kto pobrał narzędzie i kiedy powinien je zwrócić, oraz prowadzi ewidencję. Opis procesu zawiera artykuł o wypożyczaniu narzędzi z magazynu.
CRM - kontrahent i historia kontaktów
CRM zapisuje kontakty z klientami oraz ich szanse sprzedaży, a najcenniejszą częścią jest historia rozmów z jednym kontrahentem. Kluczem łączącym CRM z pozostałymi programami jest identyfikator kontrahenta, najczęściej numer NIP. Jeśli CRM zakłada kontrahenta po nazwie, a ERP po numerze NIP, po kilku miesiącach powstają duplikaty i raporty sprzedaży zaniżają wartość klienta.
Duplikatom zapobiega ograniczenie w bazie, a nie prośba do użytkowników o staranność. Unikalny indeks filtrowany na numerze NIP odrzuci drugi rekord z tym samym numerem i pozwoli jednocześnie zapisać kontrahentów bez NIP, na przykład osoby prywatne.
CREATE UNIQUE NONCLUSTERED INDEX UX_Kontrahent_NIP
ON dbo.Kontrahent (NIP)
WHERE NIP IS NOT NULL;
Przegląd zastosowań CRM daje artykuł o aplikacjach CRM. Firmy, które wprowadzają CRM równolegle z ERP, powinny zapisać w dokumentacji, gdzie kontrahent jest zakładany po raz pierwszy i który program go później aktualizuje.
Łączenie programów - metody wymiany danych
Sposób połączenia dwóch programów określa, jak szybko dane docierają i co dzieje się przy awarii. Trzy najczęstsze metody różnią się wyraźnie, a wybór zależy od tego, co program zewnętrzny udostępnia.
| Metoda | Opóźnienie danych | Typowa awaria | Kiedy pasuje |
|---|---|---|---|
| Pliki CSV lub XML w katalogu | Do następnego uruchomienia zadania | Uszkodzony lub podwójnie wczytany plik | Program bez API, wymiana rzadka |
| Interfejs API (REST) | Sekundy | Przekroczenie czasu, ponowienie wywołania | Programy z dokumentowanym API |
| Wspólna baza lub widok SQL | Natychmiast | Zmiana struktury tabel psuje odczyt | Programy jednego dostawcy |
| Wymiana dokumentów EDI | Zależnie od operatora sieci | Odrzucony komunikat, błędny format | Wymiana z kontrahentami zewnętrznymi |
Wywołania REST i kolejki komunikatów porównuje artykuł o integrowaniu aplikacji webowych. Poniżej opisano rozwiązanie, które sprawdza się przy każdej z tych metod: tabelę kolejki wymiany w bazie programu wysyłającego.
Wymiany plikowe uruchamia zwykle zadanie harmonogramu, w SQL Server jest to zadanie SQL Agent. Sam plik nie wystarczy, bo potrzebny jest jeszcze dziennik z nazwą pliku i godziną wczytania oraz z liczbą wierszy i wynikiem. Bez dziennika nie da się stwierdzić, czy wczorajszy plik został wczytany dwa razy.
Kolejka wymiany w bazie programu
Program wysyłający nie wywołuje odbiorcy w środku transakcji biznesowej. Zapisuje w tej samej transakcji wiersz do tabeli kolejki, a osobne zadanie pobiera te wiersze i przekazuje dalej. Jeśli odbiorca jest niedostępny, wiersze czekają, a dane biznesowe nie giną. Nazwy tabel w przykładzie są umowne.
CREATE TABLE dbo.WymianaKolejka (
WymianaId bigint IDENTITY(1,1) PRIMARY KEY,
Typ nvarchar(30) NOT NULL, -- na przykład 'zamowienie'
RekordId int NOT NULL,
Status tinyint NOT NULL DEFAULT 0, -- 0 nowe, 1 pobrane, 2 błąd
Proby tinyint NOT NULL DEFAULT 0,
Utworzono datetime2 NOT NULL DEFAULT SYSDATETIME()
);
Pobranie paczki wykonuje jedno polecenie. Podpowiedzi UPDLOCK i READPAST sprawiają, że dwa zadania pracujące równolegle nie biorą tych samych wierszy, a zajęte wiersze są pomijane zamiast czekać. Znaczenie podpowiedzi opisuje dokumentacja table hints w Microsoft Learn.
WITH nastepne AS (
SELECT TOP (50) *
FROM dbo.WymianaKolejka WITH (ROWLOCK, UPDLOCK, READPAST)
WHERE Status = 0
ORDER BY WymianaId
)
UPDATE nastepne
SET Status = 1, Proby = Proby + 1
OUTPUT inserted.WymianaId, inserted.Typ, inserted.RekordId;
Reguła: odbiorca musi tolerować powtórzenie tego samego komunikatu, bo po awarii sieci nadawca nie wie, czy pierwsze wysłanie dotarło.
Dlatego każdy komunikat niesie identyfikator rekordu i wersję, a odbiorca porównuje je z tym, co już zapisał. Powtórzony komunikat nie tworzy drugiego zamówienia, tylko potwierdza pierwsze.
Kolejność wdrażania i wybór programów
Nie wszystkie programy trzeba wprowadzać naraz. Najpierw wdraża się ten obszar, w którym błędy kosztują najwięcej, a dopiero potem łączy go z resztą. W praktyce jest to zwykle magazyn albo sprzedaż, bo tam pomyłka oznacza wysłany zły towar lub źle wystawioną fakturę.
- Zakres modułowy - program powinien pozwalać dołożyć kolejny moduł bez wymiany bazy danych.
- Otwarty interfejs - dokumentowane API lub widoki SQL zmniejszają koszt każdej późniejszej integracji.
- Model instalacji - wersja lokalna i chmurowa różnią się kontrolą nad danymi oraz sposobem aktualizacji.
- Pochodzenie licencji - oprogramowanie kupione od producenta lub autoryzowanego dystrybutora ma prawo do aktualizacji i wsparcia.
Zasady licencjonowania i prawa autorskiego warto sprawdzić z prawnikiem przed podpisaniem umowy. Dalsze porównanie programów pod kątem branży zawiera artykuł o programie sprzedażowym, a układ systemów w logistyce pokazuje tekst o mapie oprogramowania logistycznego.
Przeniesienie danych do nowego programu
Nowy program zaczyna pracę z danymi ze starego, więc przeniesienie kartoteki i sald otwarcia wchodzi do harmonogramu projektu jako osobny etap. Dane wczytuje się najpierw do tabel pośrednich, w których sprawdza się poprawność numerów NIP, a osobno jednostek miary oraz kodów towarów. Rekordy błędne wracają do właściciela danych z listą poprawek, zanim trafią do programu docelowego.
Przed uruchomieniem produkcyjnym wykonuje się próbne przeniesienie na kopii bazy i porównuje sumy kontrolne: liczbę kontrahentów i towarów oraz wartość zapasów. Rozbieżność większa od zera wstrzymuje uruchomienie do czasu wyjaśnienia jej przyczyny.
Programy SoftwareStudio i systemy na zamówienie
SoftwareStudio dostarcza programy dla magazynu i awizacji dostaw, a osobne dla reklamacji i narzędziowni; obsługuje też gospodarkę paletową. Gdy gotowy program nie pasuje do procesu, powstaje system pisany na zamówienie. Aplikacje działają w przeglądarce na Microsoft IIS i SQL Server, a dla urządzeń mobilnych powstają programy na Androida. Zakres pracy producenta opisuje artykuł o producencie oprogramowania dla firm, a ofertę w skrócie zawiera serwis usług SoftwareStudio.



