SQL Exp
 |
V večini primerov je bolje uporabiti poizvedbe na poročilu namesto SQLExp funkcije. |
SQLExp je funkcija, ki vam omogoča dostop do podatkov, ki sicer niso na voljo v izvirnem naboru podatkov poročila. Na ta način lahko vključite podatke iz drugih tabel v uporabniško definirana poročila.
Glava
funkcija SQLExp(sql:String): String;
Enostavni primeri
Najprej si oglejmo dva enostavna primera, ki ju lahko uporabimo na vsakem poročilu. Prvi izraz vrne naslov subjekta z imenom 'Tovarna'
[SQLexp('select acAddress from tHE_SetSubj where acSubject = ''Factory''')]
Drugi primer vrne ime naše podjetja. Uporablja združitev dveh tabel
[SQLexp('select S.acSubject from tHE_SetSubj S, tPA_SysParam P where S.acSubject = P.acOurCompany')]
Primer uporabe na poročilu 103 - Poročilo o naročilu - podrobno
Zbirate naročila in enkrat na teden ta naročila dostavite prejemnikom. V poročilu o naročilu lahko ustvarite poročilo o nedostavljenih naročilih z vnesenim Dostava poljem (metoda dostave) Dostava - z lastnim tovornjakom.
V naboru podatkov poročila o naročilu niso navedeni naslov in pošta kupca. Vsi ti podatki so na voljo v registru subjektov, kar zadeva ID subjektov, je že prisoten v naboru podatkov103 - Poročilo o naročilu - podrobno poročila.
Vsi kriteriji so bili izpolnjeni za uporabo funkcije SQLExp na poročilu. Poglejmo!
Postavite objekt "Besedilo" na poročilo. Kliknite na objekt, da odprete urejevalnik besedila. Napišite izraz v urejevalniku. Izraz morate obkrožiti s kvadratnimi okviri, ker je napisan kot izraz v objektu "Besedilo".

[SQLExp('select acAddress from tHE_SetSubj where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Razlaga
acConsignee je polje v naboru podatkov qReportIzpis ki se uporablja za generiranje poročila.
Funkcija dlQuotedStr (registrirana za poročilo pri Datalab) pretvori niz v citirano različico.
Po zamenjavi dlQuotedStr(<qReportIzpis."acConsignee">), je SQL ukaz:
'select acAddress from tHE_SetSubj where acSubject = '''Customer&Co.''' '
in tako je poizvedba, ki se izvede:
select acAddress from tHE_SetSubj where acSubject = 'Customer&Co.''
 |
Ker se imena naborov podatkov in polj lahko razlikujejo v vsakem poročilu, morate preveriti ime naborov podatkov in polj za vsako konkretno poročilo. |
Poročilo o mestu kupca iz naročila
SQL stavek je v tem primeru združitev dveh tabel
[SQLExp('select P.acName from tHE_SetSubj S left join tHE_SetPostCode P on S.acPost = P.acPost where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Primer kolektivnega računa
Oglejmo si primer, kjer je bil kolektivni račun (prejemnica ali izdan račun) ustvarjen iz notranjih dokumentov (prejemnic ali izdanih računov), v katerih ste prejeli ali izdali blago, ki ga spremljajo serijske številke.
Poročilo o kolektivnem računu ali pregled serijskih številk ne bo dalo informacij o prejetih ali izdanih serijskih številkah predmetov iz kolektivnega računa, ker so bile te serijske številke prejete ali izdane preko notranjih dokumentov.
Vendar lahko poročate o seznamu prejetih ali izdanih serijskih številk! Za to uporabite funkcijo SQLExp. Serijske številke bodo neposredno poročane z uporabo povezovalne tabele, kjer je tip povezave med notranjim dokumentom in kolektivnim računom 4.
Poročila te vrste se uporabljajo za poročanje serijskih številk v kolektivnem računu, ki je bil ustvarjen neposredno iz notranjih dokumentov.
Ustvarite novo kloniranje že obstoječega poročila za račun. Dodajte nov objekt besedila in napišite naslednji SQL stavek:
[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 kolektivnega dokumenta, ustvarjenega z notranjimi dokumenti
Oglejmo si primer, kjer je bil kolektivni račun (prejemnica ali izdan račun) ustvarjen iz notranjih izdanih dokumentov, v katerih ste izdali blago, ki ga spremljajo serijske številke.
Poročilo o kolektivnem računu ali pregled serijskih številk ne bo dalo informacij o izdanih serijskih številkah predmetov iz kolektivnega računa, ker so bile te serijske številke izdane preko dokumenta za kupca.
Vendar lahko poročate o seznamu izdanih serijskih številk! Za to uporabite funkcijo SQLExp. Serijske številke bodo neposredno poročane z uporabo povezovalne tabele, kjer je povezava med notranjim dokumentom in kolektivnim računom vnesena s tipom V.
1. Ustvarite novo kopijo iz poročila že obstoječega poročila za račun. Dodajte nov objekt besedila in napišite naslednji SQL stavek:
[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 prejšnjega primera je le ta, da je tip povezave v tem primeru "V" namesto 4.
Primer klicanja shranjene procedure
Parametr funkcije je lahko tudi shranjena procedura. Naslednji primer vrne mesto našega podjetja s klicem shranjene procedure "fHE_GetOurCompanyCity"
[SQLExp('select dbo.fHE_GetOurCompanyCity()]