Kako postaviti pametne telefone i računala. 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 "U HIJERARHIJI" u upitima 1C:Enterprise 8.x omogućuje vam dobivanje podređenih elemenata hijerarhijskog konfiguracijskog objekta prema danom odabiru. Danas ćemo u članku pogledati primjer njegove upotrebe, kao i radnje platforme na strani DBMS-a i njen utjecaj na performanse.

Korištenje

Pogledajmo jednostavan primjer korištenja konstrukcije "U HIJERARHIJI". Prilikom izvršavanja sljedećeg zahtjeva, podređeni elementi hijerarhijskog imenika "Proizvodi" će se dobiti za proslijeđenu vrijednost varijable "Veza".

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

U testnoj bazi podataka direktorij "Proizvodi" sadrži sljedeće testne podatke:

Naravno, slika ne prikazuje sve unose u direktoriju. Snimka zaslona prikazuje samo strukturu pohrane podataka u hijerarhijskom direktoriju. Tablica imenika pohranjuje 10 grupa najviše razine, od kojih svaka sadrži 5 ugniježđenih grupa sa po 200 elemenata.

Vratimo se na zahtjev za testiranje. Proslijedimo vezu na grupu "Grupa - 1" parametru "&Veza" (pogledajte gornju sliku zaslona). 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 s elementima u njima. Stoga vam korištenje konstrukcije "U HIJERARHIJI" omogućuje prikladno dobivanje hijerarhijski podređenih podataka.

Sintaksa upitnog jezika 1C:Enterprise klasični SQL vrlo slični u nekim aspektima. Ali za izraz "U HIJERARHIJI" ne postoji analog u SQL upitnom jeziku kao što, na primjer, za izraz platforme "B" upitni jezik postoji sličan SQL operator "IN". Stoga je zanimljiv rad platforme s DBMS-om kada se koristi ovaj operator.

Iza scene

Pa krenimo. Na primjer, koristit ćemo prethodno napisani upit za imenik "Proizvodi". Analizirat ćemo radnje platforme za dvije situacije:

  1. Proslijediti ćemo grupu najviše razine "Grupa 1" kao parametar "&Veza" (kao što smo učinili ranije).
  2. U parametru ćemo proslijediti vezu na grupu "Grupa 1 - 1", ugniježđenu u grupu najviše razine "Grupa 1".

Sad po redu. U prvom slučaju, platforma će izvršiti sljedeće radnje na SQL poslužitelju:

1. Prvo se izvršava SQL upit kako bi se dobila veza na grupu direktorija proslijeđenu kao parametar i sve podređene grupe. Rezultat se stavlja u privremenu tablicu "#tt1".

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

Snimka zaslona sadrži detaljne komentare na tekst SQL upita. Ukratko, upit vam omogućuje odabir podređenih elemenata za grupe na koje se upućuje u privremenoj tablici. Ostaje pitanje: "Zašto se upit izvršava dvaput?" Odgovor je ovdje jednostavan: prvo, upit prima podređene elemente za grupe prve razine koje su već sadržane u privremenoj tablici (vidi točku 1). Drugi upit potom dohvaća podelemente za podgrupe druge razine. Budući da nijedna grupa imenika nije prisutna na trećoj razini hijerarhije, ovaj se upit više ne izvršava.

U našem slučaju, drugi upit će vratiti prazan rezultat, jer nema podređenih elemenata za zapise koji se nalaze na 3. razini hijerarhije (tamo nema grupa).

3. Za dobivanje konačnog rezultata upita, platforma generira sljedeći SQL upit:

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

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

Ovo dovršava proces izvršavanja operatora “U HIJERARHIJI”. Dopustite mi da vas podsjetim da je razmatrani slijed radnji na SQL poslužitelju izvršen kada smo proslijedili vezu na grupu najviše razine "Grupa - 1" na zahtjev na strani platforme. Ali kako će se platforma ponašati ako proslijedimo vezu grupi druge razine "Grupa - 1 - 1" kao parametar "&Veza"? Sve će se dogoditi na isti način, osim sljedeće točke: gore, u drugoj fazi izvršavanja SQL upita od strane platforme, napisano je da je upit za dobivanje podređenih elemenata izvršen dva puta - u slučaju dobivanja podređenih elemenata za grupa "Grupa - 1 - 1" to nije slučaj. Zahtjev će se izvršiti samo jednom.

Činjenica je da broj zahtjeva za dobivanje podređenih elemenata ovisi o broju grupa u hijerarhiji. Drugim riječima, ako razina hijerarhije elemenata sadrži barem jednu grupu, tada je zahtjev iz točke 2.

Utjecaj na izvedbu

Neispravna upotreba bilo kojeg operatora u upitu može rezultirati neoptimalnim performansama sustava. Operator koji se razmatra "U HIERARHIJI" nije iznimka. Mora se koristiti s oprezom, jer uvelike komplicira algoritam za izvršavanje SQL upita prema bazi podataka i time povećava opterećenje na DBMS poslužitelju.

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

ODABERI proizvode. Veza IZ imenika. Proizvodi KAO Proizvodi WHERE (Proizvodi. Veza U HIJERARHIJI (& Veza) ILI Proizvodi. Veza U HIJERARHIJI (& Veza1) ILI Proizvodi. Veza U HIJERARHIJI (& Veza2) )

Kao što možda pretpostavljate, zahtjev će dovesti do generiranja velikog broja SQL upita, što će rezultirati smanjenjem performansi informacijskog sustava.

Izvucite zaključke!

Na vama je da donesete zaključke. Samo da kažem da operator “U HIJERARHIJI” koristi platforma za sustav sastavljanja podataka kada uvjeti odabira uključuju “U GRUPI”, “U GRUPI S POPISA” i druge. Mislim da nema potrebe objašnjavati da s netočnim manipulacijama korisnici mogu postaviti vrlo složene odabire i povećati opterećenje 1C poslužitelja i DBMS-a nekoliko puta. Promijenimo postavke samo za iskusne korisnike.

I naravno, kada pišete vlastite mehanizme, obratite pozornost na operator “IN HIJERARHIJI”. S jedne strane vrlo zgodno, a s druge opasno.

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 koristi se za promjenu podataka.

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

Primjer zahtjeva:

BIRAJTE
Ime banke,
Banke.CorrAccount
IZ
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.

Upitni jezik najjednostavniji je i najučinkovitiji način dobivanja informacija. Kao što se može vidjeti iz gornjeg primjera, u upitnom jeziku morate koristiti nazive metapodataka (ovo je popis objekata sustava koji čine konfiguraciju, tj. imenici, dokumenti, registri itd.).

Opis konstrukcija upitnog jezika

Struktura upita

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

SELECT * FROM Imenici.Nomenklatura

Pri čemu “*” označava odabir svih polja tablice, a Imenici.Nomenklatura – naziv tablice u bazi podataka.

Pogledajmo složeniji i općenitiji primjer:

BIRAJTE
<ИмяПоля1>KAKO<ПредставлениеПоля1>,
Iznos(<ИмяПоля2>) KAKO<ПредставлениеПоля2>
IZ
<ИмяТаблицы1>KAKO<ПредставлениеТаблицы1>
<ТипСоединения>SPOJ<ИмяТаблицы2>KAKO<ПредставлениеТаблицы2>
PO<УсловиеСоединениеТаблиц>

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

GRUPIRAJ PO
<ИмяПоля1>

SORTIRAJ PO
<ИмяПоля1>

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

U ovom upitu odabiremo podatke polja “FieldName1” i “FieldName1” iz tablica “TableName1” i “TableName”, dodjeljujemo sinonime poljima pomoću operatora “HOW” i povezujemo ih pomoću određenog uvjeta “TableConnectionCondition” ”.

Od primljenih podataka odabiremo samo podatke koji zadovoljavaju uvjet iz “WHERE” “Uvjet odabira podataka”. Zatim grupiramo zahtjev po polju “Field Name1”, dok zbrajamo “Field Name2”. Stvaramo ukupne vrijednosti za polje “Naziv polja1” i konačno polje “Naziv polja2”.

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

Generalni nacrti

Pogledajmo općenite strukture jezika upita 1C 8.2.

PRVIn

Pomoću ovog operatora možete dobiti n broj prvih zapisa. Redoslijed zapisa određen je redoslijedom u upitu.

ODABERITE PRVIH 100
Ime banke,
Banke.Kod AS BIC
IZ
Imenik.Banke KAKO Banke
SORTIRAJ PO
Banke.Ime

Zahtjev će primiti prvih 100 unosa direktorija "Banke", poredanih po abecedi.

DOZVOLJENO

Ovaj dizajn je relevantan za rad s mehanizmom. Bit mehanizma je ograničiti čitanje (i druge radnje) korisnicima za određene zapise u tablici baze podataka, a ne tablici kao cjelini.

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

ODABERITE DOZVOLJENO
Repozitorij dodatnih informacija. Link
IZ
Imenik.Repozitorij dodatnih informacija

RAZNO

Korištenje "DIFFERENT" spriječit će duplikate redaka da uđu u rezultat 1C upita. Dupliciranje znači da se sva polja zahtjeva podudaraju.

ODABERITE PRVIH 100
Ime banke,
Banke.Kod AS BIC
IZ
Imenik.Banke KAKO Banke

EmptyTable

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

Primjer iz 1C 8 pomoći:

SELECT Link.Number, EMPTY TABLE.(Br., Artikal, Količina) AS Composition
IZ Dokumenta.Troškovnica
SVE SPOJITI
SELECT Link.Number, Contents.(LineNumber, Product, Quantity)
FROM Dokument.Dokument.Račun.Dokument.Račun.Sastav.*

NIJE NULL

Vrlo korisna značajka koja vam omogućuje da izbjegnete mnoge pogreške. YesNULL() omogućuje zamjenu NULL vrijednosti sa željenom. Vrlo često se koristi u provjeri prisutnosti vrijednosti u spojenim tablicama, na primjer:

BIRAJTE
Veza za ref. nomenklaturu,
IsNULL(Preostala stavka.Preostala količina,0) AS Preostala količina
IZ


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

ISNULL(Datum.fakture, Datum.izdavanja fakture)

HOW je operator koji nam omogućuje da tablici ili polju dodijelimo naziv (sinonim). Gore smo vidjeli primjer korištenja.

Ove su konstrukcije vrlo slične - omogućuju vam da dobijete prikaz niza željene vrijednosti. Jedina je razlika u tome što REPRESENTATION pretvara sve vrijednosti u vrstu niza, dok REPRESENTATIONREF pretvara samo referentne vrijednosti. REFERENTNI PRIKAZ preporučuje se koristiti u upitima sustava za komponiranje podataka za optimizaciju, osim ako se, naravno, polje referentnih podataka ne planira koristiti u odabirima.

BIRAJTE
View(Link), //string, na primjer “Avansno izvješće br. 123 od 10.10.2015.
View(DeletionMark) AS DeleteMarkText, //niz, “Da” ili “Ne”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True ili False
IZ
Document.Advance Report

IZRAZITI

Express vam omogućuje pretvaranje vrijednosti polja u željenu vrstu podataka. Možete pretvoriti vrijednost ili u primitivni tip ili u referentni tip.

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

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

Za primitivne tipove ova se funkcija često koristi za ograničavanje broja znakova u poljima neograničene duljine (s takvim se poljima ne može usporediti). Da biste izbjegli pogrešku " Nevažeći parametri u operaciji usporedbe. Ne možete uspoređivati ​​polja
neograničene duljine i polja nekompatibilnih tipova
", trebate izraziti takva polja na sljedeći način:

EXPRESS(Komentar KAO redak(150))

DATUM RAZLIKE

Besplatno nabavite 267 video lekcija o 1C:

Primjer korištenja IS NULL u 1C zahtjevu:

ODABRATI OD
Ref
LIJEVA VEZA RegistarAkumulacije.ProizvodiUSkladištima.Preostalo KAO Preostalo proizvoda
Software NomenclatureRef.Link = Prodana robaKomitetiOstaci.Nomenklatura
WHERE NOT Preostali proizvodi. QuantityRemaining JE NULL

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

Unaprijed definirane vrijednosti

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

Primjer upotrebe:

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

WHERE Druge strane. Vrsta podataka za kontakt = Vrijednost (nabrajanje. Vrste podataka za kontakt. Telefon)

WHERE Stanja računa. Računovodstveni račun = vrijednost (Kontni plan. Dobit. Dobit Gubitak)

Veze

Postoje 4 vrste veza: LIJEVO, PRAVO, KOMPLETAN, INTERNI.

LIJEVI i DESNI SPOJ

Spojevi se koriste za povezivanje dviju tablica na temelju određenog uvjeta. Značajka kada LIJEVO PRIDRUŽI je da prvu navedenu tablicu uzmemo u cijelosti i uvjetno vežemo drugu tablicu. Polja druge tablice koja se ne mogu vezati uvjetom popunjavaju se vrijednošću NULL.

Na primjer:

Vratit će cijelu tablicu Counterparties i popuniti polje “Bank” samo na onim mjestima gdje će biti ispunjen uvjet “Counterparties.Name = Banks.Name”. Ako uvjet nije ispunjen, polje Banka bit će postavljeno na NULL.

RIGHT JOIN na 1C jeziku apsolutno sličan LIJEVI priključak, s izuzetkom jedne razlike - u PRAVO PRIKLJUČKA"Glavni" stol je drugi, a ne prvi.

POTPUNA POVEZANOST

POTPUNA POVEZANOST razlikuje se od lijeve i desne po tome što prikazuje sve zapise iz dvije tablice i povezuje samo one koje može povezati po uvjetu.

Na primjer:

IZ

POTPUNA POVEZANOST
Imenik.Banke KAKO Banke

PO

Upitni jezik će u potpunosti vratiti obje tablice samo ako je ispunjen uvjet za spajanje zapisa. Za razliku od spajanja lijevo/desno, moguće je da se NULL pojavi u dva polja.

UNUTARNJI SPOJ

UNUTARNJI SPOJ razlikuje se od punog po tome što prikazuje samo one zapise koji se mogu povezati prema danom uvjetu.

Na primjer:

IZ
Imenik.Druge strane AS Klijenti

UNUTARNJI SPOJ
Imenik.Banke KAKO Banke

PO
Klijenti.Naziv = Banke.Naziv

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

Udruge

Konstrukti JOIN i JOIN ALL kombiniraju dva rezultata u jedan. Oni. rezultat izvođenja dva bit će "spojen" u jedan, zajednički.

Odnosno, sustav radi potpuno isto kao i obični, samo za privremenu tablicu.

Kako koristiti INDEX BY

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

BIRAJTE
Tečajevi valuta Najnoviji presjek Valuta KAO Valuta,
Tečajna lista Najnoviji presjek.
PUT tečajevi valuta
IZ
Registar informacija. Tečajevi valuta. Zadnji odsječak (&Razdoblje,) AS Tečajovi valuta Zadnji odsječak
INDEX BY
Valuta
;
BIRAJTE
Nomenklatura cijena.Nomenklatura,
CijeneNomenklature.Cijena,
CijeneNomenklature. Valuta,
Tečajevi valuta.Tečaj
IZ
Registar informacija. Cijene nomenklature. Zadnji odsječak (&razdoblje,
Nomenklatura B (&Nomenklatura) I PriceType = &PriceType) KAO Nomenklatura cijena
LIJEVO PRIDRUŽITE tečajeve valuta KAO tečajeve valuta
Nomenklature cijena softvera.Valuta = Tečajevi valuta.Valuta

Grupiranje

Jezik upita 1C omogućuje vam korištenje posebnih agregatnih funkcija prilikom grupiranja rezultata upita. Grupiranje se također može koristiti bez agregatnih funkcija za "eliminiranje" duplikata.

Postoje sljedeće funkcije:

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

Primjer #1:

BIRAJTE
Prodaja roba i usluga Roba Nomenklatura,
SUM(Sales of GoodsServicesGoods.Quantity) AS Količina,
SUM(Prodaja RobaUslugaRoba.Iznos) AS Iznos
IZ

GRUPIRAJ PO
Prodaja roba i usluga Roba Nomenklatura

Zahtjev prima sve retke s robom i sažima ih po količini i iznosima po stavkama.

Primjer br. 2

BIRAJTE
Banke.Kod,
QUANTITY(DIFFERENT Banks.Link) AS Broj duplikata
IZ
Imenik.Banke KAKO Banke
GRUPIRAJ PO
Banke.Šifra

Ovaj će primjer prikazati popis BIC-ova u imeniku "Banke" i pokazati koliko duplikata postoji za svaki od njih.

Rezultati

Rezultati su način dobivanja podataka iz sustava s hijerarhijskom strukturom. Skupne funkcije mogu se koristiti za polja sažetka, baš kao i za grupiranje.

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

BIRAJTE




IZ
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORTIRAJ PO

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

Rezultat upita bit će sljedeća hijerarhija:

Opći rezultati

Ako trebate dobiti ukupne iznose za sve “ukupne iznose”, koristite operator “GENERAL”.

BIRAJTE
Prodaja roba i usluga Roba Nomenklatura AS Nomenklatura,
Prodaja roba i usluga Roba Link AS Dokument,
Prodaja roba i usluga Roba. Količina KAO Količina,
Prodaja roba i usluga Roba Iznos KAO Iznos
IZ
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORTIRAJ PO
Prodaja roba i usluga Roba Veza Datum Datum
REZULTATI
SUM(količina),
SUM(Zbroj)
PO
SU ČESTI,
Nomenklatura

Kao rezultat izvršenja zahtjeva dobivamo sljedeći rezultat:

U kojoj je 1 razini grupiranja agregacija svih potrebnih polja.

Aranžiranje

Operator ORDER BY koristi se za sortiranje rezultata upita.

Sortiranje za primitivne tipove (string, broj, boolean) slijedi uobičajena pravila. Za polja referentnog tipa sortiranje se odvija prema internom prikazu veze (jedinstveni identifikator), a ne prema kodu ili prikazu reference.

BIRAJTE

IZ
Imenik.Nomenklatura AS Nomenklatura
SORTIRAJ PO
Ime

Zahtjev će prikazati popis imena u imeniku nomenklature, poredan po abecedi.

Automatska narudžba

Rezultat upita bez sortiranja je kaotično prikazan skup redaka. Programeri 1C platforme ne jamče da će retci biti ispisani u istom nizu prilikom izvršavanja identičnih upita.

Ako trebate prikazati zapise tablice stalnim redoslijedom, morate koristiti konstrukciju Auto-Order.

BIRAJTE
Nomenklatura. Ime KAO Ime
IZ
Imenik.Nomenklatura AS Nomenklatura
AUTO NARUDŽBA

Virtualni stolovi

Virtualne tablice u 1C jedinstvena su značajka 1C upitnog jezika koja se ne nalazi u drugim sličnim sintaksama. Virtualna tablica brz je način dobivanja informacija o profilu iz registara.

Svaki tip registra ima vlastiti skup virtualnih tablica, koje se mogu razlikovati ovisno o postavkama registra.

  • rez prvoga;
  • rez potonjeg.
  • ostaci;
  • revolucije;
  • stanja i prometa.
  • pokreti iz subkonta;
  • revolucije;
  • brzina Dt Kt;
  • ostaci;
  • stanja i prometa
  • subconto.
  • baza;
  • podaci grafikona;
  • stvarni rok valjanosti.

Za programera rješenja podaci se uzimaju iz jedne (virtualne) tablice, ali zapravo ih 1C platforma preuzima iz mnogih tablica, pretvarajući ih u traženi oblik.

BIRAJTE
Proizvodi u skladištima Ostaci i promet Nomenklatura,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProizvodiUSkladištimaOstaciIPromet.KoličinaPromet,
Roba U Skladištima Ostaci I Promet. Količina Ulaz,
Roba U Skladištima OstaciIPromet.KoličinaPotrošnja,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
IZ
Registar Akumulacije.RobaUSkladištima.OstaciIPromet KAO RobaUSkladištimaOstaciIPromet

Ovaj vam upit omogućuje brzo dohvaćanje velike količine podataka.

Mogućnosti virtualnog stola

Vrlo važan aspekt rada s virtualnim tablicama je korištenje parametara. Parametri virtualne tablice su specijalizirani parametri za odabir i konfiguraciju.

Za takve se tablice smatra neispravnim koristiti odabir u konstrukciji "WHERE". Osim što upit postaje neoptimalan, moguće je dobiti netočne podatke.

Primjer korištenja ovih parametara:

Registar akumulacija.Roba u skladištima.Stanja i obrti (& Početak razdoblja, & Kraj razdoblja, Mjesec, Kretanja i granice razdoblja, Nomenklatura = & Potrebna nomenklatura)

Algoritam za virtualne tablice

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

Kada koristite virtualnu tablicu, sustav izvodi sljedeće manipulacije:

  1. Dobivamo najbližu izračunatu vrijednost u smislu datuma i mjerenja u tablici ukupnih iznosa.
  2. Iznosu iz tablice kretanja “dodajemo” iznos iz tablice ukupnih iznosa.


Takve jednostavne akcije mogu značajno poboljšati performanse sustava u cjelini.

Korištenje Query Buildera

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

Alat za izradu upita ima prilično jednostavno, intuitivno sučelje. Ipak, pogledajmo detaljnije korištenje konstruktora upita.

Konstruktor teksta upita pokreće se iz kontekstnog izbornika (desna tipka miša) na željenom mjestu u programskom kodu.

Opis konstruktora zahtjeva 1C

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

Tablice i polja

Ova kartica navodi izvor podataka i polja koja se trebaju prikazati u izvješću. Ovdje su u biti opisane konstrukcije SELECT.. FROM.

Izvor može biti fizička tablica baze podataka, virtualna registarska tablica, privremene tablice, ugniježđeni upiti itd.

U kontekstnom izborniku virtualnih tablica možete postaviti parametre virtualne tablice:

Kartica Veze

Kartica služi za opis povezivanja više tablica i stvara konstrukcije s riječju VEZA.

Kartica grupiranja

Na ovoj kartici sustav vam omogućuje grupiranje i sažimanje potrebnih polja rezultata tablice. Opisuje upotrebu konstrukcija GRUPIRAJ PO, ZBROJ, MINIMUM, PROSJEK, MAKSIMAL, KOLIČINA, BROJ RAZLIČITIH.

Kartica uvjeta

Odgovoran za sve što u tekstu zahtjeva dolazi nakon konstrukcije WHERE, odnosno za sve uvjete koji se postavljaju na primljene podatke.

Kartica Napredno

tab Dodatno prepuno svakakvih parametara koji su vrlo važni. Pogledajmo svako od svojstava.

Grupiranje Odabir zapisa:

  • Prvi N– parametar koji upitu vraća samo N zapisa (operator FIRST)
  • Nema duplikata– osigurava jedinstvenost primljenih zapisa (operator DIFFERENT)
  • Dopušteno– omogućuje odabir samo onih zapisa koje sustav dopušta odabir uzimajući u obzir (DOPUŠTENA konstrukcija)

Grupiranje Vrsta zahtjeva određuje koja će vrsta zahtjeva biti: dohvaćanje podataka, stvaranje privremene tablice ili uništavanje privremene tablice.

Ispod je zastava Zaključajte primljene podatke za kasniju izmjenu. Omogućuje vam da omogućite mogućnost postavljanja zaključavanja podataka, čime se osigurava sigurnost podataka od trenutka čitanja do promjene (relevantno samo za način automatskog zaključavanja, dizajn ZA PROMJENU).

Kartica Spojevi/pseudonimi

Na ovoj kartici dizajnera upita možete postaviti mogućnost spajanja različitih tablica i aliasa (konstrukcija HOW). Tablice su naznačene na lijevoj strani. Ako postavite zastavice nasuprot tablici, koristit će se UNITE konstrukcija, u protivnom - UNITE ALL (razlike između dvije metode). Na desnoj strani prikazana je korespondencija polja u različitim tablicama; ako korespondencija nije navedena, upit će vratiti NULL.

Kartica narudžbe

Ovo određuje redoslijed kojim su vrijednosti poredane (ORDER BY) - silazno (DESC) ili uzlazno (ASC).

Tu je i jedna zanimljiva zastava - Automatska narudžba(u upitu - AUTO NARUDŽBA). Prema zadanim postavkama, 1C sustav prikazuje podatke u "kaotičnom" redoslijedu. Ako postavite ovu zastavicu, sustav će sortirati podatke prema internim podacima.

Kartica Skupina upita

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

Gumb "Upit" u dizajneru upita

U donjem lijevom kutu dizajnera zahtjeva nalazi se gumb Zahtjev, s kojim u svakom trenutku možete pogledati tekst zahtjeva:

U ovom prozoru možete prilagoditi zahtjev i izvršiti ga.


Korištenje Query Console

Query Console je jednostavan i praktičan način za otklanjanje pogrešaka u složenim upitima i brzo dobivanje informacija. U ovom ću članku pokušati opisati kako koristiti Query Console i pružiti poveznicu za preuzimanje Query Consolea.

Pogledajmo pobliže ovaj alat.

Preuzmite 1C konzolu za upite

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

Pokušao sam spojiti ova dva pogleda u jednoj obradi - željeni obrazac se otvara u željenom načinu rada (u upravljanom načinu rada konzola radi samo u debelom načinu rada).

Opis 1C konzole za upite

Počnimo gledati konzolu upita s opisom glavne ploče za obradu:

U zaglavlju konzole upita možete vidjeti vrijeme izvršenja zadnjeg upita s točnošću do milisekunde, što vam omogućuje usporedbu različitih dizajna u smislu izvedbe.

Prva grupa gumba u naredbenoj traci odgovorna je za spremanje trenutnih upita u vanjsku datoteku. Ovo je vrlo zgodno; uvijek se možete vratiti na pisanje složenog zahtjeva. Ili, na primjer, pohranite popis tipičnih primjera određenih dizajna.

S lijeve strane u polju “Zahtjev” možete kreirati nove zahtjeve i spremiti ih u strukturu stabla. Druga grupa gumba je odgovorna za upravljanje popisom zahtjeva. Pomoću njega možete stvoriti, kopirati, izbrisati, premjestiti zahtjev.

  • Izvršitizahtjev– jednostavna izvedba i rezultati
  • Izvrši paket– omogućuje pregled svih posrednih upita u skupini upita
  • Pregled privremenih tablica– omogućuje vam da vidite rezultate koje privremeni upiti vraćaju na tablici

Parametri zahtjeva:

Omogućuje vam da postavite trenutne parametre za zahtjev.

U prozoru parametara upita zanimljivo je sljedeće:

  • Dugme Dobiti od zahtjeva automatski pronalazi sve parametre u zahtjevu radi praktičnosti programera.
  • Zastava Zajednički parametri za sve zahtjeve– kada je instaliran, njegova obrada ne briše parametre prilikom prelaska sa zahtjeva na zahtjev na općem popisu zahtjeva.

Postavite parametar s popisom vrijednosti Vrlo je jednostavno, samo kada birate vrijednost parametra, kliknite na gumb za brisanje vrijednosti (križić), sustav će od vas zatražiti da odaberete vrstu podataka, gdje trebate odabrati "Popis vrijednosti":

Također na gornjoj ploči nalazi se gumb za pozivanje postavki konzole upita:

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

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

Dizajner upita 1C 8 poziva se iz kontekstnog izbornika (desna tipka miša) kada kliknete na polje za unos:

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

Zahtjev = Novi zahtjev;
Request.Text = ”
|ODABIR
| Valute.Link
|OD
| Imenik.Valute KAO Valute”;
RequestResult = Request.Execute();

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



Također, konzola za upite, osim liste, može prikazati podatke u obliku stabla – za upite koji sadrže totale.

Optimizacija upita

Jedna od najvažnijih točaka u povećanju produktivnosti 1C poduzeća 8.3 je optimizacijazahtjevi. Ova je točka također vrlo važna kada polaganje certifikacije. U nastavku ćemo govoriti o tipičnim razlozima za neoptimalne performanse upita i metodama optimizacije.

Odabiri u virtualnoj tablici pomoću konstrukcije WHERE

Potrebno je primijeniti filtere na detalje virtualne tablice samo kroz VT parametre. Ni pod kojim okolnostima ne biste trebali koristiti konstrukciju WHERE za odabir u virtualnoj tablici; to je ozbiljna pogreška s gledišta optimizacije. U slučaju odabira pomoću WHERE, sustav će zapravo primiti SVE zapise i tek onda odabrati one potrebne.

PRAVO:

BIRAJTE

IZ
Registar akumulacija. Međusobni obračuni sa sudionicima organizacija. Stanja (
,
Organizacija = &Organizacija
I Pojedinac = &Individualno) KAKO Međusobna obračuna sa sudionicima organizacija Stanja

POGREŠNO:

BIRAJTE
Međusobna poravnanja sa sudionicima organizacija Stanja Iznos Stanje
IZ
Registar akumulacija Međusobni obračuni sa sudionicima organizacija Stanja (,) KAKO Međusobni obračuni sa sudionicima organizacija Stanja
GDJE
Međusobna obračuna sa sudionicima Organizacija Stanja Organizacija = & Organizacija
I Međusobna poravnanja sa sudionicima organizacija Stanja. Pojedinac = & Pojedinac

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

Prilikom primanja podataka složenog tipa u upitu preko točke, sustav povezuje lijevim spojem točno onoliko tablica koliko je tipova moguće u polju složenog tipa.

Na primjer, krajnje je nepoželjno da optimizacija pristupa polju zapisa registra – matičar. Upisnik ima složeni tip podataka, među kojima su sve moguće vrste dokumenata koji mogu upisivati ​​podatke u registar.

POGREŠNO:

BIRAJTE
Record Set.Recorder.Date,
RecordSet.Quantity
IZ
RegisterAccumulations.ProductsOrganizations AS SetRecords

To jest, zapravo, takav upit neće pristupiti jednoj tablici, već 22 tablice baze podataka (ovaj registar ima 21 vrstu registratora).

PRAVO:

BIRAJTE
IZBOR
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Datum
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Recip of GoodsServices).Datum
ZAVRŠI KAO DATUM,
ProductsOrg.Quantity
IZ
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

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

PRAVO:

BIRAJTE
ProizvodiOrganizacije.Datum,
Proizvodi Organizacije. Količina
IZ
Registar akumulacija Dobra organizacija AS Dobra organizacija

Podupiti u uvjetima spajanja

Za optimizaciju je neprihvatljivo koristiti podupit u uvjetima spajanja; to značajno usporava upit. Preporučljivo je koristiti VT u takvim slučajevima. Za povezivanje trebate koristiti samo metapodatke i VT objekte, nakon što ste ih prethodno indeksirali po poljima veze.

POGREŠNO:

ODABERITE…

LIJEVO PRIDRUŽIVANJE (
SELECT FROM RegisterInformation.Limits
GDJE …
GRUPIRAJ PO...
) OD...

PRAVO:

ODABERITE…
PUT Ograničenja
IZ Informacijskog registra.Ograničenja
GDJE …
GRUPIRAJ PO...
KAZALO PO...;

ODABERITE…
IZ dokumenta.Prodaja roba i usluga
Ograničenja LIJEVOG PRIDRUŽIVANJA
OD …;

Spajanje zapisa s virtualnim tablicama

Postoje situacije kada pri povezivanju virtualnog stola s drugima sustav ne radi optimalno. U ovom slučaju, kako biste optimizirali izvedbu upita, možete pokušati smjestiti virtualnu tablicu u privremenu tablicu, ne zaboravljajući indeksirati spojena polja u upitu privremene tablice. To je zbog činjenice da su VT-ovi često sadržani u nekoliko fizičkih DBMS tablica; kao rezultat toga, podupit se sastavlja za njihov odabir, a problem se ispostavlja sličnim prethodnoj točki.

Korištenje odabira na temelju neindeksiranih polja

Jedna od najčešćih pogrešaka pri pisanju upita je korištenje uvjeta na neindeksiranim poljima, što je u suprotnosti pravila optimizacije upita. DBMS ne može izvršiti upit optimalno ako upit uključuje izbor u poljima koja se ne mogu indeksirati. Ako uzmete privremenu tablicu, također trebate indeksirati polja povezivanja.

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

  1. Indeks sadrži sva polja navedena u uvjetu.
  2. Ta se polja nalaze na samom početku indeksa.
  3. Ovi odabiri su uzastopni, to jest vrijednosti koje nisu uključene u uvjet upita nisu "uglavljene" između njih.

Ako DBMS ne odabere ispravne indekse, skenirat će se cijela tablica - to će imati vrlo negativan utjecaj na performanse i može dovesti do dugotrajnog blokiranja cijelog skupa zapisa.

Korištenje logičkog ILI u uvjetima

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

Vrlo koristan besplatni video tečaj o razvoju i optimizaciji upita, Toplo preporučam za početnike i više!

1C imenici 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, Zaposlenici, Osnovna sredstva itd. Podaci u imenicima se u pravilu ne mijenjaju često. Imenici se kasnije koriste u gotovo svim računovodstvenim objektima kao računovodstveni dio ili referentni podaci.

U nastavku ćemo pogledati postavljanje i dizajn imenika iz konfiguratora koristeći imenik "Nomenklatura" kao primjer.

Osnovna kartica

Kartica “Osnovno” navodi naziv, sinonim, prikaz objekta i opis namjene.

Kartica "Hijerarhija imenika".

Ovdje se uspostavlja hijerarhija imenika.

Hijerarhija u 1C 8.3 ima dvije vrste - “ grupe i elementi"I" elementi". Razlikuje se po tome što u prvom slučaju roditelj (mapa) može biti samo mapa (grupa), a u drugom slučaju roditelj može biti i element.

“Postavi grupe na vrh” - zastavica je odgovorna za prikaz grupa u obliku popisa.

Također u postavkama možete ograničiti broj grupa u hijerarhiji imenika pomoću odgovarajuće postavke.

Kartica vlasnici

Imenik može biti podređen drugom imeniku. Sa stajališ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”, “Druge strane - Ugovori izvođača”.

Vlasnik imenika također mogu biti sljedeći objekti metapodataka: , .

Kartica podataka

Besplatno nabavite 267 video lekcija o 1C:

Najvažnija kartica sa stanovišta programera. Sadrži pojedinosti imenika.

Imenik ima skup standardnih detalja koje ne uređuje programer 1C 8.2; njihov popis možete vidjeti klikom na gumb "Standardni detalji":

Zadržat ću se na svakom detaljnije:

  • Ova grupa— atribut s Booleovim tipom, koji pokazuje radi li se o grupi ili elementu. Dostupno samo u hijerarhijskom imeniku. Bilješka, vrijednost ovog atributa ne može se promijeniti u načinu rada 1C: Enterprise.
  • Kodirati— rekviziti, upišite broj ili niz (obično niz). Broj koji sustav automatski dodjeljuje. Obično se izračunava kao (prethodni kod + 1). Preporučujem korištenje vrste niza jer sortiranje numeričkih vrijednosti ne radi kako se očekuje. Može se koristiti kao prezentacija imenika na popisu iu poljima za unos. Obično se koristi za traženje elementa prilikom unosa niza. Ako trebate ukloniti polje Šifra, unesite nulu u duljinu retka.
  • Ime— obvezni detalji, vrsta niza. Maksimalna duljina retka je 150 znakova. Može se koristiti kao prezentacija imenika na popisu iu poljima za unos. Obično se koristi za traženje elementa prilikom unosa niza. Ako trebate ukloniti polje Naziv, unesite nulu u duljinu retka.
  • Roditelj— atribut tipa DirectoryLink.<ИмяТекущегоСправочника>. Dostupno samo u hijerarhijskom imeniku. Pokazuje na nadređenog roditelja u hijerarhiji. Ako je Element ili Grupa u korijenu direktorija, navedena je vrijednost Imenik.<ИмяТекущегоСправочника>.EmptyLink.
  • Vlasnik— poveznica na element vlasnika trenutnog elementa imenika (grupe). Dostupno samo u podređenom imeniku 1C.
  • Brisanje zastavice— rekviziti tipa Boolean. Odgovoran za prikaz "oznake brisanja" u sustavu. Element označen za brisanje smatra se neupotrebljivim, ali na njemu mogu ostati stari dokumenti.
  • Veza— polje string tipa. Ovaj atribut pohranjuje jedinstveni identifikator objekta - GUID. Ono što vidimo u sustavu u vizualnom prikazu zvanom "link" samo je prikaz objekta. Ne može se promijeniti.
  • Unaprijed definirano— Boolean tip, prikazuje je li element unaprijed definiran, više o tome kasnije. Ne može se promijeniti.

Kartica "Podaci" također označava prikaz direktorija u sustavu; prije verzije 8.2.16, prikaz je mogao biti samo kod ili naziv. U novijim verzijama platforme (počevši od 8.3), pogled se može opisati neovisno u modulu upravitelja pomoću rukovatelja "ViewReceivingProcessing".

Tablica numeriranja

Ovdje možete odrediti postavke imenika vezane uz numeriranje. Preporuča se korištenje automatskog numeriranja. Kontrola jedinstvenosti je oznaka koja pomaže, ako je potrebno, da kod bude jedinstven. Ako s postavljenom zastavicom pokušate napisati element imenika s nejedinstvenim kodom, u 1C ćete dobiti poruku "Kod imenika je postao nejedinstven."

Serija šifri - određuje način numeriranja imenika, možete unijeti numeraciju imenika po vlasniku. Na primjer, druga ugovorna strana "Rogovi i kopita" imat će svoje numeriranje ugovora - "1, 2, 3", itd.

Kartica Obrasci

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

Ova stranica ima važnu značajku imenika - ““. Ovo je vrlo zgodna funkcija 1C 8, koja vam omogućuje da prilikom popunjavanja podataka u polje za unos ne idete u imenik, već da upišete njegovo ime, šifru itd. i odaberite željeni element iz padajuće liste. Ovako izgleda:

Ostalo Tab

Na kartici možete brzo pristupiti glavnim modulima imenika - objektnom modulu i upraviteljskom modulu.

Također možete definirati popis unaprijed definiranih elemenata imenika na stranici. Ovo su stavke koje se ne mogu izbrisati u načinu rada Enterprise. Predefiniranim elementima može se pristupiti izravno u konfiguratoru po nazivu, na primjer: Imenici.Nomenklatura.Usluga.

Ova kartica također određuje način blokiranja - automatski ili kontrolirani. Korištenje pretraživanja cijelog teksta, kao i referentnih informacija o imeniku, dostupnih u načinu rada 1C: Enterprise.

Ovaj odjeljak prikazuje primjere rješavanja tipičnih problema pri radu s hijerarhijskim imenicima.

Dobivanje elemenata hijerarhijskog imenika koji su podređeni zadanoj skupini

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


BIRAJTE
Nomenklatura. Šifra,
Nomenklatura.Nabavna cijena
IZ

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

Ako nas zanimaju samo elementi i grupe koji se nalaze izravno u datoj grupi, tada takve elemente možemo dobiti postavljanjem uvjeta u polje Roditelj. Primjer:


BIRAJTE
Nomenklatura. Šifra,
Nomenklatura Ime KAO Ime,
Nomenklatura.Nabavna cijena
IZ
Imenik.Nomenklatura AS Nomenklatura

GDJE
Nomenklatura.Parent = &Grupa

Ovaj će upit odabrati grupe i elemente podređene grupi s vezom &Grupa.

Provjera prisutnosti podređenih elemenata elementa imenika

Da biste provjerili prisutnost podređenih zapisa elementa imenika, možete upotrijebiti upit sličan predstavljenom:

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


If Request.Execute().Empty() Then
Izvješće ("Nema unosa");
Inače
Izvješće ("Dostupni zapisi");
završi ako;

Dobivanje svih roditelja elementa

Upitni jezik ne pruža nikakva posebna sredstva za dohvaćanje svih roditelja elementa. Možete koristiti hijerarhijske zbrojeve za dovršetak zadatka, ali dobivanje hijerarhijskih zbrojeva je optimizirano za izgradnju zbrojeva za veliki broj zapisa i nije potpuno učinkovito za dobivanje roditelja jednog elementa. Za učinkovitije dohvaćanje svih nadređenih zapisa elementa, preporuča se proći kroz roditelje u malim dijelovima. Primjer:


CurrentItemItem = Stavka Stavke;

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

Dok je Ciklus istine
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Rezultat = Query.Run();
If Result.Empty() Then
Prekid;
završi ako;
Odabir = Rezultat.Odaberi();
Odabir.Dalje();
Za ColumnNumber = 0 prema Result.Columns.Quantity() - 1 petlja
Trenutna stavkaStavka = Odabir[Broj stupca];
Prekid;
Inače
Izvješće(TrenutnaStavkaStavka);
završi ako;
EndCycle;

If CurrentItemItem = Directories.Nomenclature.EmptyLink() Onda
Prekid;
završi ako;
EndCycle;

U ovom primjeru, svi roditelji za vezu zabilježenu u varijabli ElementNomenclature prikazani su u prozoru servisne poruke. U ciklusu se odabire 5 roditelja veza.

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

Prikaz hijerarhijskog imenika u izvješću

Za prikaz hijerarhijskog imenika u izvješću uz očuvanje hijerarhije, morate upotrijebiti upit sličan sljedećem:


BIRAJTE
Nomenklatura. Šifra,
Nomenklatura Ime KAO Ime,
Nomenklatura.Nabavna cijena
IZ
Imenik.Nomenklatura AS Nomenklatura
SORTIRAJ PO
Naziv HIJERARHIJA

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

Kako bi se grupe imenika mogle postaviti iznad elemenata, potrebno je zamijeniti klauzulu ORDER BY u ovom zahtjevu sa sljedećim:


SORTIRAJ PO
Nomenklatura. Ovo je HIJERARHIJA Grupe,
Ime

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

Također je moguće ponudu ORDER BY zamijeniti opcijom AUTO ORDER. U tom će slučaju rezultat biti poredan u skladu s postavkama imenika, tj. ako imenik navodi da se grupe trebaju nalaziti iznad elemenata, tada će se nalaziti iznad.

Također je moguće dobiti hijerarhijsku strukturu imenika pomoću rezultata.


BIRAJTE
Nomenklatura. Šifra,
Nomenklatura Ime KAO Ime,
Nomenklatura.Nabavna cijena

IZ Imenika.Nomenklatura KAO Nomenklatura

GDJE
(Nomenclature.ThisGroup = FALSE)

REDAJ PREMA IMENU

Dobivanje ukupnih zbrojeva po hijerarhiji

Za dobivanje ukupnih zbrojeva po hijerarhiji u upitu, morate navesti ključnu riječ HIERARCHY u klauzuli SOFTWARE TOTAL nakon navođenja polja prema kojem će se zbrojevi izračunati. Primjer izvješća "Promet artikla" s dobivanjem zbrojeva po hijerarhiji:


BIRAJTE

IZ

Nomenklatura HIJERARHIJA

Kao rezultat ovog zahtjeva, zbrojevi će se izračunati ne samo za svaku stavku, već i za grupe kojima ova ili ona stavka pripada.

U slučaju kada ne trebamo zbrojeve za elemente, već samo zbrojeve za grupe, trebamo koristiti konstrukciju SAMO HIJERARHIJA u zbrojevima. Primjer:


BIRAJTE
Računovodstvo nomenklaturePromet.Nomenklatura AS Nomenklatura,
Računovodstvo nomenklaturePromet.Nomenklatura.Prezentacija,
Računovodstvo NomenklatureTurnover.QuantityTurnover AS QuantityTurnover
IZ
Registar akumulacije. Računovodstvo nomenklature. Promet KAKO Računovodstvo nomenklature Promet
IZNOS REZULTATA (količina prometa) PO
Nomenklatura SAMO HIJERARHIJA

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

Što je 1C imenik i zašto je potreban? Imenik pohranjuje uvjetno trajne informacije, tj. informacije koje ostaju gotovo nepromijenjene tijekom dugog vremenskog razdoblja. 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 usporedbu uzmemo spol osobe, tada je popis ograničen i nepromijenjen, pa je za to bolje prikladno nabrajanje.

Nakon što smo napravili novi direktorij, vidjet ćemo sljedeću sliku.

Pogledajmo sve njegove oznake.

Osnovni, temeljni

Ovdje su navedeni naziv (identifikator u bazi podataka) i sinonim (korisničko ime imenika). Neobavezni komentar je onaj koji može objasniti svrhu imenika ili opisati njegove značajke.

Hijerarhija

Na ovoj kartici možete konfigurirati dubinu ugniježđivanja elemenata imenika. Pomoću ove postavke prikladno je razlikovati i detaljizirati elemente prema nekim kriterijima. Na primjer, proizvodi “Ormari” su u jednoj grupi, a proizvodi “Stolovi” su u drugoj. Prema zadanim postavkama, kada se stvori, imenik predstavlja popis elemenata. Ako označite potvrdni okvir Hijerarhijski direktorij, tada svaki element može biti podređen drugom elementu (grupi). Ispod su opcije za prilagodbu ove knjižne oznake i promjenu prikaza u prilagođenom načinu rada.

Vrsta hijerarhije:

Hijerarhija grupa i elemenata

S ovom postavkom elementi se mogu ugniježđivati ​​samo u grupama (mapama).

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

Stavite grupe na vrh

Kada je ovaj potvrdni okvir označen, grupe će uvijek biti na vrhu, inače će biti raspoređene po redoslijedu, na primjer, ovako:

Ograničenje broja razina hijerarhije

Ako potvrdni okvir ovdje nije označen, gniježđenje je neograničeno.

Ako je potvrdni okvir označen, u nastavku možete odrediti broj razina.

Vlasnici

Na knjižnoj oznaci vlasnici mogu se naznačiti drugi imenici u odnosu na koje je ovaj podređen. Dijagram odnosa podređenih imenika sličan je dijagramu odnosa hijerarhijskog direktorija, samo što ovdje drugi imenik djeluje kao roditelj i naziva se vlasnik. U tipičnim konfiguracijama, dobar primjer je podređenost direktorija "Ugovori" direktoriju "Druge strane", jer Ne može postojati ugovor koji ne pripada niti jednoj drugoj strani.

Polje "List of Directory Owners" navodi popis direktorija koji posjeduju elemente ovog imenika.

Ispod u polju "Upotreba podređenosti" naznačeno je čemu će elementi ovog imenika biti podređeni.

Kako programski saznati je li imenik hijerarhijski ili ne

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

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

Nastavit će se...

Najbolji članci na temu