Brak możliwości odbioru UPO w Comarch ERP Optima/XL – dlaczego pojawia się błąd CommandProcess.Invoke i jak go rozwiązać

Próba odebrania UPO kończy się tajemniczo brzmiącym komunikatem: “Exception in method: CommandProcess.Invoke: Process(byte[] data) returns HRESULT:-2147352567”. To typowy błąd wyjątku COM, który brzmi jak problem głęboko w programie, a w praktyce najczęściej ma o wiele prostszą przyczynę – leżącą poza samą Optimą/XL.

Dlaczego ten błąd zwykle nie jest winą programu

Błąd typu COM Exception przy odbiorze UPO w większości przypadków wskazuje na problem ze sterownikami do podpisu elektronicznego używanego przy komunikacji z systemem podatkowym – nie na błąd w samej logice Optimy/XL. Sterowniki karty kryptograficznej lub tokena po aktualizacji systemu Windows, sterownika lub samego oprogramowania do podpisu mogą przestać poprawnie komunikować się z komponentem, który Optima/XL wykorzystuje do wysyłki i odbioru dokumentów – stdąd wyjątek na poziomie samej komunikacji (COM), a nie na poziomie danych czy deklaracji.

Krok po kroku – jak zdiagnozować i naprawić problem

Krok 1 – zweryfikuj sterowniki podpisu elektronicznego

Sprawdź w Menedżerze urządzeń (lub w aplikacji dostawcy podpisu), czy sterownik karty/tokena kryptograficznego działa poprawnie i czy jest w aktualnej wersji zgodnej z Twoim systemem operacyjnym. To pierwsze i najczęstsze źródło tego błędu.

Krok 2 – zaktualizuj sterownik lub oprogramowanie do podpisu

Jeli sterownik jest nieaktualny lub pojawiają się w nim błędy, pobierz najnowszą wersję ze strony dostawcy podpisu elektronicznego i zainstaluj ją ponownie, a następnie zrestartuj komputer.

Krok 3 – sprawdź wersję Optimy/XL i komponentów komunikacyjnych

Upewnij się, że zarówno program, jak i komponenty odpowiedzialne za komunikację z systemami zewnętrznymi (JPK/UPO), są w najnowszej dostępnej wersji. Nieaktualne komponenty często tracą kompatybilność po zmianach w środowisku Windows lub sterownikach.

Krok 4 – wykonaj naprawę instalacji

Jeli sterowniki i wersja programu są poprawne, a błąd nadal występuje, wykonaj naprawę instalacji Optimy/XL – to często rozwiązuje problemy z uszkodzonymi lub brakującymi bibliotekami komunikacyjnymi.

Krok 5 – sprawdź logi błędów po stronie programu

Przejrzyj logi błędów Optimy/XL wygenerowane w momencie wystąpienia problemu – mogą wskazać dokładniej, na którym etapie komunikacji dochodzi do przerwania.

Krok 6 – jeli błąd się powtarza, zbierz dane i zgłoś do serwisu

Jeli żadne z powyższych nie pomoże, zgromadz dokładny opis sytuacji: rodzaj wysyłanego/odbieranego pliku, dokładny moment (krok), w którym pojawia się błąd, oraz zebrane logi – i przekaż to do partnera/serwisu do dalszej analizy technicznej.

Perspektywa ELTE-S

Błędy komunikacyjne przy odbiorze UPO często pojawiają się tuż po aktualizacjach systemu Windows lub sterowników podpisu elektronicznego, a nie po aktualizacjach samej Optimy/XL – dlatego warto mieć to na uwadze przy diagnozowaniu i nie skupiać się wyłącznie na programie księgowym. Jeli w firmie korzystacie z podpisu elektronicznego regularnie do wielu procesw (JPK, UPO, KSeF), dobrze jest ustalić stały harmonogram sprawdzania aktualności sterowników – zamiast reagować dopiero, gdy pojawi się błąd w kluczowym momencie (np. przy terminie złożenia deklaracji).

Porozmawiajmy o diagnostyce i konfiguracji komunikacji z systemami zewnętrznymi w Twojej Optimie/XL.

Zestawienie PPK w Comarch ERP Optima – jak wydrukować składki pracownika i pracodawcy bez dodatkowej nakładki

Raportowanie PPK w biurach kadrowych i firmach z własnym działem płac często zaczyna się od zego samego pytania: “czy żeby wydrukować zestawienie składek PPK muszę kupić dodatek Comarch PPK?”. Odpowiedź jest prosta – nie musisz. Comarch PPK to osobna aplikacja służąca do komunikacji z instytucją finansową obsługującą PPK (generowanie plików importowych, ewidencja umowa/rezygnacje, wysyłka danych do instytucji). Jeśli potrzebujesz wyłącznie raportu / wydruku pokazującego, ile zostało pobrane od pracownika i dopłacone przez pracodawcę – dane masz w standardowym module Kadry i Płace, wystarczy je wyciągnąć we właściwej formie.

Dlaczego zestawienie PPK da się zrobić bez aplikacji Comarch PPK

W Optimie składki PPK są elementem list płac – dokładnie takim samym jak składki ZUS, podatek czy inne potrącenia. Moduł Kadry i Płace zapisuje w bazie część podstawową pracownika, część dodatkową pracownika (jeśli zadeklarował), część podstawową pracodawcy i część dodatkową pracodawcy – i wszystko to jest dostępne w raportach już na standardowej licencji KiP. Aplikacja Comarch PPK dokłada do tego funkcje wymiany danych z instytucją finansową (plik XML w formacie instytucji, ewidencja przystąpień/rezygnacji, korekty przekazane instytucji itd.) – i tylko wtedy jest potrzebna, kiedy naprawdę chcesz tę komunikację zautomatyzować. Do samego raportowania jest zdecydowanie zbyt dużym młotkiem.

Dwa sposoby na zestawienie PPK w Optimie

Sposób 1 – indywidualny raport w formie wydruku PDF

To wersja “po księgowemu” – masz gotowy dokument, który możesz podpiąć pod listę płac, wysłać klientowi biura rachunkowego albo zarchiwizować. Bazujemy na module GenRap (dostępnym w Optimie w ramach standardowej licencji KiP), który pozwala zbudować wydruk pokazujący: pracownika, część pracownika (podstawową + ewentualnie dodatkową), część pracodawcy (podstawową + ewentualnie dodatkową) i sumę za wybrany miesiąc. Efekt: 1-stronicowy raport PDF z tabelą zestawiającą wszystkich pracowników firmy.

Sposób 2 – szybki raport w formie tabeli z eksportem do Excela

Wersja “po analityku” – jeśli chcesz danymi PPK dalej pracować (dołożyć sum kontrolnych, połączyć z innymi danymi kadrowymi, wygenerować wykres). Optima ma mechanizm szybkiego raportu – definiujesz zestaw kolumn (Pracownik, Składka pracownika, Składka pracodawcy, Miesiąc, Rok), filtry (np. tylko dana lista płac, tylko dana grupa pracowników) i wynik dostajesz od razu na ekranie jako tabelę. Jednym kliknięciem eksport do Excela i masz materiał do dalszej obróbki. Ten wariant jest szybszy do przygotowania i łatwiejszy do modyfikacji, kiedy klient zmieni wymagania (np. “a mogliśmy jeszcze dodać kolumnę z sumą narastająco od początku roku?”).

Krok po kroku – jak zrobić zestawienie PPK w Optimie

Krok 1 – upewnij się, że składki PPK są poprawnie ustawione

Składki PPK definiuje się w Konfiguracja → Firma → Płace → Składki PPK (procenty podstawowe, dodatkowe, dane instytucji finansowej). Zanim zaczniesz raportować, zweryfikuj, że wartości procentowe na listach płac za dany miesiąc są poprawne. Błąd w konfiguracji składek będzie widoczny na raporcie i zaburzy zestawienie.

<screen>

Krok 2 – wygeneruj listę płac za miesiąc z uwzględnieniem PPK

Przejdź do Kadry i Płace → Wypłaty → Wypłaty pracowników, wybierz odpowiedni okres i sprawdź, czy składki PPK zostały naliczone na wypłatach (kolumna “PPK – część pracownika” i “PPK – część pracodawcy” muszą mieć wartości). Bez tego kroku raport będzie pusty, nawet jeśli technicznie jest poprawnie skonfigurowany.

<screen>

Krok 3a – wersja z wydrukiem PDF (indywidualny raport GenRap)

Z listy wypłat użyj przycisku Wydruk danych (ikona drukarki lub CTRL+P) i w menu wydruków poszukaj pozycji związanej z PPK. Jeśli w standardowych szablonach Optimy nie ma dokładnie tego widoku, którego potrzebujesz – wejdź w Konfiguracja → Program → Użytkowe → Wydruki, sklonuj najbliższy standardowy szablon i zmodyfikuj go w GenRap (dodaj kolumny część pracownika + część pracodawcy, sumę, filtr po miesiącu). Zapisz jako wydruk użytkownika. Od tej pory generujesz PDF jednym kliknięciem.

<screen>

Krok 3b – wersja z szybkim raportem tabelarycznym

Z menu Widok → Szybki raport (lub odpowiadającej opcji w Twojej wersji Optimy) uruchom kreator szybkiego raportu na widoku wypłat. Wybierz kolumny: Pracownik, Składka PPK – część pracownika (podstawowa), Składka PPK – część pracodawcy (podstawowa) oraz ewentualnie dodatkowe. Ustaw filtr na miesiąc, który Cię interesuje. Uruchom raport, sprawdź wynik na ekranie i eksportuj do Excela przyciskiem Eksport do arkusza kalkulacyjnego.

<screen>

Krok 4 – zapisz konfigurację raportu do wielokrotnego użytku

Zarówno w wariancie GenRap, jak i w szybkim raporcie – zapisz swoją wersję jako wydruk użytkownika lub schemat szybkiego raportu, żeby nie budować go od zera co miesiąc. To mało intuicyjny krok, ale w praktyce oszczędza godziny w kolejnych okresach.

<screen>

Kiedy jednak warto rozważyć aplikację Comarch PPK

Comarch PPK ma sens wtedy, kiedy prowadzisz pełen cykl obsługi PPK w firmie, a nie tylko raportujesz składki. Konkretne sytuacje: duża liczba pracowników (kilkaset+) w PPK, potrzeba automatycznej wymiany plików z instytucją finansową (przystąpienia, rezygnacje, korekty), rozbudowana ewidencja wypowiedzenia deklaracji, obsługa wielu instytucji finansowych obsługujących PPK w jednej firmie. Wtedy indywidualne raporty w KiP stają się niewystarczające i Comarch PPK zwraca się czasem oszędnym w miesiącu. Dla “czystego” raportowania – to zdecydowanie za dużo.

Perspektywa ELTE-S

Zakup dodatkowej nakładki tylko po to, żeby wydrukować zestawienie składek PPK, to klasyczny przykład przepłaty za funkcję, którą Optima ma standardowo. Nasza rada: raz porządnie skonfigurujcie własny wydruk PPK w GenRap i schemat szybkiego raportu tabelarycznego dla działu płac – i traktujcie je jako standardowe narzędzia miesięcznego zamknięcia. To 2-3 godziny pracy specjalisty jednorazowo, które oszczędzają potem godziny w każdym kolejnym miesiącu. Do rozważenia Comarch PPK wracamy dopiero wtedy, kiedy firma dojrzewa do pełnej automatyzacji komunikacji z instytucją finansową – i wtedy dyskusja przestaje być o “raporcie za miesiąc”, a zaczyna o procesie obsługi PPK.

Porozmawiajmy o uporządkowaniu raportowania PPK i innych składek w Twojej Optimie.

Błąd wysyłki zbiorczej do KSeF w Comarch ERP XL – OpenBatchSessionAsync unauthorized access

Zbiorcza wysyłka faktur do KSeF z Comarch ERP XL i w konsoli ląduje długi łańcuszek błędu: Invalid operation ‘SendBatch’: Operation failed due to component error: OpenBatchSessionAsync failed due to unauthorized access and token refresh error: Bad Request. W praktyce to komunikat z jednym prostym znaczeniem – XL próbuje otworzyć sesję zbiorczą w KSeF, dostaje 401 Unauthorized od API MF i przy próbie odnowienia tokena łapie kolejny błąd 400. Nie chodzi tu o dane faktury ani o schemę XML – problem jest po stronie sesji i tokena operatora.

Dlaczego XL zwraca ten błąd

Każda sesja KSeF w Optimie i XL bazuje na parze: token autoryzacyjny operatora + aktywna sesja API MF. Token ma swój czas życia i zakres uprawnień, sesja – jeszcze krótszy TTL. Kiedy XL próbuje uruchomić wysyłkę zbiorczą (SendBatch), otwiera nową sesję na tokenie operatora. Jeśli token wygasł, został wygenerowany dla innego środowiska (np. Demo, a wysyłka idzie na Produkcję) lub ma za wąski zakres uprawnień, MF zwróci 401. XL próbuje wtedy odnowić token (token refresh), ale endpoint refresh nie akceptuje wygasłego lub niepasującego tokena – dostaje 400 Bad Request. Efekt: często obie sesje (poprzednia i nowa) są w niespójnym stanie, a XL nie potrafi się sam z tego wygrzebać.

Krok po kroku – jak przywrócić wysyłkę

Krok 1 – zamknij aktywną sesję KSeF w XL

Z menu System → Sesja KSeF wybierz opcję zamknięcia aktywnej sesji. To wymusza porzucenie niespójnego stanu sesji, której używał SendBatch. Jeśli w oknie jest widoczna aktywna sesja – zamknij ją ręcznie, nawet jeśli status wygląda poprawnie.

<screen>

Krok 2 – zrestartuj Comarch ERP XL

Zamknij całkowicie aplikację (nie tylko okno modułu handlowego) i uruchom ją ponownie. Przy starcie XL nawiąże nową sesję na aktualnym tokenie operatora – bez śladów poprzedniej, uszkodzonej. W wielu przypadkach ten krok wystarcza, żeby wysyłka zbiorcza znowu ruszyła.

Krok 3 – jeśli błąd wraca, usuń wpis operatora z cdn.KSeFTokeny

Uruchom SQL Server Management Studio, połącz się z bazą firmową XL i sprawdź tabelę cdn.KSeFTokeny – to tam XL trzyma zapisane tokeny/uwierzytelnienia poszczególnych operatorów. Znajdź wiersz odpowiadający operatorowi, który napotkał błąd i usuń go (przed usunięciem zrób backup lub zapisz zawartość na bok). Po ponownym uwierzytelnieniu tego operatora w XL, wpis zostanie odtworzony automatycznie już na świeżym tokenie. To rozwiązuje sytuacje, w których w tabeli siedzi “martwy” token, którego XL nie potrafi odnowić.

<screen>

Krok 4 – zweryfikuj środowisko tokena (Demo vs Produkcja)

W konfiguracji KSeF w XL sprawdź, dla jakiego środowiska wygenerowano token operatora. Częsty scenariusz: token pochodzi z testowego środowiska Demo, a wysyłka celuje w Produkcję (lub odwrotnie po przełączeniu klienta z Demo na Prod). MF nie zaakceptuje takiego tokena i zwróci 401 nawet dla poprawnego formalnie żądania. Wygeneruj nowy token dla właściwego środowiska.

<screen>

Krok 5 – zweryfikuj uprawnienia tokena

Token KSeF ma zakres uprawnień (m.in. wystawianie faktur, odczyt, zarządzanie uprawnieniami, samofakturowanie). Do wysyłki zbiorczej (SendBatch) potrzebujesz przynajmniej uprawnienia do wystawiania faktur. Jeśli token był generowany “minimalistycznie” (tylko odczyt lub tylko konkretna rola) – MF odrzuci wysyłkę. W praktyce najbezpieczniej wygenerować nowy token z pełnym zestawem uprawnień dla operatora technicznego biuletynu KSeF, który będzie używany przez XL.

<screen>

Kiedy sprawa jest po stronie MF, a nie XL

Zdarza się, że cały powyższy łańcuszek jest w porządku, a XL nadal zwraca 401/400 – warto wtedy sprawdzić status środowiska KSeF na stronie MF (podatki.gov.pl → KSeF → Status środowiska). Krytyczne prace serwisowe lub incydenty po stronie MF potrafią blokować wysyłkę zbiorczą z tym samym komunikatem błędu, mimo że token i sesja są poprawne. W takich sytuacjach jedyne co pomaga to poczekać na przywrócenie usługi.

Perspektywa ELTE-S

OpenBatchSessionAsync unauthorized w 9 na 10 wdrożeń sprowadza się do jednego z trzech twórców problemu: uszkodzony stan sesji po restarcie serwera, martwy token w cdn.KSeFTokeny albo niezgodność środowiska Demo/Prod na tokenie. Dopóki nie odetnie się tych trzech możliwości, nie warto szukać problemu w schemacie faktury ani w połączeniu sieciowym. Praktyczna wskazówka na przyszłość: dokumentujcie u siebie który operator w bazie ma token na jakie środowisko i pilnujcie, żeby po zmianie z Demo na Produkcję wyczyścić cdn.KSeFTokeny lub wygenerować nowe tokeny – to eliminuje 80% przypadków tego błędu. Interwencja w tabeli KSeFTokeny wygląda mocno technicznie, ale w praktyce jest bardzo bezpieczna – wpis odtwarza się automatycznie przy następnym logowaniu operatora.

Porozmawiajmy o uporządkowaniu integracji KSeF w Twoim Comarch ERP XL.

Przywracanie rezerwacji po korekcie i modyfikacji ZK w Comarch ERP XL – gdzie leży błąd?

Znasz tę sytuację? Proces kompletacji jest w toku, wystawiasz Zlecenie Kompletacji (ZK), do niego generujesz Rozchód Wewnętrzny (RW), potem okazuje się, że trzeba to skorygować, więc robisz RWK. Nagle anulujesz RWK, modyfikujesz ZK dodając nowy towar, zamykasz dokument, i w systemie pojawiają się rezerwacje widmo na towary, które przecież dawno zeszły ze stanu.

Chaos na magazynie gotowy. Zastanawiasz się, czy to wina konfiguracji, czy może system sam z siebie generuje podwójne rezerwacje. Jednak gdy zaczynamy badać logikę tego obiegu i działanie API w Comarch ERP XL, szybko okazuje się, że to nie wina samego systemu, a najprawdopodobniej Twojej zewnętrznej integracji.

Jak naturalnie działa obieg ZK i RW w ERP XL?

Podczas standardowego zatwierdzania Zlecenia Kompletacji (ZK), Comarch ERP XL automatycznie generuje rezerwacje na wszystkie potrzebne składniki towaru. Kiedy praca rusza i robimy dokument RW (rozchód składników), system naturalnie ściąga rezerwacje, bo składniki zostały już fizycznie pobrane.

Jeśli na tym etapie pojawia się potrzeba wycofania lub korekty (RWK), teoretycznie (zgodnie ze sztuką) rezerwacje powinny wrócić. Jednak mechanizm rezerwacji w Comarch ERP XL ma w tym miejscu swoje “niedorobienia” i nie odtwarza ich automatycznie po wygenerowaniu RWK. Wielu klientom takie zachowanie wręcz bardzo odpowiada, ale w tym scenariuszu rezerwacje niespodziewanie wracają później – po dodaniu nowej pozycji i zamknięciu zlecenia.

Gdzie leży błąd w Twoim procesie?

Wiele osób uważa, że przy częściowo zrealizowanym ZK (gdy powstaną RW/RWK) system w ogóle nie pozwala na edycję. To nie do końca prawda. Interfejs programu dopuszcza dodanie kolejnej, całkowicie nowej pozycji do takiego dokumentu bez konieczności ponownego zamykania całego zlecenia. Kiedy robi się to z poziomu interfejsu (lub poprawnie w tle), rezerwacja pojawi się tylko na tę nową część. Cała historyczna część dokumentu pozostaje nienaruszona.

Skąd w takim razie rezerwacje widmo na wszystko? Odpowiedzią jest wywoływanie funkcji ZamknijDokumentZlc za pomocą API lub zewnętrznego skryptu.

Wywołanie tej metody to dla systemu sygnał do wykonania procedury zamykania dla całości dokumentu, dokładnie tak jak przy pierwszym zatwierdzaniu. Program wykonuje ślepo to polecenie – przelicza wszystkie pozycje i generuje na nowo rezerwacje dla każdego składnika, nie analizując tego, że powiązane dokumenty zjadły już te stany. Wywoływanie funkcji ponownego zamykania całego zlecenia przy dodaniu zaledwie jednej nowej pozycji to poważny błąd logiczny.

Perspektywa ELTE-S: Niestandardowe operacje wymagają precyzji

Tworzenie własnych rozwiązań opartych na API czy integracjach to świetny sposób na przyspieszenie pracy, ale wymaga głębokiego zrozumienia mechaniki Comarch ERP XL. Powyższe działania to krótka droga do poważnego problemu: stany magazynowe zaczną się rozjeżdżać, system zacznie mnożyć rezerwacje widmo na tysiące sztuk, a to w prostej linii prowadzi do paraliżu procesów magazynowych i wstrzymania wysyłek do innych klientów, bo system zablokuje towar jako rzekomo “zarezerwowany”.

Zamiast walczyć z systemem i zamykać produkcję na czas sprzątania bazy, warto oddać integracje w ręce kogoś, kto zna API Comarcha na wylot. W ELTE-S chętnie sprawdzimy, w jaki sposób Twoja aplikacja odpytuje system, zlokalizujemy luki w logice i zaprojektujemy poprawki, dzięki którym proces przestanie generować fikcyjne blokady towaru.

Nie ryzykuj uszkodzenia bazy i chaosu na magazynie. Zostaw to nam.

Przebudowa drzewa struktury podległościowej w Comarch ERP XL – jak przenieść lub skopiować grupę?

Reorganizacja firmy, zmiana nazw działów czy połączenie kilku spółek w jeden organizm – to sytuacje, które naturalnie wymuszają zmiany w systemie ERP. W Comarch ERP XL struktura podległościowa to jeden z kluczowych elementów organizujących pracę, dostęp do dokumentów i akceptacje obiegów.

Często na forach pojawia się pytanie: jak szybko zreorganizować takie drzewo? Czy da się złapać całą gałąź z pracownikami i po prostu skopiować ją lub przenieść w inne miejsce za pomocą jednego kliknięcia?

Krótka odpowiedź brzmi: nie. System nie posiada przycisku “Kopiuj/Wklej gałąź”.

Jak poprawnie przebudować strukturę?

Próby znalezienia “magicznego przycisku” do kopiowania całych grup z pracownikami zwykle kończą się frustracją. Comarch ERP XL wymaga nieco bardziej ustrukturyzowanego podejścia do takich zmian operacyjnych.

Jeśli chcesz zreorganizować dział lub przenieść grupę ludzi, zastosuj poniższą ścieżkę:

1. Zbuduj nową gałąź ręcznie: W pierwszej kolejności utwórz w strukturze podległościowej nowe centrum (grupę/gałąź), docelowo nazywając i ustawiając jego parametry.

2. Wykorzystaj zbiorcze przepięcie: Nie musisz przenosić pracowników pojedynczo. Przejdź do starej grupy, zaznacz wszystkich pracowników, którzy mają trafić do nowego centrum i wykonaj operację zbiorczego przepięcia (zmiany przydziału).

3. Zarchiwizuj lub usuń stare centrum: Gdy stara gałąź jest już pusta i nie ma do niej przypisanych żadnych historycznych obiegów, które mogłyby ulec uszkodzeniu, możesz ją usunąć lub ukryć.

Dlaczego nie ma na to automatu?

Nasi wdrożeniowcy często spotykają się z prośbami o stworzenie “automatu” do klonowania struktury. Prawda jest jednak taka, że gruntowna przebudowa drzewa podległościowego w dużych firmach to operacja, którą wykonuje się niezwykle rzadko – raz na kilka lat, zwykle przy dużych przekształceniach lub restrukturyzacjach.

Pisanie dedykowanych skryptów czy funkcji dodatkowych tylko po to, by zaoszczędzić 15 minut na ręcznym założeniu nowych folderów i zbiorczym przeniesieniu ludzi, mija się z celem ekonomicznym.

Oczywiście, jeśli reorganizacja dotyczy setek centrów i tysięcy pracowników, a ręczna praca paraliżuje wdrożenie, jesteśmy w stanie interweniować na poziomie bazy danych. W 99% przypadków jednak standardowa ścieżka (nowa gałąź + zbiorcze przepięcie) jest najszybsza i najbezpieczniejsza dla spójności danych.

Jeżeli planujesz dużą reorganizację w Comarch ERP XL i boisz się o stabilność obiegów dokumentów, uprawnień i procesów w tle – daj nam znać. Chętnie pomożemy zaplanować to przejście.