Funcții
Exemplu cu Distracțiection dlStringReplace
Pe raportul '10A - Raport de Mișcări de Material - Detaliat' care se află în meniul programului 'Bunuri | Mișcare de Material' adăugați un obiect "Text" pe banda numită 'Detaliu' și scrieți o expresie care returnează afișarea numerelor de serie care aparțin poziției selectate și facturii selectate. Funcția SQLExp returnează toate înregistrările, fiecare pe propria linie, dar dorim să afișăm numerele de serie într-o singură linie, separate prin virgule.
[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', '')]
Exemplu cu Câmpuri de Dată
Pe clonarea raportului '241 - Factură' care se află în meniul programului 'Bunuri | Emisie | Document (de exemplu 3000 - Vânzare)' adăugați soldul facturii emise pentru destinatarul facturii la contul 2200 în ziua facturii. Este important ca data să fie formatată în forma yyyymmdd.
[SQLExp('SELECT SUM(anValDebit-anValCredit) from tHE_AcctTransItem where acAcct = 2200 and acSubject=''' + <qReportIzpisD."acReceiver"> + ''' and adDateDoc <= ''' + FormatDateTime('yyyymmdd',<qReportIzpisD."adDateInv">) + '''')]
Exemplu cu Număr
În acest caz folosim raportul '156 - Raport de Mișcări de Material - Rezumat pe Articole' care se află în meniul programului 'Bunuri | Mișcări de Material' care arată cantitatea în unitatea de măsură alternativă.
Deoarece nu avem factor pentru conversia cantității în unitatea de măsură primară (U/M) în U/M 2, trebuie să le obținem din registrul Unităților de Măsură folosind funcția SQLExp.
Facem acest lucru cu următoarea expresie:
[SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">) + '')]
Expresia de mai sus returnează numărul ca text. Acum dorim să imprimăm cantitatea imprimată în U/M2, așa că trebuie să convertim valoarea obținută cu dlStrToFloatDef funcția într-un număr. Apoi împărțim suma în EM cu factorul obținut, și folosind dlDiv funcția în loc să o împărțim de la zero, mai degrabă decât împărțirea obișnuită. În cele din urmă, obținem:
[dlDiv(<qReportIzpis."anBegState">, dlStrToFloatDef(SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">) + ''), 1))]
Exemplu cu Citirea Datelor din Fereastra PANTHEON
Vom face următorul exemplu care poate fi realizat pe o clonă a raportului '16B - Raport de Facturi Emise - pe Furnizori și Articole', care se află în meniul programului 'Bunuri | Raport de Facturi Emise | Raport de Facturi Emise/Marginea de Profit'. Dacă depozitul este selectat în fereastră, expresia afișează întregul stoc al articolului, altfel imprimă doar stocul din depozitul selectat.
Fereastra din program din care începe raportul se numește 'PrometObracunIzdRac', câmpul de intrare în care selectăm depozitul și are numele 'fWarehouse'. Termenul care returnează textul în acest obiect este deja cunoscut:
[GetFormValue('PrometObracunIzdRac.fWarehouse')]
Mai întâi verificăm dacă depozitul este selectat. Dacă nu, prima expresie SQLExp care returnează întregul stoc al articolului selectat în toate depozitele, altfel a doua returnează stocul articolului doar în depozitul selectat.
[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') + ''''))]
Exemplu cu Declarație de Selecție Complexă
O tratament special merită expresia de pe raportul '3AR - Fișa Angajatului' care afișează dacă lucrătorul este invalid sau nu. Se află în meniul programului 'Personal | Fișe de Angajați'. Apoi faceți clic pe pictograma 'Imprimare'.
Această informație nu este scrisă direct în setul de date, dar conține categoria de invaliditate în câmpul "acDisabilityCode" din tabelul "tHR_PrsnHealth". Deoarece categoria de invaliditate a unui lucrător individual poate varia, trebuie să obținem cea care a fost introdusă ultima dată. Data schimbării invalidității este stocată în câmpul "adCreationDate" din același tabel. Termenul următor vă oferă ultima dată când categoria de invaliditate pentru lucrătorul selectat s-a schimbat.
[SQLExp('select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + '''')]
Apoi, cu termenul de mai jos, obținem categoria de invaliditate a lucrătorului
[SQLExp('select acDisabilityCode from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''')')]
Dacă în termenul de mai sus înlocuim câmpul "acDisabilityCode" cu 'DA', expresia returnează 'DA' dacă lucrătorul este invalid, altfel returnează un șir gol. Deoarece, în cazul în care un lucrător nu este invalid, expresia returnează 'NU', dăm termenul la propoziția condițională IIF și obținem în cele din urmă
[IIF(SQLExp('select ''DA'' from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and acDisabilityCode > ''0'')') = 'DA','DA','NU')]
Sortarea și Gruparea după Câmpul care nu este în Setul de Date
Utilizarea foarte neobișnuită și utilă a funcției SQLExp este pentru sortarea și gruparea după câmp care nu este în setul de date.
Ca bază, vom lua un raport '164 - Raport de Facturi Emise - Detaliat' care se află în meniul programului 'Bunuri | Raport de Facturi Emise | Raport de Facturi Emise/Marginea de Profit'. Mai întâi creăm o clonă pe care vom opera. Datele vor fi grupate după emitentul facturii și sortate după emitent și numărul documentului.
Setăm proprietatea "Condiție" a "bandei de antet de grup" la;
SQLExp('select G.acIssuer from tHE_Move G where G.acKey = ''' + <qReportIzpis."acKey"> + '''')
Apoi înlocuim descrierea care descrie informația pe care o grupăm, și pentru datele în sine. Introducem același lucru ca mai sus, dar să-l punem în paranteze pătrate (așa cum este arătat în imagine). Pentru a schimba sortarea, schimbați câmpul 'Sortare După' în registrul rapoartelor:
(select G.acIssuer from tHE_Move G where G.acKey = P.acKey), G.acKey

