Baza wiedzy LINKSPOT › Wskazówki

Pobieranie danych z KSeF do kontrolki tabelarycznej Elementy na Fakturze kosztowej XL

Wskazówki · Opublikowano 2026-04-03

Zastosowanie

Dzięki zastosowaniu tej zintegrowanej konfiguracji, proces obiegu faktur kosztowych w Comarch BPM zyskuje pełną automatyzację i spójność danych. Dane są pobierane bezpośrednio z systemu KSeF (poprzez BPM), a kontrolka tabelaryczna jest automatycznie wypełniana.

Głównym celem jest:

Zawartość przykładu

Kliknij tutaj, aby pobrać przykład

Zasada działania

Mechanizm opiera się na dwóch trybach działania zintegrowanych w jednej kontrolce Dane Tabelaryczne (Elementy), wykorzystując dane z bazy Comarch BPM, które zostały zapisane po przetworzeniu faktury z KSeF w punkcie ACD.

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

  1. Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy i skonfigurowano w niej następujące kolumny:

Kolumny w kontrolce typu Dane tabelaryczne

  1. W kontrolce typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy na zakładce Listy zdefiniowano zapytanie pobierające:
 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 typu Dane tabelaryczne

SELECT Naz_GIDLp,Naz_Nazwa from cdn.Nazwy where Naz_GIDTyp=144;

Lista Jednostka miary w kontrolce typu Dane tabelaryczne

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

Dane tabelaryczna, zakładka Inicjowanie wartości

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

W zapytaniu SQL konieczne jest użycie logiki CASE WHEN do konwersji wartości pola KSI_ElementStawkaVAT (np. 'Stawka23′, 'zw’) na ujednolicony klucz, który następnie jest mapowany na identyfikatory liczbowe (Naz_GIDLp) stawek VAT z tabeli CDN.Nazwy z bazy XL. Logika CTE z ROW_NUMBER() zapewnia unikalność mapowanych ID.

Uwaga

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

IF @^SenderControlName@ = 'ID_KSeF' /*Identyfikator kontrolki do której pobierane jest ID dokumentu KSeF */

BEGIN
/* Tryb 1: Inicjowanie wierszy z dokumentu KSeF */
WITH ProcessedDocumentItems AS (
SELECT
KSI_ElementNazwa,
ISNULL(NULLIF(KSI_ElementIlosc, 0), 1.000000) AS KSI_ElementIlosc, 
ISNULL(KSI_ElementWartoscBrutto, 0) AS Brutto,
ISNULL(KSI_ElementWartoscNetto, 0) AS Netto,
KSI_ElementJM, 
CASE 
WHEN di.KSI_ElementStawkaVAT LIKE '%23%' THEN '23%'
WHEN di.KSI_ElementStawkaVAT LIKE '%8%' THEN '8%'
WHEN di.KSI_ElementStawkaVAT LIKE '%5%' THEN '5%'
WHEN di.KSI_ElementStawkaVAT LIKE '%7%' THEN '7%'
WHEN di.KSI_ElementStawkaVAT LIKE '%zw%' THEN 'ZW'
WHEN di.KSI_ElementStawkaVAT LIKE '%np%' OR di.KSI_ElementStawkaVAT LIKE '%niepodleg%' THEN 'NP'
WHEN di.KSI_ElementStawkaVAT LIKE '%0%' THEN '0%'
ELSE '0%' 
END AS KSeF_Match_Key
FROM
[BAZA_BPM].do.KS_DocumentItems AS di /*Należy wskazać nazwę bazy BPM*/
WHERE KSI_DocumentId = @ID_KSeF@ /*Identyfikator kontrolki liczba całkowita, do której pobierane jest ID dokumentu KSeF*/
),
ERPVatMappingUnique AS (
SELECT 
Naz_gidLp,
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 AS ERP_Match_Key,
CASE 
WHEN Naz_Nazwa = 'A 23.00' THEN 0.230000
WHEN Naz_Nazwa = 'B 8.00' THEN 0.080000
WHEN Naz_Nazwa = 'F 7.00' THEN 0.070000
WHEN Naz_Nazwa = 'G 5.00' THEN 0.050000
ELSE 0.000000
END AS VatRate
FROM CDN.Nazwy 
WHERE Naz_GIDTyp = 624 
AND (Naz_Nazwa LIKE '_ %.00' OR Naz_Nazwa IN ('D 0.00', 'E 0.00'))
),
ERP_JM AS (

SELECT 
Naz_GIDLp, 
LTRIM(RTRIM(Naz_Nazwa)) as Naz_Nazwa,
ROW_NUMBER() OVER (PARTITION BY LTRIM(RTRIM(Naz_Nazwa)) ORDER BY Naz_GIDLp) as RN
FROM CDN.Nazwy 
WHERE Naz_GIDTyp = 144
)

/* Końcowy SELECT: Zwraca żądany zestaw kolumn */
SELECT
CAST(ISNULL(pi.KSI_ElementNazwa, '') AS VARCHAR(500)) AS [Nazwa],
CAST(CASE 
WHEN pi.Netto > 0.01 THEN ROUND(pi.Netto / pi.KSI_ElementIlosc, 6)
ELSE ROUND((pi.Brutto / pi.KSI_ElementIlosc) / (1.0 + ISNULL(evm.VatRate, 0)), 6)
END AS DECIMAL(24,6)) AS [Cena],
CAST(pi.KSI_ElementIlosc AS DECIMAL(24,6)) AS [Ilość],

CAST(ISNULL(jm.Naz_GIDLp, 0) AS INT) AS [JM],
CAST(CASE 
WHEN pi.Netto > 0.01 THEN pi.Netto
ELSE ROUND(pi.Brutto / (1.0 + ISNULL(evm.VatRate, 0)), 6)
END AS DECIMAL(24,6)) AS [Netto],
CAST(ISNULL(evm.Naz_gidLp, 0) AS INT) AS [Stawka VAT],
CAST(CASE 
WHEN pi.Brutto > 0.01 THEN pi.Brutto
ELSE ROUND(pi.Netto * (1.0 + ISNULL(evm.VatRate, 0)), 6)
END AS DECIMAL(24,6)) AS [Brutto],
NULL AS [NULL]
FROM
ProcessedDocumentItems AS pi
LEFT JOIN 
ERPVatMappingUnique AS evm ON pi.KSeF_Match_Key = evm.ERP_Match_Key
LEFT JOIN 
ERP_JM AS jm ON LTRIM(RTRIM(pi.KSI_ElementJM)) = jm.Naz_Nazwa AND jm.RN = 1;

END
ELSE 
IF @^SenderControlName@ = 'Elementy' /*Identyfikator kontrolki Dane tabelaryczne*/
BEGIN
/* Tryb 2: Przeliczanie wiersza */
IF @Elementy_Column@ IN (2, 3, 6) /* 2-Cena, 3-Ilosc, 6-StawkaVAT*/
BEGIN
DECLARE @VAT as decimal (4,2)

SELECT @VAT=CAST(SUBSTRING (Naz_Nazwa1, 0, CHARINDEX (' ', Naz_Nazwa1)) as decimal (4,2))/100 
FROM CDN.Nazwy 
WHERE Naz_GIDTyp=624 AND Naz_GIDLp=
(SELECT [Stawka VAT] 
FROM @Elementy@ 
WHERE POS=@Elementy_Row@)

UPDATE @Elementy@ 
SET [Netto] = (Ilosc * Cena),
[Brutto] = (Ilosc * Cena) * (ISNULL(@VAT, 0) + 1) 
WHERE POS=@Elementy_Row@

/* Zwrócenie zaktualizowanej tabeli - Obowiązkowy select */

SELECT * FROM @Elementy@ 
END
END

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

Kolumna Netto i Brutto w trybie „Do odczytu”

  1. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) WartoscNetto, w której dodano powiązanie do kontrolki Elementy i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Netto z kontrolki tabelarycznej:
select sum (Netto) from  @Elementy@

Kontrolka Liczbowa WartoscNetto

  1. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) WartoscBrutto, w której dodano powiązanie do kontrolki Elementy i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Brutto z kontrolki tabelarycznej:
select sum (Brutto) from  @Elementy@

Kontrolka Liczbowa WartoscBrutto

  1. Punkt ACD: W punkcie konfiguracyjnym ACD (Współpraca z KSeF), na zakładce Kontrolki, dodano kontrolkę ID_KSeF i przypisano jej zapytanie, które pobiera ID dokumentu KSeF:
 select @Id1@

Kontrolka ID_KSeF w punkcie ACD

Uzupełniona kontrolka typu Dane Tabelaryczne

Po pomyślnym zainicjowaniu dokumentu z punktu ACD, kontrolka typu Dane Tabelaryczne została automatycznie wypełniona pozycjami odczytanymi z KSeF.

Dla każdej pozycji, system automatycznie przeliczył i uzupełnił wartości w kolumnach Netto i Brutto w tym samym wierszu. W przypadku nieprawidłowości w kwotach możliwe jest przeliczanie wartości Netto/Brutto poprzez zmianę Ceny/Ilości lub Stawki VAT.

Kolumna Netto oraz Brutto jest zablokowana do ręcznej edycji (tryb „Do odczytu”), co gwarantuje poprawność danych.

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

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

Kontrolka typu Dane tabelaryczne uzupełniona pozycjami odczytanymi z KSeF oraz podsumowanie kwot

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!

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