Aktualna wersja: 19.08.21


Definiowane Funkcje Użytkownika w Arkuszu Kalkulacyjnym


Arkusze Kalkulacyjne są wygodnym i często wykorzystywanym narzędziem analitycznym stosowanym przez analityków, księgowych, kierowników finansowych, itp.

Często dane do arkusza wprowadzane są ręcznie na podstawie raportów otrzymanych z Księgowego systemu ERP, lub ładowane z Rejestrów księgowych w formie tabel, które następnie są ręcznie formatowane (kopiowane i wklejane w odpowiednie miejsca arkusza wynikowego).

Metoda ręcznego przetwarzania arkuszy obarczona jest ryzykiem popełnienia błędu przy kopiowaniu lub przepisywaniu danych, a dodatkowo wymaga dużego nakładu czasu. Wreszcie dane w systemie ERP szybko się zmieniają, więc arkusze w większości przypadków są nieaktualne i przedstawiają analizy „na wczoraj”.

Niektóre systemy ERP posiadają dedykowane dodatki do MS Excel, jednak rozwiązania takie są drogie i niedostępne dla użytkowników mniejszych systemów księgowych.

Program-JPK PRO posiada wbudowany Arkusz Kalkulacyjny, który obsługuje standardowe funkcje zgodne z MS Excel. Dodatkowo zawansowany użytkownik (programista) otrzymuje mechanizm do tworzenia własnych funkcji, które mogą realizować dowolne dynamiczne obliczenia w trybie rzeczywistym, w tym pobierać dane z różnych baz danych SQL systemów ERP. Jeden arkusz może prezentować dynamiczne analizy porównawcze np. z programu handlowego opartego na bazie MySQL (np. sklep internetowy) i jednocześnie programu Finansowo Księgowego opartego na bazie MS SQL Server.

Analizy dostępne są nawet dla użytkowników starszych aplikacji pracujących w oparciu o tabele DBF (Clipper).


Opis mechanizmu tworzenia własnych funkcji rozpoczniemy od bardzo prostego przykładu.


Funkcja użytkownika Excel UDF

Edytor z funkcjami otwieramy w Menu/Plik/Funkcje C#


Jeżeli w programie nie ma jeszcze funkcji użytkownika, to automatycznie tworzona jest pusta klasa. W powyższym przykładzie dodano dwie funkcje JPK() oraz F1().

Funkcje nie muszą mieć parametrów, w takim przypadku wykonują tylko stałe obliczenia i zwracają dowolne wartości. W przykładzie funkcja JPK() zwraca tylko tekst Program-JPK PRO (który wcześniej mógłby zostać odpowiednio sformatowany przez funkcję).

Zazwyczaj funkcje będą potrzebować parametrów i taki przykład prezentuje funkcja F1(), która ma dwa parametry, ale ich liczba może być dowolna. Zalecamy definiować parametry jako typ object i wewnątrz funkcji (w kodzie C#) wykonywać odpowiednie konwersje. Uchroni nas to przed błędami kompilatora: Typy niezgodne lub funkcja nie została znaleziona z powodu innej definicji typów. Takie przypadki mogą wystąpić gdy w komórkach arkusza wprowadzimy tekst, a funkcja spodziewa się liczby. W naszym przypadku konwersja ToDouble() automatycznie zwróci zero, jeżeli wartość przekazanego parametru jest błędna (np. tekst).


Wprowadzanie funkcji w komórce Arkusza wykonujemy wg stałego schematu:

=UDF("Nazwa funkcji") jeżeli zdefiniowana funkcja nie posiada parametrów, w przykładzie =UDF("JPK")

lub

=UDF("F1";p1)

=UDF("F1";p1;p2)

=UDF("F1";p1;p2;p3) itd. Jeżeli funkcja posiada parametry.


UWAGA! Nazwy funkcji oraz nazwy parametrów są dowolne. Liczba funkcji wewnątrz skryptu również jest dowolna.

Po utworzeniu rozszerzenia C# z definicją własnych funkcji, zmiany należy zapisać.

Podczas startu Arkusza funkcje są automatycznie ładowane i użytkownik nie musi wykonywać żadnych czynności. Od razu można je stosować przy definiowaniu nowych analiz lub załadować arkusz XLS/XLSX, w którym używane są funkcje użytkownika.



Zapoznaj się z następnym dokumentem: Definiowane Funkcje Użytkownika - obliczenia SQL