Exemple de utilizare a funcției scd - calculați o expresie. Exemple de utilizare a funcției SKD - calculați expresia Total general al sumei numai prin grupare

Să ne uităm la un exemplu:

Mai multe unități de mărfuri sunt expediate către client la diferite reduceri. Trebuie să afișați într-un raport valorile reducerii pentru fiecare produs și să calculați reducerea medie. Să creăm un raport despre sistemul de control al accesului.
Pentru toate câmpurile pentru care trebuie să afișăm totaluri, vom seta o expresie (metodă) pentru calculul lor în fila „Resurse”. Pentru câmpul „Reducere”, setați metoda de calcul ca „Medie”.

Emitem raportul:

După cum puteți vedea, totalul pentru câmpul „Reducere” este calculat ca media aritmetică a valorilor câmpului, adică suma tuturor valorilor împărțită la numărul de valori. Dar pentru că Deoarece volumele de mărfuri expediate cu reduceri diferite sunt diferite, reducerea medie poate fi calculată într-un alt mod: de exemplu, ca raport dintre cantitatea totală de mărfuri expediate, ținând cont de reducere, și cantitatea totală de mărfuri expediate. Dar aici apare întrebarea: dacă puteți scrie o formulă pentru a calcula valorile câmpurilor înregistrărilor detaliate din ACS, atunci totalurile sunt calculate automat conform expresiei specificate în fila „Resurse” și acolo, după cum Am văzut mai devreme, „Media” este calculată ca medie aritmetică a valorilor afișate, ca în acest caz, ar trebui să calculez totalul din această coloană folosind propria mea formulă?
De fapt, nu este greu. Pentru a face acest lucru, ne vom ajusta raportul adăugând la acesta câmpurile necesare care vor participa la calcul, în cazul nostru acestea sunt „AmountWithDiscount” și „AmountAtPrice”.

Pentru a „învăța” ACS să ne afișeze rezultatele, luăm următorii pași:
1. în fila „Setări”, atribuiți un nume grupării „”, de exemplu „ItogSKD”, pentru a face acest lucru, apelați meniul contextual pentru grupare și faceți clic pe „atribuiți un nume”;

2. în fila „Aspecte”, adăugați un „aspect antet de grupare”, unde selectăm numele atribuit anterior „TotalSKD”;

3. desenăm o linie a aspectului, unde lăsăm toate rezultatele, al căror calcul ni se potrivește, așa cum este, și pentru a calcula procentul mediu de reducere scriem o formulă de calcul;

Dacă totul este corect, atunci când raportul este afișat, sub acesta vor fi afișate două linii totale, mai întâi cea care este generată automat, apoi cea creată de tine.

Pentru a lăsa ieșirea doar pentru linia totală, trebuie să dezactivați, în fila „Setări” din secțiunea „Alte setări” a ieșirii aspectului, ieșirea pentru „Aspect total mare orizontal” și „Aspect total general vertical”

Foile Excel care conțin o cantitate mare de informații pot părea uneori aglomerate și chiar dificil de citit. Excel vă permite să grupați datele, astfel încât să puteți ascunde și afișa cu ușurință diferite secțiuni ale foii de lucru. În plus, puteți generaliza diferite grupuri folosind comanda Subtotalși dați structură foii de lucru Excel. În această lecție ne vom uita la ambele instrumente cât mai detaliat posibil și cu exemple clare.

Gruparea rândurilor și coloanelor în Excel

Pentru a degrupa datele în Excel, selectați rândurile sau coloanele grupate, apoi faceți clic pe comandă Degrupați.

Cum să ascundeți și să afișați grupurile


Rezumat în Excel

Echipă Subtotal vă permite să creați automat grupuri și să utilizați funcții de bază, cum ar fi SUM, COUNT și AVERAGE, pentru a simplifica rezumatul. De exemplu, comanda Subtotal este capabil să calculeze costul papetăriei pe grupuri într-o ordine mare. Comanda va crea o ierarhie de grupuri, numită și schiță, pentru a organiza informațiile din foaia de lucru.

Datele dvs. trebuie sortate corect înainte de a utiliza comanda Subtotal Puteți studia seria de lecții Sortarea datelor în Excel pentru mai multe informații.

Crearea unui subtotal

În exemplul următor vom folosi comanda Subtotal pentru a determina câte tricouri de fiecare dimensiune (S, M, L și XL) sunt comandate. Ca urmare, foaia de lucru Excel va fi structurată în grupuri pentru fiecare mărime de tricou, iar apoi se va calcula numărul total de tricouri din fiecare grupă.


Vizualizați grupurile după nivel

La rezumarea subtotalurilor în Excel, foaia de lucru este împărțită în diferite niveluri. Puteți comuta între aceste niveluri pentru a putea ajusta cantitatea de informații afișate folosind pictogramele de contur 1, 2, 3 din partea stângă a foii. În exemplul următor, vom comuta între toate cele trei niveluri ale structurii.

Deși acest exemplu arată doar trei niveluri, Excel vă permite să creați până la 8 niveluri de imbricare.

De asemenea, puteți utiliza pictogramele Spectacol sau Ascunde detaliile pentru a ascunde sau a arăta grupuri.

Eliminarea subtotalurilor în Excel

În timp, nevoia de subtotaluri dispare, mai ales când trebuie să rearanjați diferit datele dintr-o foaie Excel. Dacă nu mai doriți să vedeți subtotaluri, le puteți șterge.


Pentru a șterge numai grupuri, lăsând subtotaluri, utilizați elementul Ștergeți structura din meniul derulant de comandă Degrupați.

Întrebare Ocolind o interogare prin grupare, modul în care datele sunt colectate într-o interogare cu proiectarea software-ului REZULTATE. Să presupunem că trebuie să organizați un ciclu în care ar trebui să se formeze o serie de comenzi, defalcate pe contrapărți și adrese de livrare. Cum să faci asta?
Răspuns Scriem o cerere:

Cerere. Text = „SELECT | usOrderForShipment.Link AS Link, | usStatusDocuments.Status AS Stare, | Comandă pentru expediere, ca contraparte. // Anexăm adresa de livrare în „EXPRESS”, deoarece în metadate, adresa de livrare este un șir de lungime nelimitată și, dacă nu este convertit într-un șir de lungime limitată, //atunci va fi imposibil de utilizat in constructia "REZULTATE PO". // și vom primi un mesaj de eroare de genul " Câmp nevalid pentru grupare" | EXPRESS(usShipmentOrder.DeliveryAddress AS ROW(350)) ASDeliveryAddress|DIN | Informații Register.usDocumentStatus CUM să neDocumentStatus | CONEXIUNEA STÂNGA Document.usOrderForShipment AS usOrderForShipment | Software usStatusDocuments.Document = usOrderForShipment.Link|UNDE | Comandă pentru expediere| |COMANDA DE| usDocumentStatus.Status.Order |REZULTATE DE | contrapartidă,;

| Adresa de livrare"

Rezultatul acestei interogări va fi un set de date aproximativ astfel:

  • Antreprenorul 1

Rezultatul acestei interogări va fi un set de date aproximativ astfel:

  • Adresa de livrare 1

Adresa de livrare 2

  • Contrapartea 2

Adresa de livrare 3
Acum trebuie să obținem trei matrice:
— Ordinul 1, Ordinul 2, Ordinul 3
- Ordinul 4, Ordinul 5
- ordinul 6

Pentru a obține aceste matrice, trebuie să parcurgeți interogarea „După grupări cu ierarhie” de mai sus: SelectionMethod = QueryResult Bypass. Prin GroupingsHIerarchy; Rezultat = Solicitare. Run(); FirstLevelSample = Rezultat. Selectați(Metoda de selecție);În timpul eșantionării de prim nivel. Next() LoopSecondLevel Sampling = Selectare FirstLevel. Selectați(Metoda de selecție); msvComenzi. Clear() ;// șters înainte de a adăuga primul pe listă FirstLevelSample = Rezultat. Selectați(Metoda de selecție);În timp ce selecția celui de-al doilea nivel. Next() Buclă // în cadrul fiecărui nivel de ierarhie, comenzile sunt ordonate: „Creat”, „În curs”, „Lucrări în curs”, „Gata pentru expediere” (în această ordine, ordinea este stabilită în enumerare) EndCycle ;

EndCycle ;

Nota. Construcția „ORDER BY USDocumentStatus.Status.Order” va funcționa în interiorul fiecărei matrice, de exemplu. comenzile vor fi ordonate în funcție de stare în fiecare dintre matricele rezultate.

Ajutor pentru calcularea rezultatelor interogărilor din descrierea din ajutorul configuratorului

Calculul totalurilor de interogare

Clauza TOTAL vă permite să determinați care totaluri trebuie să fie calculate în interogare. La calcularea totalurilor, valorile funcțiilor agregate sunt calculate pe baza eșantioanelor cu aceleași valori de câmp - puncte de control. Totalurile sunt adăugate la rezultatul interogării ca rânduri totale.

<Описание итогов>

<Итоги> [<Список агрегатных функций>]

<Итоги>

Procedura de calcul a rezultatelor interogării este descrisă în conformitate cu următoarele reguli:<Список итоговых_полей>REZULTATE [<Список контрольных точек>

<Список итоговых_полей>

<Итоговое_поле> [,<Список_итоговых_полей> [, …]]

<Итоговое_поле>

<Агрегатная_функция> | <Выражение>] DE [GENERAL]<Псевдоним_поля>]

<Список контрольных точек>

<Контрольная точка> [, <Контрольная точка> [, …]]

<Контрольная точка>

<Выражение>[[CUM]
[,<Литерал типа DATE> | <Идентификатор параметра>]
[,<Литерал типа DATE> | <Идентификатор параметра>[[DOAR] IERARHIE] | [PERIODE(A doua | Minut | Oră | Zi | Săptămâna | Lună | Trimestru | An | Deceniu | Semestrul

])] [[CUM] Alias ​​de câmp]

<Список агрегатных функций>Descrierea rezultatelor începe cu cuvântul cheie dorit REZULTATE.

conține o listă de funcții agregate care trebuie calculate în rezultate. Funcțiile agregate sunt acoperite în .<Список контрольных точек>Pe lângă totalurile generale, puteți specifica calculul totalurilor pe puncte de control. Pentru a face acest lucru, după software-ul de cuvinte cheie necesar, trebuie să specificați<Контрольная точка>. Fiecare<Выражение>conţine

, calculat când interogarea este executată. Pentru fiecare combinație de valori ale acestor expresii, rândurile totale vor fi calculate și adăugate la rezultatul interogării.

Dacă punctul de control este un câmp - un subconto al registrului contabil, atunci când se primesc totaluri pentru acest punct de control, valorile NULL vor fi ignorate.

Funcții agregate ale limbajului de interogare

<Агрегатная функция>

Limbajul de interogare oferă funcții agregate care sunt utilizate pentru a grupa rezultatele interogării și pentru a calcula totalurile. Funcțiile agregate sunt concepute pentru a rezuma valorile unui parametru specificat. Sunt definite următoarele funcții agregate:<Выражение>) |
SUMA (<Выражение>) |
MEDIE (<Выражение>) |
MINIM (<Выражение>) |
MAXIM (<Выражение> | *)

CANTITATE ([DIFERIT]

Exemplu:
Alege
Factură.Nomenclatură.Nume,
Sumă (Factură. Sumă) Ca Sumă,
Medie (Factură. Sumă) Ca medie,
Maxim (Factură. Sumă) Ca maxim,
Minim (Factură. Sumă) Ca minim,

Cantitate (Factură. Sumă) Ca Cantitate

Din
Grupați după

Factură.Nomenclatură

Rezultate generale

Rezultatul interogării: Nume Sumă Medie Maxim Minim
265 955,45 12 511,12 40 000,23 555 8
Kolic 28 500,22 9 500,07 15 000 3 000 3
Pantaloni pentru copii 24 000 8 000 16 000 4 000 3
Cămașă „Cowgirl” 63 555 6 355,5 30 000 555 10
Blugi pentru femei 6 400 6 400 6 400 6 400 1
Pulover pentru copii 60 000,23 30 000,115 40 000,23 20 000 2
Chiuveta "Lily" 65 500 21 833,33 40 000 8 000 3
Moydodyr "Acvariu" 15 000 15 000 15 000 15 000 1
Mixer „Ultra” 3 000 3 000 3 000 3 000 1

Robot de bucatarie Krups

Funcțiile agregate pot fi utilizate într-o listă de câmpuri de selecție, clauze HAVING, TOTAL, ORDER BY.

Funcția calculează suma aritmetică a tuturor valorilor câmpurilor incluse în selecție.

Doar câmpurile care conțin o valoare numerică pot fi specificate ca parametru de funcție.

Dacă un câmp nu poate conține valori numerice, atunci aplicarea funcției SUM la acel câmp va genera o eroare. Dacă un câmp poate conține valori numerice (are un tip de date compus), atunci această funcție poate fi aplicată unui astfel de câmp. Dar dacă o valoare non-numerică (alta decât valorile NULL) este întâlnită printre valorile câmpului din selecție, aceasta va provoca o eroare.

Funcția agregată MEDIE

Funcția calculează valoarea medie a tuturor valorilor câmpurilor incluse în eșantion.

Ca parametru de funcție, puteți specifica doar referințe la câmpuri care conțin o valoare numerică.

Dacă un câmp nu poate conține valori numerice, atunci aplicarea funcției AVERAGE la acel câmp va genera o eroare. Dacă un câmp poate conține valori numerice (are un tip de date compus), atunci această funcție poate fi aplicată unui astfel de câmp. Dar dacă o valoare non-numerică (alta decât valorile NULL) este întâlnită printre valorile câmpului din selecție, aceasta va provoca o eroare.

Funcția agregată MINIM

Funcția calculează valoarea minimă a tuturor valorilor câmpurilor incluse în selecție.

La determinarea valorii minime, regulile de comparare a valorilor descrise în .

Funcția agregată MAXIM

Funcția calculează valoarea maximă din toate valorile câmpurilor incluse în selecție.

Ca parametru de funcție, puteți specifica referințe la câmpuri care conțin valori de orice tip.

La determinarea valorii maxime, regulile de comparare a valorilor descrise în .

Funcția agregată CANTITATE

Funcția numără numărul de valori ale parametrilor incluse în eșantion. Spre deosebire de alte funcții agregate, funcția CANTITATE permite trei utilizări.

  • În primul rând, funcția vă permite să numărați numărul de valori non-NULL ale câmpului specificat.
  • În al doilea rând, funcția vă permite să numărați numărul de valori diferite ale câmpului specificat care nu sunt egale cu NULL. Pentru a face acest lucru, trebuie să specificați cuvântul cheie VARIOUS înainte de specificarea câmpului.
  • În al treilea rând, funcția vă permite să numărați numărul de rânduri din rezultatul interogării. Pentru a face acest lucru, trebuie să specificați un asterisc „*” ca parametru al funcției.

Ca parametru de funcție, puteți specifica referințe la câmpuri care conțin valori de orice tip.

CANTITATE ([DIFERIT]

ALEGE
Cantitate (*) ca total,
Cantitate (diverse Factură.Nomenclatură) Ca diverse

Cantitate (Factură. Sumă) Ca Cantitate
Document.Factură.Compoziție Ca Factură

Rezultate generale

Total Diferit
24 8

Calculul totalurilor

Pentru a calcula totalurile pentru întregul tabel, cuvântul GENERAL trebuie specificat în clauza TOTAL. În acest caz, valorile funcțiilor agregate vor fi calculate pentru toate înregistrările din tabel.

CANTITATE ([DIFERIT]



SUMA TOTALĂ (CANTITATE) CU TOTAL

Rezultate generale

Produs Cantitate Număr Destinatar
238
Robinet 10 RNk-1 Uryupinskorg
Robinet 8 RNk-3 Mag. "Maestru"
Robinet 44 RNk-4 Mag. "Gigant"
Robinet 22 RNk-5 Uryupinskorg
Vantus 5 RNk-1 Uryupinskorg
Vantus 1 RNk-3 Mag. "Maestru"
Vantus 14 RNk-4 Mag. "Gigant"
Masă 1 RNk-1 Uryupinskorg
Masă 15 RNk-2 Mag. "Mobilier"
Masă 10 RNk-4 Mag. "Gigant"
Scaun 55 RNk-2 Mag. "Mobilier"
Scaun 5 RNk-3 Mag. "Maestru"
Scaun 32 RNk-4 Mag. "Gigant"
Scaun 16 RNk-5 Uryupinskorg

Expresii booleene în limbajul de interogare

În limbajul de interogare, expresiile logice sunt utilizate în operațiunile de selecție și condițiile de selecție:

<Логическое выражение>

<Выражение> |
<Выражение> <Операция сравнения> <Выражение> |
<Выражение>[NU] ÎN [IERARHIE] (<Список значений> | <Массив значений>) |
<Выражение>[NU] ÎN [IERARHIE] (<Описание запроса>) |
<Выражение>[NU] ÎNTRE<Выражение>ŞI<Выражение> |
<Выражение>ESTE [NU] NUL |
<Выражение>LEGĂTURĂ<Имя таблицы> |
<Выражение>[NU] LIKE<Литерал типа СТРОКА>
[PERSONAJ SPECIAL<Литерал типа СТРОКА>]

<Операция сравнения>

> | < | = | >= | <= | <>

<Список значений>

<Выражение>[, <Выражение> [, …]]

O expresie logică ar putea fi:

La compararea valorilor, se folosesc regulile de comparare a valorii descrise mai jos.

Reguli pentru compararea valorilor

Deoarece limbajul de interogare poate compara valori de diferite tipuri, regulile sunt definite pentru modul în care sunt comparate două valori. Aceste reguli sunt folosite pentru:

  • compararea valorilor în operatorii de comparație;
  • determinarea valorilor maxime și minime în funcțiile agregate MINIM și MAXIM;
  • ordonarea înregistrărilor rezultatelor interogării conform ordinii specificate în clauza ORDER BY.

Dacă tipurile de valori sunt diferite unele de altele, atunci relațiile dintre valori sunt determinate pe baza priorității tipurilor:

  • tastați NULL (cel mai mic);
  • tip boolean;
  • tip Număr;
  • tip Data;
  • tip String;
  • tipuri de referință.

Relațiile dintre diferitele tipuri de referință sunt determinate pe baza numerelor de referință interne ale tabelelor corespunzătoare unui anumit tip.

Dacă tipurile de date sunt aceleași, atunci valorile sunt comparate conform următoarelor reguli:

  • pentru tipul boolean valoarea TRUE este mai mare decât valoarea FALSE;
  • tipul Number are regulile obișnuite de comparare pentru numere;
  • pentru tipul Date, datele anterioare sunt mai mici decât cele ulterioare;
  • pentru tipul șir de comparație, comparația se face în conformitate cu caracteristicile naționale stabilite ale bazei de date, fără a lua în considerare spațiile de sfârșit;
  • tipurile de referință sunt comparate pe baza valorilor lor (număr de înregistrare etc.);
  • Nu este permisă compararea câmpurilor de lungime nelimitată (șiruri de lungime nelimitată, ValueStorage, câmp ValueType din tabelul de planuri de tip caracteristic).

Important! Orice operație de comparare între două valori care implică cel puțin o valoare NULL produce un rezultat similar cu FALSE.

Operator de potrivire a valorii

Forma operatorului B pentru a verifica o potrivire cu una dintre cele enumerate

Operatorul B vă permite să verificați dacă valoarea expresiei specificate în dreapta acesteia se potrivește cu una dintre valorile descrise în stânga. Dacă se potrivește cu cel puțin unul, rezultatul operatorului va fi TRUE, altfel va fi FALS. Aplicația NU inversează acțiunea operatorului. Compararea valorilor se efectuează conform regulilor descrise în.

CANTITATE ([DIFERIT]

Exemplu:

Unde
Director.Nomenclatură.Nume.părinte
B („Aparatele de uz casnic”, „Echipamente de birou”)

Forma operatorului B pentru verificarea apartenenței la ierarhie

Pentru directoare, verificarea poate fi efectuată și pentru apartenența la ierarhie. Rezultatul operatorului ÎN IERARHIE va fi ADEVĂRAT dacă valoarea expresiei din stânga este o referință la un element de director și este inclusă în setul de valori din dreapta sau aparține ierarhic unui grup conținut în acest set:

CANTITATE ([DIFERIT]

// O legătură este transmisă cererii ca parametru de grup
// la orice grup din directorul Nomenclatură.

Exemplu:
Director.Nomenclatură.Nume

Setul de valori care trebuie verificat pentru potrivire poate include și rezultatul unei interogări. În acest caz, în dreapta operatorului B, trebuie să specificați o descriere a cererii.

CANTITATE ([DIFERIT]

Exemplu:
Director.Nomenclatură.Nume

Forma operatorului B pentru a verifica dacă o valoare se potrivește cu unul dintre rezultatele interogării

Un exemplu de utilizare a acestui operator ar fi următorul:

CANTITATE ([DIFERIT]


ALEGE
Produse.Nume
DIN
Director.Produse AS Products
UNDE
Produse.Link B
ALEGE
Cheltuieli FacturăCompoziție.Produs
DIN

)

Rezultate generale

Pentru a obține rezultatul opus, adică dacă doriți să determinați că valoarea nu se potrivește cu niciunul dintre rezultatele interogării, interogarea arată astfel:

CANTITATE ([DIFERIT]

// Selectați numele mărfurilor care au fost prezente în facturi
ALEGE
Produse.Nume
DIN
Director.Produse AS Products
UNDE
Produse. Link NU IN
ALEGE
Cheltuieli FacturăCompoziție.Produs
DIN
Document.Factură de cheltuieli.Compoziție AS Factură de cheltuieliCompoziție
)

Rezultate generale

Rețineți că din interogarea operației B este posibil să accesați câmpuri de tabel care au fost întâlnite în interogarea externă înainte de apariția operației.

CANTITATE ([DIFERIT]

// Selectați numele mărfurilor care au fost prezente în facturi
ALEGE
Produse.Nume
DIN
Director.Produse AS Products
UNDE
Produse.Link B
ALEGE
Cheltuieli FacturăCompoziție.Produs
DIN
Document.Factură de cheltuieli.Compoziție AS Factură de cheltuieliCompoziție
UNDE
Expense Composition.Product = Products.Link
)

Rezultate generale

Operator pentru a verifica dacă o valoare se află într-un interval

Operatorul BETWEEN vă permite să verificați dacă valoarea expresiei specificate în dreapta acesteia se află în intervalul specificat în stânga (împreună cu limitele intervalului). Dacă este inclus, rezultatul operatorului va fi TRUE, în caz contrar - FALSE. Aplicația NU inversează acțiunea operatorului. Compararea valorilor se realizează conform regulilor descrise în.

CANTITATE ([DIFERIT]

Exemplu:


Unde
Director.Nomenclatura.Pretul de achizitie INTRE 100 SI 1000

Operator de testare NULL

Operatorul IS NULL vă permite să testați valoarea unei expresii din stânga acesteia să fie NULL. Dacă valoarea este NULL, rezultatul operatorului va fi TRUE, în caz contrar va fi FALSE. Aplicația NU inversează acțiunea operatorului.

CANTITATE ([DIFERIT]

Exemplu:
Directory.Nomenclature.Name,
Director.Nomenclatură.PurchasingPrice
Unde
Directory.Nomenclature.PurchasePrice Da NULL

Operator de validare a valorii de referință

Operatorul REFERENCE vă permite să verificați dacă valoarea expresiei specificate în dreapta acesteia este o referință la tabelul specificat în stânga. Dacă da, rezultatul operatorului va fi TRUE, în caz contrar - FALSE. Dereferențiarea tabelelor este descrisă în secțiunea „Dereferențiarea câmpurilor”.

CANTITATE ([DIFERIT]

Exemplu:
Directory.Nomenclature.Name,
Director.Nomenclatură.Unitate de măsură
Unde
Director.Nomenclatură.Unitate de măsură Director de legături.Unități de măsură

Operator șir de potrivire a modelului

Operatorul SIMILAR vă permite să comparați valoarea expresiei specificate în stânga acesteia cu șirul de model specificat în dreapta. Valoarea expresiei trebuie să fie de tip șir. Dacă valoarea expresiei se potrivește cu modelul, rezultatul operatorului va fi TRUE, altfel va fi FALS.

Următoarele caractere din șirul șablon sunt caractere de serviciu și au o semnificație diferită de caracterul șir:

  • % (procent): o secvență care conține orice număr de caractere arbitrare
  • _ (subliniere): un caracter arbitrar
  • […] (unul sau mai multe caractere între paranteze drepte): orice caracter unic enumerat între paranteze drepte
    O enumerare poate conține intervale, de exemplu a-z, care indică un caracter arbitrar inclus în interval, inclusiv capetele intervalului.
  • [^...] (în paranteze drepte un semn de negație urmat de unul sau mai multe caractere): orice caracter, altul decât cele enumerate după semnul de negație

Orice alt simbol înseamnă el însuși și nu poartă nicio sarcină suplimentară.

Dacă unul dintre caracterele enumerate trebuie să fie scris ca el însuși, atunci trebuie să fie precedat de<Спецсимвол>. eu însumi<Спецсимвол>(orice caracter adecvat) este definit în aceeași instrucțiune după cuvântul cheie SPECIAL CHARACTER.

De exemplu, modelul „%ABV[abvg]_abv%” CARACTER SPECIAL „” înseamnă un subșir format dintr-o secvență de caractere:
literele A; literele B; literele B; o cifră; una dintre literele a, b, c sau d; sublinia; literele a; literele b; literele v.

Mai mult, această secvență poate fi precedată de un set arbitrar de caractere.

Rezumatul ierarhiei

Este posibil să se calculeze totalurile în funcție de ierarhie. Pentru a face acest lucru, după numele câmpului pentru care se calculează totalurile, trebuie să specificați cuvântul cheie IERARHIE. Ca urmare, vor fi calculate totalurile pe puncte de control și totalurile pe ierarhie pentru punctele de control.

CANTITATE ([DIFERIT]

SELECTAȚI Articol.Doc., Cant.Doc., Număr.Link.Doc., Destinatar.Link.Doc.
FROM Document.Invoice.Composition As Doc
COMANDĂ PRIN Doc.Product
REZULTATE SUMA (CANTITATE) SOFTWARE Doc.Produs IERARHIE

Rezultate generale

Produs Cantitate Număr Destinatar
Instalatii sanitare 104
Robinet 84
Robinet 10 RNk-1 Uryupinskorg
Robinet 8 RNk-3 Mag. "Maestru"
Robinet 44 RNk-4 Mag. "Gigant"
Robinet 22 RNk-5 Uryupinskorg
Vantus 20
Vantus 5 RNk-1 Uryupinskorg
Vantus 1 RNk-3 Mag. "Maestru"
Vantus 14 RNk-4 Mag. "Gigant"
Mobilier 134
Masă 26
Masă 1 RNk-1 Uryupinskorg
Masă 15 RNk-2 Mag. "Mobilier"
Masă 10 RNk-4 Mag. "Gigant"
Scaun 108
Scaun 55 RNk-2 Mag. "Mobilier"
Scaun 5 RNk-3 Mag. "Maestru"
Scaun 32 RNk-4 Mag. "Gigant"
Scaun 16 RNk-5 Uryupinskorg

CANTITATE ([DIFERIT]

SELECTAȚI Articol.Doc., Cant.Doc., Număr.Link.Doc., Destinatar.Link.Doc.
DIN Document.Factura de cheltuieli.Compoziție Doc
COMANDĂ PRIN Doc.Product
SUMA (CANTITATE) REZULTATE DOAR DUPĂ IERARHIE DOC.Produs

Rezultate generale

Produs Cantitate Număr Destinatar
Instalatii sanitare 104
Robinet 10 RNk-1 Uryupinskorg
Robinet 8 RNk-3 Mag. "Maestru"
Robinet 44 RNk-4 Mag. "Gigant"
Robinet 22 RNk-5 Uryupinskorg
Vantus 5 RNk-1 Uryupinskorg
Vantus 1 RNk-3 Mag. "Maestru"
Vantus 14 RNk-4 Mag. "Gigant"
Mobilier 134
Masă 1 RNk-1 Uryupinskorg
Masă 15 RNk-2 Mag. "Mobilier"
Masă 10 RNk-4 Mag. "Gigant"
Scaun 55 RNk-2 Mag. "Mobilier"
Scaun 5 RNk-3 Mag. "Maestru"
Scaun 32 RNk-4 Mag. "Gigant"
Scaun 16 RNk-5 Uryupinskorg

Se pare că nimic nu este mai simplu, dar există o problemă cu o definiție clară.
Aşa.

Grupare (grupare) - colaps intrări în grup De grup câmpuri(câmpuri cu aceeași valoare).
Exemplu. Trebuie să știm numărul total de produse pentru anumit depozit (...total 999 tone..). Fiecare mișcare este înregistrată în registru, și chiar și o simplă solicitare din două câmpuri (Depozit și Cantitate) va genera o selecție din mai multe înregistrări cu aceeași valoare a câmpului Depozit și valori diferite ale câmpului Cantitate.
Restrângeți (grupați) soldurile după câmpul Depozit - aceasta este pentru a obține cantitatea totală de mărfuri din acest depozit.
Aceasta implică necesitatea (de exemplu, dar în general nu este necesar) de a calcula agregat funcții (produce o singură valoare pentru un anumit grup de câmpuri de tabel) după câmpul de grup (în termenii generatorului de interogări - Câmpul de sumă).
În exemplul nostru- grupați câmpul Depozit, și calculați funcția de agregare folosind câmpul Cantitate - obținem CANTITATEA TOTALĂ a tuturor mărfurilor din depozit.
Deoarece Deoarece interogările simple sunt foarte rare, atunci în toate celelalte cazuri când se utilizează Gruparea, acestea vor fi grupate Toate câmpuri de interogare (cu excepția Summarizable) și selecție vor fi reduse (restrânse) numai pe acele înregistrări, în care toate câmpurile de grup sunt aceleași (același depozit, același produs, aceeași dimensiune a produsului - aceste înregistrări sunt restrânse, dacă măcar ceva este diferit, nu sunt).

Rezultate(așa-numitul general)- linii suplimentare ca urmare a unei cereri care continetotaluri pentru câmpurile și grupările specificate (așa-numitele subtotaluri).
Rezultate generale - linia ca urmare a unei interogări cu valoarea totalurilor pentru toate înregistrările.

Rezultate pe grupări - valorile funcțiilor agregate conform câmpuri de grup (câmpuri cu aceeași valoare).

Diferențele cerere de lafracțiunile(GROUP BY) din cerere de larezultate pe grupări.

În primul caz, în rezultatul interogării vor apărea doar rândurile totale. În exemplu, câmpul de grup este nomenclatură:

Al doilea conține rezultatele și înregistrările inițiale. Motivul este în definiție (rezultate nu "colapseste" date, și adăuga linii) În exemplu, câmpul de grup este nomenclatură:

Important! Nu este nevoie să utilizați atât gruparea, cât și totalurile în interogarea dvs.! Totul depinde de ce avem nevoie...

Ordinea grupărilor într-o interogare cu totaluri de grupare este importantă deoarece rezultatele sunt calculate în ordine.

Rezumatul ierarhiei. Dacă un câmp de grupare este o legătură către un director, atunci pentru a calcula totalurile pe grupuri ale directorului (sau elemente părinte, dacă directorul nu are grupuri), trebuie să specificați cuvântul cheie IERARHIE. În acest caz, înregistrările cu totaluri pentru nivelurile ierarhiei directoare vor fi adăugate la rezultat.

Important! Limbajul de interogare permite utilizarea diferitelor totaluri într-o singură interogare (generală, grupare și ierarhică).

Sintaxă pentru lucrul cu totaluri într-o selecție dintr-un rezultat de interogare

Metoda RecordType().
Exemplu:
Dacă Sample . PostType() = RequestRecordType. TotalByGrouping Apoi

Continua;
endIf;

Au aceeași sarcină - să efectueze operații matematice sau statistice asupra datelor eșantionului. Dar există și diferențe semnificative:

  1. Rezultate adăugați rânduri la datele eșantionului, în timp ce grupările restrânge selecția și există mai puține rânduri.
  2. Rezultate pot fi calculate pentru toate datele eșantionului sau pentru câmpurile individuale, în timp ce, spre deosebire de grupări, pot exista câmpuri care nu sunt nici totale, nici grupări.
  3. Rezultate poate lua în considerare ierarhia.

În primul rând, o mică teorie. Secțiunea de rezumat din interogările 1C constă din două secțiuni.

Prima începe cu un cuvânt cheie REZULTATEși conține câmpuri rezumative cu o funcție de agregare aplicată acestora. Această secțiune poate rămâne goală, apoi rezultatul interogării va fi pur și simplu grupat după câmpurile secțiunii următoare fără a calcula datele totale.

Există 6 tipuri de funcții agregate utilizate în grupări:

  1. SUMĂ— însumează valorile coloanei grupate, se aplică numai valorilor numerice.
  2. MEDIE — Calculează media aritmetică a valorilor coloanei grupate, aplicabilă numai valorilor numerice.
  3. MAXIM — poate fi utilizat pentru orice tip de valoare a coloanei care este grupată și returnează valoarea maximă a tuturor grupurilor grupate. Dacă valorile nu sunt numerice, atunci ultima este returnată la sortarea în ordine crescătoare.
  4. MINIM - poate fi utilizat pentru orice tip de valoare a coloanei care este grupată și returnează valoarea minimă a tuturor grupurilor grupate. Dacă valorile nu sunt numerice, atunci prima este returnată la sortarea în ordine crescătoare.
  5. CANTITATE— returnează numărul de valori din coloana grupată, poate fi folosit pentru orice tip de valoare. Valorile tipului nu sunt luate în considerare NUL.
  6. CANTITATE DIFERITĂ – returnează numărul de valori distincte din coloana grupată, poate fi folosit pentru orice tip de valoare. Valorile tipului nu sunt luate în considerare NUL.

A doua secțiune începe cu un cuvânt cheie DEși conține câmpuri de grupare în contextul cărora rezultatul va fi calculat pe baza câmpurilor totale. Și/sau cuvânt GENERAL, dacă trebuie să calculați totalurile pentru întregul eșantion. Ordinea în care vor fi amplasate câmpurile este importantă aici, aceasta depinde și de ordinea în care sunt calculate totalurile ca urmare a solicitării.

Dacă câmpul de grupare conține date care au o structură ierarhică (director ierarhic), atunci puteți calcula totalurile de-a lungul întregului lanț ierarhic. Cuvântul cheie folosit pentru aceasta este IERARHIE după numele câmpului de grupare. Dacă totalurile trebuie calculate de-a lungul întregului lanț ierarhic, cu excepția câmpului de grupare în sine, atunci cuvântul cheie este utilizat DOAR IERARHIE.

Să luăm ca exemplu un tabel cu livrările de mărfuri.

Sarcina 1. Calcularea totalurilor pentru mai multe câmpuri.

Trebuie să aflați câte mărfuri au fost livrate și câte mese și scaune există.

Cerere. Text= "ALEGE
Rechizite.Produs ca produs,


DIN
Rechizite CUM Rechizite
REZULTATE
SUMA(Cantitate)
DE
GENERAL,
Produs"
;

Ca rezultat, obținem următorul tabel cu totaluri (rândurile totale sunt evidențiate cu galben).

Sarcina 2. Gruparea înregistrărilor după câmp.

Este necesar să grupați înregistrările din tabel după tipul de produs.

Cerere. Text= "ALEGE
Rechizite.Produs ca produs,
Supplies.Supplier AS Furnizor,
Rechizite.Cantitate AS Cantitate,
DIN
Rechizite CUM Rechizite
REZULTATE

DE
Produs" ;

Sarcina 3. Calcularea totalurilor câmpurilor ținând cont de ierarhie.

Cerere. Text= "ALEGE
Rechizite.Produs ca produs,
Supplies.Supplier AS Furnizor,
Rechizite.Cantitate AS Cantitate,
DIN
Rechizite CUM Rechizite
REZULTATE
SUMA(Cantitate)
DE
IERARHIA Furnizorilor"
;

Ca rezultat, obținem următorul tabel.

Sarcina 4. Calcularea totalurilor numai pe ierarhie.

Cerere. Text= "ALEGE
Rechizite.Produs ca produs,
Supplies.Supplier AS Furnizor,
Rechizite.Cantitate AS Cantitate,
DIN
Rechizite CUM Rechizite
REZULTATE
SUMA(Cantitate)
DE
DOAR IERARHIA Furnizorilor"
;

Ca rezultat, obținem următorul tabel.

Cum să ocoliți rezultatul unei interogări cu totaluri

Rezultatul interogării cu totaluri poate fi ocolit în mai multe moduri:

  1. Exact ca o cerere normală. În acest caz, înregistrările de grupare și detaliate vor fi afișate secvenţial. Un exemplu de astfel de ocolire este dat în articol.
  2. Ocoliți separat grupările și înregistrările detaliate.
    Ca exemplu, să luăm cererea de la sarcina 1. Dar nu vom lua în considerare rezultatele generale.

    GroupsProduct = Solicitare. Run() . Selectați(BypassQueryResult.ByGrouping, „Produs”);
    În timp ce GrupăriProdus. Next() Buclă
    //aici procesăm șirurile de grupare ale rezultatului interogării
    DetailedRecords = GroupsProduct. Alegeți() ;
    În timp ce DetailedRecords. Next() Buclă
    //aici procesăm rânduri de înregistrări detaliate aparținând unor grupuri
    EndCycle ;
    EndCycle ;