Pobieranie danych z KSeF do kontrolki tabelarycznej Elementy na Fakturze kosztowej przy współpracy z Comarch ERP Optima

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:

  • Eliminacja ręcznego wprowadzania pozycji dokumentów: Dane z faktury KSeF (pobrane do tabeli do.KS_DocumentItems) są automatycznie mapowane i wypełniają kontrolkę tabelaryczną na karcie obiegu.
  • Automatyczne kalkulowanie wartości: Kontrolka tabelaryczna uzyskuje zdolność automatycznego przeliczania wszędzie tam, gdzie zmienione zostaną dane wejściowe (np. Netto, Stawka VAT, Brutto) przez użytkownika.
  • Minimalizacja błędów i skrócenie czasu obsługi faktury: Proces akceptacji bazuje na poprawnych i spójnych danych, które są automatycznie kalkulowane i aktualizowane, zanim dokument zostanie zaksięgowany w Comarch ERP Optima.

Przykład jest oparty na definicji typu obiegu dostępnej na stronach walidowanych w sekcji ERP 5.0->Comarch BPM (dawniej DMS)->Przykłady->ERP Optima. Razem z przykładem udostępnione są pliki exe, które umożliwiają wygenerowanie dokumentu do Comarch ERP Optima. Aby skorzystać z tej funkcjonalności należy pobrać przykład adekwatny do wersji Comarch ERP Optima

 

Przykłady generatorów do Comarch ERP Optima

Zawartość przykładu

  • Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu Faktury kosztowej z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERP Optima
  • 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 z KSeF) oraz utworzenie dokumentu obiegowego.W przypadku kontrolki Kontrahent w zapytaniu przed nazwą tabeli CDN.Kontrahenci należy wskazać właściwą nazwę bazy Comarch ERP Optima.
  • Plik Zapytania Sql – zawiera zapytania SQL do punktu ACD oraz zapytanie do kontrolki Dane tabelaryczne (każda pozycja osobno)
  • Plik Zapytanie SQL – Kontrolka DT- Elementy_sumowanie po tabelce VAT – zawiera zapytanie do kontrolki Dane tabelaryczne, które sumuje pozycje po stawce VAT

Kliknij tutaj, aby pobrać przykład

Zasada działania

Mechanizm opiera się na dwóch trybach pracy zintegrowanych w kontrolce Dane Tabelaryczne (Elementy):

  • Tryb Inicjowania (Pobieranie z KSeF): Wyzwalany, gdy kontrolka ID_KSeF zostanie uzupełniona. System pobiera dane z tabeli do.KS_DocumentItems z bazy BPM i łączy je ze stawkami VAT z bazy konfiguracyjnej Comarch ERP Optima.
  • 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 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.
  • Tryb Edycji (Interaktywny): Kontrolka Dane Tabelaryczne (Elementy) obserwuje sama siebie (@^SenderControlName@ = ’Elementy’), co aktywuje logikę automatycznego przeliczania wartości w trybie edycji. Pozwala to na ręczne przypisanie stawki VAT oraz przeliczenie pozostałych wartości.

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) Elementy i skonfigurowano w niej następujące kolumny:

  • ”Kategoria” (identyfikator kolumny: Kategoria) – typ Lista
  • ”Opis” (identyfikator kolumny: Opis) – typ Tekst
  • ”Kategoria2” (identyfikator kolumny: Kategoria2) – typ Lista
  • ”Opis2” (identyfikator kolumny: Opis2) – typ Tekst
  • ”Stawka” (identyfikator kolumny: Stawka) – typ Lista
  • ”Netto” (identyfikator kolumny: Netto) – typ Liczba stałoprzecinkowa
  • ”VAT” (identyfikator kolumny: VAT) – typ Liczba stałoprzecinkowa
  • ”Brutto” (identyfikator kolumny: Brutto) – typ Liczba stałoprzecinkowa
  • ”Rodzaj” (identyfikator kolumny: Rodzaj) – typ Lista
  • ”Odliczenia” (identyfikator kolumny: Odliczenia) – typ Lista

Kolumny w kontrolce Dane tabelaryczne

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

  • Kategoria:

select Kat_KatID, Kat_KodSzczegol--, (select top 1 Kat_KatID from cdn.Kategorie order by 1)
from cdn.Kategorie where Kat_Typ=1

  • Stawka VAT:

SELECT Kon_KonId,
CASE
WHEN Kon_Opis='Stawka zwolniona' THEN 'ZW'
WHEN Kon_Opis='Nie podlega Vat' THEN 'NP'
WHEN Kon_Opis<>'Stawka zwolniona' and Kon_Opis<>'Nie podlega Vat' THEN CONCAT(LEFT(Kon_wartosc,6),' %')
END
FROM CDN_KNF_Konfiguracja.cdn.Konfig /* <<<<- Tu podmiana nazwy bazy>>>> */
where Kon_Numer=301 and Kon_wartosc like '%PL'

  • Rodzaj:

SELECT 1, 'Towary'
UNION
SELECT 2,'Inne'
UNION
SELECT 3,'Środki trwałe'
UNION
SELECT 4,'Usługi'
UNION
SELECT 5,'Środki transportu'
UNION
SELECT 6,'Nieruchomości'
UNION
SELECT 7,'Paliwo'

  • Odliczenia:

select 1, 'Nie'
union
select 2, 'Tak'
union
select 3, 'Warunkowo'

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

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 tabeli do.KS_DocumentItems na podstawie przekazanego parametru @ID_KSeF@ (ID dokumentu KSeF).

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:

Pierwsza sekcja zapytania SQL, rozpoczynająca się od bloku IF @^SenderControlName@ = 'ID_KSeF’ pobiera dane szczegółowe pozycji faktury z KSeF, standaryzuje identyfikatory stawek VAT i mapuje je na wartości procentowe z konfiguracji Comarch ERP Optima. Zapytanie to wypełnia kolumny z kwotami Netto/VAT/Brutto i ustala poprawną Stawkę procentową, jednocześnie inicjując kolumny  (Kategoria, Opis) wartością NULL, ponieważ te dane muszą być uzupełnione ręcznie.

IF @^SenderControlName@ = 'ID_KSeF'
BEGIN
    WITH RawKSeF AS (
        /* Pobranie danych i ujednolicenie klucza bez agregacji */
        SELECT
            di.KSI_DocumentId,
            CAST(ISNULL(di.KSI_ElementWartoscNetto, 0) AS DECIMAL(18,2)) AS Netto_Src,
            CAST(ISNULL(di.KSI_ElementWartoscBrutto, 0) AS DECIMAL(18,2)) AS Brutto_Src,
            CASE
                WHEN di.KSI_ElementStawkaVAT LIKE '%zw%' OR di.KSI_ElementStawkaVAT LIKE '%zwolnione%' THEN 'ZW'
                WHEN di.KSI_ElementStawkaVAT LIKE '%np%' THEN 'NP'
                WHEN di.KSI_ElementStawkaVAT LIKE '%oo%' THEN 'OO'
                WHEN di.KSI_ElementStawkaVAT LIKE '%23%' THEN '23'
                WHEN di.KSI_ElementStawkaVAT LIKE '%22%' THEN '22'
                WHEN di.KSI_ElementStawkaVAT LIKE '%8%'  THEN '8'
                WHEN di.KSI_ElementStawkaVAT LIKE '%5%'  THEN '5'
                WHEN di.KSI_ElementStawkaVAT LIKE '%0%'  THEN '0'
                ELSE '23'
            END AS StandardizedKSeFVAT_Text
        FROM [BPM_OPT].do.KS_DocumentItems AS di    /* Nazwa bazy BPM */
        WHERE di.KSI_DocumentId = @ID_KSeF@
    ),
    OptimaVATRates AS (
        /* Pobieranie stawek z Optimy */
        SELECT 
            MAX(Kon_KonId) AS Kon_KonId, 
            StandardizedOptimaVAT_Text,
            MAX(StawkaVatValue) AS StawkaVatValue
        FROM (
            SELECT
                Kon_KonId,
                ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) AS StawkaVatValue,
                CASE
                    WHEN Kon_Opis = 'Stawka zwolniona' OR Kon_Wartosc LIKE '%ZW%' THEN 'ZW'
                    WHEN Kon_Opis = 'Nie podlega Vat' OR Kon_Wartosc LIKE '%NP%' THEN 'NP'
                    WHEN Kon_Opis = 'Odwrotne obciążenie' OR Kon_Wartosc LIKE '%OO%' THEN 'OO'
                    ELSE CAST(CAST(ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) AS INT) AS VARCHAR(10))
                END AS StandardizedOptimaVAT_Text
            FROM [CDN_KNF_Konfiguracja].cdn.Konfig    /* Nazwa bazy konfiguracyjnej Comarch ERP Optima */
            WHERE Kon_Numer = 301 AND Kon_Wartosc LIKE '%PL'
        ) sub
        GROUP BY StandardizedOptimaVAT_Text
    )

    /* Wynik końcowy - bez GROUP BY, każda pozycja z RawKSeF osobno */
    SELECT
        CAST(NULL AS INT) AS [Kategoria],
        CAST(NULL AS VARCHAR(255)) AS [Opis],
        CAST(NULL AS INT) AS [Kategoria 2],
        CAST(NULL AS VARCHAR(255)) AS [Opis 2],
        CAST(o.Kon_KonId AS INT) AS [Stawka], 
        
        CAST(CASE 
            WHEN r.StandardizedKSeFVAT_Text IN ('ZW', 'NP', '0') THEN ISNULL(NULLIF(r.Netto_Src, 0), r.Brutto_Src)
            WHEN r.Netto_Src <> 0 THEN r.Netto_Src
            ELSE r.Brutto_Src / (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0))
        END AS DECIMAL(18, 2)) AS [Netto],
        
        CAST(CASE 
            WHEN r.StandardizedKSeFVAT_Text IN ('ZW', 'NP', '0') THEN 0.00
            ELSE ABS(r.Brutto_Src - (CASE WHEN r.Netto_Src <> 0 THEN r.Netto_Src ELSE r.Brutto_Src / (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0)) END))
        END AS DECIMAL(18, 2)) AS [VAT], 
        
        CAST(CASE 
            WHEN r.StandardizedKSeFVAT_Text IN ('ZW', 'NP', '0') THEN ISNULL(NULLIF(r.Brutto_Src, 0), r.Netto_Src)
            WHEN r.Brutto_Src <> 0 THEN r.Brutto_Src
            ELSE r.Netto_Src * (1.0 + (ISNULL(o.StawkaVatValue, 0) / 100.0))
        END AS DECIMAL(18, 2)) AS [Brutto],
        
        CAST(1 AS INT) AS [Rodzaj],  /*Domyślny rodzaj o id=1, czyli Towary*/
        CAST(1 AS INT) AS [Odliczenia]  /*Domyślnie Odliczenia na NIE*/
    FROM RawKSeF r
    LEFT JOIN OptimaVATRates o ON r.StandardizedKSeFVAT_Text = o.StandardizedOptimaVAT_Text
END;

  • Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji KSeF:

Druga sekcja zapytania SQL, rozpoczynająca się od bloku ELSE IF @^SenderControlName@ = 'Elementy’, jest odpowiedzialna za całą logikę przeliczania, walidacji i uzupełniania danych w czasie rzeczywistym po ręcznej edycji wiersza w kontrolce Dane Tabelaryczne. Ponieważ kontrolka Elementy obserwuje sama siebie, każda zmiana w kolumnie wyzwala ten kod.

/*Przeliczanie Elementów*/
ELSE
IF @^SenderControlName@ = 'Elementy'
BEGIN

declare @stawkaVat real

IF @Elementy_Column@=1 /* Inicjowanie pozycji wiersza po wskazaniu kategorii */
BEGIN
UPDATE @Elementy@ set [Opis]= (SELECT Kat_opis from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) WHERE POS=@Elementy_Row@
UPDATE @Elementy@ set [Stawka] = (
select Kon_KonId from
(
select Kon_KonId, flaga, stawka from
(
select Kon_KonId, cast (SUBSTRING (Kon_Wartosc, 7,  1) as int) flaga, cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0,  charindex (' ', Kon_Wartosc , 2))),',','.') as real) stawka
from CDN_KNF_Konfiguracja.cdn.Konfig     /* <<<<---------------   Tu podmiana nazwy bazy     >>>> */
where kon_numer = 301 and Kon_wartosc like '%PL'
) insel1
join cdn.Kategorie on kat_stawka = stawka and kat_flaga = flaga and kat_katid = (SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)
) insel2
)  where POS=@Elementy_Row@

UPDATE @Elementy@ set [Rodzaj]=(SELECT Kat_RodzajZakupu from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) where POS=@Elementy_Row@
UPDATE @Elementy@ set [Odliczenia]=(SELECT Kat_Odliczenia+1 from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria] from @Elementy@ where POS=@Elementy_Row@)) where POS=@Elementy_Row@

END

ELSE IF @Elementy_Column@=3
BEGIN
UPDATE @Elementy@ set [Opis2]= (SELECT Kat_opis from cdn.Kategorie where Kat_KatID=(SELECT [Kategoria2] from @Elementy@ where POS=@Elementy_Row@)) WHERE POS=@Elementy_Row@

END

IF @Elementy_Column@=5 or @Elementy_Column@=6 /* Przeliczenie Brutto i wartości VAT po zmianie stawki VAT lub Netto */
BEGIN
declare @Netto decimal (22,4)
SELECT @Netto = [Netto] from @Elementy@ where POS=@Elementy_Row@

select  @stawkaVat = isnull (cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0,  charindex (' ', Kon_Wartosc , 2))),',','.') as real) , 1)
from CDN_KNF_Konfiguracja.cdn.Konfig     /* <<<<---------------   Tu podmiana nazwy bazy     >>>> */
where kon_numer = 301 and Kon_KonId = (select  [Stawka] from @Elementy@ where POS=@Elementy_Row@) and Kon_wartosc like '%PL'

UPDATE @Elementy@ set [Brutto]= @Netto + (@Netto * (@stawkaVat / 100)) where POS=@Elementy_Row@
UPDATE @Elementy@ set [VAT]= @Netto * (@stawkaVat / 100) where POS=@Elementy_Row@
END

IF @Elementy_Column@=5 or @Elementy_Column@=8 /* Przeliczenie Netto i wartości VAT po zmianie stawki VAT lub Brutto */
BEGIN
declare @Brutto decimal (22,4)
SELECT @Brutto = [Brutto] from @Elementy@ where POS=@Elementy_Row@

select  @stawkaVat = isnull (cast (replace ( rtrim( SUBSTRING (Kon_Wartosc, 0,  charindex (' ', Kon_Wartosc , 2))),',','.') as real) , 1)
from CDN_KNF_Konfiguracja.cdn.Konfig     /* <<<<---------------   Tu podmiana nazwy bazy     >>>> */
where kon_numer = 301 and Kon_KonId = (select  [Stawka] from @Elementy@ where POS=@Elementy_Row@) and Kon_wartosc like '%PL'

UPDATE @Elementy@ set [Netto]= @Brutto / ((@stawkaVat/100) + 1)  where POS=@Elementy_Row@
UPDATE @Elementy@ set [VAT]= @Brutto / ((@stawkaVat/100) + 1) * (@stawkaVat / 100) where POS=@Elementy_Row@
END

SELECT * from @Elementy@

END

 

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

Konfiguracja punktu ACD

1. W punkcie konfiguracyjnym ACD (Import dokumentów zakupu KSeF), na zakładce Lista dodano zapytanie, które pobiera pobiera listę faktur z tabel do.KS_Documents, do.KS_WorkAPProcess, do.KS_DocumentHeaders i do.KS_DocumentContractors, filtrując je m.in. po statusie przetworzenia (KSW_Status), operatorze, numerze faktury (KSD_NumerFaktury), NIP, dacie wystawienia (KSH_DataWytworzeniaFa), typie faktury i kwotach.

BEGIN TRY
select d.KSD_ID, NULL, KSD_NumerFaktury, KSD_Tag1, KSD_Tag2, KSD_Tag3
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 (nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury LIKE '%' + @SearchText@ + '%'))
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@)
END TRY
BEGIN CATCH
DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE();
THROW 50001,  @ErrorMessage ,1;
END CATCH

2. W zakładce Kontrolki dodano kontrolkę ID_KSeF, której przypisano zapytanie pobierające identyfikator dokumentu KSEF. Jednocześnie zdefiniowano odpowiednie zapytania SQL dla pozostałych kontrolek, które służą do automatycznego pobierania i wyświetlania danych bezpośrednio z systemu KSeF:

  • Załączniki

select KSD_SourceContent,CASEWHEN KSD_NumerFaktury LIKE '%/%' 
THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.pdf')ELSE CONCAT(KSD_NumerFaktury, '.pdf')END AS modified_columnfrom do.KS_Documentswhere KSD_ID=@Id1@

  • Załącznik XML

select KSD_Xml,CASEWHEN KSD_NumerFaktury LIKE '%/%' 
THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.xml')ELSE CONCAT(KSD_NumerFaktury, '.xml')END AS modified_columnfrom do.KS_Documentswhere KSD_ID=@Id1@

  • Dokument

select KSD_NumerFaktury from do.KS_Documents where KSD_ID=@Id1@

  • Kontrahent

select top 1 Knt_KntId, Knt_Kod
from [do].[KS_DocumentContractors]
join [CDN_Optima].[cdn].[Kontrahenci] on Knt_Nip = KSC_PodatnikNIP
where KSC_DocumentId=@Id1@

  • Data zakupu

SELECT CASE
WHEN KSD_DataDostawy IS NULL THEN KSD_DataWystawienia
ELSE KSD_DataDostawy
END
FROM do.KS_Documents WHERE KSD_ID=@id1@

  • Data wpływu

select KSH_DataWytworzeniaFa from do.KS_DocumentHeaders where KSH_DocumentID=@Id1@

  • Data wystawienia

select KSD_DataWystawienia from do.KS_Documents where KSD_ID=@Id1@

  • Forma płatności

SELECT
(
CASE
WHEN KSD_FormaPlatnosci = 1 THEN 'Gotówka'
WHEN KSD_FormaPlatnosci = 2 THEN 'Karta'
WHEN KSD_FormaPlatnosci = 3 THEN 'Bon'
WHEN KSD_FormaPlatnosci = 4 THEN 'Czek'
WHEN KSD_FormaPlatnosci = 5 THEN 'Kredyt'
WHEN KSD_FormaPlatnosci = 6 THEN 'Przelew'
WHEN KSD_FormaPlatnosci = 7 THEN 'Płatność Mobilna'
ELSE 'Inna'
END
) AS FormaPlatnosci
FROM
do.KS_DocumentsWHERE KSD_Id=@ID1@

  • Termin płatności

 select KSP_TerminPlatnosci from do.KS_PaymentDates where KSP_DocumentID=@Id1@

  • Numer KSeF

select KSH_NumerReferencyjnyKSeF 
from do.KS_DocumentHeaderswhere KSH_DocumentID=@Id1@

  • Waluta

select KSD_KodWaluty from do.KS_Documents where KSD_ID=@Id1@

  • IDKSeF

select @Id1@

  • Data przyjęcia KSeF

select KSH_DataWytworzeniaFa from do.KS_DocumentHeaders where KSH_DocumentID=@Id1@

  • Numer rachunku bankowego

select KSB_NrRachunku from do.KS_BankAccounts
join do.KS_Documents on ksb_documentId= KSD_Id where ksd_id=@Id1@

Kontrolka ID_KSeF w punkcie ACD

Uzupełnione dane w punkcie ACD

Po pomyślnym pobraniu dokumentu z KSeF w punkcie 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

  • Na podstawie przetworzonych danych z KSeF, w systemie Comarch BPM są generowane dokumenty w ramach wskazanej definicji typu obiegu.
  • Po pomyślnym zainicjowaniu nagłówka dokumentu, system dokonuje pełnego uzupełnienia skonfigurowanych kontrolek na karcie obiegu.
  • Kontrolka typu Dane Tabelaryczne zostaje automatycznie wypełniona pozycjami odczytanymi z dokumentu. Wypełnienie to odbywa się z wykorzystaniem dedykowanego zapytania SQL, które dokonuje normalizacji stawek VAT oraz przeliczeń kwot (Netto/Brutto).
  • Kluczowe jest to, że kontrolka techniczna ID_KSeF (która przechowuje wewnętrzny identyfikator pobranego dokumentu KSeF) jest obserwowana przez kontrolkę Dane Tabelaryczne i na podstawie jej wartości (@ID_KSeF@ w zapytaniu SQL) kontrolka Danych Tabelarycznych jest uzupełniana danymi.

Uwaga

Kolumny Kategoria oraz Kategoria 2 w kontrolce dane tabelaryczne są inicjowane wartością null. Wynika to z faktu, że nazewnictwo pozycji na fakturach dostawców w systemie KSeF często nie jest tożsame z nazewnictwem w Comarch ERP Optima. Wymaga to od użytkownika świadomego, ręcznego przypisania odpowiedniej kategorii oraz kategorii pomocniczej (jeżeli jest taka potrzeba) przed zaksięgowaniem dokumentu, aby zapewnić poprawność analityczną zapisów.

Kontrolka Dane tabelaryczne uzupełniona pozycjami odczytanymi z KSeF

 

Pozostałe dane uzupełnione na karcie obiegu

Po pomyślnym zainicjowaniu dokumentu z poziomu ACD, pozostałe dane na karcie obiegu zostały prawidłowo uzupełnione. System automatycznie przypisał nie tylko dane podstawowe, takie jak numer dokumentu, czy dane kontrahenta, ale również precyzyjnie rozbił pozycje faktury na poszczególne stawki VAT (23% oraz 8%). Prawidłowo przeniesiono także numer rachunku bankowego oraz unikalny numer KSeF, co gwarantuje pełną spójność danych między obiegiem dokumentów, a systemem Comarch ERP Optima.

Uzupełnione dane na karcie obiegu pobrane 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!

 




Pobieranie danych z KSeF do kontrolki tabelarycznej Elementy na Fakturze zakupu przy współpracy z Comarch ERP Optima

Zastosowanie

Głównym celem konfiguracji jest automatyzacja procesu wprowadzania pozycji faktur zakupu pobranych z Krajowego Systemu e-Faktur (KSeF) bezpośrednio do systemu Comarch BPM zintegrowanego z Comarch ERP Optima. Dzięki zastosowaniu zaawansowanej logiki SQL, proces ten:

  • Eliminuje ręczne przepisywanie danych: Pozycje z pliku XML KSeF automatycznie wypełniają tabelę na karcie obiegu.
  • Zapewnia spójność stawek VAT: Logika mapuje tekstowe oznaczenia stawek z KSeF na wartości liczbowe z konfiguracji Optimy.
  • Automatyzuje kalkulacje: System przelicza ceny i wartości netto/brutto w czasie rzeczywistym przy zmianie ilości, ceny lub stawki VAT.

 

Przykład jest oparty o definicję typu obiegu dostępną na stronach walidowanych w sekcji ERP 5.0->Comarch BPM (dawniej DMS)->Przykłady->ERP Optima

 

Zawartość przykładu

  • Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu zakupu z krokami akceptacji, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch Optima
  • 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 z KSeF) oraz utworzenie dokumentu obiegowego.

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

 

Kliknij tutaj, aby pobrać przykład

 

Zasada działania

Mechanizm opiera się na dwóch trybach pracy zintegrowanych w kontrolce Dane Tabelaryczne (Elementy):

  • Tryb Inicjowania (Pobieranie z KSeF): Wyzwalany, gdy kontrolka ID_KSeF zostanie uzupełniona. System pobiera dane z tabeli do.KS_DocumentItems z bazy BPM i łączy je ze stawkami VAT z bazy konfiguracyjnej Comarch ERP Optima.
  • 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 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.
  • Tryb Edycji (Interaktywny): Kontrolka Dane Tabelaryczne (Elementy) obserwuje sama siebie (@^SenderControlName@ = ’Elementy’), co aktywuje logikę automatycznego przeliczania wartości w trybie edycji. Pozwala to na ręczne dopasowanie towaru z kartoteki ERP, pobranie jednostki miary i przypisanie stawki VAT oraz przeliczenie pozostałych wartości.

 

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) Elementy i skonfigurowano w niej następujące kolumny:

  • ”Kod Towaru” (identyfikator kolumny: Kod)typ Lista
  • ”Towar” (identyfikator kolumny: Towar)typ Towar
  • ”Ilość” (identyfikator kolumny: Ilosc)typ Liczba stałoprzecinkowa
  • ”Jm” (identyfikator kolumny: Jm)typ Tekst
  • ”Stawka” (identyfikator kolumny: Stawka)typ Liczba stałoprzecinkowa
  • ”Cena netto” (identyfikator kolumny: Cena_Netto)typ Liczba stałoprzecinkowa
  • ”Cena brutto” (identyfikator kolumny: Cena_Brutto)typ Liczba stałoprzecinkowa
  • ”Wartość netto” (identyfikator kolumny: Wartosc_Netto)typ Liczba stałoprzecinkowa
  • ”Wartość brutto” (identyfikator kolumny: Wartosc_Brutto)typ Liczba stałoprzecinkowa

 

Kolumny w kontrolce Dane tabelaryczne

 

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

 

  • Kod towaru:

 

select Twr_TwrId, Twr_Kod from cdn.Towary

 

Kod towaru 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 oraz do samej siebie.

 

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 tabeli do.KS_DocumentItems na podstawie przekazanego parametru @ID_KSeF@ (ID dokumentu KSeF). Zapytanie inicjuje kolumnę Kod Towaru i Towar jako wartość NULL, którą użytkownik powinien uzupełnić ręcznie.

 

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'
BEGIN
    WITH ProcessedDocumentItems AS (
        SELECT
            di.KSI_DocumentId,
            di.KSI_ElementIlosc,
            di.KSI_ElementJm,
            di.KSI_ElementCenaNetto,
            di.KSI_ElementCenaBrutto,
            di.KSI_ElementWartoscNetto,  
            di.KSI_ElementWartoscBrutto,  
            di.KSI_ElementStawkaVAT,
            CAST(ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS INT) AS RowLP,
           CASE
                WHEN di.KSI_ElementStawkaVAT LIKE 'Stawka%' THEN LTRIM(RTRIM(SUBSTRING(di.KSI_ElementStawkaVAT, 7, LEN(di.KSI_ElementStawkaVAT))))
                WHEN di.KSI_ElementStawkaVAT IN ('zw', 'np', 'oo') THEN UPPER(di.KSI_ElementStawkaVAT)
                ELSE di.KSI_ElementStawkaVAT
            END AS StandardizedKSeFVAT_Text
        FROM
            [BPM_OPT].do.KS_DocumentItems AS di   /* Nazwa bazy BPM */
        WHERE 
            di.KSI_DocumentId = @ID_KSeF@
    ),

    OptimaVATRates AS (
        SELECT
            Kon_Wartosc,
            CASE 
                WHEN Kon_Wartosc LIKE '%ZW%' OR Kon_Wartosc LIKE '%NP%' OR Kon_Wartosc LIKE '%OO%' THEN 0.00
                ELSE ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) 
            END AS StawkaVatValue,
            
            CASE
                WHEN Kon_Wartosc LIKE '%ZW%' THEN 'ZW'
                WHEN Kon_Wartosc LIKE '%NP%' THEN 'NP'
                WHEN Kon_Wartosc LIKE '%OO%' THEN 'OO'
                ELSE CAST(ISNULL(TRY_CAST(REPLACE(RTRIM(SUBSTRING(Kon_Wartosc, 1, CHARINDEX(' ', Kon_Wartosc + ' ', 2))), ',', '.') AS REAL), 0) AS VARCHAR(10))
            END AS StandardizedOptimaVAT_Text
        FROM
            [CDN_KNF_Konfiguracja].cdn.Konfig   /* Nazwa bazy konfiguracyjnej Comarch ERP Optima*/
        WHERE 
            Kon_Numer = 301 AND Kon_Wartosc LIKE '%PL'
    ),

    CalculatedBase AS (
        SELECT 
            pi.*,
            ISNULL(ovr.StawkaVatValue, 0) AS vStawka,
            ISNULL(pi.KSI_ElementCenaNetto, 0) AS vCenaNetto_In,
            ISNULL(pi.KSI_ElementCenaBrutto, 0) AS vCenaBrutto_In,
            ISNULL(pi.KSI_ElementWartoscNetto, 0) AS vWartoscNetto_In,
            ISNULL(pi.KSI_ElementWartoscBrutto, 0) AS vWartoscBrutto_In
        FROM ProcessedDocumentItems AS pi
        LEFT JOIN OptimaVATRates AS ovr ON pi.StandardizedKSeFVAT_Text = ovr.StandardizedOptimaVAT_Text
    )

    SELECT
        CAST(NULL AS VARCHAR(50)) AS [Towar],
        CAST(NULL AS VARCHAR(50)) AS [Kod Towaru], 
        CAST(KSI_ElementIlosc AS DECIMAL(18, 4)) AS [Ilość],
        CAST(KSI_ElementJm AS VARCHAR(10)) AS [Jednostka],
        CAST(vStawka AS DECIMAL(18, 2)) AS [Stawka],
        
        /* Cena Netto: Priorytet Netto, jeśli brak -> wylicz z Brutto */
        CAST(CASE 
            WHEN vCenaNetto_In <> 0 THEN vCenaNetto_In 
            ELSE vCenaBrutto_In / (1.0 + vStawka / 100.0) 
        END AS DECIMAL(18, 2)) AS [Cena Netto],

        /* Cena Brutto: Priorytet Brutto, jeśli brak -> wylicz z Netto */
        CAST(CASE 
            WHEN vCenaBrutto_In <> 0 THEN vCenaBrutto_In 
            ELSE vCenaNetto_In * (1.0 + vStawka / 100.0) 
        END AS DECIMAL(18, 2)) AS [Cena Brutto],
        
        /* Wartość Netto */
        CAST(CASE 
            WHEN vWartoscNetto_In <> 0 THEN vWartoscNetto_In
            ELSE vWartoscBrutto_In / (1.0 + vStawka / 100.0)
        END AS DECIMAL(18, 2)) AS [Wartość Netto],

        /* Wartość Brutto */
        CAST(CASE 
            WHEN vWartoscBrutto_In <> 0 THEN vWartoscBrutto_In
            ELSE vWartoscNetto_In * (1.0 + vStawka / 100.0)
        END AS DECIMAL(18, 2)) AS [Wartość Brutto]
    FROM
        CalculatedBase;


END;

 

  • Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji KSeF:

 

ELSE
IF @^SenderControlName@ ='Elementy'
Begin


IF @Elementy_Column@=3 or @Elementy_Column@=6 /* Przeliczanie ceny brutto i wartości netto i brutto po wskazaniu ilości i ceny netto*/
BEGIN
UPDATE @Elementy@ 
set 
[Cena_Brutto]=(Cena_netto + (Cena_Netto*(Stawka/100))),
[Wartosc_Netto]=(Cena_Netto * ilosc),
[Wartosc_Brutto]=((Cena_Netto * ilosc)+(Cena_Netto * ilosc)*(Stawka/100))
where POS=@Elementy_Row@


END

IF @Elementy_Column@=3 or @Elementy_Column@=7 /* Przeliczanie ceny netto i wartości netto i brutto po wskazaniu ilości i ceny brutto*/
BEGIN
UPDATE @Elementy@ 
set 
[Cena_Netto]=Cena_Brutto / ((Stawka/100)+1),
[Wartosc_Netto]=(Cena_Brutto / ((Stawka/100)+1) * ilosc),
[Wartosc_Brutto]=(((Cena_Brutto / ((Stawka/100)+1)) * ilosc)+((Cena_Brutto / ((Stawka/100)+1)) * ilosc)*(Stawka/100))
where POS=@Elementy_Row@


END

IF @Elementy_Column@=3 or @Elementy_Column@=8 /* Przeliczanie wartości brutto oraz ceny netto i brutto po wskazaniu ilości i wartości netto*/
BEGIN
UPDATE @Elementy@ 
set 
[Cena_Netto]=Wartosc_Netto / ilosc, 
[Cena_Brutto]=((Wartosc_Netto / ilosc) + ((Wartosc_Netto / ilosc)*(Stawka/100))),
[Wartosc_Brutto]=Wartosc_Netto + (Wartosc_Netto*(Stawka/100))
where POS=@Elementy_Row@

END

IF @Elementy_Column@=3 or @Elementy_Column@=9 /* Przeliczanie wartości netto oraz ceny netto i brutto po wskazaniu ilości i wartości brutto*/
BEGIN
UPDATE @Elementy@ 
set 
[Cena_Netto]=(Wartosc_brutto / ((Stawka/100)+1)) / ilosc, 
[Cena_Brutto]=Wartosc_brutto / ilosc,
[Wartosc_netto]=Wartosc_brutto / ((Stawka/100)+1)
where POS=@Elementy_Row@


END
SELECT * FROM @Elementy@

END

 

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

 

Kolumna Jm i Stawka w trybie „Do odczytu”

 

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

 

select sum (Wartosc_Netto) from  @Elementy@

 

Kontrolka Liczbowa Razem netto

 

7. Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o identyfikatorze Razem_brutto, 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 (Wartosc_Brutto) from  @Elementy@

 

Kontrolka Liczbowa Razem brutto

 

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

 

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 KSeF w punkcie 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 tabelaryczna Elementy zostaje automatycznie wypełniona pozycjami odczytanymi bezpośrednio z systemu KSeF. Mechanizm ten zapewnia pełną zgodność danych z fakturą źródłową. System automatycznie przenosi dane dotyczące ilości, jednostki miary, stawek oraz wartości dla każdego wiersza faktury. Kolumna Jm oraz Stawka jest zablokowana do ręcznej edycji (tryb „Do odczytu”), co gwarantuje poprawność danych. Kontrolka Razem netto wyświetla poprawną sumę końcową z kolumny Wartość netto kontrolki Dane tabelaryczne. Kontrolka Razem brutto wyświetla poprawną sumę końcową z kolumny Wartość brutto kontrolki Dane tabelaryczne.

 

Uwaga
Kolumna „Kod Towaru” oraz „Towar” w kontrolce dane tabelaryczne są inicjowane wartością null , ponieważ nazewnictwo na fakturach dostawców w KSeF często odbiega od kartotek w systemie ERP, co wymaga od użytkownika świadomego, ręcznego dopasowania pozycji do odpowiedniego indeksu towarowego przed zaksięgowaniem.

 

Kontrolka Dane tabelaryczne uzupełniona pozycjami odczytanymi z KSeF 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 karcie obiegu pobrane 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!

 




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

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ść Netto i Wartość 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 (Obsługa "od Netto" i "od Brutto") */ 
WITH XL_Stawki AS (

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 
),
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,
 
        ISNULL(di.KSI_ElementWartoscNetto, 0) AS Netto,

        ISNULL(di.KSI_ElementWartoscBrutto, 0) AS Brutto
    FROM 
       [BPM_Przyklady].do.KS_DocumentItems AS di
    WHERE  
        di.KSI_DocumentId =  @ID_KSeF@  
), 
KSeF_Aggregated AS ( 
    /* Sumujemy niezależnie Netto i Brutto dla każdej grupy  */ 
    SELECT  
        KluczMapowania, 
        SUM(Netto) AS SumaNetto,
        SUM(Brutto) AS SumaBrutto
    FROM KSeF_Parsed 
    GROUP BY KluczMapowania 
), 
/* Finalne połączenie danych z logiką wyliczania VAT wg metody od netto lub od brutto */ 
SELECT  
 CASE
  /* Metoda "od brutto": Jeśli nie ma netto, wyliczamy je wstecz -> Brutto - VAT */
  WHEN ka.SumaNetto = 0 AND ka.SumaBrutto > 0 
   THEN CAST(ka.SumaBrutto - ROUND(ka.SumaBrutto * (xl.Procent / (1.0 + xl.Procent)),
 2) AS DECIMAL(18, 2))
        /* Metoda "od netto": bierzemy wprost */
        ELSE CAST(ka.SumaNetto AS DECIMAL(18, 2))
    END AS 'Wartość netto',
    xl.Id AS 'Stawka VAT ID',

CASE
   /* Metoda "od brutto": VAT liczony "w stu" */
   WHEN ka.SumaNetto = 0 AND ka.SumaBrutto > 0 
        THEN CAST(ROUND(ka.SumaBrutto * (xl.Procent / (1.0 + xl.Procent)), 2) AS DECIMAL(18, 2))
  /* Metoda "od netto": klasyczne mnożenie przez procent */
  ELSE CAST(ROUND(ka.SumaNetto * xl.Procent, 2) AS DECIMAL(18, 2))
END AS 'Wartość VAT',

CASE
  /* Metoda "od brutto": bierzemy po prostu sumę brutto */
  WHEN ka.SumaNetto = 0 AND ka.SumaBrutto > 0 
   THEN CAST(ka.SumaBrutto AS DECIMAL(18, 2))
 /* Metoda "od netto": Netto + wyliczony VAT */
 ELSE CAST(ROUND(ka.SumaNetto * (1.0 + xl.Procent), 2) AS DECIMAL(18, 2))
END 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 KSeF w punkcie 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 karcie obiegu pobrane 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!

 




Informacje ogólne

W lewej części okna definicji obiegu dokumentów prezentowane są kontrolki konfigurowanego typu obiegu.

 

Okno podglądu karty obiegu – przykład

 

Pierwszym krokiem tworzenia nowego typu obiegu jest dodanie kontrolek służących do wprowadzania danych.

 

Kontrolki dostępne w aplikacji Comarch BPM (dawniej DMS) możemy podzielić na trzy typy:

  • Kontrolki proste (Liczba całkowita, Liczba rzeczywista, Liczba stałoprzecinkowa, Data i godzina, Tekst, Lista, Wartość logiczna).
  • Kontrolki elektroniczne (Dokument elektroniczny, Kontrahent, Towar, Dane tabelaryczne) – umożliwiają wiązanie dokumentów, kontrahenta lub towaru z programu Comarch ERP Enterprise do aplikacji Comarch BPM (dawniej DMS)
  • Kontrolki pozostałe (Załącznik, Właściciel, Własna akcja, Separator, Etykieta)

 

Aby dodać kontrolkę do listy należy kliknąć przycisk [Dodaj] w panelu „Kontrolki”. Pojawi się formatka, na której z rozwijalnej listy należy wybrać typ kontrolki oraz wprowadzić nazwę. W panelu „Podgląd karty obiegu” pojawi się podgląd kontrolki.

Na poniższym filmie przedstawiono dodawanie kontrolki typu data i godzina:

 

Dodawanie nowej kontrolki

 

Przykładowe właściwości kontrolki

 

Lista typów kontrolek jest predefiniowana i nie można jej modyfikować. Zawiera następujące elementy (po kliknięciu na daną pozycję nastąpi przeniesienie do artykułu poświęconego danemu typowi kontrolki):

Przykładowa lista właściwości kontrolek składa się z następujących elementów:

  • Nazwa wyświetlana – jest to pole, którego zawartość będzie widoczna na karcie obiegu, wartość pola nie musi być unikalna, dzięki temu możliwe jest dodanie kilku kontrolek, dla których wyświetlana jest taka sama nazwa. Nazwa kontrolki nie może zawierać więcej niż 128 znaków.
  • Nazwa (identyfikator) – jest to pole, którego wartość widoczna jest wyłącznie we właściwościach kontrolki. Wartość tego pola musi być unikalna w ramach karty obiegu.
  • Inicjowanie – w zależności od typu kontrolki przyjmuje wartość Brak, SQL OD, SQL ERP, C# Script lub Słownik.

Uwaga

Od wersji 2023.1.2 jeżeli operator w ramach pola „Inicjowanie” wybierze wartość  SQL OD, SQL ERP lub C# Script, ale nie kliknie w link „Ustaw” i nie wprowadzi zapytania, wówczas przy próbie zapisu typu obiegu zostanie wyświetlony komunikat, a zmiany nie zostaną zapisane.

W takim przypadku należy zmienić wartość pola „Inicjowanie” na „Brak” albo wprowadzić brakujące zapytanie.

W ramach komunikatu podane są nazwa i identyfikator kontrolki, dla której nie wprowadzono wymaganego zapytania oraz opcja wybrana w polu „Inicjowanie”  tej kontrolki.

Przykładowy komunikat wyświetlany przy próbie zapisania typu obiegu, gdy na definicji kontrolki „Numer dokumentu” w polu „Inicjowanie” wybrano opcję „SQL ERP”, ale nie wprowadzono zapytania

  • Czas – wybranie opcji Tak umożliwia wprowadzanie godzin, minut i sekund na kontrolce typu Data i godzina.
  • Wartości – właściwość kontrolki typu Lista. Umożliwia zdefiniowanie słownika pozycji danej kontrolki. Wprowadzenie wartości następuje po kliknięciu klawisza Enter.
  • Max długość – właściwość kontrolki typu Tekst. Określa maksymalną długość wprowadzanego tekstu – max 900 znaków.
  • Tekst wielolinijkowy – właściwość kontrolki typu Tekst. Określa liczbę wierszy wyświetlanego pola tekstowego. Dopuszczalna liczba to 100 linijek.
  • Tryb pracy – właściwość kontrolki typu Lista. Przyjmuje wartości: Lista i Wyszukiwanie.
  • Dokumenty – właściwość kontrolki typu Dokumenty w obiegu. Przyjmuje wartości: Wszystkie lub Aktywne.
  • Plik wykonywalny – właściwość kontrolki typu Własna akcja, w której należy podać nazwę pliku wykonywalnego.
  • Procedura – właściwość kontrolki typu Własna akcja, w której należy podać nazwę procedury znajdującej się w bazie Comarch BPM (dawniej DMS).
  • Procedura ERP – właściwość kontrolki typu Własna akcja, w której należy wprowadzić nazwę procedury z bazy Comarch ERP Optima.
  • C# Script – właściwość kontrolki typu Własna akcja w wersji Comarch BPM (dawniej DMS) Premium, po kliknięciu w link „Ustaw” zostanie otwarte okno Skrypt C#, w którym można wpisać zapytanie w C#
  • Kontrolki powiązane – kontrolka prezentująca listę kontrolek powiązanych (w tym kontrolka typu „Lista”) na podstawie, których wyliczana jest wartość kontrolki wynikowej. Kontrolka wynikowa to kontrolka, na której zostało zdefiniowane wyrażenie np. arytmetyczne z użyciem kontrolek powiązanych.
  • Wzór na wartość – formatka, na której zdefiniowane zostało wyrażenie, na podstawie którego zostanie wyliczona wartość kontrolki wynikowej przy użyciu kontrolek powiązanych. Lista rozwijalna prezentuje wartości: Wyrażenie, SQL OD, SQL ERP lub C#.
  • Wersjonowanie pliku – właściwość kontrolki typu Załącznik. Umożliwia podpięcie na dokumencie kilku wersji tego samego pliku, z zaznaczeniem kolejności wersji.
  • Prezentuj na całej szerokości – właściwość każdego typu kontrolki. Umożliwia zaprezentowanie kontrolki na całej szerokości karty obiegu na szczegółach dokumentu.
  • Ustaw kontrolkę na początku wiersza – parametr odpowiada za ustawienie kontrolki na początku nowego wiersza karty obiegu, bez konieczności dodawania separatorów pomiędzy kontrolką bieżącą a kontrolką poprzednią.

Uwaga
Możliwość użycia parametru „Ustaw kontrolkę na początku wiersza” uzależniona jest od wartości parametru „Prezentuj na całej szerokości”. Gdy zaznaczono parametr „Prezentuj na całej szerokości”, nie ma możliwości użycia parametru „Ustaw kontrolkę na początku wiersza”. Gdy parametr „Ustaw kontrolkę na początku wiersza” jest zaznaczony, parametr „Prezentuj na całej szerokości” jest dostępny, jego zaznaczenie spowoduje wyłączenie i dezaktywację parametru „Ustaw kontrolkę na początku wiersza”.

  • Tytuł – właściwość kontrolki typu Komunikat. Wprowadzona wartość zostanie zaprezentowana jako tytuł na oknie wyświetlonego komunikatu.
  • Nazwa Spółki – właściwość kontrolek elektronicznych dostępna tylko podczas pracy z funkcjonalnością Wielofirmowość. Prezentuje listę zdefiniowanych spółek na zakładce Połączenia z ERP.
  • Pogrubione pola we właściwościach kontrolek są polami wymaganymi i muszą zostać uzupełnione w celu zapisania typu obiegu.
  • Liczba prezentowanych wierszy – właściwość kontrolki typu Dane tabelaryczne; określa liczbę wierszy tabeli prezentowaną na dokumencie
  • Kolumny – właściwość kontrolki typu Dane tabelaryczne; po kliknięciu w link „Dodaj” możliwe jest zdefiniowanie kolejnych kolumn tabeli
  • Manager dokumentów – parametr dostępny na zakładce „Archiwa” we właściwościach kontrolki typu Załącznik, jeśli praca z Managerem dokumentów jest aktywna, zaznaczenie parametru umożliwia załączanie plików umieszczonych w managerze dokumentów
  • Zapisz do Repozytorium – parametr dostępny na zakładce „Archiwa” we właściwościach kontrolki typu Załącznik, jeśli współpraca z modułem Comarch BPM (dawniej DMS) Repozytorium jest aktywna,  zaznaczenie parametru umożliwia dodanie załącznika do modułu Comarch BPM (dawniej DMS) Repozytorium (zob. Konfiguracja kontrolki typu Załącznik w ramach integracji modułu Repozytorium z modułem Workflow);
  • Liczba miejsc po przecinku, do której będzie zaokrąglana wartość – pole wprowadzone w wersji 2024.0.0; znajduje się na definicji kontrolki typu Liczba stałoprzecinkowa i służy do określenia, do ilu miejsc po przecinku będzie zaokrąglana wprowadzona liczba (od 0 do 6).
  • Rejestruj współrzędne GPS – parametr wprowadzony w wersji 2024.1.0; znajduje się na definicji kontrolki typu Tekst; jeśli parametr jest zaznaczony, wówczas w aplikacji mobilnej Comarch BPM aktywna jest obsługa GPS (zob. Obsługa GPS w aplikacji na system iOS i Obsługa GPS w aplikacji na system Android);
  • Rejestruj kody kreskowe – parametr wprowadzony w wersji 2025.0.0; znajduje się na definicji kontrolki typu Tekst; jeśli parametr jest zaznaczony, wówczas w aplikacji mobilnej Comarch BPM możliwe jest skanowanie i zapisywanie kodów kreskowych w ramach danej kontrolki typu Tekst (zob. Skanowanie i zapisywanie kodu kreskowego w kontrolce typu Tekst w aplikacjach mobilnych Comarch BPM);
  • Mobilny podpis – parametr wprowadzony w wersji 2024.3.0; znajduje się na definicji kontrolki typu Załącznik; domyślnie odznaczony. Zaznaczenie parametru powoduje zmianę w działaniu kontrolki typu załącznik – zob. Podpis mobile na kontrolce typu Załącznik
  • Zablokuj usuwanie załączników – parametr wprowadzony w wersji 2024.3.0; znajduje się na definicji kontrolki typu Załącznik; domyślnie odznaczony. Jeśli parametr zostanie zaznaczony, wówczas żaden operator na żadnym etapie nie będzie mógł usunąć pliku/plików z danej kontrolki typu Załącznik (zob. Załącznik);
  • Automatyczna archiwizacja dokumentu w Repozytorium – parametr wprowadzony w wersji 2025.1.0; znajduje się na definicji kontrolki typu Załącznik; widoczny jedynie w przypadku, jeśli operator zaznaczył parametr „Współpraca z Repozytorium” i ustawił typ/typy dokumentów; domyślnie odznaczony. Jeśli parametr zostanie zaznaczony, wówczas poniżej pojawi się pole „Etap archiwizacji”, w którym dostępna jest lista etapów, które zdefiniowano dla danego typu obiegu. Na wybranym etapie nastąpi archiwizacja dokumentu w Repozytorium (zob. Wprowadzenie opcji automatycznej archiwizacji dokumentów z Workflow w Repozytorium);
  • Pozwalaj na wybór lokalizacji podczas dodawania załącznika – parametr wprowadzony w wersji 2025.2.0; w przypadku współpracy z modułem Repozytorium jeżeli parametr „Pozwalaj na wybór lokalizacji podczas dodawania załącznika” został zaznaczony, wówczas podczas dodawania załącznika na dokumencie Comarch BPM zostanie otwarte okno, w którym operator może wybrać lokalizację w Comarch BPM Repozytorium, w której ma zostać zapisany dany załącznik (zob. Możliwość wyboru lokalizacji zapisu załącznika w Comarch BPM Repozytorium);
  • Odśwież po wykonaniu – parametr wprowadzony w wersji 2026.0.0; znajduje się na definicji kontrolki typu Własna akcja; jeśli checkbox „Odśwież po wykonaniu” jest zaznaczony, wówczas po wykonaniu akcji określonej w danej kontrolce karta obiegu zostanie przeładowana bez zapisywania obiegu.

Uwaga
Jeśli operator zaznaczył parametr „Odśwież po wykonaniu”, a nie zaznaczył parametru „Zapisz przed uruchomieniem”, wówczas zmiany, które wprowadzono w innych kontrolkach, nie zostaną zapisane, zaś uruchomienie własnej akcji spowoduje utratę niezapisanych zmian. Okno z pytaniem o zapis zmian nie jest wyświetlane.

 




Informacje ogólne

Pierwszym krokiem tworzenia nowego typu obiegu jest dodanie kontrolek służących do wprowadzania danych.

Kontrolki dostępne w aplikacji Comarch BPM (dawniej DMS) możemy podzielić na trzy typy:

  • Kontrolki proste (Liczba całkowita, Liczba rzeczywista, Liczba stałoprzecinkowa, Data i godzina, Tekst, Lista, Wartość logiczna).
  • Kontrolki elektroniczne (Dokument elektroniczny, Kontrahent, Towar, Dane tabelaryczne) – umożliwiają wiązanie dokumentów, kontrahenta lub towaru z programu Comarch ERP Optima, Comarch ERP XL lub Comarch ERP Altum do aplikacji Comarch BPM (dawniej DMS) (jeśli ustawiono współpracę z którymś z tych programów w trybie wielospółkowym).
  • Kontrolki pozostałe (Załącznik, Właściciel, Własna akcja, Separator, Etykieta)

 

Aby dodać kontrolkę do listy należy kliknąć przycisk [Dodaj] w panelu „Kontrolki”. Pojawi się formatka, na której z rozwijalnej listy należy wybrać typ kontrolki oraz wprowadzić nazwę. W panelu „Podgląd karty obiegu” pojawi się podgląd kontrolki.

Na poniższym filmie przedstawiono dodawanie kontrolki typu data i godzina:

 

Dodawanie nowej kontrolki

 

Przykładowe właściwości kontrolki

 

Lista typów kontrolek jest predefiniowana i nie można jej modyfikować. Zawiera następujące elementy (po kliknięciu na daną pozycję nastąpi przeniesienie do artykułu poświęconego danemu typowi kontrolki) :

Przykładowa lista właściwości kontrolek składa się z następujących elementów:

  • Nazwa wyświetlana – jest to pole, którego zawartość będzie widoczna na karcie obiegu, wartość pola nie musi być unikalna, dzięki temu możliwe jest dodanie kilku kontrolek, dla których wyświetlana jest taka sama nazwa. Nazwa kontrolki nie może zawierać więcej niż 128 znaków.
  • Nazwa (identyfikator) – jest to pole, którego wartość widoczna jest wyłącznie we właściwościach kontrolki. Wartość tego pola musi być unikalna w ramach karty obiegu.
  • Inicjowanie – w zależności od typu kontrolki przyjmuje wartość Brak, SQL OD, C# lub Słownik.

Uwaga

Od wersji 2023.1.2 jeżeli operator w ramach pola „Inicjowanie” wybierze wartość  SQL OD, SQL ERP lub C# Script, ale nie kliknie w link „Ustaw” i nie wprowadzi zapytania, wówczas przy próbie zapisu typu obiegu zostanie wyświetlony komunikat, a zmiany nie zostaną zapisane.

W takim przypadku należy zmienić wartość pola „Inicjowanie” na „Brak” albo wprowadzić brakujące zapytanie.

W ramach komunikatu podane są nazwa i identyfikator kontrolki, dla której nie wprowadzono wymaganego zapytania oraz opcja wybrana w polu „Inicjowanie”  tej kontrolki.

Przykładowy komunikat wyświetlany przy próbie zapisania typu obiegu, gdy na definicji kontrolki „Numer dokumentu” w polu „Inicjowanie” wybrano opcję „SQL OD”, ale nie wprowadzono zapytania

  • Czas – wybranie opcji Tak umożliwia wprowadzanie godzin, minut i sekund na kontrolce typu Data i godzina.
  • Wartości – właściwość kontrolki typu Lista. Umożliwia zdefiniowanie słownika pozycji danej kontrolki. Wprowadzenie wartości następuje po kliknięciu klawisza Enter.
  • Max długość – właściwość kontrolki typu Tekst. Określa maksymalną długość wprowadzanego tekstu – max 900 znaków.
  • Tekst wielolinijkowy – właściwość kontrolki typu Tekst. Określa liczbę wierszy wyświetlanego pola tekstowego. Dopuszczalna liczba to 100 linijek.
  • Tryb pracy – właściwość kontrolki typu Lista. Przyjmuje wartości: Lista i Wyszukiwanie.
  • Dokumenty – właściwość kontrolki typu Dokumenty w obiegu. Przyjmuje wartości: Wszystkie lub Aktywne.
  • Plik wykonywalny – właściwość kontrolki typu Własna akcja, w której należy podać nazwę pliku wykonywalnego.
  • Procedura – właściwość kontrolki typu Własna akcja, w której należy podać nazwę procedury znajdującej się w bazie Comarch BPM (dawniej DMS).
  • C# Script – właściwość kontrolki typu Własna akcja w wersji Comarch BPM (dawniej DMS) Premium, po kliknięciu w link „Ustaw” zostanie otwarte okno Skrypt C#, w którym można wpisać zapytanie w C#
  • Kontrolki powiązane – kontrolka prezentująca listę kontrolek powiązanych (w tym kontrolka typu „Lista”) na podstawie, których wyliczana jest wartość kontrolki wynikowej. Kontrolka wynikowa to kontrolka, na której zostało zdefiniowane wyrażenie np. arytmetyczne z użyciem kontrolek powiązanych.
  • Wzór na wartość – formatka, na której zdefiniowane zostało wyrażenie, na podstawie którego zostanie wyliczona wartość kontrolki wynikowej przy użyciu kontrolek powiązanych. Lista rozwijalna prezentuje wartości: Wyrażenie, SQL OD lub C#.
  • Wersjonowanie pliku – właściwość kontrolki typu Załącznik. Umożliwia podpięcie na dokumencie kilku wersji tego samego pliku, z zaznaczeniem kolejności wersji.
  • Prezentuj na całej szerokości – właściwość każdego typu kontrolki. Umożliwia zaprezentowanie kontrolki na całej szerokości karty obiegu na szczegółach dokumentu.
  • Ustaw kontrolkę na początku wiersza – parametr odpowiada za ustawienie kontrolki na początku nowego wiersza karty obiegu, bez konieczności dodawania separatorów pomiędzy kontrolką bieżącą a kontrolką poprzednią.

Uwaga
Możliwość użycia parametru „Ustaw kontrolkę na początku wiersza” uzależniona jest od wartości parametru „Prezentuj na całej szerokości”. Gdy zaznaczono parametr „Prezentuj na całej szerokości”, nie ma możliwości użycia parametru „Ustaw kontrolkę na początku wiersza”. Gdy parametr „Ustaw kontrolkę na początku wiersza” jest zaznaczony, parametr „Prezentuj na całej szerokości” jest dostępny, jego zaznaczenie spowoduje wyłączenie i dezaktywację parametru „Ustaw kontrolkę na początku wiersza”.

  • Tytuł – właściwość kontrolki typu Komunikat. Wprowadzona wartość zostanie zaprezentowana jako tytuł na oknie wyświetlonego komunikatu.
  • Nazwa Spółki – właściwość kontrolek elektronicznych dostępna tylko podczas pracy z funkcjonalnością Wielofirmowość. Prezentuje listę zdefiniowanych spółek na zakładce Połączenia z ERP.
  • Pogrubione pola we właściwościach kontrolek są polami wymaganymi i muszą zostać uzupełnione w celu zapisania typu obiegu.
  • Liczba prezentowanych wierszy – właściwość kontrolki typu Dane tabelaryczne; określa liczbę wierszy tabeli prezentowaną na dokumencie
  • Kolumny – właściwość kontrolki typu Dane tabelaryczne; po kliknięciu w link „Dodaj” możliwe jest zdefiniowanie kolejnych kolumn tabeli[
  • Manager dokumentów – parametr dostępny na zakładce „Archiwa” we właściwościach kontrolki typu Załącznik, jeśli praca z Managerem dokumentów jest aktywna, zaznaczenie parametru umożliwia załączanie plików umieszczonych w managerze dokumentów
  • Zapisz do Repozytorium – parametr dostępny na zakładce „Archiwa” we właściwościach kontrolki typu Załącznik, jeśli współpraca z modułem Comarch BPM (dawniej DMS) Repozytorium jest aktywna,  zaznaczenie parametru umożliwia dodanie załącznika do modułu Comarch BPM (dawniej DMS) Repozytorium (zob. Konfiguracja kontrolki typu Załącznik w ramach integracji modułu Repozytorium z modułem Workflow);
  • Liczba miejsc po przecinku, do której będzie zaokrąglana wartość – pole wprowadzone w wersji 2024.0.0; znajduje się na definicji kontrolki typu Liczba stałoprzecinkowa i służy do określenia, do ilu miejsc po przecinku będzie zaokrąglana wprowadzona liczba (od 0 do 6);
  • Rejestruj współrzędne GPS – parametr wprowadzony w wersji 2024.1.0; znajduje się na definicji kontrolki typu Tekst; jeśli parametr jest zaznaczony, wówczas w aplikacji mobilnej Comarch BPM aktywna jest obsługa GPS (zob. Obsługa GPS w aplikacji na system iOS i Obsługa GPS w aplikacji na system Android);
  • Rejestruj kody kreskowe – parametr wprowadzony w wersji 2025.0.0; znajduje się na definicji kontrolki typu Tekst; jeśli parametr jest zaznaczony, wówczas w aplikacji mobilnej Comarch BPM możliwe jest skanowanie i zapisywanie kodów kreskowych w ramach danej kontrolki typu Tekst (zob. Skanowanie i zapisywanie kodu kreskowego w kontrolce typu Tekst w aplikacjach mobilnych Comarch BPM);
  • Mobilny podpis – parametr wprowadzony w wersji 2024.3.0; znajduje się na definicji kontrolki typu Załącznik; domyślnie odznaczony. Zaznaczenie parametru powoduje zmianę w działaniu kontrolki typu załącznik – zob. Podpis mobile na kontrolce typu Załącznik
  • Zablokuj usuwanie załączników – parametr wprowadzony w wersji 2024.3.0; znajduje się na definicji kontrolki typu Załącznik; domyślnie odznaczony. Jeśli parametr zostanie zaznaczony, wówczas żaden operator na żadnym etapie nie będzie mógł usunąć pliku/plików z danej kontrolki typu Załącznik (zob. Załącznik);
  • Automatyczna archiwizacja dokumentu w Repozytorium – parametr wprowadzony w wersji 2025.1.0; znajduje się na definicji kontrolki typu Załącznik; widoczny jedynie w przypadku, jeśli operator zaznaczył parametr „Współpraca z Repozytorium” i ustawił typ/typy dokumentów; domyślnie odznaczony. Jeśli parametr zostanie zaznaczony, wówczas poniżej pojawi się pole „Etap archiwizacji”, w którym dostępna jest lista etapów, które zdefiniowano dla danego typu obiegu. Na wybranym etapie nastąpi archiwizacja dokumentu w Repozytorium (zob. Wprowadzenie opcji automatycznej archiwizacji dokumentów z Workflow w Repozytorium);
  • Pozwalaj na wybór lokalizacji podczas dodawania załącznika – parametr wprowadzony w wersji 2025.2.0; w przypadku współpracy z modułem Repozytorium jeżeli parametr „Pozwalaj na wybór lokalizacji podczas dodawania załącznika” został zaznaczony, wówczas podczas dodawania załącznika na dokumencie Comarch BPM zostanie otwarte okno, w którym operator może wybrać lokalizację w Comarch BPM Repozytorium, w której ma zostać zapisany dany załącznik (zob. Możliwość wyboru lokalizacji zapisu załącznika w Comarch BPM Repozytorium);
  • Odśwież po wykonaniu – parametr wprowadzony w wersji 2026.0.0; znajduje się na definicji kontrolki typu Własna akcja; jeśli checkbox „Odśwież po wykonaniu” jest zaznaczony, wówczas po wykonaniu akcji określonej w danej kontrolce karta obiegu zostanie przeładowana bez zapisywania obiegu.

Uwaga
Jeśli operator zaznaczył parametr „Odśwież po wykonaniu”, a nie zaznaczył parametru „Zapisz przed uruchomieniem”, wówczas zmiany, które wprowadzono w innych kontrolkach, nie zostaną zapisane, zaś uruchomienie własnej akcji spowoduje utratę niezapisanych zmian. Okno z pytaniem o zapis zmian nie jest wyświetlane.

 

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!

 




Zakładka Uprawnienia

W ramach zakładki „Uprawnienia” można wyróżnić trzy sekcje:

 

Sekcja „Uprawnienia ogólne”

 

Sekcja „Uprawnienia ogólne”

 

Administrator – umożliwia nadanie operatorowi uprawnień administracyjnych.

 

Uwaga
Operator, który posiada nadane uprawnienia Administratora ma dostęp do wszystkich dokumentów i typów obiegu. Każdy z dokumentów może edytować, usunąć lub przekazać do kolejnego etapu.

 

Sekcja „Praca z dokumentem”

Sekcja „Praca z dokumentem”

 

Zmiana daty utworzenia dokumentu – domyślnie operator nie ma prawa do zmiany daty na dokumencie. Ustawiona wartość „Tak” umożliwia zmianę daty utworzenia dokumentu.

 

Usuwanie dokumentów – domyślnie operator nie ma prawa do usuwania dokumentów. Uprawnienie nadaje się poprzez wybór opcji „Tak”.

 

Wydruk standardowy – parametr decydujący o możliwości wykonania standardowego wydruku karty obiegu dokumentów. Gdy wartość parametru zostanie ustawiona na „Tak”, na karcie obiegu po kliknięciu w ikonę zostanie wywołany dotychczasowy wydruk karty obiegu. Jeżeli wartość parametru zostanie ustawiona na „Nie”, wówczas standardowy wydruk nie będzie dostępny i jeżeli nie zostały zdefiniowane żadne raporty, do których pracownik jest uprawniony, wówczas ikona będzie niewidoczna dla pracownika. Jeżeli parametr „Wydruk standardowy” zostanie ustawiony na „Nie” i pracownik jest uprawniony do wywołania raportu w kontekście szczegółów dokumentu, wówczas po kliknięciu w ikonę zostanie wywołany raport. Gdy w kontekście szczegółów dokumentu pracownik uprawniony jest do wywołania wielu raportów, wówczas po kliknięciu w ikonę zostanie uruchomiony pierwszy z listy dostępnych raportów. Pozostałe raporty, do których pracownik jest uprawniony w danym kontekście dostępne są na liście pod przyciskiem .

 

Sekcja „Funkcjonalności”

 

Sekcja „Funkcjonalności”

 

Inicjowanie obiegu na podstawie skanu dokumentu – nadane uprawnienie aktywuje funkcjonalność Skany dokumentów  , dzięki czemu operator może inicjować określone typy obiegów w oparciu o skany dokumentów (zob. Konfiguracja masowego skanowania).

 

Automatyczne generowanie dokumentów – nadane uprawnienie aktywuje funkcjonalność automatycznego tworzenia dokumentów z wykorzystaniem narzędzia OCR (zob. dział Automatyczne generowanie dokumentów). Za pomocą narzędzia możliwe jest także inicjowanie obiegu dla dokumentów pobranych z bazy danych sql za pomocą zapytania SQL.

 

Wydruk książki nadawczej – uprawnienie aktywuje funkcjonalność drukowania książki nadawczej. Na liście dokumentów zostaje włączona ikona „Wydruk książki nadawczej”  (zob. Wydruk listy dokumentów w formie książki nadawczej).

 

Eksport listy dokumentów do arkusza – uprawnienie aktywuje funkcjonalność eksportu wyświetlonej listy dokumentów do arkusza MS Excel (zob. Eksport listy dokumentów do arkusza).

 

Konfiguracja automatycznego trybu pracy – pole dostępne od wersji 2023.1.0; określa, czy pracownik ma dostęp do zakładki [Konfiguracja automatycznego trybu pracy] i czy może tworzyć skrypty do pracy automatycznej (zob. Konfiguracja automatycznego trybu pracy (robotyzacja procesów) ).

 

Kreator raportów i dashboardów – uprawnienie aktywuje funkcjonalność tworzenia raportów i dashboardów  (zob. dział Raporty i dashboardy). W menu bocznym aplikacji pojawia się ikona [Kreator raportów i dashboardów].

 

Praca z modułem –określa czy pracownik posiada dostęp do modułu Manager dokumentów lub Repozytorium (jeśli została włączona współpraca z modułem Repozytorium).

Jeżeli w parametrze wybrano wartość ‘Obieg Dokumentów i Manager dokumentów’  lub 'Obieg Dokumentów i Repozytorium’ wówczas w menu bocznym dostępna jest ikona [Manager dokumentów/Repozytorium].

Jeśli w parametrze wybrano wartość „Obieg Dokumentów”, wówczas operator nie ma dostępu ani do modułu Manager dokumentów ani do modułu Repozytorium, nie jest także dla niego wyświetlana w menu głównym ikona .

 

ChatERP – pole dodane w wersji 2026.0.0; w ramach tego pola można zadecydować o dostępności ChatERP dla danego pracownika. Administrator może wybrać w ramach pola jedną z dwóch wartości:

  • Tak – wówczas dany operator będzie mógł korzystać z ChatERP, a ikona [ChatERP] (w aplikacji desktop) oraz [ChatERP] (w aplikacji web) w górnej części okna aplikacji Comarch BPM będzie dla niego widoczna
  • Nie – w takim przypadku dany operator nie będzie mógł korzystać z ChatERP, a ikona [ChatERP] (w aplikacji desktop) oraz [ChatERP] (w aplikacji web) w górnej części okna aplikacji Comarch BPM nie będzie dla niego widoczna

 

Uwaga
Jeżeli dla danego operatora na karcie pracownika, na zakładce „Uprawnienia”, w sekcji „Funkcjonalności” w polu „Administrator“ wybrano opcję „Tak“, wówczas automatycznie zostaje mu nadane uprawnienie do korzystania z ChatERP (w polu „ChatERP“ wybrana jest opcja „Tak“). Uprawnienie administratora do korzystania z ChatERP może zostać wyłączone, analogicznie jak dla każdego operatora.

 

Pracownicy, zakładka „Uprawnienia”




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

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:

  • Eliminacja ręcznego wprowadzania pozycji dokumentów: Dane z faktury KSeF (pobrane do tabeli do.KS_DocumentItems) są automatycznie mapowane i wypełniają kontrolkę tabelaryczną na karcie obiegu.
  • Automatyczne kalkulowanie wartości: Kontrolka tabelaryczna uzyskuje zdolność automatycznego przeliczania wszędzie tam, gdzie zmienione zostaną dane wejściowe (np. Cena, Ilość, Stawka VAT) przez użytkownika.
  • Minimalizacja błędów i skrócenie czasu obsługi faktury: Proces akceptacji bazuje na poprawnych i spójnych danych, które są automatycznie kalkulowane i aktualizowane, zanim dokument zostanie zaksięgowany w ERP XL.

 

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) 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 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 wykorzystuje ID dokumentu KSeF (zapisane w dedykowanej kontrolce typu Liczba całkowita o nazwie np. ID_KSeF) jako identyfikator do pobrania danych.
  • Kontrolka tabelaryczna obserwuje to pole (ID_KSeF), reagując na jego wypełnienie.
  • Kluczowym elementem jest zapytanie SQL umieszczone na zakładce Inicjowanie Wartości kontrolki typu dane 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.
  • W zapytaniu SQL zawarta jest niezbędna logika konwersji (CTE z ROW_NUMBER), która mapuje stawki VAT z KSeF na identyfikatory liczbowe (Naz_GIDLp) z tabeli CDN.Nazwy, których BPM wymaga do poprawnego wyświetlania danych w kolumnie typu Lista (Stawka VAT).
  • Dodatkowo, kontrolka Dane Tabelaryczne (Elementy) obserwuje sama siebie (@^SenderControlName@ = ’Elementy’), co aktywuje logikę automatycznego przeliczania wartości w trybie edycji:
    • Zapytanie monitoruje zmiany w kolumnach wejściowych, takich jak Cena lub Ilość (oraz Stawka VAT).
    • W przypadku edycji tych pól, skrypt automatycznie pobiera stawkę VAT, a następnie przelicza i aktualizuje wartości Netto (Ilość * Cena) oraz Brutto (Netto * (1 + VAT)) w bieżącym wierszu.

 

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) Elementy i skonfigurowano w niej następujące kolumny:

  • ”Nazwa” (identyfikator kolumny: Nazwa) typ Tekst
  • ”Cena” (identyfikator kolumny: Cena)typ Liczba stałoprzecinkowa
  • ”Ilość” (identyfikator kolumny: Ilosc) typ Liczba stałoprzecinkowa
  • ”Netto” (identyfikator kolumny: Netto)typ Liczba stałoprzecinkowa
  • ”Stawka VAT” (identyfikator kolumny: StawkaVAT)typ Lista
  • ”Brutto” (identyfikator kolumny: Brutto)typ Liczba stałoprzecinkowa

 

Kolumny w kontrolce typu Dane tabelaryczne

 

3. W kontrolce typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy 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 typu Dane tabelaryczne

 

  • Jednostki miary:

 

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

 

Lista Jednostka miary w kontrolce typu Dane tabelaryczne

 

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

 

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

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.

 

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

 

  • Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji KSeF:

 

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”

 

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

 

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

 

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

 




Wnioskowanie o certyfikat KSeF w Module Certyfikatów i Uprawnień/Aplikacji Podatnika, nadawanie uprawnień w Aplikacji Podatnika KSeF oraz certyfikaty osobiste

Opis wnioskowania o certyfikat KSeF w Module Certyfikatów i Uprawnień/Aplikacji Podatnika

Aby uzyskać certyfikat KSeF w Module Certyfikatów i Uprawnień/ Aplikacji Podatnika należy kolejno wykonać następujące kroki:

  • Przejść na stronę https://ap.ksef.mf.gov.pl/web/
  • Wybrać opcję „Uwierzytelnij się w Krajowym Systemie e-Faktur”
  • Zalogować się do systemu, wybierając opcję „Zaloguj profilem zaufanym” lub „Zaloguj certyfikatem kwalifikowanym” i wprowadzić odpowiednie dane
  • Po zalogowaniu w ramach Aplikacji Podatnika rozwinąć zakładkę „Certyfikaty”, znajdującą się w panelu po lewej stronie i wybrać opcję „Wnioskuj o certyfikat”

 

Wybór opcji „Wnioskuj o certyfikat” w Aplikacji Podatnika KSeF (w tym przypadku na środowisku testowym)

 

  • Wypełnić wniosek o certyfikat, uzupełniając poprawnie pola „Nazwa certyfikatu”, „Hasło” (spełniające podane we wniosku wymagania) i „Powtórz hasło”, a następnie kliknąć przycisk [Generuj]

 

Przykładowe uzupełnienie wniosku o wydanie certyfikatu (środowiska testowe)

 

  • Po kliknięciu w przycisk [Generuj] następuje automatyczne pobranie pliku klucza prywatnego, a na ekranie pojawia się informacja „Wygenerowano klucz prywatny”. Wygenerowany plik klucza prywatnego należy zapisać na dysku.

 

Pobranie klucza prywatnego (środowisko testowe)

 

  • Następnie:
    • w ramach pola „Przeznaczenie certyfikatu“ należy wybrać opcję „Uwierzytelnienie w systemie KSeF“
    • w ramach pola „Certyfikat ważny od“ należy wybrać datę rozpoczęcia ważności certyfikatu – nie można ustawić daty wstecz, musi być ustawiona na dzień bieżący lub późniejszy

 

Przykładowe uzupełnienie pól „Przeznaczenie certyfikatu” i „Certyfikat ważny od” (środowisko testowe)

 

  • Po poprawnym uzupełnieniu pól „Przeznaczenie certyfikatu” i „Certyfikat ważny od” nalezy kliknąć w przycisk [Wyślj wniosek o wydanie certyfikatu]. Wówczas rozpocznie się przetwarzanie wniosku, a w aplikacji pojawi się informacja „W realizacji“. Należy kliknąć w przycisk [Odśwież], który znajduje się na stronie

 

Wybór przycisku „Odśwież” (środowisko testowe)

 

  • Jeśli przetworzenie wniosku przebiegło poprawnie, wówczas po kliknięciu w przycisk [Odśwież] w ramach strony zostaje wyświetlona informacja „Zakończono pomyślnie“ oraz trzy przyciski. Nalezy kliknąć w przycisk [Pobierz certyfikat] – wówczas certyfikat zostanie pobrany na komputer. Plik certyfikatu nalezy zapisac na dysku.

 

Wybór przycisku „Pobierz certyfikat” (środowisko testowe)

 

Przykładowy widok okna po pobraniu certyfikatu (środowisko testowe)

 

Wskazówka

Jeśli certyfikat nie został pobrany albo jeśli operator chce go pobrać ponownie, wówczas powinien kliknąć w przycisk [Lista certyfikatów]. Nastąpi wówczas przejście do okna “Lista certyfikatów”, w ramach którego można zarządzać wystawionymi certyfikatami, a mianowicie:

  • Pobrać dany certyfikat;
  • Unieważnić dany certyfikat;
  • Sprawdzić dane certyfikatu, np. datę ważności

 

Przykładowy widok okna „Lista certyfikatów” (środowisko testowe)

  • Pobrane pliki: certyfikatu i klucza prywatnego znajdują się w folderze „Pobrane”. Operator może przenieść je do osobnego folderu, np. „KSeF”.

 

Pobrane przykładowe pliki: certyfikatu i klucza prywatnego

Następnie należy skonfigurować współpracę z KSeF w aplikacji Comarch BPM – zob. Konfiguracja współpracy Comarch BPM z KSeF

 

Nadawanie uprawnień w Aplikacji Podatnika KSeF oraz certyfikaty osobiste

W przypadku, gdy osoba, która w kontekście firmy z danym numerem NIP identyfikuje się innym, osobnym numerem NIP albo PESEL, właściciel takiej firmy albo uprawiona osoba (np. administrator) jest zobowiązany, aby nadać takiej osobie uprawnienia. W tym celu należy wykonać następujące kroki:

  • W ramach panelu Aplikacji Podatnika/Module Certyfikatów i Uprawnień rozwinąć zakładkę „Uprawnienia” i kliknąć w sekcję „Nadaj uprawnienie”

 

Wybór sekcji „Nadaj uprawnienie” (środowisko testowe)

 

  • W oknie „Nadawanie uprawnień” wybrać:
    • w ramach pola „Rodzaj uprawnienia”: opcję „Osobie fizycznej do pracy w KSeF”
    • w ramach pola „Dane osoby fizycznej” (widocznego po wyborze opcji „Osobie fizycznej do pracy w KSeF”): „Osoba fizyczna posługująca się Profilem Zaufanym lub certyfikatem zawierającym identyfikator NIP lub Pesel”, a następnie:
    • w ramach pola „Identyfikator”: opcję „NIP” lub „PESEL” (w zależności od tego, czy osoba fizyczna posługuje się numerem NIP czy PESEL), a poniżej w polu „Wpisz NIP”/”Wpisz PESEL” odpowiedni numer NIP/PESEL danej osoby fizycznej;
    • w ramach pola „Imię”: imię osoby fizycznej, której mają zostać nadane uprawnienia
    • w ramach pola „Nazwisko”: nazwisko osoby fizycznej, której mają zostać nadane uprawnienia
    • w ramach pola „Zakres uprawnień”: przynajmniej opcje „wystawiania faktur” i „przeglądania faktur”
  • po poprawnym uzupełnieniu wszystkich danych kliknąć w przycisk [Nadaj uprawnienia]

Wskazówka

W oknie „Nadawanie uprawnień” znajdują się automatycznie wypełnione pola:

  • „Podmiot kontekstu:NIP” – podmiot, w którym będzie można pracować z KSeF
  • „Osoba uprawniająca: NIP” – osoba, która nadaje aktualnie uprawnienia – jeśli uprawnienia nadaje inna osoba uprawniona, wówczas w części osoba uprawniona widoczne są jej dane.

Uprawnienia mogą zostać nadane przez właściciela albo przez uprawnionego administratora (dodanego w ramach sekcji „Dodaj administratora”).

 

Widok okna „Nadawanie uprawnień” przed dokonaniem zmian (środowisko testowe)

 

Przykładowy widok okna „Nadawanie uprawnień” po wprowadzeniu zmian oraz wybór przycisku „Nadaj uprawnienia” (środowisko testowe)

 

Po kliknięciu w przycisk [Nadaj uprawnienia] wniosek o nadanie uprawnień zostaje złożony, a w oknie wyświetla się informacja „Zakończono pomyślnie”, ID uprawnionego orz rodzaj przyznanych uprawnień.

 

Przykładowy widok okna „Nadawanie uprawnień” po złożeniu wniosku (środowisko testowe)

 

Uwaga

Jeżeli operator chce uwierzytelnić się i pracować w kontekście innej firmy (także, aby uzyskać certyfikat osobisty), wówczas musi zalogować się na daną firmę, wprowadzając swój NIP w ramach pola „Podpisz żądanie autoryzacyjne” .

 

Wskazówka

Jeśli operator chce zarządzać nadanymi uprawnieniami, wówczas powinien przejść do sekcji „Zarządzaj uprawnieniami”, dostępnej na zakładce „Uprawnienia” W ramach sekcji „Zarządzaj uprawnieniami” można:

  • Wyświetlić nadane uprawnienia;
  • Odebrać nadane uprawnienia poszczególnym uprawnionym podmiotom (zaznaczając checkbox obok danego uprawnienia i klikając „Odbierz uprawnienie”).

 

Przykładowy widok okna „Zarządzaj uprawnieniami” (środowisko testowe)

 




Definiowanie punktu konfiguracyjnego (Import dokumentów zakupu z KSeF)

W wersji 2024.0.0 został dodany nowy typ punktu ACD, który służy do współpracy z KSeF„Import dokumentów zakupu z KSeF”.

 

Uwaga

W wersji 2024.0.1 w pliku Web.config w folderze aplikacji serwerowej (dawnej web) dodano klucz add key=”KSeFWorkMode” value=”Demo” /> – klucz umozliwia określenie, czy Firma testuje funkcjonalność wysyłania faktur do KSeF, czy korzysta z niej produkcyjnie.

Klucz może przybierać jedną z następujących wartości:

1.Demo –  w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Demo;

2.Productionwartość domyślna od wersji 2026.0.0; w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie Produkcyjnym, czyli wersji produkcyjnej systemu;

3.Test – w przypadku wprowadzenia takiej wartości praca z systemem KSeF odbywa się w trybie testowym.

Uwaga
W celu przetestowania współpracy z Comarch BPM na prawdziwych danych zalecamy korzystanie z trybu Demo.

W kwestii różnic pomiędzy powyższymi trybami zob. Przełączanie trybu pracy z KSeF

 

Uwaga

W wersji 2026.0.0 w pliku Web.config w folderze aplikacji serwerowej (dawnej web) wprowadzono nowy klucz “KSeFProdVersion“, który ma umożliwić zmianę wersji KSeF dla pracy w trybie produkcyjnym. Klucz może przyjmować jedną z następujących wartości:

  • 1 – wartość domyślna w wersji 2026.0.0; możliwa jest praca w trybie produkcyjnym KSeF 1.0
  • 2 – możliwa jest praca w trybie produkcyjnym KSeF 2.0

Praca w trybie produkcyjnym KSeF 2.0 będzie możliwa jedynie wtedy, gdy <add key=”KSeFWorkMode” value=”Production” /> oraz <add key=”KSeFProdVersion” value=”2″ /> – ten tryb pracy będzie aktywny dopiero po uruchomieniu przez Ministerstwo Finansów środowiska produkcyjnego KSeF 2.0, tj. po 01.02.2026.

Klucz “KSeFProdVersion“ nie wpływa na pracę w trybie „Test“ oraz „Demo“.

 

Zakładka Tryb współpracy

Aby utworzyć punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF” należy w oknie „Automatyczne generowanie dokumentów” dodać nowy punkt konfiguracyjny za pomocą ikony , a następnie na liście trybów pracy punktu wybrać opcję „Import dokumentów zakupu z KSeF” .

 

Punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF” , zakładka „Tryb współpracy”

 

Zakładka Ogólne

Wygląd zakładki „Ogólne” jest zależny od trybu pracy Comarch BPM (dawniej DMS).

W trybie jednospółkowym na zakładce należy w ramach pola:

  • Nazwa punktuokreślić nazwę pod jaką punkt konfiguracyjny będzie widoczny na liście punktów;
  • Typ obieguwskazać typ obiegu, w ramach którego będą generowane dokumenty zawierające dane z KSeF; od wersji 2026.0.0 należy dokonać wyboru jednego lub wielu typów obiegów – po kliknięciu w pole rozwijana jest lista wszystkich typów obiegów dostępnych w systemie, a administrator powinien zaznaczyć checkbox obok jednego lub więcej typu obiegu – liczba zaznaczonych typów obiegów może być dowolna. Jeśli lista jest długa, po prawej stronie dostępny jest suwak.

Gdy operator zaznaczy typy obiegów i kliknie obok listy, wówczas zostanie ona zamknięta, a w polu „Typ obiegu“ będzie widoczny napis „Wybrano: [liczba wybranych typów obiegów]“.

Jeżeli Comarch BPM (dawniej DMS) pracuje w trybie jednospółkowym, wówczas komunikacja z KSeF odbywa się na podstawie danych (numeru NIP firmy oraz tokena uwierzytelniającego), które zostały podane w ramach zakładki „KSeF” na zakładce [Ustawienia].(zob. Integracje (dawna zakładka „KSeF”)).

 

Widok zakładki „Ogólne” na definicji punktu ACD typu „Import dokumentów zakupu z KSeF” z polami atrybutów (przed uzupełnieniem, tryb jednofirmowy)

Widok zakładki „Ogólne” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF”, gdy w polu „Typ obiegu“ jest wybieranych wiele typów obiegów

 

W trybie wielospółkowym na zakładce należy w ramach pola:

  • Nazwa punktuokreślić nazwę pod jaką punkt konfiguracyjny będzie widoczny na liście punktów;
  • Spółkawskazać spółkę, dla której będzie odbywać się komunikacja z KSeF – na podstawie numeru NIP oraz/albo tokenu, które zostały zapisane podczas konfiguracji danej spółki na zakładce „Połączenia z ERP” na zakładce [Ustawienia].(zob. Połączenia z ERP). Zapytania, które są wprowadzane na zakładkach „Lista” oraz „Kontrolki” również są wykonywane w kontekście bazy danej spółki;
  • Typ obieguwskazać typ obiegu, w ramach którego będą generowane dokumenty zawierające dane z KSEF; od wersji 2026.0.0 należy dokonać wyboru jednego lub wielu typów obiegów – po kliknięciu w pole rozwijana jest lista wszystkich typów obiegów dostępnych w systemie, a administrator powinien zaznaczyć checkbox obok jednego lub więcej typu obiegu – liczba zaznaczonych typów obiegów może być dowolna. Jeśli lista jest długa, po prawej stronie dostępny jest suwak.

Uwaga
Aby możliwy był zapis punktu konfiguracyjnego ACD, konieczne jest wybranie co najmniej jednego typu obiegu w polu „Typ obiegu”.

Gdy operator zaznaczy typy obiegów i kliknie obok listy, wówczas zostanie ona zamknięta, a w polu „Typ obiegu“ będzie widoczny napis „Wybrano: [liczba wybranych typów obiegów]“.

 

Widok zakładki „Ogólne” na definicji punktu ACD typu „Import dokumentów zakupu z KSeF” z polami atrybutów (przed uzupełnieniem, tryb wielofirmowy)

 

  • Nazwy atrybutów na liście dokumentów w punkcie ACD  – w wersji 2025.0.0 na zakładce „Ogólne” na punkcie konfiguracyjnym punktu ACD typu „Import dokumentów zakupu z KSeF” dodano pole Nazwy atrybutów na liście dokumentów w punkcie ACD”, w ramach którego dostępne są pola: „Atrybut 1”, Atrybut 2” i „Atrybut 3”.  Nowododane pola umożliwiają wprowadzenie dodatkowych informacji opisujących daną fakturę, co pozwala na bardziej szczegółową identyfikację i klasyfikację dokumentów w procesie ich przetwarzania.

W ramach pól „Atrybut 1”, „Atrybut 2” i „Atrybut 3” można zdefiniować maksymalnie 3 nazwy dodatkowych pól (atrybutów), które będą widoczne na liście dokumentów w punkcie ACD jako nazwy kolumn.

Informacje o nazwach atrybutów/kolumn są dostępne w tabeli do.DF_ConfAPDictionary.

Jeśli uprawniony operator nie wprowadzi żadnej nazwy atrybutu, wówczas kolumny z atrybutami nie zostaną utworzone, a na liście dokumentów będzie widoczna tylko jedna kolumna „Dokument”.

Jeżeli operator wprowadzi wartość w jednym z dodatkowych pól (atrybutów), wówczas na liście będzie widoczna jedna dodatkowa kolumna z taką nazwą, jaką wprowadzono w polu; analogicznie, jeśli uzupełniono dwa pola, będą widoczne dwie dodatkowe kolumny.

 

Widok zakładki „Ogólne” na definicji punktu ACD typu „Import dokumentów zakupu z KSeF” z polami atrybutów (z przykładowym uzupełnieniem, tryb jednofirmowy)

  • Zmiana wartości na podstawie kontrolek obserwowanych (Obserwatory) – pole dodane w wersji 2026.0.0; umożliwia wyłączenie obserwatorów, które wykonują się w czasie dodawania dokumentów do obiegu z punktu ACD. Jeśli w polu parametru:
    • Wybrano wartość „Włączona” – wartości kontrolek mogą zostać nadpisane podczas generowania dokumentu do obiegu, zgodnie z kontrolkami obserwowanymi; wartość domyślna;
    • Wybrano wartość „Wyłączona” – wartości kontrolek nie zostaną nadpisane zgodnie z kontrolkami obserwowanymi podczas generowania dokumentu do obiegu (wartości zgodne z podglądem w punkcie ACD).

 

Zakładka Lista

Na zakładce „Lista”, analogicznie do pozostałych trybów pracy punktów konfiguracyjnych, należy za pomocą zapytania SQL określić listę dokumentów, która będzie wyświetlana w oknie ACD po pobraniu plików z KSeF.

 

Uwaga
W wersji 2025.0.0 nastąpiła zmiana zapytania SQL wyświetlającego listę dokumentów (zob. poniższy przykład). Zapytanie można skopiować z sekcji „Przykład”, dostępnej w ramach zakładki „Lista”.

Zapytanie SQL wprowadzone na zakładce „Lista” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” jest odmienne od zapytań SQL dla innych typów punktów ACD, różni się także od zapytania SQL dotychczas wprowadzanego w ramach punktu ACD typu „Import dokumentów zakupu z KSeF”.

 

Przyklad

Przykład zapytania wyświetlającego listę dokumentów.

BEGIN TRY
select d.KSD_ID, NULL, KSD_NumerFaktury, KSD_Tag1, KSD_Tag2, KSD_Tag3
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 (nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury LIKE '%' + @SearchText@ + '%'))
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@)
END TRY
BEGIN CATCH
DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE();
THROW 50001, @ErrorMessage ,1; 
END CATCH

 

Punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF”, zakładka „Lista”

 

Można wprowadzić alternatywne wersje zapytania – w takim przypadku, jeśli wyszukiwanie na liście w punkcie ACD ma uwzględniać wszystkie dane, jakie są na niej widoczne, należy analogicznie zmodyfikować także warunki wyszukiwania – np. tak jak w poniższym przykładzie.

 

Przyklad
Przykład zapytania na zakładce Lista, w wyniku którego na liście dokumentów w punkcie ACD:

  • w ramach kolumny „Dokument” oprócz numeru dokumentu wyświetlane są dodatkowe dane: data wystawienia, nazwa kontrahenta i NIP kontrahenta
  • dostępne są kolumny 3 atrybutów (o nazwach określonych na zakładce „Ogólne”)
  • wyszukiwanie odbywa się w zakresie wszystkich czterech kolumn („Dokument” z dodatkowymi informacjami oraz w kolumnach atrybutów)
 BEGIN TRY
    SELECT d.KSD_Id, NULL, KSD_NumerFaktury + ' | ' + CONVERT(varchar, KSD_Datawystawienia, 104) + ' | ' + KSC_PodatnikNazwa + ' | ' + KSC_PodatnikNIP, KSD_Tag1, KSD_Tag2, KSD_Tag3
     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 (nullif(@SearchText@,'') is null OR (@SearchText@ <> '' and KSD_NumerFaktury + ' | ' +CONVERT(varchar, KSD_Datawystawienia, 104) + ' | ' + KSC_PodatnikNazwa + ' | ' + KSC_PodatnikNIP LIKE '%' + @SearchText@ + '%'))
     OR (@SearchText@ <> '' and KSD_Tag1 LIKE '%' + @SearchText@ + '%') 
     OR (@SearchText@ <> '' and KSD_Tag2 LIKE '%' + @SearchText@ + '%') 
     OR (@SearchText@ <> '' and KSD_Tag3 LIKE '%' + @SearchText@ + '%')
     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@)
 END TRY
 BEGIN CATCH
  DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE();
  THROW 50001,  @ErrorMessage ,1;   
 END CATCH

 

Lista dokumentów w punkcie AC, jeśli zastosowano powyższe zapytanie na zakładce „Lista” – na liście widoczne są: kolumna „Dokument” z dodatkowymi informacjami i  oczekujące na uzupelnienie kolumny atrybutów (Towar, Wartość netto i Wartość brutto)

 

Uwaga
W kolumnach atrybutów znajdują się jedynie wartości tekstowe.

 

Wyszukiwanie po fragmencie tekstu dostępnym w kolumnie „Dokument”

 

Zakładka Kontrolki

Na zakładce „Kontrolki” za pomocą zapytań SQL należy wskazać wartości, które będą wyświetlane w poszczególnych kontrolkach po przeprocesowaniu dokumentu.

Przykłady zapytań SQL dla faktur pobranych z KSeF są dostępne w artykule: Przykłady zapytań SQL w zakładce Kontrolki dla punktu ACD „Import dokumentów zakupu z KSeF”

W wersji 2026.0.0 zmodyfikowano zakładkę „Kontrolki” w taki sposób, aby możliwe było odrębne definiowanie mapowania kontrolek dla każdego typu obiegu wybranego na zakładce „Ogólne”.

W tym celu w górnej części zakładki dodano pole, po kliknięciu w które rozwijana jest lista typów obiegów przypisanych do danego punktu ACD na zakładce „Ogólne“. Gdy zostanie wybrany typ obiegu, wówczas poniżej dostępny będzie obszar, w ramach którego można zdefiniować kontrolki dla danego typu obiegu. Pozostałe ustawienia dotyczące zakładki „Kontrolki“ nie ulegają zmianie – aby dodać kontrolkę do mapowania, należy kliknąć w przycisk [Dodaj], a następnie wprowadzić odpowiednie zapytanie SQL w polu znajdującym się po prawej stronie okna. Mapowanie danej kontrolki można usunąć, klikając w ikonę kosza na prawo od nazwy kontrolki

 

Uwaga
Jeśli dany typ obiegu zostanie odznaczony w polu „Typ obiegu” na zakładce „Ogólne” podczas konfiguracji punktu ACD, wówczas nie będzie również dostępny do wyboru na zakładce „Kontrolki”.

 

Widok zakładki „Kontrolki” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” przed wyborem typu obiegu

 

Widok zakładki „Kontrolki” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” z listą typów obiegów przypisanych do danego punktu ACD do wyboru

 

Widok zakładki „Kontrolki” w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” po wyborze typu obiegu wraz ze zdefiniowanym mapowaniem kontrolek

 

Od wersji 2024.3.0 operator może dodawać plik pdf z dokumentem KSeF do kontrolki typu Załącznik. W tym celu powinien w ramach konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” wykonać kolejno następujące czynności:

  • na zakładce „Ogólne” w polu „Typ obiegu” wybrać typ obiegu, w ramach którego znajduje się kontrolka typu Załącznik;
  • na zakładce „Kontrolki” wybrać dany typ obiegu (od wersji 2026.0.0),  następnie kontrolkę typu Załącznik i w ramach pola po prawej stronie okna wprowadzić zapytanie SQL – w poniższym przykładzie nazwą pliku będzie nazwa faktury:
Select KSD_SourceContent,

CASE

WHEN KSD_NumerFaktury LIKE '%/%' THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.pdf')

ELSE CONCAT(KSD_NumerFaktury, '.pdf')

END AS modified_column

from do.KS_Documents

where KSD_ID=@Id1@

 

Uwaga
W przypadku zastosowania powyższego zapytania jeżeli w nazwie faktury występuje znak /, zostanie zamieniony na _ .

 

Uwaga
Należy pamiętać, że w odróżnieniu od innych zapytań SQL w przypadku wprowadzania zapytania dla kontrolki typu Załącznik w ramach zakładki „Kontrolki” podczas konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” konieczne jest dodanie frazy ‘.pdf’, tak, jak przedstawiono w powyższym przykładzie.

 

Wprowadzanie zapytania dla kontrolki typu Załącznik w ramach zakładki „Kontrolki” podczas konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF”

 

Punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF”, zakładka „Kontrolki”

 

Od wersji 2025.0.0 w ramach zakładki „Kontrolki” uprawniony operator może zdefiniować zapytanie SQL, które przeniesie dane z wybranego atrybutu na określoną kontrolkę typu Tekst.

 

Uwaga

Zapytania SQL dla poszczególnych atrybutów:

  • Dla pola „Atrybut 1”
select KSD_Tag1 from do.KS_Documents where KSD_ID=@Id1@
  • Dla pola „Atrybut 2”
select KSD_Tag2 from do.KS_Documents where KSD_ID=@Id1@
  • Dla pola „Atrybut 3”
select KSD_Tag3 from do.KS_Documents where KSD_ID=@Id1@

 

Wprowadzanie na zakładce „Kontrolki” zapytania, które przeniesie dane z pola „Atrybut 3” do kontrolki typu Tekst „Forma płatności”

 

Przyklad
Operator chce, aby kontrahent, NIP i data wystawienia faktury były mapowane na kontrolki w danym typie obiegu oraz aby na liście dokumentów w punkcie ACD typu „Import dokumentów zakupu z KSeF”  w ramach atrybutów „Kontrahent”, „NIP” i „Data wystawienia’ były wyświetlane odpowiednio: nazwa kontrahenta z Comarch ERP XL, numer NIP kontrahenta oraz data wystawienia faktury. W tym celu modyfikuje konfigurację punktu ACD w następujący sposób:

1. Na zakladce „Ogólne”  w polu „Typ obiegu” wybiera typ obiegu, w którym dostępne są nastepujące kontrolki:

  • kontrolka typu Kontrahent „Kontrahent”
  • kontrolka typu Tekst „NIP”
  • kontrolka typu Data i godzina „Data wystawienia”

W poniższym przykładzie jest to typ obiegu „Faktury zakupu KSeF”.

2. Na zakladce „Ogólne” w ramach pola „Nazwy atrybutów na liście dokumentów w punkcie ACD” wprowadza:

  • w polu „Atrybut 1” – Kontrahent
  • w polu „Atrybut 2” – NIP
  • w polu „Atrybut 3” – Data wystawienia

 

Przykładowa konfiguracja pól dostępnych w ramach pola „Nazwy atrybutów na liście dokumentów w punkcie ACD”

 

3. Na zakładce „Kontrolki” wybiera typ obiegu, w którym znajdują się kontrolki omówione w punkcie 1 (w tym przykladzie typ obiegu „Faktury zakupu KSeF”). Następnie za pomocą przycisku „Dodaj”  dodaje kolejne mapowania kontrolek, wprowadzając dla nich nastepujące zapytania SQL:

  • Kontrahent
 UPDATE [nazwa_bazy_Comarch_BPM].[do].[KS_Documents] 

SET KSD_Tag1 = CAST(KSC_PodatnikNazwa AS VARCHAR(255))

FROM [nazwa_bazy_Comarch_BPM].[do].[KS_Documents] 
JOIN [nazwa_bazy_Comarch_BPM].[do].[KS_DocumentContractors] on KSC_DocumentId = KSD_Id
WHERE KSD_Id = @Id1@;



-- 2. Pobranie danych do wyświetlenia w kontrolce

SELECT TOP 1 

   Knt_GidNumer, 

   Knt_Akronim

FROM [nazwa_bazy_Comarch_BPM].[do].[KS_DocumentContractors]

JOIN [nazwa_bazy_Comarch_ERP_XL].[cdn].[KntKarty]  ON Knt_Nip = KSC_PodatnikNIP

WHERE KSC_DocumentId = @Id1@;

 

  • NIP
  UPDATE [nazwa_bazy_Comarch_BPM].[do].[KS_Documents] 

SET KSD_Tag2 = CAST(KSC_PodatnikNIP AS VARCHAR(255))

FROM [nazwa_bazy_Comarch_BPM].[do].[KS_Documents] 
JOIN [nazwa_bazy_Comarch_BPM].[do].[KS_DocumentContractors] on KSC_DocumentId = KSD_Id

WHERE KSD_Id = @Id1@;



-- 2. Pobranie danych do wyświetlenia w kontrolce

SELECT KSC_PodatnikNIP
FROM [nazwa_bazy_Comarch_BPM].[do].[KS_DocumentContractors]
JOIN [nazwa_bazy_Comarch_BPM].[do].[KS_Documents] on KSC_DocumentId = KSD_Id

WHERE KSD_ID = @Id1@;

 

  • Data wystawienia
 -- 1. Aktualizacja pola KSD_Tag3 sformatowaną datą
UPDATE [nazwa_bazy_Comarch_BPM].[do].[KS_Documents]
SET KSD_Tag3 = CONVERT(varchar(10), KSD_Datawystawienia, 104)
WHERE KSD_Id = @Id1@;

-- 2. Pobranie danych do wyświetlenia w kontrolce
SELECT 
    KSD_Datawystawienia
FROM [nazwa_bazy_Comarch_BPM].[do].[KS_Documents]
WHERE KSD_Id = @Id1@;

 

Wprowadzanie zapytania  dla atrybutu „Kontrahent” na liście dokumentów i dla kontrolki „Kontrahent”

 

4. Operator zapisuje zmiany wprowadzony w punkcie ACD, klikając w przycisk „Zapisz”.

Rezultat zmian w konfiguracji punktu ACD: Po pobraniu listy faktur w punkcie ACD dane – kontrahent, numer NIP i data wystawienia-  są widoczne na podglądzie kontrolek do zmapowania oraz w ramach atrybutów na liście dokumentów.

W przypadku problemów z wyświetleniem danych należy nacisnąć raz lub dwukrotnie przycisk „Odśwież”.

Należy pamiętać, że w przypadku ręcznej modyfikacji wartości atrybutów powrócą one do poprzednich, zmapowanych wartości, gdy lista będzie odświeżana.

 

Przykładowy widok listy z wypelnionymi automatycznie atrybutami w punkcie ACD

 

W wersji 2025.1.0 umożliwiono zapis pliku XML z KSeF do bazy Comarch BPM (dawniej DMS), tak, aby możliwe było dodanie go w ramach kontrolki typu Załącznik.

W tym celu podczas konfiguracji punktu ACD typu „Import dokumentów zakupu z KSeF” na zakładce „Kontrolki” należy po lewej stronie okna wybrać kontrolkę typu Załącznik, do której ma zostać dodany plik xml, a następnie po prawej stronie, w ramach edytora wprowadzić następujące zapytanie SQL:

Select KSD_Xml,

CASE

WHEN KSD_NumerFaktury LIKE '%/%' THEN CONCAT(REPLACE(KSD_NumerFaktury, '/', '_'), '.xml')

ELSE CONCAT(KSD_NumerFaktury, '.xml')

END AS modified_column

from do.KS_Documents

where KSD_ID=@Id1@

Definicja punktu ACD typu „Import dokumentów zakupu z KSeF”, zakładka „Kontrolki” – wprowadzanie zapytania dla kontrolki typu „Załącznik XML” (Zalacznikxml)

 

Gdy definicja punktu ACD została zapisana, wówczas podpięty plik załącznika XML można zobaczyć w oknie punktu ACD.

 

Punkt ACD typu „Import dokumentów zakupu z KSeF” z widoczną kontrolką „Załącznik XML” (Zalacznikxml) z podpiętym plikiem XML

 

Po wygenerowaniu dokumentu BPM (dawniej DMS) plik XML jest dostępny w ramach kontrolki typu Załącznik wybranej na definicji punktu ACD. Podobnie jak w przypadku innych plików dołączanych do kontrolki typu Załącznik, plik XML można usunąć za pomocą ikony lub zapisać na dysku, klikając w ikonę , a następnie wybierając odpowiednią lokalizację i naciskając „Zapisz”.

 

Dokument wygenerowany z punktu ACD typu „Import dokumentów zakupu z KSeF” z kontrolką „Załącznik XML” z podpiętym plikiem XML

Od wersji 2025.2.0 jeśli operator chce przenieść numer i datę faktury zakupu KSeF na dokument Comarch BPM należący do predefiniowanego typu obiegu dla współpracy z Comarch ERP XL, w którym na kontrolce typu Dokument ERP XL dostępne są pola „Numer KSeF” i „Data przyjęcia KSeF”, wówczas powinien na definicji punktu ACD, na zakładce „Kontrolki” wprowadzić następujące zapytania:

  • Dla kontrolki „Numer KSeF”:

select isnull (KSH_NumerReferencyjnyKSeF, ' ')

from do.KS_DocumentHeaders

join do.KS_Documents on ksd_id=KSH_DocumentId

where KSD_ID=@Id1@

Wprowadzanie zapytania SQL dla kontrolki „Numer KSeF”

 

  • Dla kontrolki „Data przyjęcia KSeF”:

Wprowadzanie zapytania SQL dla kontrolki „Data przyjęcia KSeF”

Zakładka Uprawnienia

Na zakładce „Uprawnienia” należy wskazać pracowników, którzy będą mogli procesować dokumenty w ramach punktu.

Uprawnienia mogą być dodawane wyłącznie poprzez wskazanie pracowników, nie ma możliwości dodania uprawnień dla pracowników wskazanego działu czy pracowników zajmujących określone stanowisko.

Na zakładce „Uprawnienia” w ramach typu punktu konfiguracyjnego „Import dokumentów zakupu z KSeF” znajduje się także dodatkowa kolumna „Edycja dokumentu”.

Jeśli operator zaznaczy obok danego pracownika checkbox w ramach kolumny „Edycja dokumentu”, wówczas taki pracownik będzie mógł zmieniać wartości w kontrolkach bezpośrednio w punkcie ACD.

 

Punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF”, zakładka „Uprawnienia”, tryb jednospółkowy

 

Punkt konfiguracyjny typu „Import dokumentów zakupu z KSeF”, zakładka „Uprawnienia”, tryb wielospółkowy

 

Uwaga
Dodanie operatora do uprawnień na punkcie konfiguracyjnym skutkuje nadaniem mu uprawnień do zakładki ACD (we właściwościach pracownika, na zakładce „Uprawnienia”, w sekcji „Funkcjonalności” zostaje zmieniona wartość parametr „Automatyczne generowanie dokumentów” na „TAK”)

Na każdej zakładce znajduje się ikona [Eksport], która umożliwia eksportowanie danego punktu ACD do zapisu na dysk (zob. Eksport punktu ACD). Istnieje również możliwość importu punktu konfiguracyjnego typu „Import dokumentów zakupu z KSeF”, podobnie jak w przypadku innych typów punktów ACD.( zob. Import punktu ACD).

 

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!

 




Pobieranie faktur z KSeF po wyborze przez użytkownika certyfikatu osobistego przypisanego do danej spółki

Nadawanie uprawnień w Aplikacji Podatnika KSeF oraz certyfikaty osobiste

W przypadku, gdy osoba, która w kontekście firmy z danym numerem NIP identyfikuje się innym, osobnym numerem NIP albo PESEL, właściciel takiej firmy albo uprawiona osoba (np. administrator) jest zobowiązany, aby nadać takiej osobie uprawnienia. W tym celu należy wykonać następujące kroki:

  • W ramach panelu Aplikacji Podatnika/Module Certyfikatów i Uprawnień rozwinąć zakładkę „Uprawnienia” i kliknąć w sekcję „Nadaj uprawnienie”

 

Wybór sekcji „Nadaj uprawnienie” (środowisko testowe)

 

  • W oknie „Nadawanie uprawnień” wybrać:
    • w ramach pola „Rodzaj uprawnienia”: opcję „Osobie fizycznej do pracy w KSeF”
    • w ramach pola „Dane osoby fizycznej” (widocznego po wyborze opcji „Osobie fizycznej do pracy w KSeF”): „Osoba fizyczna posługująca się Profilem Zaufanym lub certyfikatem zawierającym identyfikator NIP lub Pesel”, a następnie:
    • w ramach pola „Identyfikator”: opcję „NIP” lub „PESEL” (w zależności od tego, czy osoba fizyczna posługuje się numerem NIP czy PESEL), a poniżej w polu „Wpisz NIP”/”Wpisz PESEL” odpowiedni numer NIP/PESEL danej osoby fizycznej;
    • w ramach pola „Imię”: imię osoby fizycznej, której mają zostać nadane uprawnienia
    • w ramach pola „Nazwisko”: nazwisko osoby fizycznej, której mają zostać nadane uprawnienia
    • w ramach pola „Zakres uprawnień”: przynajmniej opcje „wystawiania faktur” i „przeglądania faktur”
  • po poprawnym uzupełnieniu wszystkich danych kliknąć w przycisk [Nadaj uprawnienia]

Wskazówka

W oknie „Nadawanie uprawnień” znajdują się automatycznie wypełnione pola:

  • „Podmiot kontekstu:NIP” – podmiot, w którym będzie można pracować z KSeF
  • „Osoba uprawniająca: NIP” – osoba, która nadaje aktualnie uprawnienia – jeśli uprawnienia nadaje inna osoba uprawniona, wówczas w części osoba uprawniona widoczne są jej dane.

Uprawnienia mogą zostać nadane przez właściciela albo przez uprawnionego administratora (dodanego w ramach sekcji „Dodaj administratora”).

 

Widok okna „Nadawanie uprawnień” przed dokonaniem zmian (środowisko testowe)

 

Przykładowy widok okna „Nadawanie uprawnień” po wprowadzeniu zmian oraz wybór przycisku „Nadaj uprawnienia” (środowisko testowe)

 

Po kliknięciu w przycisk [Nadaj uprawnienia] wniosek o nadanie uprawnień zostaje złożony, a w oknie wyświetla się informacja „Zakończono pomyślnie”, ID uprawnionego orz rodzaj przyznanych uprawnień.

 

Przykładowy widok okna „Nadawanie uprawnień” po złożeniu wniosku (środowisko testowe)

 

Uwaga

Jeżeli operator chce uwierzytelnić się i pracować w kontekście innej firmy (także, aby uzyskać certyfikat osobisty), wówczas musi zalogować się na daną firmę, wprowadzając swój NIP w ramach pola „Podpisz żądanie autoryzacyjne” .

 

Uzyskiwanie certyfikatu osobistego

Aby uzyskać certyfikat osobisty, użytkownik, któremu nadano uprawnienia do pracy w ramach danej spółki, powinien wykonać nastepujące kroki:

1. Zalogować się do Aplikacji Podatnika na identyfikator NIP danej firmy, podpisując żadanie autoryzacyjne swoim Numerem PESEL

Przykładowe logowanie użytkownika do Aplikacji Podatnika (aplikacja testowa)

 

 

2. Po zalogowaniu w ramach Aplikacji Podatnika rozwinąć zakładkę „Certyfikaty”, znajdującą się w panelu po lewej stronie i wybrać opcję „Wnioskuj o certyfikat”

 

Wybór opcji „Wnioskuj o certyfikat” w Aplikacji Podatnika KSeF (w tym przypadku na środowisku testowym)

 

3. Wypełnić wniosek o certyfikat, uzupełniając poprawnie pola „Nazwa certyfikatu”, „Hasło” (spełniające podane we wniosku wymagania) i „Powtórz hasło”, a następnie kliknąć przycisk [Generuj]

 

Przykładowe uzupełnienie wniosku o wydanie certyfikatu (środowiska testowe)

 

4.  Po kliknięciu w przycisk [Generuj] następuje automatyczne pobranie pliku klucza prywatnego, a na ekranie pojawia się informacja „Wygenerowano klucz prywatny”. Wygenerowany plik klucza prywatnego należy zapisać na dysku.

 

Pobranie klucza prywatnego (środowisko testowe)

 

5 Następnie:

    • w ramach pola „Przeznaczenie certyfikatu“ należy wybrać opcję „Uwierzytelnienie w systemie KSeF“
    • w ramach pola „Certyfikat ważny od“ należy wybrać datę rozpoczęcia ważności certyfikatu – nie można ustawić daty wstecz, musi być ustawiona na dzień bieżący lub późniejszy

 

Przykładowe uzupełnienie pól „Przeznaczenie certyfikatu” i „Certyfikat ważny od” (środowisko testowe)

 

6  Po poprawnym uzupełnieniu pól „Przeznaczenie certyfikatu” i „Certyfikat ważny od” należy kliknąć w przycisk [Wyślj wniosek o wydanie certyfikatu]. Wówczas rozpocznie się przetwarzanie wniosku, a w aplikacji pojawi się informacja „W realizacji“. Należy kliknąć w przycisk [Odśwież], który znajduje się na stronie

 

Wybór przycisku „Odśwież” (środowisko testowe)

 

7  Jeśli przetworzenie wniosku przebiegło poprawnie, wówczas po kliknięciu w przycisk [Odśwież] w ramach strony zostaje wyświetlona informacja „Zakończono pomyślnie“ oraz trzy przyciski. Należy kliknąć w przycisk [Pobierz certyfikat] – wówczas certyfikat zostanie pobrany na komputer. Plik certyfikatu należy zapisać na dysku.

 

Wybór przycisku „Pobierz certyfikat” (środowisko testowe)

 

Przykładowy widok okna po pobraniu certyfikatu (środowisko testowe)

 

Utworzenie pliku certyfikatu w formacie .pfx z plików .key i .cert

Aby możliwe bylo wykorzystanie certyfikatu osobistego w aplikacji Comarch BPM, należy wykonac następujące kroki:

1 Zainstalować program Git Bash (dostępny w ramach pakietu do pobrania na stronie https://git-scm.com/)

2 W katalogu,  w którym znajdują się pobrane pliki: .key ( z kluczem użytkownika) i .cert (z certyfikatem użytkownika) kliknąć prawym przyciskiem myszki i wybrać opcję „Open Git Bash here”

 

Wybór opcji „Open Git Bash here” w katalogu z plikami .key i .crt

 

3  w oknie Git Bash należy wprowadzić następujący kod:

 

winpty openssl pkcs12 -export -out "Nazwa certyfikatu.pfx" -inkey "Nazwa certyfikatu.key" -in "Nazwa certyfikatu.crt"

a nastepnie kliknąć Enter.

Przykładowe wprowadzanie kodu do konwersji certyfiikatu

 

4 Po wyświetlonej frazie „Enter pass phrase for Nazwa certyfikatu.key:” należy wprowadzić haslo, ktore nadano dla klucza podczas tworzenia certyfikatu w Aplikacji Podatnika. Po wprowadzeniu hasla należy kliknąc  Enter.

Okno Git Bash z wprowadzonym kodem i z miejscem na wprowadzenie hasła

 

5 Następnie po wyświetlonej frazie „Enter Export Password” należy podać hasło eksportu –  jest to nowe haslo, które nadaje operator. Po kliknięciu Enter należy powtorzyć hasło eksportu i ponownie nacisnąć Enter.

Okno „Git Bash” z miejscem na wprowadzenie hasla eksportu

 

Okno „Git Bash” z miejscem na wprowadzenie hasla eksportu po raz drugi

6 Po kliknięciu „Enter” w miejscu, w ktorym znajdują się pliki.key i .cert certyfikatu pojawia się plik .pfx. Okno Git Bash może zostac zamknięte.

 

Widok pliku.pfx certyfikatu

 

Import pliku certyfikatu w formacie .pfx do magazynu certyfikatów

1  Po utworzeniu pliku certyfikatu w formacie .pfx należy kliknąć w niego dwukrotnie. Wówczas zostannie otwarte okno kreatora importu certyfikatów. Należy wybrac opcję „Nieżący użytkownik” i kliknąć przycisk „Dalej”.

Okno kreatora importu certyfikatów po kliknięciu dwukrotnie w plik .pfx ( w przykładzie w „Certyfikat Anna Nowa,pfx”)

2 W kolejnym oknie widoczna jest ścieżka do wybranego pliku – należy kliknąć w przycisk „Dalej”.

Okno kreatora importu certyfikatów ze ścieżką pliku

3 W kolejnym oknie należy wprowadzić hasło eksportu, ktore nadano podczas tworzenia pliku .pfx w Git Bash. Należy zaznaczyć opcję „Dołącz wszystkie właściwości rozszerzone”; opcjonalnie można zaznaczyć „Oznacz ten klucz jako eksportowalny”.  Następnie należy kliknąć w przycisk „Dalej”.

 

Okno kreatora importu certyfikatów z wprowadzonym hasłem eksportu i z zaznaczonymi wybranymi opcjami

 

4 W nastepnym oknie należy wybrać opcję „Umieść wszystkie certyfikaty w następującym magazynie, kliknąć „Przeglądaj”” i wybrać „Osobisty”. Nastepnie należy kliknąć „Dalej”.

Okno kreatora importu certyfikatów z zaznaczoną opcją „Osobisty”

5 W kolejnym oknie należy kliknąć w przycisk „Zakończ”, aby import certyfikatu został zakończony. Zostanie wówczas wyświetlony komunikat „Import został pomyślnie ukończony”, który należy zamknąć, klikając „OK”.

Okno importu certyfikatu tuż przed zakończeniem importu

 

Komunikat wyświetlany, gdy import certyfikatu zakończył się powodzeniem

 

Pobieranie faktur zakupowych KSeF w punkcie ACD typu  „Import dokumentów zakupu z KSeF” z wykorzystaniem certyfikatu osobistego

W ramach skonfigurowanego punktu ACD typu „Import dokumentów zakupu z KSeF” należy kliknąć w przycisk  [Import faktur z KSeF], dokonać wyboru jednej z opcji dostępnych w oknie „Import faktur z KSeF”, kliknąc w przycisk [Importuj], a następnie w ramach wyświetlonego okna wybrać właściwy certyfikat. Po wyborze odpowiedniego certyfikatu okno zostanie zamknięte, a faktury KSeF zostaną pobrane zgodnie z wybraną opcją.

 

Wybór certyfikatu osobistego w punkcie ACD typu  „Import dokumentów zakupu 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!