Funkcije
Primjer s zabavomction dlStringReplace
Na izvještaju '10A - Izvještaj o materijalnim kretanjima - Detaljno' koji se nalazi u izborniku programa 'Roba | Materijalno kretanje' dodajte objekt "Tekst" na traku nazvanu 'Detalj' i napišite izraz koji vraća prikaz serijskih brojeva koji pripadaju odabranoj poziciji i odabranom računu. Funkcija SQLExp vraća sve zapise, svaki u svom redu, ali želimo prikazati serijske brojeve u jednom redu, odvojene zarezima.
[dlStringReplace(SQLExp('SELECT acSerialNo, FROM tHE_MoveItemSerialNo WHERE acKey = ''' + <qReportIzpis."acKey"> + ''' AND acIdent = ''' + <qReportIzpis."acIdent"> + ''' GROUP BY acSerialNo UNION ALL SELECT acSerialNo FROM tHE_OrderItemSerialNo WHERE acKey = ''' + <qReportIzpis."acKey"> + ''' AND acIdent = ''' + <qReportIzpis."acIdent"> + ''' GROUP BY acSerialNo ORDER BY acSerialNo'), #13#10, ', ', 'rfReplaceAll', '')]
Primjer s datumskim poljima
Na klonu izvještaja '241 - Račun' koji se nalazi u izborniku programa 'Roba | Izdanje | Dokument (npr. 3000 - Prodaja)' dodajte saldo računa za izdanje na račun 2200 na dan računa. Važno je da je datum formatiran u obliku yyyymmdd.
[SQLExp('SELECT SUM(anValDebit-anValCredit) from tHE_AcctTransItem where acAcct = 2200 and acSubject=''' + <qReportIzpisD."acReceiver"> + ''' and adDateDoc <= ''' + FormatDateTime('yyyymmdd',<qReportIzpisD."adDateInv">) + '''')]
Primjer s brojem
U ovom slučaju koristimo izvještaj '156 - Izvještaj o materijalnim kretanjima - Sažetak po stavkama' koji se nalazi u izborniku programa 'Roba | Materijalna kretanja' koji prikazuje količinu u alternativnoj mjernoj jedinici.
Pošto nemamo faktor za konverziju količine u primarnoj mjernoj jedinici (U/M) u U/M2, moramo ih dobiti iz registra mjernih jedinica koristeći funkciju SQLExp.
To radimo s sljedećim izrazom:
[SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">)+'')]
Gornji izraz vraća broj kao tekst. Sada želimo ispisati količinu ispisanu u U/M2, pa moramo konvertirati vrijednost dobivenu s dlStrToFloatDef funkcijom u broj. Zatim dijelimo iznos u EM s faktorom dobivenim, i koristeći dlDiv funkciju umjesto dijeljenja od nule, radije nego obične diobe. Na kraju, dobivamo:
[dlDiv(<qReportIzpis."anBegState">, dlStrToFloatDef(SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">) +''), 1))]
Primjer s čitanjem podataka iz PANTHEON prozora
Učinit ćemo sljedeći primjer koji se može napraviti na klonu izvještaja '16B - Izvještaj o izdanima računima - po dobavljačima i stavkama', koji se nalazi u izborniku programa 'Roba | Izvještaji o izdanima računima | Izvještaji o izdanima računima / Marža dobiti'. Ako je skladište odabrano u prozoru, izraz prikazuje cijeli inventar stavke, inače samo ispisuje inventar u odabranom skladištu.
Prozor u programu iz kojeg izvještaj počinje zove se 'PrometObracunIzdRac', ulazno polje u kojem odabiremo skladište nosi naziv 'fWarehouse'. Pojam koji vraća tekst u ovom objektu već je poznat:
[GetFormValue('PrometObracunIzdRac.fWarehouse')]
Prvo provjeravamo je li skladište odabrano. Ako nije, prvi SQLExp izraz koji vraća cijeli inventar odabrane stavke u svim skladištima, inače drugi vraća inventar stavke samo u odabranom skladištu.
[IIF (GetFormValue('PrometObracunIzdRac.fWarehouse') = '',
SQLExp('select SUM (anStock) from tHE_Stock where acIdent = ' +
dlQuotedStr(<qReportIzpis."acIdent">) + ''),
SQLExp('select anStock from tHE_Stock where acIdent = ' +
dlQuotedStr(<qReportIzpis."acIdent">) + ' and acWarehouse = ''' +
GetFormValue('PrometObracunIzdRac.fSkladisce') + ''''))]
Primjer s kompleksnom SELECT izjavom
Posebno postupanje zaslužuje izraz na izvještaju '3AR - Evidencija zaposlenika' koji prikazuje je li radnik invalid ili ne. Nalazi se u izborniku programa 'Osoblje | Datoteke zaposlenika'. Zatim kliknite na ikonu 'Ispis'.
Ova informacija nije izravno napisana u skupu podataka, ali sadrži kategoriju invalidnosti u polju "acDisabilityCode" u tablici "tHR_PrsnHealth". Budući da se kategorija invalidnosti pojedinog radnika može promijeniti, moramo dobiti onu koja je posljednja unesena. Datum promjene invalidnosti pohranjuje se u polju "adCreationDate" u istoj tablici. Sljedeći pojam daje vam posljednji datum kada se kategorija invalidnosti za odabranog radnika promijenila.
[SQLExp('select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + '''')]
Zatim, s pojmom ispod, dobivamo kategoriju invalidnosti radnika
[SQLExp('select acDisabilityCode from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''')')]
Ako u gornjem terminu zamijenimo polje "acDisabilityCode" s 'DA', izraz vraća 'DA' ako je radnik invalid, inače vraća prazan niz. Budući da, u slučaju kada radnik nije invalid, izraz vraća 'NE', dajemo pojam uvjetnoj rečenici IIF i konačno dobivamo
[IIF(SQLExp('select ''YES'' from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and acDisabilityCode > ''0'')') = 'YES','DA','NE')]
Sortiranje i grupiranje po polju koje nije u skupu podataka
Vrlo neobična i korisna upotreba funkcije SQLExp je za sortiranje i grupiranje po polju koje nije u skupu podataka.
Kao osnovu, uzet ćemo izvještaj '164 - Izvještaj o izdanima računima - Detaljno' koji se nalazi u izborniku programa 'Roba | Izvještaji o izdanima računima | Izvještaji o izdanima računima / Marža dobiti'. Prvo stvaramo klon na kojem ćemo raditi. Podaci će biti grupirani prema izdavaču računa i sortirani prema izdavaču i broju dokumenta.
Postavljamo svojstvo "Uvjet" trake "GroupHeader" na;
SQLExp('select G.acIssuer from tHE_Move G where G.acKey = ''' + <qReportIzpis."acKey"> + '''')
Zatim zamijenite opis koji opisuje informacije koje grupiramo, i za same podatke. Unosimo isto kao gore, ali stavimo to u uglate zagrade (kao što je prikazano na slici). Da bismo promijenili sortiranje, promijenite polje 'Sort By' u registru izvještaja:
(select G.acIssuer from tHE_Move G where G.acKey = P.acKey), G.acKey

