SQL Exp
 |
U većini slučajeva je bolje koristiti upite na izveštaju umesto SQLExp funkcije. |
SQLExp je funkcija koja vam omogućava pristup podacima koji inače nisu dostupni u originalnom skupu podataka izveštaja. Na ovaj način možete uključiti podatke iz drugih tabela u korisnički definisane izveštaje.
Header
funkcija SQLExp(sql:String): String;
Jednostavni primeri
Hajde da prvo pogledamo dva jednostavna primera koja se mogu koristiti na svakom izveštaju. Prvi izraz vraća adresu subjekta nazvanog 'Fabrika'
[SQLexp('select acAddress from tHE_SetSubj where acSubject = ''Fabrika''')]
Drugi primer vraća ime naše kompanije. Koristi spoj dve tabele
[SQLexp('select S.acSubject from tHE_SetSubj S, tPA_SysParam P where S.acSubject = P.acOurCompany')]
Primer korišćenja na izveštaju 103 - Izveštaj o narudžbini - detaljno
Prikupljate prodajne narudžbine i jednom nedeljno isporučujete te narudžbine primaocima. U izveštaju o prodajnim narudžbinama možete kreirati izveštaj o neisporučenim narudžbinama sa unetim Dostava poljem (metoda isporuke) Dostava - sopstvenim kamionom.
U skupu podataka izveštaja o prodajnim narudžbinama nisu navedeni adresa i pošta kupca. Svi ovi podaci su dostupni u registru subjekata, dok je ID subjekta već prisutan u skupu podataka izveštaja103 - Izveštaj o narudžbini - detaljno izveštaja.
Svi kriterijumi su ispunjeni da se koristi funkcija SQLExp na izveštaju. Pogledajmo!
Postavite objekat "Tekst" na izveštaj. Kliknite na objekat da otvorite uređivač teksta. Napišite izraz u uređivaču. Morate staviti izraz između uglastih zagrada. jer je napisan kao izraz u objektu "Tekst".

[SQLExp('select acAddress from tHE_SetSubj where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Objašnjenje
acConsignee je polje u skupu podataka qReportIzpis koje se koristi za generisanje izveštaja.
Funkcija dlQuotedStr (registrovana za izveštaj od strane Datalab) konvertuje string u verziju sa navodnicima.
Posle zamene dlQuotedStr(<qReportIzpis."acConsignee">), SQL komanda je:
'select acAddress from tHE_SetSubj where acSubject = '''Kupac&Co.''' '
i tako je upit koji se izvršava:
select acAddress from tHE_SetSubj where acSubject = 'Kupac&Co.''
 |
Pošto se imena skupova podataka i polja mogu razlikovati u svakom izveštaju, morate proveriti ime skupa podataka i polja za svaki konkretan izveštaj. |
Izveštaj o mestu kupca iz prodajne narudžbine
SQL klauzula je u ovom slučaju spoj dve tabele
[SQLExp('select P.acName from tHE_SetSubj S left join tHE_SetPostCode P on S.acPost = P.acPost where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Primer kolektivnog računa
Pogledajmo primer gde je kolektivni račun (prijem ili izdavanje) kreiran iz internih dokumenata (prijema ili izdanja) u kojima ste primili ili izdali robu praćenu serijskim brojevima.
Izveštaj o kolektivnom računu ili pregled serijskih brojeva neće proizvesti informacije o primljenim ili izdatim serijskim brojevima stavki iz kolektivnog računa, jer su ovi serijski brojevi primljeni ili izdati putem internih dokumenata.
Ali možete izvesti listu primljenih ili izdatih serijskih brojeva! Da biste to uradili, koristite funkciju SQLExp. Serijski brojevi će biti direktno izveštavani koristeći tabelu veza, gde je tip veze između internog dokumenta i kolektivnog računa 4.
Izveštaji ove vrste se koriste za izveštavanje serijskih brojeva u kolektivnom računu koji je direktno kreiran iz internih dokumenata.
Kreirajte novu kopiju već postojećeg izveštaja za račun. Dodajte novi tekstualni objekat i napišite sledeću SQL rečenicu:
[SQLExp('select S.acSerialNo + '' ('' + LTrim(Str(Sum(S.anQty), 10, 2)) + '')'' as SN from tHE_MoveItemSerialNo S, tHE_LinkMoveItemMoveItem V where V.acLnkKey = S.acKey and V.anLnkNo = S.anNo and V.acType = ''4'' and V.acKey = ''' + <tbIzpisPrometPoz."acKey"> + ''' and V.anNo = ' + VarToStr(<tbIzpisPrometPoz."anNo">) + ' group by S.acSerialNo')]
Primer kolektivnog dokumenta kreiranog sa internim dokumentima
Pogledajmo primer gde je kolektivni račun (prijem ili izdavanje) kreiran iz internih dokumenata za izdavanje u kojima ste izdali robu praćenu serijskim brojevima.
Izveštaj o kolektivnom računu ili pregled serijskih brojeva neće proizvesti informacije o izdatim serijskim brojevima stavki iz kolektivnog računa, jer su ovi serijski brojevi izdati putem dokumenta za izdavanje kupcu.
Ali možete izvesti listu izdatih serijskih brojeva! Da biste to uradili, koristite funkciju SQLExp. Serijski brojevi će biti direktno izveštavani koristeći tabelu veza, gde je veza između internog dokumenta i kolektivnog računa uneta sa tipom V.
1. Kreirajte novu kopiju iz izveštaja već postojećeg izveštaja za račun. Dodajte novi tekstualni objekat i napišite sledeću SQL rečenicu:
[SQLExp('select S.acSerialNo + '' ('' + LTrim(Str(Sum(S.anQty), 10, 2)) + '')'' as SN from tHE_MoveItemSerialNo S, tHE_LinkMoveItemMoveItem V where V.acLnkKey = S.acKey and V.anLnkNo = S.anNo and V.acType = ''V'' and V.acKey = ''' + <tbIzpisPrometPoz."acKey"> + ''' and V.anNo = ' + VarToStr(<tbIzpisPrometPoz."anNo">) + ' group by S.acSerialNo')]
Razlika od prethodnog primera je samo u tome što je tip veze u ovom slučaju "V" umesto 4.
Primer pozivanja sačuvane procedure
Parametar funkcije može takođe biti sačuvana procedura. Sledeći primer vraća mesto naše kompanije pozivajući sačuvanu proceduru "fHE_GetOurCompanyCity"
[SQLExp('select dbo.fHE_GetOurCompanyCity()]