Akceptacja Faktury kosztowej w Comarch BPM pobranej z Comarch ERPXL
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
- Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne.
Zasada działania
Proces automatyzacji opiera się na integracji bazy danych ERP XL z procesem BPM:
-
- Pobranie i Rejestracja (ERPXL): Dokument zostaje pobrany z bramki KSeF do Comarch ERPXL. Na jego podstawie tworzony jest dokument w Rejestrze VAT (tabela CDN.TraNag).
- Pobranie dokumentów przez Comarch BPM: Poprzez punkt ACD (Współpraca z dowolnym programem OCR ) do Comarch BPM zostają pobrane dokumenty z systemu Comarch ERPXL.
- Pobranie ID dokumentu: W punkcie ACD pobierany jest unikalny identyfikator dokumentu z bazy Comarch ERPXL (Trn_GIDNumer)
- Tworzenie dokumentów w Comarch BPM: Na podstawie pobranych danych z poziomu punktu ACD tworzone są dokumenty w Comarch BPM, w celu ich akceptacji.
- Automatyczne uzupełnianie danych: Informacje w poszczególnych kontrolkach karty obiegu są uzupełniane automatycznie na podstawie ID dokumentu, zaczytanego w punkcie ACD. Wykorzystując ten unikalny klucz, system za pomocą zapytań SQL zaczytuje szczegółowe dane bezpośrednio z bazy Comarch ERPXL.
- Po zainicjowaniu procesu w systemie Comarch BPM użytkownik za pomocą kontrolki Własna Akcja przesyła do dokumentu w Comarch ERP XL informacje o aktualnym statusie akceptacji, nadanym numerze dokumentu BPM wraz z bezpośrednim linkiem do podglądu faktury w Comarch BPM Web. Dane te są zapisywane w dedykowanych atrybutach, co umożliwia bieżące monitorowanie postępu prac bez konieczności opuszczania systemu księgowego. Dzięki temu kluczowe parametry procesu, są widoczne bezpośrednio na dokumencie w Rejestrze VAT oraz na liście dokumentów
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.

Konfiguracja poszczególnych atrybutów:
1. Akceptacja w BPM (Typ: Tekst) – przechowuje aktualny etap procesu:
- „Do weryfikacji”
- ,„W trakcie akceptacji”
- „Zaakceptowano”
- Służy do bieżącego informowania o statusie dokumentu. Dzięki niemu księgowy ma natychmiastowy wgląd w postęp akceptacji faktury (np. „W weryfikacji” lub „Zaakceptowano”). Rozwiązanie to eliminuje konieczność angażowania innych pracowników w celu ustalenia etapu, na którym znajduje się dokument oraz skraca czas oczekiwania na informację zwrotną.

2. Numer Dokumentu BPM (Typ: Tekst) – unikalny numer nadany dokumentowi w systemie Comarch BPM.
-
- Jest to unikalny „identyfikator śledzenia”. Pozwala on na jednoznaczne powiązanie faktury w Comarch ERP XL z konkretnym dokumentem w Comarch BPM. Jest niezbędny w przypadku audytu lub konieczności szybkiego odnalezienia dokumentu w archiwum elektronicznym.

3. 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.
-
- Rozwiązanie to umożliwia weryfikację i akceptację faktury z poziomu przeglądarki internetowej Comarch BPM Web, bez konieczności logowania się do wersji stacjonarnej (Desktop). Zapewnia to pełną mobilność procesu akceptacji, skraca czas weryfikacji dokumentów kosztowych i znacząco podnosi komfort pracy osób decyzyjnych.

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.

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}

2. 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}

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:

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

W polu Połączenie do bazy po kliknięciu opcji Zmień, uzupełniono
-
- Nazwę serwera, na którym jest podpięta baza Comarch ERPXL
- Nazwę bazy danych Comarch ERPXL z której mają być pobierane dokumenty
- Użytkownika ODUSER zmapowanego z tą bazą
- Hasło dla użytkownika ODUSER

-
- Tworzenie tabeli: Utworzono tabelę poprzez kliknięcie opcji Utwórz tabelę, która przechowuje informacja o utworzonych dokumentach, podając login i hasło administratora bazy danych MS SQL.

-
- Mechanizm oznaczania dokumentów przetworzonych (Polecenie INSERT)
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:
- APW_APDId ({0}): Unikalny identyfikator punktu ACD.
- APW_DocumentID1 ({1}): Typ dokumentu z Comarch ERPXL (TrN_GIDTyp).
- APW_DocumentID2 ({2}): Numer identyfikacyjny dokumentu z Comarch ERPXL (TrN_GIDNumer).

-
- Wymagania techniczne i Uprawnienia SQL
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.

2. Zakładka Lista: Wprowadzono poniższe zapytanie, które pobiera listę dokumentów gotowych do akceptacji oraz ich unikalne ID (Trn_GIDNumer):
SELECT T1.TrN_GIDTyp, T1.TrN_GIDNumer, /*Złączenie informacji z kilku kolumn do prezentacji danych na liście w punkcie ACD'*/ CONCAT( CDN.NazwaObiektu(T1.TrN_GIDTyp, T1.TrN_GIDNumer, 0, 2), ' | ', T3.Knt_Akronim, ' | ', CONVERT(VARCHAR(10), DATEADD(dd, T1.TrN_DataWplywu, '18001228'), 104) ) AS [InformacjeWyswietlaneNaLiscie] FROM CDN.TraNag AS T1 INNER JOIN CDN.KSeFDokumenty AS T2 ON T1.TrN_GIDTyp = T2.KSF_DokTyp AND T1.TrN_GIDNumer = T2.KSF_DokNumer LEFT JOIN CDN.KntKarty AS T3 ON T1.TrN_KntNumer = T3.Knt_GIDNumer AND T1.TrN_KntTyp = T3.Knt_GIDTyp LEFT JOIN dbo.DF_WorkAPProcess AS B1 /*Tabela przeprocesowanych dokumentów*/ ON B1.APW_DocumentID1 = T1.TrN_GIDTyp AND B1.APW_DocumentID2 = T1.TrN_GIDNumer AND B1.APW_APDId =@PointId@ /*ID punktu ACD z tabeli do.DF_ConfAPDictionary pobierane dynamicznie*/ WHERE T1.TrN_GIDTyp IN ( -- 1312, -- FZL 1521 -- FZ, (S)FZ, (s)FZ, (A)FZ -- 1529, -- (A)FZK --2033 -- FS ) AND B1.APW_ID IS NULL /*Warunek zawężający listę wyników do dokumentów nieprzeprocesowanych*/ AND T2.KSF_TypOperacji IN (1,3,0) /*1 - dokumenty zaimportowane z KSeF, 2 - dokumenty zaimportowane z pliku, 3 - dokumenty KSeF wprowadzone ręcznie*/
3. Zakładka Kontrolki: Dodano kontrolkę IDTrn_GidNumer (ID_XL) i przypisano jej zapytanie, które pobiera GIDNumer dokumentu z Comarch ERPXL:

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:
- Numer dokumentu:
select TrN_DokumentObcy from cdn.tranag where TrN_GIDTyp=1521 and TrN_GIDNumer = @ID_XL@
- Kontrahent:
select knt_gidnumer from cdn.tranag join cdn.kntkarty on Knt_GIDNumer=TrN_KntNumer where TrN_GIDTyp=1521 and TrN_GIDNumer = @ID_XL@
- Dane kontrahenta:
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
- Forma płatności:
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@
- Waluta:
select WaN_Id, TrN_Waluta, WaN_Id from cdn.tranag join cdn.WalNag on TrN_Waluta=WaN_Symbol where TrN_GIDNumer=@ID_XL@
- LinkBPM
(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*/
- NumerDokumentuBPM
(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@
- Status_akceptacji_BPM
(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@
- Własna Akcja – Aktualizacja_Atrybuty
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
- Numer KSeF:
select KSF_Numer from cdn.tranag join cdn.KSeFDokumenty on TrN_GIDNumer=KSF_DokNumer where TrN_GIDTyp=1521 and TrN_GIDNumer= @ID_XL@
- Data przyjęcia KSeF:
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@
- Data wpływu:
select DATEADD(day, trn_DataWplywu, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
- Data zakupu:
select DATEADD(day, trn_data3, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
- Data wystawienia:
select DATEADD(day, trn_data2, '18001228') from cdn.tranag where TrN_GIDNumer = @ID_XL@
- Termin płatności:
select dateadd(dd, TrN_Termin, '18001228') from CDN.tranag where TrN_GIDNumer= @ID_XL@
- Dokument elektroniczny:
select TrN_GIDNumer from cdn.TraNag WHERE TrN_GIDTyp = 1521 AND TrN_GIDNumer= @ID_XL@
- Zapytanie do kontrolki Dane tabelaryczne Elementy, w przypadku, gdy na fakturze są elementy:
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
- Zapytanie do kontrolki Dane tabelaryczne Tabela VAT, w przypadku, gdy na fakturze brak elementów, a informacje dodawane są bezpośrednio do Tabeli VAT
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 kosztowa zostaje pobrana z bramki KSeF i 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.


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.

3. 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.

4. Aktualizacja statusu w Rejestrze VAT W wyniku wykonanej akcji, w systemie Comarch ERP XL przy danym dokumencie automatycznie uzupełniane są kluczowe informacje:
- Status akceptacji: (np. „Do weryfikacji”, „W trakcie akceptacji” lub „Zaakceptowano”).
- Numer dokumentu BPM: pozwalający na jednoznaczną identyfikację dokumentu BPM.
- Link źródłowy: umożliwiający natychmiastowe otwarcie podglądu faktury w przeglądarce Comarch BPM Web bezpośrednio z poziomu dokumentu w Rejestrze VAT.

