Przejdź do głównej zawartości

Funkcje finansowe

Funkcje finansowe towarzyszą nam w codziennym życiu, choć wielu z nas nie zdaje sobie z tego sprawy. Zaciągamy kredyty, leasingujemy, inwestujemy i często mamy problem z obliczeniem podstawowych wskaźników.

Funkcje finansowe umożliwiają na przykład obliczanie wartości inwestycji lub amortyzacji, które są bardzo istotne dla funkcjonowania przedsiębiorstwa lub budżetu domowego.

Funkcje finansowe mogą być wam znane z Microsoft Excel. Okazuje się, że Crystal Reports również zawiera identyczną listą funkcji i można je z powodzeniem zastosować w raportach. Dzięki temu, że nazwy funkcji są identyczne jak w Excelu, można skorzystać z opisów pod tym linkiem.

W przypadku niektórych funkcji nie jest łatwe zadanie, gdyż używa się ich inaczej niż zwykłych funkcji agregujących takich jak suma lub średnia. Problem wynika z tego, że jako argument funkcji trzeba przekazać zmienną tablicową, a nie wprost wartość pola z tabeli. 

Pokażę to na przykładzie funkcji NPV, która umożliwia obliczanie aktualnej wartości netto inwestycji na podstawie danej stopy dyskontowej oraz serii przyszłych płatności (wartości ujemne) i dochodów (wartości dodatnie). Dokładny opis funkcji NPV znajduje się tutaj

Składnia Crystal Reports:
NPV (rate, values)

gdzie rate - to stopa procentowa, a values - to lista wartości

Przykład:
NPV (0.05, [1000, 2000, 1500, 1200])


Niby proste wywołanie, ale w jaki sposób zamienić wartości poszczególnych rekordów na listę wartości?

Musimy to zrobić w 3 krokach:
  • deklarujemy tablicę
  • przepisujemy bieżące wartości rekordów do tablicy
  • podstawiamy tablicę wartości do funkcji
1. Tworzymy formułę Init w nagłówku raportu (report header):
// Deklaracja zmiennej tablicowej
shared currencyVar array items;
// Ustawiamy wielkość tablicy na podstawie ilości rekordów
Redim items [Count ({SalesOrderDetail.UnitPrice})];
true
2. Tworzymy formułę Calculate i umieszczamy ją w sekcji szczegółów (details):
// Deklaracja zmiennej tablicowej
shared currencyVar array items;
// Jeśli wartość ujemna to podstawiamy jako pierwszy element
if {SalesOrderDetail.UnitPrice} < 0 then
items[1] := {SalesOrderDetail.UnitPrice}
else
items[recordnumber] := {SalesOrderDetail.UnitPrice};
3. Tworzymy formułę Display w stopce raportu (report footer) 
// Deklaracja zmiennej tablicowej
shared currencyVar array items;
// Obliczenie funkcji NPV na podstawie wartości w tablicy
NPV(0.05, items)

Gotowe.

Mam nadzieję, że teraz poradzicie sobie również z innymi funkcji finansowymi w Crystal Reports i zagoszczą one w waszych raportach. Powodzenia!



Komentarze

Popularne posty z tego bloga

Konwersja daty w CDN Optima

Crystal Reports jest bardzo często zintegrowany z popularnymi aplikacjami. Przykładem jest system CDN Optima . Początkujących użytkownikom sprawiają kolumny z datą, bo data nie jest zapisana jako datetime lecz jako liczba. Otóż data w CDN Optima zapisana jest w formacie Clarion, czyli liczba dni, które upłynęły od daty 1800-12-28 . (Czy ktoś wie co to za data w historii?) Dlatego jeśli chcemy użyć takiego pola na raporcie, pierwsze co powinniśmy zrobić to dokonać konwersji liczby na datę. W innym przypadku Crystal Reports nie będzie wiedział, że jest to data i żadne formatowanie dat, grupowanie po okresach nie będzie działać. Formuła do konwersji formatu Clarion na datę : Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Funkcje Crystal Reports

Crystal Reports posiada bardzo dużo funkcji (ok. 200) do operacji na tekstach, liczbach, datach itd. Można się z nimi zapoznać przeglądając drzewo Funkcje (Functions) w Edytorze Formuł (Formula Editor) i czytając helpa. Warto je znać, aby nie wyważać otwartych drzwi.  Problem w tym, że trzeba wiedzieć czego się szuka.   Dla wielu osób dodatkową barierą może być język angielski, bo nawet w polskiej wersji Crystala, help, o przepraszam.... pomoc jest w języku Szekspira. Dlatego stworzyłem niegdyś listę funkcji Crystal Reports w języku polskim, którą otrzymywali uczestnicy moich szkoleń w formacie PDF.  Teraz postanowiłem  opublikować ją w sieci, aby była zawsze była pod ręką i dostępna dla szerszego grona.  Lista funkcja dostępna jest tutaj . Lista funkcji nie jest jeszcze w pełni kompletna, więc będę ją na bieżąco aktualizować. Czekam na wasze komentarze i uwagi, zwłaszcza propozycje lepszych tłumaczeń. Miłego korzystania!

Zamiana daty i czasu na data-czas

Kolejne szkolenie u klienta i kolejne wyzwanie za mną... Chodziło o wygenerowanie raportu czasu pracy z uwzględnieniem, że zmiana następuje o godz. 6:00 a nie o północy. To znaczy, że godziny do 6:00 powinny być jeszcze zaliczane do dnia poprzedniego. Dodatkowym utrudnieniem u klienta był fakt, że data w bazie danych była rozbita na 2 pola: data w formacie: yyyy-mm-dd 00:00:00 godzina w formacie: 1900-01-01 HH:mm W takim razie do dzieła! Załóżmy, że mamy następującą tabelę: 1. Tworzymy formułę która zamieni 2 osobne pola z datą i czasem w jedno pole typu datetime: W ten sposób otrzymamy jedną wartość w formacie yyyy-mm-dd HH:mm 2. Następnie od tak utworzonej daty odejmujemy 6 godzin: Otrzymamy w rezultacie coś takiego: Kolumna WorkDate wyświetla datę do której została zakwalifikowana pozycja. Na podstawie tak utworzonej formuły można utworzyć grupowanie na raporcie.