W wersji 2026.1.0 wprowadzono automatyczną konwersję plików XML KSeF do formatu pdf w punktach ACD typu „Współpraca z dowolnym programem OCR” i umożliwiono podgląd dokumentu „na żądanie” w tych punktach ACD. Te zmiany pozwalają na szybką weryfikację wizualną faktur pobranych do takich punktów ACD i zmniejszenie liczby błędów przy odczytywaniu dokumentów xml z Comarch ERP Optima i Comarch ERP XL w tych punktach ACD.
W tym celu w punktach ACD typu „Współpraca z dowolnym programem OCR” w ramach konfiguracji mapowania kontrolki typu Załącznik na zakładce „Kontrolki“ podczas definiowania punktu ACD dodano checkbox „Konwertuj pliki KSeF *.xml do *.pdf”.
W przypadku, jeśli wprowadzono odpowiednie zapytanie dla listy oraz dla kontrolki typu załącznik i zaznaczono checkbox, wówczas po kliknięciu w przycisk
[Generuj], podczas przekazywania dokumentów do Comarch BPM, wszystkie pliki xml generowanych dokumentów zostają automatycznie skonwertowane na pdfi zapisane w takiej formie na kontrolce typu Załącznik na nowoutworzonym dokumencie Comarch BPM oraz w bazie danych Comarch BPM jako format docelowy faktury.
Należy zwrócić uwagę, aby zaznaczyć checkbox „Konwertuj pliki KSeF *.xml do *.pdf” w ramach konfiguracji mapowań dla tego typu obiegu, do którego mają zostać wygenerowane dokumenty. Zaznaczenie parametru dla danego typu obiegu nie wpływa na generowanie dokumentów do innych typów obiegów.
Jeżeli zaznaczono checkbox „Konwertuj pliki KSeF *.xml do *.pdf”, a podczas próby generowania dokumentu z punktu ACD wystąpi błąd (przykładowo xml ma niepoprawny format, plik, nie jest fakturą KSeF lub nastąpił błąd SQL), wówczas generowanie dokumentu zostanie przerwane i wyświetli się komunikat informujący o błędzie. Utworzenie dokumentu nie będzie możliwe aż do naprawy błędu w danych źródłowych.


Na liście dokumentów w punktach ACD typu „Współpraca z dowolnym programem OCR” udostępniono przycisk
[Wyświetl dokument], który znajduje się w prawym górnym rogu okna panelu podglądu. Jeśli operator kliknie w przycisk, wówczas system uruchamia konwersję na bieżąco i pokazuje jej wynik w ramach podglądu po lewej stronie okna Comarch BPM. Przycisk jest dostępny, jeśli podczas konfiguracji mapowania na kontrolkę typu Załącznik zaznaczono checkbox „Konwertuj pliki KSeF *.xml do *.pdf“. Po wyświetleniu podglądu dokumentu przycisk
[Wyświetl dokument], zostaje ukryty.

Jeżeli podczas konwersji pliku xml do pdf po kliknięciu w przycisk
[Wyświetl dokument], wystąpiły błędy (przykładowo z powodu błędnych danych z zapytania SQL, braku zgodności z XML KSeF), wówczas zostanie wyświetlony komunikat o błędzie.


Jeśli operator wybierze z listy dokumentów w punkcie ACD inny dokument, wówczas przycisk
[Wyświetl dokument] pojawi się ponownie.
Przykładowe zapytania (dla poniższych przykładów: w punkcie ACD połączono się z bazą Comarch BPM, tabelę dbo.DF_WorkAPProcess utworzono w bazie Comarch BPM i z poziomu MSSQL nadano uprawnienie insert oraz select do tej tabeli operatorowi OD_User):
- Dla bazy Comarch ERP XL (dla dokumentów z poczekalni):
- Dla zakładki „Lista”:
BEGIN TRY SELECT T3.KSF_ID AS Id1, 0 AS Id2, REPLACE(T3.KSF_DokumentObcy, '/', '_') AS [Numer Faktury], T3.KSF_Numer AS [Numer KSeF], T3.KSF_NazwaSprzedawcy AS [Sprzedawca], T3.KSF_Netto AS [Kwota Netto], T2.DAB_Nazwa AS [Nazwa Pliku], T2.DAB_Rozmiar AS [Rozmiar], CONVERT(VARCHAR, T2.DAB_CzasDodania, 23) AS [Data Dodania], T2.DAB_Rozszerzenie AS Typ FROM Nazwa_bazy_XL.cdn.KSeFDokumenty AS T3 INNER JOIN Nazwa_bazy_XL.cdn.DaneObiekty AS T1 ON T1.DAO_ObiTyp = 14560 AND T1.DAO_ObiNumer = T3.KSF_ID INNER JOIN Nazwa_bazy_XL.cdn.DaneBinarne AS T2 ON T1.DAO_DABId = T2.DAB_ID INNER JOIN Nazwa_bazy_XL.cdn.Slowniki AS S ON S.SLW_ID = T2.DAB_TypId LEFT JOIN Nazwa_bazy_z_polaczenia.dbo.DF_WorkAPProcess AS B1 ON B1.APW_DocumentID1 = T3.KSF_ID AND B1.APW_APDId = @PointId@ WHERE T3.KSF_DokTyp = 0 AND T3.KSF_DokNumer = 0 AND S.SLW_Predefiniowany = 247 AND B1.APW_Id IS NULL ORDER BY T2.DAB_CzasDodania DESC END TRY BEGIN CATCH DECLARE @ErrorMessage varchar(max) = 'Błąd listy: ' + ERROR_MESSAGE(); THROW 50001, @ErrorMessage, 1; END CATCH
-
- Dla kontrolki typu Załącznik na zakładce „Kontrolki”:
SELECT TOP 1 CAST(T2.DAB_Dane AS VARBINARY(MAX)) AS DaneBinarne, 'xml' AS Rozszerzenie, REPLACE(REPLACE(ISNULL(T2.DAB_Nazwa, 'FakturaKSeF'), '/', '_'), '\', '_') AS Nazwa FROM Nazwa_bazy_XL.cdn.KSeFDokumenty AS T3 INNER JOIN Nazwa_bazy_XL.cdn.DaneObiekty AS T1 ON T1.DAO_ObiTyp = 14560 AND T1.DAO_ObiNumer = T3.KSF_ID INNER JOIN Nazwa_bazy_XL.cdn.DaneBinarne AS T2 ON T1.DAO_DABId = T2.DAB_ID WHERE T3.KSF_ID = @Id1@ AND T2.DAB_Rozszerzenie = 'xml' AND T2.DAB_Dane IS NOT NULL
- Dla bazy Comarch ERP XL (dla dokumentów, które zostały wygenerowane z poczekalni do rejestru VAT):
- Dla zakładki „Lista”:
BEGIN TRY SELECT T1.TrN_GIDNumer AS Id1, T1.TrN_GIDTyp AS Id2, CAST( RTRIM(CDN.NazwaObiektu(T1.TrN_GIDTyp, T1.TrN_GIDNumer, 0, 2)) + ' ' + ISNULL(T3.Knt_Akronm, '') AS VARCHAR(100)) AS [Nazwa Faktury], CONCAT(CDN.NazwaObiektu(T1.TrN_GIDTyp, T1.TrN_GIDNumer, 0, 2), ' | ', T3.Knt_Akronim) AS [InformacjeWyswietlaneNaLiscie] FROM CDN.TraNag AS T1 WITH (NOLOCK) INNER JOIN CDN.KSeFDokumenty AS T2 WITH (NOLOCK) ON T1.TrN_GIDTyp = T2.KSF_DokTyp AND T1.TrN_GIDNumer = T2.KSF_DokNumer LEFT JOIN CDN.KntKarty AS T3 WITH (NOLOCK) ON T1.TrN_KntNumer = T3.Knt_GIDNumer AND T1.TrN_KntTyp = T3.Knt_GIDTyp LEFT JOIN dbo.DF_WorkAPProcess AS B1 ON B1.APW_DocumentID1 = T1.TrN_GIDNumer AND B1.APW_DocumentID2 = T1.TrN_GIDTyp AND B1.APW_APDId = @PointId@ WHERE T1.TrN_GIDTyp IN (1521) AND B1.APW_ID IS NULL AND EXISTS (SELECT 1 FROM cdn.DaneObiekty AS DOB WHERE DOB.DAO_ObiTyp = 14560 AND DOB.DAO_ObiNumer = T2.KSF_ID) ORDER BY T1.TrN_DataWplywu DESC END TRY BEGIN CATCH DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd: ' + ERROR_MESSAGE(); THROW 50001, @ErrorMessage ,1; END CATCH
-
- Dla kontrolki typu Załącznik na zakładce „Kontrolki”:
SELECT TOP 1 CAST(T2.DAB_Dane AS VARBINARY(MAX)) AS DaneBinarne, 'xml' AS Rozszerzenie FROM cdn.KSeFDokumenty AS T3 INNER JOIN cdn.DaneObiekty AS T1 ON T1.DAO_ObiTyp = 14560 AND T1.DAO_ObiNumer = T3.KSF_ID INNER JOIN cdn.DaneBinarne AS T2 ON T1.DAO_DABId = T2.DAB_ID WHERE T3.KSF_DokNumer = @Id1@ /*pobiera TrN_GIDNumer dokumentu XL*/ AND T3.KSF_DokTyp = @Id2@ /*pobiera TrN_GIDTyp dokumentu XL*/ AND T2.DAB_Rozszerzenie = 'xml' AND T2.DAB_Dane IS NOT NULL
- Dla bazy Comarch ERP Optima (dla dokumentów z poczekalni):
- Dla zakładki „Lista”:
BEGIN TRY SELECT T1.DKF_DKFID AS Id1, 0 AS Id2, REPLACE(T1.DKF_NumerDokumentu, '/', '_') AS [Numer Dokumentu], T1.DKF_NumerDokumentu AS [Numer Oryginalny], T1.DKF_NumerKSeF AS [Numer KSeF], T1.DKF_PelnaNazwa AS [Kontrahent], T1.DKF_Brutto AS [Kwota], 'xml' AS Typ FROM Nazwa_bazy_Optima.CDN.DokumentyKSeF AS T1 LEFT JOIN Nazwa_bazy_z_polaczenia.dbo.DF_WorkAPProcess AS B1 ON B1.APW_DocumentID1 = T1.DKF_DKFID AND B1.APW_APDId = @PointId@ WHERE (T1.DKF_WartoscXml IS NOT NULL OR T1.DKF_Html IS NOT NULL) AND B1.APW_Id IS NULL ORDER BY T1.DKF_DataPozyskania DESC END TRY BEGIN CATCH SELECT ERROR_MESSAGE() AS ErrorMessage; END CATCH
-
- Dla kontrolki typu Załącznik na zakładce „Kontrolki”:
SELECT CAST(DKF_WartoscXml AS NVARCHAR(MAX)) AS DaneBinarne, 'xml' AS Rozszerzenie, REPLACE(REPLACE(ISNULL(DKF_NumerDokumentu, 'Faktura'), '/', '_'), '\', '_') AS Nazwa FROM Nazwa_bazy_Optima.CDN.DokumentyKSeF WHERE DKF_DKFID = @Id1@
- Dla bazy Comarch ERP Optima (dla dokumentów, które zostały wygenerowane z poczekalni do rejestru VAT):
- Dla zakładki „Lista”:
BEGIN TRY SELECT V.VaN_VaNID AS Id1, /* Klucz podpięty pod pobieranie załącznika */ V.VaN_Typ AS Id2, /* Typ dokumentu (dla rejestru zakupu to 1) */ -- Nazwa Faktury (zrzutowana na VARCHAR dla zgodności z interfejsem) CAST( RTRIM(V.VaN_Dokument) + ' ' + ISNULL(V.VaN_KntNazwa1, '') AS VARCHAR(255)) AS [Nazwa Faktury], -- Pełna informacja na listę CONCAT(V.VaN_Dokument, ' | ', V.VaN_KntNazwa1) AS [InformacjeWyswietlaneNaLiscie] FROM CDN.VatNag AS V WITH (NOLOCK) INNER JOIN CDN.DokumentyKSeF AS K WITH (NOLOCK) ON V.VaN_VaNID = K.DKF_VaNId LEFT JOIN dbo.DF_WorkAPProcess AS B1 ON B1.APW_DocumentID2 = V.VaN_VaNID AND B1.APW_APDId = @PointId@ WHERE V.VaN_Typ = 1 /* Rejestr Zakupów */ AND K.DKF_Typ = 1 /* Dokumenty KSeF zakupowe */ AND B1.APW_ID IS NULL /* Tylko nieprzeprocesowane */ ORDER BY V.VaN_DataZap DESC END TRY BEGIN CATCH DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd: ' + ERROR_MESSAGE(); THROW 50001, @ErrorMessage, 1; END CATCH
-
- Dla kontrolki typu Załącznik na zakładce „Kontrolki”:
SELECT CAST(DKF_WartoscXml AS NVARCHAR(MAX)) AS DaneBinarne, 'xml' AS Rozszerzenie, REPLACE(REPLACE(ISNULL(DKF_NumerDokumentu, 'Faktura'), '/', '_'), '\', '_') AS Nazwa FROM Nazwa_bazy_Optima.CDN.DokumentyKSeF WHERE DKF_VaNId = @Id1@




