SQL Exp
 |
În cele mai multe cazuri, este mai bine să folosești interogări pe raport în loc de SQLExp funcție. |
SQLExp este funcția care îți permite să accesezi date care altfel nu sunt disponibile în setul de date original al raportului. În acest fel, poți include date din alte tabele în rapoartele definite de utilizator.
Header
funcție SQLExp(sql:String): String;
Exemple simple
Hai să ne uităm mai întâi la două exemple simple care pot fi folosite pe fiecare raport. Prima expresie returnează adresa subiectului numit 'Fabrica'
[SQLexp('select acAddress from tHE_SetSubj where acSubject = ''Factory''')]
Al doilea exemplu returnează numele companiei noastre. Folosește un join între două tabele
[SQLexp('select S.acSubject from tHE_SetSubj S, tPA_SysParam P where S.acSubject = P.acOurCompany')]
Exemplu de utilizare pe raportul 103 - Raport de comenzi - detaliat
Colectezi comenzi de vânzare și o dată pe săptămână livrezi aceste comenzi către destinatari. În raportul de comenzi de vânzare poți crea un raport al comenzilor neexpediate cu introduse Livrare câmp (metoda de livrare) Livrare - cu camionul propriu.
În setul de date al raportului de comenzi de vânzare nu sunt furnizate adresa și poșta clientului. Toate aceste date sunt disponibile în registrul Subiectelor, deoarece pentru ID-ul Subiectelor, acesta este deja prezent în setul de date al103 - Raport de comenzi - detaliat raportului.
Toate criteriile au fost îndeplinite pentru a folosi funcția SQLExp pe un raport. Să ne uităm!
Pune obiectul "Text" pe raport. Fă clic pe obiect pentru a deschide editorul de text. Scrie expresia în editor. Trebuie să încadrezi expresia între paranteze pătrate, deoarece este scrisă ca expresie în obiectul "Text".

[SQLExp('select acAddress from tHE_SetSubj where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Explicație
acConsignee este câmpul din setul de date qReportIzpis care este folosit pentru a genera un raport.
Funcția dlQuotedStr (înregistrată pentru raport de Datalab) convertește șirul în versiunea între ghilimele.
După înlocuirea dlQuotedStr(<qReportIzpis."acConsignee">), comanda SQL este:
'select acAddress from tHE_SetSubj where acSubject = '''Customer&Co.''' '
și astfel interogarea care este executată este:
select acAddress from tHE_SetSubj where acSubject = 'Customer&Co.''
 |
Pentru că numele seturilor de date și câmpurilor ar putea diferi în fiecare raport, trebuie să verifici numele setului de date și câmpurile pentru fiecare raport concret. |
Raportul locului clientului din comanda de vânzare
Clauza SQL este în acest caz un join între două tabele
[SQLExp('select P.acName from tHE_SetSubj S left join tHE_SetPostCode P on S.acPost = P.acPost where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Exemplu de Factură Colectivă
Hai să ne uităm la un exemplu în care factura colectivă (chitanță sau emitere) a fost creată din documente interne (chitanțe sau emiteri) în care ai primit sau emis bunuri urmărite prin numere de serie.
Raportul unei facturi colective sau o prezentare generală a numerelor de serie nu va produce informații despre numerele de serie primite sau emise ale articolelor din factura colectivă, deoarece aceste numere de serie au fost primite sau emise prin documente interne.
Dar poți raporta o listă de numere de serie primite sau emise! Pentru a face acest lucru, folosește funcția SQLExp. Numerele de serie vor fi raportate direct folosind tabela de legături, unde tipul de legătură între documentul intern și factura colectivă este 4.
Rapoartele de acest tip sunt folosite pentru a raporta numerele de serie într-o factură colectivă care a fost creată direct din documente interne.
Crează un nou clon al unui raport deja existent pentru o factură. Adaugă un nou obiect de text și scrie următoarea propoziție SQL:
[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')]
Exemplu de Document Colectiv Creat cu Documente Interne
Hai să ne uităm la un exemplu în care factura colectivă (chitanță sau emitere) a fost creată din documente interne de emitere în care ai emis bunuri de consignare urmărite prin numere de serie.
Raportul unei facturi colective sau o prezentare generală a numerelor de serie nu va produce informații despre numerele de serie emise ale articolelor din factura colectivă, deoarece aceste numere de serie au fost emise printr-un document de emitere pentru client.
Dar poți raporta o listă de numere de serie emise! Pentru a face acest lucru, folosește funcția SQLExp. Numerele de serie vor fi raportate direct folosind tabela de legături, unde legătura între documentul intern și factura colectivă este introdusă cu tip V.
1. Crează o nouă copie din raportul unui raport deja existent pentru o factură. Adaugă un nou obiect de text și scrie următoarea propoziție SQL:
[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')]
Diferența față de exemplul anterior este doar că tipul de legătură este în acest caz "V" în loc de 4.
Exemplu de Apelare a unei Proceduri Stocate
Parametrul funcției poate fi de asemenea procedura stocată. Următorul exemplu returnează locul companiei noastre apelând procedura stocată "fHE_GetOurCompanyCity"
[SQLExp('select dbo.fHE_GetOurCompanyCity()]