Czy wiesz, że kontrolkę Dane tabelaryczne można zainicjować wartością domyślną?
Zastosowanie
Dzięki tej konfiguracji, proces obsługi dokumentów w Comarch BPM zyskuje bezpośrednią oszczędność czasu i gwarancję spójności danych. Umożliwia automatyczne wstępne wypełnienie kontrolki tabelarycznej na wskazanym etapie obiegu, eliminując potrzebę ręcznego dodawania wierszy. W efekcie, użytkownik zyskuje natychmiastową gotowość do pracy w momencie rozpoczęcia obiegu. Minimalizuje to błędy poprawności danych, gwarantując, że dane są dokładne, spójne i aktualne oraz znacząco przyspiesza obsługę standardowych, powtarzalnych procesów.
Zawartość przykładu
Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu, która zawiera konfigurację kontrolki Dane tabelaryczne
Mechanizm wykorzystuje zasadę, że kontrolka tabelaryczna to tabela tymczasowa SQL, którą można wypełnić dowolnymi danymi za pomocą zapytania.
Zapytanie SQL jest umieszczone na zakładce Inicjowanie wartości i zawiera dane, które mają pojawić się w tabeli.
Na etapie, na którym kontrolka ma zostać zainicjowana, zaznacza się opcję„Inicjalizacja SQL”. Zapytanie jest uruchamiane raz, wypełniając wiersze wartością domyślną.
Aby zainicjować kontrolkę więcej niż jednym wierszem, wykorzystuje się instrukcję operacji na zbiorach UNION, która łączy wyniki poszczególnych zapytań SELECT.
Ostatnią kolumną w zapytaniu jest kolumna LP (numer wiersza), którą w zapytaniu inicjalizujemy zerami (0 as LP). System automatycznie zastępuje te zera kolejnymi wartościami porządkowymi.
Konfiguracja przykładu
1.Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Dokumenty i skonfigurowano w niej następujące kolumny:
”Nazwa”(identyfikator kolumny: Nazwa) – typ Tekst
”Kwota” (identyfikator kolumny: Kwota) – typ Liczba stałoprzecinkowa
”Termin” (identyfikator kolumny: Termin) –typ Data i godzina
Kolumny w kontrolce Dane tabelaryczne
2.Dodano zapytanie inicjujące SQL: W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Inicjowanie SQL dodano zapytanie, które uzupełni kontrolkę wartościami domyślnymi: numerem faktury, kwotą oraz terminem.
SELECT
'Faktura 001' AS nazwa, 1500.00 AS kwota,'2025-04-15' AS termin, 0 as LP
UNION
SELECT
'Faktura 002' AS nazwa, 3200.50 AS kwota, '2025-04-20' AS termin, 0 as LP
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
3.Włączenie Inicjalizacji: Na etapie, na którym kontrolka ma się zainicjować wartościami domyślnymi (np. na pierwszym etapie obiegu), zaznaczono opcję „Inicjalizacja SQL”.
Włączenie Inicjalizacji SQL
Uzupełniona Kontrolka typu Dane Tabelaryczne
Po utworzeniu dokumentu, kontrolka typu Dane Tabelaryczne została automatycznie zainicjowanadomyślnymi wartościami pobranymi z zapytania SQL. Tabela zawiera wiersze z kompletnymi danymi: numer faktury, kwotą, terminem, eliminując tym samym konieczność ręcznego dodawania pozycji i skracając czas obsługi dokumentu.
Kontrolka typu Dane tabelaryczne z uzupełnionymi kolumnami
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?
Czy wiesz, że po dodaniu wiersza w kontrolce typu Dane tabelaryczne poszczególne kolumny mogą zainicjować się wartością domyślną?
Zastosowanie
Dzięki tej konfiguracji, proces wprowadzania danych jest znacząco przyspieszony w przypadku dokumentów wymagających wielokrotnego dodawania tych samych lub podobnych pozycji. Głównym celem jest automatyczne wypełnienie kolumn nowo dodanego wiersza domyślnymi wartościami (np. nazwa, ilość, stawka VAT). Eliminuje to błędy i powtarzalne czynności użytkownika, co pozwala pracownikom skupić się na weryfikacji danych, a nie na ich rutynowym wprowadzaniu. Dodatkową, unikalną korzyścią tego przykładu jest to, że zawiera on w sobie pełną logikę dynamicznego i dwukierunkowego przeliczania kwot (Netto/Brutto) w wierszu, dzięki dodatkowemu zapytaniu SQL.
Zawartość przykładu
Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji i konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERPXL
Mechanizm opiera się na monitorowaniu zdarzenia dodania nowego wiersza i uruchamianiu zapytania SQL, które w odpowiedzi wypełnia pola domyślnymi wartościami.
Kontrolka Dane Tabelaryczne jest skonfigurowana tak, aby obserwować samą siebie i reagować na zdarzenie wywołane przez dodanie nowego wiersza za pomocą przycisku „+” (Dodaj).
Na zakładce Inicjowanie wartości umieszczone jest zapytanie SQL, które sprawdza, czy kolumna ma wartość -1 (@Elementy_Column@ = -1). Wartość -1 oznacza, że operacja dotyczy dodania nowego wiersza.
Wewnątrz bloku BEGIN zapytanie SQL używa komendy UPDATE @Elementy@ do ustawienia domyślnych wartości (np. Nazwa = 'a-vista’, Ilosc = 1, StawkaVAT=1) dla nowo dodanej pozycji.
Kolumna wynikowa Netto została ustawiona w trybie „Do odczytu”, aby użytkownik nie mógł ręcznie jej edytować.
Konfiguracja przykładu
1. 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 Dane tabelaryczne
2. W kontrolce typu Dane tabelaryczne na zakładceListy 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
3.Dodano obserwację kontrolki: W kontrolce Dane tabelaryczne, na zakładceInicjowanie wartości, dodano powiązanie do samej siebie.
Powiązanie kontrolki do samej siebie
4. Dodano zapytanie inicjujące SQL: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowaniewartości w sekcji Inicjowanie SQL ERP dodano zapytanie, które zawiera warunek sprawdzający dodanie nowego wierszaIF @Elementy_Column@ = -1 oraz instrukcję update, która ustawia wartości domyślne dla kolumn (Nazwa, Ilość, Stawka VAT) w bieżącym wierszu.
Oprócz inicjacji nowego wiersza, zapytanie zawiera również logikę dwukierunkowego przeliczania wartości (Netto, Brutto, Cena) dla już istniejących wierszy, co czyni ten wzorzec gotowym rozwiązaniem dla każdej kontrolki z kalkulacjami finansowymi.
IF @^SenderControlName@ = 'Elementy'
IF @Elementy_Column@ = -1 /*[1] LOGIKA: INICJACJA NOWEGO WIERSZA (WYZWALANE KLIKNIĘCIEM '+') */
BEGIN
/*Ustawienie domyślnych wartości dla nowego wiersza */
UPDATE @Elementy@
SET [Nazwa] = 'a-vista',
[Ilosc] = 1,
[StawkaVAT] = 1 /*Identyfikator stawki domyślnej (ID=1 - stawka 23%)*/
WHERE POS = @Elementy_Row@
/*!!! OBOWIĄZKOWE: Odświeżenie wiersza w kontrolce Dane Tabelaryczne !!! */
SELECT * FROM @Elementy@
END
ELSE IF @Elementy_Column@=2 OR @Elementy_Column@=3 OR @Elementy_Column@=5
/*[2] LOGIKA: PRZELICZANIE W PRZÓD (Cena/Ilość/Stawka VAT -> Netto/Brutto) */
BEGIN
DECLARE @VAT AS DECIMAL(4, 2)
/*Pobranie stawki VAT z tabel CDN.Nazwy */
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 [StawkaVAT] FROM @Elementy@
WHERE POS = @Elementy_Row@)
/*Wyliczenie i aktualizacja netto i brutto*/
UPDATE @Elementy@
SET [Netto] = (Ilosc * Cena),
[Brutto] = (Ilosc * Cena) * (@VAT + 1)
WHERE POS = @Elementy_Row@
/*!!! OBOWIĄZKOWE: Odświeżenie wiersza w kontrolce Dane Tabelaryczne !!! */
SELECT * FROM @Elementy@
END
ELSE BEGIN
IF @Elementy_Column@=3 OR @Elementy_Column@=5 OR @Elementy_Column@=6 -- [3] LOGIKA: PRZELICZANIE W TYŁ (Brutto -> Cena/Netto)
/*Pobranie stawki VAT*/
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 [StawkaVAT] FROM @Elementy@
WHERE POS = @Elementy_Row@)
/*Aktualizacja ceny i netto*/
UPDATE @Elementy@
SET [Cena] = [Brutto] / (@VAT + 1),
[Netto] = [Ilosc] * ([Brutto] / (@VAT + 1))
WHERE POS = @Elementy_Row@
/*!!! OBOWIĄZKOWE: Odświeżenie wiersza w kontrolce Dane Tabelaryczne !!!*/
SELECT * FROM @Elementy@
END
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
5. Tryb pracy: W kontrolce typu Dane tabelaryczne, na zakładce Ograniczenie edycji kolumnę „Netto” ustawiono w trybie „Do odczytu”.
Kolumna Netto w trybie „Do odczytu”
Uzupełniona Kontrolka Dane Tabelaryczne
Po kliknięciu ikony „+” (Dodaj) na karcie obiegu, nowy wiersz kontrolki typu Dane Tabelaryczne został automatycznie zainicjowany wartościami domyślnymi. Kolumny: Nazwa i Ilość oraz Stawka VAT zostały wypełnione wartościami zdefiniowanymi w zapytaniu SQL. Kolumny zostały wstępnie wypełnione, co skraca czas uzupełniania danych dla powtarzalnych pozycji. Dodatkowo dzięki rozbudowanemu zapytaniu SQL, dla nowo wprowadzonych wierszy istnieje możliwości dwukierunkowego przeliczania wartości (Netto, Brutto, Cena) co, ułatwia bieżącą aktualizację i kontrolę poszczególnych pozycji.
Uzupełnione wiersze po dodaniu pozycji ikoną „+”
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?
Czy wiesz, że w kontrolce Dane tabelaryczne wartości w poszczególnych kolumnach mogą się przeliczać w oparciu o zmianę wartości w innej kolumnie przy pomocy zapytania SQL?
Zastosowanie
Dzięki zastosowaniu tej konfiguracji, proces wprowadzania danych w Comarch BPM zyskuje pełną zdolność automatycznego kalkulowania wszędzie tam, gdzie użyta jest kontrolka tabelaryczna. Głównym celem jest eliminacja ręcznych obliczeń, co bezpośrednio przekłada się na mniejszą liczbę błędów i znacznie szybszą pracę użytkownika. Konfiguracja ta umożliwia automatyczne przeliczanie wartości w kolumnach wynikowych (np. Netto, Brutto) w oparciu o zmianę danych wejściowych (np. Cena lub Ilość) w tym samym wierszu.
Film obrazujący zastosowanie konfiguracji
Zawartość przykładu
Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji i konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERPXL
Mechanizm opiera się na ciągłym monitorowaniu zmian wartości w kontrolce tabelarycznej i automatycznym uruchamianiu zapytania SQL, które przelicza i aktualizuje wartości w kolumnach wynikowych.
Kontrolka Dane Tabelaryczne jest skonfigurowana tak, aby obserwować samą siebie i reagować na każdą edycję wiersza.
Zapytanie SQL, zaimplementowane na zakładce Inicjowanie wartości, jest wyzwalane przy każdej zmianie wartości w kolumnach wejściowych (Cena, Ilość lub Stawka VAT).
Przeliczania W Przód: (Cena/Ilość): Logika IF w kodzie SQL jest wyzwalana przy zmianie kolumn wejściowych (np. Cena lub Ilość). W tym trybie Netto i Brutto są obliczane na podstawie wartości wejściowych i stawki VAT.
Przeliczania W Tył: (Brutto): Logika ELSE IF jest wyzwalana przy zmianie kolumny Brutto. W tym trybie system przelicza i aktualizuje wartość w kolumnie Cena lub Netto, traktując Ilość jako stałą, zachowując tym samym wewnętrzną spójność wiersza.
Zapytanie SQL pobiera niezbędne dane (np. wartość Stawki VAT z tabeli CDN.Nazwy). Następnie, za pomocą komendy UPDATE, bezpośrednio przelicza i aktualizuje wartości w kolumnach wynikowych (Netto oraz Brutto).
Kolumna wynikowa Netto została ustawiona w trybie „Do odczytu”, aby użytkownik nie mógł ręcznie jej edytować.
Osobna kontrolka typu Podsumowanie obserwuje kolumnę wynikową (Brutto) i zlicza jej sumę za pomocą prostego zapytania SQL (select sum (Brutto) from @Elementy@).
Konfiguracja przykładu
1. 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
2. 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
3. Dodano obserwację kontrolki: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do samej siebie.
Powiązanie kontrolki do samej siebie
4.Dodano zapytanie SQL: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Wzór na wartośćSQL ERP dodano zapytanie, które pobiera stawki VAT z bazy XL i na podstawie Ilości i Ceny wylicza wartość Netto, po uzupełnieniu Stawki VAT wylicza wartość Brutto, a po zmianie wartości Brutto wylicza Cenę i wartość Brutto.
/*Deklaracja Stawki VAT */
DECLARE @VAT AS DECIMAL(4, 2)
/* Pobranie stawki VAT z tabeli CDN.Nazwy na podstawie kolumny StawkaVAT w bieżącym wierszu */
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 [StawkaVAT]
FROM @Elementy@
WHERE POS = @Elementy_Row@
)
/* JEŚLI ZMIENIONO KOLUMNY: 2 (Cena), 3 (Ilość), 5 (Stawka VAT) */
IF @Elementy_Column@=2 OR @Elementy_Column@=3 OR @Elementy_Column@=5
BEGIN
/* PRZELICZANIE W PRZÓD (Cena/Ilość/Stawka VAT -> Netto/Brutto) */
/*Wyliczenie i aktualizacja netto i brutto */
UPDATE @Elementy@
SET
[Netto] = (Ilosc * Cena),
[Brutto] = (Ilosc * Cena) * (@VAT + 1)
WHERE POS = @Elementy_Row@
/* !!! OBOWIĄZKOWE: Odświeżenie wiersza !!! */
SELECT * FROM @Elementy@
END
/* JEŚLI ZMIENIONO KOLUMNĘ: 6 (Brutto) */
IF @Elementy_Column@=6
BEGIN
/* PRZELICZANIE W TYŁ (Brutto -> Cena/Netto) */
/* Aktualizacja ceny i netto (Ilość stała) */
UPDATE @Elementy@
SET
[Cena] = [Brutto] / (@VAT + 1), -- Obliczenie Ceny Netto z Brutto
[Netto] = [Ilosc] * ([Brutto] / (@VAT + 1)) -- Obliczenie Wartości Netto
WHERE POS = @Elementy_Row@
/* !!! OBOWIĄZKOWE: Odświeżenie wiersza !!! */
SELECT * FROM @Elementy@
END
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
5.Tryb pracy: W kontrolce typu Dane tabelaryczne, na zakładce Ograniczenie edycji kolumnę „Netto”ustawiono w trybie „Do odczytu”.
Kolumna Netto w trybie „Do odczytu”
6.Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) Podsumowanie, 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 Podsumowanie
Uzupełniona Kontrolka Dane Tabelaryczne
Po wprowadzeniu wartości w kontrolce typu Dane tabelaryczne w kolumnach Cena, Ilość lub Stawka VAT kontrolka typu Dane Tabelaryczne została automatycznie zaktualizowana. Dla każdej pozycji, system automatycznie przeliczył i uzupełnił wartości w kolumnach Netto oraz Brutto w tym samym wierszu. Możliwe jest przeliczanie wartości w przód (Cena/Ilość → Netto/Brutto) oraz w tył (Brutto → Cena/Netto). Wartości w kolumnach wynikowych (Netto, Brutto) są widoczne, ale kolumna Netto jest zablokowana do ręcznej edycji (tryb „Do odczytu„), co gwarantuje poprawność danych. Kontrolka Podsumowanie wyświetla poprawną sumę końcową z kolumny Brutto kontrolki typu Dane tabelaryczne.
Kontrolka typu Dane tabelaryczne z uzupełnionymi kolumnami
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?
Czy wiesz, że po wybraniu z listy dokumentu PZ w kontrolce Dane tabelaryczne można pobrać do poszczególnych kolumn informacje z tego dokumentu?
Zastosowanie
Dzięki tej konfiguracji, proces obsługi dokumentów w Comarch BPM zyskuje zaawansowaną zdolność automatycznego pobierania danych z dokumentów ERPXL. Wdrożenie tego wzorca znacznie przyspiesza procesy zakupowe, ponieważ eliminuje konieczność ręcznego wyszukiwania i przepisywania danych z dokumentów (w przykładzie dokument Przyjęcia Zewnętrznego (PZ)). System automatycznie pobiera kluczowe informacje nagłówkowe (Kontrahent, Wartość Netto) z wybranego dokumentu PZ, uzupełniając kontrolkę tabelaryczną i wprowadzając dane bezpośrednio do obiegu.
Film obrazujący zastosowanie konfiguracji
Zawartość przykładu
Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu z konfiguracją kontrolki typu Dane tabelaryczne.
Mechanizm opiera się na obserwowaniu kolumny typu Lista (lista wyboru dokumentu PZ) i uruchamianiu złożonego zapytania SQL, które pobiera powiązane dane nagłówkowe z tabel Comarch ERP XL.
W kontrolce typu Dane Tabelaryczne zdefiniowano kolumnę ListaPZ (typ: Lista) służącą do wyboru dokumentu PZ oraz kolumny wynikowe: PZ (typ: Dokument elektroniczny), Kontrahent (typ: Kontrahent) i Netto (typ: Liczba stałoprzecinkowa).
Na zakładce Listy zdefiniowano zapytanie pobierające wszystkie dokument PZ (o typie Trn_GIdTyp=1489) z tabeli cdn.TraNag.
Na zakładce Inicjowanie wartości dodano obserwację kontrolki przez samą siebie.
Zapytanie SQL (Wzór na wartość SQL ERP) jest wyzwalane przy każdej zmianie kolumny ListaPZ.
Zapytanie SQL pobiera GIDNumer wybranego dokumentu PZ i na jego podstawie odpytuje tabelę cdn.TraNag oraz cdn.KntKarty (dla Kontrahenta).
Polecenie UPDATE @DokumentyPZ@ SET aktualizuje kolumny wynikowe w wierszu.
Osobna kontrolka typu SumaNettoPZ obserwuje kolumnę (Netto) i zlicza jej sumę za pomocą prostego zapytania SQL (select sum (Netto) from @DokumentyPZ@).
Konfiguracja przykładu
1.Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) DokumentyPZ i skonfigurowano w niej następujące kolumny:
”ListaPZ” (identyfikator kolumny: ListaPZ) – typ Lista
”PZ” (identyfikator kolumny: PZ) – typ Dokument elektroniczny
”Kontrahent” (identyfikator kolumny: Kontrahent) – typ Kontrahent
”Netto” (identyfikator kolumny: Netto) – typ Liczba stałoprzecinkowa
Kolumny w kontrolce Dane tabelaryczne
2.W kontrolce typu Dane tabelaryczne na zakładce Listy zdefiniowano zapytanie pobierające:
Listę dokumentów PZ z Comarch ERPXL:
select trn_gidnumer,cdn.numerdokumentu(trN_GIDTyp,TrN_SpiTyp, Trn_TRNTyp,TrN_TrNNumer,TrN_TrNRok, TrN_TrNSeria, TrN_trNMiesiac) from cdn.TraNag where
Trn_GIdTyp=1489
Lista pobierająca dokumenty PZ w kontrolce typu Dane tabelaryczne
3.Dodano obserwację kontrolki: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do samej siebie.
Powiązanie kontrolki do samej siebie
4.Dodano zapytanie SQL: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Wzór na wartośćSQL ERP dodano zapytanie, które automatycznie podpina dokument elektroniczny w kolumnie PZ , oraz wczytuje kluczowe dane nagłówkowe (Kontrahent i Netto) bezpośrednio z wybranego dokumentu. Logika ta polega na trzykrotnym użyciu instrukcji UPDATE @DokumentyPZ@SET w jednym bloku kodu. Każda instrukcja, oparta o połączenia (JOIN) z tabelami nagłówkowymi ERP XL (cdn.TraNag, cdn.KntKarty), pobiera i aktualizuje inną wartość w bieżącym wierszu tabeli.
IF @DokumentyPZ_Column@ = 1
BEGIN
/*[1] Zapisanie GID dokumentu PZ do kolumny PZ_ID w celu dalszych zapytań*/
UPDATE @DokumentyPZ@ SET [PZ_ID] =
(
SELECT [ListaPZ] FROM @DokumentyPZ@ WHERE POS = @DokumentyPZ_Row@
)
WHERE POS = @DokumentyPZ_Row@
/* [2] Pobranie Kontrahenta (Knt_GidNumer) z tabel nagłówkowych ERP XL*/
UPDATE @DokumentyPZ@ SET [Kontrahent] =
(
SELECT Knt_GidNumer FROM cdn.TraNag
JOIN cdn.kntkarty ON TrN_KntNumer = Knt_GIDNumer
WHERE TrN_GIDNumer = [ListaPZ]
)
WHERE POS = @DokumentyPZ_Row@
/*[3] Pobranie Wartości Netto (TrN_NettoP) z tabel TraNag/TraElem*/
UPDATE @DokumentyPZ@ SET [Netto] = (
SELECT TOP 1 TrN_NettoP
FROM cdn.TraNag
JOIN cdn.TraElem ON TrE_GIDNumer = TrN_GIDNumer
WHERE TrN_GIDNumer = [ListaPZ]
)
WHERE POS = @DokumentyPZ_Row@
/*!!! OBOWIĄZKOWE: Odświeżenie wiersza w kontrolce Dane tabelaryczne !!!*/
SELECT * FROM @DokumentyPZ@
END
Zapytanie SQL w kontrolce typu Dane tabelaryczne na zakładce Inicjowanie wartości
5.Tryb pracy: W kontrolce typu Dane tabelaryczne, na zakładce Ograniczenie edycji kolumnę „Kontrahent” oraz „Netto” ustawiono w trybie „Do odczytu”.
Kolumna Netto w trybie „Do odczytu”
6.Utworzono kontrolkę liczbową: Dodano kontrolkę typu Liczba stałoprzecinkowa o nazwie (identyfikatorze) SumaNettoPZ, w której dodano powiązanie do kontrolki DokumentyPZ i skonfigurowano w niej zapytanie, które zlicza wartość z kolumny Nettoz kontrolki tabelarycznej:
select sum (Netto) from @DokumentyPZ@
Kontrolka Liczbowa Suma Netto PZ
Uzupełniona Kontrolka Dane Tabelaryczne
Po wybraniu z listy dokumentu PZ w kontrolce typu Dane tabelaryczne, wiersz został automatycznie zaktualizowany. W efekcie, w drugiej kolumnie podpiął się dokument elektroniczny PZ oraz zostały uzupełnione kluczowe dane nagłówkowe: Kontrahent i Wartość Netto. Kontrolka SumaNettoPZ wyświetla poprawną sumę końcową z kolumny Netto wszystkich podpiętych dokumentów PZ.
Kontrolka typu Dane tabelaryczne z uzupełnionymi kolumnami
Dokument PZ podpięty w kontrolce Dane tabelarycznej
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?
Czy wiesz, że po dodaniu jednego lub wielu dokumentów PZ w kontrolce Dane tabelaryczne można do osobnej kontrolki Dane Tabelaryczne do poszczególnych kolumn pobrać informacje z tych dokumentów?
Dodanie dokumentu PZ w kontrolce Dane tabelaryczne o nazwie „PZ z ERP XL” spowoduje uzupełnienie kontrolki „ElementyPZ” informacjami z dowiązanego dokumentu.
Konfiguracja przykładu – przykład dotyczy Comarch DMS we współpracy z Comarch ERP XL:
1. W definicji typu obiegu w kontrolce typu Dane tabelaryczne o nazwie ”PZ z ERPXL” (identyfikator kontrolki: PZ) zdefiniowano kolumnę:
”PZ” (identyfikator kolumny: PZ) – typ Dokument elektroniczny
Konfiguracja kontrolki elektronicznej w Danych Tabelarycznych
2. W definicji typu obiegu w kontrolce typu Dane tabelaryczne o nazwie ”ElementyPZ” (identyfikator kontrolki: ElementyPZ) zdefiniowano kolumny:
”Ilość” (identyfikator kolumny: Ilosc) – typ Liczba stałoprzecinkowa
”JM” (identyfikator kolumny: JM) – typ Lista
”Cena” (identyfikator kolumny: Cena) – typ Liczba stałoprzecinkowa
”Netto” (identyfikator kolumny: Netto) – typ Liczba stałoprzecinkowa
3. W kontrolce typu Dane tabelaryczne o nazwie ”ElementyPZ” na zakładce Listy dodano listę o nazwie „Lista miar” i zdefiniowano dla niej zapytanie pobierające jednostki miary z Comarch ERPXL:
SELECT Naz_GIDLp,Naz_Nazwa from cdn.Nazwy where Naz_GIDTyp=144
Definiowanie zapytania dla listy „Lista miar”
4. W definicji typu obiegu w kontrolce typu Dane tabelaryczne o nazwie ”ElementyPZ” (identyfikator kontrolki: ElementyPZ)w kolumnie”JM” (identyfikator kolumny: JM) w polu „Listy” wybrano listę „Lista miar”
Wybór listy „Lista miar” dla kolumny „JM”
5. W kontrolce typu Dane tabelaryczne o nazwie ”ElementyPZ”na zakładce Inicjowanie wartości w polu „Kontrolki powiązane” dodano obserwację kontrolki typu Dane tabelaryczne o nazwie ”PZ z ERPXL” oraz w polu „Wzór na wartość” wybrano „SQL ERP” i zdefiniowano zapytanie:
SELECT [ID]=TrE_TwrNumer,
[Ilosc]=TrE_Ilosc,
[Jm]=(SELECT Naz_GIDLp FROM cdn.Nazwy WHERE Naz_Nazwa=TrE_JmZ and Naz_GIDTyp=144
and Naz_Archiwalny=0),
[Cena]=TrE_CenaPoRabacie,
[Wartosc]=tre_ksiegowaNetto
FROM CDN.TraNag JOIN CDN.TraElem on TrN_GIDNumer=TrE_GIDNumer
where TrE_GIDNumer in (SELECT (PZ_ID) from @PZ@)
Zapytanie w kontrolce Dane Tabelaryczne – zakładka Inicjowanie wartości
6.Zapisano zmiany, klikając w przycisk [Zapisz].
Po wprowadzonych powyżej zmianach, gdy na dokumencie Comarch DMS zostaje dodany dokument PZ z Comarch ERPXL do kontrolki typu Dane tabelaryczne o nazwie ”PZ z ERPXL”, wówczas informacje z tego dokumentu zostają pobrane do kontrolki typu Dane tabelaryczne o nazwie „ElementyPZ”.
Dodanie dokumentu PZ i uzupełnienie elementów w Danych Tabelarycznych
Dodanie kolejnego dokumentu PZ w Danych Tabelarycznych
Rozpoczynasz pracę z Comarch DMS i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch DMS i chcesz dowiedzieć się więcej?
Czy wiesz, że kontrolkę typu Dane Tabelaryczne można automatycznie wypełnić pozycjami dokumentu zaczytanego przez Comarch OCR przy współpracy z Comarch ERP XL?
Zastosowanie
Dzięki zastosowaniu tej konfiguracji, proces obiegu faktur kosztowych zyskuje pełnąautomatyzację. Głównym celem jest eliminacja ręcznego wprowadzania pozycji dokumentów — dane zaczytane przez Comarch OCR są automatycznie mapowane i wypełniają kontrolkę tabelaryczną na kacie obiegu. W efekcie skracamy czas obsługi faktury, minimalizujemy błędy przepisywania i zapewniamy, że proces akceptacji bazuje na poprawnych i spójnych danych przed ich zaksięgowaniem.
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 OCR, Załącznika oraz wszystkich kluczowych danych nagłówkowych (NIP, Kontrahent, Dane kontrahenta, Data zakupu, Data wystawienia, Termin płatności, Forma płatności, Waluta) oraz inicjację dokumentu obiegowego.
Mechanizm opiera się na pobieraniu danych z bazy Comarch BPM, które zostały zapisane po przetworzeniu ich przez Comarch OCR w punkcie ACD.
Konfiguracja wykorzystuje ID dokumentu OCR (zapisane w dedykowanej kontrolce typu Liczba całkowita) jako identyfikator do pobrania danych. Kontrolka tabelaryczna obserwuje to pole, 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_OCR@, dzięki czemu pobiera ono wiersze z właściwego dokumentu OCR z tabeli do.OC_Document_Items w bazie BPM.
Na podstawie zwróconych wierszy z tabeli do.OC_Document_Items, kontrolka Dane tabelaryczne jest automatycznie wypełniana pozycjami faktury (Nazwa, Cena, Ilość, Jednostka miary, Netto, Stawka VAT, Brutto, Kwota VAT).
W zapytaniu SQL zawarta jest niezbędna logika CASE WHEN, która konwertuje wartości tekstowe (np. Stawki VAT oraz Jednostki miary) na identyfikatory liczbowe, których BPM wymaga do poprawnego działania mechanizmów systemowych i wyświetlania danych.
Konfiguracja przykładu
1.Utworzono kontrolkę ID_OCR : Na karcie obiegu dodano kontrolkę typu Liczba całkowita o nazwie (identyfikatorze) ID_OCR, do której będzie zapisywane ID OCR-owanego dokumentu.
Kontrolka Liczba całkowita ID_OCR
2.Utworzono kontrolkę Tabelaryczną: Dodano kontrolkę typu Dane tabelaryczne o nazwie (identyfikatorze) Elementy i skonfigurowano w niej następujące kolumny:
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
Jednostki miary:
SELECT Naz_GIDLp,Naz_Nazwa from cdn.Nazwy where Naz_GIDTyp=144;
Lista Jednostka miary w kontrolce Dane tabelaryczne
4.Dodano obserwację kontrolki: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do kontrolki ID_OCR.
Powiązanie do kontrolki ID_OCR
5.Zapytanie SQL: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości w sekcji Wzór na wartośćSQL OD dodano zapytanie, które pobiera dane z tabel do.OC_Document_Items oraz do.OC_Documents na podstawie przekazanego parametru @ID_OCR@ (ID dokumentu OCR). W zapytaniu SQL konieczne jest użycie logiki CASE WHEN do konwersji wartości tekstowych jednostek miary (’szt’) i stawek VAT (np. '23.00′) na odpowiednie identyfikatory liczbowe akceptowane przez Comarch BPM.
If @^SenderControlName@ = 'ID_OCR'
Begin
Select
ODI_Name,/*Nazwa*/
ODI_NetUnitPrice, /*Cena netto*/
ODI_Count, /*Ilość*/
CASE
WHEN ODI_Unit='szt.' THEN 1
WHEN ODI_Unit='l' THEN 2
WHEN ODI_Unit='kg' THEN 3
Else 0
END, /*Jednostka miary*/
ODI_NetValue, /* Wartość Netto*/
CASE
WHEN ODI_VatRate='23.00' THEN 1
WHEN ODI_VatRate='8.00' THEN 2
WHEN ODI_VatRate='0.00' THEN 3
WHEN ODI_VatRate='5.00' THEN 7
Else 0
END,
ODI_GrossValue, /*Wartość Brutto*/
[ODI_GrossValue]-[ODI_NetValue], -- kwota VAT
1
from do.OC_Document_Items I
join do.OC_Documents D on D.OCD_Id=I.ODI_DocumentId
where ODI_DocumentId=@ID_OCR@
END
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
Uwaga
Należy upewnić się, że identyfikatory liczbowe (ID) stawek VAT i jednostek miary użyte w zapytaniu SQL są zgodne z tymi, które aktualnie obowiązują w bazie Comarch ERP XL współpracującej z Comarch BPM.
6.Punkt ACD: W punkcie konfiguracyjnym ACD (Współpraca z Comarch OCR), wykorzystywanym do inicjowania obiegu, na zakładce Kontrolki dodano kontrolkę ID_OCR i przypisano jej odpowiednie zapytanie:
select @Id1@
Kontrolka ID_OCR w punkcie ACD
Uzupełniona Kontrolka Dane Tabelaryczne
Po pomyślnym zainicjowaniu dokumentu z punktu ACD, kontrolka typu Dane Tabelaryczne została automatycznie wypełniona. Dla każdej pozycji dokumentu (faktury) odczytanej przez Comarch OCR i zapisanej w tabeli do.OC_Document_Items, na formularzu BPM pojawił się oddzielny, kompletny wiersz z uzupełnionymi danymi.
Kontrolka Dane tabelaryczne uzupełniona pozycjami odczytanym przez Comarch OCR
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?
Czy wiesz, że można wypełnić kontrolkę typu Dane tabelaryczne pozycjami dokumentu zaczytanego przez Comarch OCR oraz przeliczyć wartości 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:
Eliminacja ręcznego wprowadzania pozycji dokumentów: Dane zaczytane przez Comarch OCR są automatycznie mapowane i wypełniają kontrolkę tabelaryczną na karcie obiegu.
Automatyczne kalkulowanie wartości: Kontrolka tabelaryczna uzyskuje pełną zdolność automatycznego przeliczania wszędzie tam, gdzie zmienione zostaną dane wejściowe (np. Cena, Ilość, Stawka VAT, Brutto).
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 OCR, Załącznika oraz wszystkich kluczowych danych nagłówkowych (NIP, Kontrahent, Dane kontrahenta, Data zakupu, Data wystawienia, Termin płatności, Forma płatności, Waluta) oraz inicjację dokumentu obiegowego.
Mechanizm opiera się na dwóch trybach działania zintegrowanych w jednej kontrolce Dane Tabelaryczne („Elementy”):
1.Pobranie pozycji z Comarch OCR (Wyzwalacz: ID_OCR):
Po przetworzeniu dokumentu przez Comarch OCR, punkt ACD zapisuje ID dokumentu OCR do dedykowanej kontrolki typu Liczba całkowita o nazwie ID_OCR.
Kontrolka tabelaryczna „Elementy” obserwuje to pole, reagując na jego wypełnienie.
Zapytanie SQL (umieszczone na zakładce Inicjowanie Wartości) jest filtrowane za pomocą parametru @ID_OCR@ i pobiera wiersze z tabeli do.OC_Document_Items w bazie BPM.
Na podstawie zwróconych wierszy kontrolka DT jest automatycznie wypełniana pozycjami faktury.
W zapytaniu OCR używana jest logika CASE WHEN do konwersji wartości tekstowych (Stawki VAT, Jednostki miary) na identyfikatory liczbowe, wymagane przez BPM.
2.Automatyczne Przeliczanie (Wyzwalacz: Edycja wiersza DT):
Kontrolka DT jest skonfigurowana tak, aby obserwować samą siebie.
Zapytanie SQL jest wyzwalane przy każdej zmianie wartości w kolumnach wejściowych (Cena, Ilość lub Stawka VAT).
Przeliczanie W Przód: Logika IF w kodzie SQL jest wyzwalana przy zmianie Ceny, Ilości lub Stawki VAT, obliczając Netto i Brutto.
Przeliczanie W Tył: Logika ELSE IF jest wyzwalana przy zmianie kolumny Brutto, przeliczając i aktualizując wartość Ceny lub Netto (przy zachowaniu stałej Ilości).
Zapytanie to wykorzystuje komendę UPDATE do bezpośredniego przeliczania i aktualizacji wartości w kolumnach wynikowych (Netto, Brutto)
Osobna kontrolka WartoscNetto obserwuje kolumnę wynikową (Netto) i zlicza jej sumę za pomocą prostego zapytania SQL (select sum (Netto) from @Elementy@).
Osobna kontrolka WartoscBrutto obserwuje kolumnę wynikową (Brutto) i zlicza jej sumę za pomocą prostego zapytania SQL (select sum (Brutto) from @Elementy@).
Konfiguracja przykładu
1.Utworzono kontrolkę ID_OCR: Na karcie obiegu dodano kontrolkę typu Liczba całkowita o nazwie (identyfikatorze) ID_OCR, do której będzie zapisywane ID OCR-owanego dokumentu.
Kontrolka Liczba całkowita ID_OCR
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
”Jednostka miary” (identyfikator kolumny: JM) – typ Lista
”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 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
Jednostki miary:
SELECT Naz_GIDLp,Naz_Nazwa from cdn.Nazwy where Naz_GIDTyp=144;
Lista Jednostka miary w kontrolce Dane tabelaryczne
4.Dodano obserwację kontrolki: W kontrolce Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie do kontrolki ID_OCRoraz do samej siebie.
Powiązanie do kontrolki ID_OCR i samej siebie
5.Zintegrowane zapytanie SQL do obsługi obu trybów: W kontrolce typu 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.OC_Document_Items oraz do.OC_Documents na podstawie przekazanego parametru @ID_OCR@ (ID dokumentu OCR). W zapytaniu SQL konieczne jest użycie logiki CASE WHEN do konwersji wartości tekstowych jednostek miary (’szt’) i stawek VAT (np. '23.00′) na odpowiednie identyfikatory liczbowe akceptowane przez Comarch BPM. Dodano również zapytanie, które na podstawie Ilości i Ceny wylicza wartość Netto, po zmianie Stawki VAT wylicza wartość Brutto, a po zmianie wartości Brutto wylicza Cenę i wartość Netto.
Uwaga
Należy upewnić się, że identyfikatory liczbowe (ID) stawek VAT i jednostek miary użyte w zapytaniu SQL są zgodne z tymi, które aktualnie obowiązują w bazie Comarch ERP XL współpracującej z Comarch BPM.
Uwaga
W zapytaniu przed nazwą tabel do.OC_Document_Items oraz do.OC_Documents należy wskazać właściwą nazwę bazy Comarch BPM.
Ta sekcja jest wywoływana tylko raz, podczas inicjowania obiegu z OCR:
If @^SenderControlName@ = 'ID_OCR'
Begin
Select
ODI_Name,/*Nazwa*/
ODI_NetUnitPrice, /*Cena netto*/
ODI_Count, /*Ilość*/
CASE
WHEN ODI_Unit='szt.' THEN 1
WHEN ODI_Unit='l' THEN 2
WHEN ODI_Unit='kg' THEN 3
Else 0
END, /*Jednostka miary*/
ODI_NetValue, /* Wartość Netto*/
CASE
WHEN ODI_VatRate='23.00' THEN 1
WHEN ODI_VatRate='8.00' THEN 2
WHEN ODI_VatRate='0.00' THEN 3
WHEN ODI_VatRate='5.00' THEN 7
Else 0
END,
ODI_GrossValue, /*Wartość Brutto*/
[ODI_GrossValue]-[ODI_NetValue], -- kwota VAT
1
from [BPM_Przyklady].do.OC_Document_Items I /*Zmienić na właściwą nazwę bazy BPM*/
join [BPM_Przyklady].do.OC_Documents D on D.OCD_Id=I.ODI_DocumentId /*Zmienić na właściwą nazwę bazy BPM*/
where ODI_DocumentId=@ID_OCR@
END
Ta sekcja jest wywoływana przy każdej modyfikacji danych w kontrolce „Elementy” i wymaga użycia ELSE po sekcji OCR:
ELSE
If @^InitSenderControlName@ ='Elementy'
Begin
/*Deklaracja Stawki VAT */
DECLARE @VAT AS DECIMAL(4, 2)
/* Pobranie stawki VAT z tabeli CDN.Nazwy na podstawie kolumny StawkaVAT w bieżącym wierszu */
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 [StawkaVAT]
FROM @Elementy@
WHERE POS = @Elementy_Row@
)
/* JEŚLI ZMIENIONO KOLUMNY: 2 (Cena), 3 (Ilość), 6 (Stawka VAT) */
IF @Elementy_Column@=2 OR @Elementy_Column@=3 OR @Elementy_Column@=6
BEGIN
/* PRZELICZANIE W PRZÓD (Cena/Ilość/Stawka VAT -> Netto/Brutto) */
/*Wyliczenie i aktualizacja netto i brutto */
UPDATE @Elementy@
SET
[Netto] = (Ilosc * Cena),
[Brutto] = (Ilosc * Cena) * (@VAT + 1)
WHERE POS = @Elementy_Row@
/* !!! OBOWIĄZKOWE: Odświeżenie wiersza !!! */
SELECT * FROM @Elementy@
END
/* JEŚLI ZMIENIONO KOLUMNĘ: 7 (Brutto) */
IF @Elementy_Column@=7
BEGIN
/* PRZELICZANIE W TYŁ (Brutto -> Cena/Netto) */
/* Aktualizacja ceny i netto (Ilość stała) */
UPDATE @Elementy@
SET
[Cena] = [Brutto] / (@VAT + 1), /*Obliczenie Ceny Netto z Brutto*/
[Netto] = [Ilosc] * ([Brutto] / (@VAT + 1)) /*Obliczenie Wartości Netto*/
WHERE POS = @Elementy_Row@
/* !!! OBOWIĄZKOWE: Odświeżenie wiersza !!! */
SELECT * FROM @Elementy@
END
END
Zapytanie SQL w kontrolce Dane tabelaryczne na zakładce Inicjowanie wartości
Tryb pracy: W kontrolce typu Dane tabelaryczne, na zakładce Ograniczenie edycji kolumnę „Netto” ustawiono w trybie „Do odczytu”.
Kolumna Netto w trybie „Do odczytu”
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
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
Punkt ACD: W punkcie konfiguracyjnym ACD (Współpraca z Comarch OCR), wykorzystywanym do inicjowania obiegu, na zakładce Kontrolki dodano kontrolkę ID_OCR i przypisano jej odpowiednie zapytanie:
select @Id1@
Kontrolka ID_OCR w punkcie ACD
Uzupełniona Kontrolka Dane Tabelaryczne
Po pomyślnym zainicjowaniu dokumentu z punktu ACD, kontrolka typu Dane Tabelaryczne została automatycznie wypełniona pozycjami odczytanymi przez OCR. 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 w przód (Cena/Ilość -> Netto/Brutto) oraz w tył (Brutto -> Cena/Netto). Kolumna Netto jest zablokowana do ręcznej edycji (tryb „Do odczytu”), co gwarantuje poprawność danych. Kontrolka WartoscNetto wyświetla poprawną sumę końcową z kolumny Netto kontrolki Dane tabelaryczne. Kontrolka WartoscBrutto wyświetla poprawną sumę końcową z kolumny Brutto kontrolki typu Dane tabelaryczne.
Kontrolka Dane tabelaryczne uzupełniona pozycjami odczytanymi przez Comarch OCR 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?
Czy wiesz, że można wypełnić kontrolkę typu Dane Tabelaryczne pozycjami dokumentu pobranego z KSeF oraz przeliczyć wartości 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. 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.
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 (
/* CTE 1: Ujednolicenie stawek VAT, tabela KSI_ElementStawkaVAT */
SELECT
KSI_ElementNazwa,
KSI_ElementCenaNetto,
KSI_ElementIlosc,
KSI_ElementWartoscNetto,
KSI_ElementStawkaVAT,
CASE
WHEN di.KSI_ElementStawkaVAT LIKE 'Stawka%' THEN LTRIM(RTRIM(SUBSTRING(di.KSI_ElementStawkaVAT, 7, LEN(di.KSI_ElementStawkaVAT) - 6)))
WHEN di.KSI_ElementStawkaVAT = 'zw' THEN 'ZW'
WHEN di.KSI_ElementStawkaVAT = 'np' THEN 'NP'
ELSE di.KSI_ElementStawkaVAT
END AS StandardizedStawkaVAT
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*/
),
ProcessedNazwyRanked AS (
/* CTE 2: Porządkowanie stawek VAT z tabeli słownikowej (CDN.Nazwy), w celu zapewnienia unikalności */
SELECT
Naz_GIDLp,
Naz_Nazwa1,
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' THEN 'ZW'
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 'NP'
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END AS StandardizedNazwa1_ForJoin,
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' OR LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 0.00
WHEN ISNUMERIC(
CASE
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
) = 1 THEN CAST(
CASE
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
AS DECIMAL(5, 2)) / 100.0
ELSE 0.00
END AS CalculatedVATRate,
/* Numerujemy rekordy dla tego samego klucza łączenia. */
ROW_NUMBER() OVER (PARTITION BY
CASE
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%ZW%' THEN 'ZW'
WHEN LTRIM(RTRIM(n.Naz_Nazwa1)) LIKE '%NP%' THEN 'NP'
WHEN CHARINDEX(' ', LTRIM(RTRIM(n.Naz_Nazwa1))) > 0 THEN LTRIM(RTRIM(SUBSTRING(n.Naz_Nazwa1, 1, CHARINDEX(' ', n.Naz_Nazwa1) - 1)))
ELSE LTRIM(RTRIM(n.Naz_Nazwa1))
END
ORDER BY n.Naz_GIDLp ASC) as RN
FROM
CDN.Nazwy AS n
WHERE Naz_GIDTyp = 624
),
ProcessedNazwy AS (
/* CTE 3: Finalne, unikalne stawki */
SELECT
Naz_GIDLp,
StandardizedNazwa1_ForJoin,
CalculatedVATRate
FROM
ProcessedNazwyRanked
WHERE RN = 1 /* Wybieramy tylko jeden (pierwszy) rekord dla każdej unikalnej stawki */
)
/* Końcowy SELECT: Zwraca żądany zestaw kolumn */
SELECT
pi.KSI_ElementNazwa,
pi.KSI_ElementCenaNetto,
pi.KSI_ElementIlosc,
pi.KSI_ElementWartoscNetto,
pn.Naz_GIDLp AS 'stawka VAT', /* ID stawki z drugiej tabeli */
pi.KSI_ElementWartoscNetto * (1 + pn.CalculatedVATRate) AS 'Wartość brutto',
NULL AS 'NULL'
FROM
ProcessedDocumentItems AS pi
JOIN
ProcessedNazwy AS pn
ON
pi.StandardizedStawkaVAT = pn.StandardizedNazwa1_ForJoin;
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: Automatyczne przeliczanie wartości w trybie edycji */
/* Kolumny 2-Cena, 3-Ilość, 5-Stawka VAT */
IF @Elementy_Column@=2 OR @Elementy_Column@=3 OR @Elementy_Column@=5
BEGIN
DECLARE @VAT as decimal (4,2)
/* Pobranie stawki VAT z tabeli słownikowej */
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@
/* Aktualizacja wartości Netto */
SET [Netto] = (Ilosc * Cena),
/* Aktualizacja wartości Brutto */
[Brutto] = (Ilosc * Cena) * (@VAT + 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 typuDane 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?