Przeliczanie kursów walut według Europejskiego Banku Centralnego

Facebooktwitterpinterestlinkedinmail
Dotyczy wersji 2021.1.x autor: Dawid Golonka

 

Wprowadzenie

System WEBCON BPS w swojej podstawowej funkcjonalności umożliwia obsługę synchronizacji kursów walut. Dostępnymi źródłami danych walutowych, są tabele kursów udostępniane przez Narodowy Bank Polski, Europejski Bank Centralny, a także Centralny Bank Rosji. W tym artykule szerzej opisany został sposób pobierania i przeliczania kursów udostępnianych przez EBC.

Tabela kursów Europejskiego Banku Centralnego zwraca przelicznik, ile jednostek danej waluty odpowiada wartości jednego euro. Wykonując proste obliczenia matematyczne możemy przeliczać waluty również na wartości w euro. Drugi z poruszonych problemów dotyczy tego, co możemy zrobić, aby obsługiwać również przeliczanie kursów w dni weekendowe (tabela kursów EBC nie zwraca wartości dla weekendów).

 

Pobieranie i przeliczanie kursów z EBC

Konfiguracja źródła

Poniżej przedstawione zostało zapytanie wykonane do tabeli ExchangeRates, stanowiące konfigurację źródła.

Zrzut ekranu 1. Zapytanie do tabeli z kursami walut

 

Pierwsza część zapytania (przed łącznikiem „Union”) odpowiada za pobranie ID, kodu, daty pobrania kursu i samego kursu wszystkich walut udostępnianych przez EBC. Przy każdym tagu zwracającym „Datę kursu” dodana jest funkcja „DATEADD”, tak, aby finalnie zapytanie odnosiło się do dnia poprzedzającego wskazaną datę (parametr „-1”). Spowodowane jest to tym, że najświeższymi kursami pobranymi do tabeli są te z dnia wczorajszego – dla daty bieżącej zapytanie nie zwróciłoby zatem wartości. Atrybut „Data kursu” jest to wartość z formularza, na którym będą przeliczane waluty. Można wybrać tu, oprócz daty dnia dzisiejszego, dowolną datę z przeszłości. Aby zachować spójność z rejestrowaniem elementu dla daty dzisiejszej, nawet dla dat z przeszłości będzie zwracany kurs z dnia poprzedzającego tę datę.

ECB nie udostępnia kursów w weekendy. Z tego powodu zapytanie zostało zawężone – jeśli zwracanym dniem tygodnia jest sobota (wartość 7), bądź niedziela (wartość 1), data pobrania kursów cofana jest odpowiednio o 1 lub 2 dni, czyli zwracany jest kurs z piątku.

Jako, że tabela kursów nie zwraca symbolu waluty euro, kod tej waluty został do wyników tabeli dodany ręcznie (część po łączniku „Union”). Data waluty została ustawiona analogicznie jak dla pozostałych kursów, a wartość kursu ustawiona sztywno na „1”. Takie rozwiązanie znacznie ułatwi konfigurację kalkulatora.

 

Konfiguracja obiegu

Finalny efekt działania kalkulatora na formularzu wygląda następująco:

Zrzut ekranu 2. Kalkulator walut, oblicza wartości dla kursu z dnia poprzedniego

 

Pola oznaczone przedrostkiem [TECH] to pola techniczne, które nie zostaną wyświetlone na formularzu.

W atrybucie „Waluta źródłowa” wskazujemy z jakiej waluty nastąpi przeliczenie kursu. Jest to atrybut typu pole wyboru, ze źródłem zwracającym kody walut. W opisywanym przypadku stworzone zostało źródło typu „Stała lista wartości”:

Zrzut ekranu 3. Źródło pola wyboru waluty

 

To samo źródło, zostało podpięte do atrybutu, gdzie wybierana jest waluta docelowa.

Utworzone zostały reguły biznesowe, wykorzystywane w regułach formularza wykonujących się na zmianę wartości atrybutów, gdzie wybierane są waluty źródłowa i docelowa. Reguła wykonująca się po wybraniu waluty źródłowej uzupełnia atrybut techniczny „[TECH] Kurs średni w walucie źródłowej dla 1 EUR”.

Zrzut ekranu 4. Reguła formularza, wykonywana na zmianę wartości atrybutu "Waluta źródłowa"

 

W regule tej wykonuje się funkcja „Data source value” o następującej konfiguracji:

Zrzut ekranu 5. Reguła biznesowa zwraca kurs waluty źródłowej wyrażony w  euro

 

Finalnie funkcja ta zwraca wartość 1 euro wyrażoną w walucie źródłowej. W konfiguracji funkcji wskazujemy źródło danych reguły (utworzone na początku artykułu zapytanie do tabeli walut), następnie filtrujemy wartości tak, by funkcja zwróciła nam wartość tej waluty, która została wskazana na formularzu (kod waluty źródłowej ze źródła danych musi zgadzać się temu z formularza), na koniec wybieramy kolumnę zwracanej wartości – w naszym przypadku, będzie to kolumna zwracająca kurs waluty.

Analogicznie powinna zostać skonfigurowana reguła wykonująca się po wybraniu waluty docelowej i  uzupełniająca atrybut techniczny „[TECH] Kurs średni w walucie docelowej dla 1 EUR”.

Zrzut ekranu 6. Reguła formularza, wykonywana na zmianę wartości atrybutu "Waluta docelowa"

 

Zrzut ekranu 7. Reguła biznesowa zwraca kurs waluty docelowej wyrażony w  euro

 

Na zmianę wartości atrybutu technicznego „[TECH] Kurs średni w walucie źródłowej dla 1 EUR” wykonuje się reguła formularza, która oblicza wartość kursu waluty, którą chcemy uzyskać w stosunku do euro (np. kurs pary USD/EUR jak w przykładzie).

Zrzut ekranu 8. Reguła obliczająca kurs średni w euro dla waluty źródłowej

 

Dysponując już wszystkimi koniecznymi przelicznikami, możemy przeliczyć wprowadzoną kwotę w podanej walucie na wartość pożądaną. Przeliczenie dokonuje się w regule formularza, którą możemy ustawić na zmianę wartości dowolnego pola w kalkulatorze (najlepiej wszystkich zmieniających się):

Zrzut ekranu 9. Reguła obliczająca wartość podanej kwoty w nowej walucie

 

Wprowadzona początkowa kwota w danej walucie jest przeliczana na wartość w euro, a następnie wartość wyrażona w euro jest przeliczana na docelową walutę.

Przykład innego przeliczenia przedstawiono poniżej. Formularz zadziałał poprawnie, pomimo wskazania daty z niedzieli. Zwrócony został kurs dla poprzedzającego piątku.

Zrzut ekranu 10. Inny przykład działania kalkulatora

 

Podsumowanie

Przedstawiony powyżej prosty kalkulator walut, prezentuje jeden ze sposobów, na przeliczanie kursów walut udostępnionych przez EBC, na walutę euro. Zaprezentowany został również sposób obsługi zwracania kursów walut dla dni weekendowych. Korzystając z narzędzi wbudowanych w system Webcon BPS, jak również z dobrodziejstw języka SQL, możemy dowolnie konfigurować źródła danych wykorzystywanych w obiegach.