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

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

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

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:


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.

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.


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






