Priprema stručnjaka za tehnološka pitanja. Metode rješavanja tehnoloških problema velikih implementacija. Zahtjevi za učesnike

1C programiranje se sastoji od više od samog pisanja programa. 1C je ingot korisničkih radnji i podataka s kojima on radi.

Podaci se pohranjuju u bazu podataka. 1C upiti su način da se dohvate podaci iz baze podataka kako bi se prikazali korisniku u obliku ili da bi se obradili.

Osnovni dio izvještaja je 1C zahtjev. U slučaju izvještaja, ACS je najveći dio izvještaja.

Sjedni. Udahni. Smiri se. Sad ću vam reći novosti.

Za programiranje u 1C nije dovoljno poznavati 1C programski jezik. Takođe morate znati 1C jezik upita.

1C jezik upita je potpuno odvojen jezik koji nam omogućava da odredimo koje podatke trebamo dobiti iz baze podataka.

Takođe je dvojezičan - to jest, možete pisati na ruskom ili engleskom. Izuzetno je sličan SQL jeziku upita i oni koji ga poznaju mogu se opustiti.

Kako se koriste 1C zahtjevi

Kada korisnik pokrene 1C u Enterprise modu, nema ni jednog grama podataka u pokrenutom klijentu. Stoga, kada trebate otvoriti direktorij, 1C traži podatke iz baze podataka, odnosno postavlja 1C zahtjev.

1C upiti su:

  • Automatski upiti 1C
    Sistem generiše automatski. Napravili ste obrazac liste dokumenata. Dodata kolona. To znači da kada otvorite ovaj obrazac u Enterprise modu, bit će postavljen upit i podaci za ovu kolonu će biti traženi.
  • Poluautomatski upiti 1C
    Postoji mnogo metoda (funkcija) u jeziku 1C, kada se pristupi, postavlja se upit bazi podataka. Na primjer.GetObject()
  • Ručni 1C upiti (napisan od strane programera posebno kao upit)
    Možete sami napisati 1C zahtjev u kodu i izvršiti ga.

Kreiranje i izvršavanje 1C upita

1C zahtjev je stvarni tekst zahtjeva na jeziku 1C zahtjeva.
Tekst se može pisati olovkama. Odnosno, uzmi i napiši (ako znaš ovaj jezik).

Budući da 1C promovira koncept vizualnog programiranja, gdje se mnogo ili skoro sve može uraditi bez ručnog pisanja koda, postoji poseban objekat konstruktor upita koji vam omogućava da nacrtate tekst upita bez poznavanja jezika upita. Međutim, čuda se ne dešavaju - za to morate znati kako raditi s konstruktorom.

Nakon što je tekst 1C zahtjeva spreman, potrebno ga je izvršiti. U tu svrhu postoji objekt u 1C kodu Request(). Evo primjera:

Zahtjev = Novi zahtjev();
Query.Text = "ODABIR
| Nomenklatura.Link
|OD
| Imenik.Nomenklatura AS Nomenklatura
|WHERE
| Nomenklatura.Usluga";
Odaberite = Query.Run().Select();

Izvještaj(Izbor.Link);
EndCycle;

Kao što možete vidjeti u primjeru, nakon izvršenja 1C zahtjeva, rezultat dolazi do nas i moramo ga obraditi. Rezultat je jedan ili nekoliko redova tabele (u posebnom obliku).

Rezultat se može učitati u običnu tabelu:
Dohvati = Query.Run().Unload(); //Rezultat – tabela vrijednosti

Ili samo obilazite red po red.
Odaberite = Query.Run().Select();
Dok Select.Next() petlja
//Uradite nešto s rezultatima upita
EndCycle;

Rad sa 1C zahtjevima

Osnovni principi 1C upita

Osnovni principi konstruisanja 1C zahteva –
SELECT List of Fields IZ Naslov tabele WHERE Uslovi

Primjer izgradnje takvog 1C zahtjeva:

ODABIRATI
// lista polja za odabir
Veza,
ime,
Kod
OD
//ime tabele iz koje biramo podatke
//lista tabela je lista objekata u prozoru konfiguratora
Imenik.Nomenklatura
GDJE
//naznači odabir
Vrsta proizvoda = &Usluga //izbor prema vanjskoj vrijednosti
Ili Usluga // “Service” atribut tipa Boolean, odabir po vrijednosti True
SORT BY
//Sorting
Ime

Lista 1C tablica

Možete vidjeti nazive tablica u prozoru konfiguratora. Vi samo trebate napisati “Imenik” umjesto “Imenici”, na primjer “Imenik.Nomenklatura” ili “Dokument.Prodaja roba i usluga” ili “Registar akumulacije.Prodaja”.

Postoje dodatne tabele (virtuelne) za registre koje vam omogućavaju da dobijete konačne brojeve.

Registar informacija.RegisterName.Last Slice(&Date) – 1C zahtjev iz registra informacija, ako je periodičan, za određeni datum

Registar akumulacije. Naziv registra. Stanja (&Datum) – 1C zahtjev iz registra stanja za određeni datum

Registar akumulacije.Naziv registra.Promet (&Datum početka, &Završni datum) – 1C zahtjev iz registra prometa za period od datuma početka do datuma završetka.

Dodatni principi

Kada tražimo listu nekih podataka, funkcionišu osnovni principi. Ali mi također možemo tražiti brojeve i zahtjev ih može prebrojati umjesto nas (dodati ih, na primjer).

ODABIRATI
//Quantity(FieldName) – broji količinu
//Field AS OtherName – preimenuje polje
Količina (link) AS Količina objavljenih dokumenata
OD

GDJE
Provedeno

Ovaj 1C zahtjev će nam vratiti ukupan broj dokumenata. Međutim, svaki dokument ima polje Organizacija. Recimo da želimo da izbrojimo broj dokumenata za svaku organizaciju koristeći 1C upit.

ODABIRATI
//samo polje dokumenta
organizacija,
//izračunaj količinu
Količina (link) AS Količina po organizacijama
OD
Dokument Prodaja roba i usluga
GDJE
Provedeno
GROUP BY

Organizacija

Ovaj 1C zahtjev će nam vratiti broj dokumenata za svaku organizaciju (također se naziva "po organizaciji").

Dodatno izračunajmo količinu ovih dokumenata koristeći 1C zahtjev:

ODABIRATI
//samo polje dokumenta
organizacija,
//izračunaj količinu

//izbroji iznos

OD
Dokument Prodaja roba i usluga
GDJE
Provedeno
GROUP BY
//mora se koristiti ako lista polja ima funkciju count() i jedno ili više polja u isto vrijeme - tada morate grupirati prema ovim poljima
Organizacija

Ovaj 1C zahtjev će nam također vratiti količinu dokumenata.

ODABIRATI
//samo polje dokumenta
organizacija,
//izračunaj količinu
Količina (link) AS Količina Po organizacijama,
//izbroji iznos
Iznos(Iznos dokumenta) AS iznos
OD
Dokument Prodaja roba i usluga
GDJE
Provedeno
GROUP BY
//mora se koristiti ako lista polja ima funkciju count() i jedno ili više polja u isto vrijeme - tada morate grupirati prema ovim poljima
Organizacija
PO REZULTATI Općenito

1C jezik upita je opsežan i složen i nećemo razmatrati sve njegove mogućnosti u jednoj lekciji - pročitajte naše sljedeće lekcije.

Ukratko o dodatne funkcije 1C jezik upita:

  • Spajanje podataka iz više tabela
  • Ugniježđeni upiti
  • Batch zahtjev
  • Kreiranje sopstvenih virtuelnih tabela
  • Upit iz tablice vrijednosti
  • Korištenje ugrađenih funkcija za dobivanje i manipulaciju vrijednostima.

1C Query Builder

Kako ne biste ručno pisali tekst zahtjeva, postoji 1C dizajner zahtjeva. Samo kliknite desnim tasterom miša bilo gde u modulu i izaberite 1C Query Designer.

Odaberite željenu tablicu s lijeve strane u 1C dizajneru upita i povucite je udesno.

Odaberite potrebna polja iz tablice u 1C dizajneru upita i povucite udesno. Ako želite ne samo da odaberete polje, već da na njega primijenite neku vrstu funkcije sumiranja, nakon povlačenja kliknite na polje dvaput mišem. Na kartici Grupisanje, moraćete da izaberete (prevučete) potrebna polja za grupisanje.

Na kartici Uvjeti u 1C dizajneru upita možete odabrati potrebne odabire na isti način (prevlačenjem polja po kojima ćete izvršiti odabir). Obavezno odaberite ispravno stanje.

Na kartici Narudžba je naznačeno sortiranje. Na kartici Rezultati – sumiranje rezultata.

Koristeći 1C dizajner upita, možete proučiti bilo koji postojeći upit. Da biste to učinili, desnom tipkom miša kliknite tekst postojećeg zahtjeva i također odaberite 1C dizajner upita - i zahtjev će se otvoriti u 1C dizajneru upita.

Ovaj članak je namijenjen čitaocima koji poznaju SQL jezik.

Jezik upita u 1C, koji se koristi od verzije 8, danas je postao koristan alat za rad sa bazama podataka, što vam omogućava čitanje iz njih, ali ne i pisanje. Sintaktički, jezik upita je vrlo sličan SQL jeziku, ali na ruskom.

Ispod je tabela korespondencije između glavnog jezika upita i SQL operatora:

1C operatori jezika upita

SQL izraz

VARIOUS

COMPOUND

GROUP BY

KOMBINE

SORT BY

A ovo je daleko od toga puna lista. Kompletniji pozadinske informacije za dostupne operatore jezika upita mogu se dobiti u dizajneru upita, o čemu će biti riječi u nastavku.

Izvršavanje 1C zahtjeva iz programskog koda vrši se pomoću ugrađenog jezičnog objekta "Zahtjev". Primjer pisanja upita baze podataka pomoću ugrađenog programskog jezika:

Zahtjev = Novi zahtjev; Query.Text = "SELECT | Synonym.Link AS Link |FROM | Directory.Directory1 AS Sinonim"; Odaberite = Query.Run().Select(); Dok Selection.Next() Loop // Umetanje selekcije obrada SelectionDetailedRecords EndCycle;

Metoda “Run” izvršava upit, “Select” metoda vraća vrijednost tipa “SelectFromQueryResult”. Također možete koristiti metodu Unload, koja vraća tablicu vrijednosti.

Parametri zahtjeva se pohranjuju u svojstvu “Parameters” (u ovom slučaju, ovo je struktura, tako da su ovdje primjenjive sve metode strukture - umetanje, brisanje, itd.).

Primjer postavljanja parametra “Query.Parameters.Insert” (“Directory”, DirectoryLink). U zahtjevu možete pristupiti parametrima pomoću ampersanda “&Directory”. Ispod je primjer zahtjeva koji koristi parametre:

Zahtjev = Novi zahtjev; Query.Text = "SELECT | Users.Link AS Link, | Users.Parent AS Parent, | Users.Name AS Ime |FROM | Directory.Users AS Korisnici |WHERE | Users.Link = &Directory"; Query.Parameters.Insert("Directory", DirectoryLink); Odaberite = Query.Run().Select(); Dok Selection.Next() Loop // Umetanje selekcije obrada SelectionDetailedRecords EndCycle;

Podsjetimo da je jezik upita namijenjen samo za čitanje podataka iz baze podataka, tako da nema analoga takvih SQL izraza kao što su INS ERT i UPDATE. Podaci se mogu mijenjati samo kroz objektni model ugrađenog 1C programskog jezika. Također u 1C jeziku upita postoje operatori koji nemaju analoga u SQL-u, na primjer:

  • U HIJERARHIJI
  • PLACE
  • INDEX BY

U HIJERARHIJI– omogućava vam da odaberete sve elemente hijerarhijskog direktorija koji su uključeni u hijerarhiju prenesene veze. Primjer korištenja zahtjeva U HIJERARHIJI:

SELECT Products.Link, Products.Article IZ Imenika.Proizvodi KAO Proizvodi GDJE Proizvodi.Link U HIJERARHIJI(&Citrus)"

U ovom slučaju, rezultat će vratiti sve podređene elemente imenika Citrus nomenklature, bez obzira na to koliko hijerarhijskih nivoa ovaj direktorij ima.

Također, na primjer, zadatak je pronaći proizvod pod nazivom „Olovka“. Proizvod mora biti uključen u hijerarhiju „Dopisnica“. Roba”, odnosno ne moramo tražiti kvaku. Struktura nomenklature u ovom slučaju je sljedeća:

Ured

|_ Nalivpera |_ Crvena olovka |_ Plava olovka |_ Olovke |_ Lenjiri

Dodaci

|_ Kvake za vrata |_ Jednostavna kvaka |_ Luksuzna kvaka

Pišemo sljedeći zahtjev:

ODABERITE Proizvode.Veza, Proizvodi.Članak IZ Imenika.Proizvodi KAO Proizvodi GDJE Proizvodi.Naziv Kao "Pen%" I Proizvodi.Veza U HIJERARHIJAMA(&Knjižni materijal)"

Kada koristite dizajn U HIJERARHIJI potrebno je uzeti u obzir da ako prosledite praznu vezu parametru “Office”, izvršenje zahteva će se usporiti, jer će platforma svaki element provjeravati da li pripada root-u.

PLACE– Ova izjava stavlja rezultat u privremenu tabelu. Primjer zahtjeva:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Ime MESTO Odabrani korisnici IZ Direktorijuma.Korisnici KAO Korisnici WHERE Users.Link = &Directory; SELECT SelectedUsers.Link AS Link, SelectedUsers.Parent AS Parent, SelectedUsers.Name AS Ime FROM SelectedUsers AS SelectedUsers

Ovaj SQL upit će se izvršiti s nekoliko upita:

  • Kreiranje privremene tabele (platforma može „ponovno koristiti“ prethodno kreirane privremene tabele, tako da se kreiranje ne dešava uvek);
  • Postavljanje podataka u privremenu tabelu;
  • Izvršavanje glavnog upita, odnosno SEL ECT iz ove privremene tabele;
  • Uništavanje/čišćenje privremenog stola.

Privremena tabela može biti uništena eksplicitno, kroz konstrukciju DESTROY, ili implicitno - prilikom zatvaranja privremenog upravitelja tablice.

Objekat „Upit“ ugrađenog programskog jezika ima svojstvo „Upravljač privremenim tabelama“ koje je namenjeno za rad sa privremenim tabelama. Primjer koda:

MVT = Novi TemporaryTableManager(); Zahtjev = Novi zahtjev; Query.TemporaryTableManager = MVT;

Nakon izvršenja upita, varijabla MVT može se koristiti drugi put u drugom upitu, što je nesumnjivo još jedna prednost korištenja privremenih tabela. U ovom slučaju, privremena tabela iz baze podataka će biti izbrisana kada se pozove metoda “Close”...

MVT.Close();

...ili prilikom brisanja varijable iz memorije, odnosno prilikom izvršavanja metode u kojoj je varijabla deklarirana. Privremene tabele povećavaju opterećenje na podsistemu diska, tako da ne biste trebali kreirati previše privremenih podsistema (na primjer, u petlji) ili podsistema velikog volumena.

INDEX BY– ovaj operator se koristi zajedno s operatorom PLACE. Prilikom kreiranja privremene tabele, ovaj operator može indeksirati tabelu koja se kreira, što značajno ubrzava rad sa njom (ali samo ako indeks odgovara vašem upitu).

Besplatne stručne konsultacije

Hvala vam na zahtjevu!

Stručnjak 1C će vas kontaktirati u roku od 15 minuta.

Karakteristike nekih operatora jezika upita

ZA PROMJENU– ovaj operator je namijenjen za zaključavanje određene tabele upita (ili svih tabela koje učestvuju u upitu). Zaključavanje se postiže primjenom U brave na stol. U SQL-u se ovo implementira preko hint UPDLOCK. Ovaj dizajn je neophodan kako bi se spriječile zastoje. Primjer zahtjeva sa konstrukcijom ZA PROMJENU:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Name FROM Directory.Users AS Users LEFT JOIN Directory.RFK AS RFK BY Users.RFK = RFK.Link TO CHANGE Directory.Users

IN u ovom primjeru U tabelu "Korisnici" postavit će se U brava. Ako ne navedete tabelu za zaključavanje, ono će biti nametnuto svim tablicama koje učestvuju u upitu. Važno je to napomenuti ovaj dizajn radi samo u konfiguracijama u kojima je omogućen način automatskog upravljanja zaključavanjem.



COMPOUND– zahtjev podržava veze LIJEVO/DESNO, PUNO, UNUTRAŠNJE,što odgovara spojevima u SQL-u – LEFT/RIGHT JOIN, OUTER JOIN, INNER JOIN.

Međutim, kada koristite alatku za pravljenje upita, to nećete moći RIGHT JOIN. Konstruktor će jednostavno zamijeniti tabele, ali će operator uvijek biti ljevoruk. Iz tog razloga, nikada nećete vidjeti korištenje desnog spoja u 1C.

Sintaktički, veza izgleda ovako:

SELECT Table1.Link AS Link FROM Directory.Directory1 AS Table1 LEFT JOIN Directory.Directory2 AS Table2 BY Table1.Attributes = Table2.Attributes

1C jezik upita nema operatora za spajanje kartezijanskog proizvoda (CROSS JOIN). Međutim, odsustvo operatora ne znači da jezik upita ne podržava takvu vezu. Ako je potrebno, možete spojiti tabele ovako:

SELECT Table1.Link AS Link FROM Directory.Directory1 AS Table1 LEFT JOIN Directory.Directory2 AS Table2 BY TRUE

Kao što se može vidjeti iz primjera, ključ za povezivanje je postavljen BY TRUE, to jest, svaki red jedne tabele odgovara redu druge. Tip spajanja (LEVO, DESNO, FULL, INNER) nije bitan ako imate redove u obe tabele, ali ako u jednoj od tabela (recimo tabela) nema reda - rezultat će biti drugačiji. Na primjer, prilikom korištenja INTERNAL rezultat veze će biti prazan. Koristeći LIJEVO DESNO rezultat spajanja će biti ili neće biti podaci u zavisnosti od toga koju tabelu spajamo - sa podacima ili ne. Koristeći PUN Podaci će uvijek biti povezani (naravno, samo iz jedne tabele, jer je druga prazna); izbor vrste veze ovisi o konkretnom zadatku aplikacije.

Mali vizuelni nagovještaj kako rade Razne vrste veze:



LIKE. Za razliku od sličnog SQL operatora - LIKE, predložak za LIKE može se specificirati korištenjem samo nekih posebnih znakova:

  • % (procenat): niz koji sadrži bilo koji broj proizvoljnih znakova;
  • _ (donja crta): jedan proizvoljan znak;
  • / - sljedeći znak treba tumačiti kao običan znak.

REZULTATI SOFTVERA SQL analog je ROLLUP operator. Primjer upotrebe operatera REZULTATI:

SELECT Products.Cijena KAO Cijena, Proizvodi.Proizvod KAO Proizvod IZ Imenika.Nomenklatura KAO Proizvodi PROSJEČNI REZULTATI (Cijena) PO Proizvodu

Rezultat će biti ovakav:

Bed

9833,333

Iron

Olovka

Odnosno, rezultatu se dodaje dodatni red koji sadrži vrijednost polja po kojem se vrši grupisanje i vrijednost funkcije agregiranja.

Rad sa batch zahtjevima

1C vam omogućava da radite sa serijama zahtjeva. U paketnom zahtjevu, tekstovi zahtjeva su odvojeni tačkom i zarezom (;). 1C paketni zahtjev se izvršava uzastopno. Primjer teksta zahtjeva serije:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Ime FROM Directory.Users AS Korisnici;
SELECT Work Schedule.User AS User, Work Schedule.Date AS Datum, Work Schedule.Working Time AS Radno vrijeme IZ Registra Information.Work Schedule AS Work Schedule

Da biste dobili rezultat svih upita uključenih u paket, morate koristiti metodu “ExecutePackage” objekta zahtjeva umjesto “Run”. Ova metoda izvršava sve zahtjeve uzastopno. Rezultat upita je niz rezultata za svaki upit u paketu, a redoslijed postavljanja u niz je isti kao i slijed upita u tekstu paketa.

Kada se razmatra jezik upita, vrijedno je spomenuti takvu funkciju kao što su virtualne tablice. Virtuelne tabele nisu prisutne u bazi podataka, one su neka vrsta omotača koji se izvršava na strani DBMS-a kao upit pomoću potupita. Primjer 1C upita koristeći virtuelne tablice:

SELECT RegistarObveznostiPromet.Obveza AS Obaveza IZ RegistraAkumulacije.RegistarObveze.Promet() AS Registar obavezaPromet

Takav upit DBMS-u bi izgledao ovako:

SEL ECT T1.FLD25931RRRRRERF FR OM (Odaberite t2._fld25931rref kao FLD25931RRRRERF, CAST (SUM (T2._FLD25936) AS Numerički (38, 8)) Kao FLD25936TTURNOVERUM_, CAST 2 (38) (38) kao broj (38) 8)) AS Fld25937Promet_ FR OM dbo._AccumRgTn25938 T2 GDJE ((T2._Fld949 = @P1)) I ((T2._Fld25936 @P2 ILI T2._Fld25937 @P3)9 HAST GROUP (RR25937 @P3)9) T2._Fld25) 936 ) KAO NUMERIC(38, 8))) 0.0 ILI (CAST(SUM(T2._Fld25937) KAO NUMERIC(38, 8))) 0.0) T1>>>>

Vidi se da ne liči na SQL, jer postoji podupit, grupisanje. Virtuelne tabele su, uglavnom, „sintaktički šećer“, odnosno kreirane su, generalno, za praktičnost razvoja upita, tako da su upiti kompaktniji i čitljiviji.

Samo registri imaju virtuelne tabele, ali koje su virtuelne tabele dostupne u registru može se videti u dizajneru upita.



Kada koristite virtuelne tabele, uvek morate da obezbedite uslov izbora. U suprotnom može doći do problema sa performansama.



U tijelu zahtjeva to izgleda ovako:

Registar akumulacije Registar odgovornosti Promet (, Operacija = &Operacija) AS Registar odgovornosti Promet

Za praktičnost pisanja upita, odnosno kreiranja tekstova upita, u 1C postoji konstruktor koji se može pozvati kroz kontekstni meni (desno dugme miša):



U dizajneru upita možete vidjeti kompletnu listu podržanih funkcija i operatora jezika upita.


Query Builder je vrlo fleksibilan vizualni alat za kreiranje upita bilo koje složenosti. Dostupan je samo u modu konfiguratora. U Enterprise modu postoji takozvana „Konzola upita“ - ovo je eksterna obrada koja se isporučuje na ITS disku. Za upravljanu aplikaciju, konzola za upite može se preuzeti sa its.1c.ru.

Opis rada u dizajneru upita je izvan okvira ovog članka, tako da se neće detaljno raspravljati.

Razlozi za neoptimalne performanse upita

Ispod je lista glavnih razloga (ali ne svih) koji dovode do sporog izvršavanja upita.

  • Korištenje spojeva s podupitima

Ne preporučuje se izvođenje spajanja sa potupitima; potupite treba zamijeniti privremenim tabelama. Spajanje potupita može dovesti do značajnih gubitaka performansi, a izvršenje upita na različitim DBMS-ovima može značajno varirati u brzini. Brzina izvršavanja takvih upita je također osjetljiva na statistiku u DBMS-u. Razlog ovakvog ponašanja je taj što optimizator DBMS-a ne može uvijek ispravno odrediti optimalni plan izvršenja upita, budući da optimizator ne zna ništa o tome koliko će redova podupit vratiti nakon njegovog izvršenja.

  • Korišćenje virtuelnih tabela u spojevima upita

Virtuelne tabele na nivou DBMS se izvršavaju kao potupiti, pa su razlozi isti kao u prvom paragrafu.

  • Korištenje uvjeta u upitu koji se ne uklapaju u postojeće indekse

Ako je u uslovima zahteva (u operateru GDJE ili u uslovima virtuelne tabele) koriste se polja koja nisu sva uključena u indeks, ovaj upit će se izvršiti sa koristeći SQL skeniranje tablice ili konstrukcije skeniranja indeksa (u cijelosti ili djelomično). Ovo će utjecati ne samo na vrijeme izvršenja upita, već će se i prekomjerno S zaključavanje postaviti na dodatne redove, što zauzvrat može dovesti do eskalacije zaključavanja, odnosno, cijela tabela će biti zaključana.

  • Korištenje ILI u uvjetima upita

Korištenje logičkog operatora ILI u dizajnu GDJE također može rezultirati skeniranjem tablice. To se događa zato što DBMS ne može ispravno koristiti indeks. Umjesto ILI možete koristiti dizajn Kombinujte SVE.

  • Prijem podataka preko tačke za polja kompozitnog tipa

Ne preporučuje se dobivanje vrijednosti kroz tačku (u konstrukciji BIRAJTE GDJE), jer ako se pokaže da je atribut objekta složen tip, spoj će se dogoditi sa svakom tablicom uključenom u ovaj složeni tip. Kao rezultat toga, DBMS upit će biti znatno složeniji, što može spriječiti optimizator da odabere ispravan plan izvršenja upita.

Ovaj članak govori o prijedlogu IZ, njegovom mjestu i ulozi u jeziku upita 1C:Enterprise 8.

Klauzula IZ je prisutna u skoro svakom 1C:Enterprise 8 upitu, jer je u većini slučajeva tamo gdje su naznačene tabele izvora podataka za upit. Pored toga, IZ klauzula vam omogućava da se pridružite više tabela, kao i da odredite parametre prilikom dobijanja virtuelne tabele.

U nastavku su obrađene sljedeće teme:
- Izvorne tabele
- Primjeri upita sa IZ klauzulom:
- Dohvaćanje podataka iz različitih izvornih tabela
- Virtuelni stolovi
- Izvorni aliasi
- Potupit kao izvor
- Spojni stolovi
- Mjesto rečenice IZ u strukturi zahtjeva

Mjesto IZ klauzule u strukturi zahtjeva

Upit ne mora sadržavati klauzulu FROM (ako su polja u listi izbora potpuno kvalificirana, tj. uključuju naziv tablice).
- U zahtjevu može biti više izvora (u ovom slučaju se obično povezuju prema određenom uvjetu)
- Izvor može biti obična izvorna tabela, virtuelna tabela sa parametrima ili ugniježđeni upit
- Možete dodijeliti pseudonim izvoru koristeći ključna riječ KAKO ( Pažnja: Ako je izvor potupit, tada je potreban pseudonim).

Izvorne tabele

Sve izvorne tabele se mogu podeliti u tri klase:
- Tabele povezane s referentnim konfiguracijskim objektima (direktoriji, planovi, dokumenti i zapisnici dokumenata)
- Tabele povezane s registrima (informacije, akumulacija, računovodstvo, obračun)
- Tabele povezane s drugim konfiguracijskim objektima (konstante, sekvence, kriteriji odabira)

Primjeri zahtjeva sa IZ klauzulom

Dohvaćanje podataka iz različitih izvornih tabela

Izbor elemenata direktorija:


SELECT *, View FROM Directory.Nomenclature

Izbor dokumenata određene vrste:

Izbor objavljenih dokumenata uključenih u časopis WarehouseDocuments:

Izbor aktivnih unosa registra akumulacije:


SELECT Artikal, Odjel kompanije, Iznos Prodaja
IZ RegisterAccumulation.SalesCompany
WHERE Aktivnost = Tačno

Odabir podataka iz tabelarnog dijela dokumenta:


//pristup tabelarnom dijelu dokumenta
SELECT Nomenklatura, količina
IZ dokumenta.Napredni izvještaj.Proizvodi

Kada pristupate tabelarnom dijelu dokumenta kao izvoru podataka, uobičajeni detalji dokumenta dostupni su preko polja Veza tabelarnog dijela, na primjer:

Virtuelni stolovi

Neke od izvornih tabela su virtuelne. To znači da oni nisu pohranjeni u bazi podataka, ali kada se pristupa takvoj tablici, vrši se upit prema stvarnim tablicama baze podataka.

Obično, kada pristupate virtuelnoj tabeli, navedete parametre koji utiču na njen sadržaj. Popis parametara, njihov tip i namjena opisani su u dokumentaciji. Ovdje predstavljamo nekoliko upita koji koriste virtualne tablice, uključujući i one s parametrima:


//pristup virtuelnoj tabeli akumulacionog registra (poziv bez parametara)
SELECT * FROM RegisterAcumulations.CompanySales.Promet

//uzorak revolucija za period
ODABERITE * IZ registra akumulacije.Prodaja kompanije.Promet(&Početak, &Kraj,)

//uzorkovanje prometa za određeni proizvod
SELECT * IZ registra akumulacije.Prodaja kompanije.Promet(,Nomenklatura = &Odaberi proizvod)

//ostaci robe na određeni datum
SELECT * FROM RegisterAccumulation.Remaining Products of the Company.Remaining(&SelectDate,)

Komentar. Virtuelna tabela „Stanja“, kao i „Stanja i prometi“ postoje samo za registar akumulacije tipa „Stanja“. Virtuelna tabela "Promet" postoji u registru prometa i registru stanja Virtuelna tabela "PrometDtKt" postoji samo u računovodstvenom registru sa korespondencijom.

Izvorni aliasi

Možete odrediti pseudonime za izvore koristeći ključnu riječ AS. Zatim kada pristupate poljima na listi polja za izbor, stanje itd. Možete koristiti pseudonim (a ponekad ne možete bez njega).


SELECT Sales.Nomenklatura,
Prodaja.Odjel kompanije,
Sales.AmountSales
IZ RegisterAcumulations.SalesCompany KAKO Sales
WHERE Aktivnost = Tačno

Potupit kao izvor

U sistemu 1C:Enterprise 8 možete navesti drugi zahtjev kao izvor, tj. upit može odabrati podatke iz potupita. Za potupit je potreban izvorni pseudonim, kao što je prikazano u sljedeći primjer:


ODABIRATI
Products.Nomenclature AS Product,
Proizvodi.Nomenklatura.Članak
OD
SELECT Item FROM Document.InternalOrder.Products
KOMBINE
ODABERITE stavku IZ dokumenta.Narudžba kupca.Proizvodi
) KAKO DO PROIZVODA

Spajanje tablica

Važna karakteristika jezika upita 1C:Enterprise 8 je pristup nekoliko tabela odjednom. Štaviše, mogu se povezati na određeni način.

Hajde da prvo razmotrimo šta se dešava ako postoji više izvora u rečenici IZ. U ovom slučaju će se formirati “kartezijanski proizvod” od dva skupa. Svaki zapis u jednoj tabeli biće uparen sa svim zapisima u drugoj. Na primjer,

Takva tablica se obično ne koristi u praktične svrhe. U pravilu se pristupa nekoliko međusobno povezanih tabela. Ovo se radi pomoću spojeva koji su unutrašnji, lijevo vanjski, desni vanjski i potpuno vanjski.

Unutrašnji spoj

Sa internim spajanjem, samo zapisi koji zadovoljavaju dati uslov su uključeni u rezultat upita. Povezane tabele obično imaju jedno polje čije su vrednosti iste u dve tabele, na primer, vezu ka nomenklaturi stavke direktorijuma. Recimo da trebate odabrati sve prodane proizvode i prikazati ih u izvještaju s naznakom broja artikla. Upit u nastavku radi ovo:


SELECT DocProducts.Nomenklatura, Ref.Article, DocProducts.Quantity, DocProducts.Amount
IZ Imenika.Nomenklatura AS Ref
CONNECTION Document.Advanced Report.Products AS DocProducts
Softver Ref.Link = DocProducts.Nomenclature

Komentar. U ovom primjeru, isti efekat se može postići jednostavnim upućivanjem na ime polja s tačkom, što se naziva dereferenciranje referentnih polja. U ovom slučaju, tabele se spajaju implicitno. Mogućnost dereferenciranja polja u 1C:Enterprise 8 omogućava vam pristup svojstvima objekata kroz nekoliko tačaka, na primjer, „Nomenklatura.Supplier.Country“. Ovo znatno olakšava pisanje upita.
Ako se u tabeli pronađe nekoliko zapisa koji zadovoljavaju uslov spajanja, tada će rezultat upita uključiti sve ove zapise.
Komentar. Prilikom spajanja najčešće se koristi uslov „jednako“, ali u jeziku upita moguće je koristiti sve operacije poređenja i logičke operacije I, ILI, NE.

Lijevi vanjski spoj

Dizajn LEFT [OUTER] JOIN znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Ali, za razliku od internog spajanja, rezultat upita mora uključivati ​​i zapise iz prvog izvora (označenih lijevo od riječi JOIN), za koje nisu pronađeni zapisi iz drugog izvora koji odgovaraju uvjetu.

Pravilo. U slučaju lijevog vanjskog spajanja, rezultat upita će uključiti sve zapise iz prvog izvora; oni će biti spojeni sa zapisima iz drugog izvora ako je ispunjen specificirani uslov. Linije rezultata upita za koje nisu pronađeni zapisi iz drugog izvora koji odgovaraju uvjetu sadržavat će NULL vrijednost u poljima generiranim na osnovu zapisa iz ovog izvora.

Imajte na umu da NULL vrijednosti nisu nula ili prazan niz. Ovo su posebni markeri koji označavaju nespecificirane (nedostajuće) vrijednosti ili vrijednosti koje nemaju smisla.

Na primjer, trebate prikazati kurseve svih valuta koje su pohranjene u registru informacija Kursevi valuta. Moguće je da za neku valutu odgovarajući unos neće biti pronađen u registru informacija, ali bi takođe trebalo da bude uključen u izveštaj:


IZ Imenika.Valute AS Ref
LEFT OUTER JOIN RegisterInformation.CurrencyRates.SliceLast AS Reg
Softver Ref.Link = Reg.Currency

Desni vanjski spoj

RIGHT [OUTER] JOIN dizajn znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Osim toga, rezultat upita mora uključiti i zapise iz drugog izvora (označeno desno od riječi CONNECTION), za koje nisu pronađeni zapisi iz prvog izvora koji odgovaraju uvjetu.

Pravilo. U slučaju desnog vanjskog spajanja, rezultat upita će uključiti sve zapise iz drugog izvora; oni će biti spojeni sa zapisima iz prvog izvora ako je ispunjen specificirani uslov. Linije rezultata upita za koje nisu pronađeni zapisi iz prvog izvora koji odgovaraju uvjetu sadržavat će NULL vrijednost u poljima generiranim na osnovu zapisa iz ovog izvora.
Desno vanjsko spajanje je potpuno isto kao i lijevo vanjsko spajanje, osim što se tabele zamjenjuju. Na primjer, upit ispod je ekvivalentan prethodnom, ali umjesto lijevog, koristi se desni vanjski spoj:


SELECT Ref.Name AS Valuta, Reg.Rate
IZ RegisterInformation.CurrencyRates.SliceLast() AS Reg
RIGHT OUTER JOIN Direktorij.Valute AS Ref
Softver Ref.Link = Reg.Currency

Potpuni vanjski spoj

Dizajn FULL [OUTER] JOIN znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Osim toga, rezultat upita mora uključiti i one zapise iz oba izvora za koje nisu pronađena podudaranja.

Pravilo. Sa potpunim vanjskim spajanjem, rezultat upita će uključiti sve zapise iz oba izvora; oni će biti povezani jedni s drugima kada se ispuni navedeni uvjet. Linije rezultata upita za koje nisu pronađeni zapisi iz bilo kojeg izvora koji odgovaraju uvjetu sadržavat će NULL u poljima generiranim na osnovu zapisa iz tog izvora.

Dakle, ponuda IZ je jedna od najjačih važnih elemenata jezik upita jer vam omogućava da navedete izvorne tabele za upit. Fleksibilne mogućnosti IZ prijedloga vam omogućavaju da koristite jezik upita za rješavanje širokog spektra problema.