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.
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
Kliknij tutaj, aby pobrać przykład
Zasada działania
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

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))=''

3. Dodano obserwację kontrolki: W kontrolce typu Dane tabelaryczne, na zakładce Inicjowanie wartości, dodano powiązanie 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

5. Tryb pracy: W kontrolce typu Dane tabelaryczne, na zakładce Ograniczenie edycji kolumnę „Netto” ustawiono 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@

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.

 
                        



