Pobieranie danych z KSeF – Tabela VAT przy współpracy z Comarch ERP XL

image_pdfimage_print

Zastosowanie

Dzięki zastosowaniu tej zintegrowanej konfiguracji, proces obiegu faktur kosztowych w Comarch BPM zyskuje pełną automatyzację i spójność danych.

Głównym celem jest:

  • Pobranie i wyświetlenie podsumowania VAT: Dane są pobierane bezpośrednio z systemu KSeF (poprzez BPM), a kontrolka tabelaryczna Tabela VAT jest automatycznie wypełniana, prezentując zagregowane wartości dla każdej stawki.
  • Eliminacja Ręcznego Wprowadzania Danych: Dane z faktury KSeF (pobrane do tabeli do.KS_DocumentItems) są automatycznie mapowane i wypełniają kontrolkę tabelaryczną, eliminując potrzebę przepisywania.
  • Ujednolicenie Stawki VAT: Zapewnienie, że stawki VAT z KSeF zostaną poprawnie zmapowane na identyfikatory liczbowe (Naz_GIDLp) używane w Comarch ERP XL, co jest kluczowe dla poprawnego księgowania.
  • Minimalizacja błędów i skrócenie czasu obsługi faktury: Proces akceptacji bazuje na poprawnych i spójnych danych, co skraca czas obsługi faktury.

 

Zawartość przykładu

  • Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERPXL
  • Punkt konfiguracyjny ACD: Wzorcowa konfiguracja, która jest odpowiedzialna za pobranie ID dokumentu KSeF, Załącznika oraz wszystkich kluczowych danych nagłówkowych (Numer dokumentu, Kontrahent, Data zakupu, Data wystawienia, Data wpływu Termin płatności, Forma płatności, Waluta, Wartość Netto, Wartość Brutto, Numer KSeF, Data przyjęcia KSeF) oraz inicjację dokumentu obiegowego.

W przypadku kontrolki Kontrahent w zapytaniu przed nazwą tabeli CDN.KntKarty należy wskazać właściwą nazwę bazy Comarch ERXL.

 

Kliknij tutaj, aby pobrać przykład

 

Zasada działania

Mechanizm opiera się na inicjowaniu wartości w kontrolce Tabela VAT, która jest wypełniana danymi z bazy Comarch BPM, zapisanymi po przetworzeniu faktury z KSeF w punkcie ACD.

  • Konfiguracja wykorzystuje ID dokumentu KSeF (zapisane w dedykowanej kontrolce typu Liczba całkowita o nazwie np. ID_KSeF) jako identyfikator do pobrania danych.
  • Kontrolka tabelaryczna Tabela VAT obserwuje pole ID_KSeF, reagując na jego wypełnienie.
  • Kluczowym elementem jest zapytanie SQL umieszczone na zakładce Inicjowanie Wartości kontrolki tabelarycznej.
  • Zapytanie jest filtrowane za pomocą parametru @ID_KSeF@, dzięki czemu pobiera ono wiersze z właściwego dokumentu KSeF z tabeli do.KS_DocumentItems w bazie BPM.
  • Zapytanie zawiera logikę CASE, która rozpoznaje specyficzne oznaczenia stawek z KSeF (np. Stawka0KR, StawkanpI, zw) i mapuje je na standardowe klucze (np. 0%, NP, ZW).
  • Dane z tabeli do.KS_DocumentItems są natychmiast grupowane i sumowane według ujednoliconego klucza VAT. Dzięki temu, nawet przy wielu pozycjach na fakturze, Tabela VAT wyświetla tylko jeden zbiorczy wiersz dla każdej stawki.
  • Następuje mapowanie kluczy na identyfikatory liczbowe (Naz_GIDLp) z tabeli CDN.Nazwy (dla Naz_GIDTyp = 624). W konfiguracji wykorzystano kolumnę Naz_Nazwa, co zapewnia precyzyjne dopasowanie do stawek systemowych (np. 'A 23.00′).
  • Końcowy SELECT zwraca już zagregowane kwoty Netto, oblicza Wartość VAT oraz Wartość Brutto, używając mapowanego ID stawki (Naz_GIDLp)
  • Kontrolki podsumowujące (WartoscNetto i WartoscBrutto) obserwują kontrolkę Tabela VAT
  • i automatycznie zliczają całkowitą sumę z kolumn Wartość NettoWartość Brutto w całej tabeli, wyświetlając poprawne podsumowanie kwot.
  • Na podstawie zagregowanej sumy Netto i zmapowanej stawki procentowej, zapytanie automatycznie oblicza i zwraca Wartość VAT oraz Wartość Brutto

 

Konfiguracja przykładu

1. Utworzono kontrolkę ID_KSeF: Na karcie obiegu dodano kontrolkę typu Liczba całkowita o nazwie (identyfikatorze) ID_KSeF, do której będzie zapisywane ID dokumentu KSeF.

 

Kontrolka Liczba całkowita ID_KSeF

 

2. Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Tabela VAT i skonfigurowano w niej następujące kolumny:
  • ”Wartość Netto” (identyfikator kolumny: WartoscNetto) – typ Liczba stałoprzecinkowa
  • ”Stawka VAT” (identyfikator kolumny: StawkaVAT) – typ Lista
  • ”Wartość VAT” (identyfikator kolumny: WartoscVAT) – typ Liczba stałoprzecinkowa
  • ”Wartość Brutto” (identyfikator kolumny: WartoscBrutto)– typ Liczba stałoprzecinkowa

 

Kolumny w kontrolce Dane tabelaryczne

 

3. W kontrolce typu Dane tabelaryczne  na zakładce Listy zdefiniowano zapytanie pobierające:

 

  • Stawki VAT:
 select Naz_gidLp as Id,  
 CASE  
  WHEN Naz_Nazwa='A 23.00' THEN '23%' 
  WHEN Naz_Nazwa='B 8.00' THEN '8%' 
  WHEN Naz_Nazwa='C 0.00' THEN '0%' 
  WHEN Naz_Nazwa='D 0.00' THEN 'ZW' 
  WHEN Naz_Nazwa='E 0.00' THEN 'NP' 
  WHEN Naz_Nazwa='F 7.00' THEN '7%' 
  WHEN Naz_Nazwa='G 5.00' THEN '5%' 
 END  
 from CDN.Nazwy  
 where Naz_GIDTyp = 624  AND trim(substring(Naz_Nazwa,9,2))=''

 

Lista Stawka VAT w kontrolce Dane tabelaryczne

 

4. Dodano obserwację kontrolki: W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do kontrolki ID_KSeF.

 

Dane tabelaryczna, zakładka Inicjowanie wartości

 

5. Dodano zapytanie SQL: W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Wzór na wartość SQL ERP dodano zapytanie, które pobiera dane z tabel do.KS_DocumentItems na podstawie przekazanego parametru @ID_KSeF@ (ID dokumentu KSeF). Zapytanie od razu grupuje i sumuje wartości Netto dla wszystkich pozycji, które mają tę samą stawkę VAT, co pozwala na wygenerowanie zbiorczego podsumowania zamiast listy pojedynczych towarów.

 

Uwaga
W zapytaniu przed nazwą tabeli do.KS_DocumentItems należy wskazać właściwą nazwę bazy Comarch BPM.

 

Ta sekcja jest wywoływana tylko raz, podczas inicjowania obiegu:

 

IF @^SenderControlName@ = 'ID_KSeF' /* Identyfikator kontrolki do której pobierane jest ID dokumentu KSeF */ 
BEGIN 
   /* Tryb 1: Inicjowanie wierszy z dokumentu KSeF */ 


WITH KSeF_Parsed AS ( 
   
    SELECT 
        CASE 
            WHEN di.KSI_ElementStawkaVAT = 'Stawka23' THEN '23%' 
            WHEN di.KSI_ElementStawkaVAT = 'Stawka8'  THEN '8%' 
            WHEN di.KSI_ElementStawkaVAT = 'Stawka0KR' THEN '0%' 
            WHEN di.KSI_ElementStawkaVAT = 'zw'        THEN 'ZW' 
            WHEN di.KSI_ElementStawkaVAT = 'StawkanpI' THEN 'NP' 
            ELSE di.KSI_ElementStawkaVAT  
        END AS KluczMapowania, 
        di.KSI_ElementWartoscNetto 
    FROM 
       [Nazwa_Bazy_ComarchBPM].do.KS_DocumentItems AS di /*Uzupełnić nazwę bazy Comarch BPM */ 

    WHERE  
        di.KSI_DocumentId =  @ID_KSeF@  
), 
KSeF_Aggregated AS ( 
    /* Sumujemy netto dla każdej rozpoznanej grupy stawek */ 
    SELECT  
        KluczMapowania, 
        SUM(KSI_ElementWartoscNetto) AS SumaNetto 
    FROM KSeF_Parsed 
    GROUP BY KluczMapowania 
), 
XL_Stawki AS ( 
    /* Pobieramy ID stawek  */ 
    SELECT  
        Naz_gidLp AS Id,  
        CASE  
            WHEN Naz_Nazwa = 'A 23.00' THEN '23%' 
            WHEN Naz_Nazwa = 'B 8.00' THEN '8%' 
            WHEN Naz_Nazwa = 'C 0.00' THEN '0%' 
            WHEN Naz_Nazwa = 'D 0.00' THEN 'ZW' 
            WHEN Naz_Nazwa = 'E 0.00' THEN 'NP' 
        END AS NazwaMapowana, 
        CASE  
            WHEN Naz_Nazwa = 'A 23.00' THEN 0.23 
            WHEN Naz_Nazwa = 'B 8.00' THEN 0.08 
            ELSE 0.00 
        END AS Procent 
    FROM CDN.Nazwy  
    WHERE Naz_GIDTyp = 624  
) 

/* Finalne połączenie danych */ 
SELECT 
    ka.SumaNetto AS 'Wartość netto', 
    xl.Id AS 'Stawka VAT ID', 
    CAST(ka.SumaNetto * xl.Procent AS DECIMAL(18, 2)) AS 'Wartość VAT', 
    CAST(ka.SumaNetto * (1 + xl.Procent) AS DECIMAL(18, 2)) AS 'Wartość brutto' 
FROM 
    KSeF_Aggregated ka 
INNER JOIN 
    XL_Stawki xl ON ka.KluczMapowania = xl.NazwaMapowana 
ORDER BY  
    xl.Id ASC; 

END

 

Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości

 

6. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o identyfikatorze WartoscNetto, w której dodano powiązanie do kontrolki Tabela VAT i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Netto z kontrolki tabelarycznej:

 

select sum (WartoscNetto) from  @Tabela_VAT@

 

Kontrolka Liczbowa WartoscNetto

 

7. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o identyfikatorze WartoscBrutto, w której dodano powiązanie do kontrolki Tabela VAT i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Brutto z kontrolki tabelarycznej:

 

SELECT SUM (WartoscBrutto) FROM  @Tabela_VAT@

 

Kontrolka Liczbowa WartoscBrutto

8. Punkt ACD: W punkcie konfiguracyjnym ACD (Import dokumentów zakupu z KSeF), na zakładce Kontrolki, dodano kontrolkę ID_KSeF i przypisano jej zapytanie, które pobiera ID dokumentu KSeF:

 

select @Id1@

 

9. Zdefiniowano również odpowiednie zapytania SQL do poszczególnych kontrolek, do których będą pobierane dane z KSeF.

 

Kontrolka ID_KSeF w punkcie ACD

 

Uzupełnione dane w punkcie ACD

Po pomyślnym pobraniu dokumentu z KSeFpunkcie ACD (Import dokumentów zakupu z KSeF), dane nagłówkowe oraz identyfikator dokumentu uzupełniły się automatycznie w kontrolkach na podstawie danych odczytanych z pliku XML.

 

Dane pobrane z KSeF w punkcie ACD

 

Uzupełniona Kontrolka Dane Tabelaryczne

Po pomyślnym zainicjowaniu dokumentu z punktu ACD, kontrolka Dane Tabelaryczne (Tabela VAT) została automatycznie wypełniona zagregowanymi wierszami VAT odczytanymi z KSeF.

Dla każdej stawki VAT, system automatycznie obliczył i uzupełnił wartości w kolumnach Wartość Netto, Wartość VAT i Wartość Brutto na podstawie sumy netto dla danej stawki, pobranej z KSeF i zmapowanej stawki procentowej XL.

Kontrolka Wartość Netto wyświetla poprawną sumę końcową z kolumny Netto kontrolki Dane tabelaryczne. Kontrolka Wartość Brutto wyświetla poprawną sumę końcową z kolumny Brutto kontrolki Dane tabelaryczne.

 

Kontrolka Dane tabelaryczne prezentująca zagregowane kwoty VAT dla poszczególnych stawek oraz podsumowanie kwot

 

Pozostałe dane uzupełnione na karcie obiegu

Po pomyślnym zainicjowaniu dokumentu z punktu ACD, pozostałe dane na karcie obiegu zostały prawidłowo uzupełnione.

 

Uzupełnione dane na dokumencie pobranym z KSeF

 

 

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!

 

Czy ten artykuł był pomocny?