Go to Home page  
open/test
Funkcja AFnAfql()                    
Alias: GETDATAAFQL() lub umieszczona jako element funkcji DANE()
Jest to funkcja, która nie posiada formy tablicowej - zwraca wyłącznie jedną wartość sumy sald kont, określonych za pomocą tzw. AFQL (AFIN Financial Query Language) - naszego (© AFIN 1997) języka definiowania zapytań księgowych.
Bazuje na powszechnej znajomości formy raportu księgowego "Zestawienie Obrotów i Sald" (ZOiS), oferowanego przez każdy system finansowo-księgowy, wymagany przez Ustawę o Rachunkowości we wszystkich krajach świata. W pionie - konta, w kolumnach, odpowiednio: bilanse otwarcia, obroty miesięczne, obroty narastające, salda. Każdy księgowy wie, co to jest "saldo winien konta 100", więc zapytanie w AFQL brzmi : "sw/100". Wdrożenie systemu raportowego w finansach jest więc stosunkowo proste i polega na instalacji AFinScript, ustawieniach parametrów oraz maksymalnie kilkugodzinnym szkoleniu. I można robić dowolne raporty finansowe! Samodzielnie! Natychmiast! W Excelu!
Więcej informacji:
http://afin.net/articles/AfinNet_Article_AFQL_PL.htm
https://www.w3schools.com/sql/sql_like.asp
https://www.w3schools.com/sql/sql_wildcards.asp
PROSTY PRZYKŁAD                        
Jej najprostrza forma to 
Przykład  =AFnAfql("sw/1*";"2023";"12";"{{FK}}")
przykładowa wartość 4 192 385,12
ARGUMENTY                        
AFnAfql(strAFQL;strYearYYYY;strMonthMM;strParameters)
strAFQL
Można używać symboli wieloznacznych, takich jak "*" (lub SQL-owy "%") oraz "?" (lub SQL-owy "_"), a gdy baza danych jest produktem firmy Microsoft (MS Excel(sic!), MS Access, MS SQL Server), działa również, znany z REGEX, ogólny sposób zapisu zakresów znaków, jak
[a-b], [0-4], [135], [^234], 535-[0-3][0-9][0-9]-40[1-3]-* , itp.
Przykłady arkumentu strAFQL:
sw/1*
sm/200*
ow/010.000.000
om/700*-om/710*, co może być zapisane również jako om/700<710   -   obroty narastające konta 700, pomniejszone o konto 710
oraz, nasz ulubiony, rzeczywisty przykład klienta
sw/??.701.?.*<??.701.0.*>??.702.?.*<??.702.0.*>??.703.?.*<??.703.0.*>??.704.?.*<??.704.0.*>??.706.?.*<??.706.0.*>??.707.?.*<??.707.9>??.708.?.*<??.708.9.0*>02.708>??.730.?.*<??.730.0.*>??.740<??.740.0>06.740.0.??<06.740.0.00
strYear
Rok jako czteroznakowy ciąg znaków, np. "2024". Parametr ten jest podawany w funkcji bezpośrednio lub pośrednio z innej komórki.
strMonth
Miesiąc jako dwuznakowy (UWAGA: nie jednoznakowy!) ciąg znaków, np. "01". Parametr ten jest podawany w funkcji bezpośrednio lub pośrednio z innej komórki.
strParameters
Parametr, dostarczasjący funkcji informacji o sposobie konstrukcji zapytania z ciągu połaczeniowego ConnectionString oraz parametrów, wynikających z podania innych argumentów funkcji. Ten argument rzadko jest podawany jawnie - zwykle jest pobierany z listy zmiennych, poprzez odwołanie np. do zmiennej "FK", co jest realizowane poprzez tekst "{{FK}}" (i jest to wtedy zwykla cała wartość tego argumentu), a na liście zmiennych jest podane jako: 
lsConnStr=DRIVER=SQL Server Native Client 11.0; SERVER=.\SQLEXPRESS; UID=afin; Trusted_Connection=Yes; DATABASE=zois@lsFromWhereClause=FROM arimr_zs{YYYY}{MM} WHERE [Konto] LIKE '{AccNo}' 
oznacza to, po kolei:
1. lsConnStr=DRIVER=SQL Server Native Client 11.0; SERVER=.\SQLEXPRESS; UID=afin; Trusted_Connection=Yes;    
gdzie lsConnStr to klasyczny ciąg połączenia bazodanowego, czyli Connection String
DRIVER=SQL Server Native Client 11.0; SERVER=.\SQLEXPRESS; UID={user name}; Trusted_Connection=Yes;
2. DATABASE=zois@lsFromWhereClause=FROM {prefix}_zs{YYYY}{MM} WHERE [Konto] LIKE '{AccNo}'       
gdzie najpierw następuje wskazanie nazwy bazy danych
DATABASE=zois
a rozbudowany argument lsWromWhereClause oznacza sposób budowy zestawu klauzul SQL - FROM i WHERE
lsFromWhereClause=FROM {user_prefix}_zs{YYYY}{MM} WHERE [Konto] LIKE '{AccNo}' 
{YYYY} - to rok z argumentu strYear (powyżej)
{MM} - to miesiąc z argumentu strMonth (powyżej)
[Konto] - nazwa kolumny konta księgowego
Fragment LIKE '{AccNo}' można uznać jako stały, gdyż pokazuje on tylko, jak działa, tak złożony, SQL.