Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Sigurnost
  • Biti u grupi prema hijerarhiji 1s 8. Operator “u hijerarhiji” u zahtjevu

Biti u grupi prema hijerarhiji 1s 8. Operator “u hijerarhiji” u zahtjevu

Dizajn “IN HIJERARHIJA” u 1C:Enterprise 8.x upitima omogućava vam da dobijete podređene elemente hijerarhijskog konfiguracionog objekta prema datom odabiru. Danas ćemo u članku pogledati primjer njegove upotrebe, kao i djelovanje platforme na strani DBMS-a i njen utjecaj na performanse.

Upotreba

Pogledajmo jednostavan primjer korištenja konstrukcije "IN HIERARCHY". Prilikom izvršavanja sljedećeg zahtjeva, podređeni elementi hijerarhijskog direktorija "Proizvodi" će se dobiti za proslijeđenu vrijednost varijable "Link".

Tekst upita = " SELECT | Proizvodi . Veza,| Roba . šifra dobavljača |OD| Imenik . Proizvodi AS Proizvodi|GDJE | Roba . Veza U HIJERARHIJI (& Veza)"

U bazi podataka testova, direktorij "Proizvodi" ima sljedeće testne podatke:

Naravno, slika ne prikazuje sve unose direktorija. Snimak ekrana prikazuje samo strukturu skladištenja podataka u hijerarhijskom direktoriju. Tabela direktorija pohranjuje 10 grupa najvišeg nivoa, od kojih svaka sadrži 5 ugniježđenih grupa sa po 200 elemenata.

Vratimo se na zahtjev za testiranje. Prosledimo vezu do grupe "Grupa - 1" do parametra "&Link" (pogledajte snimak ekrana iznad). Tada će rezultat upita izgledati ovako:

Kao što vidimo, zahtjev je vratio vezu na samu gornju grupu (proslijeđenu kao parametar), kao i na ugniježđene grupe sa elementima u njima. Dakle, upotreba konstrukcije “IN HIERARCHY” vam omogućava da lako dobijete hijerarhijski podređene podatke.

Sintaksa jezika upita 1C:Enterprise klasični SQL vrlo slični u nekim aspektima. Ali za izraz “IN HIJERARHIJA” nema analoga u SQL upitnom jeziku kao što, na primjer, za izraz jezika upita platforme “B” postoji sličan SQL operator “IN”. Stoga je interesantan rad platforme sa DBMS-om pri korištenju ovog operatora.

Iza scene

Pa počnimo. Na primjer, koristit ćemo prethodno napisani upit za direktorij “Proizvodi”. Mi ćemo analizirati radnje platforme za dvije situacije:

  1. Grupu najviše razine “Grupa 1” ćemo proslijediti kao parametar “&Link” (kao što smo to učinili ranije).
  2. U parametru ćemo proslediti vezu na grupu "Grupa 1 - 1", ugnežđenu u grupu najvišeg nivoa "Grupa 1".

Sada, redom. U prvom slučaju, platforma će izvršiti sljedeće radnje na SQL serveru:

1. Prvo se izvršava SQL upit za dobivanje veze na grupu direktorija koja je proslijeđena kao parametar i sve podređene grupe. Rezultat se stavlja u privremenu tabelu "#tt1".

2. U drugoj fazi, isti upit se izvršava dva puta:

Snimak ekrana sadrži detaljne komentare na tekst SQL upita. Ukratko, upit vam omogućava da odaberete podređene elemente za grupe koje su referencirane u privremenoj tabeli. Ostaje pitanje: "Zašto se upit izvršava dvaput?" Odgovor je jednostavan: prvo, upit prima podređene elemente za grupe prvog nivoa koji su već sadržani u privremenoj tabeli (vidi tačku 1). Drugi upit zatim dohvaća podelemente za podgrupe drugog nivoa. Budući da na trećem nivou hijerarhije nije prisutna grupa direktorija, ovaj upit se više ne izvršava.

U našem slučaju, drugi upit će vratiti prazan rezultat, jer ne postoje podređeni elementi za zapise koji se nalaze na 3. nivou hijerarhije (tamo nema grupa).

3. Da bi dobila konačni rezultat upita, platforma generiše sljedeći SQL upit:

Rezultat ovog konkretnog zahtjeva može se dalje obraditi algoritmima na ugrađenom jeziku platforme. Stoga se unosi u privremenu tablicu "#tt1" koriste za postavljanje uvjeta uzorkovanja iz referentne tablice "_Reference41".

4. U posljednjem koraku, platforma 1C:Enterprise 8.x briše privremenu tablicu „#tt1“, budući da se više neće koristiti u budućnosti.

Ovo završava proces izvršavanja operatora “IN HIJERARHIJA”. Da vas podsjetim da je razmatrani slijed radnji na SQL serveru izveden kada smo na zahtjev na strani platforme proslijedili vezu na grupu najvišeg nivoa „Grupa - 1“. Ali kako će se platforma ponašati ako kao parametar „&Link“ prosledimo vezu na grupu drugog nivoa „Grupa - 1 - 1“? Sve će se desiti na isti način, osim sledeće tačke: gore, u drugoj fazi izvršavanja SQL upita od strane platforme, pisalo je da je upit za dobijanje podređenih elemenata izvršen dva puta - u slučaju dobijanja podređenih elemenata za grupa "Grupa - 1 - 1" to nije slučaj. Zahtjev će biti izvršen samo jednom.

Činjenica je da broj zahtjeva za dobijanje podređenih elemenata zavisi od broja grupa u hijerarhiji. Drugim riječima, ako nivo hijerarhije elemenata sadrži barem jednu grupu, onda zahtjev iz tačke 2.

Performance Impact

Nepravilna upotreba bilo kojeg operatora u upitu može rezultirati neoptimalnim performansama sistema. Operater koji se razmatra “IN HIJERARHIJA” nije izuzetak. Mora se koristiti s oprezom, jer uvelike komplikuje algoritam za izvršavanje SQL upita bazi podataka i time povećava opterećenje na DBMS serveru.

Dozvolite mi da vam dam primjer neoptimalnog upita koji može dovesti do gore navedenih tužnih posljedica:

SELECT Products. Link IZ imenika. Proizvodi KAO Proizvodi GDJE (Proizvodi. Veza U HIJERARHIJI (& Veza) ILI Proizvodi. Veza U HIJERARHIJAMA (& Link1) ILI Proizvodi. Veza U HIJERARHIJI (& Link2) )

Kao što možete pretpostaviti, zahtjev će dovesti do generiranja mnogih SQL upita, što će rezultirati smanjenjem performansi informacionog sistema.

Izvucite svoje zaključke!

Na vama je da donesete zaključke. Samo da kažem da se operator “IN HIJERARHIJA” koristi od strane platforme za sistem sastavljanja podataka kada su uslovi odabira “U GRUPI”, “U GRUPI SA LISTE” i drugi. Mislim da nema potrebe objašnjavati da uz pogrešne manipulacije korisnici mogu postaviti vrlo složene odabire i povećati opterećenje 1C servera i DBMS-a nekoliko puta. Promijenimo postavke samo za iskusne korisnike.

I naravno, kada pišete sopstvene mehanizme, obratite pažnju na operator “IN HIJERARHIJA”. Vrlo zgodno s jedne strane, a opasno s druge strane.

Jezik upita u 1C 8 je pojednostavljeni analog dobro poznatog „strukturiranog programskog jezika“ (kako se češće naziva SQL). Ali u 1C se koristi samo za čitanje podataka; objektni model podataka se koristi za promjenu podataka.

Još jedna zanimljiva razlika je ruska sintaksa. Iako u stvari možete koristiti konstrukcije na engleskom jeziku.

Primjer zahtjeva:

ODABIR
Banke.Naziv,
Banks.CorrAccount
OD
Imenik.Banke KAKO Banke

Ovaj zahtjev će nam omogućiti da vidimo informacije o nazivu i korespondentnom računu svih banaka koje postoje u bazi podataka.

Jezik upita je najjednostavniji i najefikasniji način za dobijanje informacija. Kao što se može vidjeti iz gornjeg primjera, u jeziku upita morate koristiti imena metapodataka (ovo je lista sistemskih objekata koji čine konfiguraciju, tj. direktorije, dokumenti, registri, itd.).

Opis konstrukcija jezika upita

Struktura upita

Za dobivanje podataka dovoljno je koristiti konstrukcije “SELECT” i “FROM”. Najjednostavniji zahtjev izgleda ovako:

SELECT * FROM Directories.Nomenclature

Gdje “*” označava odabir svih polja tabele, a Imenici.Nomenklatura – naziv tabele u bazi podataka.

Pogledajmo složeniji i opći primjer:

ODABIR
<ИмяПоля1>KAKO<ПредставлениеПоля1>,
Suma(<ИмяПоля2>) KAKO<ПредставлениеПоля2>
OD
<ИмяТаблицы1>KAKO<ПредставлениеТаблицы1>
<ТипСоединения>COMPOUND<ИмяТаблицы2>KAKO<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

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

GROUP BY
<ИмяПоля1>

SORT BY
<ИмяПоля1>

REZULTATI
<ИмяПоля2>
BY
<ИмяПоля1>

U ovom upitu biramo podatke polja “FieldName1” i “FieldName1” iz tabela “TableName1” i “TableName”, dodjeljujemo sinonime poljima pomoću “HOW” operatora i povezujemo ih koristeći određeni uslov “TableConnectionCondition ”.

Od primljenih podataka biramo samo podatke koji ispunjavaju uslov iz "GDJE" "Uslov odabira podataka". Zatim grupišemo zahtjev po polju "Naziv polja1", dok zbrajamo "Naziv polja2". Kreiramo zbrojeve za polje “Naziv polja1” i posljednje polje “Naziv polja2”.

Posljednji korak je sortiranje zahtjeva pomoću konstrukcije ORDER BY.

Opšti projekti

Pogledajmo opće strukture jezika upita 1C 8.2.

PRVOn

Koristeći ovaj operator, možete dobiti n broj prvih zapisa. Redoslijed zapisa određen je redoslijedom u upitu.

IZABERI PRVI 100
Banke.Naziv,
Banke Šifra AS BIC
OD
Imenik.Banke KAKO Banke
SORT BY
Banks.Name

Zahtjev će primiti prvih 100 unosa u imeniku „Banke“, poredanih po abecednom redu.

DOZVOLJENO

Ovaj dizajn je relevantan za rad s mehanizmom. Suština mehanizma je da ograniči čitanje (i druge radnje) na korisnike za određene zapise u tabeli baze podataka, a ne za tabelu u celini.

Ako korisnik pokuša upotrijebiti upit za čitanje zapisa koji su mu nedostupni, dobit će poruku o grešci. Da biste to izbjegli, trebali biste koristiti konstrukciju “ALOWED”, tj. zahtjev će čitati samo zapise koji su mu dozvoljeni.

ODABIR DOZVOLJENO
Repozitorijum dodatnih informacija Link
OD
Direktorij.Repozitorij dodatnih informacija

VARIOUS

Korištenje “DIFFERENT” će spriječiti duple linije da uđu u rezultat 1C upita. Dupliciranje znači da se sva polja zahtjeva podudaraju.

IZABERI PRVI 100
Banke.Naziv,
Banke Šifra AS BIC
OD
Imenik.Banke KAKO Banke

EmptyTable

Ova konstrukcija se vrlo rijetko koristi za kombiniranje upita. Prilikom spajanja, možda ćete morati navesti praznu ugniježđenu tablicu u jednoj od tabela. Operator “EmptyTable” je baš pravi za ovo.

Primjer iz 1C 8 pomoći:

ODABIR Link.Broj, PRAZNA TABLICA.(Br., Stavka, Količina) KAO Sastav
FROM Document.Expense Invoice
Kombinujte SVE
ODABIR Link.Broj, Sadržaj.(Broj reda, Proizvod, Količina)
IZ Dokument.Račun Dokument.Faktura.Sastav.*

ISNULL

Vrlo korisna funkcija koja vam omogućava da izbjegnete mnoge greške. YesNULL() vam omogućava da NULL vrijednost zamijenite željenom. Vrlo često se koristi za provjeru prisutnosti vrijednosti u spojenim tabelama, na primjer:

ODABIR
Nomenklatura Ref. Link,
IsNULL(Preostala stavka.Preostala količina,0) AS Preostala količina
OD


Može se koristiti na druge načine. Na primjer, ako za svaki red nije poznato u kojoj tablici postoji vrijednost:

ISNULL(Faktura primljena.Datum, Račun izdana.Datum)

HOW je operator koji nam omogućava da dodijelimo ime (sinonim) tablici ili polju. Gore smo vidjeli primjer upotrebe.

Ove konstrukcije su vrlo slične - omogućavaju vam da dobijete string reprezentaciju željene vrijednosti. Jedina razlika je u tome što REPRESENTATION konvertuje bilo koju vrijednost u tip stringa, dok REPRESENTATIONREF pretvara samo referentne vrijednosti. REFERENCE REPRESENTATION se preporučuje da se koristi u sistemskim upitima za sastav podataka radi optimizacije, osim ako se, naravno, ne planira da se polje referentnih podataka koristi u selekcijama.

ODABIR
View(Link), //string, na primjer “Unapredni izvještaj br. 123 od 10.10.2015.
View(DeletionMark) AS DeleteMarkText, //string, “Da” ili “Ne”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True or False
OD
Dokument.Napredni izvještaj

EXPRESS

Express vam omogućava da konvertujete vrijednosti polja u željeni tip podataka. Možete pretvoriti vrijednost u primitivni ili referentni tip.

Express za referentni tip se koristi za ograničavanje traženih tipova podataka u poljima složenog tipa, često se koristi za optimizaciju performansi sistema. primjer:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Type of ActivityForTaxAccountingCosts

Za primitivne tipove, ova funkcija se često koristi za ograničavanje broja znakova u poljima neograničene dužine (takva polja se ne mogu porediti). Da izbjegnemo grešku" Nevažeći parametri u operaciji poređenja. Ne možete upoređivati ​​polja
neograničena dužina i polja nekompatibilnih tipova
", morate izraziti takva polja na sljedeći način:

EXPRESS(Komentirajte AS red(150))

DIFFERENCEDATE

Nabavite 267 video lekcija na 1C besplatno:

Primjer korištenja IS NULL u 1C zahtjevu:

BIRAJTE IZ
Ref
LIJEVA POVEZANOST Registar Akumulacije.ProizvodiUSkladištima.Preostalo KAO Preostali proizvod
Nomenklatura softveraRef.Link = Komiteti za prodanu robuRemains.Nomenclature
GDJE NIJE Preostali proizvodi Preostala količina JE NULL

Tip podataka u upitu može se odrediti korištenjem funkcija TYPE() i VALUETYPE() ili korištenjem logičkog REFERENCE operatora. Ove dvije funkcije su slične.

Unaprijed definirane vrijednosti

Osim korištenja proslijeđenih parametara u upitima na 1C jeziku upita, možete koristiti unaprijed definirane vrijednosti ili . Na primjer, transferi, unaprijed definirani imenici, kontni planovi itd. Za to se koristi konstrukcija “Vrijednost()”.

Primjer upotrebe:

WHERE Nomenklatura.Vrsta nomenklature = Vrijednost(Imenik.Vrste nomenklature.Proizvod)

WHERE Counterparties.Vrsta kontakt informacija = Vrijednost(Enumeracija.Vrste kontakt informacija.Telefon)

WHERE Stanje računa.Računovodstveni račun = Vrijednost(Kontni plan.Profit.ProfitGubitak)

Veze

Postoje 4 vrste veza: LIJEVO, PRAVO, KOMPLETAN, UNUTRAŠNJI.

LIJEVI i DESNI PRIKLJUČAK

Spojevi se koriste za povezivanje dvije tabele na osnovu specifičnog uslova. Feature when LEFT JOIN je da uzimamo prvu specificiranu tabelu u celini i uslovno vezujemo drugu tabelu. Polja druge tabele koja ne mogu biti vezana uslovom se popunjavaju vrednošću NULL.

Na primjer:

Vratiće čitavu tabelu Counterparty i popuniti polje “Banka” samo na onim mestima gde će biti ispunjen uslov “Counterparties.Name = Banks.Name”. Ako uslov nije ispunjen, polje Banka će biti postavljeno na NULL.

DESNO PRIDRUŽENJE na 1C jeziku apsolutno slicno LIJEVA veza, sa izuzetkom jedne razlike - u PRAVO PRIKLJUČIVANJA“Glavna” tabela je druga, a ne prva.

FULL CONNECTION

FULL CONNECTION razlikuje se od lijevog i desnog po tome što prikazuje sve zapise iz dvije tabele i povezuje samo one koje može povezati po uslovu.

Na primjer:

OD

FULL CONNECTION
Imenik.Banke KAKO Banke

BY

Jezik upita će u potpunosti vratiti obje tabele samo ako je ispunjen uslov za pridruživanje zapisima. Za razliku od lijevog/desnog spajanja, moguće je da se NULL pojavi u dva polja.

INNER JOIN

INNER JOIN razlikuje se od punog po tome što prikazuje samo one zapise koji se mogu povezati prema datom uslovu.

Na primjer:

OD
Imenik. Counterparties AS Klijenti

INNER JOIN
Imenik.Banke KAKO Banke

BY
Clients.Name = Banks.Name

Ovaj upit će vratiti samo redove u kojima banka i druga strana imaju isto ime.

Asocijacije

Konstrukcije JOIN i JOIN ALL kombinuju dva rezultata u jedan. One. rezultat izvođenja dva bit će "spojen" u jedan, zajednički.

Odnosno, sistem radi potpuno isto kao i obični, samo za privremeni sto.

Kako koristiti INDEX BY

Međutim, treba uzeti u obzir jednu tačku. Izgradnja indeksa na privremenoj tabeli također zahtijeva vrijeme da se završi. Stoga je preporučljivo koristiti konstrukciju “ ” samo ako se pouzdano zna da će u privremenoj tabeli biti više od 1-2 zapisa. U suprotnom, efekat može biti suprotan - performanse indeksiranih polja ne kompenzuju vreme potrebno za izgradnju indeksa.

ODABIR
Tečaji Najnoviji presjek Valuta AS Valuta,
Kursevi Najnoviji presjek.
PUT Kurs valuta
OD
Informacija Registar.Kursi valuta.Posljednji dio(&Period,) AS tečajevi valutaPosljednji dio
INDEX BY
Valuta
;
ODABIR
CijeneNomenklatura.Nomenklatura,
CijeneNomenklature.Cijena,
CijeneNomenklature.Valuta,
Currency rates.Rate
OD
Informacije Registar.Nomenklaturne cijene.Posljednji dio(&period,
Nomenklatura B (&Nomenklatura) I Vrsta cijene = &Tip cijene) AS Nomenklatura cijene
LEFT JOIN Currency rates AS Currency rates
Software PricesNomenclatures.Currency = Kursevi valuta.Valuta

Grupisanje

1C jezik upita vam omogućava da koristite posebne agregatne funkcije prilikom grupisanja rezultata upita. Grupiranje se također može koristiti bez agregatnih funkcija za “eliminaciju” duplikata.

Postoje sljedeće funkcije:

Količina, Količina, Broj različitih, Maksimum, Minimum, Prosjek.

Primjer #1:

ODABIR
Prodaja robe i usluga Roba. Nomenklatura,
SUM(Prodaja robeUslugeRobe.Količina) AS količina,
SUM(Prodaja robeUslugeRobe.Iznos) AS iznos
OD

GROUP BY
Prodaja roba i usluga Roba.Nomenklatura

Zahtjev prima sve redove sa robom i sumira ih po količini i iznosima po artiklima.

Primjer br. 2

ODABIR
Banks.Code,
KOLIČINA (RAZLIČITE banke. Veza) KAO broj duplikata
OD
Imenik.Banke KAKO Banke
GROUP BY
Banks.Code

Ovaj primjer će prikazati listu BIC-ova u direktoriju “Banke” i pokazati koliko duplikata postoji za svaki od njih.

Rezultati

Rezultati su način da se dobiju podaci iz sistema sa hijerarhijskom strukturom. Agregatne funkcije se mogu koristiti za polja sažetka, baš kao i za grupisanje.

Jedan od najpopularnijih načina korištenja rezultata u praksi je serijski otpis robe.

ODABIR




OD
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORT BY

REZULTATI
SUM (količina),
SUM(Zbroj)
BY
Nomenklatura

Rezultat upita bit će sljedeći hijerarhijski:

Opšti rezultati

Ako trebate dobiti zbrojeve za sve "zbirove", koristite operator "GENERAL".

ODABIR
Prodaja robe i usluga Roba Nomenklatura AS Nomenklatura,
Prodaja robe i usluga Roba Link AS Document,
Prodaja robe i usluga Roba Količina AS Količina,
Prodaja roba i usluga Roba Iznos AS Iznos
OD
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORT BY
Prodaja robe i usluga Roba Link Datum
REZULTATI
SUM (količina),
SUM(Zbroj)
BY
ČESTI SU,
Nomenklatura

Kao rezultat izvršenja zahtjeva, dobijamo sljedeći rezultat:

U kojoj je 1 nivo grupisanja agregacija svih potrebnih polja.

Dogovaranje

Operator ORDER BY se koristi za sortiranje rezultata upita.

Sortiranje primitivnih tipova (string, broj, boolean) slijedi uobičajena pravila. Za polja referentnog tipa, sortiranje se događa internim predstavljanjem veze (jedinstveni identifikator), a ne kodom ili referentnim prikazom.

ODABIR

OD
Imenik.Nomenklatura AS Nomenklatura
SORT BY
Ime

Zahtjev će prikazati listu imena u imeniku nomenklature, poredanu po abecednom redu.

Auto-order

Rezultat upita bez sortiranja je haotično predstavljen skup redova. Programeri 1C platforme ne jamče da će redovi biti ispisani istim redoslijedom prilikom izvršavanja identičnih upita.

Ako trebate prikazati zapise tablice u konstantnom redoslijedu, morate koristiti konstrukciju automatskog reda.

ODABIR
Nomenklatura.Naziv AS Naziv
OD
Imenik.Nomenklatura AS Nomenklatura
AUTO ORDER

Virtuelni stolovi

Virtuelne tabele u 1C jedinstvena su karakteristika 1C jezika upita koja se ne nalazi u drugim sličnim sintaksama. Virtuelna tabela je brz način za dobijanje informacija o profilu iz registara.

Svaki tip registra ima svoj skup virtualnih tabela, koje se mogu razlikovati ovisno o postavkama registra.

  • rez prvog;
  • rez ovog drugog.
  • ostaci;
  • revolucije;
  • stanja i promet.
  • pokreti iz podkonto;
  • revolucije;
  • brzina Dt Kt;
  • ostaci;
  • stanja i promet
  • subconto.
  • baza;
  • podaci grafa;
  • stvarni period važenja.

Za programera rješenja, podaci se preuzimaju iz jedne (virtualne) tablice, ali zapravo 1C platforma uzima iz više tabela, pretvarajući ih u traženi oblik.

ODABIR
Proizvodi u skladištima Ostaci i promet. Nomenklatura,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
Proizvodi u skladištima Ostaci i promet. KoličinaPromet,
RobaUSkladištimaRemainsAndTurnover.Količina Dolazni,
roba u skladištima Ostaci i promet. Količina Potrošnja,
ProizvodiUSkladištimaRemainingsAndTurnover.QuantityFinalRemaining
OD
Registrirajte Akumulacije.RobaUSkladištima.OstaciIPromet AS RobaUSkladištimaOstaciIPromet

Ovaj upit vam omogućava da brzo dohvatite veliku količinu podataka.

Opcije virtuelne tabele

Veoma važan aspekt rada sa virtuelnim tabelama je upotreba parametara. Parametri virtualne tablice su specijalizirani parametri za odabir i konfiguraciju.

Za takve tabele, smatra se netačnim korištenje odabira u konstrukciji “WHERE”. Pored činjenice da upit postaje suboptimalan, moguće je dobiti i netačne podatke.

Primjer korištenja ovih parametara:

Registar akumulacija. Roba u skladištima. Stanja i promet (& početak perioda, i kraj perioda, mjesec, kretanja i granice perioda, nomenklatura = & obavezna nomenklatura)

Algoritam za virtuelne tabele

Na primjer, najčešće korištena virtualna tablica tipa “Ostaci” pohranjuje podatke iz dvije fizičke tablice – stanja i kretanja.

Kada koristite virtuelnu tabelu, sistem izvodi sledeće manipulacije:

  1. Najbližu izračunatu vrijednost u smislu datuma i mjerenja dobijamo u tabeli ukupnih vrijednosti.
  2. Iznos iz tabele kretanja „dodajemo“ iznosu iz tabele ukupnih vrednosti.


Takve jednostavne radnje mogu značajno poboljšati performanse sistema u cjelini.

Korištenje Query Builder-a

Query Builder– alat ugrađen u 1C Enterprise sistem koji uvelike olakšava razvoj upita baze podataka.

Kreator upita ima prilično jednostavan, intuitivan interfejs. Ipak, pogledajmo detaljnije korištenje konstruktora upita.

Konstruktor teksta upita se pokreće iz kontekstnog menija (desno dugme miša) na željenom mestu u programskom kodu.

Opis konstruktora 1C zahtjeva

Pogledajmo detaljnije svaku karticu dizajnera. Izuzetak je kartica Builder, koja je tema za drugu diskusiju.

Tab Tabele i polja

Ova kartica navodi izvor podataka i polja koja treba da budu prikazana u izveštaju. U suštini, ovdje su opisane konstrukcije SELECT.. FROM.

Izvor može biti tabela fizičke baze podataka, tabela virtuelnog registra, privremene tabele, ugniježđeni upiti itd.

U kontekstualnom meniju virtuelnih tabela možete podesiti parametre virtuelne tabele:

Veze kartica

Kartica se koristi za opisivanje veza nekoliko tablica i kreira konstrukcije sa riječju CONNECTION.

Grupiranje kartica

Na ovoj kartici, sistem vam omogućava da grupišete i sumirate potrebna polja rezultata tabele. Opisuje upotrebu konstrukcija GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, KOLIČINA, BROJ RAZLIČITIH.

Kartica Uslovi

Odgovoran za sve što dolazi u tekstu zahtjeva nakon WHERE konstrukcije, odnosno za sve uslove postavljene na primljene podatke.

Napredna kartica

Tab Dodatno prepuna svih vrsta parametara koji su veoma važni. Pogledajmo svako od svojstava.

Grupisanje Odabir zapisa:

  • Prvo N– parametar koji vraća samo N zapisa na upit (operator FIRST)
  • Nema duplikata– osigurava jedinstvenost primljenih zapisa (DRUGAČI operator)
  • Dozvoljeno– omogućava vam da odaberete samo one zapise koje vam sistem dozvoljava da odaberete uzimajući u obzir (DOPUŠTENA konstrukcija)

Grupisanje Vrsta zahtjeva određuje koji će tip zahtjeva biti: dohvaćanje podataka, kreiranje privremene tablice ili uništavanje privremene tablice.

Ispod je zastava Zaključajte primljene podatke za kasniju modifikaciju. Omogućava vam da omogućite mogućnost podešavanja zaključavanja podataka, što osigurava sigurnost podataka od trenutka kada se čitaju do promjene (relevantno samo za režim automatskog zaključavanja, dizajn ZA PROMJENU).

Tab. Joins/Aliases

Na ovoj kartici dizajnera upita možete postaviti mogućnost spajanja različitih tabela i pseudonima (konstrukcija HOW). Tabele su naznačene na lijevoj strani. Ako postavite zastavice nasuprot tablice, koristit će se UNITE konstrukcija, u suprotnom - UNITE ALL (razlike između ova dva metoda). Na desnoj strani je naznačena korespondencija polja u različitim tabelama; ako korespondencija nije navedena, upit će vratiti NULL.

Tab

Ovo određuje redoslijed u kojem su vrijednosti sortirane (ORDER BY) - opadajuće (DESC) ili rastuće (ASC).

Tu je i zanimljiva zastava - Auto-order(u zahtjevu - AUTO NARUČIVANJE). Podrazumevano, 1C sistem prikazuje podatke u "haotičnom" redosledu. Ako postavite ovu zastavicu, sistem će sortirati podatke prema internim podacima.

Kartica Grupa upita

Na kartici dizajner upita možete kreirati nove i koristiti je kao navigaciju. U tekstu zahtjeva, paketi su odvojeni simbolom “;” (zarez).

Dugme “Upit” u dizajneru upita

U donjem lijevom kutu dizajnera zahtjeva nalazi se dugme Zahtjev, pomoću kojeg u svakom trenutku možete pogledati tekst zahtjeva:

U ovom prozoru možete izvršiti prilagođavanja zahtjeva i izvršiti ga.


Korištenje Query Console

Query Console je jednostavan i zgodan način za otklanjanje grešaka u složenim upitima i brzo dobijanje informacija. U ovom članku pokušat ću opisati kako koristiti Query Console i dati vezu za preuzimanje Query Console.

Pogledajmo pobliže ovaj alat.

Preuzmite 1C konzolu za upite

Prije svega, da biste počeli raditi sa konzolom za upite, morate je odnekud preuzeti. Tretmani se obično dijele na dvije vrste - kontrolisane forme i konvencionalne (ili se ponekad nazivaju 8.1 i 8.2/8.3).

Pokušao sam kombinovati ova dva pogleda u jednoj obradi - željena forma se otvara u željenom režimu rada (u upravljanom modu, konzola radi samo u debelom modu).

Opis 1C konzole za upite

Počnimo gledati konzolu za upite s opisom glavnog panela za obradu:

U zaglavlju konzole za upite možete vidjeti vrijeme izvršenja posljednjeg upita s preciznošću od milisekundi, što vam omogućava da uporedite različite dizajne u smislu performansi.

Prva grupa dugmadi na komandnoj traci je odgovorna za spremanje trenutnih upita u eksternu datoteku. Ovo je vrlo zgodno; uvijek se možete vratiti pisanju složenog zahtjeva. Ili, na primjer, pohranite listu tipičnih primjera određenih dizajna.

Na lijevoj strani, u polju “Zahtjev”, možete kreirati nove zahtjeve i pohraniti ih u strukturu stabla. Druga grupa dugmadi je odgovorna za upravljanje listom zahteva. Koristeći ga možete kreirati, kopirati, brisati, premještati zahtjev.

  • Izvršizahtjev– jednostavno izvođenje i rezultati
  • Izvrši paket– omogućava vam da vidite sve posredne upite u grupi upita
  • Pregled privremenih tabela– omogućava vam da vidite rezultate koje privremeni upiti vraćaju na tablicu

Parametri zahtjeva:

Omogućava vam da postavite trenutne parametre za zahtjev.

U prozoru parametara upita zanimljivo je sljedeće:

  • Dugme Uzmite iz zahtjeva automatski pronalazi sve parametre u zahtjevu radi pogodnosti programera.
  • Zastava Zajednički parametri za sve zahtjeve– kada je instaliran, njegova obrada ne briše parametre pri prelasku sa zahtjeva na zahtjev u opštoj listi zahtjeva.

Postavite parametar sa listom vrijednosti Vrlo je jednostavno, samo kada birate vrijednost parametra, kliknite na dugme za brisanje vrijednosti (križ), sistem će od vas tražiti da odaberete tip podataka, gdje trebate odabrati „Lista vrijednosti“:

Takođe na gornjoj ploči nalazi se dugme za pozivanje postavki konzole za upite:

Ovdje možete odrediti parametre za automatsko spremanje upita i parametre za izvršavanje upita.

Tekst zahtjeva se unosi u polje zahtjeva konzole. To se može učiniti jednostavnim upisivanjem testa upita ili pozivanjem posebnog alata - dizajnera upita.

Dizajner upita 1C 8 se poziva iz kontekstnog menija (desno dugme miša) kada kliknete na polje za unos:

Ovaj meni također ima korisne funkcije kao što je brisanje ili dodavanje prijeloma reda (“|”) u zahtjev ili primanje koda zahtjeva u ovom prikladnom obliku:

Zahtjev = Novi zahtjev;
Request.Text = ”
|ODABIR
| Currencies.Link
|OD
| Directory.Currenci AS valute”;
RequestResult = Request.Execute();

Donje polje konzole za upite prikazuje polje rezultata upita, zbog čega je kreirana ova obrada:



Također, konzola za upite, pored liste, može prikazati podatke u obliku stabla - za upite koji sadrže ukupne vrijednosti.

Optimizacija upita

Jedna od najvažnijih tačaka u povećanju produktivnosti 1C preduzeća 8.3 je optimizacijazahtjevi. Ova tačka je takođe veoma važna kada polaganje sertifikata. U nastavku ćemo govoriti o tipičnim razlozima za neoptimalne performanse upita i metode optimizacije.

Selekcije u virtualnoj tablici koristeći WHERE konstrukciju

Potrebno je primijeniti filtere na detalje virtualne tablice samo preko VT parametara. Ni pod kojim okolnostima ne biste trebali koristiti WHERE konstrukciju za odabir u virtuelnoj tabeli; ovo je ozbiljna greška sa tačke gledišta optimizacije. U slučaju odabira pomoću WHERE, zapravo, sistem će primiti SVE zapise i tek onda odabrati one potrebne.

PRAVO:

ODABIR

OD
Registar akumulacija Međusobna poravnanja sa učesnicima organizacija stanja (
,
Organizacija = &Organizacija
I Pojedinac = &Pojedinac) KAKO Međusobna poravnanja sa Učesnicima Organizacija Stanja

POGREŠNO:

ODABIR
Međusobna poravnanja sa Učesnicima Organizacija Stanje Iznos Stanje
OD
Registar akumulacija Međusobna poravnanja sa učesnicima organizacija Stanja (,) KAKO Međusobna poravnanja sa učesnicima organizacija Stanja
GDJE
Međusobna poravnanja sa učesnicima bilansa organizacija Organizacija = & Organizacija
I Međusobna poravnanja sa Učesnicima u bilansima organizacija. Pojedinac = &Pojedinac

Dobivanje vrijednosti polja složenog tipa pomoću tačke

Prilikom primanja podataka složenog tipa u upitu preko tačke, sistem se povezuje sa levim spojem tačno onoliko tabela koliko je tipova moguće u polju složenog tipa.

Na primjer, vrlo je nepoželjno za optimizaciju pristupiti polju registarskog zapisa – registrator. Registar ima složeni tip podataka, među kojima su svi mogući tipovi dokumenata koji mogu upisivati ​​podatke u registar.

POGREŠNO:

ODABIR
Record Set.Recorder.Date,
RecordSet.Quantity
OD
RegisterAcumulations.ProductsOrganizations AS SetRecords

To jest, u stvari, takav upit će pristupiti ne jednoj tabeli, već 22 tabele baze podataka (ovaj registar ima 21 tip registratora).

DESNO:

ODABIR
IZBOR
WHEN ProductsOrg.Registrar LINK Dokument. Prodaja proizvoda i usluga
THEN EXPRESS(Organizacija proizvoda.Registar AS dokument.Prodaja robeUsluge).Datum
KADA GoodsOrg.Registrar LINK Dokument.Prijem robeUsluge
ONDA EKSPRES (GoodsOrg.Registrar AS Dokument. Prijem robeUsluge).Datum
KRAJ KAO DATUM,
ProductsOrg.Quantity
OD
RegisterAcumulations.ProductsOrganizations AS ProductsOrganization

Ili je druga opcija dodavanje takvih informacija detaljima, na primjer, u našem slučaju, dodavanje datuma.

DESNO:

ODABIR
ProizvodiOrganizacije.Datum,
Proizvodi Organizacije. Količina
OD
Registar akumulacija Roba organizacija AS Roba organizacija

Podupiti u stanju spajanja

Za optimizaciju je neprihvatljivo koristiti potupite u uslovima spajanja, što značajno usporava upit. Preporučljivo je koristiti VT u takvim slučajevima. Da biste se povezali, morate koristiti samo metapodatke i VT objekte, nakon što ste ih prethodno indeksirali po poljima veze.

POGREŠNO:

ODABIR…

LIJEVO PRIDRUŽENJE (
SELECT FROM RegisterInformation.Limits
GDJE…
GRUPI PO...
) PO …

DESNO:

ODABIR…
PUT Limits
IZ Informacija Registar.Ograničenja
GDJE…
GRUPI PO...
INDEX BY...;

ODABIR…
IZ dokumenta Prodaja roba i usluga
LEFT JOIN Limits
BY …;

Spajanje zapisa sa virtuelnim tabelama

Postoje situacije kada pri povezivanju virtuelnog stola sa drugima sistem ne radi optimalno. U ovom slučaju, da biste optimizirali performanse upita, možete pokušati smjestiti virtualnu tablicu u privremenu tablicu, ne zaboravljajući indeksirati spojena polja u upitu za privremenu tablicu. To je zbog činjenice da su VT-ovi često sadržani u nekoliko fizičkih DBMS tablica; kao rezultat toga, potupit se kompajlira za njihovo odabiranje, a problem se ispostavi da je sličan prethodnoj točki.

Korištenje odabira zasnovanih na neindeksiranim poljima

Jedna od najčešćih grešaka pri pisanju upita je korištenje uslova na neindeksiranim poljima, što je u suprotnosti pravila optimizacije upita. DBMS ne može optimalno izvršiti upit ako upit uključuje odabir polja koja se ne mogu indeksirati. Ako uzmete privremenu tabelu, također morate indeksirati polja veze.

Za svaki uslov mora postojati odgovarajući indeks. Pogodan indeks je onaj koji zadovoljava sljedeće zahtjeve:

  1. Indeks sadrži sva polja navedena u uslovu.
  2. Ova polja se nalaze na samom početku indeksa.
  3. Ovi odabiri su uzastopni, odnosno vrijednosti koje nisu uključene u uvjet upita nisu „uklesane“ između njih.

Ako DBMS ne odabere ispravne indekse, cijela tabela će biti skenirana - to će imati vrlo negativan utjecaj na performanse i može dovesti do produženog blokiranja cijelog skupa zapisa.

Korišćenje logičkog ILI u uslovima

To je sve, ovaj članak je pokrio osnovne aspekte optimizacije upita koje bi svaki 1C stručnjak trebao znati.

Veoma koristan besplatni video kurs o razvoju i optimizaciji upita, Toplo preporučujem za početnike i više!

1C direktoriji su specijalizirani objekt stabla metapodataka koji služi za pohranu statičkih referentnih informacija. Na primjer, u tipičnim konfiguracijama možete vidjeti sljedeće prikaze: , Nomenklatura, Zaposleni, Osnovna sredstva, itd. Informacije u imenicima se po pravilu ne mijenjaju često. Imenici se kasnije koriste u gotovo svim računovodstvenim objektima kao računovodstveni odjeljak ili referentna informacija.

U nastavku ćemo pogledati postavljanje i dizajn direktorija iz konfiguratora koristeći direktorij “Nomenclature” kao primjer.

Basic Tab

Kartica „Osnovno“ navodi naziv, sinonim, prikaz objekta i opis svrhe.

Kartica “Hijerarhija imenika”.

Ovdje je uspostavljena hijerarhija direktorija.

Hijerarhija u 1C 8.3 je dva tipa - “ grupe i elementi" i " elementi". Razlikuje se po tome što u prvom slučaju samo folder (grupa) može biti roditelj (folder), au drugom slučaju element može biti i roditelj.

“Postavite grupe na vrh” - zastavica je odgovorna za prikaz grupa u obliku liste.

Također u postavkama možete ograničiti broj grupa u hijerarhiji direktorija koristeći odgovarajuću postavku.

Vlasnici Tab

Direktorij može biti podređen drugom direktoriju. Sa stanovišta konfiguracije 1C 8.3, to znači da atribut "Vlasnik" postaje obavezan za podređeni element. Primjer takve veze između imenika u standardnim konfiguracijama "Nomenklatura - mjerne jedinice", "Suradne strane - Ugovori ugovarača".

Vlasnik direktorija također može biti sljedeći objekti metapodataka: , .

Data Tab

Nabavite 267 video lekcija na 1C besplatno:

Najvažnija kartica sa stanovišta programera. Sadrži detalje direktorija.

Direktorij ima skup standardnih detalja koje ne uređuje 1C 8.2 programer; njihova lista se može vidjeti klikom na dugme "Standardni detalji":

Zadržat ću se na svakom detaljnije:

  • Ova grupa— atribut s Booleovim tipom, koji pokazuje da li je grupa ili element. Dostupno samo u hijerarhijskom direktoriju. Bilješka, vrijednost ovog atributa ne može se promijeniti u 1C: Enterprise modu.
  • Kod— rekviziti, broj tipa ili string (obično niz). Broj koji sistem automatski dodjeljuje. Obično se izračunava kao (prethodni kod + 1). Preporučujem korištenje tipa stringa, jer sortiranje numeričkih vrijednosti ne funkcionira kako se očekivalo. Može se koristiti kao prezentacija imenika na listi i u poljima za unos. Obično se koristi za traženje elementa prilikom unosa niza. Ako trebate ukloniti polje koda, unesite nulu u dužinu reda.
  • Ime— obavezni detalji, vrsta stringa. Maksimalna dužina reda je 150 znakova. Može se koristiti kao prezentacija imenika na listi i u poljima za unos. Obično se koristi za traženje elementa prilikom unosa niza. Ako trebate ukloniti polje Ime, unesite nulu u dužinu reda.
  • Roditelj— atribut tipa DirectoryLink.<ИмяТекущегоСправочника>. Dostupno samo u hijerarhijskom direktoriju. Pokazuje na nadređenog roditelja u hijerarhiji. Ako je element ili grupa u korijenu direktorija, specificira se vrijednost Direktorij.<ИмяТекущегоСправочника>.EmptyLink.
  • Vlasnik— veza do elementa vlasnika trenutnog elementa (grupe) direktorija. Dostupan samo u podređenom imeniku 1C.
  • FlagDeletion— rekviziti sa tipom Boolean. Odgovoran za prikazivanje “oznake za brisanje” u sistemu. Element označen za brisanje smatra se neupotrebljivim, ali na njemu mogu ostati stari pokreti dokumenta.
  • Veza— polje tipa string. Ovaj atribut pohranjuje jedinstveni identifikator objekta - GUID. Ono što vidimo u sistemu u vizuelnom prikazu zvanom „link” je samo reprezentacija objekta. Ne može se promijeniti.
  • Predefinisano— boolean tip, prikazuje da li je element unapred definisan, više o tome kasnije. Ne može se promijeniti.

Kartica “Podaci” također označava predstavljanje direktorija u sistemu; prije verzije 8.2.16, reprezentacija je mogla biti samo Šifra ili Ime. U novijim verzijama platforme (počevši od 8.3), pogled se može opisati nezavisno u modulu menadžera pomoću rukovaoca “ViewReceivingProcessing”.

Kartica numeracije

Ovdje možete odrediti postavke imenika u pogledu numeriranja. Preporučuje se korištenje autonumeracije. Kontrola jedinstvenosti je oznaka koja pomaže, ako je potrebno, da se kod učini jedinstvenim. Ako, sa postavljenom zastavicom, pokušate napisati element direktorija s nejedinstvenim kodom, u 1C ćete dobiti poruku "Kôd direktorija je postao nejedinstven."

Serija kodova - određuje kako numerirati imenik; možete unijeti numeraciju imenika po vlasniku. Na primjer, ugovorna strana "Rogovi i kopita" imat će vlastitu numeraciju ugovora - "1, 2, 3" itd.

Forms Tab

Ovdje su opisani obrasci za imenik. Ako se konfiguracija pokrene u normalnom i upravljanom načinu rada, tada će postojati dvije kartice s obrascima prema zadanim postavkama: “glavni” i “napredni” - različiti za normalne i upravljane aplikacije.

Ova stranica ima važnu karakteristiku imenika - ““. Ovo je vrlo zgodna funkcija 1C 8, koja vam omogućava da prilikom popunjavanja podataka u polju za unos ne ulazite u direktorij, već upisujete njegovo ime, kod itd. i odaberite željeni element sa padajuće liste. izgleda ovako:

Ostalo Tab

Na kartici možete brzo pristupiti glavnim modulima direktorija - modulu objekata i modulu menadžera.

Također možete definirati listu unaprijed definiranih elemenata direktorija na stranici. Ovo su stavke koje se ne mogu izbrisati u Enterprise modu. Predefiniranim elementima se može pristupiti direktno u konfiguratoru po imenu, na primjer: Directories.Nomenclature.Service.

Ova kartica također određuje način blokiranja - automatski ili kontrolirani. Upotreba pretraživanja punog teksta, kao i referentnih informacija o direktoriju, dostupnih u 1C: Enterprise modu.

Ovaj odjeljak prikazuje primjere rješavanja tipičnih problema pri radu sa hijerarhijskim direktorijima.

Dobivanje elemenata hijerarhijskog direktorija koji su podređeni datoj grupi

Za dobivanje podređenih elemenata hijerarhijskog direktorija, jezik upita pruža konstrukciju IN HIERARCHY. Primjer upotrebe U HIJERARHIJI:


ODABIR
Nomenklatura.Šifra,
Nomenklatura.PurchasePrice
OD

U ovom primjeru će se dobiti svi zapisi imenika Nomenklature koji se nalazi u grupi &Grupa, uključujući sebe, njegove podređene grupe i elemente koji pripadaju podređenim grupama.

Ako nas zanimaju samo elementi i grupe koje se nalaze direktno u datoj grupi, onda takve elemente možemo dobiti postavljanjem uslova u polje Parent. primjer:


ODABIR
Nomenklatura.Šifra,
Nomenklatura Naziv AS Naziv,
Nomenklatura.PurchasePrice
OD
Imenik.Nomenklatura AS Nomenklatura

GDJE
Nomenklatura.Roditelj = &Grupa

Ovaj upit će odabrati grupe i elemente koji su podređeni grupi sa vezom &Grupa.

Provjera prisutnosti podređenih elemenata elementa direktorija

Da biste provjerili prisustvo podređenih zapisa elementa direktorija, možete koristiti upit sličan predstavljenom:

U ovom primjeru, referenca na element za koji želite provjeriti ima li djece zapisana je u parametar upita Roditelj. Nakon izvršenja takvog upita, morate provjeriti da li je rezultat prazan. Ako rezultat nije prazan, postoje podređeni zapisi. Inače - ne. primjer:


Ako Request.Execute().Empty() Onda
Izvještaj("Nema unosa");
Inače
Izvještaj("Dostupni zapisi");
endIf;

Dobivanje svih roditelja elementa

Jezik upita ne pruža nikakva posebna sredstva za dohvaćanje svih roditelja elementa. Možete koristiti hijerarhijske zbrojeve da biste dovršili zadatak, ali dobijanje hijerarhijskih zbroja optimizirano je za građenje ukupnih vrijednosti za veliki broj zapisa i nije u potpunosti učinkovito za dobivanje roditelja jednog elementa. Da biste efikasnije dohvatili sve roditeljske zapise elementa, preporučljivo je proći kroz njegove roditelje u malim dijelovima. primjer:


CurrentItemItem = ItemItem;

Upit = Novi upit("SELECT
| Nomenklatura. Roditelj,
| Nomenklatura.Roditelj.Roditelj,
| Nomenklatura.Roditelj.Roditelj.Roditelj,
| Nomenklatura.Parent.Parent.Parent.Parent,
| Nomenklatura.Parent.Parent.Parent.Parent.Parent
|OD
| Imenik.Nomenklatura AS Nomenklatura
|WHERE
| Nomenclature.Link = &CurrentNomenclatureElement";

Dok je ciklus istine
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Rezultat = Query.Run();
Ako Result.Empty() Onda
Prekini;
endIf;
Odabir = Result.Select();
Selection.Next();
Za ColumnNumber = 0 Po Result.Columns.Quantity() - 1 petlja
CurrentItemItem = Izbor[Broj kolone];
Prekini;
Inače
Izvještaj(TrenutniItem);
endIf;
EndCycle;

Ako je CurrentItemItem = Directories.Nomenclature.EmptyLink() Onda
Prekini;
endIf;
EndCycle;

U ovom primjeru, svi roditelji za vezu snimljenu u varijablu Nomenklature elemenata su prikazani u prozoru servisne poruke. U ciklusu se bira 5 roditelja veza.

Ako je broj nivoa u imeniku ograničen i mali, tada je moguće dobiti sve roditelje jednim zahtjevom bez petlje.

Prikaz hijerarhijskog direktorija u izvještaju

Da biste prikazali hijerarhijski direktorij u izvještaju uz očuvanje hijerarhije, morate koristiti upit sličan sljedećem:


ODABIR
Nomenklatura.Šifra,
Nomenklatura Naziv AS Naziv,
Nomenklatura.PurchasePrice
OD
Imenik.Nomenklatura AS Nomenklatura
SORT BY
Ime HIERARCHY

Ovaj upit odabire sve zapise iz direktorija i raspoređuje ih po hijerarhiji. Rezultat će biti poređan po imenu, uzimajući u obzir hijerarhiju.

Da bi se grupe imenika postavile iznad elemenata, potrebno je klauzulu ORDER BY u ovom zahtjevu zamijeniti sljedećim:


SORT BY
Nomenklatura. Ovo je HIJERARHIJA Grupe,
Ime

Rezultat će i dalje biti hijerarhijski poredani, ali će se grupe pojaviti iznad elemenata.

Ponudu ORDER BY moguće je zamijeniti i opcijom AUTO ORDER. U ovom slučaju, rezultat će biti poređan u skladu sa postavkama imenika, tj. ako imenik navodi da grupe treba da budu locirane iznad elemenata, onda će se one nalaziti iznad.

Također je moguće dobiti hijerarhijsku strukturu direktorija koristeći rezultate.


ODABIR
Nomenklatura.Šifra,
Nomenklatura Naziv AS Naziv,
Nomenklatura.PurchasePrice

FROM Directory.Nomenklatura AS Nomenklatura

GDJE
(Nomenklatura.OvaGrupa = FALSE)

ORDER BY Name

Dobivanje ukupnih vrijednosti po hijerarhiji

Da biste dobili zbrojeve po hijerarhiji u upitu, morate navesti ključnu riječ HIERARCHY u klauzuli SOFTWARE TOTAL nakon što navedete polje po kojem će se ukupni iznosi izračunati. Primjer izvještaja "Promet artikala" sa dobivanjem ukupnih vrijednosti po hijerarhiji:


ODABIR

OD

HIJERARHIJA Nomenklature

Kao rezultat ovog zahtjeva, ukupni će biti izračunati ne samo za svaku stavku, već i za grupe kojima pripada ovaj ili onaj artikal.

U slučaju kada nam ne trebaju zbrojevi za elemente, već su nam potrebni samo zbroji za grupe, trebamo koristiti konstrukciju SAMO HIJERARHIJA u zbrojima. primjer:


ODABIR
Računovodstvo nomenklaturePromet.Nomenklatura AS Nomenklatura,
Računovodstvo nomenklaturePromet.Nomenklatura.Prezentacija,
Računovodstvo za NomenklaturuPromet.KoličinaPromet AS QuantityPromet
OD
Registar akumulacije.Nomenklaturno računovodstvo.Promet KAKO Računovodstvo nomenklaturePromet
REZULTATI IZNOS (Količina prometa) PO
SAMO HIJERARHIJA nomenklature

Rezultat ovog upita će biti ukupni zapisi samo za grupe stavki.

Šta je 1C imenik i zašto je potreban? Imenik pohranjuje uslovno trajne informacije, tj. informacije koje ostaju gotovo nepromijenjene tokom dužeg vremenskog perioda. Na primjer, imenik “Nomenklatura” sadrži popis prodane ili proizvedene robe. Također, direktorij može sadržavati mnoga svojstva koja opisuju element direktorija.

Ako za poređenje uzmemo pol osobe, onda je lista ograničena i nije promijenjena, pa je nabrajanje bolje za to.

Nakon kreiranja novog direktorija, vidjet ćemo sljedeću sliku.

Pogledajmo sve njegove oznake.

Basic

Ovdje su naznačeni naziv (identifikator u bazi podataka) i sinonim (korisničko ime direktorija). Opcijski komentar je onaj koji može objasniti svrhu direktorija ili opisati njegove karakteristike.

Hijerarhija

Na ovoj kartici možete konfigurirati dubinu ugniježđenja elemenata direktorija. Koristeći ovu postavku, zgodno je razlikovati i detaljizirati elemente prema nekim kriterijima. Na primjer, proizvodi “Ormari” su u jednoj grupi, a proizvodi “Stolovi” u drugoj. Podrazumevano, kada se kreira, direktorijum se prikazuje lista elemenata. Ako označite potvrdni okvir Hijerarhijski direktorij, tada svaki element može biti podređen drugom elementu (grupi). Ispod su opcije za prilagođavanje ove oznake i promjenu prikaza u prilagođenom načinu rada.

Tip hijerarhije:

Hijerarhija grupa i elemenata

Sa ovom postavkom, elementi mogu biti ugniježđeni samo u grupe (mape).

Ovdje, kao što vidite, svi elementi i grupe imaju iste ikone, a bilo koji element može biti ugniježđen.

Postavite grupe na vrh

Kada je ovo polje za potvrdu označeno, grupe će uvijek biti na vrhu, inače će biti raspoređene po redoslijedu sortiranja, na primjer, ovako:

Ograničavanje broja nivoa hijerarhije

Ako polje za potvrdu nije označeno ovdje, ugniježđenje je neograničeno.

Ako je polje za potvrdu označeno, možete odrediti broj nivoa ispod.

Vlasnici

Na obeleživaču vlasnici mogu se naznačiti drugi imenici u odnosu na koje je ovaj podređen. Dijagram odnosa podređenih direktorija sličan je dijagramu odnosa hijerarhijskog direktorija, samo što se ovdje drugi direktorij ponaša kao roditelj i naziva se vlasnik. U tipičnim konfiguracijama, dobar primjer je podređivanje imenika "Sporazumi" imeniku "Counterparties", jer Ne može postojati sporazum koji ne pripada nijednoj suprotnoj strani.

Polje "Lista vlasnika direktorija" specificira listu direktorija koji posjeduju elemente ovog direktorija.

U nastavku u polju „Upotreba subordinacije“ je naznačeno čemu će biti podređeni elementi ovog imenika.

Kako programski saznati da li je direktorij hijerarhijski ili ne

Da biste to učinili, morate se obratiti na metapodatke

Ovo je HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical;

Nastavlja se...

Najbolji članci na ovu temu