Artykuł AFIN.NET:
Raport na podstawie nowego źródła danych w AFIN.NET © AFIN 2008
Wojciech Gardziński, 2008.12
Jak utworzyć raport na podstawie dowolnego, nowego
źródła danych zewnętrznych,
tu: rozproszonego w różnych folderach zestawu plików DBF z księgowym
zestawieniem obrotów i sald programu finansowo-księgowego?
Summary:
AFIN.NET can get the data from all the files as a function GETDATAODBC() (below: how to prepare such a function with help of MS Query and how to insert it automatically into a sheet). You can use it in your reports parametrizing with the values in the sheet.
At the end you can (at the time – manually) write a section in DataModel.par and use it as a new AFIN.NET’s Business Measure. After thet you can use the function GETDATA(). In this article used as an alias DANE(). GETDATA() function is very simply to use and full-parametrizable.
Lokalizujemy dane
Dane znajdują się w plikach DBF o nazwach o wzorcu Acc_MM.dbf, gdzie MM to miesiąc. Pliki pogrupowane są w katalogi roczne. W folderach ‘2007’ oraz ‘2008’ znajdują się pliki przykładowe z 3 pierwszych miesięcy danego roku.
Folderów i plików może być dowolna ilość.
Odczytujemy strukturę danych – otwieramy plik DBF pod Excelem.
Tworzymy nową kwerendę do danych (MS Query)
Kolejny krok – wybór źródła danych
Wybór tabeli danych (pierwszej dostępnej)
Pierwsze kroki z kwerendą – wybieramy wszystkie pola do kwerendy
Ustawiamy kwerendę tak, by łatwo odczytać jej parametry
Zasady:
Wszystkie argumenty, które chcemy używać jako filtry danych, powinny znaleźć się w kwerendzie JAKO KRYTERIA. Kryteria tekstowe najlepiej umieszczać z operatorem ‘zaczyna się od’. Pole miary powinno być sumowane, tzn należy ustawić funkcję agregującą ‘Suma’ w polu obliczanym (tu: ‘OW’). (Należy albo dwukrotnie kliknąć na ‘OW’ i w oknie edycji pola kwerendy wybrać funkcje ‘Suma’ jako funkcje agregującą albo ustawić się na ‘OW’ i jeden raz nacisnąć ikonkę ‘Autosuma’ na pasku narzędzi MS Query)
Usuwamy pole ‘Konto’ z kwerendy (ale nie z kryteriów)
Docelowe ustawienia - widok kwerendy
Odczyt zapytania SQL w kwerendzie
(Wyłącznie w celu porównania z argumentami funkcji)
Wskazanie miejsca umieszczenia kwerendy w arkuszu
Gotowa kwerenda
Następnie wskazujemy miejsce umieszczenia funkcji w arkuszu – może to być miejsce w innym, już docelowym arkuszu, gdzie chcemy umieścić nasz przyszły raport.
Gotowa funkcja w arkuszu
Parametryzowanie formuły
Uruchomienie kreatora parametryzacji: Menu podręczne, druga ikona na pasku AFINA, skrót [Ctrl+F2] - na formule.
Temat „Parametryzowanie formuły” z widokami ekranów poszczególnych kroków znajduje się w osobnym artykule
http://afin.net/articles/AfinNet_Article_SimpleReport1_PL.htm
Kolumnę(y), zawierającą kwerendę można usunąć z arkusza (tu: widok przed usunięciem) – istnienie kwerendy w arkuszu nie ma wpływu na działanie funkcji.
Kolejne kroki w dostosowaniu raportu
Poniżej raportu – otwarty w Excelu plik DBF dla porównania odczytywanych wartości danych
Raport docelowo sformatowany. Jest to docelowa forma, stworzona ad-hoc.
Posiada ona wszystkie potrzebne parametry: ‘SumowanePole’, ‘WzorzecKonta’, ‘Rok’, ‘Miesiąc’, z tym, że w tej formie jest nieco skomplikowana.
Funkcję taką stworzyć można bez pomocy informatyka lub narzędzia wspomagającego przetworzenie skomplikowanego zapytania bazodanowego na prosty system zapisu parametrów funkcji DANE().
Tutaj funkcja posiada pełne argumenty, definiujące zarówno pełne źródło danych, jak i pełny tekst zapytania SQL, zwracającego żądane dane. Funkcja ta, dzięki temu, że jej argumenty są łańcuchami tekstowymi, jest już sparametryzowana odpowiednio umieszczonymi w nagłówkach tabeli wartościami – parametrami.
Kreator budowy parametrów funkcji DANE() w przygotowaniu. Będzie dostępny za jakiś czas – prototyp można oglądać (i zgłaszać uwagi na etapie projektu) pod prawym przyciskiem myszy, ustawionej na funkcji GETDATAODBC()
Odczytane z kwerendy parametry źródła danych i zapytania bazodanowego:
Źródło danych:
DBQ=D:\AFIN\AFIN.NET\Samples\Data\ODBC\FinancialsTest\2007;Driver={Driver
do Microsoft dBase (*.dbf)};
Zapytanie SQL, stworzone przez kwerendę:
SELECT SUM(ACC_01.OW) AS 'SUMA Z OW' FROM `ACC_01.DBF` ACC_01 WHERE
(ACC_01.KONTO LIKE '011')
Zapytanie SQL, po uproszczeniu - optymalizacji:
SELECT SUM(OW) FROM ACC_01 WHERE (KONTO LIKE '011')
Gotowa, stworzona przez osobe przeszkoloną, definicja miary ‘Financial.Test’ w pliku DataModel.par.
[Measure Financials.Test]
About =Financial program - ODBC, without AFQL
Type =ODBC
ConnectionText =DBQ=D:\AFIN\AFIN.NET\Samples\Data\ODBC\FinancialsTest\{Year};Driver={Driver do Microsoft dBase (*.dbf)};
QueryText =SELECT SUM({Value}) FROM ACC_{Month} WHERE (KONTO LIKE '{AccountNumber}')
GetDataArguments ={Value},{AccountNumber},{Year},{Month}
SampleFunction =GETDATA("Financials.Test";"ow";"012";"2007";"01")
Jako efekt otrzymujemy prostą funkcję, posiadającą cztery czytelne argumenty: ‘SumowanePole’, ‘WzorzecKonta’, ‘Rok’, ‘Miesiąc’, tu: sparametryzowane wartościami w arkuszu.
GOTOWE.