Baza wiedzy LINKSPOT › Wskazówki

Akceptacja Faktury kosztowej w Comarch BPM pobranej z Comarch ERPXL

Wskazówki · Opublikowano 2026-04-22

Zastosowanie

Scenariusz opisuje proces akceptacji dokumentów w systemie Comarch BPM, które zostały uprzednio pobrane z Krajowego Systemu e-Faktur (KSeF) do systemu Comarch ERP XL. Głównym celem rozwiązania jest automatyzacja procesu akceptacji faktur kosztowych oraz zapewnienie natychmiastowej informacji zwrotnej o stanie dokumentu w systemie Comarch ERPXL. Dzięki wykorzystaniu unikalnego identyfikatora dokumentu z bazy Comarch ERP XL (Trn_GIDNumer), system Comarch BPM dynamicznie zaczytuje szczegółowe informacje bezpośrednio do kontrolek na karcie obiegu oraz kontrolki tabelarycznej ‘Elementy’ lub ‘Tabela VAT’.

Zawartość przykładu

Kliknij, aby pobrać przykład

Zasada działania

Proces automatyzacji opiera się na integracji bazy danych ERP XL z procesem BPM:

Przygotowanie systemu Comarch ERP XL

Definicja Atrybutów

W systemie Comarch ERP XL zdefiniowano trzy dedykowane klasy atrybutów. Ich głównym zadaniem jest przechowywanie informacji zwrotnej z procesu akceptacji, dzięki czemu pracownik księgowości ma pełny wgląd w historię dokumentu bez konieczności opuszczania systemu Comarch ERP XL.

Okno: Definicja atrybutów

Konfiguracja poszczególnych atrybutów:

  1. Akceptacja w BPM (Typ: Tekst) – przechowuje aktualny etap procesu:

Klasa atrybutu Akceptacja w BPM

  1. Numer Dokumentu BPM (Typ: Tekst) – unikalny numer nadany dokumentowi w systemie Comarch BPM.

Klasa atrybutu Numer Dokumentu BPM

  1. Link BPM (Typ: Adres URL) – aktywny odnośnik pozwalający jednym kliknięciem otworzyć podgląd dokumentu w wersji Comarch BPM Web bezpośrednio z poziomu Comarch ERPXL.

Klasa atrybutu Link BPM

Definicja kolumn w Rejestrze VAT

W celu zapewnienia bieżącego monitoringu, do listy w Rejestrze VAT dodano kolumny wyświetlające status akceptacji i numer dokumentu BPM. Dane te pojawiają się na dokumencie i liście w momencie, gdy użytkownik po stronie systemu Comarch BPM wywoła dedykowaną Własną Akcję, która przesyła aktualne informacje z procesu bezpośrednio do atrybutów w systemie ERP XL.

Lista dodatkowych kolumn w oknie Rejestr Vat zakupu

Kolumny:

  1. Status Akceptacji w BPM:
SELECT

k1.StatusAkceptacji_BPM AS [Status_Akceptacji_w_BPM]

FROM

(SELECT

TrN_GIDTyp AS DokGIDTyp,

TrN_GIDNumer AS DokGIDNumer,Atr_Wartosc AS StatusAkceptacji_BPM

FROM cdn.TraNag WITH (NOLOCK)

JOIN cdn.Atrybuty WITH (NOLOCK) ON

Atr_ObiTyp = TrN_GIDTyp

AND

Atr_ObiNumer = TrN_GIDNumer AND

Atr_AtkId = 8 /*W tym miejscu należy wpisać właściwe ID klasy atrybutu z tabeli cdn.AtrybutyKlasy*/

AND

Atr_ObiLp = 0

) AS k1

WHERE {filtrsql}

Kolumna Status Akceptacji w BPM

  1. Numer Dokumentu BPM:
SELECT

k1.NumerBPM AS [Numer_Dokumentu_BPM]

FROM

(SELECT

trn_GIDtyp AS DokGIDTyp,

trn_GIDnumer AS DokGIDNumer,

Atr_Wartosc AS NumerBPM

FROM cdn.TraNag WITH (NOLOCK)

JOIN cdn.Atrybuty WITH (NOLOCK) ON

Atr_ObiTyp = trn_GIDtyp

AND

Atr_ObiNumer = trn_GIDnumer AND

Atr_AtkId = 9 /*W tym miejscu należy wpisać właściwe ID klasy atrybutu z tabeli cdn.AtrybutyKlasy*/

AND

Atr_ObiLp = 0

) AS k1

WHERE {filtrSQL}

Kolumna Numer Dokumentu BPM

Konfiguracja Punktu ACD

W celu umożliwienia akceptacji dokumentów pobranych z Comarch ERPXL w systemie Comarch BPM, skonfigurowano punkt o trybie współpracy: Współpraca z dowolnym programem OCR:

Tryb współpracy – Współpraca z dowolnym programem OCR

  1. Zakładka Ogólne: Skonfigurowano połączenie do bazy Comarch ERPXL, z której będą pobierane dokumenty.

Zakładka ogólna

W polu Połączenie do bazy po kliknięciu opcji Zmień, uzupełniono

Połączenie do bazy

Login i hasło administratora bazy danych MS SQL

W konfiguracji punktu ACD, w zakładce Ogólne, kluczowym elementem jest prawidłowe zdefiniowanie polecenia INSERT INTO. Odpowiada ono za zapisanie informacji o dokumencie, który właśnie został pobrany z systemu Comarch ERP XL i przekazany do procesu w Comarch BPM.

Dzięki temu wpisowi, dokument trafia do tabeli technicznej dbo.DF_WorkAPProcess, na bazie Comarch ERPXL, co w połączeniu z warunkiem w zapytaniu SQL na zakładce Lista, powoduje jego automatyczne ukrycie w punkcie ACD. Zapobiega to wielokrotnemu pobieraniu tej samej faktury i dublowaniu procesów akceptacji.

W oknie „Polecenie INSERT” zdefiniowano następującą składnię:

INSERT INTO dbo.[DF_WorkAPProcess] (APW_APDId, APW_DocumentID1, APW_DocumentID2) VALUES({0},{1},{2})

Parametry:

Polecenie Insert

Aby zapewnić pełną automatyzację i uniknąć duplikowania dokumentów w procesie, użytkownik CDNODRole (posiadający uprawnienia do bazy danych Comarch ERP XL, którym posługuje się system Comarch BPM) musi posiadać uprawnienia do zapisu (INSERT) w tabeli technicznej dbo.DF_WorkAPProcess, stworzonej na potrzeby integracji.

Uwaga

Brak uprawnienia Insert na tabeli dbo.DF_WorkAPProcess spowoduje, że po utworzeniu dokumentu w Comarch BPM, system nie będzie mógł zapisać informacji o tym fakcie w bazie Comarch ERP XL. W efekcie dokument nie zniknie z listy w punkcie ACD, co doprowadzi do wielokrotnego (błędnego) procesowania tej samej faktury.

Uprawnienie Insert

  1. Zakładka Lista: Wprowadzono poniższe zapytanie, które pobiera listę dokumentów gotowych do akceptacji oraz ich unikalne ID (Trn_GIDNumer):
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_Akronim, '') 
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
  1. Zakładka Kontrolki: Dodano kontrolkę IDTrn_GidNumer (ID_XL) i przypisano jej zapytanie, które pobiera GIDNumer dokumentu z  Comarch ERPXL:
select @Id1@

Zakładka Kontrolki

  1. Zakładka Kontrolki: Dodano kontrolkę Załącznik (Attachment1) i przypisano jej zapytanie, które pobiera załącznik z dokumentu z  Comarch ERPXL:
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

Uwaga

Aby była możliwość wyświetlenia wizualizacji dokumentu KSeF należy zaznaczyć: Konwertuj pliki KSeF *_xml do *.pdf

Zakładka Kontrolki

Konfiguracja kontrolek na karcie obiegu

W definicji dokumentu, do każdej kontrolki przypisano zapytanie SQL, które na podstawie pobranego ID (przekazanego do parametru @ID_XL@) pobiera konkretne dane z bazy.

Przykładowe zapytania dla kontrolek:

select TrN_DokumentObcy from cdn.tranag where TrN_GIDTyp=1521 and TrN_GIDNumer = @ID_XL@
select knt_gidnumer from cdn.tranag

join cdn.kntkarty on Knt_GIDNumer=TrN_KntNumer

where TrN_GIDTyp=1521 and TrN_GIDNumer = @ID_XL@
IF @^SenderControlName@ = 'Kontrahent'

BEGIN

DECLARE @newLine varchar(max) = char(13)+char(10)

SELECT CONCAT(Knt_Nazwa1, @NewLine, 'NIP: '+ Knt_Nip, @NewLine, Knt_Ulica, ' ',@newLine,Knt_KodP,' ',Knt_Miasto)

FROM cdn.KntKarty

WHERE Knt_GIDNumer= @Kontrahent_Id@

END
select kon_lp, TrN_FormaNazwa, kon_lp from cdn.tranag

join cdn.konfig on TrN_FormaNazwa=ltrim(rtrim(left(kon_wartosc,15))) where trn_gidnumer= @ID_XL@
select WaN_Id, TrN_Waluta, WaN_Id from cdn.tranag

join cdn.WalNag on TrN_Waluta=WaN_Symbol where TrN_GIDNumer=@ID_XL@

(Zaznaczona Inicjalizacja SQL tylko na pierwszym etapie zakładka Kontrolki oraz na właściwościach kontrolki – Inicjuj przy każdym otwarciu dokumentu)

SELECT
'http://localhost/Przyklady_WEB/documents/' + CAST(DWD_ID AS VARCHAR) AS LinkBPM
FROM do.DF_Work
WHERE DWD_ID =  @^DocumentId@  /*ID aktualnego dokumentu BPM*/

(Zaznaczona Inicjalizacja SQL tylko na pierwszym etapie zakładka Kontrolki oraz na właściwościach kontrolki – Inicjuj przy każdym otwarciu dokumentu)

select DWD_FullNumber from do.RO_Documents where DWD_ID= @^DocumentId@

(Zaznaczona Inicjalizacja SQL na każdym etapie zakładka Kontrolki oraz na właściwościach kontrolki – Inicjuj przy każdym otwarciu dokumentu)

SELECT DDS_Name FROM do.RO_StageActive  WHERE DWD_ID=  @^DocumentId@
Procedura ERP:

UPDATE a
SET a.Atr_Wartosc = CASE
WHEN ak.AtK_Id = 8 THEN @Status_akceptacji_BPM@
WHEN ak.AtK_Id = 9 THEN @NumerDokumentuBPM@
WHEN ak.AtK_Id = 10 THEN 'http://localhost/Przyklady_WEB/documents/' + CAST(@^DocumentId@ AS VARCHAR)
END
FROM cdn.Atrybuty a
JOIN cdn.AtrybutyKlasy ak ON a.Atr_AtkId = ak.AtK_Id
JOIN cdn.TraNag t ON t.TrN_GIDTyp = a.Atr_ObiTyp AND t.TrN_GIDNumer = a.Atr_ObiNumer
WHERE t.TrN_GIDNumer = @ERPDocument1_Id@
AND ak.AtK_Id IN (8, 9, 10)
AND a.Atr_ObiLp = 0
AND a.Atr_ObiSubLp = 0
select KSF_Numer from cdn.tranag

join cdn.KSeFDokumenty on TrN_GIDNumer=KSF_DokNumer

where TrN_GIDTyp=1521 and TrN_GIDNumer= @ID_XL@
SELECT

-- Konwersja daty i godziny przyjęcia dokumentu przez KSeF

DATEADD(second, T1.KSF_TStampPrzyjecia, '1990-01-01') AS DataGodzinaPrzyjeciaKSeF

FROM

cdn.KSeFDokumenty AS T1 where T1.KSF_DokTyp = 1521

AND T1.KSF_DokNumer = @ID_XL@
select DATEADD(day, trn_DataWplywu, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
select DATEADD(day, trn_data3, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
select DATEADD(day, trn_data2, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
select dateadd(dd, TrN_Termin, '18001228') from CDN.tranag where TrN_GIDNumer= @ID_XL@
select TrN_GIDNumer from cdn.TraNag WHERE TrN_GIDTyp = 1521 AND TrN_GIDNumer= @ID_XL@
If @^SenderControlName@ = 'ID_XL'

Begin

SELECT

TrE_TwrKod,

TrE_Cena,

TrE_Ilosc,

TrE_WartoscPoRabacie AS Netto,

TrV_StawkaPod, -- Będzie NULL dla pozycji, które nie mają wiersza w TraVat

TrE_WartoscPoRabacie + TrE_WartoscPoRabacie * (ISNULL(TrV_StawkaPod, 0) / 100.0) AS Brutto

FROM cdn.TraNag

JOIN cdn.TraElem ON TrN_GIDNumer = TrE_GIDNumer

-- ZMIENIONO NA LEFT JOIN, aby zwrócić wszystkie pozycje z TraElem, nawet jeśli nie mają powiązań w TraVat

LEFT JOIN cdn.TraVat ON TrV_GIDNumer = TrE_GIDNumer AND TrV_GidLp = TrE_GIDLp

WHERE

TrN_GIDTyp = 1521

AND TrN_GIDNumer = @ID_XL@ ;

END
BEGIN TRY

If @^SenderControlName@ = 'ID_XL'

Begin

SELECT

/* Kwota Netto dla danej stawki */

TrV_NettoP AS Netto,

/* Kwota VAT dla danej stawki */

TrV_VatP AS KwotaVAT,

/* Kwota Brutto dla danej stawki */

(TrV_NettoP + TrV_VatP) AS Brutto

FROM

cdn.TraNag

JOIN

cdn.TraVat ON TrN_GIDTyp = TrV_GIDTyp AND TrN_GIDNumer = TrV_GIDNumer

WHERE

TrN_GIDNumer = @ID_XL@ ;

END

END TRY

BEGIN CATCH

DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE();

THROW 50001, @ErrorMessage ,1;

END CATCH

Uzupełniony dokument w Comarch BPM

Przebieg procesu

  1. Rejestracja dokumentu w systemie Comarch ERP XL: Faktura zostaje pobrana z bramki KSeF do Comarch ERPXL do tzw. Poczekalni KSeF (okno Faktury zakupu z KSeF) i na jej podstawie zarejestrowana w systemie Comarch ERP XL. W tym momencie dokument staje się widoczny w Rejestrze VAT, jednak nie posiada jeszcze przypisanych parametrów dotyczących akceptacji merytorycznej – oczekuje na zainicjowanie obiegu.

  2. Inicjacja obiegu w systemie BPM: Dokument jest pobierany w punkcie ACD systemu Comarch BPM. Po wybraniu faktury do procesu, system samodzielnie rozpoznaje dokument i uzupełnia kartę obiegu danymi nagłówkowymi oraz pozycjami (np. dane dostawcy, kwoty, tabela VAT). Dane te są pobierane bezpośrednio z bazy ERP XL, co eliminuje ryzyko błędów przy ręcznym wprowadzaniu informacji.

Dokumenty z Comarch ERP XL zostały pobrane do punktu ACD i poprawnie zainicjowane w Comarch BPM.

Pobrane dokumenty w punkcie ACD

Inicjowanie dokumentu w punkcie ACD

Dane na karcie obiegu zostały zaczytane dynamicznie z bazy Comarch ERP XL na podstawie unikalnego identyfikatora ID_XL (TrN_GIDNumer). System wykorzystał ten klucz, aby wykonać zapytania SQL przypisane do poszczególnych kontrolek, co wyeliminowało konieczność ręcznego przepisywania danych z faktury.

Karta obiegu

  1. Weryfikacja merytoryczna i użycie Własnej Akcji: Osoba odpowiedzialna dokonuje weryfikacji dokumentu (możliwe jest to zarówno w aplikacji stacjonarnej, jak i poprzez przeglądarkę internetową). Po sprawdzeniu poprawności, następuje użycie przycisku Własnej Akcji. Działanie to powoduje nie tylko przejście dokumentu do kolejnego etapu, ale przede wszystkim zwrotne przesłanie informacji do systemu ERP XL.

Aktualizacja danych

  1. Aktualizacja statusu w Rejestrze VAT W wyniku wykonanej akcji, w systemie Comarch ERP XL przy danym dokumencie automatycznie uzupełniane są kluczowe informacje:

Atrybuty na dokumencie (A)FZ

Dokumenty w Rejestrze VAT – zaktualizowane atrybuty

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?

Sprawdź Szkolenia Comarch BPM!

Powrót do początku artykułu

+ Mam problem z tym tematem Otwórz w portalu bazy wiedzy »