Cum funcționează Generatorul de rapoarte și Generatorul de interogări cu o sursă de date arbitrară. Lucrarea generatorului de rapoarte și a generatorului de interogări cu o sursă de date arbitrară Selectarea Generatorului de interogări 1c 8.2

A opta versiune a platformei 1C oferă o mulțime de noi obiecte de configurare, fiecare dintre ele având propriile metode și proprietăți care fac posibilă simplificarea procesului de dezvoltare a aplicației și optimizarea performanței. Unul dintre ele este Generatorul de rapoarte.

Despre ce este un generator de rapoarte 1c, ce funcții îndeplinește și ce aplicație a găsit în programare și aș dori să vorbesc în acest articol.

Generator de rapoarte în 1C - ce este?

Este un obiect de configurare care vă permite să scoateți date într-o foaie de calcul sau într-o diagramă. Sursa de date poate fi:

  1. Rezultatul executării interogării;
  2. Zona celulelor unui document de foaie de calcul;
  3. Secțiune tabelară a unui document sau a cărții de referință;
  4. Un set de intrări în registru.

În plus, generatorul de rapoarte din 1C are atributul „Text” în care poate fi trimis textul solicitării, al cărui rezultat trebuie vizualizat.

Figura 1 arată o bucată de cod care vă permite să afișați un tabel arbitrar de valori utilizând „Generatorul de rapoarte”

Astfel, cazul de utilizare evident pentru constructor este să proiecteze rapoarte. Nu o direcție atât de explicită de utilizare a generatorului este utilizarea acestuia pentru a personaliza diverse elemente de interogare (grupări, selecții etc.) de către utilizator.

Apropo, rezultatul executării codului prezentat în Fig. 1 poate fi văzut în Fig. 2

Fig. 2

Configurarea constructorului

Generatorul de rapoarte, într-un fel, seamănă cu un sistem de compunere a datelor și poate fi utilizat în cazurile în care ACS-ul nu este disponibil dintr-un motiv sau altul sau există posibilitatea ca acesta să funcționeze incorect.

La fel ca ACS, constructorul include:

  • Grupări (niveluri ierarhice la afișarea informațiilor);
  • Indicatori (valori pentru care doriți să obțineți totalul);
  • Câmpuri suplimentare calculate (atribute ale elementelor, rezultate ale acțiunilor cu valori);
  • Filtre (selecții);
  • Triere.

Setările de aspect al aspectului constructorului presupun diferite niveluri și precizie a detaliilor.

Algoritm pentru utilizarea constructorului

Desigur, în funcție de situație, codul programului pentru utilizarea generatorului de rapoarte poate varia semnificativ. Algoritmul de utilizare de bază nu se modifică:

  1. Declaram crearea unui nou obiect de tip ReportBuild;
  2. În această etapă, puteți fie să utilizați QueryBuilder pentru a crea textul de selecție, fie, folosind obiectul DataSourceDescription, să utilizați o selecție existentă;
  3. Setările generatorului de rapoarte pot fi setate utilizând metoda obiectului generator FillSettings ();
  4. Puteți refuza să utilizați aspectul de proiectare standard creat prin metoda autogenerarii prin definirea proprietății obiectului Layout în builder;
  5. Dacă nu se folosește DataSourceDescription, în această etapă este necesar să se execute cererea, se folosește metoda Execute ();
  6. Ultimul pas este să rulați metoda Output (), ieșirea se poate face într-un document de foaie de calcul sau în elementul de formular corespunzător.

Folosind decriptarea în builder

A treia linie din Fig. 1 include decodificarea celulelor în rezultatul execuției constructorului.

Pentru a face acest lucru, am folosit proprietatea FillDecoding. Tipul acestei proprietăți este ReporterPerformFillType, poate lua una dintre cele trei valori:

  1. Valori de grupare - la activarea unei celule, se va folosi valoarea grupării specificate în aceasta;
  2. Nu completați - valoarea implicită, ceea ce înseamnă că nu va fi folosită nicio decriptare pentru rezultatul final;
  3. Decriptare - structura decriptării va fi completată cu valorile tuturor grupărilor eșantionului original.

În plus, utilizatorul poate seta decriptarea pe cont propriu folosind metoda ConfigureDecryption (). Partea de cod care rulează această metodă este prezentată în Fig. 3

Fig. 3

Un exemplu de utilizare a generatorului pentru a include selecții într-un raport

Un pic din partea practică. Uneori există o situație în care este necesară crearea unui raport cu anumite selecții. Puteți rezolva această problemă folosind ACS sau puteți utiliza constructorul:

  1. Să începem prin a crea raport externși adăugarea unei variabile cu un nume arbitrar și tastând Report Builder (Fig. 4);

Fig. 4

  1. Creați un formular de raport și plasați obiectul de interfață TabularField pe acesta, introduceți-l ca Selection și legați-l la proprietatea Selection a atributului creat Fig. 5

Fig. 5

  1. Creăm o procedură OnOpen () asociată cu evenimentul corespunzător din formularul nostru;

Fig. 6

  1. Codul scris în el trebuie să conțină în mod necesar o solicitare pentru generatorul de rapoarte, un exemplu de cod este prezentat în Fig. 6, pentru a crea textul constructorului, puteți utiliza constructorul de interogare, în constructor condițiile constructorului și ale acestuia setările suplimentare sunt indicate în fila corespunzătoare Fig. 7;

Fig. 7

  1. Condițiile de selecție specificate în paranteze () ale textului de interogare vor fi executate numai dacă selecția corespunzătoare este activată și utilizată de utilizator;

  2. Procedura care afișează rezultatul constructorului este prezentată în Fig. 8 și este asociată cu apăsarea butonului Generare;

Fig. 8

  1. Ne salvăm raportul.

Aspectul raportului pe care l-am creat și rezultatul acestuia sunt prezentate în Fig. 9

Fig. 9

Desigur, este destul de dificil să demonstrezi toate capacitățile unui obiect nou într-un articol, dar ni se pare că este posibil să ne facem o idee despre acesta și să începem să-l folosiți ținând cont de cunoștințele acumulate.

1. Ce este un generator de rapoarte?

Generatorul de rapoarte este un obiect care permite, pe baza textului și setărilor de interogare specificate, să obțină rezultatul și să-l afișeze într-o foaie de calcul sau într-o diagramă.

Setările Generatorului de rapoarte includ:

  • grupări (exemplu: „Nomenclatură”, „Contraparte” ...),
  • indicatori (exemplu: „Cantitate”, „Suma” ...),
  • câmpuri suplimentare (exemplu: „Nomenclature.Service”, „Counterparty.code” ...),
  • filtru (exemplu: pentru un anumit articol, pentru un grup de contrapartide...) și
  • sortare (exemplu: „Nomenclatură.Cod”, „Nume.Contreparte” ...)

Setările constructorului au instrumente de vizualizare care permit programatorului să ofere utilizatorului o interfață pentru instalarea lor cu efort minim.

Înainte de a afișa aspectul Generator de rapoarte, îl puteți stila folosind aspectul.

Ieșirea rezultatului execuției interogării generatorului de rapoarte este realizată printr-o singură comandă.

2. Unde puteți utiliza Generatorul de rapoarte?

Cu ajutorul generatorului de rapoarte, puteți proiecta cea mai mare parte a rapoartelor (exemplu: „Solduri de stoc”, „Vânzări pentru perioada” ...). În același timp, timpul pentru dezvoltarea lor și codul programului va fi redus semnificativ, iar calitatea designului și funcționalității vor crește.

În plus, generatorul de rapoarte poate fi utilizat în cazurile în care rezultatul nu este necesar, dar utilizatorul trebuie să personalizeze elementele de interogare, de exemplu, grupări sau un filtru (de exemplu: descărcarea unui articol într-un fișier xml sau procesarea documentelor postate printr-un filtru specificat).

Deoarece generatorul de rapoarte nu este disponibil pe serverul 1C: Enterprise și nu este utilizat în modulul de conexiune externă, în aceste cazuri este necesar să utilizați generator de interogări, care este similar cu generatorul de rapoarte, dar nu are proprietăți și metode vizuale ("Layout", "OutputReportHeader", "Output ()", "CheckoutLayout ()" ...).

3. Câteva despre concepte

În comparație cu versiunea 7.7, versiunea 8.0 a suferit o ușoară schimbare de concepte, așa că merită să ne oprim puțin asupra acestui lucru.

Concept

Descriere

Măsurătorile liniilor Lista grupărilor prin care se va realiza producția pe linii (exemplu: „Nomenclatură”, „Contraparte” ...)
Măsurătorile coloanei Lista grupărilor prin care ieșirea va fi realizată pe coloane (exemplu: „Depozit”, „Luna” ...).
Selecţie Un set de filtre diferite (de exemplu: de către un grup de antreprenori, de o anumită organizație ...).
Ordin Un set de câmpuri de sortare (exemplu: „Nomenclatură.Cod”, „DocumentVânzări.Responsabil” ...).
Camp Unul dintre câmpurile de selecție a cererii (exemplu: „Nomenclatură”, „Cod contraparte”, „Cantitate”, „Suma” ...).
Câmpurile selectate Lista câmpurilor selectate include indicatori (exemplu: „Cantitate”, „Suma” ...) și câmpuri suplimentare (detalii de grupare) (exemplu: „Nomenclatură.Grup”, „Cod contraparte” ...).
Câmpuri disponibile Lista câmpurilor disponibile pentru adăugarea la grupări, filtrare, sortare și câmpuri selectate. Este umplut, de regulă, cu o listă de câmpuri de selecție a interogărilor, dar poate fi editat programatic (puteți adăuga, modifica și șterge câmpuri disponibile).

Este important să înțelegeți că câmpurile de grupare, filtrare, sortare și selectate nu au legătură directă cu câmpurile disponibile, ele sunt obiecte diferite.

Principala diferență este că câmpul disponibil nu are proprietatea „Calea datelor” (exemplu: „Nomenclatură.Cod”, „Cantitate”), deoarece aceasta este doar un fel de descriere a câmpului, prin care se va încerca o încercare. pentru a găsi o potrivire între câmpurile de selecție a interogării în acest moment adăugând-o la lista de grupări, filtrare, sortare sau câmpuri selectate.

În același timp, nu există nicio modalitate de a adăuga în mod programatic unul dintre câmpurile disponibile la oricare dintre listele de mai sus, deoarece, pe de o parte, câmpul disponibil nu are metode precum „AddWelected ()” sau „AddInSelectedFields ()” , dar, pe de altă parte, atunci când adăugați un articol nou la oricare dintre listele de mai sus, trebuie să specificați proprietatea „Calea datelor”, care nu se potrivește întotdeauna cu numele câmpului (de exemplu: „Nomenclatura.Parent” și Câmpurile „Nomenclature.Parent.Parent” au același nume „Parent”).

4. Caz de utilizare tipic pentru generatorul de rapoarte

În general, secvența de acțiuni atunci când lucrați cu generatorul de rapoarte este următoarea:

  1. Crea obiect nou„Generator de rapoarte”;
  2. Atribuiți textul solicitării proprietății „Text”;
  3. Dacă setările generatorului de rapoarte nu au fost specificate în textul interogării, atunci executați metoda „FillSettings ()”;
  4. Oferiți utilizatorului posibilitatea de a modifica setările generatorului de rapoarte;
  5. Dacă este necesar, puteți refuza să generați automat aspectul de către generatorul de rapoarte și să atribuiți un aspect fix proprietății Aspect;
  6. Dacă este necesar, puteți aloca unul dintre aspectul standard sau propriul dvs. proprietății „Layout”, iar dacă aspectul generat automat al generatorului de rapoarte a fost înlocuit cu unul fix, atunci executați metoda „Checkout Layout ()”;
  7. Apelați metoda „Run ()”;
  8. Apelați metoda „Ieșire ()”.
Generator = Nou „Generator de rapoarte”; Postroitel.Tekst = "Selectați rezoluția | DenezhnyeSredstvaKompaniiOstatki.StrukturnayaEdinitsa, | Suma (DenezhnyeSredstvaKompaniiOstatki.SummaOstatok) ca sumă a | | FROM | RegistrNakopleniya.DenezhnyeSredsttatva |SredstvaKompaniiOstatva |Ostatki.Kompanii)(Sredsttatva) | TOTAL REZULTATE (Suma) PENTRU | GENERAL, | Unitate structurală "; Builder.FillSettings (); // Aici puteți oferi utilizatorului posibilitatea // de a modifica setările generatorului de rapoarte Builder.Layout = GetLayout ("CustomLayout");
Builder.Layout.Layout = GetLayout.Layout (StandardLayout.Classic);
Builder.CheckLayout ();
Builder.Run ();
Builder.Display ();

5. Descrierea unor proprietăți ale generatorului de rapoarte

Proprietate

Descriere

Text Conține textul de interogare al generatorului de rapoarte. Dacă textul de interogare al generatorului de rapoarte nu conține elemente de setare „(…)”, atunci puteți utiliza metoda FillSettings () pentru a completa automat setările pe baza textului de interogare.
TextHeader Textul care va fi afișat în titlul raportului (exemplu: „Solduri de stoc la 01.01.2004”, „Vânzări pentru ianuarie 2004” ...).
Titlul raportului de ieșire
DisplayHatTable
AfișeazăRezultatele generale
DisplayBasementTables
DisplayFooterReport
Aceste proprietăți determină dacă sunt afișate titlul raportului, antetul tabelului, totalurile generale, subsolul tabelului și, respectiv, subsolul raportului.
OutputDetailedRecords Proprietatea este responsabilă pentru afișarea forțată sau interzicerea afișării înregistrărilor detaliate.
Intrări cu detalii automate Dacă proprietatea „AutoDetailedRecords” este setată la True, atunci fiecare înregistrare detaliată va fi afișată numai dacă diferă de cea de grup.
Câmpuri disponibile Conține o listă de câmpuri disponibile pentru adăugare la grupări, filtru, câmpuri selectate și sortare.
MeasurementsStrings
Coloane de măsurători
Conține o listă de grupări, respectiv, pe rând și, respectiv, pe coloană.
Selecţie Conține o listă de filtre specificate de generatorul de rapoarte.
SelectedFields conține o listă de indicatori selectați și atribute de grupare.
Ordin conține o listă de câmpuri de sortare.
Parametrii Conține o listă de parametri ai generatorului (declarați în textul interogării constructorului folosind simbolul „&”).
Rezultat Conține rezultatul executării unei interogări a generatorului de rapoarte (un obiect de tip QueryResult).

6. Procesarea transcrierilor utilizând Generatorul de rapoarte

Proprietatea „FillDecryption” conține una dintre cele trei opțiuni pentru completarea decriptării în rezultat:

Prima opțiune: nu completați (nu folosiți decriptarea).

A doua opțiune: gruparea valorilor (la decriptarea unei celule, se va deschide valoarea de grupare afișată în ea).

A 3-a opțiune: decriptare (decriptarea va fi completată cu o structură care conține valorile tuturor grupărilor). În acest caz, este necesară procesarea evenimentului documentului tabelar „Procesarea decriptării”, unde este necesară analizarea structurii transmise și efectuarea anumitor acțiuni.

Un punct important este că, în cea de-a treia opțiune, este imposibil să ieșiți în documentul tabelar generat, de atunci este imposibil să procesați decriptarea, al cărei eveniment este procesat în modulul formularului pe care se află câmpul documentului foaie de calcul. este localizat.

Dacă utilizați a treia opțiune pentru completarea decriptării, atunci puteți utiliza metoda „ConfigureDecryption ()” concepută pentru a executa și afișa un raport ținând cont de decriptarea efectuată de utilizator.

Generatorul de rapoarte poate fi același sau unul nou. Când personalizați decriptarea, toate filtrele personalizate ale generatorului de rapoarte vor fi eliminate și toate filtre instalate generatorul original de interogări plus filtre pentru valorile de grupare din decriptare.

7. Raportare

Proprietatea „Layout” conține aspectul care este utilizat la ieșirea rezultatului într-un document foaie de calcul. Dacă este nedefinit, atunci aspectul este generat automat.

Proprietățile „ReportHeader Layout”, „TableHeader Layout”, „DetailRecords Layout”, „GeneralTotals Layout”, „TableFootboard Layout” și „ReportFootboard Layout” conțin numele zonei din aspectul generatorului de rapoarte sau machetele individuale utilizate în rezultat, respectiv, a tabelului, antetul raportului detaliat, antetul totaluri generale, subsolul tabelului și subsolul raportului într-un document foaie de calcul. Dacă numele zonelor se potrivesc cu numele din aspectul generatorului de rapoarte, atunci nu este necesar să completați proprietățile.

Proprietatea „Aspect aspect” conține aspectul utilizat pentru stilul aspectului generatorului de rapoarte. Decorarea celulelor din aspectul aspect va fi aplicată celulelor din aspectul generatorului de rapoarte.

Pentru a obține una dintre opțiunile de proiectare standard, puteți utiliza metoda contextului global „GetDesignLayout ()”.

Dacă un aspect fix a fost atribuit proprietății „Layout” a generatorului de rapoarte, pentru a-l proiecta, trebuie să executați metoda „Checkout Layout ()”.

Proprietatea „DimensionLocationInstrings” definește una dintre cele trei opțiuni pentru afișarea grupărilor pe rânduri.
Prima variantă: împreună (într-o coloană).
Exemplu:

A doua opțiune: separat (în coloane diferite).
Exemplu:


Exemplu:

Proprietatea „PlacementDimensionsInColumns” definește una dintre cele trei opțiuni pentru afișarea grupărilor pe coloane.
Prima variantă: împreună (într-o linie).
Exemplu:

A 2-a opțiune: separat (în linii diferite).
Exemplu:

A 3-a opțiune: separat și numai în totaluri.
Exemplu:

Proprietatea „PlacementTotalsInRows” definește una dintre cele patru moduri de afișare a totalurilor în rânduri.
Prima opțiune: în titlu (doar deasupra grupărilor ulterioare și înregistrărilor detaliate).

A 2-a opțiune: în antet și subsol (deasupra și dedesubtul grupărilor ulterioare și a intrărilor de detalii).

A 3-a variantă: la subsol (sub grupările ulterioare și înregistrările detaliate, deasupra acestora este afișată doar descrierea grupării).

A 4-a variantă: doar la subsol (doar sub grupările ulterioare și intrările detaliate).

Proprietate “ Plasarea rezultatelor în coloane„Definește una dintre cele patru moduri de afișare a totalurilor în coloane.

Prima opțiune: în titlu (doar în stânga grupărilor ulterioare și a intrărilor detaliate).

A doua opțiune: în titlu și subsol (în stânga și în dreapta grupărilor ulterioare și a intrărilor detaliate).

A 3-a variantă: la subsol (în dreapta grupărilor ulterioare și înregistrărilor detaliate, în stânga acestora este afișată doar descrierea grupării).

Opțiunea a 4-a: numai la subsol (numai în dreapta grupărilor ulterioare și a înregistrărilor detaliate).

Proprietate “ Plasarea atributelor de dimensiune în rânduri„Definește una dintre cele trei opțiuni pentru afișarea atributelor de grupare pe linii.

Prima variantă: împreună (într-o coloană suplimentară).
Exemplu:

A 2-a variantă: împreună cu măsurători (în coloane cu grupări).
Exemplu:

A 3-a opțiune: separat (în coloane suplimentare diferite).
Exemplu:

Proprietate “ PlacingDimensionAttributesInColumns„Definește una dintre cele trei opțiuni pentru afișarea detaliilor de grupare pe coloane.

Prima variantă: împreună (într-o linie suplimentară).
Exemplu:

A 2-a variantă: împreună cu măsurători (în rânduri cu grupări).
Exemplu:

A 3-a opțiune: separat (în linii suplimentare diferite).
Exemplu:

8. Ieșirea generatorului de rapoarte

Metoda „Run ()” execută interogarea generatorului de rapoarte și completează proprietatea „Rezultat”.
Folosind metoda GetRequest (), puteți obține o interogare de generator de rapoarte care este executată atunci când este apelată metoda Run ().

Metoda „Ieșire ()” trimite rezultatul într-un document sau într-o diagramă de calcul. Dacă nu specificați obiectul pe care doriți să îl trimiteți, atunci va fi creat un nou document de foaie de calcul.

Un exemplu de ieșire într-un nou document foaie de calcul:
Builder.Display ();

Un exemplu de ieșire într-un document de foaie de calcul existent:
Builder.Output (FormElements.ResultTable);

Exemplu de ieșire în diagramă:
Builder.Output (FormElements.ResultDiagram, „Cantitate”);

Dacă trebuie să afișați rezultatul generatorului de rapoarte într-un tabel pivot sau diagramă pivot, atunci nu trebuie să utilizați metoda „Ieșire ()”, ci să completați proprietatea masă rotativă sau diagrama pivot „DataSource”. Ca sursă, puteți specifica rezultatul generatorului de rapoarte sau al generatorului de rapoarte însuși. Rezultatul generatorului de rapoarte nu necesită depășirea interogării, dar generatorul de rapoarte vă permite să modificați compoziția grupărilor.

9. Salvarea și restaurarea setărilor constructorului

Metoda „GetSettings ()” vă permite să obțineți setările curente ale generatorului de rapoarte cu posibilitatea de a specifica care dintre ele (de exemplu: numai filtrare, filtrare și sortare ...).

Metoda „SetSettings ()” permite încărcarea setărilor generatorului de rapoarte cu posibilitatea de a specifica care dintre ele (de exemplu: numai filtrare, filtrare și sortare ...).

10. Grupări și câmpuri ale generatorului de rapoarte

Un parametru al generatorului de rapoarte este gruparea după rând sau coloană.

Principalele detalii ale grupării sunt

  • „Nume” (identificator de variabilă) (exemplu: „Nomenclatură”, „Contraparte” ...),
  • „Prezentare” (prezentare la ieșire) (exemplu: „Document de vânzare”, „Unitate de măsură”...),
  • „DataPath” (calea către câmpul de selecție a cererii) (exemplu:” Nomenclatură "," DocumentSales.Organization "...)

și, dacă gruparea este construită conform cărții de referință, atunci și

  • „DimensionType” (una dintre opțiunile de filtrare după valorile câmpului: ierarhie (membri și grupuri), numai ierarhie (numai grupuri) sau membri (numai membri)).

În plus, există mai multe proprietăți care vă permit să atribuiți machete grupării, care vor fi folosite la ieșirea într-un document de foaie de calcul.

  • „Aspect” este numele regiunii din aspectul generatorului de rapoarte sau un aspect separat utilizat la afișarea unei grupări.
  • „Aspect ierarhic” este numele zonei din aspectul Generator de rapoarte sau un aspect separat utilizat la afișarea ierarhiei de grupare.
  • „FooterLayout” este numele zonei din aspectul constructorului sau un aspect separat utilizat la afișarea subsolului de grupare.
  • „HierarchyFooterLayout” este numele zonei din aspectul generatorului sau un aspect separat utilizat la afișarea subsolului ierarhiei de grupare.
  • „BasementLayers” - o serie de planuri de subsol pentru diferite niveluri de grupare.
  • „Level Layouts” - o serie de aspecte pentru diferite niveluri de grupare.

Câmpul generator de rapoarte este unul dintre câmpurile selectate. Principalele detalii ale domeniului sunt

  • „Nume” (identificator de câmp) (exemplu: „Cantitate”, „Cod de nomenclatură”, „Perioada” ...),
  • „Prezentare” (prezentare în ieșire) (exemplu: „Cantitate”, „Cod”, „Perioadă” ...) și
  • „Calea datelor” (calea către câmpul de selecție a interogării) (exemplu: „Cantitate”, „Nomenclatură. Cod”, „Perioada” ...).

Există o serie de lucruri pe care le puteți face cu o listă de grupări sau câmpuri.

  • „Inserare ()” - adăugați o grupare/câmp la poziția specificată.
  • „Adăugați ()“ - adăugați o grupare / câmp la sfârșitul listei.
  • „Index ()” - obțineți indexul grupării/câmpului din listă.
  • „Număr ()“ - obțineți numărul de grupări / câmpuri din listă.
  • „Găsiți ()“ - găsiți o grupare / câmp în listă după nume.
  • „Ștergeți ()” - ștergeți lista de grupări / câmpuri.
  • „Obțineți ()“ - obțineți gruparea / câmpul după index.
  • „Mutați ()” - mutați gruparea/câmpul după numărul specificat de poziții.
  • „Eliminați ()“ - eliminați o grupare / câmp din listă.

11. Limbajul constructorului

Generatorul de rapoarte are propriul său limbaj. Acesta este un limbaj de interogare comun, completat cu constructe „(…)”. Folosind aceste construcții, puteți abandona metoda FillSettings () și puteți personaliza generatorul de rapoarte în corpul interogării.
Astfel, puteți personaliza articolele „SELECT”, „UNDE”, „COMANDA PENTRU”, „REZULTATE PENTRU”, și, de asemenea, puteți face alte lucruri interesante. În acest caz, textul principal al interogării constructorului va fi setările implicite, în timp ce constructele (...) vor descrie setările disponibile.

Dacă câmpul de selecție vă permite să obțineți ceva printr-un punct, atunci puteți specifica „.” *” După câmp, atunci utilizatorul va putea selecta detaliile câmpului. De exemplu, „Nomenclatură. *” Vă permite să sortați după „Nomenclatură.Cod” sau să filtrați după „Nomenclatură.Serviciu”. Dar „Cantitate. *” nu are sens, deoarece câmpul „Cantitate” nu are detalii, ceea ce înseamnă că este suficient să indicați pur și simplu „Cantitate”.

Câmpurile specificate în construcția SELECT limitează lista de câmpuri disponibile utilizatorului.
Câmpurile specificate în constructul „UNDE” limitează lista de câmpuri care pot fi utilizate în filtru.
Câmpurile specificate în construcția „ORDER BY” limitează lista câmpurilor de sortat.
Câmpurile specificate în construcția „PRE TOTAL” limitează lista de câmpuri pentru gruparea totalurilor.

Și acum pentru lucrurile interesante.

in primul rand, în textul principal al cererii, puteți folosi și construcțiile (...) în parametrii surselor. De exemplu, dacă în loc de
| DE LA
| Registrul de acumulare. Soldurile de mărfuri ale companiei. Rămășițele (și data de încheiere)
A arăta
| DE LA
| Registrul de acumulare. Soldurile de mărfuri ale companiei. Resturile ((& Data de încheiere))
atunci, în acest caz, va fi posibil să setați un filtru după câmpul „EndDate”.

În același timp, în primul caz, este necesară setarea parametrului generatorului de rapoarte „Data de încheiere”, în al doilea caz, acest lucru nu este necesar, în plus, dacă selectarea prin câmpul „Data de încheiere” nu este specificat, atunci acest parametru din tabelul „Registrul de acumulare.nu va fi luat în considerare.

În al doilea rând, sursele din textul interogării pot fi marcate ca opționale prin plasarea lor în construcția „(…)”. De exemplu, dacă compuneți un astfel de text de solicitare

| ALEGE


| LotProductsCompaniesBalances.QuantityBalance AS QuantityByBatch
| (SELECT
| Soldurile de mărfuri ale Societății Soldurile Nomenclatorului AS Nomenclatorul,
| Soldul de mărfuri al companiei Sold. Cantitate Sold AS Cantitate,
| O mulțime de mărfuriCompaniiSolduri.CantitateBalance AS CantitateDupă loturi)
| DE LA
| Registrul de acumulare.Soldurile de mărfuri ale companiei.Rămâne ca solduri de mărfuri Soldurile companiei
| (STÂNGA ÎNSCRIEȚI REGISTRUL DE ACUMULARE.MULTE SOCIETATE DE BĂRURI. SOLDURI CA O MULTE MĂRfuri SOLDURI COMPANIE
| După solduri de mărfuriCompany Balances.Nomenclature = Loturi de mărfuriCompany Balances.Nomenclature)
| TOTALS SUM (Cantitate), SUM (QuantityByLots) BY
| SUNT COMUNE,
| Nomenclatură

atunci îmbinarea stângă de către registrul de lot va fi efectuată numai dacă câmpul „QuantityByBatch” este prezent în lista câmpurilor selectate.

În al treilea rând, în parametrii surselor, puteți specifica că în cazul setării filtrelor, dacă este posibil, acestea să fie aplicate nu rezultatului executării unei interogări folosind elementul „UNDE”, ci sursei în sine. Astfel, în loc de
| Registrul de acumulare.Baluri de mărfuriCompanie.Rămășițe ()

are sens să scrii

| Registrul de acumulare.Soldurile de mărfuri ale companiei.Rămănuțe (, (Nomenclatură. *, Depozitul companiei. *, Comandă. *, Preț de vânzare cu amănuntul, Caracteristică Nomenclatură. *))

Bine, în al patrulea rând, cel mai delicios, după părerea mea. Dacă în sursă este indicat parametrul „Frecvență” (pentru tabelele care permit obținerea cifrei de afaceri), acesta poate fi setat și ca „(…)”, iar ca urmare a unei mici manipulări cu textul interogării constructorului, putem utilizați grupări pe perioade.

Exemplu: | SELECTARE PERMIS | PartyGoodsCompanyObotory.Nomenclature, | SUMA (O mulțime de bunuriCompaniesTurnover.CostArrival) AS CostInvest, | SUMA (O mulțime de BunuriCompaniesTurnover.CostExpense) AS CostExpense | | DE LA | Registrul de acumulare.PartyCompanyGoods.Turnover (, (& Periodicitate), | (Nomenclatură. *)) AS Lot of CommoditiesCompany | ÎNCĂRCARE PENTRU | PartyGoodsCompaniesObototy.Nomenclatura | | TOTALE SUMA (CostPrihod), SUM (Cost Cheltuieli) ON | GENERAL, | Nomenclatură | | (SELECT | Lot de mărfuri CompanyTurnovers.Nomenclatură. *, | Registrator. *, | BeginningPeriod (Perioada, Zi) AS PeriodDay, | BeginningPeriod (Perioada, Săptămâna) AS PeriodWeek, | BeginningPeriod (Perioada, Decada) AS PeriodDecade, | BeginningPeriod Month ) AS Perioada Luna, | Începutul perioadei (Perioadă, Trimestru) AS PerioadaTristrum, | Începutul perioadei (Perioada, Semăn de an) AS PerioadaSemian, | Începutul perioadei (Perioada, Anul) AS Perioada Cost Cheltuieli) AS Cost Cheltuieli) | | (COMANDĂ DE | Lot de bunuriCompanyObototy.Nomenclatură. *, | Registrator. *, | CostPrihod, | Cost Cheltuieli) | | (UNDE | O mulțime de bunuriCompanyTurnooms.Nomenclatură. *, | Registrator. *, | SUM (Lot ofGoodsCompanyTurnovers.CostIncoming) AS CostIncome, | SUM (Lot ofGoodsCompanyTurnovers.CostExpense) AS CostExpense) | | (TOTALURI PENTRU | Nomenclatură. *, | Registrator. *, | Începutul perioadei (Perioada, Ziua) AS PeriodDay, | Începutul perioadei (Perioada, Săptămâna) AS PeriodWeek, | Începutul perioadei (Perioada, Decada) AS PeriodDecade, | Începutul perioadei (perioada, luna ) AS Perioada Luna, | Începutul perioadei (perioada, trimestrul) AS PeriodQuarter, | Începutul perioadei (perioada, jumătatea anului) AS PerioadaSemian, | Începutul perioadei (perioada, anul) AS PerioadaAn)

Există o nuanță, pentru ca gruparea după perioade să funcționeze, trebuie să adăugați un filtru după parametrul „Frecvență”. Pentru a nu face acest lucru manual, pentru comoditate, îl puteți adăuga programatic înainte de a rula generatorul de rapoarte și îl puteți șterge după execuție, astfel încât să nu vă deranjeze, deoarece este imposibil să înțelegeți un astfel de filtru din punctul de vedere al bun simț. Se face așa ceva

IfReportBuilder.AvailableFields.Find („Frecvență”)<>Nedefinit Apoi Periodicitate = Nedefinit; IfReportBuilder.DimensionsRows.Find ("PeriodYear")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodYear")<>Nedefinit Apoi Periodicitate = 9; EndIf; IfReportBuilder.DimensionsRows.Find ("PeriodSemyear")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodHalf Year")<>Nedefinit Apoi Periodicitate = 8; EndIf; IfReportBuilder.DimensionsRows.Find ("PeriodQuarter")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodQuarter")<>Nedefinit Apoi Periodicitate = 7; EndIf; IfReportBuilder.DimensionsRows.Find ("PeriodMonth")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodMonth")<>Nedefinit Apoi Periodicitate = 6; EndIf; IfReportBuilder.DimensionsRows.Find ("PeriodDecade")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodDecade")<>Nedefinit Apoi Periodicitate = 5; EndIf; IfReportBuilder.DimensionsRows.Find ("PeriodWeek")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodWeek")<>Nedefinit Apoi Periodicitate = 4; EndIf; IfReportBuilder.DimensionsStrings.Find ("PeriodDay")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("PeriodDay")<>Nedefinit Apoi Periodicitate = 3; EndIf; IfReportBuilder.DimensionsStrings.Find ("Logger")<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find ("Logger")<>Nedefinit SAU Generator de rapoarte.SelectedFields.Find ("Logger")<>Nedefinit Atunci Periodicitate = 2; EndIf; Dacă Frecvenţa<>Nedefinit Apoi SelectionFieldByFrequency = ReportBuilder.Selection.Add ("Frecventa"); SelectionFieldBy Periodicity.Value = Periodicitate; SelectionFieldByFrequency.Usage = Adevărat; EndIf; EndIf; Builder.Run (); Dacă câmpul de selecție după frecvență<>Nedefinit ThenReportBuilder.Collection.Remove (ReportBuilder.Selection.Index (SelectionFieldBy Periodic)); EndIf;

12. Personalizarea constructorului

Pentru a oferi utilizatorului posibilitatea de a modifica lista de grupări, filtrare, câmpuri selectate sau sortare, este suficient să creeze atributul „Builder” al raportului și să plaseze un câmp de tabel pe formularul de raport și să-l specifice ca date. sursa „Builder.DimensionsRows”, „Builder.DimensionsColumns” , „Builder.Choose”, „Builder.ChosenFields” sau „Builder.Order”.

În plus, puteți specifica, de asemenea, „Builder.AvailableFields” ca sursă de date și, astfel, mai întâi să vedeți lista câmpurilor disponibile și, în al doilea rând, folosind meniul contextual adăugați câmpuri la grupări, selecție, câmpuri selectate sau filtru.

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

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

Exemplu de cerere:

SELECTAȚI
Bănci. Nume,
Bănci.CorrAccount
DIN
Director.Bănci AS 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 metoda eficienta obtinerea de informatii. După cum puteți vedea din exemplul de mai sus, în limbajul de interogare trebuie să faceți apel cu numele metadatelor (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 datele, este suficient să folosiți construcțiile „SELECT” (select) și „FROM” (from). Cea mai simplă cerere după cum urmează:

SELECT * FROM Directoare.Nomenclatură

Unde „*” înseamnă selecția tuturor câmpurilor din tabel, iar References.Nomenclature este numele tabelului din baza de date.

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

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

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

ÎNCĂRCARE PENTRU
<ИмяПоля1>

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

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

V aceasta cerere selectăm datele câmpurilor „FieldName1” și „FieldName1” din tabelele „TableName1” și „TableName”, atribuim sinonime câmpurilor folosind operatorul „AS”, le unim conform unei anumite condiții „TableCondition”.

Din datele primite, selectăm numai datele care îndeplinesc condiția din „WHERE” „DataFeedback Condition”. În continuare, grupăm interogarea după câmpul „FieldName1”, însumând „FieldName2”. Creăm totaluri pentru câmpul „FieldNameField1” și câmpul final „FieldName2”.

Ultimul pas este sortarea cererii folosind construcția ORDER BY.

Constructii generale

Să luăm în considerare construcțiile generale ale limbajului de interogare 1C 8.2.

PRIMULn

Prin intermediul acest operator puteți obține n numărul primelor înregistrări. Ordinea intrărilor este determinată de ordinea din cerere.

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

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

PERMIS

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

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

SELECTARE PERMIS
Informații suplimentare Store.Link
DIN
Referință. Depozitarea informațiilor suplimentare

VARIAT

Utilizarea „DIFERENT” vă va permite să excludeți șirurile duplicat de la introducerea rezultatului interogării 1C. Dublarea înseamnă că toate câmpurile cererii se potrivesc.

SELECTAȚI PRIMILE 100
Bănci. Nume,
Bănci.Cod AS BIK
DIN
Director.Bănci AS Bănci

EmptyTable

Acest construct este rar folosit pentru a combina interogări. La alăturare, poate fi necesar să specificați un tabel imbricat gol într-unul dintre tabele. Operatorul „EmptyTable” este potrivit pentru aceasta.

Exemplu din ajutorul 1C 8:

SELECTARE Număr de referință, TABEL ALTO (Nom, Tov, Cant.) AS Compoziție
DIN Document.Cheltuiala
COMBINA TOATE
SELECTARE Număr de referință, Compoziție (Număr rând, articol, cantitate)
DIN Document.Factură Document.Factură.Conținut.*

ESTE NUL

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

SELECTAȚI
NomenclaturăRef.Ref.
Există NULL (Echilibrul articolului. Soldul cantității, 0) AS Soldul cantității
DIN


Îl poți folosi în alt mod. De exemplu, dacă pentru fiecare rând nu se știe în ce tabel există valoarea:

IS NULL (InvoiceInvoiceReceived.Date, InvoiceInvoiced.Date)

AS 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 constructe sunt foarte asemănătoare - vă permit să obțineți o reprezentare șir valoarea dorită... Singura diferență este că REPREZENTAREA convertește orice valoare într-un tip de șir, iar REPREZENTAREA DE REFERINȚĂ convertește numai valorile de referință. REPREZENTAREA DE REFERINȚĂ este recomandată a fi utilizată în interogările sistemului de compunere a datelor pentru optimizare, cu excepția cazului în care, desigur, câmpul de date de referință este planificat să fie utilizat în filtre.

SELECTAȚI
Vizualizare (Link), // rând, de exemplu „Raportul anticipat nr. 123 din 10.10.2015
Reprezentare (Marcă de ștergere) AS Textul de ștergere, // șir, „Da” sau „Nu”
Reprezentare Referință (Marcă de ștergere) AS Marcaj de ștergere Boolean // Boolean, adevărat sau fals
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ță.

Tipul de referință Express 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 (Cost.Subconto1 Tabel ca referință.Articole de cost) .ActivityTypeFor Tax Cost Accounting

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 puteți compara câmpuri
lungime nelimitată și câmpuri de tipuri incompatibile
„, Este necesar să se exprimi astfel de câmpuri după cum urmează:

EXPRESS (Comentează AS Line (150))

DIFERENȚĂ

Obțineți gratuit tutoriale video 267 1C:

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

ALEGE DIN
Spr
LEFT JOIN Registrul de acumulare.ProduseÎn Depozite.Lăsat AS Mărfuri rămase
Software NomenclatureRef.Ref = ImplementedCommentsComponentsRemains.Nomenclature
UNDE ESTE SOLDUL MARFURILOR.Cantitatea Soldul ESTE NUL

Puteți defini tipul de date într-o interogare după cum urmează: utilizând funcțiile TYPE () și TYPE () sau utilizând operator logic LEGĂTURĂ. Cele două funcții sunt similare.

Valori predefinite

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

Exemplu de utilizare:

WHERE Nomenclature.NomenclatureType = Valoare (Directory.NomenclatureType.Product)

WHERE Counterparties.Contact Information Tip = Valoare (Enumeration.Contact Information.Type.Phone)

WHERE Account Balances.Account = Valoare (Plan de conturi. Self-sustaining.ProfitsLoss)

Conexiuni

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

ÎNSCRIEȚI ȘÂNGA și DREAPTA

Îmbinările sunt folosite pentru a lega două tabele în funcție de o anumită condiție. Caracteristică la ARTICULAȚIA STÂNGA prin aceea că luăm primul tabel specificat în întregime și legăm al doilea tabel după condiție. 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 NUL.

articulația din dreapta în limbajul 1C absolut la fel Conexiune STÂNGA, cu excepția unei diferențe - în CONEXIUNEA CORECTA 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, le unește doar pe cele la care se poate alătura după condiție.

De exemplu:

DIN

CONEXIUNE COMPLETA
Director.Bănci AS Bănci

PE

Limbajul de interogare va returna ambele tabele în întregime numai dacă este îndeplinită condiția de alăturare a înregistrărilor. Spre deosebire de unirea stânga/dreapta, este posibil ca NULL-urile să apară în două câmpuri.

CONEXIUNEA INTERNA

CONEXIUNEA INTERNA diferă de cea completă prin aceea că afișează numai acele înregistrări care ar putea fi conectate prin condiția specificată.

De exemplu:

DIN
Director. Contractori AS Clienţi

CONEXIUNEA INTERNA
Director.Bănci AS Bănci

PE
Clients.Name = Banks.Name

Această solicitare va returna doar liniile în care banca și contrapartea au același nume.

Asociațiile

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

Adică sistemul funcționează la fel ca de obicei, doar pentru un tabel temporar.

Cum se utilizează SOFTWARE-ul INDEX

Cu toate acestea, există un punct de reținut. Construirea unui index pe un tabel temporar necesită, de asemenea, timp. Prin urmare, este recomandabil să folosiți construcția "" numai dacă se știe cu siguranță că nu vor fi 1-2 înregistrări în tabelul temporar. În caz contrar, efectul poate fi opus - performanța câmpurilor indexate nu compensează timpul de construire a indexului.

SELECTAȚI
Currency RatesSliceLast.Currency AS Moneda,
Rate valutareSliceLast.Course
POST Ratele valutare
DIN
Informații Register.Currency Rates.SliceLast (& Period,) AS Currency RatesSliceLast
INDEX PRIN
Valută
;
SELECTAȚI
Preturi
PreturiNomenclaturi .Pret,
Nomenclaturi de prețuri, monede,
Ratele valutare.
DIN
Registrul de informații.NomenclaturăPrețuri.FățiuneUltima (& Perioada,
Nomenclatura B (& Nomenclatură) AND PriceType = & PriceType) AS Prețuri
LEFT UNION Currency Rates AS Ratele valutare
BY RatesNomenclature.Currency = RatesCurrency.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.

Sunt disponibile următoarele funcții:

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

Exemplul # 1:

SELECTAȚI
Vânzarea de bunuri, servicii, bunuri, nomenclatură,
SUMA (Vânzarea de bunuri, servicii, bunuri. Cantitate) AS Cantitate,
AMOUNT (Vânzarea de BunuriServiciiBunuri.Suma) AS Sumă
DIN

ÎNCĂRCARE PENTRU
Realizare BunuriServiciiMarfuri.Nomenclator

Solicitarea primește toate rândurile cu mărfuri și le rezumă pe cantitate și sume în contextul articolului.

Exemplul nr. 2

SELECTAȚI
Bănci. Cod,
CANTITATE (DIFERATE Bănci.Link) AS CantitateDouble
DIN
Director.Bănci AS Bănci
ÎNCĂRCARE PENTRU
Codul băncilor

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

Totalurile sunt o modalitate de a obține date dintr-un sistem ierarhic. Pentru câmpurile de rezumat, pot fi utilizate funcții de agregare, ca și pentru grupări.

Una dintre cele mai populare modalități de a utiliza totalurile în practică este anularea în loturi de mărfuri.

SELECTAȚI




DIN
Document.Realizarea de BunuriServicii.Bunuri AS Vânzarea de BunuriServiciiBunuri
FILTREAZĂ DUPĂ

REZULTATE
SUMA (cantitate),
SUMA (Suma)
PE
Nomenclatură

Rezultatul interogării va fi următorul ierarhic:

Rezumat general

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

SELECTAȚI
Realizare BunuriServiciiMarfuri.Nomenclatura AS Nomenclatura,
Realizare BunuriServiciiMarfuri.Link AS Document,
Realizare bunuri, servicii, marfuri Cantitate AS Cantitate,
Vânzare de mărfuriServiciiBunuri.Suma AS Sumă
DIN
Document.Realizarea de BunuriServicii.Bunuri AS Vânzarea de BunuriServiciiBunuri
FILTREAZĂ DUPĂ
Implementarea GoodsServicesGoods.Link.Date
REZULTATE
SUMA (cantitate),
SUMA (Suma)
PE
SUNT COMUNE,
Nomenclatură

Ca rezultat al executării interogării, obținem următorul rezultat:

În care nivelul 1 de grupare este agregarea tuturor câmpurilor solicitate.

Comanda

Operatorul ORDER BY este utilizat pentru a sorta rezultatul interogării.

Sortarea pentru tipurile primitive (șir, număr, boolean) urmează regulile obișnuite. Pentru câmpurile de tipuri de referință, sortarea are loc după reprezentarea internă a legăturii (identificatorul unic), și nu după cod sau prin reprezentarea legăturii.

SELECTAȚI

DIN
Referință.Nomenclatura AS Nomenclatură
FILTREAZĂ DUPĂ
Nume

Interogarea va afișa o listă cu numele catalogului de stocuri, sortate alfabetic.

Comanda automată

Rezultatul unei interogări fără sortare este un set de rânduri prezentat haotic. Dezvoltatorii platformei 1C nu garantează ieșirea șirurilor de caractere în aceeași secvență atunci când execută aceleași interogări.

Dacă trebuie să afișați înregistrările tabelului într-o ordine consecventă, trebuie să utilizați constructul „Autoorder”.

SELECTAȚI
Nomenclatură Nume AS Nume
DIN
Referință.Nomenclatura AS Nomenclatură
COMANDĂ AUTOMATĂ

Mesele virtuale

Tabelele virtuale în 1C sunt o caracteristică unică a limbajului de interogare 1C, care nu se găsește în alte sintaxe similare. Masa virtuala - cale rapidă obținerea de informații de profil din registre.

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

  • o tăietură din prima;
  • o tăietură a acestuia din urmă.
  • resturi;
  • revoluții;
  • solduri si cifre de afaceri.
  • mișcări din subconto;
  • revoluții;
  • RPM Dt Kt;
  • resturi;
  • solduri si cifre de afaceri
  • subconto.
  • baza;
  • date grafice;
  • perioada efectivă de valabilitate.

Pentru un dezvoltator 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 dorită.

SELECTAȚI
ProduseÎn depozite Solduri și cifre de afaceri.Nomenclatură,
ProduseÎn DepoziteSolduriȘi Cifra de afaceri.CantitateSold initial,
MărfuriÎn depozite Solduri și cifre de afaceri.Cantitate Cifra de afaceri,
MărfuriÎn DepoziteSolduri Și Cifra de afaceri.NumărVenituri,
MărfuriÎn depozite Solduri și cifre de afaceri.CantitateConsum,
ProduseÎn DepoziteSolduri Și Cifra de Afaceri.CantitateSold Final
DIN
Registrul de acumulare.MărfuriÎn Depozite.Solduri ȘI Cifre de Afaceri CA MărfuriÎn DepoziteSolduri Și Cifre de Afaceri

O astfel de solicitare vă permite să primiți rapid un numar mare de date.

Parametrii tabelului virtual

Foarte aspect important lucrul cu tabele virtuale - folosind parametri. Parametrii tabelului virtual - parametri specializați pentru selecție și reglare.

Pentru astfel de tabele, se consideră incorectă utilizarea selecției în constructul „UNDE”. Pe langa faptul ca cererea devine neoptima, este posibil sa se primeasca date incorecte.

Un exemplu de utilizare a unor astfel de parametri:

Registru de acumulare.Produse în depozite.RemainsAndTurnovers (& BeginningPeriod, & EndPeriod, Month, Movements And PeriodBorders, Nomenclature = & DesiredNomenclature)

Algoritmul tabelelor virtuale

De exemplu, cel mai des folosit tabel virtual de tip „Reziduuri” 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 dimensiuni în tabelul cu totaluri.
  2. „Adăugați” 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

Constructor de interogări- un instrument integrat în sistemul de întreprindere 1C, care facilitează foarte mult dezvoltarea de interogări la baza de date.

Constructorul de interogări are un aspect destul de simplu, intuitiv interfață clară... Cu toate acestea, să aruncăm o privire mai atentă la utilizarea constructorului de interogări.

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

Descrierea constructorului de interogare 1C

Să aruncăm o privire mai atentă la fiecare filă de design. 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 pe care doriți să le afișați în raport. De altfel aici sunt descrise constructiile ALEGE .. 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 meselor virtuale, puteți seta parametrii tabelului virtual:

Fila Linkuri

Fila este folosită pentru a descrie conexiunile mai multor tabele, 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 este plin cu tot felul de parametri foarte importanți. Să luăm în considerare fiecare dintre proprietăți.

Gruparea Preluarea înregistrărilor:

  • Primul N- un parametru care returnează doar N înregistrări la interogare (operatorul FIRST)
  • Nu repetitiv- asigura unicitatea inregistrarilor primite (operator DIFERENT)
  • 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 interogare va fi: preluarea 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 o blocare a datelor, care asigură siguranța datelor din momentul în care sunt citite și până când sunt modificate (relevant doar pentru Mod automatîncuietori, design PENTRU SCHIMBARE).

Sindicate / Aliasuri Tab

În această filă a designerului de interogări, puteți seta capacitatea de a combina diferite tabele și aliasuri (construcție CUM). Tabelele sunt indicate în stânga. Dacă setați steagurile în fața mesei, se va folosi construcția UNION, în caz contrar - UNION ALL (cele două metode diferă). Partea dreaptă indică corespondența câmpurilor din diferite tabele, dacă nu este specificată nicio potrivire, interogarea va returna NULL.

fila Comanda

Aici specificați ordinea de sortare a valorilor (ORDER BY) - descendentă (DESCENT) sau crescătoare (RETURN).

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 Pachet de interogări

Pe fila designerului 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 de interogare în Generatorul de interogări

În colțul din stânga jos al constructorului de interogări există un buton Interogare, cu ajutorul căruia puteți vizualiza textul interogă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 - Simplu și mod convenabil pentru depanarea interogărilor complexe și obținerea rapidă a informațiilor. În acest articol, voi încerca să descriu cum să utilizați Consola de interogări și voi oferi un link pentru a descărca Consola de interogări.

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

Descărcați 1C Query Console

În primul rând, pentru a începe cu Query Console, trebuie să o descărcați de undeva. Tratamentele sunt de obicei împărțite în două tipuri - pe formulare gestionateși ordinare (sau, uneori, sunt numite pe 8.1 și 8.2 / 8.3).

Am încercat să combin aceste două vederi într-o singură procesare - în modul de operare necesar, se deschide formularul necesar (în modul controlat, consola funcționează numai î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 constructe în ceea ce privește performanța.

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

În stânga, în câmpul Interogare, puteți crea interogări noi și le puteți salva într-o structură arborescentă. Al doilea grup de butoane este doar responsabil pentru gestionarea listei de solicitări. Cu acesta, puteți crea, copia, șterge, muta o solicitare.

  • A executaAnchetă- executie simpla si obtinerea rezultatului
  • Rulați pachetul- vă permite să vizualizați toate cererile intermediare din lotul de cereri
  • Vizualizarea tabelelor temporare- vă permite să vedeți rezultatele care sunt returnate de interogări temporare în 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 uniformi pentru toate cererile- la instalare, procesarea acestuia nu șterge parametrii la trecerea de la cerere la cerere în lista generala cereri.

Setați parametrul ca o listă de valori este foarte simplu, atunci când selectați o valoare a parametrului, apăsați butonul pentru a șterge valoarea (cruce), sistemul vă va oferi să selectați un tip de date, unde trebuie să selectați „Lista de valori”:

De asemenea, în panoul de sus există foarte mult un buton pentru a apela setările consolei de interogări:

Aici puteți specifica opțiuni pentru interogările de salvare automată și opțiuni pentru executarea unei interogări.

Textul de interogare este introdus în câmpul de interogare din consolă. Acest lucru se poate face printr-o suită simplă de testare a interogărilor sau apelând un instrument special - designerul de interogări.

Constructorul 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 sunt și așa funcții utile cum ar fi ștergerea sau adăugarea caracterelor de întrerupere de linie (“|”) la cerere sau obținerea codului de solicitare într-o formă atât de convenabilă:

Solicitare = Solicitare nouă;
Solicitare.Text = "
| ALEGE
| Monede.Link
| DE LA
| Director.Monede AS Monede ”;
QueryResult = Query.Run ();

În câmpul inferior al consolei de interogări, este afișat câmpul rezultat al interogării, pentru care a fost creată această prelucrare:



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 puncte criticeî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 munca suboptimă a interogărilor și metodele de optimizare.

Selecții în tabelul virtual folosind construcția WHERE

Este necesar să se aplice filtre la detaliile tabelului virtual doar prin intermediul parametrilor BT. În niciun caz nu trebuie să utilizați construcția WHERE pentru selecție într-un tabel virtual, aceasta este o eroare grosolană 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:

SELECTAȚI

DIN
Registrul de acumulare.Decontari reciproceCuDeponentiOrganizatii.Solduri (
,
Organization = & Organization
Și Individ = & Individ) CUM Așezări reciproceCu DeponențiOrganizații

NECORESPUNZĂTOR:

SELECTAȚI
Decontari reciproceCuDeponentiOrganizatiiSolduri.SumaSold
DIN
Registrul de acumulare.Decontari reciproceCu DeponentiOrganizatii.Solduri (,) AS Decontari mutualeCu DeponentiOrganizatiiSolduri
UNDE
SettlementsWith DeponentsOrganizationsBalances.Organization = & Organizare
Și decontări reciproceCu deponențiOrganizațiiSolduri.Personal = & Persoane fizice

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

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

De exemplu, este extrem de nedorit ca optimizarea să se refere la câmpul de înregistrare a registrului - registratorul. Registratorul are un tip de date compus, incluzând toate tipurile posibile de documente care pot scrie date în registru.

NECORESPUNZĂTOR:

SELECTAȚI
Record Set.Recorder.Date,
Set de înregistrări.Număr
DIN
Registrul de acumulare.ProduseOrganizații AS SetRecords

Adică, de fapt, o astfel de solicitare se va referi nu la un singur tabel, ci la 22 de tabele de baze de date (acest registru are 21 de tipuri de registrator).

DREAPTA:

SELECTAȚI
ALEGERE
WHEN GoodsOrg.Registrar LINK Document.Realization of GoodsServices
THEN EXPRESS (GoodsOrg.Registrar AS Document.Realization of GoodsServices) .Data
WHEN GoodsOrg.Registrar LINK Document.Sosirea BunurilorServicii
THEN EXPRESS (GoodsOrg.Registrar AS Document.Arrival of GoodsServices) .Data
END AS Data,
ProduseOrg.Cantitate
DIN
Registrul de acumulare.ProduseOrg

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

DREAPTA:

SELECTAȚI
ProductsOrganizations.Date,
ProduseOrganizaţii.Număr
DIN
Registrul de acumulare.Bunuri ale organizațiilor AS Bunuri ale organizațiilor

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

Pentru optimizare, este inacceptabil să se utilizeze 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 doar metadate și obiecte BT, indexându-le în prealabil după câmpurile de conexiune.

NECORESPUNZĂTOR:

SELECTAȚI …

ARTICULAȚIA stangă (
SELECTAȚI DIN REGISTRUL DE INFORMAȚII.Limite
UNDE …
ÎNCĂRCARE DE...
) PE …

DREAPTA:

SELECTAȚI …
Limitele POST
DIN Registrul de informații.Limite
UNDE …
ÎNCĂRCARE DE...
INDEX PRIN…;

SELECTAȚI …
DIN Document.Realizarea BunuriServicii
Limite LEFT JOIN
PE …;

Unirea înregistrărilor cu tabele virtuale

Există situații în care sistemul nu funcționează optim la alăturarea unei mese virtuale cu altele. În acest caz, pentru a optimiza performanța interogării, puteți încerca să puneți tabelul virtual în tabelul temporar, amintindu-vă 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 fizice ale SGBD, ca urmare, se face o subinterogare pentru a le selecta, iar problema este similară cu punctul anterior.

Utilizarea filtrelor 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-ul nu poate efectua interogarea în mod optim dacă în interogare este impusă filtrarea după câmpuri neindexate. Dacă este luat un tabel temporar, este, de asemenea, necesar să indexați câmpurile de unire.

Trebuie să existe un index adecvat pentru fiecare condiție. Este potrivit un index care îndeplinește următoarele cerințe:

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

Dacă DBMS nu găsește indecșii corecti, atunci î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 elementele de bază ale aspectelor de optimizare a interogărilor pe care fiecare expert 1C ar trebui să le cunoască.

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

La elaborarea rapoartelor, uneori devine necesară afișarea unui raport pentru care datele nu pot fi obținute folosind limbajul de interogare. O astfel de situație poate apărea, de exemplu, dacă un anumit algoritm complex este utilizat pentru a calcula datele sau datele pentru ieșirea raportului nu sunt obținute din baza de informatii, și, de exemplu, din fișier extern... Generatorul de rapoarte oferă posibilitatea de a scoate un raport dintr-o sursă de date arbitrară.
Următoarele pot fi folosite ca sursă de date pentru ieșirea unui raport:

  • Tabelul valorilor,
  • Rezultatul cererii,
  • Domeniul de aplicare al celulelor de document Spreadsheet,
  • Parte tabulară,
  • Registru de acumulareRecordSet,
  • DatasheetRecordSet,
  • Contabilitate RegisterRecordSet,
  • Calcul RegisterRecordSet.
Pentru ca generatorul de rapoarte să afișeze un raport pentru o sursă de date arbitrară, este suficient să setați descrierea sursei de date la proprietatea generatorului DataSource. Proprietatea generatorului de rapoarte DataSource poate conține o valoare de tipul DataSource Description. Obiectul DataSourceDescription conține sursa de date în sine și, de asemenea, conține descrierea coloanelor sursei de date. Fiecare descriere a coloanei sursei de date conține:
  • Nume - conține numele coloanei din sursa de date,
  • PathData - conține o descriere a dependenței coloanelor unul față de celălalt. O coloană a cărei cale de date este obținută printr-un punct din calea de date a altui câmp este considerată un atribut al altei coloane. Dacă câmpul conține cuvântul Reprezentare, separat printr-un punct, atunci acest câmp este considerat o reprezentare pentru coloană, din calea de date a cărei reprezentare se obține. Exemple. Dacă coloana „Nomenclatură” are o cale către datele „Nomenclatură”, iar coloana „Cod” are o cale către datele „Nomenclatură.Cod”, atunci această coloană va fi considerată un atribut al coloanei „Nomenclatură”. Coloana cu calea către datele „Nomenclatură.Vizualizare” va fi considerată o vizualizare pentru coloana „Nomenclatură”,
  • Câmp - un semn că această coloană poate fi folosită ca câmp de raport,
  • Ordinea este un semn că ordonarea este posibilă pentru o coloană dată,
  • Selecția este un semn că este posibil să se impună selecția pe o anumită coloană,
  • Dimensiune - un semn că această coloană poate fi utilizată ca grupare a unui raport,
  • Total este un șir care conține o expresie pentru calcularea totalului. Pentru generatorul de rapoarte, expresia pentru acest șir se potrivește cu expresia pentru calcularea totalului utilizat în limbajul de interogare,
Când setați o sursă de date pentru obiectul DataSourceDescription, descrierile coloanei sunt create și completate automat.

Obiectul DataSource Description are un constructor, ca parametru al căruia poate fi trecută o sursă de date, pentru care se creează o descriere, în timp ce proprietatea DataSource va fi completată cu sursa de date transferată, descrierile coloanei vor fi completate cu informații despre coloane din sursa de date.

Un exemplu de configurare a unei surse de date pentru generatorul de rapoarte:

ReportBuilder.DataSource = NewDataSourceDescription (ValueTableResult);

Lucrarea ulterioară cu generatorul de rapoarte nu diferă de lucrul cu generatorul de rapoarte în modul de lucru cu o interogare: generatorul de rapoarte oferă funcționalitatea sa completă, cu excepția ieșirii totalurilor ierarhice. În plus, atunci când lucrați cu o sursă de date arbitrară, nu puteți primi o interogare de la generatorul de rapoarte care va fi folosită pentru a prelua date dintr-o bază de informații.

Lucrul cu o sursă de date personalizată Generator de interogări este același lucru cu lucrul cu un Generator de rapoarte personalizate.

Programarea 1C constă nu numai în scrierea unui program. 1C este un lingot de acțiuni ale utilizatorului și date cu care lucrează.

Datele sunt stocate într-o bază de date. Cererile 1C sunt o modalitate de a obține date din baza de date pentru a le arăta utilizatorului în formular sau pentru a le procesa.

Partea fundamentală a raportului este o solicitare 1C. În cazul raportului ACS, aceasta este cea mai mare parte a raportului.

Așezați-vă. Ia o pauza. Ia-o usor. Acum o să vă spun vestea.

Pentru a programa în 1C, nu este suficient să cunoașteți limbajul de programare 1C. De asemenea, trebuie să cunoașteți limba solicitărilor 1C.

Limbajul de interogare 1C este un limbaj complet separat, care ne permite să specificăm ce date trebuie să obținem din baza de date.

De asemenea, este bilingv - adică poți scrie în rusă sau în engleză. Este excepțional de asemănător cu limba interogări SQL iar cei care cunosc unul se pot relaxa.

Cum sunt utilizate cererile 1C

Când un utilizator pornește 1C în modul Enterprise, nu există niciun gram de date în clientul lansat. Prin urmare, atunci când trebuie să deschideți un director, 1C solicită date din baza de date, adică face o cerere 1C.

Cererile 1C sunt:

  • Cereri automate 1C
    Acestea sunt generate automat de sistem. Ați creat un formular de listă de documente. S-a adăugat o coloană. Aceasta înseamnă că atunci când deschideți acest formular în modul Enterprise, se va face o solicitare și se vor solicita date pentru această coloană.
  • Cereri 1C semi-automate
    Există multe metode (funcții) în limbajul 1C, la accesare care există o cerere către baza de date. De exemplu, GetObject ()
  • 1C solicitări manuale (scrise de programator în mod special ca o solicitare)
    Puteți scrie singur o solicitare 1C în cod și o puteți executa.

Crearea și executarea cererilor 1C

Solicitarea 1C este textul real al cererii în limbajul de interogare 1C.
Textul poate fi scris cu pixuri. Adică luați și scrieți (dacă cunoașteți această limbă).

Deoarece 1C promovează conceptul de programare vizuală, unde se poate face mult sau aproape totul fără a scrie cod cu pixuri, există un obiect special Query Constructor care vă permite să desenați un text de interogare fără a cunoaște limbajul de interogare. Cu toate acestea, miracolele nu se întâmplă - pentru aceasta trebuie să știți cum să lucrați cu constructorul.

După ce textul cererii 1C este gata, acesta trebuie executat. Pentru aceasta, există un obiect în codul 1C Solicitare (). Iată un exemplu:

Solicitare = Solicitare nouă ();
Request.Text = „SELECT
| Nomenclator.Ref.
| DE LA
| Referință.Nomenclatura AS Nomenclatură
| UNDE
| Nomenclatură.Serviciul ";
Selecție = Query.Run ().Selectare ();

Raport (Sample.Link);
Sfârșitul ciclului;

După cum puteți vedea în exemplu - după executarea cererii 1C, rezultatul vine la noi și trebuie să-l procesăm. Rezultatul este unul sau mai multe rânduri ale tabelului (într-o formă specială).

Rezultatul poate fi aruncat într-un tabel obișnuit:
Preluare = Query.Run (). Descărcare (); // Rezultatul este un tabel de valori

Sau pur și simplu ocolește liniile.
Selecție = Query.Run ().Selectare ();
While Fetch.Next () Buclă
// Faceți ceva cu rezultatele interogării
Sfârșitul ciclului;

Lucrul cu solicitări 1C

Principiile de bază ale cererilor 1C

Principiile de bază ale construirii unei interogări 1C sunt:
SELECT ListFields FROM TABLE TABLE WHERE Condiții

Un exemplu de construire a unei astfel de solicitări 1C:

SELECTAȚI
// listă de câmpuri de selectat
Legătură,
Nume,
Codul
DIN
// numele tabelului de unde selectăm datele
// lista de tabele este o listă de obiecte din fereastra configuratorului
Director.Nomenclatură
UNDE
// specifică selecția
Tip produs = & Serviciu // selectare după valoare externă
Sau Service // Variabilă „Service” de tip boolean, selecție după valoare True
FILTREAZĂ DUPĂ
//Triere
Nume

Lista tabelelor 1C

Puteți vedea numele tabelelor în fereastra configuratorului. Este necesar doar să scrieți „Director” în loc de „Directoare”, de exemplu „Director.Nomenclatură” sau „Document.Realizarea BunurilorServicii” sau „Registrul de acumulare.Vânzări”.

Pentru registre, există tabele suplimentare (virtuale) care vă permit să obțineți cifrele totale.

Informații Registry.RegisterName.Last Slice (& Date) - Solicitare 1C din registrul de informații, dacă este periodic, pentru o anumită dată

Registrul de acumulare. Nume registru. Solduri (& Data) - Solicitare 1C din registrul de sold pentru o anumită dată

Acumulare Register.RegisterName.Turnovers (& Data de începere, & Data de încheiere) - Solicitare 1C din registrul cifrei de afaceri pentru perioada de la data de început până la data de încheiere.

Principii suplimentare

Când solicităm o listă cu unele date, principiile de bază funcționează. Dar putem solicita și numere și solicitarea le poate calcula pentru noi (adăugați de exemplu).

SELECTAȚI
// Cantitate (FieldName) - numără cantitatea
// Câmp AS OtherName - redenumește câmpul
Număr (Link) AS Număr de documente postate
DIN

UNDE
Executat

Această solicitare 1C ne va returna numărul total de documente. Cu toate acestea, fiecare document are un câmp Organizație. Să presupunem că vrem să calculăm numărul de documente pentru fiecare organizație folosind o interogare 1C.

SELECTAȚI
// doar un câmp de document
Organizare,
// numără suma
Cantitate (Referință) AS Cantitate după organizație
DIN
Document.Realizare BunuriServicii
UNDE
Executat
ÎNCĂRCARE PENTRU

Organizare

Această solicitare 1C ne va returna numărul de documente pentru fiecare organizație (se mai spune „în contextul organizațiilor”).

Vom calcula suplimentar suma acestor documente folosind o cerere 1C:

SELECTAȚI
// doar un câmp de document
Organizare,
// numără suma

// calculează suma

DIN
Document.Realizare BunuriServicii
UNDE
Executat
ÎNCĂRCARE PENTRU
// trebuie folosit dacă lista de câmpuri conține o funcție de numărare () și unul sau mai multe câmpuri în același timp - atunci trebuie să grupați după aceste câmpuri
Organizare

Această solicitare 1C ne va returna și cantitatea de documente.

SELECTAȚI
// doar un câmp de document
Organizare,
// numără suma
Cantitate (link) AS Cantitate după organizație,
// calculează suma
Sumă (Suma document) Sumă AS
DIN
Document.Realizare BunuriServicii
UNDE
Executat
ÎNCĂRCARE PENTRU
// trebuie folosit dacă lista de câmpuri conține o funcție de numărare () și unul sau mai multe câmpuri în același timp - atunci trebuie să grupați după aceste câmpuri
Organizare
REZULTATE PENTRU General

Limbajul de interogare 1C este extins și complex și nu vom lua în considerare toate capacitățile sale într-o lecție - citiți următoarele lecții.

Pe scurt despre caracteristici suplimentare Limbajul de interogare 1C:

  • Unirea datelor din mai multe tabele
  • Interogări imbricate
  • Solicitare lot
  • Crearea propriilor tabele virtuale
  • Interogare dintr-un tabel de valori
  • Utilizarea funcțiilor încorporate pentru obținerea unei valori și manipularea valorilor.

1C Query Designer

Pentru a nu scrie manual textul solicitării - există un designer de interogări 1C. Doar faceți clic dreapta oriunde în modul și selectați 1C Query Builder.

Selectați tabelul dorit din stânga în designerul de interogări 1C și trageți-l la dreapta.

Selectați câmpurile necesare în designerul de interogări 1C din tabel și trageți spre dreapta. Dacă doriți nu doar să selectați un câmp, ci să îi aplicați o funcție de însumare - după glisare și plasare, faceți dublu clic pe câmp cu mouse-ul. După aceea, în fila Grupare, va trebui să selectați (glisați și plasați) câmpurile necesare pentru grupare.

Pe fila Condiții din designerul de interogări 1C, puteți selecta filtrele necesare în același mod (prin tragerea câmpurilor prin care veți face selecția). Nu uitați să alegeți condiția corectă.

În fila Comandă este indicată sortarea. În fila Totaluri - însumând totalurile.

Cu ajutorul designerului de interogări 1C, puteți studia orice interogare existentă. Pentru a face acest lucru, faceți clic dreapta pe textul cererii existente și selectați și designerul de interogări 1C - iar cererea va fi deschisă în designerul de interogări 1C.