Cum se configurează smartphone-uri și PC-uri. Portal de informare
  • Acasă
  • Fier
  • Cum să combinați 2 directoare 1C solicitări. Îmbinați rezultatele interogării

Cum să combinați 2 directoare 1C solicitări. Îmbinați rezultatele interogării

; 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 datele 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;

  • În tabel 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 designerul de interogări;
  3. Să alegem un tabel Primirea Bunurilor și Serviciilor din fir Documente;
  4. De la masă Primirea Bunurilor și Serviciilor selectați un câmp Legătură;
  5. Să mergem la filă Termeni;
  6. In sectiunea 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 comparație Î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 de aliasuri 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.

O zi bună, dragi cititori ai site-ului blogului. Astăzi vom discuta în detaliu combinând cereri în 1C. De asemenea, puteți descărca pentru o configurație standard Trade Enterprise Management pentru Kazahstan, ediția 1.0.

Dacă lucrați cu un singur tabel, atunci nu este necesar să utilizați o alăturare. Este cu totul altceva atunci când lucrați cu mai multe tabele și, de exemplu, trebuie să obțineți date despre achizițiile și vânzările de bunuri.

O clauză este folosită pentru a combina COMBINA / UNIRE. Se întâmplă de fapt îmbinarea rezultatelor interogării, adică fiecare interogare colectează date independent una de cealaltă, iar apoi aceste rezultate sunt combinate într-una singură. Și numai la ultima cerere se efectuează alte operațiuni, de exemplu, comandarea și calcularea totalurilor.

În schimb, la îmbinarea interogărilor, are loc „lipirea verticală” a rezultatelor, adică liniile de rezultat ale primei interogări vin pe primul loc, apoi pe a doua.

Să trecem la practică:

SELECTARE Articol, Cantitate, Sumă COMBINA SELECTAȚI Articol, Cantitate, Sumă FROM Document.Consumabil.Goods

Rezultatul acestei interogări este următorul:

Ca rezultat, vom obține două tabele care vor fi conectate între ele. Este greu de văzut unde se termină documentul de chitanță și unde începe documentul de cheltuieli. Dar vom face ceva ca să ne dăm seama:

SELECTAȚI Nomenclatura, Cantitatea CUM Numărul parohiei, Suma AS SumPrikhod, 0 CUM CantitateConsum, 0 CUM Suma Cheltuieli DIN Document.Admitere.Produse COMBINA Numărul parohiei, 0 CUM SumPrikhod, Cantitatea AS CantitateConsum, Suma AS Suma Cheltuieli DIN Document.Consumabil.Bunuri

După cum puteți vedea din textul cererii, am stabilit aliasuri diferite pentru cantitate și sumă pentru fiecare document. De asemenea, în locul acelor câmpuri în care vom primi valorile cantității și cantității, vom pune zerouri. Acest lucru este necesar pentru ca cantitățile și cantitățile goale să fie înlocuite cu zerouri.

Nomenclatură Numărul parohiei SumPrikhod CantitateConsum Suma Cheltuieli
Hârtie A4 25 14 500
Autocolante 500l 8 4 880
Fișier transparent 5 4 100
Set de birou 8 8 840
Set de birou 1 1 105
Fișier transparent 1 820
Autocolante 500l 1 610

Acum trebuie să eliminăm elementele duplicate din rezultatul interogării. Avem două interogări și dacă le restrângem pe fiecare separat pentru a elimina elementele duplicat, atunci nimic nu va funcționa. Prin urmare, vom reduce cererea la următoarea formă:

ALEGE
Nomenclatură,
SUMA (număr de venituri) ca număr de venit,
SUM(SumPrikhod) AS SumPrikhod,
SUMA (cantitate de cheltuială) ca cantitate de cheltuială,
SUM(SumExpend) AS SumExpense
DIN
(
SELECTAȚI Nomenclatura, Cantitatea CUM Numărul parohiei, Suma AS SumPrikhod, 0 CUM CantitateConsum, 0 CUM Suma Cheltuieli DIN Document.Admitere.Produse COMBINA SELECTARE articol, 0 CUM Numărul parohiei, 0 CUM SumPrikhod, Cantitatea AS CantitateConsum, Suma AS Suma Cheltuieli DIN Document.Consumabil.Bunuri ) AS NestedQuery
GRUPARE DUPA Nomenclator

Deci, vedem că întreaga noastră interogare este cuprinsă între paranteze și numită NestedQuery. Acest lucru se face astfel încât să putem grupa înregistrările din ambele subinterogări și să eliminăm elementele duplicat. Acest design se numește o interogare imbricată. Rezultatul acestei interogări este următorul:

Nomenclatură Numărul parohiei SumPrikhod CantitateConsum Suma Cheltuieli
Hârtie A4 25 14 500
Autocolante 500l 8 4 880 1 610
Set de birou 5 4 100 1 1 105
Fișier transparent 8 8 840 1 820

Ca rezultat, obținem un tabel grupat în care datele din subinterogări imbricate sunt aduse într-o formă ușor de înțeles.
Numărul de subinterogări nu trebuie să depășească 255. Am folosit patru subinterogări aici.

Există situații în care este necesar să combinați mai multe interogări într-o singură interogare, iar îmbinările tabelelor nu pot ajuta în acest sens. Cel mai simplu mod de a-l arăta este cu un exemplu.

Să presupunem că în sistemul nostru faptele de cumpărare și vânzare de bunuri sunt înregistrate prin documentele Venituri și, respectiv, Cheltuieli. Contrapartea poate fi fie un cumpărător, fie un furnizor. Datoria poate fi compensată prin livrarea mărfurilor:

Pentru a calcula datoria totală a unei contrapartide, trebuie să adunați suma tuturor cheltuielilor pentru această contraparte și să scădeți suma tuturor încasărilor de la aceeași contrapartidă, cel mai simplu mod de a face acest lucru este utilizarea operatorului COMBINE ALL:

Cerere.Text =
"
//calculam suma pe care am expediat-o contractorilor
|SELECT
| Cheltuieli.Contraparte,
|DIN
| Document.Cheltuială AS Cheltuială
|GRUPA DE
| Cheltuieli.Contraparte
|. COMBINA TOATE
//calculați suma contrapărților
//ne-a livrat marfa
|SELECT
| Parohie.
//luați suma cu semn negativ,
//că la combinat a fost dedus din suma cheltuielilor
| AMOUNT(-Chitanță.Sumă)
|DIN
| Document Sosire AS Sosire
|GRUPA DE
| Sosire.Contrapartidă";

În prima cerere, calculăm suma cheltuielilor pentru fiecare contraparte, în a doua - suma pentru care fiecare contraparte ne-a furnizat bunuri. Suma din a doua cerere este luată cu semnul minus, astfel încât atunci când tabelul rezultat este prăbușit, se scade din cantitatea de expediere către această contraparte. Ca rezultat, obținem un tabel ca:

Nu este tocmai ceea ce ne-am dorit, dar este aproape. Pentru a obține rezultatul dorit, nu mai rămâne decât gruparea pe contraparte. Pentru a face acest lucru, interogarea trebuie plasată într-un tabel temporar (lucrarea cu tabele temporare este discutată în parte închisă a cursului ) și selectați și grupați câmpurile din acesta:

Solicitare = Solicitare nouă;
Cerere.Text =
"ALEGE
| Cheltuieli.Contraparte,
| AMOUNT(Cheltuieli.Suma) AS Datorie
|Plasați VT_Cheltuieli de intrare
|DIN
| Document.Cheltuială AS Cheltuială
|GRUPA DE
| Cheltuieli.Contraparte
|. COMBINA TOATE
|SELECT
| Parohie.
| AMOUNT(-Chitanță.Sumă)
|DIN
| Document Sosire AS Sosire
|GRUPA DE
| Parohie.Contrapartidă
|;
|////////////////////////////////////////////////////////////////////////////////
|SELECT
| VT_Cheltuieli de intrare.
| SUM(VT_IncomeExpenditure.Debt) AS Datorie
|DIN
| VT_IncomingConsumption AS VT_IncomingConsumption
|GRUPA DE
| VT_Cheltuieli de intrare.

Cerințe pentru îmbinarea interogărilor

La îmbinarea a două interogări, numărul de câmpuri trebuie să fie același, dacă vreuna dintre interogări nu are câmpuri, atunci acestea trebuie adăugate ca constante. Sa ne uitam la exemplul de mai sus, sa aiba si documentul de cheltuiala un camp de reducere care reduce valoarea datoriei contrapartidei, dar nu exista reduceri in documentul de chitanta. Ce să faci în acest caz? Aşa:

Solicitare = Solicitare nouă;
Cerere.Text =
"ALEGE
| Cheltuieli.Contraparte,

|DIN
| Document.Cheltuială AS Cheltuială
|GRUPA DE
| Cheltuieli.Contraparte
|. COMBINA TOATE
|SELECT
| Parohie.
| SUM(-Suma chitanță),
//adăugați o reducere de câmp nul
| 0
|DIN
| Document Sosire AS Sosire
|GRUPA DE
| Sosire.Contrapartidă";

Rămâne doar să scădem reducerea și grupul.

Ordinea este de asemenea importantă. Câmpurile vor fi îmbinate exact în ordinea în care sunt specificate în secțiunile SELECT ale ambelor interogări. În legătură cu exemplul anterior, să schimbăm câmpurile de reducere și sumă din eșantionul de chitanțe:

Solicitare = Solicitare nouă;
Cerere.Text =
"ALEGE
| Cheltuieli.Contraparte,
| AMOUNT(Cheltuieli.Suma) CA Datorie,
| AMOUNT(Cheltuieli.Reducere) AS Reducere
|DIN
| Document.Cheltuială AS Cheltuială
|GRUPA DE
| Cheltuieli.Contraparte
|. COMBINA TOATE
|SELECT
| Parohie.
//schimb loc
| 0,
| AMOUNT(-Chitanță.Sumă)
|DIN
| Document Sosire AS Sosire
|GRUPA DE
| Sosire.Contrapartidă";

Dacă lucrați cu un singur tabel, atunci nu este necesar să utilizați o alăturare. Este o chestiune complet diferită atunci când lucrați cu mai multe tabele și, de exemplu, trebuie să obțineți date atât despre achiziții, cât și despre vânzările de bunuri.

O clauză este folosită pentru a combina COMBINA. Ceea ce se întâmplă de fapt este că rezultatele interogărilor sunt îmbinate, adică fiecare interogare colectează date independent una de cealaltă, iar apoi aceste rezultate sunt combinate într-unul singur. Și numai la ultima cerere se efectuează alte operațiuni, de exemplu, comandarea și calcularea totalurilor.

La îmbinarea interogărilor, are loc „lipirea verticală” a rezultatelor, adică liniile de rezultat ale primei interogări vin pe primul loc, apoi pe a doua.

Să trecem la practică:
Cod 1C v 8.x SELECT
Nomenclatură,
Cantitate,
Sumă
DIN
Document.Admitere.Marfa

COMBINA

ALEGE
Nomenclatură,
Cantitate,
Sumă
DIN
Document.Admitere.Marfa

Rezultatul acestei interogări este următorul:
Nomenclatură Cantitate Sumă
Hârtie A4 25 14 500
Autocolante 500l 8 4 880
Dosar transparent 5 4 100
Set de birou 8 8 840

Ca rezultat, vom obține două tabele care vor fi conectate între ele. Este greu de văzut unde se termină documentul de chitanță și unde începe documentul de cheltuieli. Dar vom face ceva pentru a înțelege:
Cod 1C v 8.x
ALEGE
Nomenclatură,
Cantitate AS Kol.
Suma AS SumIncoming,
0 AS Cantitate Cheltuieli,
0 AS Sumă Cheltuială
DIN
Document.Admitere.Marfa

COMBINA

ALEGE
Nomenclatură,
0 AS KolPrikhod,
0 AS SumPrikhod,
Cantitate AS Cantitate Consum,
Suma AS AmountExpense
DIN
Document.Consumabile.Bunuri

După cum puteți vedea din textul cererii, am stabilit aliasuri diferite pentru cantitate și sumă pentru fiecare document. De asemenea, în locul acelor câmpuri în care vom primi valorile cantității și cantității, vom pune zerouri. Acest lucru este necesar pentru ca cantitățile și cantitățile goale să fie înlocuite cu zerouri.

Hârtie A4 25 14 500
Autocolante 500l 8 4 880
Dosar transparent 5 4 100
Set de birou 8 8 840
Set de birou 1 1 105
Dosar transparent 1 820
Autocolante 500l 1 610

Acum trebuie să eliminăm elementele duplicate din rezultatul interogării. Avem două interogări și dacă le restrângem pe fiecare separat pentru a elimina elementele duplicat, atunci nimic nu va funcționa. Prin urmare, vom reduce cererea la următoarea formă:
Cod 1C v 8.x
ALEGE
Nomenclatură,
SUMA (număr de venituri) ca număr de venit,
SUM(SumPrikhod) AS SumPrikhod,
SUMA (Cantitatea de cheltuială) CA Cantitatea de cheltuială,
SUM(SumExpend) AS SumExpense
DIN

(ALEGE
Nomenclatură,
Cantitate AS Kol.
Suma AS SumIncoming,
0 AS Cantitate Cheltuieli,
0 AS Sumă Cheltuială
DIN
Document.Admitere.Marfa

COMBINA

ALEGE
Nomenclatură,
0 AS KolPrikhod,
0 AS SumPrikhod,
Cantitate AS Cantitate Consum,
Suma AS AmountExpense
DIN
Document.Consumabil.Bunuri) AS AttachedRequest

GRUPĂ DUPĂ Nomenclatură

Deci, vedem că întreaga noastră interogare este cuprinsă între paranteze și numită NestedQuery. Acest lucru se face astfel încât să putem grupa înregistrările din ambele subinterogări și să eliminăm elementele duplicat. Acest design se numește o interogare imbricată. Rezultatul acestei interogări este următorul:
Nomenclatura KolIncoming SumIncoming KolExpenditure SumExpenditure
Hârtie A4 25 14 500
Autocolante 500l 8 4 880 1 610
Set de birou 5 4 100 1 1 105
Dosar transparent 8 8 840 1 820

Ca rezultat, obținem un tabel grupat în care datele din subinterogări imbricate sunt aduse într-o formă ușor de înțeles. Numărul de subinterogări nu trebuie să depășească 255. Am folosit patru subinterogări aici.

Dacă dorim să lăsăm doar valori de înregistrare unice în interogare fără a folosi gruparea. Trebuie să scrieți o propoziție COMBINE fără cuvântul cheie ALL.

Informatii preluate de pe site

Limbajul de interogare este unul dintre mecanismele fundamentale ale 1C 8.3 pentru dezvoltatori. Folosind interogări, puteți prelua rapid orice date stocate în baza de date. Sintaxa sa este foarte asemănătoare cu SQL, dar există unele diferențe.

Principalele avantaje ale limbajului de interogare 1C 8.3 (8.2) față de SQL:

  • dereferențiarea câmpurilor de referință (referirea unuia sau mai multor puncte la detalii despre obiect);
  • lucrul cu rezultate este foarte convenabil;
  • capacitatea de a crea tabele virtuale;
  • cererea poate fi scrisă atât în ​​engleză, cât și în rusă;
  • capacitatea de a bloca datele pentru a evita blocajele.

Dezavantajele limbajului de interogare în 1C:

  • spre deosebire de SQL, interogările în 1C nu permit modificarea datelor;
  • lipsa procedurilor stocate;
  • imposibilitatea de a converti un șir într-un număr.

Să aruncăm o privire la mini-tutorialul nostru despre constructele de bază ale limbajului de interogare 1C.

Datorită faptului că interogările din 1C vă permit doar să primiți date, orice interogare trebuie să înceapă cu cuvântul „SELECT”. După această comandă sunt indicate câmpurile din care trebuie obținute datele. Dacă specificați „*”, toate câmpurile disponibile vor fi selectate. Locul din care vor fi selectate datele (documente, registre, directoare etc.) este indicat după cuvântul „DIN”.

În exemplul discutat mai jos, numele întregii nomenclaturi sunt selectate din directorul „Nomenclatură”. După cuvântul „CUM”, sunt indicate pseudonimele (numele) pentru tabele și câmpuri.

ALEGE
Nomenclatură Nume AS Nume de nomenclatură
DIN
Director.Nomenclatura AS Nomenclatura

Lângă comanda „SELECT” puteți specifica cuvinte cheie:

  • DIVERSE. Interogarea va selecta numai rânduri care diferă în cel puțin un câmp (fără duplicate).
  • PRIMUL n, Unde n– numărul de rânduri de la începutul rezultatului care trebuie selectat. Cel mai adesea, această construcție este utilizată împreună cu sortarea (ORDER BY). De exemplu, când trebuie să selectați un anumit număr de documente care sunt recente după dată.
  • PERMIS. Acest design vă permite să selectați din baza de date numai acele înregistrări care sunt disponibile utilizatorului curent. Pe baza utilizării acestui cuvânt cheie, utilizatorul va primi un mesaj de eroare atunci când încearcă să interogheze înregistrările la care nu are acces.

Aceste cuvinte cheie pot fi folosite împreună sau separat.

A SCHIMBA

Această propunere blochează datele pentru a preveni conflictele reciproce. Datele blocate nu vor fi citite de la o altă conexiune până la încheierea tranzacției. În această clauză, puteți specifica anumite tabele care trebuie blocate. În caz contrar, toată lumea va fi blocată. Designul este relevant doar pentru modul de blocare automată.

Cel mai adesea, clauza „PENTRU SCHIMBARE” este folosită la primirea soldurilor. La urma urmei, atunci când mai mulți utilizatori lucrează în program simultan, în timp ce unul primește solduri, altul le poate schimba. În acest caz, restul rezultat nu va mai fi corect. Dacă blocați datele cu această propunere, atunci până când primul angajat primește soldul corect și efectuează toate manipulările necesare cu acesta, al doilea angajat va fi obligat să aștepte.

ALEGE
Acorduri reciproce.
Decontări reciproce Valoarea decontărilor reciproce Sold
DIN
Registrul Acumulărilor Decontări reciproce cu salariaţii
A SCHIMBA

UNDE

Designul este necesar pentru a impune un fel de selecție asupra datelor încărcate. În unele cazuri de obținere a datelor din registre, este mai rezonabil să se specifice condițiile de selecție în parametrii tabelelor virtuale. Când utilizați „UNDE”, toate înregistrările sunt preluate mai întâi și numai apoi se aplică selecția, ceea ce încetinește semnificativ interogarea.

Mai jos este un exemplu de solicitare de a obține persoane de contact pentru o anumită poziție. Parametrul de selecție are formatul: &ParameterName (numele parametrului este arbitrar).

SELECTARE (CAZ)

Designul vă permite să specificați condiții direct în corpul cererii.

În exemplul de mai jos, „AdditionalField” va conține text în funcție de dacă documentul este postat sau nu:

ALEGE
AdmitereT&U.Link,
ALEGERE
CÂND AdmitereaT&U.Efectuat
ATUNCI „Documentul a fost aprobat!”
ELSE „Documentul nu a fost postat...”
TERMINAȚI CA SuplimentarField
DIN
Documentul Primirea Bunurilor și Serviciilor CUM T&C

ÎNSCRIEȚI-VĂ

Îmbinările leagă două tabele pe baza unei anumite condiții de relație.

CONEXIUNE STÂNGA/DREAPTA

Esența îmbinării LEFT este că primul tabel specificat este luat în întregime, iar al doilea este legat de acesta în funcție de condiția de conectare. Dacă nu există înregistrări care să corespundă primului tabel din al doilea, atunci NULL este înlocuit ca valorile lor. Mai simplu spus, tabelul principal este primul tabel specificat, iar datele celui de-al doilea tabel (dacă există) sunt deja înlocuite cu datele acestuia.

De exemplu, este necesar să obțineți articole de articole din documentele „Recepție de bunuri și servicii” și prețuri din registrul de informații „Prețuri articole”. În acest caz, dacă prețul pentru orice poziție nu este găsit, înlocuiți NULL. Toate articolele din document vor fi selectate indiferent dacă au un preț sau nu.

ALEGE
Nomenclatură de primire,
Preturi.Pret
DIN
Document de primire de bunuri și servicii
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Preturi
Software Receipt&U.Nomenclature = Prices.Nomenclature

ÎN DREPT totul este exact invers.

CONEXIUNE COMPLETA

Acest tip de conexiune diferă de cele anterioare prin aceea că, ca urmare, toate înregistrările atât din primul tabel, cât și din al doilea vor fi returnate. Dacă nu se găsesc înregistrări în primul sau al doilea tabel pe baza condiției de legătură specificate, va fi returnat NULL.

Când utilizați o conexiune completă în exemplul anterior, vor fi selectate toate articolele din documentul „Primire de bunuri și servicii” și toate cele mai recente prețuri din registrul „Prețuri articole”. Valorile înregistrărilor negăsite atât în ​​primul cât și în cel de-al doilea tabel vor fi egale cu NULL.

INNER JOIN

Diferența dintre un INNER JOIN și un FULL JOIN este că, dacă o înregistrare nu este găsită în cel puțin unul dintre tabele, interogarea nu o va afișa deloc. Ca urmare, vor fi selectate doar acele articole din documentul „Recepție de bunuri și servicii” pentru care există înregistrări în registrul de informații „Prețuri articole”, dacă în exemplul anterior înlocuim „FULL” cu „INTERN”.

GROUP BY

Gruparea în interogări 1C vă permite să restrângeți rândurile de tabel (câmpuri de grupare) în funcție de o anumită caracteristică comună (câmpuri de grupare). Câmpurile de grupare pot fi afișate numai folosind funcții de agregare.

Rezultatul următoarei interogări va fi o listă de tipuri de produse cu prețuri maxime pentru acestea.

ALEGE
,
MAX(Preț.Preț) AS Preț
DIN

GROUP BY
Preturi.Nomenclatura.Tipul Nomenclatorului

REZULTATE

Spre deosebire de grupare, atunci când se utilizează totaluri, toate înregistrările sunt afișate și rândurile totale sunt adăugate acestora. Gruparea afișează numai înregistrări generalizate.

Rezultatele pot fi rezumate pentru întregul tabel (folosind cuvântul cheie „GENERAL”), pentru mai multe câmpuri, pentru câmpuri cu structură ierarhică (cuvinte cheie „IERARHIE”, „NUMAI IERARHIE”). La rezumarea rezultatelor, nu este necesar să folosiți funcții agregate.

Să ne uităm la un exemplu similar cu cel de mai sus folosind gruparea. În acest caz, rezultatul interogării va returna nu numai câmpuri grupate, ci și înregistrări detaliate.

ALEGE
Prețuri.Nomenclatură.Tip de nomenclatură AS Tip de nomenclatură,
Preturi.Pret AS Pret
DIN
Registrul Prețurilor Nomenclaturii Cele mai recente prețuri
REZULTATE
MAXIMUM(Preț)
DE
TypeNomenclature

AVÂND

Acest operator este similar cu operatorul WHERE, dar este folosit doar pentru funcții agregate. Câmpurile rămase, cu excepția celor utilizate de acest operator, trebuie grupate. Operatorul WHERE nu este aplicabil funcțiilor agregate.

În exemplul de mai jos, prețurile maxime ale unui articol sunt selectate dacă depășesc 1000, grupate după tipul articolului.

ALEGE

MAX(Preț.Preț) AS Preț
DIN
Registrul Prețurilor Nomenclaturii Cele mai recente prețuri
GROUP BY
Preturi.Nomenclatura.Tipul Nomenclatorului
AVÂND
MAXIM(Prețuri.Preț) > 1000

COMANDA PENTRU

Operatorul ORDER BY sortează rezultatul unei interogări. Pentru a vă asigura că înregistrările sunt afișate într-o ordine consecventă, se utilizează COMANDA AUTOMATĂ. Tipurile primitive sunt sortate după regulile obișnuite. Tipurile de referință sunt sortate după GUID.

Un exemplu de obținere a unei liste de angajați sortați după nume:

ALEGE
Angajații.Nume AS Nume
DIN
Director.Angajaţii CUM Angajaţii
COMANDA PENTRU
Nume
COMANDĂ AUTOMATĂ

Alte constructe de limbaj de interogare 1C

  • COMBINA– rezultatele a două interogări într-una.
  • COMBINA TOTUL– similar cu COMBINE, dar fără a grupa rânduri identice.
  • MASĂ GOLĂ– folosit uneori la alăturarea interogărilor pentru a specifica un tabel imbricat gol.
  • LOC– creează un tabel temporar pentru a optimiza interogările complexe 1C. Astfel de solicitări se numesc solicitări în lot.

Caracteristicile limbajului de interogare

  • SUBSTRING trunchiază un șir dintr-o poziție specificată la un număr specificat de caractere.
  • AN... AL DOILEA vă permit să obțineți valoarea selectată a unui tip numeric. Parametrul de intrare este data.
  • ÎNCEPUTUL PERIOADEI și sfârșitul perioadei utilizat atunci când se lucrează cu date. Tipul perioadei (ZI, LUNA, AN etc.) este indicat ca parametru suplimentar.
  • ADDKDATE vă permite să adăugați sau să scădeți o oră specificată de un anumit tip dintr-o dată (SECOND, MINUT, DAY etc.).
  • DATA DIFERENTATA determină diferența dintre două date, indicând tipul valorii de ieșire (ZI, AN, LUNA etc.).
  • ISNULLînlocuiește valoarea lipsă cu expresia specificată.
  • REPREZENTARE și REPRESENTATIONLINKS obține o reprezentare șir a câmpului specificat. Aplicați oricăror valori și, respectiv, numai valorilor de referință.
  • TIP, VALORI DE TIP sunt utilizate pentru a determina tipul parametrului de intrare.
  • LEGĂTURĂ este un operator logic de comparare pentru tipul de valoare de atribut.
  • EXPRES folosit pentru a converti o valoare în tipul dorit.
  • DATETIME primește o valoare Data din valori numerice (An, Lună, Zi, Ora, Minut, Second).
  • SENSîntr-o solicitare 1C este folosit pentru a indica valori predefinite - directoare, enumerari, planuri pentru tipuri de caracteristici. Exemplu de utilizare: " Unde Persoană juridică = Valoare (Enumerare. Persoană juridică. Persoană fizică)«.

Generator de interogări

Pentru a crea interogări cu 1C, există un mecanism încorporat foarte convenabil - designerul de interogări. Conține următoarele file principale:

  • „Tabele și câmpuri” - conține câmpurile care trebuie selectate și sursele acestora.
  • „Conexiuni” - descrie condițiile pentru structura CONEXIUNE.
  • „Grupare”—conține o descriere a structurilor de grupare și a câmpurilor însumate pe baza acestora.
  • „Condiții” - este responsabil pentru selectarea datelor din cerere.
  • „Avansat”—parametri de interogare suplimentari, cum ar fi cuvintele cheie pentru comanda „SELECT” etc.
  • „Joins/Aliases” - sunt indicate posibilitățile de îmbinare a tabelelor și sunt specificate aliasuri (constructia „CUM”).
  • „Comanda” este responsabil pentru sortarea rezultatului interogărilor.
  • „Totale” - similar cu fila „Grupare”, dar folosit pentru constructul „TOTALURI”.

Textul cererii în sine poate fi vizualizat făcând clic pe butonul „Solicitare” din colțul din stânga jos. În acest formular, poate fi corectat manual sau copiat.


Solicitare Consola

Pentru a vizualiza rapid rezultatul unei interogări în modul Enterprise sau pentru a depana interogări complexe, utilizați . Acesta conține textul cererii, stabilește parametrii și afișează rezultatul.

Puteți descărca consola de interogări pe discul ITS sau prin .

Cele mai bune articole pe această temă