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.

Załącznik CIT/M w Comarch ERP Optima – czy jest obsługiwany i jak sobie poradzić w biurze rachunkowym?

Minimalny podatek dochodowy wrócił do gry po latach zawieszenia i biura rachunkowe zaczęły odkrywać, że ich standardowy workflow w Optimie ma jedną lukę. Klienci, którzy wpadają w ten obowiązek, wymagają dołączenia załącznika CIT/M do rocznej deklaracji CIT – a w Comarch ERP Optima tego załącznika nie znajdziesz w formularzu. Efekt: część danych trzeba wypełniać poza systemem, a sama deklaracja na liście CIT wygląda tak, jakby nie została złożona.

Co dokładnie Optima obsługuje, a czego nie

Comarch w standardowym formularzu CIT-8 wdrożył większość popularnych załączników – CIT/O, CIT/BR, CIT/IP, CIT/PM, CIT/MIT, CIT-D, CIT/8S, CIT/KW (dostępność zależy od wersji Optimy). CIT/M na liście nie ma (na dziś sierpień 2026), a razem z nim brakuje całej obsługi minimalnego podatku dochodowego – Optima nie liczy podstawy, nie generuje kwoty, nie wystawia druku. W Asyście Comarch funkcjonuje zgłoszenie o numerze ID 314363 dotyczące wprowadzenia tej funkcjonalności, ale na dziś ma ono status sugestii bez wyznaczonego terminu realizacji. Innymi słowy – Comarch wie o problemie, ale nie ma jeszcze konkretnej daty, kiedy pojawi się wsparcie.

Jak biura rachunkowe rozwiązują to na co dzień

Krok 1 – wygeneruj deklarację CIT w Optimie bez CIT/M

Dla klientów wpadających w minimalny podatek dochodowy przygotowujesz roczną deklarację CIT w standardowy sposób – z pełnym zestawem załączników, które Optima obsługuje (np. CIT/O, CIT/BR, CIT/8S). CIT/M zostawiasz na później i nie próbujesz obejść problemu wpisywaniem wartości w inne pola deklaracji głównej.

Krok 2 – wypełnij CIT/M ręcznie w e-Deklaracjach MF

Wejdź na oficjalną stronę Ministerstwa Finansów (podatki.gov.pl → e-Deklaracje) i pobierz aktualny formularz interaktywny CIT/M. Wypełnij go danymi klienta na podstawie własnych wyliczeń (Optima nie policzy tego za Ciebie – potrzebujesz ręcznego przygotowania podstawy). Zapisz plik XML wygenerowany z formularza.

Krok 3 – wyślij CIT/M osobno jako właściwą deklarację

CIT/M nie jest w tej sytuacji “załącznikiem do CIT-8 z Optimy” – jest osobną deklaracją, którą wysyłasz ręcznie z bramki MF. Urząd skojarzy oba dokumenty po NIP-ie podatnika i okresie rozliczeniowym. Po wysyłce zachowaj UPO CIT/M w dokumentacji klienta razem z UPO deklaracji CIT-8 wygenerowanej z Optimy.

Krok 4 – opisz sytuację w Optimie, żeby nie było “pustej deklaracji”

Po wysyłce ręcznej CIT/M poza Optimą warto w komentarzu do deklaracji CIT-8 (albo w wewnętrznej ewidencji biura) odnotować, że klient składał dodatkowo CIT/M poza systemem, z podaniem daty i numeru UPO. Bez tego przy następnej weryfikacji Optima pokazuje deklarację jakby była niekompletna, a Ty tracisz ślad, że CIT/M w ogóle został wysłany.

Co dalej z zgłoszeniem 314363

Status “sugestia” w Asyście Comarch oznacza, że zgłoszenie jest w kolejce do rozważenia, ale nie ma na razie zaplanowanej implementacji. W praktyce takie zgłoszenia ruszą z miejsca, gdy odezwie się dostatecznie dużo użytkowników (biura rachunkowe są tu w mocnej pozycji, bo obsługują wielu klientów). Warto, żeby każde biuro rachunkowe mające takich klientów złożyło osobne zgłoszenie w Asyście z powołaniem się na ID 314363 – to najkrótsza droga do podniesienia priorytetu.

Perspektywa ELTE-S

Minimalny podatek dochodowy to obszar, który wrócił do przepisów po latach zawieszenia, i widać to również w tempie, w jakim narzędzia ERP nadrabiają zaległości – Optima nie jest tu wyjątkiem. Dopóki CIT/M nie zostanie zaimplementowany, warto uporządkować dwie rzeczy:

  • po pierwsze, stworzyć w biurze rachunkowym prosty checklist “klient z CIT/M” i trzymać go razem z UPO poza Optimą, żeby przy następnym roku podatkowym nie zacząć od zera;
  • po drugie, nie próbować wpychać CIT/M do standardowej deklaracji “na siłę” (np. przez modyfikację pozycji w CIT-8) – to prosta droga do pomyłki w wyliczeniach i problemów przy kontroli.

Do czasu udostępnienia dedykowanej obsługi przez Comarch, hybrydowe podejście (CIT z Optimy + CIT/M z bramki MF) jest bezpieczne i formalnie poprawne.

Porozmawiajmy o uporządkowaniu procesu deklaracji w Twoim biurze rachunkowym.

Dodawanie grupy środków trwałych w Comarch ERP Optima – gdzie i jak to zrobić?

Moduł Środki Trwałe w Optimie ma jedną pułapkę, która zaskakuje wielu księgowych – grup środków trwałych nie definiuje się z poziomu samej ewidencji. Wchodzisz w listę środków trwałych, chcesz przypisać grupę przy zakładaniu nowej karty i widzisz, że słownik jest pusty albo brakuje potrzebnej pozycji. Zaczynasz szukać przycisku “Dodaj grupę” na liście – i go nie ma. To nie błąd. Grupy środków trwałych to element konfiguracji firmy, a nie samej ewidencji.

Dlaczego grupy są w konfiguracji, a nie w ewidencji

Comarch świadomie oddzielił słowniki od danych operacyjnych. Grupa środków trwałych to element strukturalny bazy – decyduje o tym, jak grupowane są środki, jak wyglądają raporty i jakie wartości podpowiadają się przy zakładaniu nowej karty. Zmiana tej struktury nie powinna być możliwa dla każdego operatora, dlatego siedzi w konfiguracji firmy – tam, gdzie zarządza się słownikami, seriami dokumentów i innymi “fundamentami” bazy. Ewidencja środków trwałych korzysta z tych grup, ale ich nie edytuje.

Krok po kroku – jak dodać grupę środków trwałych

Krok 1 – otwórz Konfigurację firmy

Z menu Optimy wejdź w Konfiguracja → Firma → Środki Trwałe → Grupy środków trwałych. To jedyna ścieżka do zarządzania grupami – nie da się tego zrobić z poziomu listy środków trwałych ani z karty pojedynczego środka.

<screen>

Krok 2 – dodaj nową grupę

Na liście grup użyj przycisku Dodaj albo klawisza INSERT. Otworzy się okno definicji grupy, w którym wypełniasz Nazwę (skrócony identyfikator grupy) i Opis (pełna nazwa opisowa). Zapisz zmiany klawiszem ENTER lub przyciskiem dyskietki.

<screen>

Krok 3 – zapisz konfigurację

Po dodaniu grupy zamknij okno Konfiguracji firmy przyciskiem OK – dopiero to trwale zapisuje zmiany w bazie. Wyjście krzyżykiem lub anulowanie potrafi cofnąć dokończoną edycję, więc warto o tym pamiętać przy pracy w konfiguracji.

<screen>

Krok 4 – użyj grupy w ewidencji

Wróć do listy środków trwałych i przy zakładaniu lub edycji karty środka wybierz nowo dodaną grupę ze słownika. Od tej chwili będzie ona dostępna do filtrowania i grupowania w raportach.

<screen>

Co zrobić, gdy sekcji “Grupy środków trwałych” w ogóle nie widać

Zdarza się, że operator wchodzi w Konfigurację firmy i sekcji Środki Trwałe albo w ogóle nie ma, albo pod nią brakuje pozycji Grupy środków trwałych. Najczęściej przyczyny są dwie.

Brak uprawnień operatora – konfiguracja firmy jest często zablokowana dla większości operatorów. Prawo do jej edycji ma tylko administrator lub wyznaczony księgowy. Nadaje się je w Konfiguracji Programu → Użytkowe → Operatorzy, na karcie operatora, zakładka Blokady dostępu / Uprawnienia.

<screen>

Moduł Środki Trwałe nie jest przypięty do operatora – sama licencja modułu na kluczu HASP to za mało. Moduł musi być dodatkowo aktywowany na karcie operatora w zakładce Moduły (Konfiguracja Programu → Użytkowe → Operatorzy → karta operatora → Moduły). Bez zaznaczenia Środków Trwałych dla danego operatora, część sekcji konfiguracji związanych z tym modułem będzie ukryta.

<screen>

Perspektywa ELTE-S

Brakująca sekcja w Konfiguracji firmy to w 90% przypadków kwestia uprawnień albo nieprzypiętego modułu do operatora – a nie brak licencji czy błąd Optimy. Dwóch rzeczy warto pilnować: po pierwsze, słowniki (grupy środków trwałych, kategorie, serie) definiować raz a porządnie na starcie wdrożenia, bo późniejsze zmiany strukturalne generują rozjazdy w raportach; po drugie, mieć jasny podział ról – administrator/księgowy zarządza konfiguracją firmy, pozostali operatorzy tylko korzystają. Dobrze ułożona hierarchia uprawnień to szczepionka na przypadkowe zmiany w słownikach, które potrafią rozsypać sprawą amortyzację i ewidencję.

Porozmawiajmy o uporządkowaniu środków trwałych w Twojej Optimie.

Klucz KSeF przy HASP – gdzie dodać i ile pakietów przy kilku kluczach licencyjnych w Optimie?

KSeF wszedł na stałe do codziennej pracy w Optimie i sporo firm dopiero teraz odkrywa, że sama licencja to jedno, a jej poprawne podpięcie do konkretnego klucza HASP to zupełnie inna historia. Szczególnie w firmach, które mają kilka kluczy licencyjnych na różnych serwerach albo pod różne bazy, pojawia się pytanie – czy trzeba wykupić pakiet KSeF dla każdego klucza z osobna, czy jeden wystarczy dla całego środowiska. Poniżej rozkładamy to na czynniki pierwsze.

Gdzie fizycznie dodaje się licencję KSeF przy HASP

Gdy pracujesz na kluczu HASP, licencję KSeF zawsze aktualizuje się w Menadżerze kluczy przy pomocy pliku .RUS otrzymanego od Comarcha. To jest źródło prawdy – dopiero po tej operacji klucz “widzi”, że ma dostępną licencję KSeF.

W samej Konfiguracji Optimy (Konfiguracja → Firma → Dane firmy → KSEF) nie aktywujesz licencji – tę sekcję wykorzystujesz jedynie do wskazania innego klucza, jeśli licencja KSeF ma być czerpana z klucza działającego na innej maszynie niż ta, do której zalogowana jest dana baza.

<screen>

Kiedy wystarczy jedna licencja KSeF dla wielu kluczy

Comarch dopuszcza dość wygodne rozwiązanie dla firm z kilkoma kluczami HASP – jeśli wszystkie klucze obsługują ten sam NIP lub podmioty powiązane i są w tej samej sieci, wystarczy jeden pakiet KSeF wykupiony na jednym z tych kluczy. Pozostałe klucze mogą korzystać z tej samej licencji, nawet jeśli pracują na innej instalacji SQL. Warunek jest jeden – sieć, w której działają wszystkie klucze, musi umożliwiać im wzajemne “zobaczenie się”.

Jeśli natomiast klucze pracują w odrębnych środowiskach (różne sieci, różne NIP-y niepowiązane, oddziały niepołączone infrastrukturalnie) – trzeba wykupić licencję KSeF osobno dla każdego takiego środowiska.

Jak wskazać licencję z innego klucza – krok po kroku

Krok 1 – aktualizacja klucza plikiem RUS

Od Comarcha dostajesz plik .RUS z licencją KSeF przypisaną do konkretnego numeru klucza HASP. W Menadżerze kluczy wskazujesz ten plik i wykonujesz aktualizację licencji. Po tej operacji klucz główny fizycznie ma na sobie licencję KSeF.

<screen>

Krok 2 – sprawdzenie widoczności klucza w sieci

Jeżeli z tej samej licencji ma korzystać inny klucz HASP w tej samej sieci, upewnij się, że Menadżer kluczy na drugim serwerze widzi klucz główny. Zwykle wymaga to otwartego portu dla usługi Sentinel HASP oraz zgodnej konfiguracji sieci lokalnej. Bez tego kroku pozostałe stanowiska nie znajdą licencji.

<screen>

Krok 3 – wskazanie klucza z licencją KSeF w konfiguracji firmy

W bazach, które mają korzystać z licencji z drugiego klucza, wchodzisz w:

Konfiguracja → Firma → Dane firmy → KSEF

i wskazujesz numer klucza, z którego ma być czerpana licencja KSeF. Ten krok jest konieczny tylko wtedy, gdy baza domyślnie korzysta z innego klucza niż ten, na którym siedzi licencja KSeF. Jeśli operator/baza pracuje już na kluczu z licencją KSeF – tej sekcji nie ruszasz.

<screen>

Krok 4 – weryfikacja na dokumencie

Wystaw testową fakturę sprzedaży i sprawdź, czy opcje KSeF są aktywne (wysyłka, statusy, UPO). Jeśli mimo aktywnej licencji na kluczu funkcje są wyszarzone, wróć do Menadżera kluczy – najczęściej brakuje odświeżenia licencji lub baza łapie inny klucz niż myślisz.

<screen>

Perspektywa ELTE-S

Bałagan licencyjny KSeF przy kluczach HASP potrafi kosztować firmę więcej niż sama licencja – typowy scenariusz to “kupiliśmy pakiet KSeF, a i tak nie działa”, choć licencja siedzi na innym kluczu niż ten, którego używa baza produkcyjna. Dwóch rzeczy należy przy tym pilnować: po pierwsze, zawsze aktualizować licencję przez Menadżera kluczy plikiem RUS (nie przez konfigurację firmy – tam tylko wskazujesz), po drugie, przed wykupieniem drugiego pakietu KSeF sprawdzić, czy klucze rzeczywiście są w tej samej sieci i pracują na tym samym NIP-ie lub podmiotach powiązanych – jeśli tak, jeden pakiet obsłuży wszystkie. Warto też pamiętać, że zmiany kadrowe i migracje serwerów często niepostrzeżenie przenoszą bazę na inny klucz i nagle KSeF “przestaje działać” bez żadnej widocznej przyczyny.

Porozmawiajmy o uporządkowaniu licencji i KSeF w Twojej Optimie.