Selecția generatorului de interogări 1c. Generatorul de rapoarte și Generatorul de interogări lucrează cu o sursă de date personalizată. Exemplu de utilizare a generatorului pentru a activa selecțiile într-un raport

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

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

Exemplu de cerere:

ALEGE
Banci.Nume,
Bănci.CorrAccount
DIN
Director.Bănci CUM Bănci

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

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

Descrierea constructelor limbajului de interogare

Structura de interogare

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

SELECT * FROM Directoare.Nomenclatură

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

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

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

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

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

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

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

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

Din datele primite, selectăm doar datele care îndeplinesc condiția din „UNDE” „Condiția de selecție a datelor”. În continuare, grupăm solicitarea după câmpul „Nume câmp 1”, însumând „Nume câmp 2”. Creăm totaluri pentru câmp „Field Name1” și câmpul final „Field Name2”.

Ultimul pas este sortarea cererii folosind constructul ORDER BY.

Proiecte generale

Să ne uităm la structurile generale ale limbajului de interogare 1C 8.2.

PRIMULn

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

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

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

PERMIS

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

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

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

VARIAT

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

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

EmptyTable

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

Exemplu din 1C 8 ajutor:

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

ISNULL

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

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


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

ISNULL(Data primirii facturii, Data emiterii facturii)

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

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

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

EXPRES

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

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

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

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

EXPRESS(Comentează AS Line(150))

DATA DIFERENTATA

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

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

ALEGE DIN
Ref
CONEXIUNEA STÂNGA ÎnregistrareAcumulări.ProduseÎnDepozite.Rămas ca produs rămas
Software NomenclatureRef.Link = Sold GoodsCommitteesRemains.Nomenclature
WHERE NU Produsele rămase Cantitatea rămasă ESTE NULL

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

Valori predefinite

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

Exemplu de utilizare:

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

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

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

Conexiuni

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

CONEXIUNEA STÂNGA și DREAPTA

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

De exemplu:

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

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

CONEXIUNE COMPLETA

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

De exemplu:

DIN

CONEXIUNE COMPLETA
Director.Bănci CUM Bănci

DE

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

INNER JOIN

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

De exemplu:

DIN
Director.Contrapărți AS Clienți

INNER JOIN
Director.Bănci CUM Bănci

DE
Clients.Name = Banks.Name

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

Asociațiile

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

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

Cum se utilizează INDEX BY

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

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

Gruparea

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

Există următoarele funcții:

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

Exemplul #1:

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

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

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

Exemplul nr. 2

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

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

Rezultate

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

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

ALEGE




DIN
Document Vânzări de bunuri și servicii Bunuri CUM se vinde bunuri și servicii Bunuri
FILTREAZĂ DUPĂ

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

Rezultatul interogării va fi următorul ierarhic:

Rezultate generale

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

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

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

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

Aranjare

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

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

ALEGE

DIN
Director.Nomenclatura AS Nomenclatura
FILTREAZĂ DUPĂ
Nume

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

Comanda automată

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

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

ALEGE
Nomenclatură.Nume AS Nume
DIN
Director.Nomenclatura AS Nomenclatura
COMANDĂ AUTOMATĂ

Mesele virtuale

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

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

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

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

ALEGE
Produse din depozite resturi si cifra de afaceri.
ProductsIn WarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsIn WarehousesRemainsAndTurnover.QuantityTurnover,
MărfuriÎnDepoziteRemainsAndTurnover.CantityIncoming,
MărfuriÎnDepoziteRămăși și Cifra de afaceri.CantitateConsum,
ProductsIn WarehousesRemainingsAndTurnover.CantityFinalRemaining
DIN
ÎnregistrareAcumulări.MărfuriÎnDepozite.Rămăși și Cifra de afaceri CA Mărfuri ÎnDepoziteRămăși și Cifra de afaceri

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

Opțiuni de masă virtuală

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

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

Un exemplu de utilizare a acestor parametri:

Registrul de acumulări, mărfuri în depozite, solduri și cifre de afaceri (& Începutul perioadei, & Sfârșitul perioadei, lunii, mișcările și limitele perioadei, Nomenclator = & Nomenclator obligatoriu)

Algoritm pentru tabele virtuale

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

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

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


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

Folosind Generatorul de interogări

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

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

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

Descrierea constructorului cererii 1C

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

fila Tabele și câmpuri

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

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

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

fila Conexiuni

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

Fila Grupare

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

fila Condiții

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

Filă avansată

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

Gruparea Selectarea înregistrărilor:

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

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

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

Fila Joins/Aliases

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

fila Comanda

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

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

Fila Lot de interogări

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

Butonul „Interogare” din designerul de interogări

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

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


Folosind consola de interogări

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

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

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

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

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

Descrierea consolei de interogări 1C

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

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

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

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

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

Parametri de solicitare:

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

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

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

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

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

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

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

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

Acest meniu are, de asemenea, funcții utile precum ștergerea sau adăugarea întreruperilor de linie („|”) la cerere sau primirea codului de solicitare în această formă convenabilă:

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

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



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

Optimizarea interogărilor

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

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

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

DREAPTA:

ALEGE

DIN
Registrul de acumulări, decontări reciproce cu participanții organizațiilor, solduri (
,
Organization = &Organizare
AND Individ = &Individual) CUM Decontări reciproce cu participanții organizațiilor Solduri

GRESIT:

ALEGE
Decontari reciproce cu Participantii Organizatiilor Solduri Suma Sold
DIN
Registrul de acumulări Decontări reciproce cu participanții organizațiilor Solduri (,) CUM Decontări reciproce cu participanții organizațiilor Solduri
UNDE
Decontări reciproce cu participanții la solduri organizații Organizație = & Organizație
ȘI Decontări reciproce cu participanții organizațiilor Solduri.Individ = &Individ

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

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

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

GRESIT:

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

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

DREAPTA:

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

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

DREAPTA:

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

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

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

GRESIT:

ALEGE…

LEFT JOIN (
SELECTARE FROM RegisterInformation.Limits
UNDE …
A SE GRUPA CU...
) DE …

DREAPTA:

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

ALEGE…
DIN Document.Vânzări de Bunuri și Servicii
Limite LEFT JOIN
DE …;

Unirea înregistrărilor cu mese virtuale

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

Utilizarea selecțiilor bazate pe câmpuri neindexate

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

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

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

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

Utilizarea SAU logic în condiții

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

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

A opta versiune a platformei 1C oferă destul de multe 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 ei este generatorul de rapoarte.

Aș dori să vorbesc despre ce este un generator de rapoarte în 1C, ce funcții îndeplinește și ce aplicații a găsit în programare.

Generator de rapoarte în 1C - ce este?

Acesta este un obiect de configurare care vă permite să afișați date într-o foaie de calcul sau într-o diagramă. Sursa de date poate fi:

  1. Rezultatul cererii;
  2. Zona celulară a unui document foaie de calcul;
  3. Parte 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 un atribut „Text” la care poate fi trimis textul solicitării, al cărui rezultat trebuie vizualizat.

Figura 1 arată o secțiune de cod care vă permite să utilizați „Report Builder” pentru a afișa un tabel arbitrar de valori

Deci, cazul de utilizare evident pentru constructor este să proiecteze rapoarte. O utilizare mai puțin evidentă pentru constructor este utilizarea sa de către utilizator pentru a personaliza diverse elemente ale unei interogări (grupări, selecții etc.).

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

Fig.2

Configurarea constructorului

Generatorul de rapoarte seamănă într-un fel cu un sistem de compunere a datelor și poate fi utilizat în cazurile în care sistemul de control al accesului este indisponibil dintr-un motiv sau altul sau există posibilitatea ca acesta să nu funcționeze corect.

La fel ca și generatorul ACS, acesta include:

  • Grupări (niveluri ierarhice la afișarea informațiilor);
  • Indicatori (valori pentru care este necesar pentru a obține rezultatul);
  • Câmpuri suplimentare calculate (detalii element, rezultatele acțiunilor cu valori);
  • Filtre (selecții);
  • Triere.

Setările de proiectare ale constructorului oferă diferite niveluri și precizii de detaliu.

Algoritm pentru utilizarea constructorului

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

  1. Declaram crearea unui nou obiect de tip ReportBuilder;
  2. În această etapă, puteți fie să utilizați Generatorul de interogări 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 folosind metoda obiectului generator FillSettings();
  4. Puteți refuza să utilizați un aspect de design standard creat folosind metoda de generare automată prin definirea proprietății obiect Layout a constructorului;
  5. Daca nu se foloseste DataSourceDescription, in aceasta etapa este necesara executarea cererii, se foloseste metoda Execute();
  6. Ultimul pas este lansarea metodei Output() ; ieșirea se poate face într-un document de foaie de calcul sau în elementul de formular corespunzător.

Utilizarea decriptării în builder

A treia linie din Fig. 1 include decodificarea celulelor rezultatului execuției constructorului.

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

  1. GroupingValues ​​​​- atunci când o celulă este activată, se va folosi valoarea grupării specificate în ea;
  2. Do not Fill – valoarea implicită, ceea ce înseamnă că transcrierea nu va fi folosită pentru rezultatul final;
  3. Transcriere – structura transcripției va fi completată cu valorile tuturor grupărilor din eșantionul original.

În plus, utilizatorul are posibilitatea de a seta independent decriptarea utilizând metoda ConfigureDecryption(). Secțiunea de cod care rulează această metodă este prezentată în Fig. 3

Fig.3

Exemplu de utilizare a generatorului pentru a activa selecțiile într-un raport

O mică parte 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 un raport extern și adăugând acestuia un atribut cu un nume arbitrar și tastând ReportBuilder (Fig. 4);

Fig.4

  1. Creăm un formular de raport și plasăm obiectul de interfață TabularField pe acesta, îl tastăm ca Selection și îl asociam cu 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 constructorul și setările sale suplimentare sunt indicate în fila corespunzătoare din Fig. 7;

Fig.7

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

  2. Procedura care afiseaza rezultatul constructorului este prezentata in Fig. 8 si este asociata cu apasarea 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, în cadrul unui articol este destul de dificil să demonstrezi toate capacitățile unui nou obiect, dar ni se pare că este posibil să ne facem o idee despre el și să începem să îl folosim ținând cont de cunoștințele acumulate.

1. Ce este un generator de rapoarte?

Un generator de rapoarte este un obiect care permite, pe baza textului și setărilor de interogare specificate, să obțină un rezultat ș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”, „Sumă”...),
  • câmpuri suplimentare (exemplu: „Articol.Serviciu”, „Cod.Cont”...),
  • filtru (exemplu: după articol specific, după grup de contrapărți...) și
  • sortare (exemplu: „Nomenclatură.Cod”, „Nume.Contreparte”...)

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

Înainte de ieșire, puteți stila aspectul generatorului de rapoarte folosind un aspect aspect.

Ieșirea rezultatului interogării generatorului de rapoarte este realizată cu o singură comandă.

2. Unde pot folosi generatorul de rapoarte?

Folosind generatorul de rapoarte, puteți proiecta cea mai mare parte a rapoartelor (exemplu: „Solduri de inventar”, „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: încărcarea unui articol într-un fișier xml sau procesare). postarea documentelor conform unui filtru dat).

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”, „OutputReportTitle”, „Output()”, „DesignLayout()”...).

3. Câteva despre concepte

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

Concept

Descriere

Măsurătorile rândurilor Lista grupărilor pentru care ieșirea va fi efectuată pe rând (exemplu: „Articol”, „Cont”...)
Măsurătorile coloanei Lista grupărilor pentru care ieșirea va fi efectuată pe coloane (exemplu: „Depozit”, „Luna”...).
Selecţie Un set de diverse filtre (de exemplu: după grup de contrapărți, după o anumită organizație...).
Ordin Un set de câmpuri de sortare (exemplu: „Cod articol”, „Document de vânzare. Responsabil”…).
Camp Unul dintre câmpurile de selectare a interogării (exemplu: „Articol”, „Cod.Cont”, „Cantitate”, „Sumă”...).
Câmpurile selectate Lista câmpurilor selectate include indicatori (exemplu: „Cantitate”, „Suma”...) și câmpuri suplimentare (detalii de grupare) (exemplu: „Nomenclatură.Grup”, „Cod.Cont”...).
Câmpuri disponibile Listă de câmpuri disponibile pentru adăugarea la grupare, 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ă gruparea, filtrarea, sortarea și câmpurile selectate nu sunt direct legate de câmpurile disponibile, ci sunt obiecte diferite.

Principala diferență este că câmpul disponibil nu are proprietatea „DataPath” (exemplu: „Nomenclature.Code”, „Cantitate”), deoarece aceasta este pur și simplu un fel de descriere a câmpului prin care se va încerca să se găsească o potrivire între câmpurile eșantion de solicitare în momentul de față adăugându-l la lista de grupări, filtre, sortări sau câmpuri selectate.

În același timp, nu este posibilă adăugarea programatică a unuia dintre câmpurile disponibile la oricare dintre listele de mai sus, deoarece, pe de o parte, câmpul disponibil nu are metode precum „AddToSelection()” sau „AddToSelectedFields() ”, și, pe de altă parte, atunci când adăugați un element nou la oricare dintre listele de mai sus, trebuie să specificați proprietatea „DataPath”, care nu coincide întotdeauna cu numele câmpului (de exemplu: câmpurile „Nomenclature.Parent” și „Nomenclature.Parent.Parent” au același nume „Parent”).

4. Caz de utilizare tipic pentru generatorul de rapoarte

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

  1. Creați un nou obiect „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 cererii, 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 generarea automată a aspectului de către generatorul de rapoarte și puteți atribui un aspect fix proprietății „Aspect”;
  6. Dacă este necesar, puteți atribui proprietatea „Design Layout” uneia dintre cele standard sau propriului aspect, iar dacă aspectul generat automat al generatorului de rapoarte a fost înlocuit cu unul fix, atunci executați „DesignLayout()” metodă;
  7. Apelați metoda „Run()”;
  8. Apelați metoda „Output()”.
Generator = Nou „Generator de rapoarte”; Builder.Text = "SELECT ALLOWED | Company CashRemains.StructuralUnit, | SUM(CompanyCashRemains.AmountRemaining) AS Amount | |FROM | RegisterAccumulations.CompanyCash.Remains(, (StructuralUnit.*)) | unitate | | TOTAL AMOUNT (Suma) | GENERAL, | StructuralUnit"; Builder.FillSettings(); //Aici puteți oferi utilizatorului posibilitatea //să modifice setările generatorului de rapoarte Builder.Layout = GetLayout("CustomLayout");
Builder.AppearanceLayout = GetAppearanceLayout(StandardAppearance.Classic);
Builder.DesignLayout();
Builder.Run();
Builder.Output();

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

Proprietate

Descriere

Text Conține textul solicitării 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.
Textul titlului Textul care va fi afișat în antetul raportului (exemplu: „Solduri de stoc la 01/01/2004”, „Vânzări pentru ianuarie 2004”...).
OutputReportTitle
Antet OutputTable
IeșireRezultate generale
OutputFooterTables
IeșireRaportFootment
Aceste proprietăți determină dacă titlul raportului, antetul tabelului, totalurile generale, subsolul tabelului și, respectiv, subsolul raportului sunt afișate.
Ieșire înregistrări detaliate Proprietatea este responsabilă pentru forțarea ieșirii sau interzicerea ieșirii înregistrărilor detaliate.
AutoDetailed Records Dacă proprietatea „AutoDetailed Records” este setată la True, atunci fiecare înregistrare detaliată va fi afișată numai dacă diferă de înregistrarea grupului.
Câmpuri disponibile Conține o listă de câmpuri disponibile pentru adăugare la grupări, filtre, câmpuri selectate și sortare.
Siruri de dimensiuni
DimensiuniColoane
Conține o listă de grupări, respectiv, pe rânduri și coloane.
Selecţie Conține o listă de filtre specificate pentru generatorul de rapoarte.
SelectedFields conține o listă de indicatori selectați și detalii de grupare.
Ordin conține o listă de câmpuri de sortare.
Opțiuni Conține o listă de parametri de constructor (declarați în corpul cererii de constructor folosind caracterul „&”).
Rezultat Conține rezultatul executării unei interogări de generator de rapoarte (un obiect de tip Query Result).

6. Procesarea transcrierilor utilizând Generatorul de rapoarte

Proprietatea „Umplere decriptare” conține una dintre cele trei opțiuni pentru completarea transcripției în timpul ieșirii:

Opțiunea 1: nu completați (nu folosiți transcrierea).

A doua opțiune: gruparea valorilor (la decodificarea 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, trebuie să procesați evenimentul documentului din foaia de calcul „Procesare de decriptare”, unde trebuie să analizați structura transferată și să efectuați anumite acțiuni.

Un punct important este că, în cea de-a treia opțiune, este imposibil să se efectueze ieșirea în documentul tabelar generat, deoarece atunci este imposibil să se proceseze transcrierea, a cărei procesare a evenimentului are loc în modulul formularului pe care se află câmpul documentului tabelar. .

Dacă se folosește a treia opțiune de completare a transcripției, atunci puteți utiliza metoda „SetupTranscript()”, concepută pentru a executa și afișa raportul ținând cont de transcrierea efectuată de utilizator.

Generatorul de rapoarte poate fi același sau unul nou. Când configurați o transcriere, toate filtrele personalizate ale generatorului de rapoarte vor fi eliminate și toate filtrele instalate din generatorul de interogări original vor fi adăugate, plus filtre bazate pe valorile de grupare din transcriere.

7. Întocmirea raportului

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

Proprietățile „ReportHeader Layout”, „TableHeaderLayout”, „DetailedRecordsLayout”, „TotalTotalsLayout”, „TableFooterLayout” și „ReportFooterLayout” conțin numele zonei din aspectul generatorului de rapoarte sau machetele individuale utilizate la afișarea, respectiv, antetul raportului. antet tabel, înregistrări detaliate, totaluri generale, subsol tabel și subsol raport într-un document foaie de calcul. Dacă numele domeniului se potrivesc cu numele din aspectul Generator de rapoarte, atunci nu este necesar să completați proprietățile.

Proprietatea Aspect aspect conține aspectul utilizat pentru stilul aspectului generatorului de rapoarte. Aspectul celulelor din aspectul aspect va fi aplicat celulelor din aspectul generator de rapoarte.

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

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

Proprietatea „Plasarea dimensiunilor în rânduri” 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 „Plasarea dimensiunilor în coloane” 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 doar la final.
Exemplu:

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

A doua opțiune: în antet și subsol (deasupra și sub grupările ulterioare și intrările detaliate).

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

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

Proprietate “ Plasarea totalurilor în coloane” definește una dintre cele patru moduri de afișare a totalurilor în coloane.

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

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

A 3-a opțiune: în subsol (în dreapta grupărilor ulterioare și a înregistrărilor detaliate, în stânga acestora este afișată doar o descriere a grupării).

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

Proprietate “ Plasarea detaliilor dimensiunilor în rânduri” definește una dintre cele trei opțiuni pentru afișarea detaliilor de grupare pe rând.

Prima opțiune: î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 “ Plasarea detaliilor măsurătorilor în coloane” 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 dimensiunile (în rânduri cu grupări).
Exemplu:

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

8. Rezultatele Generatorului de rapoarte

Metoda „Run()” execută solicitarea generatorului de rapoarte și populează proprietatea „Result”.
Folosind metoda „GetQuery()”, puteți obține interogarea generatorului de rapoarte care este executată atunci când este apelată metoda „Run()”.

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

Exemplu de ieșire într-un nou document foaie de calcul:
Builder.Output();

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

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

Dacă doriți să afișați rezultatul generatorului de rapoarte într-un tabel pivot sau diagramă pivot, atunci nu trebuie să utilizați metoda „Output()”, ci să completați proprietatea „Sursa datelor” a tabelului pivot sau diagramei pivot. . Sursa poate fi rezultatul generatorului de rapoarte sau al generatorului de rapoarte însuși. Rezultatul generatorului de rapoarte nu necesită reexecutarea 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()” vă permite să încărcați setările 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 o grupare după rânduri sau coloane.

Principalele detalii ale grupului sunt

  • „Nume” (identificator de detaliu) (exemplu: „Articol”, „Contraparte”...),
  • „Reprezentare” (prezentare în timpul ieșirii) (exemplu: „Document de vânzare”, „Unitate de măsură”...),
  • „PathtoData” (calea către câmpul de selecție a interogării) (exemplu: „Nomenclatură”, „DocumentSales.Organization”...)

și, dacă gruparea este construită conform directorului, atunci

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

În plus, există mai multe proprietăți care vă permit să atribuiți machete unui grup care va fi utilizat atunci când va fi trimis într-un document de foaie de calcul.

  • „Aspect” este numele zonei din aspectul generatorului de rapoarte sau un aspect separat utilizat în ieșirea grupării.
  • „Aspect ierarhic” este numele unei zone din aspectul generatorului de rapoarte sau un aspect separat utilizat la afișarea unei ierarhii de grupare.
  • „Aspect subsol” este numele zonei din aspectul constructorului sau un aspect separat utilizat la afișarea subsolului grupului.
  • „HierarchyFooterLayout” este numele zonei din aspectul generatorului sau un aspect separat utilizat la randarea subsolului unei ierarhii de grupare.
  • „Level Basement Layouts” - o serie de planuri de subsol pentru diferite niveluri de grupare.
  • „Level Layouts” - o serie de aspecte pentru diferite niveluri de grupări.

Câmpul generator de rapoarte este unul dintre câmpurile selectate. Detaliile principale ale câmpului sunt

  • „Nume” (identificator de câmp) (exemplu: „Cantitate”, „Cod de nomenclatură”, „Perioada”...),
  • „Reprezentare” (reprezentare în timpul ieșirii) (exemplu: „Cantitate”, „Cod”, „Perioada”...) și
  • „PathKData” (calea către câmpul de selecție a interogării) (exemplu: „Cantitate”, „Nomenclatură. Cod”, „Perioada”...).

Puteți efectua o serie de acțiuni cu o listă de grupări sau câmpuri.

  • „Insert()“ - adăugați o grupare/câmp la poziția specificată.
  • „Add()“ - adăugați o grupare/câmp la sfârșitul listei.
  • „Index()” - obțineți indexul de grupare/câmp în listă.
  • „Cantitate()” - obțineți numărul de grupări/câmpuri din listă.
  • „Find()“ - găsiți o grupare/câmp în listă după nume.
  • „Clear()“ - șterge lista de grupări/câmpuri.
  • „Get()” - obțineți o grupare/câmp după index.
  • „Shift()” - mutați gruparea/câmpul cu numărul specificat de poziții.
  • „Delete()” - 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 obișnuit, completat cu constructe „(…)”. Folosind aceste constructe, puteți abandona metoda „FillSettings()” și puteți configura generatorul de rapoarte în corpul cererii.
În acest fel, puteți personaliza elementele „SELECT”, „UNDE”, „COMANDA PENTRU”, „SUMAR PENTRU” și, de asemenea, puteți face alte câteva lucruri interesante. În acest caz, corpul cererii de constructor 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ă selectaț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 constructul „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 constructul „ORDER BY” limitează lista câmpurilor care trebuie sortate.
Câmpurile specificate în construcția „REZULTATE PO” limitează lista câmpurilor pentru gruparea totalurilor.

Acum, pentru lucrurile interesante.

in primul rand, în textul principal al cererii se pot folosi și construcții (...) în parametrii sursei. De exemplu, dacă în schimb
|DIN
| ÎnregistrareAcumulări.Produse rămase ale companiei.Rămăsuri (&Data de încheiere)
indica
|DIN
| Registrul de acumulare. Rămâne de bunuri ale companiei. Rămâne ((&Data de încheiere))
atunci, în acest caz, va fi posibil să setați un filtru după câmpul „Data de încheiere”.

În același timp, în primul caz este necesar să setați parametrul generatorului de rapoarte „Data de încheiere”, în al doilea caz nu este necesar, în plus, dacă nu este setată selecția din câmpul „Data de încheiere”, atunci acest parametru din tabelul „Registrul de acumulare. Produse rămase ale Companiei. Resturi rămase” nu va fi deloc utilizat.nu va fi luat în considerare.

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

|SELECT


| O mulțime de bunuriCompanyRemains.QuantityRemaining AS QuantityByLots
|(SELECT
| Produse rămase ale companiei Produse rămase Nomenclatura AS Nomenclatura,
| Produse rămase ale companieiRemainings.QuantityRemaining AS Cantitate,
| O mulțime de bunuriCompanyRemains.QuantityRemaining AS QuantityByLots)
|DIN
| ÎnregistrareAcumulări.Produse rămase ale companiei.Rămăsuri AS Produse rămase ale companieiRămăsuri
| (CONEXIUNEA STÂNGA Înregistrați acumulări. Loturi de bunuri ale companiei. Rămâne ca și loturi de bunuri ale companiei.
| Software Remaining Products of the CompanyRemainings.Nomenclature = O mulțime de produse ale CompanyRemainings.Nomenclature)
|REZULTATE SUM(Cantitate), SUM(CantitateByLot) DE
| SUNT COMUNE,
| Nomenclatură

atunci îmbinarea stângă prin registru batch va fi efectuată numai dacă câmpul „QuantityByBatch” este prezent în lista câmpurilor selectate.

Al treilea, în parametrii sursei puteți specifica că dacă sunt specificate filtre, dacă este posibil, nu le aplicați rezultatului interogării folosind elementul „UNDE”, ci sursei în sine. Deci în loc de
| RegisterAccumulations.CompanyProductRemains.Remains()

are sens să scrii

| Registrul de acumulare.Rămăsuri de mărfuri ale companiei.Rămăsuri(, (Nomenclator.*, Depozitul companiei.*, Comanda.*, Preț de vânzare cu amănuntul, Caracteristici nomenclatorului.*))

Bine, în al patrulea rând, cel mai delicios, după părerea mea. Dacă parametrul „Frecvență” este specificat în sursă (pentru tabelele care vă permit să obțineți cifra de afaceri), acesta poate fi setat și ca „(...)”, și, ca urmare a unei mici manipulări cu textul de interogare a constructorului , putem folosi grupări după perioade.

Exemplu: |SELECT PERMIS | Loturi de produseCompanie Cifra de afaceri.Nomenclatură, | SUM(O mulțime de produseCompanyTurnover.CostIncoming) AS CostIncoming, | SUM(CompanyProduct LotsTurnover.CostConsumption) AS CostConsumption | |DIN | Registrul de acumulare.Loturi de mărfuri ale companiei.Cifra de afaceri(, (&Frecvența), | (Nomenclatură.*)) AS Loturi de bunuri ale companiei | |GRUPĂ DE | O mulțime de BunuriCompanie Cifra de afaceri.Nomenclatură | |REZULTATE AMOUNT(CostIncoming), AMOUNT(CostExpenditure) BY | GENERAL, | Nomenclatură | |(SELECT | O mulțime de produse ale companiei Cifra de afaceri. Nomenclator.*, | Registrator.*, | Începutul perioadei (Perioada, Ziua) AS PeriodDay, | Începutul perioadei (Perioada, Săptămâna) AS PeriodWeek, | Începutul Perioada (Perioada, Deceniu) AS PerioadaDecade, | Începutul perioadei (Perioada, Lună) AS PerioadaLună, | Începutul perioadei (Perioada, Trimestru) AS PerioadaTristrum, | Începutul perioadei (Perioada, Semian) AS PerioadaJumătate de an , | Începutul perioadei(Perioada, Anul) AS PerioadaAnul, | SUM(Loturi de produseCompanyTurnover.CostReceipt) AS CostReceipt, | SUM (Company Product LotsTurnover. CostExpense) CUM Cost Cheltuieli) | | | (UNDE | Loturi de bunuri ale cifrei de afaceri ale companiei. Nomenclator. *, | Registrator. *, | SUM (Loturi de bunuri ale cifrei de afaceri ale companiei. Cost încasat) AS Cost of Incoming, | SUM (Loturi de bunuri ale cifrei de afaceri ale companiei). Cost Cheltuieli) AS Cost Cheltuieli) | |(REZULTATE DE | Nomenclatură.*, | Registrator.*, | Începutul perioadei(Perioada, Ziua) AS PeriodDay, | Începutul perioadei(Perioada, Săptămâna) AS PeriodWeek, | Începutul perioadei(Perioada, Deceniul) AS PerioadaDecade, | Începutul perioadei(Perioada, Luna ) AS PerioadaLună, | Începutul perioadei(Perioada, Trimestrul) AS PerioadaTristrum, | Începutul perioadei(Perioada, Semăn de an) AS PerioadaSemăn de an, | Începutul perioadei(Perioada , An) AS PerioadaAn)

Există o avertizare: 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 elimina după execuție, astfel încât să nu vă încurce, deoarece din punctul de vedere al bunului simț este imposibil să înțelegeți un astfel de lucru. un filtru. S-a făcut așa ceva

Dacă Report Builder.AvailableFields.Find(„Frecvență”)<>Nedefinit Apoi Periodicitate = Nedefinit; Dacă Report Builder.DimensionsRows.Find(„PeriodYear”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodYear”)<>Nedefinit Apoi Periodicitate = 9; endIf; Dacă Report Builder.DimensionsRows.Find(„PeriodHalf-Year”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodHalf-Year”)<>Nedefinit Apoi Periodicitate = 8; endIf; Dacă Report Builder.DimensionsRows.Find(„PeriodQuarter”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodQuarter”)<>Nedefinit Apoi Periodicitate = 7; endIf; Dacă ReportBuilder.DimensionsRows.Find(„PeriodMonth”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodMonth”)<>Nedefinit Atunci Periodicitate = 6; endIf; Dacă ReportBuilder.DimensionsRows.Find(„PeriodDecade”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodDecade”)<>Nedefinit Atunci Periodicitate = 5; endIf; Dacă ReportBuilder.DimensionsRows.Find(„PeriodWeek”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodWeek”)<>Nedefinit Apoi Periodicitate = 4; endIf; Dacă Report Builder.DimensionsRows.Find(„PeriodDay”)<>Nedefinit SAU Generator de rapoarte.DimensionsColumns.Find(„PeriodDay”)<>Nedefinit Atunci Periodicitate = 3; endIf; Dacă ReportBuilder.DimensionsRows.Find(„Înregistrare”)<>Nedefinit SAU ReportBuilder.DimensionsColumns.Find(„Înregistrare”)<>Nedefinit SAU ReportBuilder.SelectedFields.Find ("Registrator")<>Nedefinit Atunci Periodicitate = 2; endIf; Dacă Frecvenţa<>Nedefinit Apoi Selectare FieldBy Periodicity = Generator de rapoarte.Selection.Add("Periodicitate"); SelectionFieldByPeriodicity.Value = Periodicitate; SelectionFieldByPeriodicity.Use = True; endIf; endIf; Builder.Run(); Dacă Selection FieldBy Periodicity<>Nedefinit Apoi Generator de rapoarte.Selection.Delete(Generator de rapoarte.Selection.Index(SelectionFieldByPeriodicity)); endIf;

12. Personalizați constructorul

Pentru a oferi utilizatorului posibilitatea de a schimba lista de grupare, filtrul, câmpurile selectate sau sortarea, este suficient să creați atributul de raport „Builder” și să plasați un câmp de tabel pe formularul de raport și să specificați „Builder.DimensionsRows”, „ Builder.DimensionsColumns” ca sursă de date. , „Builder.Selection”, „Builder.SelectedFields” sau „Builder.Order”.

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

Când dezvoltați rapoarte, uneori trebuie să afișați un raport pentru care datele nu pot fi obținute folosind un limbaj de interogare. Această situație poate apărea, de exemplu, dacă se folosește un algoritm complex pentru calcularea datelor sau dacă datele pentru ieșirea unui raport sunt obținute nu din baza de informații, ci, de exemplu, dintr-un fișier extern. Generatorul de rapoarte oferă posibilitatea de a afișa un raport dintr-o sursă de date arbitrară.
Următoarele pot fi utilizate ca sursă de date pentru ieșirea raportului:

  • Tabel de valori,
  • Solicitare rezultat,
  • Zona celulelor documentului tabelar,
  • parte tabelară,
  • Set de înregistrări registru de acumulare,
  • Informații RegisterRecordSet,
  • Registrul contabilSetul de înregistrări,
  • 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 în proprietatea generatorului DataSource. Proprietatea generatorului de rapoarte DataSource poate conține o valoare de tip DataSourceDescription. Obiectul DataSourceDescription conține sursa de date în sine și, de asemenea, conține o descriere a coloanelor sursei de date. Fiecare descriere a coloanei sursei de date conține:
  • Nume - conține numele coloanei din sursa de date,
  • DataPath - 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 celeilalte coloane. Dacă un câmp conține cuvântul Reprezentare despărțit printr-un punct, atunci acest câmp este considerat o reprezentare pentru coloana de la calea către datele pentru care se obține reprezentarea. 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ă.Reprezentare” va fi considerată o reprezentare pentru coloana „Nomenclatură”,
  • Câmp - un semn că această coloană poate fi folosită ca câmp de raport,
  • Ordine - un semn că ordonarea este posibilă pentru o anumită coloană,
  • 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 de rapoarte,
  • Total - o linie care conține o expresie pentru calcularea totalului. Pentru generatorul de rapoarte, expresia acestei linii corespunde expresiei pentru calcularea totalului utilizat în limbajul de interogare,
Când setați sursa de date la obiectul DataSourceDescription, descrierile coloanelor sunt create și completate automat.

Obiectul DataSourceDescription are un constructor, ca parametru al cărui parametru poate fi transmisă sursa de date pentru care se creează o descriere, în timp ce proprietatea DataSource va fi completată cu sursa de date transmisă, descrierile coloanelor vor fi completate cu informații despre coloanele din sursa de date.

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

ReportBuilder.DataSource = NewDataSourceDescription(ValueTableResult);

Lucrarea ulterioară cu generatorul de rapoarte nu este diferită de lucrul cu generatorul de rapoarte în modul de interogare: generatorul de rapoarte oferă funcționalitatea sa completă, cu excepția afișării totalurilor ierarhice. În plus, atunci când lucrați cu o sursă de date personalizată, nu puteți obține o interogare de la generatorul de rapoarte care va fi folosită pentru a obține date din baza de informații.

Lucrarea generatorului de interogări cu o sursă de date personalizată este identică cu cea cu o sursă personalizată a generatorului de rapoarte.

Programarea 1C constă în mai mult decât 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. Interogările 1C sunt o modalitate de a prelua date dintr-o bază de date pentru a le arăta utilizatorului într-un formular sau pentru a le procesa.

Partea fundamentală a raportului este cererea 1C. În cazul unui raport, ACS este cea mai mare parte a raportului.

Aşezaţi-vă. Ia o pauza. Calma. 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 limbajul de interogare 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.

El este și bilingv - adică poți scrie în rusă sau engleză. Este extrem de asemănător cu limbajul de interogare SQL și cei care îl cunosc se pot relaxa.

Cum sunt utilizate cererile 1C

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

Interogările 1C sunt:

  • Interogări automate 1C
    Generat 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, va exista o interogare și datele pentru această coloană vor fi solicitate.
  • Interogări semi-automate 1C
    Există multe metode (funcții) în limbajul 1C, atunci când este accesat, se face o interogare la baza de date. De exemplu.GetObject()
  • Interogări manuale 1C (scrise de programator special ca interogare)
    Puteți scrie singur o solicitare 1C în cod și o puteți executa.

Crearea și executarea interogărilor 1C

O cerere 1C este textul real al cererii în limba de solicitare 1C.
Textul poate fi scris cu pixuri. Adică ia-l și scrie-l (dacă știi această limbă).

Deoarece 1C promovează conceptul de programare vizuală, unde se poate face mult sau aproape totul fără a scrie codul manual, există un obiect special Query Constructor care vă permite să desenați textul unei interogări 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.

Odată ce textul cererii 1C este gata, acesta trebuie să fie executat. În acest scop există un obiect în codul 1C Request(). Iată un exemplu:

Solicitare = Solicitare nouă();
Query.Text = „SELECT
| Nomenclatură.Link
|DIN
| Director.Nomenclatura AS Nomenclatura
|UNDE
| Nomenclatură.Serviciul";
Selectare = Query.Run().Select();

Raport (Selection.Link);
EndCycle;

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 încărcat într-un tabel obișnuit:
Preluare = Query.Run().Unload(); //Rezultat – tabel de valori

Sau pur și simplu ocolește rând cu rând.
Selectare = Query.Run().Select();
While Select.Next() Loop
//Fă ceva cu rezultatele interogării
EndCycle;

Lucrul cu solicitări 1C

Principiile de bază ale interogărilor 1C

Principii de bază ale construirii unei cereri 1C -
SELECTAȚI Lista câmpurilor din Titlul tabelului WHERE Condiții

Un exemplu de construire a unei astfel de cereri 1C:

ALEGE
//lista de câmpuri de selectat
Legătură,
Nume,
Cod
DIN
//numele tabelului din care selectăm datele
//lista de tabele este o listă de obiecte din fereastra configuratorului
Director.Nomenclatură
UNDE
//indică selecția
Tip produs = &Serviciu //selectare după valoare externă
Sau Serviciu // Atributul „Service” de tip Boolean, selecție după valoare True
FILTREAZĂ DUPĂ
//Triere
Nume

Lista tabelelor 1C

Puteți vedea numele tabelelor în fereastra configuratorului. Trebuie doar să scrieți „Directoar” în loc de „Directoare”, de exemplu „Directoar.Nomenclatură” sau „Document.Vânzări de bunuri și servicii” sau „Registrul de acumulare.Vânzări”.

Există tabele suplimentare (virtuale) pentru registre care vă permit să obțineți numerele finale.

Informații Register.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 soldurilor pentru o anumita data

Registrul de acumulare. Nume registru. Cifra de afaceri (&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 număra pentru noi (adăugați-le, de exemplu).

ALEGE
//Quantity(FieldName) – numără cantitatea
//Field AS OtherName – redenumește câmpul
Cantitate (Link) AS Cantitatea de documente postate
DIN

UNDE
Dirijată

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ă numărăm numărul de documente pentru fiecare organizație folosind o interogare 1C.

ALEGE
//doar un câmp de document
Organizare,
//numărați cantitatea
Cantitate(Link) AS CantitateBy Organizations
DIN
Document.Vânzări de Bunuri și Servicii
UNDE
Dirijată
A SE GRUPA CU

Organizare

Această solicitare 1C ne va returna numărul de documente pentru fiecare organizație (numită și „pe organizație”).

Să calculăm suplimentar suma acestor documente folosind o solicitare 1C:

ALEGE
//doar un câmp de document
Organizare,
//numărați cantitatea

//numărați suma

DIN
Document.Vânzări de Bunuri și Servicii
UNDE
Dirijată
A SE GRUPA CU
//trebuie folosit dacă lista de câmpuri are o funcție count() ș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.

ALEGE
//doar un câmp de document
Organizare,
//numărați cantitatea
Cantitate(Link) AS CantitateBy Organizations,
//numărați suma
Amount(DocumentAmount) AS Sumă
DIN
Document.Vânzări de Bunuri și Servicii
UNDE
Dirijată
A SE GRUPA CU
//trebuie folosit dacă lista de câmpuri are o funcție count() și unul sau mai multe câmpuri în același timp - atunci trebuie să grupați după aceste câmpuri
Organizare
REZULTATE PO 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 caracteristicile suplimentare ale limbajului de interogare 1C:

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

1C Query Builder

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

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

Selectați câmpurile necesare din tabel în designerul de interogări 1C și trageți spre dreapta. Dacă doriți nu numai să selectați un câmp, ci să îi aplicați un fel de funcție de însumare, după glisare, faceți clic pe câmp de două ori cu mouse-ul. În fila Grupare, va trebui apoi să selectați (trageți) câmpurile necesare pentru grupare.

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

În fila Comandă este indicată sortarea. Pe fila Rezultate – însumând rezultatele.

Folosind designerul de interogări 1C, puteți studia orice interogare existentă. Pentru a face acest lucru, faceți clic dreapta pe textul unei cereri existente și selectați, de asemenea, 1C query designer - iar cererea va fi deschisă în 1C query designer.