Konfiguracja współpracy Comarch BPM z KSeF
Współpracę Comarch BPM z KSeF można skonfigurować zarówno w trybie jednospółkowym, jak i w trybie wielospółkowym.
Aby skonfigurować współpracę Comarch BPM z KSeF, należy:
- dla trybu jednospółkowego: na zakładce Ustawienia -> zakładka Integracje:
1. w ramach pola „Nip firmy” wprowadzić NIP firmy, dla której ma odbywać się współpraca z KSeF
2. w ramach pola „Token KSeF” wprowadzić token uwierzytelniający w KSeF.
Klucz może przybierać jedną z następujących wartości: 1.Demo – wartość domyślna; w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Demo; 2.Production – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Produkcyjnym, czyli wersji produkcyjnej systemu; 3.Test – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie testowym. W kwestii różnic pomiędzy powyższymi trybami zob. Przełączanie trybu pracy z KSeF
W wersji 2024.0.1 w pliku Web.config w folderze aplikacji serwerowej (dawnej web) dodano klucz add key=”KSeFWorkMode” value=”Demo” /> – klucz umożliwia określenie, czy Firma testuje funkcjonalność wysyłania faktur do KSeF, czy korzysta z niej produkcyjnie.
Istnieje możliwość wygenerowania tokenu KSeF z poziomu Comarch BPM (dawniej DMS). W tym celu należy kliknąć w link
[Wygeneruj token] znajdujący się obok pola „Token KSeF”, a następnie w oknie „Wybierz certyfikat” wybrać odpowiedni certyfikat uwierzytelniający.
Po wyborze certyfikatu zostanie wygenerowany token KSeF, który zostanie automatycznie wprowadzony w ramach pola „Token KSeF”.
Wprowadzone zmiany należy zapisać za pomocą przycisku
[Zapisz], dostępnego w ramach sekcji.



Aby wygenerować token uwierzytelniający, należy najpierw uzupełnić pole „NIP Firmy”.
Jeżeli użytkownik nie uzupełni pola „NIP Firmy” i naciśnie link
[Wygeneruj token], wówczas zostanie wyświetlony następujący komunikat.

Jeżeli operator pracuje w trybie testowym współpracy z KSeF 2.0 (w Comarch BPM dostępnym od wersji 2025.2.3), wówczas może: gdzie: cert-20251104-102647.pfx to plik wygenerowany zgodnie z instrukcją ze strony https://github.com/CIRFMF/ksef-docs/blob/main/auth/testowe-certyfikaty-i-podpisy-xades.md Zaimportowany w ten sposób certyfikat (prawdopodobnie o nazwie A R) należy następnie wybrać w ramach okna wyświetlanego po kliknięciu w przycisk
certutil -user -p "" -csp "Microsoft Enhanced Cryptographic Provider v1.0" -importpfx "C:\WINDOWS\system32\ksef-client-csharp\KSeF.Client.Tests.CertTestApp\cert-20251104-102647.pfx"
[Wygeneruj token]. Wówczas w polu „Token KSeF” zostanie wprowadzony token. Wprowadzone zmiany powinny zostac zapisane.
Po ukończeniu konfiguracji należy przejść do konfiguracji punktu ACD współpracującego z KSeF (zob. Definiowanie punktu konfiguracyjnego (Import dokumentów zakupu z KSeF))
- dla trybu wielospółkowego: na zakładce Ustawienia -> zakładka Połączenia z ERP -> ustawienia odpowiedniej spółki:
1. w ramach pola „Nip firmy” należy wprowadzić NIP firmy, dla której ma odbywać się współpraca z KSeF
2. w ramach pola „Token KSeF” należy wprowadzić token uwierzytelniający w KSeF.
Klucz może przybierać jedną z następujących wartości: 1.Demo – wartość domyślna; w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Demo; 2.Production – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Produkcyjnym, czyli wersji produkcyjnej systemu; 3.Test – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie testowym. W kwestii różnic pomiędzy powyższymi trybami zob. Przełączanie trybu pracy z KSeF
W wersji 2024.0.1 w pliku Web.config w folderze aplikacji serwerowej (dawnej web) dodano klucz add key=”KSeFWorkMode” value=”Demo” /> – klucz umożliwia określenie, czy Firma testuje funkcjonalność wysyłania faktur do KSeF, czy korzysta z niej produkcyjnie.

Istnieje możliwość wygenerowania tokenu KSeF z poziomu Comarch BPM (dawniej DMS). W tym celu należy kliknąć w link
[Wygeneruj token] znajdujący się obok pola „Token KSeF”, a następnie w oknie „Wybierz certyfikat” wybrać odpowiedni certyfikat uwierzytelniający.
Po wyborze certyfikatu zostanie wygenerowany token KSeF, który zostanie automatycznie wprowadzony w ramach pola „Token KSeF”.
Wprowadzone zmiany należy zapisać za pomocą przycisku
[Zapisz], dostępnego w ramach sekcji.
Aby wygenerować token uwierzytelniający, należy najpierw uzupełnić pole „NIP Firmy”.
Jeżeli użytkownik nie uzupełni pola „NIP Firmy” i naciśnie link
[Wygeneruj token], wówczas zostanie wyświetlony następujący komunikat.

Jeżeli operator pracuje w trybie testowym współpracy z KSeF 2.0 (w Comarch BPM dostępnym od wersji 2025.2.3), wówczas może: gdzie: cert-20251104-102647.pfx to plik wygenerowany zgodnie z instrukcją ze strony https://github.com/CIRFMF/ksef-docs/blob/main/auth/testowe-certyfikaty-i-podpisy-xades.md Zaimportowany w ten sposób certyfikat (prawdopodobnie o nazwie A R) należy następnie wybrać w ramach okna wyświetlanego po kliknięciu w przycisk lub
certutil -user -p "" -csp "Microsoft Enhanced Cryptographic Provider v1.0" -importpfx "C:\WINDOWS\system32\ksef-client-csharp\KSeF.Client.Tests.CertTestApp\cert-20251104-102647.pfx"
[Wygeneruj token]. Wówczas w polu „Token KSeF” zostanie wprowadzony token. Wprowadzone zmiany powinny zostac zapisane.
Po ukończeniu konfiguracji należy przejść do konfiguracji punktu ACD współpracującego z KSeF (zob. Definiowanie punktu konfiguracyjnego (Import dokumentów zakupu z KSeF))

Definiowanie punktu konfiguracyjnego (Import dokumentów zakupu z KSeF)
W wersji 2024.0.0 został dodany nowy typ punktu ACD, który służy do współpracy z KSeF – „Import dokumentów zakupu z KSeF”.
Klucz może przybierać jedną z następujących wartości: 1.Demo – wartość domyślna; w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Demo; 2.Production – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Produkcyjnym, czyli wersji produkcyjnej systemu; 3.Test – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie testowym. W kwestii różnic pomiędzy powyższymi trybami zob. Przełączanie trybu pracy z KSeF
W wersji 2024.0.1 w pliku Web.config w folderze aplikacji serwerowej (dawnej web) dodano klucz add key=”KSeFWorkMode” value=”Demo” /> – klucz umozliwia określenie, czy Firma testuje funkcjonalność wysyłania faktur do KSeF, czy korzysta z niej produkcyjnie.
Zakładka Tryb współpracy
Aby utworzyć punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF” należy w oknie „Automatyczne generowanie dokumentów” dodać nowy punkt konfiguracyjny za pomocą ikony
, a następnie na liście trybów pracy punktu wybrać opcję „Import dokumentów zakupu z KSeF” .

Zakładka Ogólne
Wygląd zakładki „Ogólne” jest zależny od trybu pracy Comarch BPM (dawniej DMS).
W trybie jednospółkowym na zakładce należy w ramach pola:
- Nazwa punktu – określić nazwę pod jaką punkt konfiguracyjny będzie widoczny na liście punktów;
- Typ obiegu – wskazać typ obiegu, w ramach którego będą generowane dokumenty zawierające dane z KSeF.
Jeżeli Comarch BPM (dawniej DMS) pracuje w trybie jednospółkowym, wówczas komunikacja z KSeF odbywa się na podstawie danych (numeru NIP firmy oraz tokena uwierzytelniającego), które zostały podane w ramach zakładki „KSeF” na zakładce
[Ustawienia].(zob. Integracje (dawna zakładka „KSeF”)).

W trybie wielospółkowym na zakładce należy w ramach pola:
- Nazwa punktu – określić nazwę pod jaką punkt konfiguracyjny będzie widoczny na liście punktów;
- Spółka – wskazać spółkę, dla której będzie odbywać się komunikacja z KSeF – na podstawie numeru NIP oraz/albo tokenu, które zostały zapisane podczas konfiguracji danej spółki na zakładce „Połączenia z ERP” na zakładce
[Ustawienia].(zob. Połączenia z ERP). Zapytania, które są wprowadzane na zakładkach „Lista” oraz „Kontrolki” również są wykonywane w kontekście bazy danej spółki; - Typ obiegu – wskazać typ obiegu, w ramach którego będą generowane dokumenty zawierające dane z KSEF.

W wersji 2025.0.0 na zakładce „Ogólne” na punkcie konfiguracyjnym punktu ACD typu „Import dokumentów zakupu z KSeF” dodano pole „Nazwy atrybutów na liście dokumentów w punkcie ACD”, w ramach którego dostępne są pola: „Atrybut 1”, Atrybut 2” i „Atrybut 3”. Nowo dodane pola umożliwiają wprowadzenie dodatkowych informacji opisujących daną fakturę, co pozwala na bardziej szczegółową identyfikację i klasyfikację dokumentów w procesie ich przetwarzania.
W ramach pól „Atrybut 1”, „Atrybut 2” i „Atrybut 3” można zdefiniować maksymalnie 3 nazwy dodatkowych pól (atrybutów), które będą widoczne na liście dokumentów w punkcie ACD jako nazwy kolumn.
Informacje o nazwach atrybutów/kolumn są dostępne w tabeli do.DF_ConfAPDictionary.
Jeśli uprawniony operator nie wprowadzi żadnej nazwy atrybutu, wówczas kolumny z atrybutami nie zostaną utworzone, a na liście dokumentów będzie widoczna tylko jedna kolumna „Dokument”.
Jeżeli operator wprowadzi wartość w jednym z dodatkowych pól (atrybutów), wówczas na liście będzie widoczna jedna dodatkowa kolumna z taką nazwą, jaką wprowadzono w polu; analogicznie, jeśli uzupełniono dwa pola, będą widoczne dwie dodatkowe kolumny.

Zakładka Lista
Na zakładce „Lista”, analogicznie do pozostałych trybów pracy punktów konfiguracyjnych, należy za pomocą zapytania SQL określić listę dokumentów, która będzie wyświetlana w oknie ACD po pobraniu plików z KSeF.
Zapytanie SQL wprowadzone na zakładce „Lista” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” jest odmienne od zapytań SQL dla innych typów punktów ACD, różni się także od zapytania SQL dotychczas wprowadzanego w ramach punktu ACD typu „Import dokumentów zakupu z KSeF”.
Przykład zapytania wyświetlającego listę dokumentów.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

Można wprowadzić alternatywne wersje zapytania – w takim przypadku, jeśli wyszukiwanie na liście w punkcie ACD ma uwzględniać wszystkie dane, jakie są na niej widoczne, należy analogicznie zmodyfikować także warunki wyszukiwania – np. tak jak w poniższym przykładzie.
BEGIN TRY
SELECT d.KSD_Id, NULL, KSD_NumerFaktury + ' | ' + CONVERT(varchar, KSD_Datawystawienia, 104) + ' | ' + KSC_PodatnikNazwa + ' | ' + KSC_PodatnikNIP, 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 + ' | ' +CONVERT(varchar, KSD_Datawystawienia, 104) + ' | ' + KSC_PodatnikNazwa + ' | ' + KSC_PodatnikNIP LIKE '%' + @SearchText@ + '%'))
OR (@SearchText@ <> '' and KSD_Tag1 LIKE '%' + @SearchText@ + '%')
OR (@SearchText@ <> '' and KSD_Tag2 LIKE '%' + @SearchText@ + '%')
OR (@SearchText@ <> '' and KSD_Tag3 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


Zakładka Kontrolki
Na zakładce „Kontrolki” za pomocą zapytań SQL należy wskazać wartości, które będą wyświetlane w poszczególnych kontrolkach po pobraniu dokumentów z KSeF.
Przykłady zapytań SQL dla faktur pobranych z KSeF są dostępne w artykule: Przykłady zapytań SQL w zakładce Kontrolki dla punktu ACD „Import dokumentów zakupu z KSeF”
Od wersji 2024.3.0 operator może dodawać plik pdf z dokumentem KSeF do kontrolki typu Załącznik. W tym celu powinien w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” wykonać kolejno następujące czynności:
- na zakładce „Ogólne” w polu „Typ obiegu” wybrać typ obiegu, w ramach którego znajduje się kontrolka typu Załącznik;
- na zakładce „Kontrolki” wybrać kontrolkę typu Załącznik i w ramach pola po prawej stronie okna wprowadzić zapytanie SQL – w poniższym przykładzie nazwą pliku będzie nazwa faktury:
Select KSD_SourceContent, CASE WHEN KSD_NumerFaktury LIKE '%/%' THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.pdf') ELSE CONCAT(KSD_NumerFaktury, '.pdf') END AS modified_column from do.KS_Documents where KSD_ID=@Id1@


Od wersji 2025.0.0 w ramach zakładki „Kontrolki” uprawniony operator może zdefiniować zapytanie SQL, które przeniesie dane z wybranego atrybutu na określoną kontrolkę typu Tekst.
Zapytania SQL dla poszczególnych atrybutów:
select KSD_Tag1 from do.KS_Documents where KSD_ID=@Id1@
select KSD_Tag2 from do.KS_Documents where KSD_ID=@Id1@
select KSD_Tag3 from do.KS_Documents where KSD_ID=@Id1@

W wersji 2025.1.0 umożliwiono zapis pliku XML z KSeF do bazy Comarch BPM (dawniej DMS), tak, aby możliwe było dodanie go w ramach kontrolki typu Załącznik.
W tym celu podczas konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” na zakładce „Kontrolki” należy po lewej stronie okna wybrać kontrolkę typu Załącznik, do której ma zostać dodany plik xml, a następnie po prawej stronie, w ramach edytora wprowadzić następujące zapytanie SQL:
Select KSD_Xml, CASE WHEN KSD_NumerFaktury LIKE '%/%' THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.xml') ELSE CONCAT(KSD_NumerFaktury, '.xml') END AS modified_column from do.KS_Documents where KSD_ID=@Id1@

Gdy definicja punktu ACD została zapisana, wówczas podpięty plik załącznika XML można zobaczyć w oknie punktu ACD.

Po wygenerowaniu dokumentu BPM (dawniej DMS) plik XML jest dostępny w ramach kontrolki typu Załącznik wybranej na definicji punktu ACD. Podobnie jak w przypadku innych plików dołączanych do kontrolki typu Załącznik, plik XML można usunąć za pomocą ikony
lub zapisać na dysku, klikając w ikonę
, a następnie wybierając odpowiednią lokalizację i naciskając „Zapisz”.

Zakładka Uprawnienia
Na zakładce „Uprawnienia” należy wskazać pracowników, którzy będą mogli procesować dokumenty w ramach punktu.
Uprawnienia mogą być dodawane wyłącznie poprzez wskazanie pracowników, nie ma możliwości dodania uprawnień dla pracowników wskazanego działu czy pracowników zajmujących określone stanowisko.
Na zakładce „Uprawnienia” w ramach typu punktu konfiguracyjnego „Import dokumentów zakupu z KSeF” znajduje się także dodatkowa kolumna „Edycja dokumentu”.
Jeśli operator zaznaczy obok danego pracownika checkbox w ramach kolumny „Edycja dokumentu”, wówczas taki pracownik będzie mógł zmieniać wartości w kontrolkach bezpośrednio w punkcie ACD.


Na każdej zakładce znajduje się ikona
[Eksport], która umożliwia eksportowanie danego punktu ACD do zapisu na dysk (zob. Eksport punktu ACD). Istnieje również możliwość importu punktu konfiguracyjnego typu „Import dokumentów zakupu z KSeF”, podobnie jak w przypadku innych typów punktów ACD.( zob. Import punktu ACD).
Praca z punktem ACD (pobieranie dokumentów zakupu z KSeF)
W prawym panelu punktu ACD typu „Import dokumentów zakupu z KSeF” znajduje się przycisk
[Import faktur z KSeF], który odpowiada za włączenie importu dokumentów z KSeF.

W wersji 2024.3.0 wprowadzono zmiany dotyczące okna „Import faktur z KSeF”, które jest wyświetlane po kliknięciu w przycisk
[Import faktur z KSeF]. W ramach okna „Import faktur z KSeF” dostępne są trzy opcje:
- Nowe – opcja zaznaczona domyślnie; operator powinien zaznaczyć tę opcję, jeśli chce, aby zostały pobrane dane wszystkich faktur zarejestrowanych od czasu ostatniego importu faktur (przyjęte w KSeF w dniu, gdy ostatnio dokonywano importu lub później);
- Za okres Od [dzień.miesiąc.data] Do [dzień.miesiąc.data] – operator powinien zaznaczyć tę opcję, a następnie wybrać daty w polach „Od” i „Do”, jeśli chce, aby zostały pobrane dane faktur przyjętych w KSeF w wybranym okresie; domyślnie w polach wybrana jest aktualna data;
- Numer KSeF – operator powinien zaznaczyć tę opcję, jeżeli chce pobrać dane konkretnej faktury przjętej w KSeF. Po zaznaczeniu opcji należy wprowadzić w wyznaczonym polu numer KSeF wybranej faktury;
Po wyborze opcji w oknie „Import faktur z KSeF” i ewentualnym wypełnieniu wymaganych pól należy kliknąć w przycisk
[Importuj], aby pobrać dane faktur z bazy KSeF do bazy Comarch BPM (dawniej DMS), zgodnie z wybranymi kryteriami.
Jeżeli natomiast operator kliknie w przycisk
[Anuluj] w ramach okna „Import faktur z KSeF”, wówczas okno zostanie zamknięte, a dane faktur z KSeF nie zostaną pobrane do Comarch BPM (dawniej DMS).

Kiedy użytkownik kliknie w przycisk
[Importuj], wówczas:
- jeśli przedtem na zakładce „KSeF” (tryb jednofirmowy) lub „Połączenia z ERP” (tryb wielofirmowy) uzupełniono tylko pole „NIP firmy”, a nie uzupełniono pola „Token KSeF” – zostanie otwarte okno „Importowanie dokumentów” oraz okno „Wybierz certyfikat”, w którym należy wybrać certyfikat uwierzytelniający do KSeF. Jeżeli użytkownik nie uzupełni pola „Token KSeF”, wówczas za każdym razem po naciśnięciu przycisku
[Importuj] konieczny będzie wybór certyfikatu.

- jeśli przedtem na zakładce „KSeF” (tryb jednofirmowy) lub „Połączenia z ERP” (tryb wielofirmowy) uzupełniono zarówno pole „NIP firmy”, jak również pole „Token KSeF” – zostanie otwarte okno „Importowanie dokumentów”, bez konieczności wyboru certyfikatu
W przypadku wyboru niewłaściwego certyfikatu lub wystąpienia innego błędu (zob. rozdział Przykładowe błędy poniżej) pobieranie faktur z KSeF nie będzie możliwe – zostaje wówczas wyświetlony następujący komunikat:

Dokumenty, które zostały zarejestrowane w Comarch BPM (dawniej DMS), a nie zostały jeszcze wygenerowane do dokumentu Comarch BPM (dawniej DMS), są widoczne na liście dokumentów w prawym panelu.
Nazwy dokumentów KSeF, które nie zostały jeszcze otwarte w danym punkcie ACD, są zaznaczone pogrubioną czcionką na liście dokumentów.

W wersji 2024.3.0 zmieniono dotychczasową nazwę kolumny z listą dokumentów „Numer dokumentu” na „Dokument” i dodano nowe ikony nad listą dokumentów:
[Filtry] – po kliknięciu w tę ikonę wyświetlane jest okno, które pozwala na zdefiniowanie warunków do wyszukiwania dokumentów na liście. W ramach okna dostępne są następujące pola:
-
- NIP firmy – w ramach pola można zawęzić pobieranie danych według wprowadzonej wartości NIP; wprowadzoną wartość można wyczyścić, klikając w znak x po prawej stronie pola;
- Data przyjęcia w KSeF – od – w ramach pola można wybrać datę, zgodnie z którą będzie filtrowana lista dokumentów w punkcie ACD – widoczne będą tylko faktury przyjęte w KSeF od wybranej daty; wprowadzoną wartość można wyczyścić, klikając w znak x po prawej stronie pola;
- Data przyjęcia w KSeF – do – w ramach pola można wybrać datę, zgodnie z którą będzie filtrowana lista dokumentów w punkcie ACD – widoczne będą tylko faktury przyjęte w KSeF do wybranej daty; wprowadzoną wartość można wyczyścić, klikając w znak x po prawej stronie pola;
- Wartość brutto [wartość od] [wartość do] – w ramach filtra można wprowadzić zakres wartości brutto faktury, zgodnie z którym nastąpi zawężenie pobieranych danych; dostępne są dwa pola: pierwsze pole od lewej strony, to pole „wartość od”, drugie pole od lewej strony to „wartość do”; operator może wybrać wartość w jednym z pól lub w obu
- Typ dokumentu – w ramach filtra można wybrać jeden typ dokumentu według którego ma zostać zawężone pobranie danych dokumentów. Dostępne opcje to:
- faktura VAT
- faktura uproszczona
- faktura rozliczeniowa
- faktura zaliczkowa
- faktura korygująca
- faktura korygująca fakturę rozliczeniową
- korekta faktury zaliczkowej
Wprowadzoną wartość można wyczyścić, klikając w znak x po prawej stronie pola.

-
- Stan faktury – w ramach filtra można wybrać jeden stan dokumentu, według którego ma zostać zawężone pobranie danych dokumentów. Dostępne opcje to:
- zarejestrowane w BPM (dawniej DMS) – tzn. wygenerowano wcześniej w Comarch BPM (dawniej DMS) dokumenty o takich samych numerach KSeF i nie zostały one odrzucone w punkcie ACD;
- niezarejestrowane w BPM (dawniej DMS) – opcja domyślnie zaznaczona; nie wygenerowano wcześniej w Comarch BPM (dawniej DMS) dokumentów o takich samych numerach KSeF i nie zostały one odrzucone w punkcie ACD;
- odrzucone – dokumenty, które odrzucono na punkcie ACD
- wszystkie – wszystkie dokumenty: zarejestrowane, niezarejestrowane i odrzucone
Aby uruchomić filtrowanie listy dokumentów według warunków zdefiniowanych w oknie filtry, należy kliknąć w przycisk
[Filtruj] – wówczas lista dokumentów w punkcie ACD zostanie zawężona zgodnie z wybranymi wartościami.

[Usuń filtry] – jeśli operator kliknie w tę ikonę, wtedy wszystkie warunki wyszukiwania dokumentu, które zdefiniowano w oknie „Filtry” oraz w ramach wyszukiwarki obok przycisku „Szukaj”, zostaną usunięte
[Odśwież] – gdy operator kliknie w tę ikonę, wówczas zostanie wyświetlona aktualna lista dokumentów
Operator może również zawęzić listę dokumentów lub wyszukać na niej dokument, wpisując frazę w polu wyszukiwarki nad listą dokumentów, a następnie klikając przycisk
[Szukaj], podobnie, jak miało to miejsce w dotychczasowych wersjach.
W wersji 2023.0.0 dodano opcję odrzucenia dokumentu w punkcie ACD – w tym celu operator powinien kliknąć prawym przyciskiem myszy na daną pozycję na liście dokumentów w punkcie ACD i kliknąć wyświetlony wówczas przycisk
[Odrzuć] – wtedy dokument zniknie z listy dokumentów niezarejestrowanych (jeśli miał taki status) i zostanie zarchiwizowany.

W wersji 2023.0.0 dodano opcję przywrócenia dokumentu w punkcie ACD – w tym celu operator powinien kolejno:
-
- Nacisnąć przycisk
[Filtry]; - Zaznaczyć opcję „odrzucone” lub „wszystkie” w ramach pola „Stan faktury”;
- Nacisnąć przycisk
[Filtruj]; - Na wyświetlonej liście wszystkich dokumentów lub dokumentów odrzuconych kliknąć prawym przyciskiem myszy na daną pozycję i nacisnąć wyświetlony wówczas przycisk
[Przywróć] – wtedy dokument zostaje przywrócony i jest widoczny na liście dokumentów niezarejestrowanych (jeśli przedtem miał taki status).
- Nacisnąć przycisk

Od wersji 2025.0.0 na liście przeprocesowanych dokumentów w zależności od tego, czy i ile nazw atrybutów wprowadzono na zakładce „Ogólne” podczas konfiguracji punktu ACD (0,1,2 lub 3) widoczne jest 1- 4 kolumn.
Aby wprowadzić wartość w dodatkowych kolumnach, należy kliknąć w daną komórkę w wybranej kolumnie i wierszu, a następnie w poszerzonym polu edycji wpisać tekst. Wówczas wprowadzone dane zostaną zapisane w wybranych kontrolkach typu tekst.



Jeśli wcześniej wprowadzono wartość atrybutu do tabeli do.KS_Documents, wówczas po przesunięciu kursora na daną komórkę w ramach kolumny atrybutu zostanie wyświetlona pełna wartość komórki.
Kiedy operator kliknie w nazwę danej kolumny, obok niej pojawi się ikona
– w takim przypadku lista jest posortowana w danej kolumnie według wartości rosnąco. Jeżeli operator kliknie ponownie w nazwę kolumny, wówczas obok tej nazwy wyświetlona zostaje ikona
– wtedy lista zostaje posortowana w danej kolumnie według wartości malejąco
Sortowanie dokumentów rosnąco ma miejsce według następującej kolejności:
- Uszeregowane alfabetycznie;
- Uszeregowane według kolejności numerycznej (0-9);
- Uszeregowane według znaków specjalnych.
Sortowanie dokumentów malejąco ma miejsce według następującej kolejności:
- Uszeregowane według znaków specjalnych;
- Uszeregowane według kolejności numerycznej (9-0);
- Uszeregowane alfabetycznie.
Jeśli operator przesunie kursor na początek nazwy danej kolumny, wówczas między kolumnami pojawia się ikona dwustronnej strzałki
(kolor strzałki jest zależny od ustawień komputera dla wyglądu kursora) – wówczas po kliknięciu lewym przyciskiem myszki można zmieni szerokość kolumny, przeciągając ją w prawo albo w lewo.
Po kliknięciu na daną pozycję na liście dokumentów podgląd dokumentu z KSeF zostanie wyświetlony w lewym panelu, a pod nim widoczna będzie lista kontrolek, którą określono w ramach zakładki „Kontrolki” podczas definiowania danego punktu konfiguracyjnego.
Jeśli dany operator nie ma prawa do edycji dokumentu KSeF w punkcie ACD (podczas konfiguracji danego punktu ACD typu „Import dokumentów zakupu z KSeF” w ramach zakładki „Uprawnienia” nie zaznaczono dla niego parametru „Edycja dokumentu”), wówczas kontrolki na danym dokumencie w punkcie ACD są wyszarzone i niedostępne do edycji.



Po sprawdzeniu danych w kontrolkach i ewentualnym uzupełnieniu wartości należy kliknąć w przycisk
[Generuj], aby został utworzony nowy dokument w ramach typu obiegu, który zdefiniowano dla danego punktu ACD.
Istnieje możliwość zatrzymania generowania dokumentów – w tym celu należy kliknąć w przycisk
[Zatrzymaj], który znajduje się w oknie „Inicjowanie dokumentów”. Generowanie dokumentów zostanie wówczas przerwane.


Jeżeli poprawnie skonfigurowano punkt ACD i zapisano zmiany, wówczas po wygenerowaniu danego dokumentu do Comarch DMS nastąpi automatyczne dodanie załącznika w formacie pdf z fakturą KSeF na tym dokumencie, z nazwą faktury jako nazwą załącznika (zgodnie z nazwą faktury w kolumnie KSD_NumerFaktury w tabeli do.KS_Documents). Po kliknięciu w nazwę załącznika lub automatycznie po otwarciu dokumentu podgląd dokumentu zostanie wyświetlony w oknie po prawej stronie karty obiegu, podobnie jak w przypadku innych załączników.

Przykładowe błędy
Jeśli po kliknięciu w przycisk
[Importuj]:
[Anuluj] lub znak X w oknie „Wybierz certyfikat”, wówczas okno zostanie zamknięte i wyświetlony zostanie poniższy komunikat:



Przykłady zapytań SQL w zakładce Kontrolki dla punktu ACD „Import dokumentów zakupu z KSeF”
W ramach zakładki „Kontrolki” w przypadku typu punktu ACD „Import dokumentów zakupu z KSeF” (zob. Definiowanie punktu konfiguracyjnego (Import dokumentów zakupu z KSeF)) można zastosować szereg zapytań SQL, aby z pliku został zmapowany określony rodzaj danych. Poniżej przedstawiono przykłady takich zapytań:
- Załącznik – opcja dostępna od wersji 2024.3.0; użytkownik wybiera kontrolkę typu Załącznik, znajdującą się w danym typie obiegu (w poniższym przykładzie nazwą pliku będzie nazwa faktury)
Select KSD_SourceContent, CASE WHEN KSD_NumerFaktury LIKE '%/%' THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.pdf') ELSE CONCAT(KSD_NumerFaktury, '.pdf') END AS modified_column from do.KS_Documents where KSD_ID=@Id1@
- Numer dokumentu – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
select KSD_NumerFaktury from do.KS_Documents where KSD_ID=@Id1@
- Data wystawienia – użytkownik wybiera kontrolkę typu Data i godzina, znajdującą się w danym typie obiegu
Select KSD_DataWystawienia from do.KS_Documents where KSD_ID=@Id1@
- Miejsce wystawienia – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_MiejsceWystawienia from do.KS_Documents where KSD_ID=@Id1@
- Kontrahent – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
select KSC_PodatnikNazwa from do.KS_DocumentContractors p join do.KS_Documents d on p.KSC_DocumentID=d.KSD_Id where KSD_Id=@Id1@
- Kontrahent (dla współpracy z Comarch ERP Optima) – użytkownik wybiera kontrolkę typu Kontrahent, znajdującą się w danym typie obiegu
select top 1 Knt_KntId, Knt_Kod from [Nazwa_bazy_DMS].[do].[KS_DocumentContractors] join [Nazwa_bazy_ERPOptima].[cdn].[Kontrahenci] on Knt_Nip = KSC_PodatnikNIP where KSC_ID=@Id1@
- Kontrahent (dla współpracy z Comarch ERP XL) – użytkownik wybiera kontrolkę typu Kontrahent, znajdującą się w danym typie obiegu
select top 1 Knt_gidnumer, knt_akronim from [Nazwa_bazy_DMS].[do].[KS_DocumentContractors] join [Nazwa_bazy_ERPXL].[cdn].[KntKarty] on Knt_Nip = KSC_PodatnikNIP where KSC_ID=@Id1@
- Towar – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
select KSI_ElementNazwa from do.KS_DocumentItems c join do.KS_Documents d on c.KSI_DocumentID=d.KSD_Id where KSD_Id=@Id1@
- Kod waluty – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_KodWaluty from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży objętej stawką 0% w przypadku wewnątrzwspólnotowej dostawy towarów – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNetto0_WDT from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży objętej stawką 0% w przypadku eksportu – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNetto0_Export from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży zwolnionej od podatku – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNettoZW from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży w przypadku dostawy towarów oraz świadczenia usług poza terytorium kraju, z wyłączeniem kwot wykazanych w polach P_13_5 i P_13_9 – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNettoInna from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości świadczenia usług, o których mowa w art. 100 ust. 1 pkt 4 ustawy – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNettoRS from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży w procedurze odwrotnego obciążenia, dla której podatnikiem jest nabywca zgodnie z art. 17 ust. 1 pkt 7 i 8 ustawy oraz innych przypadków odwrotnego obciążenia występujących w obrocie krajowym – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNettoOOKraj from do.KS_Documents where KSD_ID=@Id1@
- Suma wartości sprzedaży w procedurze marży, o której mowa w art. 119 i art. 120 ustawy – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaNettoMarza from do.KS_Documents where KSD_ID=@Id1@
- Kwota należności ogółem – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_SumaBrutto from do.KS_Documents where KSD_ID=@Id1@
- Kurs waluty stosowany do wyliczenia kwoty podatku w przypadkach, o których mowa w przepisach Działu VI ustawy na fakturach, o których mowa w art. 106b ust. 1 pkt 4 ustawy – użytkownik wybiera kontrolkę typu Liczba stałoprzecinkowa, znajdującą się w danym typie obiegu
Select KSD_KursWalutyZ from do.KS_Documents where KSD_ID=@Id1@
- Przepis ustawy albo aktu wydanego na podstawie ustawy, na podstawie którego podatnik stosuje zwolnienie od podatku – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_SprzedazZWUstawa from do.KS_Documents where KSD_ID=@Id1@
- Przepis dyrektywy 2006/112/WE, który zwalnia od podatku taką dostawę towarów lub takie świadczenie usług – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_SprzedazZWDyrektywa from do.KS_Documents where KSD_ID=@Id1@
- Inna podstawa prawna wskazująca na to, że dostawa towarów lub świadczenie usług korzysta ze zwolnienia – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_SprzedazZWPodstawa from do.KS_Documents where KSD_ID=@Id1@
- Data dopuszczenia nowego środka transportu do użytku – użytkownik wybiera kontrolkę typu Data i godzina, znajdującą się w danym typie obiegu
Select KSD_NSTWDT from do.KS_Documents where KSD_ID=@Id1@
- Dane dla przypadków, gdy pole RodzajFaktury przyjmuje wartości KOR, KOR_ZAL lub KOR_ROZ – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_RodzajFaktury from do.KS_Documents where KSD_ID=@Id1@
- Przyczyna korekty dla faktur korygujących – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_PrzyczynaKorekty from do.KS_Documents where KSD_ID=@Id1@
- Data wystawienia faktury korygowanej – użytkownik wybiera kontrolkę typu Data i godzina, znajdującą się w danym typie obiegu
Select KSD_DataWystFaKorygowanej from do.KS_Documents where KSD_ID=@Id1@
- Numer faktury korygowanej – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_NrFaKorygowanej from do.KS_Documents where KSD_ID=@Id1@
- Numer identyfikujący fakturę korygowaną w Krajowym Systemie e-Faktur (KSeF) – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_NrKSeFFaKorygowanej from do.KS_Documents where KSD_ID=@Id1@
- Dla faktury korygującej – okres, do którego odnosi się udzielany opust lub obniżka, w przypadku gdy podatnik udziela opustu lub obniżki ceny w odniesieniu do wszystkich dostaw towarów lub usług dokonanych lub świadczonych na rzecz jednego odbiorcy w danym okresie – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_OkresFaKorygowanej from do.KS_Documents where KSD_ID=@Id1@
- Poprawny numer faktury korygowanej w przypadku, gdy przyczyną korekty jest błędny numer faktury korygowanej – użytkownik wybiera kontrolkę typu Tekst, znajdującą się w danym typie obiegu
Select KSD_NrFaKorygowany from do.KS_Documents where KSD_ID=@Id1@
Udostępnienie funkcji RPA (automatycznego trybu pracy) na punktach ACD typu „Import dokumentów ze skrzynki e-Doręczenia” oraz „Import dokumentów zakupu z KSeF”
W wersji 2025.2.0 umożliwiono pełną automatyzację importowania oraz generowania dokumentów przez punkty ACD typu „Import dokumentów ze skrzynki e-Doręczenia” i „Import dokumentów zakupu z KSeF”.
Wprowadzono również możliwość ustawiania filtrów dla punktów ACD typu „Import dokumentów zakupu z KSeF” w konfiguracji automatycznego trybu pracy.
Aby umożliwić wykonywanie działań na wskazanych punktach ACd, wprowadzono nowe metody w obiekcie Globals w klasie ACD, która określa metody wykonywane jedynie w kontekście okna ACD – są to następujące metody:
- ImportEDorMessages() – metoda do automatycznej obsługi pobierania nowych wiadomości z usługi e-Doręczenia – ta metoda:
- Nie posiada parametrów wejściowych
- Zwraca wyniki:
- 0 – jeśli operacja wykonała się poprawnie
- -1- jeśli wystąpił błąd
- int ImportMessages()
return: 0 – ok, -1 – error

- ImportKSeFDocuments() – metoda do automatycznej obsługi pobierania nowych dokumentów z usługi KSeF – ta metoda:
- Nie posiada parametrów wejściowych
- Zwraca wyniki:
- 0 – jeśli operacja wykonała się poprawnie
- -1- jeśli wystąpił błąd
- int ImportKSeFDocuments()
return: 0 – ok, -1 – error

- SetKSeFFilters(string, DateTime?,DateTime?, decimal?, decimal?, byte?, byte) – metoda służąca do ustawiania filtrów dla punktów ACD typu „Import dokumentów zakupu z KSeF” według określonych kryteriów. Uruchomienie metody powoduje przeładowanie listy dokumentów przy uwzględnieniu nowych wartości filtrów. Ta metoda:
- Posiada parametry wejściowe – podanie wszystkich parametrów nie jest wymagane:
- string – NIP firmy
- DateTime? – Data przyjęcia dw KSeF- od
- DateTime? – Data przyjęcia dw KSeF- do
- decimal? – Wartość brutto – od
- decimal? – Wartość brutto – do
- byte? – Typ dokumentu
- byte – Stan faktury
- Zwraca wyniki:
- 0 – jeśli operacja wykonała się poprawnie
- -1- jeśli wystąpił błąd
- int SetKSeFFilters(string, string?, string?, decimal?,decimal?, byte?, byte)
- Posiada parametry wejściowe – podanie wszystkich parametrów nie jest wymagane:
string: KSeF NIP
DateTime?: KSeF date from
DateTime?: KSeF date to
decimal?: KSeF gross amount from
decimal?: KSeF gross amount value to
byte?: 0 – VAT invoice, 1 – corrective invoice, 2 – advance invoice, 3 – settlement invoice, 4 – simplified invoice, 5 – correction of advance invoice, 6 – corrective settlement invoice
byte: 0 – unregistered, 1 – rejected, 2 – registered, 3 – all
return: 0 – ok, -1 – error

- ResetKSeFFilters() – metoda służąca do resetowania filtrów dla punktów ACD typu „Import dokumentów zakupu z KSeF”. Domyślne ustawienia to brak filtrów: NIP firmy, Data przyjęcia w KSeF – od, Data przyjęcia w KSeF – do, Wartość brutto – od, Wartość brutto – do Typ dokumentu. Filtr Stan faktury jest ustawiony na faktury niezarejestrowane w Comarch BPM. Ta metoda:
- Nie posiada parametrów wejściowych
- Zwraca wyniki:
- 0 – jeśli operacja wykonała się poprawnie
- -1- jeśli wystąpił błąd
- int ResetKSeFFilters()
return: 0 – ok, -1 – error

Przenoszenie danych KSeF we współpracy z Comarch ERP Optima
Od wersji 2025.2.0 podczas generowania dokumentów FZ i FZV do Comarch ERP Optima można przenosić na dokumenty dane dotyczące KSeF (numery i daty).
W ramach definicji obiegu OptimaInvoiceGeneration.workflow dostępnej wraz z generatorem faktur zakupowych do Comarch ERP Optima dodano:
- kontrolkę typu Własna akcja „Sprawdź numer KSeF” (identyfikator: Sprawdz_numer_KSeF), która zawiera procedurę ERP, dzięki której możliwa jest weryfikacja, czy dokument z danym numerem KSeF w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP Optima;

- kontrolkę typu Komunikat (identyfikator: Msg2), która odpowiada za wyświetlenie komunikatu „Dokument o numerze KSeF [numer] znajduje się już w Comarch ERP Optima” – jeśli dokument o numerze znajdującym się w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP Optima

- kontrolkę typu Tekst „Status KSeF w Optimie” (identyfikator: StatusKSeFOptima), która zawiera informację zależną od wyniku weryfikacji za pomocą kontrolki „Sprawdź numer KSeF” – jeśli dokument znajduje się w Comarch ERP Optima, w kontrolce „Status KSeF w Optimie” widnieje napis „Dokument o takim numerze istnieje już w ERP”, jeśli zaś nie – „Dokument o takim numerze nie istnieje w ERP”.


W ramach definicji obiegów:
- OptimaVatRegisterGeneration.workflow dostępnego wraz z generatorem dokumentów do rejestru VAT Comarch ERP Optima
- OptimaVatRegisterGenerationAndAnalyticalDescription.workflow dostępnego wraz z generatorem dokumentów i opisu analitycznego do rejestru VAT Comarch ERP Optima
dodano następujące kontrolki, z których dane przekazywane są przez generator dokumentów Rejestr VAT do Comarch ERP Optima:
- kontrolkę typu Data „Data przyjęcia KSeF” (identyfikator: DataKSeF)
- kontrolkę typu Tekst „Numer KSeF” (identyfikator: NumerKSeF).
Dla tych kontrolek wprowadzono także odpowiednie klucze w pliku OptimaVatRegisterGenerator.exe.config (<add key=”KSeFNumberControl” value=”NumerKSeF” /> oraz <add key=”KSeFReceiptDateControl” value=”DataKSeF” />).
Kontrolki: „Data przyjęcia KSeF” „Numer KSeF” nie są wymagane do wygenerowania dokumentu w Comarch ERP Optima.
Dodatkowo na definicjach obiegów: OptimaVatRegisterGeneration.workflow i OptimaVatRegisterGenerationAndAnalyticalDescription.workflow wprowadzono następujące zmiany:
- dodano kontrolkę typu Własna akcja z procedurą ERP akcja „Sprawdź numer KSeF” (identyfikator: Sprawdz_numer_KSeF), która sprawdza, czy dokument z danym numerem KSeF w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP Optima
- dodano kontrolkę typu Komunikat (identyfikator: Msg2), która odpowiada za wyświetlenie komunikatu „Dokument o numerze KSeF [numer] znajduje się już w Comarch ERP Optima” – jeśli dokument o numerze znajdującym się w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP Optima
- dodano kontrolkę typu Tekst „Status KSeF w Optimie” (identyfikator: StatusKSeFOptima), która zawiera informację zależną od wyniku weryfikacji za pomocą kontrolki „Sprawdź numer KSeF” – jeśli dokument znajduje się w Comarch ERP Optima, w kontrolce „Status KSeF w Optimie” widnieje napis „Dokument o takim numerze istnieje już w ERP”, jeśli zaś nie – „Dokument o takim numerze nie istnieje w ERP”.

Przenoszenie danych KSeF we współpracy z Comarch ERP XL
Od wersji 2025.2.0 podczas generowania dokumentów Faktura zakupu FZ, (A) Faktura zakupu (A)FZ i (A) Faktura zakupu uproszczona do Comarch ERP XL można przenosić na dokumenty dane dotyczące KSeF (numery i daty).
Dodanie nowych pól w ramach kontrolki typu Dokument ERP XL
W wersji 2025.2.0 w przypadku, gdy na definicji kontrolki typu Dokument ERP XL na zakładce „Dokument ERP XL” w polu „Typ” wybrano jeden z poniższych typów dokumentów:
- Faktura zakupu
- (A)Faktura zakupu
- (A)Faktura zakupu uproszczona
wówczas w ramach nagłówka dokumentu zostaną dodane pola: „Numer KSeF” i „Data KSeF” – operator może ręcznie wypełnić pola lub zmapować wartości, może również modyfikować wartości, jeśli kontrolka nie jest w trybie tylko do odczytu.
Pola „Numer KSeF” i „Data KSeF” zostały również dodane na definicji kontrolki typu Dokument ERP XL dla trzech wspomnianych typów dokumentów, na zakładce „Wartości mapowane”, w sekcji „Nagłówek” – operator może wybrać: dla pola „Numer KSeF” kontrolkę typu Tekst, z której ma zostać zmapowany numer oraz dla pola „Data KSeF” – kontrolkę typu Data i godzina, z której wartość ma zostać zmapowana. Mapowanie tych wartości nie jest konieczne, aby zapisać dokument i wygenerować dokument ERP XL.


Nowe pola „Numer KSeF” i „Data KSeF” zostały również wprowadzone w aplikacji web oraz w aplikacjach mobilnych.
W ramach definicji predefiniowanych obiegów:
- Faktura kosztowa (Nagłówek);
- Faktura kosztowa (Elementy);
- Faktura kosztowa (Waluty)
dodano:
- kontrolkę typu Tekst „Numer KSeF” (identyfikator: NumerKSeF) – w ramach kontrolki można wprowadzić numer KSeF; zostanie on przekazany do Comarch ERP XL do kolumny KSF_Numer w tabeli KSeFDokumenty; wypełnienie kontrolki nie jest obowiązkowe do wygenerowania dokumentu ERP XL;
- kontrolkę typu Data i godzina „Data przyjęcia KSeF” (identyfikator: DataKSeF) – w ramach kontrolki można wybrać date przyjęcia faktury KSeF; zostanie ona przekazany do Comarch ERP XL do kolumny KSF_TStampPrzyjecia w tabeli KSeFDokumenty; wypełnienie kontrolki nie jest obowiązkowe do wygenerowania dokumentu ERP XL;
- kontrolkę typu Własna akcja „Sprawdź numer KSeF” (identyfikator: Sprawdz_numer_KSeF), która zawiera procedurę ERP, dzięki której możliwa jest weryfikacja, czy dokument z danym numerem KSeF w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP XL;

- kontrolkę typu Komunikat (identyfikator: Msg2), która odpowiada za wyświetlenie komunikatu „Dokument o numerze KSeF [numer] znajduje się już w Comarch ERP XL” – jeśli dokument o numerze znajdującym się w kontrolce „Numer KSeF” (identyfikator: NumerKSeF) jest już w Comarch ERP XL

- kontrolkę typu Tekst „Status KSeF w ERP XL” (identyfikator: StatusKSeFXL), która zawiera informację zależną od wyniku weryfikacji za pomocą kontrolki „Sprawdź numer KSeF” – jeśli dokument znajduje się w Comarch ERP XL, w kontrolce „Status KSeF w ERP XL” widnieje napis „Dokument o takim numerze istnieje już w ERP”, jeśli zaś nie – „Dokument o takim numerze nie istnieje w ERP”.



Mapowanie danych do nowych kontrolek w predefiniowanych typach obiegów
Jeśli operator chce przenieść numer i datę faktury zakupu KSeF na dokument Comarch BPM w ramach punktu ACD typu „Import dokumentów zakupu z KSeF”, wówczas powinien na definicji punktu ACd, na zakładce „Kontrolki” wprowadzić następujące zapytania:
- Dla kontrolki „Numer KSeF”:
select isnull (KSH_NumerReferencyjnyKSeF, ' ') from do.KS_DocumentHeaders join do.KS_Documents on ksd_id=KSH_DocumentId where KSD_ID=@Id1@

- Dla kontrolki „Data przyjęcia KSeF”:
select isnull (KSH_DataWytworzeniaFa, ' ') from do.KS_DocumentHeaders join do.KS_Documents on ksd_id=KSH_DocumentId where KSD_ID=@Id1@

Czy wiesz, że można wypełnić kontrolkę typu Dane Tabelaryczne pozycjami dokumentu pobranego z KSeF oraz przeliczyć wartości przy współpracy z Comarch ERP XL?
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. Cena, Ilość, Stawka VAT) 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 ERP XL.
Zawartość przykładu
- Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERPXL
- 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) oraz inicjację dokumentu obiegowego. W przypadku kontrolki Kontrahent w zapytaniu przed nazwą tabeli CDN.KntKarty należy wskazać właściwą nazwę bazy Comarch ERXL.
Kliknij tutaj, aby pobrać przykład
Zasada działania
Mechanizm opiera się na dwóch trybach działania zintegrowanych w jednej kontrolce Dane Tabelaryczne (Elementy), wykorzystując dane z bazy Comarch BPM, które zostały zapisane po przetworzeniu faktury z KSeF w punkcie ACD.
- 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 to pole (ID_KSeF), reagując na jego wypełnienie.
- Kluczowym elementem jest zapytanie SQL umieszczone na zakładce Inicjowanie Wartości kontrolki typu dane 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.
- W zapytaniu SQL zawarta jest niezbędna logika konwersji (CTE z ROW_NUMBER), która mapuje stawki VAT z KSeF na identyfikatory liczbowe (Naz_GIDLp) z tabeli CDN.Nazwy, których BPM wymaga do poprawnego wyświetlania danych w kolumnie typu Lista (Stawka VAT).
- Dodatkowo, kontrolka Dane Tabelaryczne (Elementy) obserwuje sama siebie (@^SenderControlName@ = ’Elementy’), co aktywuje logikę automatycznego przeliczania wartości w trybie edycji:
- Zapytanie monitoruje zmiany w kolumnach wejściowych, takich jak Cena lub Ilość (oraz Stawka VAT).
- W przypadku edycji tych pól, skrypt automatycznie pobiera stawkę VAT, a następnie przelicza i aktualizuje wartości Netto (Ilość * Cena) oraz Brutto (Netto * (1 + VAT)) w bieżącym wierszu.
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.

2. Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy i skonfigurowano w niej następujące kolumny:
- ”Nazwa” (identyfikator kolumny: Nazwa) – typ Tekst
- ”Cena” (identyfikator kolumny: Cena) – typ Liczba stałoprzecinkowa
- ”Ilość” (identyfikator kolumny: Ilosc) – typ Liczba stałoprzecinkowa
- ”Netto” (identyfikator kolumny: Netto) – typ Liczba stałoprzecinkowa
- ”Stawka VAT” (identyfikator kolumny: StawkaVAT) – typ Lista
- ”Brutto” (identyfikator kolumny: Brutto)– typ Liczba stałoprzecinkowa

3. W kontrolce typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy na zakładce Listy zdefiniowano zapytanie pobierające:
- Stawki VAT:
select Naz_gidLp as Id, CASE WHEN Naz_Nazwa='A 23.00' THEN '23%' WHEN Naz_Nazwa='B 8.00' THEN '8%' WHEN Naz_Nazwa='C 0.00' THEN '0%' WHEN Naz_Nazwa='D 0.00' THEN 'ZW' WHEN Naz_Nazwa='E 0.00' THEN 'NP' WHEN Naz_Nazwa='F 7.00' THEN '7%' WHEN Naz_Nazwa='G 5.00' THEN '5%' END from CDN.Nazwy where Naz_GIDTyp = 624 AND trim(substring(Naz_Nazwa,9,2))=''

- Jednostki miary:
SELECT Naz_GIDLp,Naz_Nazwa from cdn.Nazwy where Naz_GIDTyp=144;

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.

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 tabel do.KS_DocumentItems na podstawie przekazanego parametru @ID_KSeF@ (ID dokumentu KSeF).
W zapytaniu SQL konieczne jest użycie logiki CASE WHEN do konwersji wartości pola KSI_ElementStawkaVAT (np. 'Stawka23′, 'zw’) na ujednolicony klucz, który następnie jest mapowany na identyfikatory liczbowe (Naz_GIDLp) stawek VAT z tabeli CDN.Nazwy z bazy XL. Logika CTE z ROW_NUMBER() zapewnia unikalność mapowanych ID.
- Ta sekcja jest wywoływana tylko raz, podczas inicjowania obiegu:
IF @^SenderControlName@ = 'ID_KSeF' /*Identyfikator kontrolki do której pobierane jest ID dokumentu KSeF */
BEGIN
/* Tryb 1: Inicjowanie wierszy z dokumentu KSeF */
WITH ProcessedDocumentItems AS (
/* CTE 1: Ujednolicenie stawek VAT, tabela KSI_ElementStawkaVAT */
SELECT
KSI_ElementNazwa,
KSI_ElementCenaNetto,
KSI_ElementIlosc,
KSI_ElementWartoscNetto,
KSI_ElementStawkaVAT,
CASE
WHEN di.KSI_ElementStawkaVAT LIKE 'Stawka%' THEN LTRIM(RTRIM(SUBSTRING(di.KSI_ElementStawkaVAT, 7, LEN(di.KSI_ElementStawkaVAT) - 6)))
WHEN di.KSI_ElementStawkaVAT = 'zw' THEN 'ZW'
WHEN di.KSI_ElementStawkaVAT = 'np' THEN 'NP'
ELSE di.KSI_ElementStawkaVAT
END AS StandardizedStawkaVAT
FROM
[BAZA_BPM].do.KS_DocumentItems AS di /*Należy wskazać nazwę bazy BPM*/
WHERE KSI_DocumentId = @ID_KSeF@ /*Identyfikator kontrolki liczba całkowita, do której pobierane jest ID dokumentu KSeF*/
),
ProcessedNazwyRanked AS (
/* CTE 2: Porządkowanie stawek VAT z tabeli słownikowej (CDN.Nazwy), w celu zapewnienia unikalności */
SELECT
Naz_GIDLp,
Naz_Nazwa1,
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' THEN 'ZW'
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 'NP'
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END AS StandardizedNazwa1_ForJoin,
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' OR LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 0.00
WHEN ISNUMERIC(
CASE
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
) = 1 THEN CAST(
CASE
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
AS DECIMAL(5, 2)) / 100.0
ELSE 0.00
END AS CalculatedVATRate,
/* Numerujemy rekordy dla tego samego klucza łączenia. */
ROW_NUMBER() OVER (PARTITION BY
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' THEN 'ZW'
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 'NP'
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
ORDER BY n.Naz_GIDLp ASC) as RN
FROM
CDN.Nazwy AS n
WHERE Naz_GIDTyp = 624
),
ProcessedNazwy AS (
/* CTE 3: Finalne, unikalne stawki */
SELECT
Naz_GIDLp,
StandardizedNazwa1_ForJoin,
CalculatedVATRate
FROM
ProcessedNazwyRanked
WHERE RN = 1 /* Wybieramy tylko jeden (pierwszy) rekord dla każdej unikalnej stawki */
)
/* Końcowy SELECT: Zwraca żądany zestaw kolumn */
SELECT
pi.KSI_ElementNazwa,
pi.KSI_ElementCenaNetto,
pi.KSI_ElementIlosc,
pi.KSI_ElementWartoscNetto,
pn.Naz_GIDLp AS 'stawka VAT', /* ID stawki z drugiej tabeli */
pi.KSI_ElementWartoscNetto * (1 + pn.CalculatedVATRate) AS 'Wartość brutto',
NULL AS 'NULL'
FROM
ProcessedDocumentItems AS pi
JOIN
ProcessedNazwy AS pn
ON
pi.StandardizedStawkaVAT = pn.StandardizedNazwa1_ForJoin;
END
- Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji KSeF:
ELSE
IF @^SenderControlName@ = 'Elementy' /*Identyfikator kontrolki Dane tabelaryczne*/
BEGIN
/* Tryb 2: Automatyczne przeliczanie wartości w trybie edycji */
/* Kolumny 2-Cena, 3-Ilość, 5-Stawka VAT */
IF @Elementy_Column@=2 OR @Elementy_Column@=3 OR @Elementy_Column@=5
BEGIN
DECLARE @VAT as decimal (4,2)
/* Pobranie stawki VAT z tabeli słownikowej */
SELECT @VAT=CAST(SUBSTRING (Naz_Nazwa1, 0, CHARINDEX (' ', Naz_Nazwa1)) as decimal (4,2))/100
FROM CDN.Nazwy
WHERE Naz_GIDTyp=624 AND Naz_GIDLp=
(SELECT [Stawka VAT]
FROM @Elementy@
WHERE POS=@Elementy_Row@)
UPDATE @Elementy@
/* Aktualizacja wartości Netto */
SET [Netto] = (Ilosc * Cena),
/* Aktualizacja wartości Brutto */
[Brutto] = (Ilosc * Cena) * (@VAT + 1)
WHERE POS=@Elementy_Row@
/* Zwrócenie zaktualizowanej tabeli - Obowiązkowy select */
SELECT * FROM @Elementy@
END
END


6. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) WartoscNetto, w której dodano powiązanie do kontrolki Elementy i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Netto z kontrolki tabelarycznej:
select sum (Netto) from @Elementy@

7. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) WartoscBrutto, w której dodano powiązanie do kontrolki Elementy i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Brutto z kontrolki tabelarycznej:
select sum (Brutto) from @Elementy@

8. Punkt ACD: W punkcie konfiguracyjnym ACD (Współpraca z KSeF), na zakładce Kontrolki, dodano kontrolkę ID_KSeF i przypisano jej zapytanie, które pobiera ID dokumentu KSeF:
select @Id1@

Uzupełniona kontrolka typu Dane Tabelaryczne
Po pomyślnym zainicjowaniu dokumentu z punktu ACD, kontrolka typu Dane Tabelaryczne została automatycznie wypełniona pozycjami odczytanymi z KSeF.
Dla każdej pozycji, system automatycznie przeliczył i uzupełnił wartości w kolumnach Netto i Brutto w tym samym wierszu. W przypadku nieprawidłowości w kwotach możliwe jest przeliczanie wartości Netto/Brutto poprzez zmianę Ceny/Ilości lub Stawki VAT.
Kolumna Netto oraz Brutto jest zablokowana do ręcznej edycji (tryb „Do odczytu”), co gwarantuje poprawność danych.
Kontrolka Wartość Netto wyświetla poprawną sumę końcową z kolumny Netto kontrolki typu Dane tabelaryczne.
Kontrolka Wartość Brutto wyświetla poprawną sumę końcową z kolumny Brutto kontrolki Dane tabelaryczne.
