Limbajul de interogare din 1C 8 este un analog simplificat al binecunoscutului „limbaj de programare structurat” (cum este mai des numit, SQL). Dar în 1C este folosit doar pentru citirea datelor, un model de date obiect este folosit pentru a schimba datele.

O altă diferență interesantă este sintaxa rusă. Deși de fapt poți folosi construcții în limba engleză.

Exemplu de solicitare:

ALEGE
Banci.Nume,
Bănci.Cont Corespondent
DIN
Director.Bănci CUM Bănci

Această solicitare ne va permite să vedem informații despre numele și contul de corespondent al tuturor băncilor existente în baza de date.

Limbajul de interogare este cel mai simplu și mai eficient mod de a obține informații. După cum se poate vedea din exemplul de mai sus, în limbajul de interogare trebuie să utilizați nume de metadate (aceasta este o listă de obiecte de sistem care alcătuiesc configurația, adică directoare, documente, registre etc.).

Descrierea constructelor limbajului de interogare

Structura de interogare

Pentru a obține date, este suficient să folosiți construcțiile „SELECT” și „FROM”. Cea mai simplă cerere arată astfel:

SELECTAȚI * FROM Directoare.Nomenclatură

Unde „*” înseamnă selectarea tuturor câmpurilor din tabel, iar Directories.Nomenclature – numele tabelului din baza de date.

Să ne uităm la un exemplu mai complex și general:

ALEGE
<ИмяПоля1>CUM<ПредставлениеПоля1>,
Sumă(<ИмяПоля2>) CUM<ПредставлениеПоля2>
DIN
<ИмяТаблицы1>CUM<ПредставлениеТаблицы1>
<ТипСоединения>COMPUS<ИмяТаблицы2>CUM<ПредставлениеТаблицы2>
DE<УсловиеСоединениеТаблиц>

UNDE
<УсловиеОтбораДанных>

A SE GRUPA CU
<ИмяПоля1>

FILTREAZĂ DUPĂ
<ИмяПоля1>

REZULTATE
<ИмяПоля2>
DE
<ИмяПоля1>

În această interogare, selectăm datele câmpurilor „FieldName1” și „FieldName1” din tabelele „TableName1” și „TableName”, atribuim sinonime câmpurilor folosind operatorul „HOW” și le conectăm folosind o anumită condiție „TableConnectionCondition”. ”.

Din datele primite, selectăm numai datele care îndeplinesc condiția din „UNDE” „Condiție de selecție a datelor”, apoi grupăm cererea după câmpul „Nume câmp 1”, însumând „Nume câmp 2”. „Field Name1” și câmpul final „Field Name2”.

Ultimul pas este sortarea cererii folosind constructul ORDER BY.

Proiecte generale

Să ne uităm la construcțiile generale ale limbajului de interogare 1C 8.2.

PRIMULn

Folosind acest operator, puteți obține numărul n de primele înregistrări. Ordinea înregistrărilor este determinată de ordinea în interogare.

SELECTAȚI PRIMILE 100
Banci.Nume,
Băncile Cod AS BIC
DIN
Director.Bănci CUM Bănci
FILTREAZĂ DUPĂ
Bănci.Nume

Solicitarea va primi primele 100 de intrări din directorul „Bănci”, sortate alfabetic.

PERMIS

Acest design este relevant pentru lucrul cu mecanismul. Esența mecanismului este de a restricționa citirea (și alte acțiuni) la utilizatori pentru anumite înregistrări dintr-un tabel de bază de date, și nu tabelul în ansamblu.

Dacă un utilizator încearcă să folosească o interogare pentru a citi înregistrările care îi sunt inaccesibile, va primi un mesaj de eroare. Pentru a evita acest lucru, ar trebui să utilizați construcția „PERMIS”, adică cererea va citi numai înregistrările care îi sunt permise.

SELECTARE PERMIS
Depozitul de informații suplimentare
DIN
Director.Documentul de informații suplimentare

VARIAT

Utilizarea „DIFERENT” va împiedica introducerea liniilor duplicate în rezultatul interogării 1C. Dublarea înseamnă că toate câmpurile de solicitare se potrivesc.

SELECTAȚI PRIMILE 100
Banci.Nume,
Băncile Cod AS BIC
DIN
Director.Bănci CUM Bănci

EmptyTable

Această construcție este folosită foarte rar pentru a combina interogări. Când vă alăturați, poate fi necesar să specificați un tabel imbricat gol într-unul dintre tabele. Operatorul „EmptyTable” este potrivit pentru asta.

Exemplu din 1C 8 ajutor:

SELECT Link.Number, EMPTY TABLE.(Nr., Articol, Cantitate) AS Compoziție
DIN Document.Factură de cheltuieli
COMBINA TOTUL
SELECTează Link.Number, Conținut.(LineNumber, Product, Quantity)
FROM Document.Invoice Document.Invoice.Composition.*

ISNULL

O caracteristică foarte utilă care vă permite să evitați multe greșeli. YesNULL() vă permite să înlocuiți valoarea NULL cu cea dorită. Foarte des folosit pentru a verifica prezența unei valori în tabelele unite, de exemplu:

ALEGE
Nomenclatură Ref.
IsNULL(Articol rămas.Cantitate rămasă,0) AS Cantitate rămasă
DIN


Poate fi folosit în alte moduri. De exemplu, dacă pentru fiecare rând nu se știe în ce tabel există valoarea:

ISNULL(Data primirii facturii, Data emiterii facturii)

CUM este un operator care ne permite să atribuim un nume (sinonim) unui tabel sau câmp. Am văzut un exemplu de utilizare mai sus.

Aceste construcții sunt foarte asemănătoare - vă permit să obțineți o reprezentare în șir a valorii dorite. Singura diferență este că REPRESENTATION convertește orice valoare într-un tip șir, în timp ce REPRESENTATIONREF convertește doar valorile de referință. REPREZENTAREA REFERINȚEI este recomandată a fi utilizată în interogările sistemului de compoziție a datelor pentru optimizare, cu excepția cazului în care, desigur, câmpul de date de referință este planificat să fie utilizat în selecții.

ALEGE
Vizualizare(Link), //șir, de exemplu „Raportul anticipat nr. 123 din 10.10.2015
Vizualizare(DeletionMark) AS DeleteMarkText, //șir, „Da” sau „Nu”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True sau False
DIN
Document.Raport de avans

EXPRES

Express vă permite să convertiți valorile câmpurilor în tipul de date dorit. Puteți converti o valoare fie într-un tip primitiv, fie într-un tip de referință.

Express pentru un tip de referință este utilizat pentru a restricționa tipurile de date solicitate în câmpuri de tip complex, adesea folosite pentru a optimiza performanța sistemului. Exemplu:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Tip de activitatePentruTaxAccountingCosts

Pentru tipurile primitive, această funcție este adesea folosită pentru a limita numărul de caractere din câmpurile de lungime nelimitată (cu astfel de câmpuri nu pot fi comparate). Pentru a evita eroarea " Parametri nevalidi în operația de comparare. Nu se pot compara câmpurile
lungime nelimitată și câmpuri de tipuri incompatibile
", trebuie să exprimați astfel de câmpuri după cum urmează:

EXPRESS(Comentează AS Line(150))

DATA DIFERENTATA

Obțineți 267 de lecții video pe 1C gratuit:

Un exemplu de utilizare a IS NULL într-o solicitare 1C:

ALEGE DIN
Ref
CONEXIUNEA STÂNGA ÎnregistrareAcumulări.ProduseÎnDepozite.Rămas ca produs rămas
Software NomenclatureRef.Link = Sold GoodsCommitteesRemains.Nomenclature
UNDE NU Mărfuri rămase

Tipul de date dintr-o interogare poate fi determinat folosind funcțiile TYPE() și VALUETYPE() sau prin utilizarea operatorului logic REFERENCE. Cele două funcții sunt similare.

Valori predefinite

Pe lângă utilizarea parametrilor trecuți în interogări în limbajul de interogare 1C, puteți utiliza valori predefinite sau . De exemplu, transferuri, directoare predefinite, planuri de conturi și așa mai departe, se folosește constructul „Valoare()”.

Exemplu de utilizare:

WHERE Nomenclature.Type of Nomenclature = Value(Directory.Types of Nomenclature.Product)

WHERE Counterparties.Type of Contact Information = Value(Enumeration.Types of Contact Information.Phone)

WHERE Soldurile contului.Cont contabil = Valoare(Planul de conturi.Profit.ProfitsLoss)

Conexiuni

Există 4 tipuri de conexiuni: STÂNGA, DREAPTA, COMPLET, INTERN.

CONEXIUNEA STÂNGA și DREAPTA

Îmbinările sunt folosite pentru a lega două tabele pe baza unei anumite condiții. Caracteristică când LEFT JOIN este că luăm primul tabel specificat în întregime și legăm condiționat al doilea tabel. Câmpurile celui de-al doilea tabel care nu au putut fi legate de condiție sunt completate cu valoarea NUL.

De exemplu:

Va returna întregul tabel de Contrapartide și va completa câmpul „Bancă” numai în acele locuri în care va fi îndeplinită condiția „Contrapărți.Nume = Bănci.Nume”. Dacă condiția nu este îndeplinită, câmpul Bank va fi setat la NUL.

RIGHT JOIN în limba 1C absolut asemănătoare Conexiune STÂNGA, cu excepția unei diferențe - în DREPTUL DE CONECTARE Masa „principală” este a doua, nu prima.

CONEXIUNE COMPLETA

CONEXIUNE COMPLETA diferă de stânga și dreapta prin faptul că afișează toate înregistrările din două tabele și le conectează numai pe cele pe care le poate conecta în funcție de condiție.

De exemplu:

DIN

CONEXIUNE COMPLETA
Director.Bănci CUM Bănci

DE

Limbajul de interogare va returna ambele tabele complet numai dacă este îndeplinită condiția de a se alătura înregistrărilor. Spre deosebire de o îmbinare stânga/dreapta, este posibil ca NULL să apară în două câmpuri.

INNER JOIN

INNER JOIN diferă de full prin aceea că afișează numai acele înregistrări care ar putea fi conectate în funcție de o anumită condiție.

De exemplu:

DIN
Directorul contrapărților AS Clienți

INNER JOIN
Director.Bănci CUM Bănci

DE
Clients.Name = Banks.Name

Această interogare va returna numai rândurile în care banca și contrapartea au același nume.

Asociațiile

Construcțiile JOIN și JOIN ALL combină două rezultate într-unul singur. Acestea. rezultatul efectuării a două va fi „contopit” într-unul, comun.

Adică sistemul funcționează exact la fel ca și cele obișnuite, doar pentru un tabel temporar.

Cum se utilizează INDEX BY

Cu toate acestea, un punct trebuie luat în considerare. Construirea unui index pe un tabel temporar necesită, de asemenea, timp. Prin urmare, este recomandabil să utilizați construcția „ ” numai dacă se știe cu siguranță că vor exista mai mult de 1-2 înregistrări în tabelul temporar. În caz contrar, efectul poate fi invers - performanța câmpurilor indexate nu compensează timpul necesar pentru construirea indexului.

ALEGE
Currency Currency Ultima secțiune transversală Moneda AS Moneda.
Rate valutare Ultima secțiune transversală.
Ratele valutare PUT
DIN
Informații Registrul.Currency Rates.Last Slice(&Period,) AS Currency RatesLast Slice
INDEX PRIN
Valută
;
ALEGE
Nomenclatura prețurilor.Nomenclatura,
PreturiNomenclaturi.Pret,
PrețuriNomenclaturi.Moneda,
Rate valutare.Rate
DIN
Registrul de informații.Nomenclatura prețurilor.Ultima felie(&perioada,
Nomenclatură B (&Nomenclatură) AND PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Currency Rates AS Currency Rates
Software PricesNomenclatures.Currency = Currency Rates.Currency

Gruparea

Limbajul de interogare 1C vă permite să utilizați funcții de agregare speciale atunci când grupați rezultatele interogării. Gruparea poate fi folosită și fără funcții de agregare pentru a „elimina” duplicatele.

Există următoarele funcții:

Cantitate, Cantitate, Număr de diferite, Maxim, Minim, Medie.

Exemplul #1:

ALEGE
Nomenclatura vânzărilor de bunuri și servicii.
SUM(Vânzări de mărfuriServiciiBunuri.Cantitate) AS Cantitate,
SUM(Vânzări de mărfuriServiciiBunuri.Suma) AS Sumă
DIN

A SE GRUPA CU
Vânzări de Bunuri și Servicii Nomenclatură

Interogarea primește toate rândurile cu mărfuri și le rezumă după cantitate și sume pe articol.

Exemplul nr. 2

ALEGE
Codul băncilor,
CANTITATE(Bănci diferite.Link) CA Număr de duplicate
DIN
Director.Bănci CUM Bănci
A SE GRUPA CU
Bănci.Cod

Acest exemplu va afișa o listă de BIC-uri în directorul „Bănci” și va arăta câte duplicate există pentru fiecare dintre ele.

Rezultate

Rezultatele sunt o modalitate de a obține date dintr-un sistem cu o structură ierarhică. Funcțiile de agregare pot fi utilizate pentru câmpurile de rezumat, la fel ca și pentru grupări.

Una dintre cele mai populare moduri de a utiliza rezultatele în practică este anularea în loturi a mărfurilor.

ALEGE




DIN
Vânzări de bunuri și servicii
FILTREAZĂ DUPĂ

REZULTATE
SUM(Cantitate),
SUM(Suma)
DE
Nomenclatură

Rezultatul interogării va fi următorul ierarhic:

Rezultate generale

Dacă trebuie să obțineți totaluri pentru toate „totalurile”, utilizați operatorul „GENERAL”.

ALEGE
Vânzări de bunuri și servicii Nomenclatură AS.
Vânzări de Bunuri și Servicii Bunuri Link AS Document,
Vânzări de bunuri și servicii.
Vânzări de bunuri și servicii Bunuri
DIN
Vânzări de bunuri și servicii
FILTREAZĂ DUPĂ
Vânzări de Bunuri și Servicii Data
REZULTATE
SUM(Cantitate),
SUM(Suma)
DE
SUNT COMUNE,
Nomenclatură

Ca urmare a executării cererii, obținem următorul rezultat:

În care 1 nivel de grupare este agregarea tuturor câmpurilor necesare.

Aranjare

Operatorul ORDER BY este folosit pentru a sorta rezultatul unei interogări.

Sortarea pentru tipurile primitive (șir, număr, boolean) urmează regulile obișnuite. Pentru câmpurile de tip referință, sortarea are loc prin reprezentarea internă a legăturii (identificatorul unic), mai degrabă decât prin cod sau prin reprezentarea referințelor.

ALEGE

DIN
Director.Nomenclatura AS Nomenclatura
FILTREAZĂ DUPĂ
Nume

Solicitarea va afișa o listă de nume în directorul nomenclatorului, sortate alfabetic.

Comanda automată

Rezultatul unei interogări fără sortare este un set de rânduri prezentat haotic. Dezvoltatorii platformei 1C nu garantează că rândurile vor fi afișate în aceeași secvență atunci când execută aceleași interogări.

Dacă trebuie să afișați înregistrările tabelului într-o ordine constantă, trebuie să utilizați constructul Auto-Order.

ALEGE
Nomenclatură.Nume AS Nume
DIN
Director.Nomenclatura AS Nomenclatura
COMANDA AUTOMATA

Mesele virtuale

Tabelele virtuale din 1C sunt o caracteristică unică a limbajului de interogare 1C care nu se găsește în alte sintaxe similare. Un tabel virtual este o modalitate rapidă de a obține informații de profil din registre.

Fiecare tip de registru are propriul set de tabele virtuale, care pot diferi în funcție de setările registrului.

  • tăierea primului;
  • tăierea acestuia din urmă.
  • resturi;
  • revoluții;
  • solduri si cifra de afaceri.
  • mișcări din subconto;
  • revoluții;
  • viteza Dt Kt;
  • resturi;
  • solduri si cifra de afaceri
  • subconto.
  • baza;
  • date grafice;
  • perioada efectivă de valabilitate.

Pentru dezvoltatorul de soluții, datele sunt preluate dintr-un singur tabel (virtual), dar de fapt platforma 1C preia din mai multe tabele, transformându-le în forma necesară.

ALEGE
Produse în Depozite Resturi și Cifra de afaceri,
ProductsIn WarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsIn WarehousesRemainsAndTurnover.QuantityTurnover,
MărfuriÎnDepoziteRemainsAndTurnover.CantityIncoming,
MărfuriÎnDepoziteRămăși și Cifra de afaceri.CantitateConsum,
ProductsIn WarehousesRemainingsAndTurnover.CantityFinalRemaining
DIN
ÎnregistrareAcumulări.MărfuriÎnDepozite.Rămăși și Cifra de afaceri CA Mărfuri ÎnDepoziteRămăși și Cifra de afaceri

Această interogare vă permite să preluați rapid o cantitate mare de date.

Opțiuni de masă virtuală

Un aspect foarte important al lucrului cu tabele virtuale este utilizarea parametrilor. Parametrii tabelului virtual sunt parametri specializați pentru selecție și configurare.

Pentru astfel de tabele, se consideră incorectă utilizarea selecției în construcția „UNDE”. Pe lângă faptul că interogarea devine suboptimă, este posibil să primiți date incorecte.

Un exemplu de utilizare a acestor parametri:

Registrul de acumulări de mărfuri în depozite (& Începutul perioadei, & Sfârșitul perioadei, Mișcări și limite ale perioadei, Nomenclatură = & Nomenclatură obligatorie).

Algoritm pentru tabele virtuale

De exemplu, cel mai folosit tabel virtual de tip „Rămășițe” stochează date din două tabele fizice – solduri și mișcări.

Când se utilizează o masă virtuală, sistemul efectuează următoarele manipulări:

  1. Obținem cea mai apropiată valoare calculată în termeni de dată și măsurători în tabelul cu totaluri.
  2. „Adăugăm” suma din tabelul de mișcări la suma din tabelul cu totaluri.


Astfel de acțiuni simple pot îmbunătăți semnificativ performanța sistemului în ansamblu.

Folosind Generatorul de interogări

Generator de interogări– un instrument încorporat în sistemul 1C Enterprise care facilitează foarte mult dezvoltarea interogărilor bazei de date.

Generatorul de interogări are o interfață destul de simplă, intuitivă. Cu toate acestea, să ne uităm la utilizarea constructorului de interogări mai detaliat.

Constructorul de text de interogare este lansat din meniul contextual (butonul dreapta al mouse-ului) în locul dorit din codul programului.

Descrierea constructorului cererii 1C

Să ne uităm la fiecare filă a designerului mai detaliat. Excepție este fila Builder, care este un subiect pentru o altă discuție.

fila Tabele și câmpuri

Această filă specifică sursa de date și câmpurile care trebuie afișate în raport. În esență, aici sunt descrise construcțiile SELECT.. FROM.

Sursa poate fi un tabel fizic de bază de date, un tabel de registru virtual, tabele temporare, interogări imbricate etc.

În meniul contextual al tabelelor virtuale, puteți seta parametrii tabelului virtual:

fila Conexiuni

Fila este folosită pentru a descrie conexiunile mai multor tabele și creează construcții cu cuvântul CONEXIUNE.

Fila Grupare

În această filă, sistemul vă permite să grupați și să rezumați câmpurile obligatorii ale rezultatului tabelului. Descrie utilizarea construcțiilor GROUP BY, SUM, MINIM, MEDIE, MAXIMUM, CANTITATE, NUMĂR DE DIFERENȚI.

fila Condiții

Raspunde de tot ce intra in textul de solicitare dupa constructia WHERE, adica de toate conditiile impuse datelor primite.

Filă avansată

Tab În plus plin cu tot felul de parametri foarte importanți. Să ne uităm la fiecare dintre proprietăți.

Gruparea Selectarea înregistrărilor:

  • Primul N– un parametru care returnează doar N înregistrări la interogare (PRIMUL operator)
  • Fără duplicate– asigură unicitatea înregistrărilor primite (operator DIFERIT)
  • Permis– vă permite să selectați doar acele înregistrări pe care sistemul vă permite să le selectați ținând cont (construcție PERMISĂ)

Gruparea Tip de solicitare determină ce tip de cerere va fi: regăsirea datelor, crearea unui tabel temporar sau distrugerea unui tabel temporar.

Mai jos este un steag Blocați datele primite pentru modificare ulterioară. Vă permite să activați capacitatea de a seta blocarea datelor, ceea ce asigură siguranța datelor din momentul în care sunt citite și până când sunt schimbate (relevant doar pentru modul de blocare automată, design PENTRU SCHIMBARE).

Fila Joins/Aliases

În această filă a designerului de interogări, puteți seta capacitatea de a uni diferite tabele și alias-uri (constructia CUM). Tabelele sunt indicate în partea stângă. Dacă setați steagurile vizavi de masă, se va folosi construcția UNITE, în caz contrar - UNITE ALL (diferențe între cele două metode). În partea dreaptă este indicată corespondența câmpurilor din diferite tabele dacă nu este specificată corespondența, interogarea va returna NULL.

fila Comanda

Aceasta specifică ordinea în care sunt sortate valorile (ORDER BY) - descendent (DESC) sau crescător (ASC).

Există și un steag interesant - Comanda automată(in cerere - COMANDA AUTO). În mod implicit, sistemul 1C afișează datele într-o ordine „haotică”. Dacă setați acest indicator, sistemul va sorta datele după datele interne.

Fila Loturi de interogări

În fila Designer de interogări, puteți crea altele noi și, de asemenea, le puteți utiliza ca navigare. În textul cererii, pachetele sunt separate prin simbolul „;” (virgulă).

Butonul „Interogare” din designerul de interogări

În colțul din stânga jos al designerului de solicitări există un buton Solicitare, cu ajutorul căruia puteți vizualiza textul solicitării în orice moment:

În această fereastră, puteți face ajustări la cerere și o puteți executa.


Folosind consola de interogări

Query Console este o modalitate simplă și convenabilă de a depana interogări complexe și de a obține rapid informații. În acest articol, voi încerca să descriu cum să utilizați Query Console și să ofer un link pentru a descărca Query Console.

Să aruncăm o privire mai atentă la acest instrument.

Descărcați consola de interogări 1C

În primul rând, pentru a începe să lucrați cu consola de interogări, trebuie să o descărcați de undeva. Tratamentele sunt de obicei împărțite în două tipuri - forme controlate și cele convenționale (sau, uneori, sunt numite 8.1 și 8.2/8.3).

Am încercat să combin aceste două vederi într-o singură prelucrare - forma dorită se deschide în modul de operare dorit (în modul gestionat, consola funcționează doar în modul gros).

Descrierea consolei de interogări 1C

Să începem să ne uităm la consola de interogări cu o descriere a panoului principal de procesare:

În antetul consolei de interogări, puteți vedea timpul de execuție al ultimei interogări cu precizie în milisecunde, acest lucru vă permite să comparați diferite modele în ceea ce privește performanța.

Primul grup de butoane din bara de comandă este responsabil pentru salvarea interogărilor curente într-un fișier extern. Acest lucru este foarte convenabil, puteți reveni oricând la scrierea unei cereri complexe. Sau, de exemplu, stocați o listă de exemple tipice ale anumitor modele.

În stânga, în câmpul „Solicitare”, puteți crea cereri noi și le puteți salva într-o structură arborescentă. Al doilea grup de butoane este responsabil de gestionarea listei de solicitări. Folosind-o puteți crea, copia, șterge, muta o solicitare.

  • A executacerere– execuție simplă și rezultate
  • Executați pachetul– vă permite să vizualizați toate interogările intermediare într-un lot de interogări
  • Vizualizarea tabelelor temporare– vă permite să vedeți rezultatele pe care interogările temporare le returnează pe un tabel

Parametri de solicitare:

Vă permite să setați parametrii actuali pentru cerere.

În fereastra parametrilor de interogare, următoarele sunt interesante:

  • Buton Ia de la cerere găsește automat toți parametrii din cerere pentru confortul dezvoltatorului.
  • Steag Parametri comuni pentru toate cererile– la instalare, procesarea acestuia nu șterge parametrii la trecerea de la cerere la cerere în lista generală de solicitări.

Setați un parametru cu o listă de valori Este foarte simplu, doar când alegeți o valoare a parametrului, faceți clic pe butonul de ștergere a valorii (cruce), sistemul vă va solicita să selectați tipul de date, unde trebuie să selectați „Lista de valori”:

De asemenea, în panoul de sus există un buton pentru a apela setările consolei de interogare:

Aici puteți specifica parametrii pentru salvarea automată a interogărilor și parametrii de execuție a interogărilor.

Textul solicitării este introdus în câmpul de cerere de consolă. Acest lucru se poate face prin simpla tastare a unui test de interogare sau apelând un instrument special - designerul de interogări.

Designerul de interogări 1C 8 este apelat din meniul contextual (butonul dreapta al mouse-ului) când faceți clic pe câmpul de introducere:

De asemenea, în acest meniu există funcții utile precum ștergerea sau adăugarea de întreruperi de linie (“|”) la cerere sau primirea codului de solicitare în această formă convenabilă:

Solicitare = Solicitare nouă;
Solicitare.Text = ”
|SELECT
| Monede.Link
|DIN
| Director.Monede AS Monede”;
RequestResult = Request.Execute();

Câmpul inferior al consolei de interogări afișează câmpul rezultat al interogării, motiv pentru care a fost creată această procesare:



De asemenea, consola de interogări, pe lângă listă, poate afișa date sub formă de arbore - pentru interogările care conțin totaluri.

Optimizarea interogărilor

Unul dintre cele mai importante puncte în creșterea productivității întreprinderii 1C 8.3 este optimizarecereri. Acest punct este, de asemenea, foarte important când trecerea certificării. Mai jos vom vorbi despre motivele tipice pentru performanța interogării neoptimale și despre metodele de optimizare.

Selecții într-un tabel virtual folosind constructul WHERE

Este necesar să se aplice filtre la detaliile tabelului virtual numai prin parametrii VT. În niciun caz nu trebuie să utilizați constructul WHERE pentru selecție într-un tabel virtual, aceasta este o greșeală gravă din punct de vedere al optimizării. În cazul selecției folosind WHERE, de fapt, sistemul va primi TOATE înregistrările și abia apoi le va selecta pe cele necesare.

DREAPTA:

ALEGE

DIN
Registrul Acumulărilor Decontări reciproce cu Participanții Organizațiilor (.
,
Organization = &Organizare
AND Individ = &Individ) CUM Decontări reciproce cu participanții organizațiilor Solduri

GRESIT:

ALEGE
Decontări reciproce cu Participanții Organizațiilor Solduri
DIN
Registrul Acumulărilor. Decontări reciproce cu Participanții Organizațiilor Solduri
UNDE
Decontari reciproce cu Participantii Organizatiilor Solduri Organizatie = & Organizatie
ȘI Decontări reciproce cu Participanții Organizațiilor Solduri Persoană fizică

Obținerea valorii unui câmp de tip complex folosind un punct

La primirea datelor de tip complex într-o interogare printr-un punct, sistemul se conectează cu o îmbinare stângă exact atâtea tabele câte tipuri sunt posibile în domeniul tipului complex.

De exemplu, este extrem de nedorit ca optimizarea să acceseze câmpul de înregistrare a registrului – registrator. Registratorul are un tip de date compus, printre care se numără toate tipurile de documente posibile care pot scrie date în registru.

GRESIT:

ALEGE
Record Set.Recorder.Date,
RecordSet.Quantity
DIN
ÎnregistrareAcumulări.ProduseOrganizații AS SetRecords

Adică, de fapt, o astfel de interogare va accesa nu un tabel, ci 22 de tabele de baze de date (acest registru are 21 de tipuri de registrator).

DREAPTA:

ALEGE
ALEGERE
WHEN ProductsOrg.Registrar LINK Document.Vânzări de produse și servicii
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Vânzări de bunuriServicii).Data
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Reception of GoodsServices).Data
SFÂRȘIT CA DATA,
ProduseOrg.Cantitate
DIN
ÎnregistrareAcumulări.ProduseOrganizații AS ProductsOrganization

Sau a doua opțiune este să adăugați astfel de informații la detalii, de exemplu, în cazul nostru, adăugarea unei date.

DREAPTA:

ALEGE
ProductsOrganizations.Date,
ProduseOrganizaţii.Cantitate
DIN
Registrul Acumulărilor Bunuri ale Organizațiilor AS Bunuri ale Organizațiilor

Subinterogări într-o condiție de alăturare

Pentru optimizare, este inacceptabil să folosiți subinterogări în condiții de îmbinare, acest lucru încetinește semnificativ interogarea. Este recomandabil să folosiți VT în astfel de cazuri. Pentru a vă conecta, trebuie să utilizați numai metadate și obiecte VT, indexându-le în prealabil după câmpurile de conexiune.

GRESIT:

ALEGE…

LEFT JOIN (
SELECTAȚI FROM RegisterInformation.Limits
UNDE …
A SE GRUPA CU...
) DE …

DREAPTA:

ALEGE…
PUT Limite
DIN Registrul de informații.Limite
UNDE …
A SE GRUPA CU...
INDEX PRIN...;

ALEGE…
DIN Vânzări de bunuri și servicii
Limite LEFT JOIN
DE …;

Unirea înregistrărilor cu mese virtuale

Există situații când, la conectarea unei mese virtuale la altele, sistemul nu funcționează optim. În acest caz, pentru a optimiza performanța interogării, puteți încerca să plasați tabelul virtual într-unul temporar, fără a uita să indexați câmpurile unite în interogarea tabelului temporar. Acest lucru se datorează faptului că VT-urile sunt adesea conținute în mai multe tabele DBMS fizice, ca urmare, este compilată o subinterogare pentru a le selecta, iar problema se dovedește a fi similară cu punctul anterior;

Utilizarea selecțiilor bazate pe câmpuri neindexate

Una dintre cele mai frecvente greșeli atunci când scrieți interogări este utilizarea condițiilor pe câmpuri neindexate, acest lucru contrazice regulile de optimizare a interogărilor. SGBD nu poate executa o interogare optim dacă interogarea include selecția pe câmpuri neindexabile. Dacă luați un tabel temporar, trebuie să indexați și câmpurile de conexiune.

Trebuie să existe un index adecvat pentru fiecare condiție. Un indice adecvat este unul care îndeplinește următoarele cerințe:

  1. Indexul conține toate câmpurile enumerate în condiție.
  2. Aceste câmpuri se află chiar la începutul indexului.
  3. Aceste selecții sunt consecutive, adică valorile care nu sunt implicate în condiția de interogare nu sunt „pănate” între ele.

Dacă DBMS nu selectează indecșii corecti, întregul tabel va fi scanat - acest lucru va avea un impact foarte negativ asupra performanței și poate duce la blocarea prelungită a întregului set de înregistrări.

Utilizarea SAU logic în condiții

Asta e tot, acest articol a acoperit aspectele de bază ale optimizării interogărilor pe care fiecare expert 1C ar trebui să le cunoască.

Un curs video gratuit foarte util despre dezvoltarea și optimizarea interogărilor, Vă recomandăm cu tărie pentru incepatori si nu numai!

Cereri sunt concepute pentru a extrage și procesa informații din baza de date pentru a le furniza utilizatorului în forma necesară. Procesarea aici înseamnă gruparea câmpurilor, sortarea rândurilor, calcularea totalurilor etc. Nu puteți modifica datele utilizând interogări în 1C!

Solicitarea este executată conform instrucțiunilor date − solicită text. Textul cererii este compilat în conformitate cu sintaxa și regulile limbajul de interogare. Limbajul de interogare 1C:Enterprise 8 se bazează pe standard SQL, dar are unele diferențe și extensii.

Schema de lucru cu o cerere

Schema generală de lucru cu o solicitare constă din mai multe etape succesive:

  1. Crearea unui obiect Solicitare și setarea textului solicitării;
  2. Setarea parametrilor de solicitare;
  3. Executarea unei cereri și obținerea rezultatului;
  4. Ocolirea rezultatului cererii și procesarea datelor primite.

1. Obiect Cerere are proprietatea Text, căruia trebuie să îi atribuiți textul solicitării.

// Opțiunea 1
Solicitare = Solicitare nouă;
Cerere . Text =
"ALEGE
| Rate valutare.Perioada,
| Ratele valutare.Moneda,
| Rate valutare.Rate
|DIN

|UNDE
;

// Opțiunea 2
Solicitare = Solicitare nouă("ALEGE
| Rate valutare.Perioada,
| Ratele valutare.Moneda,
| Rate valutare.Rate
|DIN
| Registrul de informații.Currency Rates AS Currency Rates
|UNDE
| Currency rates.Currency = &Currency");

2. Setarea valorilor parametrilor se realizează folosind metoda SetParameter(< Имя>, < Значение>) . Parametrii din textul cererii sunt indicați prin simbolul „ & " și sunt de obicei folosite în condiții de selecție (secțiunea WHERE) și în parametrii tabelului virtual.

Cerere);

3. După atribuirea textului și setarea parametrilor, solicitarea trebuie executată și rezultatul execuției obținut. Execuția se realizează prin metoda Execute(), care returnează un obiect Rezultatul interogării. Din rezultatul interogării puteți:

  • obțineți o selecție folosind metoda Select (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • încărcați valori într-un tabel de valori sau într-un arbore de valori folosind metoda Încărcare (< ТипОбхода>) .

// Primește o mostră

Probă = Rezultatul interogării. Alege();

// Obținerea unui tabel de valori
RequestResult = Solicitare. Alerga();
Masa = Rezultatul interogării. Descărca();

4. Puteți ocoli selecția rezultatului interogării folosind o buclă:

Pa Sample.Next() Buclă
Raport (Selectie.Curs);
EndCycle;

Un exemplu complet de lucru cu o solicitare ar putea arăta astfel:

// Etapa 1. Crearea unei cereri și setarea textului solicitării
Solicitare = Solicitare nouă;
Cerere . Text =
"ALEGE
| Rate valutare.Perioada,
| Ratele valutare.Moneda,
| Rate valutare.Rate
|DIN
| Registrul de informații.Currency Rates AS Currency Rates
|UNDE
| Currency rates.Currency = &Currency";

// Etapa 2. Setarea parametrilor
Cerere . SetParameter(„Moneda”, SelectedCurrency);

// Etapa 3. Executarea interogării și obținerea eșantionului
RequestResult = Solicitare. Alerga();
Probă = Rezultatul interogării. Alege();

// Parcurgerea selecției
Pa Sample.Next() Buclă
Raport (Selectie.Curs);
EndCycle;

Componența textului cererii

Textul cererii constă din mai multe secțiuni:

  1. Descrierea cererii— lista de câmpuri selectabile și surse de date;
  2. Îmbinarea interogărilor— expresiile „UNITE” și „UNITE ALL”;
  3. Organizarea rezultatelor— expresia „COMANDA DE...”;
  4. Comanda automată— expresia „COMANDĂ AUTOMATĂ”;
  5. Descrierea rezultatelor- expresia „REZULTATE... PRIN …”.

Doar prima secțiune este obligatorie.

Tabele temporare și interogări pe lot

Limbajul de interogare 1C acceptă utilizarea mese temporare— tabele obținute ca urmare a unei interogări și stocate temporar.

Puteți întâlni adesea o situație în care trebuie să utilizați nu tabelele bazei de date ca sursă a unei interogări, ci rezultatul executării unei alte interogări. Această problemă poate fi rezolvată folosind interogări imbricate sau mese temporare. Utilizarea tabelelor temporare vă permite să simplificați textul unei interogări complexe prin împărțirea acestuia în părțile sale componente și, de asemenea, în unele cazuri, să accelerați execuția interogării și să reduceți numărul de blocări. Pentru a lucra cu tabele temporare, utilizați obiectul Manager orar. Un tabel temporar este creat folosind cuvântul cheie PLACE urmat de numele tabelului temporar.

ManagerVT = New TemporaryTablesManager;
Solicitare = Solicitare nouă;
Cerere . ManagerTemporaryTables = ManagerVT;

Cerere . Text =
"ALEGE
| Monede.Cod,
| Monede.Nume
|Loc în valută
|DIN
| Directory.Currencies AS Monede";

RequestResult = Solicitare. A executa();

Pentru a utiliza tabelul temporar VTVcurrency în alte interogări, trebuie să atribuiți un manager temporar de tabel comun acestor interogări—VT Manager.

Solicitare lot este o cerere care conține mai multe solicitări separate prin caracterul „;”. Când se execută o interogare în lot, toate interogările incluse în aceasta sunt executate secvenţial, iar rezultatele tuturor tabelelor temporare sunt disponibile pentru toate interogările ulterioare. Nu este necesară atribuirea explicită a unui manager temporar de tabel la interogările lot. Dacă nu este atribuit un manager de tabel temporar, atunci toate tabelele temporare vor fi șterse imediat după executarea interogării.

Pentru interogările batch, este disponibilă metoda ExecuteBatch(), care execută toate interogările și returnează o serie de rezultate. Tabelele temporare dintr-o interogare de lot vor fi reprezentate de un tabel cu un rând și o coloană „Număr”, care stochează numărul de înregistrări. Pentru a depana solicitările lot, puteți utiliza metoda Executați lotul CU DATE INTERMEDIARE() : returnează conținutul real al tabelelor temporare, nu numărul de înregistrări.

// Exemplu de lucru cu o cerere de lot
Solicitare = Solicitare nouă;
Cerere . Text =
"ALEGE
| Monede.Nume
|DIN
| Director.Monede AS Monede
|;
|SELECT
| Nomenclatură.Nume
|DIN
| Director. Nomenclatură AS Nomenclatură.;

BatchResult = Solicitare. ExecuteBatch();

TZMonede =PacketResult[ 0 ]. Descărca();
TZNomenclature = Rezultat pachet[ 1 ]. Descărca();

// Un exemplu de utilizare a tabelelor temporare într-o cerere de lot
Solicitare = Solicitare nouă;
Cerere . Text =
"ALEGE
| Produse. Link CUM SE Produs
| PLACE Produse WTT
|DIN
| Director.Nomenclator CUM Produse
|UNDE
| Products.Manufacturer = &Producator
|;
|SELECT
| VTTProducts.Product,
| Școală profesională Cantitate.
| Scoala profesionala.Pret,
| Școală profesională.Link AS DocumentReceipts
|DIN
| VT Products AS VT Products
| CONEXIUNEA STÂNGA Documentul de Recepție a Bunurilor și Serviciilor
| Software VTProducts.Product = PTU.Nomenclature"
;

Cerere . SetParameter( "Producător", Producător);

RequestResult = Solicitare. Alerga();
Probă = Rezultatul interogării. Alege();

Pa Sample.Next() Buclă

EndCycle;

Mesele virtuale

Mesele virtuale- acestea sunt tabele care nu sunt stocate în baza de date, dar sunt generate de platformă. În esență, acestea sunt interogări imbricate pe unul sau mai multe tabele fizice executate de platformă. Tabelele virtuale primesc informații numai din registre și sunt destinate în principal rezolvării unor probleme de înaltă specializare.

Există următoarele tabele virtuale (parametrii posibili sunt indicați în paranteze):

  • Pentru registre de informații:
    • SliceFirst(<Период>, <Условие>) — cele mai vechi înregistrări pentru data specificată;
    • SliceLast(<Период>, <Условие>) — cele mai recente înregistrări pentru data specificată;
  • Pentru registrele de acumulare:
    • Resturi(<Период>, <Условие>) — solduri la data specificată;
    • Revoluții (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Tranzacții de perioadă;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — soldurile și cifra de afaceri aferentă perioadei;
  • Pentru registrele contabile:
    • Resturi(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — solduri la data specificată pe cont, dimensiuni și subconturi;
    • Revoluții (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — cifra de afaceri aferentă perioadei în contextul conturilor, măsurătorilor, corr. conturi, subconto, cor. subconto;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — soldurile și cifra de afaceri în contextul conturilor, măsurătorilor și subconturilor;
    • Cifra de afaceriDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — cifra de afaceri aferentă perioadei pe contul Dt, contul Kt, Subconto Dt, Subconto Kt;
    • MișcăriSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — mișcări împreună cu valori subconto;
  • Pentru registrele de calcul:
    • Baza(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — datele de bază ale registrului de calcul;
    • DataGraphics(<Условие>)—date grafic;
    • ActualActionPeriod(<Условие>) este perioada efectivă de valabilitate.

Când lucrați cu tabele virtuale, ar trebui să aplicați selecții în parametrii tabelelor virtuale și nu în condiția WHERE. Timpul de execuție a interogării depinde foarte mult de acest lucru.

Constructor de interogări

Pentru a accelera introducerea textelor de interogare, platforma are instrumente speciale: Constructor de interogăriȘi Constructor de interogări cu procesare a rezultatelor. Pentru a apela constructori, trebuie să faceți clic dreapta și să selectați elementul necesar:

Constructorii pot fi apelați și din meniul principal Text.

Folosind generatorul de interogări, programatorul poate construi interactiv textul de interogare. Pentru a face acest lucru, selectați cu mouse-ul tabelele și câmpurile necesare, stabiliți relații, grupări, totaluri etc. Această abordare economisește timp și elimină posibilele erori. Ca rezultat al muncii sale, constructorul de interogare generează textul interogării.

Constructorul de interogare cu procesarea rezultatelor, pe lângă generarea textului de interogare, creează un fragment de cod gata făcut pentru primirea și procesarea datelor.

obiect RequestSchema

Platforma vă permite să creați și să editați în mod programatic textul solicitării folosind obiectul Solicitare Schema. Un obiect are o singură proprietate Lot de cereri, în care obiectul stochează proprietățile tuturor interogărilor în curs de editare. Obiectul RequestSchema acceptă următoarele metode:

  • SetQueryText(< Текст>) — completează proprietatea Pachet de solicitare pe baza textului de solicitare transmis;
  • GetQueryText() - returnează textul de solicitare generat pe baza proprietății Request Packet;
  • FindParameters() - returnează parametrii cererii.

Să ne uităm la un exemplu de lucru cu obiectul RequestSchema. Pentru a genera în mod programatic textul solicitării

FILTREAZĂ DUPĂ
Monede.Cod

Codul de limbă încorporat ar putea arăta astfel:

RequestScheme = New RequestScheme;
Pachetul 1 = RequestScheme. RequestBatch[ 0 ];
Operatorul 1 = Pachetul 1. Operatori[ 0 ];
// adăugarea sursei
RegisterTable = Operator1. Surse. Adăuga( „Director.Monede”, „Monede” );
// adăugarea câmpurilor
FieldLink = Operator1. SelectableFields. Adaugă(„Monede.Link” , 0 );
FieldCode = Operator1. SelectableFields. Adaugă(„Monede.Cod”, 1);
// specificând aliasuri de câmp
Pachetul 1 . Coloane[ 0 ]. Alias ​​= „Moneda”;
Pachetul 1 . Coloane[ 1 ]. Alias ​​= „Cod”;
// adăugarea unei condiții
Operatorul 1 . Selecţie. Adăuga( „NU FlagDeletion”);
// adaugă comanda
Pachetul 1 . Ordin. Adăugați(FieldCode);
RequestText = RequestScheme. GetQueryText();

; Interogări imbricate (în dezvoltare).

Recepția de bunuri și serviciiȘi Returnarea mărfurilor către furnizor pentru perioada specificată.

File noi: Sindicate/Alias-uri.

Partea teoretică a lecției nr. 4

1C Query Builder vă permite să creați combinații de interogări. Cu ajutorul lor, puteți scoate secvențial date obținute din mai multe interogări fără a utiliza conexiuni. Singura condiție pentru îmbinare este același set de câmpuri în fiecare cerere individuală.

În designer, accesați fila Sindicate/Alias-uri. Este conceput pentru a crea uniuni de interogare și pentru a seta aliasuri pentru câmpurile de interogare. Aliasurile de câmp sunt necesare dacă nu sunteți mulțumit de numele câmpurilor standard ale bazei de date. Dacă un câmp de interogare constă numai dintr-un câmp de tabelă de bază de date, atunci nu este necesar un alias pentru el. Dacă ați folosit funcții de limbaj de interogare la crearea unui câmp, atunci este necesar un alias pentru un astfel de câmp. Designerul de interogări creează aliasuri standard pentru astfel de câmpuri Câmp1... Câmp N, aceste pseudonime pot fi înlocuite cu cele care vă sunt convenabile.

Să ne uităm la secțiunile filei Sindicate/Alias-uri:

  • Cereri(cadru roșu). Această secțiune conține un tabel care arată toate interogările combinate. Folosind meniul situat deasupra acestei secțiuni, le puteți adăuga altele noi, le puteți copia pe cele existente, le puteți șterge pe cele selectate și, de asemenea, le puteți modifica. Când adăugați sau copiați o solicitare, designerul merge la fila Tabele și câmpuri, unde puteți specifica tabelele bazei de date și câmpurile necesare pentru o nouă interogare. Puteți comuta între interogări folosind filele care vor apărea în partea dreaptă a designerului pe măsură ce sunt adăugate noi interogări 1c;

  • In masa Cereri doua coloane:
    • Nume. Setați automat în format Solicitare 1... Cerere N;
    • Fără duplicate. Setați dacă este necesar să excludeți rândurile duplicate la îmbinarea cu o interogare anterioară. Este de remarcat faptul că acest flag va acționa numai la fuzionarea cererii în care este setat cu cererea anterioară.

  • Porecle(cadru albastru). În această secțiune, puteți seta aliasuri pentru câmpurile de interogare, precum și corespondența câmpurilor pentru interogări combinate, astfel încât, ca urmare a interogării, acestea să fie în aceeași coloană și afișate sub un singur alias. Dacă câmpurile din interogările îmbinate sunt denumite la fel, atunci corespondența dintre ele este ajustată automat. Pentru a configura potrivirea câmpurilor, trebuie să găsiți rândul cu aliasul dorit în tabel, să găsiți interogarea necesară în coloane și să selectați câmpul din lista derulantă.

Partea practică a lecției nr. 4

Să ne uităm la soluția la problema dată la începutul lecției. Permiteți-mi să vă reamintesc condițiile:

Sarcină: utilizați o interogare pentru a selecta toate documentele postate Recepția de bunuri și serviciiȘi Returnarea mărfurilor către furnizor pentru perioada specificată.

  1. Să creăm o nouă cerere;
  2. Să lansăm generatorul de interogări;
  3. Să alegem un tabel Primirea Bunurilor și Serviciilor din fir Documentație;
  4. De la masă Primirea Bunurilor și Serviciilor selectați un câmp Legătură;
  5. Să mergem la filă Condiții;
  6. În capitolul Câmpuri, hai să deschidem firul Primirea Bunurilor și Serviciilor folosind butonul „+”;
  7. Să găsim recuzita Datași trageți-l în secțiunea de condiții, selectați operatorul de comparare Întreși indicați parametrii pentru începutul și sfârșitul perioadei, de exemplu Începutul perioadeiȘi Sfârșitul Perioadei;
  8. Să mergem la filă Sindicate/Alias-uri.
  9. Adăugați o nouă solicitare, semnalați Fără duplicate nu este nevoie să-l ridicăm, deoarece folosim diferite tipuri de documente;

  10. 1C Query Builder va merge automat la fila Tabele și câmpuri. În partea dreaptă a ferestrei, veți vedea că a doua solicitare de alăturare este activă;


  11. Să repetăm ​​punctele 1 - 7 pentru tabel Returnarea bunurilor către furnizor;
  12. Să mergem din nou la filă Sindicate/Alias-uri. În tabelul cu alias puteți vedea că câmpurile Legătură ambele tabele sunt pe același rând, ceea ce înseamnă că linkurile către ambele documente vor fi găsite în aceeași coloană ca urmare a interogării;
  13. Să schimbăm numele coloanei din Legătură pe Document(setează aliasul câmpului). Pentru a face acest lucru, faceți dublu clic pe butonul stâng al mouse-ului pe numele câmpului. După care îți poți seta numele, scrie-l acolo Document;

  14. Solicitarea este gata, faceți clic pe butonul „OK” din partea de jos a ferestrei de proiectare.

Ca urmare, vom primi o solicitare cu următorul text.

Să presupunem că avem un director Nomenclatură cu detalii: „Cod”, „Nume”, „Articol”. Acest director poate fi prezentat sub forma unui tabel, cu câmpuri cu același nume:

Nomenclatură

Scopul interogării este de a spune bazei de date ce vrem să selectăm și de unde. În această etapă, vom presupune că rezultatul interogării este un anumit tabel. Să presupunem că scopul nostru este să obținem toate detaliile din directorul „Nomenclatură”, atunci textul solicitării va lua următoarea formă:

Request.Text = "
|SELECT
| Nomenclatură.Cod,
| Nomenclatură.Nume,
| Nomenclatură.Articol
|DIN

Rezultatul interogării

Câteva precizări. In sectiune ALEGE(SELECT) listăm câmpurile din anumite tabele pe care vrem să le vedem în rezultat. În capitolul DIN(DIN) spunem de la ce mese să le luăm. Vă rugăm să rețineți că cuvântul cheie CUM(AS) declarăm un alias pentru tabel Director.Nomenclatură, Puteți utiliza aproape orice nume, cu excepția cuvintelor cheie și numerelor din limbajul de interogare 1C 8. Un alias poate fi declarat și pentru câmpurile:

Request.Text = "
|SELECT
| Bunuri.Cod AS Cod,
| Bunuri.Nume AS Descriere,
| Bunuri.Articol CUM Articolul
|DIN
| Nomenclator AS Bunuri"

Rezultatul va fi un tabel de forma:

De asemenea, puteți selecta toate câmpurile din tabel folosind „ * „. Este de remarcat faptul că, în acest caz, o serie de detalii standard definite pentru un obiect director vor fi adăugate la câmpurile „Cod”, „Nume”, „Articol”, cum ar fi: „Marcă de ștergere”, „Predefinit” , etc. Vizualizați toate Puteți lista detalii standard făcând clic pe butonul cu același nume din filă
Date orice carte de referință. Exemplu:

Request.Text = "
|SELECTARE *
|DIN
| Director. Nomenclatură AS Nomenclatură”;

Dacă câmpurile sunt selectate dintr-un tabel, atunci le puteți accesa fără un punct, dar nimeni nu scrie așa - nu este lizibil și, de regulă, în interogare apar mai mult de un tabel. Următorul text de solicitare va fi executat cu succes:

Request.Text = "
|SELECT
| Cod,
| Nume,
| Cod furnizor
|DIN
| Director.Nomenclatură";

În principiu, cererea poate să nu aibă o secțiune DIN, dar, de regulă, nimeni nu scrie așa:

Request.Text = "
|SELECT
| Director.Nomenclatură.Cod,
| Directory.Nomenclature.Name,
| Director.Nomenclator.Articol";

Solicitarea poate include nu numai câmpuri de bază de informații, ci și câmpuri de tipuri primitive, de exemplu:

Request.Text = "
|SELECT
| Nomenclatură.Cod,
| Nomenclatură.Nume,
| Nomenclatură numărul articolului,
//număr
| 3000 AS Costul maxim,
//Data
| DATETIME(2013, 1, 1) AS Data livrării,
//boolean
| Adevărul ca plătit,
//linia
| „MebelStroy” CA PRODUCĂTOR
|DIN
| Director. Nomenclatură AS Nomenclatură”;

Directivele secțiunii SELECT

VARIAT- indică faptul că, ca urmare a interogării, dorim să vedem doar înregistrările cu câmpuri diferite vor fi eliminate;

Request.Text = "
|SELECTARE DIVERSE
| Nomenclatură.Nume
|DIN
| Director. Nomenclatură AS Nomenclatură”;

Ca urmare a executării acestei interogări, nu vom vedea un singur nume duplicat.

PRIMUL - indică faptul că vrem să vedem doar primele n înregistrări în rezultatul interogării:

Request.Text = "
|SELECTARE PRIMELE 100
| Nomenclatură.Nume
|DIN
| Director. Nomenclatură AS Nomenclatură”;

PERMIS- limitează selecția în conformitate cu drepturile utilizatorului. Vă recomand să utilizați întotdeauna acest cuvânt cheie, nu știți niciodată când doriți să atribuiți drepturi utilizatorilor.


Închide