Naprawiono błąd wykonania skryptu fillingLanguagesTables.sql przez narzędzie sqlcmd – plik zakodowany w standardowym UTF-8 (bez BOM) był blednie odczytywany, co powodowało naruszenie klucza głównego tabeli do.LG_Head;
Naprawiono błąd dotyczący wyświetlania dokumentów już przeczytanych i nieprzeczytanych na liście z identyczna czcionka po aktualizacji do wersji 2026.1.0 – przywrócono pogrubienie dla dokumentów nieprzeczytanych;
Rozwiązano problem z wyświetlaniem szczegółów dokumentów po ich przekazaniu za pomocą listy do kolejnego etapu;
Naprawiono błąd dotyczący wyświetlania komunikatu Wystąpił błąd logowania zamiast komunikatu informującego o braku dostępnych licencji w aplikacji desktop; od bieżącej wersji wyświetlany jest komunikat analogiczny jak w aplikacji WEB;
Naprawiono błąd dotyczący nieprawidłowego działania opcji Zapamiętaj mnie – ciasteczka rememberLogin i userLoginToken były tworzone jako sesyjne (usuwane po zamknięciu przeglądarki) zamiast trwałych, przez co opcja zapamiętywania logowania nie działała po ponownym uruchomieniu przeglądarki;
Rozwiązano problem z edycja dokumentu ERP XL o typie nota memoriałowa – po ponownym wejściu w dokument na tym samym etapie pola pozycji były wyżarzone i niemożliwe do edycji;
Naprawiono błąd dotyczący sortowania punktów konfiguracyjnych w module ACD po nazwie – po aktualizacji do wersji 2026.0.0 sortowanie po nazwie przestało działać, a punkty były wyświetlane w kolejności ich dodania;
Umożliwiono wyświetlanie serii o nazwie dłuższej niż 5 znaków na formatce dokumentu ERP XL;
Rozwiązano problem dotyczący blokowania operatora na obiegu po przekazaniu dokumentu z poziomu listy;
Naprawiono błąd dotyczący braku danych na wydruku Książki Nadawczej po aktualizacji do wersji 2026.1.0 – aplikacja wywoływała procedurę pobierająca dane z pustym parametrem @documents=default;
Naprawiono błąd dotyczący wyświetlania okna weryfikacji reguł podczas pobierania dokumentów z KSeF, gdy w konfiguracji punktu ACD nie zdefiniowano żadnych reguł;
Naprawiono błąd pojawiający się podczas wykonywania operacji OCR z kontrolki Załącznik w aplikacji WEB;
Naprawiono błąd dotyczący nieprawidłowego działania warunku etapu z operatorem OR/AND w aplikacji WEB – warunek nie działał poprawnie dla kontrolek tekstowych oraz logicznych, podczas gdy w aplikacji desktop działał prawidłowo;
Naprawiono błąd polegający na wyświetlaniu komunikatu Dokument XML zawiera błąd (0,0) podczas importu dokumentów z KSeF;
Rozwiązano problem dotyczący blokady licencji Comarch ERP XL mimo zamknięcia formatki PZ otwartej z poziomu dokumentu S(FZ) – licencje były zwalniane dopiero po wylogowaniu operatora z Comarch BPM;
Naprawiono błąd dotyczący duplikowania numerów dokumentów w aplikacji desktop;
Naprawiono błąd dotyczący błędnej zmiany statusu dokumentu KSeF po wyświetleniu komunikatu o duplikacji na punkcie ACD – dokument znikał z listy i otrzymywał status KSW_Status = 5/4, mimo że nie został wygenerowany;
Rozwiązano problem dotyczący długiego czasu generowania dokumentów z Comarch BPM do Comarch ERP Optima przez IIS – podczas generowania proces zawieszał się, a w logach pojawiały się błędy HTTP 500 przy wywołaniu endpointu account/login;
Naprawiono błąd dotyczący wyszukiwania w kontrolce Lista w trybie wyszukiwania z CsScript – wyszukiwanie działało w trybie rozróżniającym wielkość liter (case sensitive);
Zaktualizowano dokument warunków korzystania i gwarancji oprogramowania w instalatorze głównym oraz w instalatorze aplikacji desktop;
Naprawiono błąd polegający na zawieszaniu się interfejsu podczas importu faktur z KSeF;
Rozwiązano problem dotyczący znikania dokumentów KSeF z listy i oznaczania ich jako zaimportowane (KSW_Status = 5) po kliknięciu przycisku Zatrzymaj podczas inicjowania dokumentów lub po niewybraniu typu spółki – dokumenty nie zostały faktycznie zarejestrowane w Comarch BPM.
Informacje ogólne
Aplikacje Comarch BPM w wersji 2026.1.1 współpracują z następującymi Systemami Comarch ERP:
Comarch ERP XL – wersje systemu: 2025.1.3, 2025.1.4, 2025.1.5, 2025.1.6
Comarch ERP Optima – wersje systemu: 2026.2.1, 2026.3.1, 2026.4.1
Comarch ERP Altum – wersje systemu: 2024.5, 2025.0, 2026.0
Comarch ERP Enterprise 6.4 – DMS Integration APP wersja 45.2
Uwaga
Od wersji 2025.1.0 wsparcie dla starej wersji aplikacji web zostało zakończone.
Uwaga
Obsługa logów z generatora została oprogramowana w Comarch BPM dla następujących wersji Comarch ERP Optima: 2024.3.1, 2024.5.1, 2024.6.1, 2025.0.1, 2025.1.1, 2025.2.1 i późniejszych. Ze stron walidowanych należy pobrać zaktualizowany generator Comarch ERP Optima adekwatny do wersji Comarch ERP Optima.
Uwaga
Wymagane oprogramowanie serwera IIS:
System operacyjny (jedna z poniższych możliwości):
Windows Server 2016
Windows Server 2019
Windows Server 2022
Windows Serwer 2025
Poprawa mechanizmu pobierania nowych dokumentów z KSeF
W wersji 2026.1.1 poprawiono mechanizm pobierania dokumentów z KSeF przy użyciu opcji Nowe. Dotychczasowe rozwiązanie opierało się na procedurze [do].[GetLastKSeFDate], która jako punkt startowy kolejnego zapytania przyjmowała maksymalna datę wystawienia faktury (MAX(KSH_DataWytworzeniaFa)) z lokalnej bazy. Powodowało to pominiecie dokumentów wystawionych z data wsteczna lub dostarczonych do KSeF z opóźnieniem – takie faktury były trwale pomijane przy kolejnych synchronizacjach.
W ramach poprawki zmodyfikowano procedurę w taki sposób, aby przy wyznaczaniu daty startowej uwzględniany był margines bezpieczeństwa, co eliminuje ryzyko pominięcia dokumentów docierających do KSeF z opóźnieniem.
Dodanie możliwości obsługi paczek KSeF w robotyzacji
W wersji 2026.1.1 w ramach obiektu Globals.ACD dodano dwie nowe metody umożliwiające automatyczną obsługę pobierania dokumentów z usługi KSeF w paczkach:
ImportKSeFDocumentsPackage() – metoda służąca do automatycznego pobierania paczkami nowych dokumentów z usługi KSeF. Metoda nie przyjmuje parametrów wejściowych i zwraca następujące wartości:
0 – jeśli operacja wykonała się poprawnie,
-1 – jeśli wystąpił błąd.
ImportKSeFDocumentsPackage(DateTime, DateTime) – metoda służąca do automatycznego pobierania paczkami nowych dokumentów z usługi KSeF z określonego zakresu dat. Metoda przyjmuje następujące parametry wejściowe:
DateTime – Data od,
DateTime – Data do.
i zwraca następujące wartości:
0 – jeśli operacja wykonała się poprawnie,
-1 – jeśli wystąpił błąd.
Nowe metody umożliwiają partnerom i klientom korzystającym z funkcji automatyzacji (RPA) w Comarch BPM integracje z KSeF z wykorzystaniem mechanizmu paczek.
Dodanie nowych pól OCR i ich obsługa we współpracy z Comarch OCR
W wersji 2026.1.1 uzupełniono bazę danych Comarch BPM o nowe pola usługi Comarch OCR i obsłużono ich wypełnienie podczas odczytywania danych przez OCR na punktach ACD. W tabeli OC_Documents dodano następujące kolumny:
OCD_KSeFNumber (varchar(50)) – numer referencyjny KSeF; pobierany z klucza KSeFNumber w obiekcie recognizedElements;
OCD_KSeFDateOfSending (datetime) – data przyjecia w KSeF; pobierana z pola dateOfSending (json) lub tagu KSEF_DATA_PRZYJECIA (xml);
OCD_BuyerContractorDistrict (varchar(40)) – powiat nabywcy; pobierany z pola district dla nabywcy (json) lub tagu POWIAT (xml);
ODC_SellerContractorDistrict (varchar(40)) – powiat sprzedawcy; pobierany z pola district dla sprzedawcy (json) lub tagu POWIAT (xml).
Obsługa parametru @IdOperatorBPM@ w punkcie ACD typu Współpraca z dowolnym programem OCR
W wersji 2026.1.1 wprowadzono obsługę parametru @IdOperatorBPM@ w zapytaniach konfigurowanych na punktach ACD typu Współpraca z dowolnym programem OCR. Parametr ten był dotychczas obsługiwany wyłącznie na punktach ACD typu OCR oraz KSeF – od bieżącej wersji działa analogicznie również dla punktów ACD współpracujących z dowolnym programem OCR.
Zwiększenie limitu wymiarów w opisie analitycznym dla Comarch ERP XL
W wersji 2026.1.1 zwiększono limit obsługiwanych wymiarów w opisie analitycznym z 15 do 20. Zmiana ta zapewnia pełna zgodność z możliwościami Comarch ERP XL, który pozwala na zdefiniowanie do 20 wymiarów analitycznych – dotychczas Comarch BPM ograniczał te liczbę do 15.
Wymagania sprzętowe, oprogramowanie, wymagane porty i licencje serwerowe
Uwaga
Zalecamy, aby serwer IIS, serwer SQL oraz serwer MongoDB były zainstalowane na osobnych maszynach.
Uwaga
W przypadku aplikacji mobilnych nie jest obsłużona praca na MacOS. Obsługujemy urządzenia z systemem iOS, czyli iPhony i iPady
Zalecane przeglądarki
Do pracy z modułem zalecane są przeglądarki:
Microsoft Edge;
Google Chrome;
Mozilla Firefox;
Opera.
Porty, które powinny zostać otwarte dla Comarch BPM (dawniej DMS)
Na serwerze MSSQL należy odblokować domyślny port 1433, aby móc nawiązać komunikację z serwerem IIS i ewentualnie innymi serwerami, w przypadku instalacji na wielu różnych maszynach
Na maszynie, na której zainstalowano Comarch ERP Menadżer Kluczy należy otworzyć port SSL 443, aby umożliwić komunikację z serwerami Comarch
Można włączyć komunikację na porcie 5150, połączenie to wspiera komunikację Comarch ERP Menadżer Kluczy z serwerem IIS
Dodatkowo:
W SQL Management Studio należy włączyć „Authentification mixed mode”, a także upewnić się, że został utworzony użytkownik z uprawnieniami Administratora, np. SA
Zalecana konfiguracja sprzętowa serwera IIS
Wymagany sprzęt – zalecenia minimalne:
VCPU – 2 x 2.2 GHz
RAM – 32 GB
HDD/SSD – 120 GB
Kontroler z obsługą RAID
Konfiguracja RAID – RAID1
NIC – Interfejs sieciowy 100/1000 Mb/s (w zależności od całości infrastruktury)
Zapewnienie możliwości rozbudowy:
Możliwość rozbudowy do 4 CPU
Możliwość rozszerzenia pamięci RAM powyżej 32 GB
Wymagane oprogramowanie serwera IIS
System operacyjny (jedna z poniższych możliwości):
Windows Server 2016
Windows Server 2019
Windows Server 2022
Windows Server 2025
Dodatkowe wymagania:
IIS w wersji 7.x lub nowszej
.Net Framework 4.7.2 lub wyższa (zalecana 4.8)
IIS URL Rewrite 7.2.1993 lub większy
IIS Application Request Routing 3.0 lub większy
.Net Core Hosting Bundle 6.0.31-6.9.9
Wymagane licencje na oprogramowanie dla serwera IIS
Licencja na system operacyjny
Jeden z dostępnych rodzajów licencji:
BOX
OEM
MOLP
Licencje klienckie (dostępowe) do serwera SQL
Liczba wymaganych licencji dostępowych powinna odpowiadać ilości użytkowników lub urządzeń posiadających dostęp do serwera IIS (logujących się do Comarch BPM (dawniej DMS)). W związku z tym, w niektórych przypadkach bardziej korzystnym rozwiązaniem może okazać się zakup licencji „per Core”.
Wymagane licencje:
Uwaga
Od 14.07.2026 zostanie zakończone wsparcie dla MS SQL Server 2016.
CAL SQL Server 2016/2017/2019/2022 lub
CAL SQL Server 2016/2017/2019/2022 Runtime i
CAL Windows Server 2016/2019/2022 lub licencja External Connector (dotyczy użytkowników zewnętrznych)
Ograniczenia i uwagi
Nie można łączyć licencji na serwer z licencjami CAL w sytuacji, kiedy są one dedykowane dla różnych wersji językowych.
Zalecana konfiguracja sprzętowa serwera SQL
Zalecaną konfiguracją współpracy Comarch BPM (dawniej DMS) z serwerem MS SQL jest użycie serwera MS SQL przygotowanego dla ERP XL. W przypadku konfiguracji „Standalone” lub konfiguracji z wykorzystaniem dwóch serwerów MS SQL, zalecane wymagania sprzętowe zostały przedstawione poniżej.
Wymagany sprzęt – zalecenia minimalne:
VCPU – 8 x 2.2 GHz
RAM – 16 GB, zalecane 31 GB
HDD/SSD – 200 GB (dla 100 tys. dokumentów DMS bez załączników należy zarezerwować 3 GB + rozmiar na załączniki przy założeniu: 200 kb dla jednej strony załącznika czarno-białego, 500 kb dla jednej strony załącznika kolorowego)
Kontroler z obsługą RAID
NIC – Interfejs sieciowy 100/1000 Mb/s (w zależności od całości infrastruktury)
Wymagane oprogramowanie SQL
System operacyjny:
Windows Server 2016 Standard/Datacenter Edition
Windows Server 2019 Standard/Datacenter Edition
Windows Server 2022 Standard/Datacenter Edition
Baza danych:
Uwaga
Od 14.07.2026 zostanie zakończone wsparcie dla MS SQL Server 2016.
MS SQL 2016 Server Standard/Enterprise Edition x86/x64
MS SQL 2017 Server Standard/Enterprise Edition x86/x64
MS SQL 2019 Server Standard/Enterprise Edition x86/x64
MS SQL 2022 Server Standard/Enterprise Edition x86/x64
Uwaga
Możliwa jest również instalacja z wykorzystaniem serwera MS SQL Express. Należy pamiętać o ograniczeniach związanych z maksymalną wielkością bazy danych (max 10 GB) oraz maksymalną ilością alokowanej pamięci (max 1 GB).
Licencje:
Konieczny jest zakup licencji na: system operacyjny, serwer baz danych oraz wymaganych licencji CAL dla serwera SQL i systemu operacyjnego.
HDD/SSD – wielkość dysku zależy od ilości przechowywanych załączników. Można przyjąć założenie: 200 kB dla jednej strony załącznika czarno-białego i 500 kB dla jednej strony załącznika kolorowego.
Konieczny jest zakup licencji na: system operacyjny, licencji CAL systemu operacyjnego w przypadku
systemu Windows.
Rozwiązanie dedykowane pod jeden serwer MongoDB, zalecana ilość dokumentów to 6 mln.
Obciążenie serwera uruchomioną aplikacją BPM (dawniej DMS) w sesji terminalowej.
Obciążenie na jedną sesje terminalową z uruchomioną aplikacją Comarch BPM (dawniej DMS):
Zalecamy maksymalnie 4 zalogowanych użytkowników na rdzeń procesora
RAM -min. 1 GB na użytkownika
Licencje – Licencja dostępu terminalowego dla każdego użytkownika (cal)
Konfiguracja sprzętowa dla stacji roboczej
Wymagany sprzęt – zalecenia minimalne:
CPU – Procesory z rodziny Intel /AMD 1 GHz lub szybszy
RAM – 4 GB
Pamięć masowa – HDD lub SSD
NIC – Interfejs sieciowy 100/1000 Mb/s (w zależności od całości infrastruktury)
Ekran – 1024×768
Wymagane oprogramowanie dla stacji roboczej
System operacyjny:
Windows 10
Windows 11
.Net Framework:
4.7.2 lub wyższy (zalecany 4.8)
Wydajność systemu Comarch BPM (dawniej DMS)
Wydajność Comarch BPM (dawniej DMS) zależy w znacznym stopniu od złożoności realizowanych procesów, tj. od liczby kontrolek zdefiniowanych na karcie obiegu, wykorzystania mechanizmów inicjowania wartości kontrolek skryptami SQL i C# oraz od liczby kolumn zdefiniowanych na liście dokumentów.
Optymalnymi ilościami, które nie powinny być przekraczane to ok. 100 kontrolek na karcie obiegu i 10 dodatkowych kolumn na liście dokumentów.
Optymalna liczba dokumentów wprowadzanych do systemu to ok. 400 000 dokumentów rocznie w ramach jednego typu obiegu.
Pobieranie danych z KSeF do kontrolki tabelarycznej Elementy na Fakturze kosztowej przy współpracy z Comarch ERP Optima
Zastosowanie
Dzięki zastosowaniu tej zintegrowanej konfiguracji, proces obiegu faktur kosztowych w Comarch BPM zyskuje pełną automatyzację i spójność danych. Dane są pobierane bezpośrednio z systemu KSeF (poprzez BPM), a kontrolka tabelaryczna jest automatycznie wypełniana.
Głównym celem jest:
Eliminacja ręcznego wprowadzania pozycji dokumentów: Dane z faktury KSeF (pobrane do tabeli do.KS_DocumentItems) są automatycznie mapowane i wypełniają kontrolkę tabelaryczną na karcie obiegu.
Automatyczne kalkulowanie wartości: Kontrolka tabelaryczna uzyskuje zdolność automatycznego przeliczania wszędzie tam, gdzie zmienione zostaną dane wejściowe (np. Netto, Stawka VAT, Brutto) przez użytkownika.
Minimalizacja błędów i skrócenie czasu obsługi faktury: Proces akceptacji bazuje na poprawnych i spójnych danych, które są automatycznie kalkulowane i aktualizowane, zanim dokument zostanie zaksięgowany w Comarch ERP Optima.
Przykład jest oparty na definicji typu obiegu dostępnej na stronach walidowanych w sekcji ERP 5.0->Comarch BPM (dawniej DMS)->Przykłady->ERP Optima. Razem z przykładem udostępnione są pliki exe, które umożliwiają wygenerowanie dokumentu do Comarch ERP Optima. Aby skorzystać z tej funkcjonalności należy pobrać przykład adekwatny do wersji Comarch ERP Optima
Przykłady generatorów do Comarch ERP Optima
Zawartość przykładu
Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu Faktury kosztowej z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERP Optima
Punkt konfiguracyjny ACD: Wzorcowa konfiguracja, która jest odpowiedzialna za pobranie ID dokumentu KSeF, Załącznika oraz wszystkich kluczowych danych nagłówkowych (Numer dokumentu, Kontrahent, Data zakupu, Data wystawienia, Data wpływu Termin płatności, Forma płatności, Waluta, Wartość Netto, Wartość Brutto, Numer KSeF, Data przyjęcia z KSeF) oraz utworzenie dokumentu obiegowego.W przypadku kontrolki Kontrahent w zapytaniu przed nazwą tabeli CDN.Kontrahenci należy wskazać właściwą nazwę bazy Comarch ERP Optima.
Plik Zapytania Sql – zawiera zapytania SQL do punktu ACD oraz zapytanie do kontrolki Dane tabelaryczne (każda pozycja osobno)
Plik Zapytanie SQL – Kontrolka DT- Elementy_sumowanie po tabelce VAT – zawiera zapytanie do kontrolki Dane tabelaryczne, które sumuje pozycje po stawce VAT
Mechanizm opiera się na dwóch trybach pracy zintegrowanych w kontrolce Dane Tabelaryczne (Elementy):
Tryb Inicjowania (Pobieranie z KSeF): Wyzwalany, gdy kontrolka ID_KSeF zostanie uzupełniona. System pobiera dane z tabeli do.KS_DocumentItems z bazy BPM i łączy je ze stawkami VAT z bazy konfiguracyjnej Comarch ERP Optima.
Konfiguracja wykorzystuje ID dokumentu KSeF (zapisane w dedykowanej kontrolce typu Liczba całkowita o nazwie np. ID_KSeF) jako identyfikator do pobrania danych.
Kontrolka tabelaryczna obserwuje pole ID_KSeF, reagując na jego wypełnienie.
Kluczowym elementem jest zapytanie SQL umieszczone na zakładce Inicjowanie Wartości kontrolki tabelarycznej.
Zapytanie jest filtrowane za pomocą parametru @ID_KSeF@, dzięki czemu pobiera ono wiersze z właściwego dokumentu KSeF z tabeli do.KS_DocumentItems w bazie BPM.
Tryb Edycji (Interaktywny): Kontrolka Dane Tabelaryczne (Elementy) obserwuje sama siebie (@^SenderControlName@ = ’Elementy’), co aktywuje logikę automatycznego przeliczania wartości w trybie edycji. Pozwala to na ręczne przypisanie stawki VAT oraz przeliczenie pozostałych wartości.
Konfiguracja przykładu
1. Utworzono kontrolkę ID_KSeF: Na karcie obiegu dodano kontrolkę typu Liczba całkowita o nazwie (identyfikatorze) ID_KSeF, do której będzie zapisywane ID dokumentu KSeF.
Kontrolka Liczba całkowita ID_KSeF
2.Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy i skonfigurowano w niej następujące kolumny:
”Kategoria” (identyfikator kolumny: Kategoria) – typ Lista
”Opis” (identyfikator kolumny: Opis) – typ Tekst
”Kategoria2” (identyfikator kolumny: Kategoria2) – typ Lista
”Opis2” (identyfikator kolumny: Opis2) – typ Tekst
”Stawka” (identyfikator kolumny: Stawka) – typ Lista
”Netto” (identyfikator kolumny: Netto) – typ Liczba stałoprzecinkowa
”VAT” (identyfikator kolumny: VAT) – typ Liczba stałoprzecinkowa
”Brutto” (identyfikator kolumny: Brutto) – typ Liczba stałoprzecinkowa
”Rodzaj” (identyfikator kolumny: Rodzaj) – typ Lista
”Odliczenia” (identyfikator kolumny: Odliczenia) – typ Lista
Kolumny w kontrolce Dane tabelaryczne
3. W kontrolce typu Dane tabelaryczne na zakładce Listy zdefiniowano zapytania pobierające dane:
Kategoria:
select Kat_KatID, Kat_KodSzczegol--, (select top 1 Kat_KatID from cdn.Kategorie order by 1)
from cdn.Kategorie where Kat_Typ=1
Stawka VAT:
SELECT Kon_KonId,
CASE
WHEN Kon_Opis='Stawka zwolniona' THEN 'ZW'
WHEN Kon_Opis='Nie podlega Vat' THEN 'NP'
WHEN Kon_Opis<>'Stawka zwolniona' and Kon_Opis<>'Nie podlega Vat' THEN CONCAT(LEFT(Kon_wartosc,6),' %')
END
FROM CDN_KNF_Konfiguracja.cdn.Konfig /* <<<<- Tu podmiana nazwy bazy>>>> */
where Kon_Numer=301 and Kon_wartosc like '%PL'
Rodzaj:
SELECT 1, 'Towary'
UNION
SELECT 2,'Inne'
UNION
SELECT 3,'Środki trwałe'
UNION
SELECT 4,'Usługi'
UNION
SELECT 5,'Środki transportu'
UNION
SELECT 6,'Nieruchomości'
UNION
SELECT 7,'Paliwo'
Odliczenia:
select 1, 'Nie'
union
select 2, 'Tak'
union
select 3, 'Warunkowo'
4.Dodano obserwację kontrolki: W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do kontrolki ID_KSeF oraz do samej siebie.
Dane tabelaryczna, zakładka Inicjowanie wartości
5.Dodano zapytanie SQL:W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Wzór na wartość SQL ERP dodano zapytanie, które pobiera dane z tabeli do.KS_DocumentItems na podstawie przekazanego parametru @ID_KSeF@ (ID dokumentu KSeF).
Uwaga
W zapytaniu przed nazwą tabeli do.KS_DocumentItems należy wskazać właściwą nazwę bazy Comarch BPM
Ta sekcja jest wywoływana tylko raz, podczas inicjowania obiegu:
Pierwsza sekcja zapytania SQL, rozpoczynająca się od bloku IF @^SenderControlName@ = 'ID_KSeF’ pobiera dane szczegółowe pozycji faktury z KSeF, standaryzuje identyfikatory stawek VAT i mapuje je na wartości procentowe z konfiguracji Comarch ERP Optima. Zapytanie to wypełnia kolumny z kwotami Netto/VAT/Brutto i ustala poprawną Stawkę procentową, jednocześnie inicjując kolumny (Kategoria, Opis)wartością NULL, ponieważ te dane muszą być uzupełnione ręcznie.
IF @^SenderControlName@ = 'ID_KSeF'
BEGIN
WITH RawKSeF AS (
/* Pobranie danych z tabeli KSeF */
SELECT
di.KSI_DocumentId,
CAST(ISNULL(di.KSI_ElementWartoscNetto, 0) AS DECIMAL(18,2)) AS Netto_Src,
CAST(ISNULL(di.KSI_ElementWartoscBrutto, 0) AS DECIMAL(18,2)) AS Brutto_Src,
CASE
WHEN di.KSI_ElementStawkaVAT LIKE '%zw%' OR di.KSI_ElementStawkaVAT LIKE '%zwolnione%' THEN 'ZW'
WHEN di.KSI_ElementStawkaVAT LIKE '%np%' THEN 'NP'
WHEN di.KSI_ElementStawkaVAT LIKE '%oo%' THEN 'OO'
WHEN di.KSI_ElementStawkaVAT LIKE '%23%' THEN '23'
WHEN di.KSI_ElementStawkaVAT LIKE '%22%' THEN '22'
WHEN di.KSI_ElementStawkaVAT LIKE '%8%' THEN '8'
WHEN di.KSI_ElementStawkaVAT LIKE '%5%' THEN '5'
WHEN di.KSI_ElementStawkaVAT LIKE '%0%' THEN '0'
ELSE '23'
END AS StandardizedKSeFVAT_Text
FROM [BazaBPM].do.KS_DocumentItems AS di
WHERE di.KSI_DocumentId = @ID_KSeF@
),
OptimaVATRates AS (
/* Mapowanie stawek z konfiguracji Optimy */
SELECT
MAX(Kon_KonId) AS Kon_KonId,
StandardizedOptimaVAT_Text,
MAX(StawkaVatValue) AS StawkaVatValue
FROM (
SELECT
Kon_KonId,
ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) AS StawkaVatValue,
CASE
WHEN Kon_Opis = 'Stawka zwolniona' OR Kon_Wartosc LIKE '%ZW%' THEN 'ZW'
WHEN Kon_Opis = 'Nie podlega Vat' OR Kon_Wartosc LIKE '%NP%' THEN 'NP'
WHEN Kon_Opis = 'Odwrotne obciążenie' OR Kon_Wartosc LIKE '%OO%' THEN 'OO'
ELSE CAST(CAST(ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) AS INT) AS VARCHAR(10))
END AS StandardizedOptimaVAT_Text
FROM [CDN_KNF_Konfiguracja].cdn.Konfig
WHERE Kon_Numer = 301 AND Kon_Wartosc LIKE '%PL'
) sub
GROUP BY StandardizedOptimaVAT_Text
)
/* Wynik końcowy dla trybu KSeF */
SELECT
CAST(NULL AS INT) AS [Kategoria],
CAST(NULL AS VARCHAR(255)) AS [Opis],
CAST(NULL AS INT) AS [Kategoria 2],
CAST(NULL AS VARCHAR(255)) AS [Opis 2],
CAST(o.Kon_KonId AS INT) AS [Stawka],
-- Wyliczenie NETTO (obsługa od netto i od brutto)
CAST(CASE
WHEN r.Netto_Src <> 0 THEN r.Netto_Src
ELSE r.Brutto_Src / (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0))
END AS DECIMAL(18, 2)) AS [Netto],
-- Wyliczenie VAT na podstawie STAWKI (naprawa błędu dublowania netto)
CAST(CASE
WHEN r.StandardizedKSeFVAT_Text IN ('ZW', 'NP', '0', 'OO') THEN 0.00
ELSE
(CASE WHEN r.Netto_Src <> 0 THEN r.Netto_Src ELSE r.Brutto_Src / (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0)) END)
* (ISNULL(o.StawkaVatValue, 0) / 100.0)
END AS DECIMAL(18, 2)) AS [VAT],
-- Wyliczenie BRUTTO
CAST(CASE
WHEN r.Brutto_Src <> 0 THEN r.Brutto_Src
ELSE r.Netto_Src * (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0))
END AS DECIMAL(18, 2)) AS [Brutto],
CAST(1 AS INT) AS [Rodzaj],
CAST(1 AS INT) AS [Odliczenia]
FROM RawKSeF r
LEFT JOIN OptimaVATRates o ON r.StandardizedKSeFVAT_Text = o.StandardizedOptimaVAT_Text
END
Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji KSeF:
Druga sekcja zapytania SQL, rozpoczynająca się od bloku ELSE IF @^SenderControlName@ = 'Elementy’, jest odpowiedzialna za całą logikę przeliczania, walidacji i uzupełniania danych w czasie rzeczywistym po ręcznej edycji wiersza w kontrolce Dane Tabelaryczne. Ponieważ kontrolka Elementy obserwuje sama siebie, każda zmiana w kolumnie wyzwala ten kod.
/*Przeliczanie Elementów*/
ELSE
IF @^SenderControlName@ = 'Elementy'
BEGIN
declare @stawkaVat real
IF @Elementy_Column@=1 /* Inicjowanie pozycji wiersza po wskazaniu kategorii */
BEGIN
UPDATE @Elementy@ set [Opis]= (SELECT Kat_opis from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) WHERE POS=@Elementy_Row@
UPDATE @Elementy@ set [Stawka] = (
select Kon_KonId from
(
select Kon_KonId, flaga, stawka from
(
select Kon_KonId, cast (SUBSTRING (Kon_Wartosc, 7, 1) as int) flaga, cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0, charindex (' ', Kon_Wartosc , 2))),',','.') as real) stawka
from CDN_KNF_Konfiguracja.cdn.Konfig /* <<<<--------------- Tu podmiana nazwy bazy >>>> */
where kon_numer = 301 and Kon_wartosc like '%PL'
) insel1
join cdn.Kategorie on kat_stawka = stawka and kat_flaga = flaga and kat_katid = (SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)
) insel2
) where POS=@Elementy_Row@
UPDATE @Elementy@ set [Rodzaj]=(SELECT Kat_RodzajZakupu from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) where POS=@Elementy_Row@
UPDATE @Elementy@ set [Odliczenia]=(SELECT Kat_Odliczenia+1 from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) where POS=@Elementy_Row@
END
ELSE IF @Elementy_Column@=3
BEGIN
UPDATE @Elementy@ set [Opis2]= (SELECT Kat_opis from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria2] from @Elementy@ where POS=@Elementy_Row@)) WHERE POS=@Elementy_Row@
END
IF @Elementy_Column@=5 or @Elementy_Column@=6 /* Przeliczenie Brutto i wartości VAT po zmianie stawki VAT lub Netto */
BEGIN
declare @Netto decimal (22,4)
SELECT @Netto = [Netto] from @Elementy@ where POS=@Elementy_Row@
select @stawkaVat = isnull (cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0, charindex (' ', Kon_Wartosc , 2))),',','.') as real) , 1)
from CDN_KNF_Konfiguracja.cdn.Konfig /* <<<<--------------- Tu podmiana nazwy bazy >>>> */
where kon_numer = 301 and Kon_KonId = (select [Stawka] from @Elementy@ where POS=@Elementy_Row@) and Kon_wartosc like '%PL'
UPDATE @Elementy@ set [Brutto]= @Netto + (@Netto * (@stawkaVat / 100)) where POS=@Elementy_Row@
UPDATE @Elementy@ set [VAT]= @Netto * (@stawkaVat / 100) where POS=@Elementy_Row@
END
IF @Elementy_Column@=5 or @Elementy_Column@=8 /* Przeliczenie Netto i wartości VAT po zmianie stawki VAT lub Brutto */
BEGIN
declare @Brutto decimal (22,4)
SELECT @Brutto = [Brutto] from @Elementy@ where POS=@Elementy_Row@
select @stawkaVat = isnull (cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0, charindex (' ', Kon_Wartosc , 2))),',','.') as real) , 1)
from CDN_KNF_Konfiguracja.cdn.Konfig /* <<<<--------------- Tu podmiana nazwy bazy >>>> */
where kon_numer = 301 and Kon_KonId = (select [Stawka] from @Elementy@ where POS=@Elementy_Row@) and Kon_wartosc like '%PL'
UPDATE @Elementy@ set [Netto]= @Brutto / ((@stawkaVat/100) + 1) where POS=@Elementy_Row@
UPDATE @Elementy@ set [VAT]= @Brutto / ((@stawkaVat/100) + 1) * (@stawkaVat / 100) where POS=@Elementy_Row@
END
SELECT * from @Elementy@
END
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
Konfiguracja punktu ACD
1. W punkcie konfiguracyjnym ACD (Import dokumentów zakupu KSeF), na zakładce Lista dodano zapytanie, które pobiera pobiera listę faktur z tabel do.KS_Documents, do.KS_WorkAPProcess, do.KS_DocumentHeaders i do.KS_DocumentContractors, filtrując je m.in. po statusie przetworzenia (KSW_Status), operatorze, numerze faktury (KSD_NumerFaktury), NIP, dacie wystawienia (KSH_DataWytworzeniaFa), typie faktury i kwotach.
BEGIN TRY
select d.KSD_ID, NULL, KSD_NumerFaktury, KSD_Tag1, KSD_Tag2, KSD_Tag3
from do.KS_Documents d
left join do.KS_WorkAPProcess W on d.KSD_ID = KSW_DocumentID /*tabela przeprocesowanych dokumentów*/
left join do.KS_DocumentHeaders dh on d.KSD_ID = dh.KSH_DocumentId
left join do.KS_DocumentContractors dc on d.KSD_ID = dc.KSC_DocumentID
where KSW_APDId=@PointId@ /*id punktu ACD */
and KSW_OperatorID=@IdOperatorBPM@ /*dodatkowy warunek, aby na liście operator widział dokumenty przeprocesowane przez siebie*/
and ((@InvoiceStatus@ = 0 and KSW_Status <> 5 and KSW_Archival = 0) OR (@InvoiceStatus@ = 1 and KSW_Archival = 1) OR
(@InvoiceStatus@ = 2 and KSW_Status = 5) OR @InvoiceStatus@ = 3)
and (nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury LIKE '%' + @SearchText@ + '%'))
and (@Nip@ is null OR dc.KSC_PodatnikNIP = @Nip@)
and (@DateFrom@ is null or dh.KSH_DataWytworzeniaFa >= @DateFrom@)
and (@DateTo@ is null or dh.KSH_DataWytworzeniaFa <= @DateTo@)
and (@GrossAmountFrom@ is null or KSD_SumaBrutto >= @GrossAmountFrom@)
and (@GrossAmountTo@ is null or KSD_SumaBrutto <= @GrossAmountTo@)
and (@InvoiceType@ is null or KSD_RodzajFaktury = @InvoiceType@)
END TRY
BEGIN CATCH
DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE();
THROW 50001, @ErrorMessage ,1;
END CATCH
2. W zakładce Kontrolki dodano kontrolkę ID_KSeF, której przypisano zapytanie pobierające identyfikator dokumentu KSEF. Jednocześnie zdefiniowano odpowiednie zapytania SQL dla pozostałych kontrolek, które służą do automatycznego pobierania i wyświetlania danych bezpośrednio z systemu KSeF:
Załączniki
select KSD_SourceContent,CASEWHEN KSD_NumerFaktury LIKE '%/%'
THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.pdf')ELSE CONCAT(KSD_NumerFaktury, '.pdf')END AS modified_columnfrom do.KS_Documentswhere KSD_ID=@Id1@
Załącznik XML
select KSD_Xml,CASEWHEN KSD_NumerFaktury LIKE '%/%'
THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.xml')ELSE CONCAT(KSD_NumerFaktury, '.xml')END AS modified_columnfrom do.KS_Documentswhere KSD_ID=@Id1@
Dokument
select KSD_NumerFaktury from do.KS_Documents where KSD_ID=@Id1@
Kontrahent
select top 1 Knt_KntId, Knt_Kod
from [do].[KS_DocumentContractors]
join [CDN_Optima].[cdn].[Kontrahenci] on Knt_Nip = KSC_PodatnikNIP
where KSC_DocumentId=@Id1@
Data zakupu
SELECT CASE
WHEN KSD_DataDostawy IS NULL THEN KSD_DataWystawienia
ELSE KSD_DataDostawy
END
FROM do.KS_Documents WHERE KSD_ID=@id1@
Data wpływu
select KSH_DataWytworzeniaFa from do.KS_DocumentHeaders where KSH_DocumentID=@Id1@
Data wystawienia
select KSD_DataWystawienia from do.KS_Documents where KSD_ID=@Id1@
Forma płatności
SELECT
(
CASE
WHEN KSD_FormaPlatnosci = 1 THEN 'Gotówka'
WHEN KSD_FormaPlatnosci = 2 THEN 'Karta'
WHEN KSD_FormaPlatnosci = 3 THEN 'Bon'
WHEN KSD_FormaPlatnosci = 4 THEN 'Czek'
WHEN KSD_FormaPlatnosci = 5 THEN 'Kredyt'
WHEN KSD_FormaPlatnosci = 6 THEN 'Przelew'
WHEN KSD_FormaPlatnosci = 7 THEN 'Płatność Mobilna'
ELSE 'Inna'
END
) AS FormaPlatnosci
FROM
do.KS_DocumentsWHERE KSD_Id=@ID1@
Termin płatności
select KSP_TerminPlatnosci from do.KS_PaymentDates where KSP_DocumentID=@Id1@
Numer KSeF
select KSH_NumerReferencyjnyKSeF
from do.KS_DocumentHeaderswhere KSH_DocumentID=@Id1@
Waluta
select KSD_KodWaluty from do.KS_Documents where KSD_ID=@Id1@
IDKSeF
select @Id1@
Data przyjęcia KSeF
select KSH_DataWytworzeniaFa from do.KS_DocumentHeaders where KSH_DocumentID=@Id1@
Numer rachunku bankowego
select KSB_NrRachunku from do.KS_BankAccounts
join do.KS_Documents on ksb_documentId= KSD_Id where ksd_id=@Id1@
Kontrolka ID_KSeF w punkcie ACD
Uzupełnione dane w punkcie ACD
Po pomyślnym pobraniu dokumentu z KSeF w punkcie ACD (Import dokumentów zakupu z KSeF), dane nagłówkowe oraz identyfikator dokumentu uzupełniły się automatycznie w kontrolkach na podstawie danych odczytanych z pliku XML.
Dane pobrane z KSeF w punkcie ACD
Uzupełniona Kontrolka Dane Tabelaryczne
Na podstawie przetworzonych danych z KSeF, w systemie Comarch BPM są generowane dokumenty w ramach wskazanej definicji typu obiegu.
Po pomyślnym zainicjowaniu nagłówka dokumentu, system dokonuje pełnego uzupełnienia skonfigurowanych kontrolekna karcie obiegu.
Kontrolka typu Dane Tabelaryczne zostaje automatycznie wypełniona pozycjami odczytanymi z dokumentu. Wypełnienie to odbywa się z wykorzystaniem dedykowanego zapytania SQL, które dokonuje normalizacji stawek VAT oraz przeliczeń kwot (Netto/Brutto).
Kluczowe jest to, że kontrolka techniczna ID_KSeF (która przechowuje wewnętrzny identyfikator pobranego dokumentu KSeF) jest obserwowana przez kontrolkę Dane Tabelaryczne i na podstawie jej wartości (@ID_KSeF@w zapytaniu SQL) kontrolka Danych Tabelarycznych jest uzupełniana danymi.
Uwaga
Kolumny Kategoria oraz Kategoria 2 w kontrolce dane tabelaryczne są inicjowane wartością null. Wynika to z faktu, że nazewnictwo pozycji na fakturach dostawców w systemie KSeF często nie jest tożsame z nazewnictwem w Comarch ERP Optima. Wymaga to od użytkownika świadomego, ręcznego przypisania odpowiedniej kategorii oraz kategorii pomocniczej (jeżeli jest taka potrzeba) przed zaksięgowaniem dokumentu, aby zapewnić poprawność analityczną zapisów.
Kontrolka Dane tabelaryczne uzupełniona pozycjami odczytanymi z KSeF
Pozostałe dane uzupełnione na karcie obiegu
Po pomyślnym zainicjowaniu dokumentu z poziomu ACD, pozostałe dane na karcie obiegu zostały prawidłowo uzupełnione. System automatycznie przypisał nie tylko dane podstawowe, takie jak numer dokumentu, czy dane kontrahenta, ale również precyzyjnie rozbił pozycje faktury na poszczególne stawki VAT (23% oraz 8%). Prawidłowo przeniesiono także numer rachunku bankowego oraz unikalny numer KSeF, co gwarantuje pełną spójność danych między obiegiem dokumentów, a systemem Comarch ERP Optima.
Uzupełnione dane na karcie obiegu pobrane z KSeF
Rozpoczynasz pracę z Comarch BPM (dawniej DMS) i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch BPM (dawniej DMS) i chcesz dowiedzieć się więcej?
Dodanie okna „O programie Comarch BPM” w aplikacji desktop, strony „Pomoc” w aplikacji webowej i podstrony „O programie” w aplikacjach mobilnych
W wersji 2026.1.0 wprowadzono ujednolicone okno o programie Comarch BPM, którego celem jest przejrzysta prezentacja kluczowych informacji o systemie Comarch BPM oraz ułatwienie dostępu do wsparcia technicznego na wszystkich platformach: desktop, web oraz w aplikacjach mobilnych (Android i iOS).
Zmiany w aplikacji desktop
W aplikacji desktop na ekranie głównym, w zakładce [Strona startowa] dodano nowy kafelek „O programie Comarch BPM”. Kafelek zajmuje szerokość wszystkich pozostałych kafelków łącznie i znajduje się w dolnej części okna. Zastępuje dotychczasowy element „O aplikacji”, którego miejsce w oknie zajął kafelek „Obsługa KSeF w Comarch BPM”. Kafelek jest dostępny wyłącznie dla operatorów posiadających uprawnienia administratora.
Widok zakładki „Strona startowa“ z kafelkiem „O programie Comarch BPM“ w aplikacji desktop Comarch BPM
Po kliknięciu kafelka „O programie Comarch BPM“ otwierane jest okno zawierające:
logo i nazwę systemu,
numer wersji
typ posiadanej licencji (np. BPM, Premium, +Repozytorium oraz warianty dla systemów ERP: XL, Optima, Enterprise, Altum) .
pełny numer kompilacji w formacie AAAA.B.C.DD gdzie:
AAAA.B – odpowiada pełnej wersji systemu (np. 2026.1),
C – oznacza poprawkę typu Hotfix (HF – np. 2026.1.1),
DD – to numer kompilacji programu.
Okno wyposażone jest w przyciski minimalizacji i zamknięcia.
Widok nowego okna „O programie” w aplikacji desktop Comarch BPM
Zmiany w aplikacji web
W prawym górnym rogu interfejsu aplikacji webowej, na pasku na lewo od ikony Chata ERP udostępniono ikonę pomocy , dostępną z każdego poziomu aplikacji web. Kliknięcie w ikonę wywołuje okno „Pomoc”, składające się z czterech obszarów:
Informacje o oprogramowaniu – sekcja widoczna wyłącznie dla administratorów, prezentująca dane o wersji i licencji.
Przewodnik po Comarch BPM – zawiera kontekstowe odnośniki do portalu pomocy Comarch (pomoc.comarch.pl), automatycznie dopasowane do typu spółki (Standalone, XL, Optima, CEE, Altum). W ramach tego obszaru użytkownik ma dostęp do następujących kategorii odnośników:
Filmy instruktażowe,
Lista gotowych definicji procesów (przykłady definicji),
Dokumentacja (baza wiedzy),
Nowości i zmiany (informacje o zmianach wprowadzonych w poprzednich wersjach oraz w bieżącej wersji);
Nie możesz znaleźć odpowiedzi, której szukasz? – zawiera odnośniki do portalu pomocy Comarch (pomoc.comarch.pl). W ramach tego obszaru użytkownik ma dostęp do następujących kategorii odnośników:
Najczęściej zadawane pytania (FAQ),
Społeczność Comarch,
Kontakt;
Dowiedz się więcej – zawiera odnośnik do strony https://www.comarch.pl/szkolenia. W ramach tego obszaru użytkownik ma dostęp do następującej kategorii odnośnika:
Szkolenia.
Jeśli operator wywoła pomoc podczas edycji dokumentu, system wyświetli ostrzeżenie o ryzyku utraty danych „Czy zapisać zmiany?” (analogiczne jak przy próbie zamknięcia okna bez zapisu) .
Zamknięcie okna przyciskiem powrotu obok nazwy okna „Pomoc” przywraca użytkownika do ostatniego miejsca pracy (np. widoku kalendarza). Wybranie zakładki w bocznym menu zamyka okno pomocy i przenosi użytkownika do wybranej lokalizacji.
Widok strony startowej z ikoną pomocy w aplikacji web Comarch BPM
Widok okna „Pomoc“ w aplikacji web Comarch BPM dla administratora
Widok okna „Pomoc“ w aplikacji web Comarch BPM dla użytkownika niebędącego administratorem
Zmiany w aplikacjach mobilnych (Android i iOS)
W ramach zakładki „Konto” dodano nową podstronę „O programie”. W przypadku aplikacji na system Android podstrona „O programie” zawiera dodatkowy opis: „Wyświetl informacje dotyczące aplikacji Comarch BPM”. W ramach podstrony prezentowane są następujące dane:
wersja i data wydania aplikacji mobilnej,
wersja i data wydania powiązanej aplikacji serwerowej Comarch BPM,
typ licencji
Widoczność podstrony jest ograniczona do użytkowników z uprawnieniami administratora.
Widok opcji „O programie” na zakładce „Konto“ w aplikacji na Android
Podstrona „O programie” w aplikacji na Android
Widok opcji „O programie” na zakładce „Konto“ w aplikacji na iOS