Baza wiedzy LINKSPOT › Wskazówki

Obsługa reguł użytkowników na punkcie ACD typu „Import dokumentów zakupu z KSeF”

Wskazówki · Opublikowano 2026-04-29

W wersji 2026.1.0 umożliwiono obsługę reguł użytkowników na punkcie ACD typu „Import dokumentów zakupu z KSeF” w aplikacji desktop Comarch BPM – operator może określić, do jakich faktur ma dostęp dany pracownik i jak mają być procesowane, istnieje także możliwość wprowadzenia filtrowania według personalizowanych list i reguł. Umożliwiono także opcję generowania zapytania SQL w obrębie definicji indywidualnych list dokumentów.

Definiowanie punktu konfiguracyjnego

Zmiany na zakładce „Lista”

W zależności od oczekiwanego rezultatu należy wprowadzić odpowiednie zapytanie na zakładce „Lista“ – od wersji 2026.1.0 podstawowa forma tego zapytania jest następująca:

BEGIN TRY

SELECT d.KSD_Id, NULL, KSD_NumerFaktury, KSD_Tag1, KSD_Tag2, KSD_Tag3, KSD_Rule

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 (@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@)

and ((nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury LIKE '%' + @SearchText@ + '%'))

OR (@SearchText@ <> '' and KSD_Tag1 LIKE '%' + @SearchText@ + '%')

OR (@SearchText@ <> '' and KSD_Tag2 LIKE '%' + @SearchText@ + '%')

OR (@SearchText@ <> '' and KSD_Tag3 LIKE '%' + @SearchText@ + '%')

OR (@SearchText@ <> '' and KSD_Rule LIKE '%' + @SearchText@ + '%'))

/*miejsce na dodatkowe warunki operatora*/

END TRY

BEGIN CATCH

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

THROW 50001, @ErrorMessage ,1;

END CATCH

Poniżej przedstawiono przykładowe zapytanie na zakładce „Lista“, gdy zostały wprowadzone dodatkowe warunki – przykład pokazuje również przykładowy wygląd listy dokumentów w punkcie ACD, wynikający z tego zapytania oraz reguł zdefiniowanych na zakładkach „Reguły“ (zob. Dodanie nowej zakładki „Reguły”) i „Uprawnienia“ (zob. Zmiany na zakładce „Uprawnienia”):

Przyklad

W ramach zakładki „Lista” wprowadzono zapytanie z dodatkowymi warunkami, które mają spowodować, aby:

Zapytanie:

BEGIN TRY 

    SELECT d.KSD_Id, NULL, KSD_NumerFaktury, KSD_Tag1, KSD_Tag2, KSD_Tag3, KSD_Rule 
     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 = KSC_DocumentId 
     where KSW_APDId=@PointId@ -- id punktu ACD 
     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 (@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@) 
     and ((nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury LIKE '%' + @SearchText@ + '%')) 
     OR (@SearchText@ <> '' and KSD_Tag1 LIKE '%' + @SearchText@ + '%')  
     OR (@SearchText@ <> '' and KSD_Tag2 LIKE '%' + @SearchText@ + '%')  
     OR (@SearchText@ <> '' and KSD_Tag3 LIKE '%' + @SearchText@ + '%') 
     OR (@SearchText@ <> '' and KSD_Rule LIKE '%' + @SearchText@ + '%')) 

    /*miejsce na dodatkowe warunki operatora*/ 

   AND ( 
        -- 1. PRZYPADEK: Brak zdefiniowanych reguł (Operator widzi wszystkie faktury nieprzypisane do reguł) 
        NOT EXISTS ( 
            SELECT 1 FROM do.DF_ConfAPRulesAccess  
            WHERE APS_DCDId = @IdOperatorBPM@  
              AND APS_APDId = @PointId@ 
              AND APS_Archival = 0 
        ) 
        OR 
        -- 2. PRZYPADEK: Administrator (Widzi swoje reguły ORAZ dokumenty nieprzypisane do żadnej reguły) 
        ( 
            EXISTS (SELECT 1 FROM do.DF_ConfOSDictionary WHERE DCD_Id = @IdOperatorBPM@ AND DCD_Role = 1) 
            AND (d.KSD_Rule IS NULL OR d.KSD_Rule = '') 
        ) 
        OR 
        -- 3. PRZYPADEK: Operator z regułami (Widzi wyłącznie dokumenty przypisane do jego reguł) 
        d.KSD_Rule IN ( 
            SELECT APR.APR_Name  
            FROM do.DF_ConfAPRules APR 
            JOIN do.DF_ConfAPRulesAccess APS ON APR.APR_ID = APS.APS_APRId 
            WHERE APS.APS_DCDId = @IdOperatorBPM@  
              AND APS.APS_APDId = @PointId@ 
              AND APS.APS_Archival = 0  
              AND APR.APR_Archival = 0 
        ) 
    ) 
    

 END TRY 
 BEGIN CATCH 
  DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd: ' + ERROR_MESSAGE(); 
  THROW 50001,  @ErrorMessage ,1;    
 END CATCH

Uwaga: W powyższym przykładzie należy dodatkowo na zakładce „Uprawnienia“ wybrać dla danych administratorów wszystkie reguły, które mają ich dotyczyć.

Na zakładce „Uprawnienia“ określono także indywidualną regułę dla jednego operatora – operatora Jan Kowal:

BEGIN TRY 
SELECT d.KSD_Id, NULL, ISNULL(KSD_NumerFaktury, 'NULL') + '|' + ISNULL(CONVERT(varchar, KSD_DataWystawienia, 104), 'NULL'), KSD_Tag1, KSD_Tag2, KSD_Tag3, KSD_Rule 
FROM do.KS_Documents d 
LEFT JOIN do.KS_WorkAPProcess W on d.KSD_Id = KSW_DocumentId 
LEFT JOIN do.KS_DocumentHeaders dh on d.KSD_Id = KSH_DocumentId 
LEFT JOIN do.KS_DocumentContractors dc on d.KSD_Id = KSC_DocumentId 
WHERE KSW_APDId=@PointId@ -- id punktu ACD 
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 (@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@) 
AND ((nullif(@SearchText@,'') is NULL OR (@SearchText@ <> '' and ISNULL(KSD_NumerFaktury, 'NULL') + '|' + ISNULL(CONVERT(varchar, KSD_DataWystawienia, 104), 'NULL') LIKE '%' + @SearchText@ + '%')) 
OR (@SearchText@ <> '' and KSD_Tag1 LIKE '%' + @SearchText@ + '%') 
OR (@SearchText@ <> '' and KSD_Tag2 LIKE '%' + @SearchText@ + '%') 
OR (@SearchText@ <> '' and KSD_Tag3 LIKE '%' + @SearchText@ + '%') 
OR (@SearchText@ <> '' and KSD_Rule LIKE '%' + @SearchText@ + '%')) 

/*miejsce na dodatkowe warunki operatora*/ 
AND d.KSD_DataWystawienia >= '2026-04-15' AND d.KSD_DataWystawienia < '2026-04-16' 

END TRY 
BEGIN CATCH 
DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd: ' + ERROR_MESSAGE(); 
THROW 50001, @ErrorMessage ,1; 
END CATCH

Uprawnienia operatorów określono w taki sposób, jak przedstawiono na poniższej ilustracji:

Przykładowa konfiguracja zakładki „Uprawnienia“

Następnie pobrano faktury z KSeF – po pobraniu wszystkich faktur został wyświetlony następujący komunikat:

Komunikat wyświetlony po pobraniu faktur z KSeF i zastosowaniu do nich reguł – przykład

Poniżej przedstawiono wygląd listy dokumentów dla każdego z przykładowych operatorów:

Lista faktur KSeF zawierająca faktury nieprzypisane do żadnej reguły – widok dla operatora, który nie jest administratorem i nie ma przypisanych reguł – w tym przypadku operatora Jan Nowak

Lista faktur KSeF zawierająca faktury przypisane do wszystkich reguł z zakładki „Reguły“ oraz faktury nieprzypisane do żadnej z tych reguł – widok operatora Administrator o uprawnieniach administratora, któremu na zakładce „Uprawnienia“ przypisano wszystkie reguły z zakładki „Reguły“

Lista faktur KSeF zawierająca faktury przypisane do dwóch reguł, do których uprawnienia nadano operatorowi Anna Maj

Lista faktur KSeF zawierająca faktury przypisane do indywidualnej reguły z zakładki „Uprawnienia“, którą przypisano operatorowi Jan Kowal

Dodanie nowej zakładki „Reguły”

W wersji 2026.1.0 w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” dodano zakładkę „Reguły”. W ramach tej zakładki administrator może zarządzać regułami, które mają na celu klasyfikowanie dokumentów importowanych z KSeF.

Aby dodać nową regułę, należy kolejno wykonać następujące kroki:

Zakładka „Reguły“ przed wprowadzeniem zmian – widoczny link „Dodaj“

Reguła powinna:

Zakładka „Reguły“ po wprowadzeniu nazwy reguły

Jeśli wprowadzona nazwa reguły pokrywa się z taką, która już istnieje w punkcie, wówczas po kliknięciu przycisku Enter zostanie otoczona czerwoną ramką i dalsze definiowanie reguły nie będzie możliwe do czasu zmiany nazwy.

Również w przypadku, gdy wprowadzono niedozwolone znaki, wtedy po kliknięciu przycisku Enter pole do wprowadzania nazwy faktury zostanie otoczone czerwoną ramką i dalsze definiowanie reguły nie będzie możliwe do czasu poprawy nazwy.

Jeżeli operator podejmie próbę zapisu punktu ACD z niepoprawną nazwą/nazwami reguł, wówczas zostanie wyświetlony komunikat o braku możliwości zapisu wraz z podaniem przyczyny.

Zakładka „Reguły“ po wprowadzeniu poprawnej nazwy reguły i kliknięciu Enter

Zakładka „Reguły“, gdy operator próbuje wprowadzić regułę niespełniającą warunków (ze zbyt krótką nazwą) oraz regułę, której nazwa jest analogiczna jak nazwa zapisanej reguły

Przykładowy komunikat wyświetlony, gdy operator próbuje zapisać punkt ACD, który zawiera: regułę niespełniającą warunków (ze zbyt krótką nazwą) oraz regułę, której nazwa jest analogiczna jak nazwa zapisanej reguły

Po kliknięciu Enter w ramach pola po prawej stronie można wprowadzić zapytanie SQL, mające na celu zawężenie listy wyświetlanych dokumentów – wówczas reguła jest gotowa do zastosowania i zostanie automatycznie przypisana do dokumentu, który spełnia warunki określone w zapytaniu, można ją też przypisać ręcznie na liście dokumentów.

Zapytanie SQL powinno spełniać następujące warunki:

Przyklad

Zapytanie:

SELECT d.KSD_Id 
FROM do.KS_Documents d  
where KSD_SumaBrutto > 4000
SELECT d.KSD_ID  
FROM do.KS_Documents d  
JOIN do.KS_DocumentContractors dc ON d.KSD_ID = dc.KSC_DocumentID  
WHERE dc.KSC_PodatnikNIP = '4694546358'
SELECT d.KSD_ID  
FROM do.KS_Documents d  
JOIN do.KS_DocumentContractors dc ON d.KSD_ID = dc.KSC_DocumentID 
JOIN do.KS_DocumentItems de ON d.KSD_ID = de.KSI_DocumentID  
WHERE dc.KSC_PodatnikNIP = '4694546358' 
AND de.KSI_ElementNazwa = 'Towar 1';

Alternatywnie, operator może pozostawić tylko samą nazwę reguły i nie wprowadzać dla niej zapytania SQL – wówczas reguła może zostać przypisana ręcznie na liście dokumentów.

Nowa reguła zostanie zapisana w bazie Comarch BPM dopiero po zapisaniu punktu ACD, w tabeli do.DF_ConfAPRules.

Uwaga

Nie jest możliwa edycja nazwy reguły po kliknięciu w przycisk Enter lub po przejściu do kolejnej reguły – aby zmienić nazwę reguły, należy ją usunąć i wprowadzić ponownie.

Obok nazwy reguły dostępna jest ikona kosza , po kliknięciu w którą zostanie wyświetlony komunikat , w którym należy potwierdzić chęć usunięcia reguły, klikając w przycisk [OK] – wówczas dana reguła zostanie usunięta. Jeśli operator chce zrezygnować z usuwania reguły, powinien kliknąć w tym oknie przycisk [Anuluj] lub X. Komunikat nie zostanie wyświetlony, jeśli jest to pierwsza konfiguracja punktu i nie został on jeszcze zapisany.

Uwaga

Jeżeli operator usunie regułę z zakładki „Reguły“, wówczas:

Zakładka „Reguły“ po wprowadzeniu zapytania dla reguły

Komunikat wyświetlony przy próbie usunięcia reguły

Jeśli operator wprowadził zapytanie SQL dla reguły, wówczas może:

Nowododaną regułę można następnie wybrać dla danego operatora uprawnionego do punktu – zob. Zmiany na zakładce „Uprawnienia”.

Zmiany na zakładce „Uprawnienia”

W wersji 2026.1.0 została zmodyfikowana zakładka „Uprawnienia“ dla punktu ACD typu „Import dokumentów zakupu z KSeF” – wprowadzono następujące zmiany:

Zakładka „Uprawnienia“ przed wprowadzeniem zmian

Zakładka „Uprawnienia“ – zaznaczenie checkboxa „Definiuj warunki“ dla operatora „Jan Kowal“

Okno wyświetlone po kliknięciu w przycisk „Zdefiniuj zapytanie“ dla operatora „Jan Kowal“

Okno „Generator zapytania SQL“ wyświetlone po kliknięciu w przycisk „Wybierz pola“

Okno „Generator zapytania SQL“ po kliknięciu w pozycję „KS_Documents“

Okno „Generator zapytania SQL“ po kliknięciu w plus obok pozycji „KSD_DataWystawienia“ w ramach listy kolumn z tabeli KS_Documents

AND d.KSD_DataWystawienia >= '2026-04-15' AND d.KSD_DataWystawienia < '2026-04-16'

Uwaga

Nie jest możliwe ponowne wskazanie pól po wygenerowaniu zapytania. Aby móc ponownie wygenerować zapytanie, należy je usunąć za pomocą przycisku [Usuń zapytanie], zamknąć okno i rozpocząć definiowanie reguły od nowa.

Okno „Generator zapytania SQL“ po kliknięciu w przycisk „Utwórz zapytanie“ – przykład

Okno „Generator zapytania SQL“ po kliknięciu w przycisk „Utwórz zapytanie“ i dopisaniu warunku „AND d.KSD_DataWystawienia >= '2026-04-15′ AND d.KSD_DataWystawienia < '2026-04-16“ – przykład

Na liście reguł jest wyświetlanych jednocześnie maksymalnie 5 pozycji – jeśli reguł jest więcej, wówczas dostępny jest suwak do przewijania listy.

W przypadku, gdy nazwa reguły jest zbyt długa, aby mieścić się w oknie, wówczas na końcu wyświetlanego fragmentu nazwy wyświetlany jest wielokropek, a po przesunięciu kursora na nazwę reguły widoczna jest pełna nazwa reguły.

Jeśli na zakładce „Reguły” nie zdefiniowano żadnej reguły, wówczas wyświetlane są dokumenty bez przypisanej reguły.

Domyślnie żaden operator nie ma dostępu do żadnej zdefiniowanej reguły – dostęp do określonych reguł zostaje nadany wybranym operatorom przez administratora

W przypadku, gdy na zakładce „Lista” wprowadzono podstawowe zapytanie dla zakładki „Lista”, bez dodatkowych warunków wprowadzonych przez administratora, wówczas każdy operator ma dostęp do dokumentów bez przypisanej reguły – możliwa jest modyfikacja tych warunków według potrzeb, np. jak pokazano w przykładzie w podrozdziale Zmiany na zakładce „Lista”. Jeśli administrator przypisze daną regułę/reguły do danego pracownika, wówczas ten zobaczy dodatkowo faktury, którym nadano daną regułę/reguły.

Zakładka „Uprawnienia“ – wybór reguły dla operatora „Anna Maj“

Lista dokumentów w punkcie ACD

Od wersji 2026.1.0 podczas importowania dokumentów KSeF do punktu ACD zostają nadane reguły, a następnie zostaje wyświetlona lista dokumentów, zgodna ze skonfigurowanymi listami oraz z regułami.

Reguły są nadawane zgodnie z kolejnością ich zdefiniowania na zakładce „Reguły” – pierwszej od góry na liście do ostatniej. Jeśli dla danej reguły nie wprowadzono zapytania SQL, wówczas ta reguła nie zostanie automatycznie przypisana do dokumentu. Reguły nie są nadpisywane.

Podczas nadawania reguł wyświetlane jest okno „Nadawanie reguł”, w ramach którego dostępne są następujące elementy:

Okno widoczne podczas pobierania listy faktur KSeF – gdy następuje nadawanie reguł na dokumenty pobierane z KSeF

Okno widoczne po pobraniu listy faktur KSeF – gdy zastosowano reguły zapisane na zakładce „Reguły“

W przypadku, gdy operator chce nadpisać regułę, powinien usunąć nadpisywaną regułę na zakładce „Reguły” na definicji punktu ACD albo ręcznie wymazać ją z pola i za pomocą przycisku „Wykonaj regułę”, dostępnego na tej zakładce, nadać nową regułę na dokumentach bez przypisanej reguły.

W wersji 2026.1.0 w punkcie ACD typu „Import dokumentów zakupu z KSeF” dodano nową kolumnę „Reguła”. W ramach tej kolumny obok każdego dokumentu dostępna jest rozwijana lista reguł, funkcjonująca według następujących zasad:

W przypadku ustawienia w polu „Dokumenty“ opcji „Wszystkie“, a następnie kliknięcia pola „Generuj” zostaną generowane tylko faktury, które znajdują się na liście operatora.

Możliwe jest sortowanie listy według wartości w kolumnie „Reguła” – w tym celu należy kliknąć w nazwę kolumny, a następnie w ikonę strzałki znajdującą się obok. W przypadku, jeśli:

Sortowanie dokumentów rosnąco ma miejsce w następującej kolejności:

Sortowanie dokumentów malejąco ma miejsce w następującej kolejności:

Szerokość kolumny może być modyfikowana – gdy operator przesunie kursor myszki na lub pod nagłówek pomiędzy kolumną „Reguła“ a poprzednią kolumną, widoczna jest 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.

Uwaga

Eksport punktu ACD typu  „Import dokumentów zakupu z KSeF” następuje według następujących zasad:

Import punktu ACD typu  „Import dokumentów zakupu z KSeF” następuje według następujących zasad:

Lista faktur KSeF zawierająca faktury przypisane do wszystkich reguł oraz faktury nieprzypisane do żadnej reguły

Lista faktur KSeF zawierająca faktury przypisane do dwóch reguł, do których uprawnienia nadano operatorowi Anna Maj

Lista faktur KSeF zawierająca faktury przypisane do dwóch reguł oraz faktury nieprzypisane do żadnej reguły – z otwartą dla jednego z dokumentów i widoczną listą reguł

Wyszukiwanie według frazy na liście reguł przy wybranym dokumencie

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