1c očekivani alias zahtjeva. Korištenje odabira na temelju neindeksiranih polja

Zahtjevi dizajnirani su za izdvajanje i obradu informacija iz baze podataka kako bi ih pružili korisniku u traženom obliku. Obrada ovdje znači grupiranje polja, sortiranje redaka, izračunavanje ukupnih iznosa itd. Ne možete promijeniti podatke pomoću upita u 1C!

Zahtjev se izvršava prema danim uputama − tekst zahtjeva. Tekst zahtjeva sastavlja se u skladu sa sintaksom i pravilima jezik upita. Jezik upita 1C:Enterprise 8 temelji se na standardu SQL, ali ima neke razlike i proširenja.

Shema rada sa zahtjevom

Opća shema rada sa zahtjevom sastoji se od nekoliko uzastopnih faza:

  1. Izrada Request objekta i postavljanje teksta zahtjeva;
  2. Postavljanje parametara zahtjeva;
  3. Izvršavanje zahtjeva i dobivanje rezultata;
  4. Zaobilaženje rezultata zahtjeva i obrada primljenih podataka.

1. Objekt Zahtjev ima imovinu Tekst, kojem trebate dodijeliti tekst zahtjeva.

// Opcija 1
Zahtjev = Novi zahtjev;
Zahtjev . Tekst =
„IZABIRAJ
| Valutni tečajevi. Razdoblje,
| Tečajevi valuta. Valuta,
| Tečajevi valuta.Tečaj
|OD

|GDJE
;

// Opcija 2
Zahtjev = Novi zahtjev("IZABIRAJ
| Valutni tečajevi. Razdoblje,
| Tečajevi valuta. Valuta,
| Tečajevi valuta.Tečaj
|OD
| Registar informacija. Tečajevi valuta KAO tečajevi valuta
|GDJE
| Tečajevi valuta. Valuta = &Valuta");

2. Postavljanje vrijednosti parametara provodi se metodom PostaviParametar(< Имя>, < Значение>) . Parametri u tekstu zahtjeva označeni su simbolom “ & " i obično se koriste u uvjetima odabira (odjeljak WHERE) i u parametrima virtualne tablice.

Zahtjev);

3. Nakon dodjele teksta i postavljanja parametara, zahtjev se mora izvršiti i dobiti rezultat izvršenja. Izvršenje se provodi metodom Execute(), koja vraća objekt Rezultat upita. Iz rezultata upita možete:

  • dobiti odabir pomoću metode odabira (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • učitati vrijednosti u tablicu vrijednosti ili stablo vrijednosti pomoću metode Prijenos (< ТипОбхода>) .

// Primite uzorak

Uzorak = Rezultat upita. Odaberite();

// Dobivanje tablice vrijednosti
RequestResult = Zahtjev. Trčanje();
Stol = Rezultat upita. Istovariti();

4. Možete zaobići odabir rezultata upita pomoću petlje:

Pozdrav Sample.Next() petlja
Izvještaj(Selekcija.Tečaj);
EndCycle;

Kompletan primjer rada sa zahtjevom mogao bi izgledati ovako:

// Faza 1. Kreiranje zahtjeva i postavljanje teksta zahtjeva
Zahtjev = Novi zahtjev;
Zahtjev . Tekst =
„IZABIRAJ
| Valutni tečajevi. Razdoblje,
| Tečajevi valuta. Valuta,
| Tečajevi valuta.Tečaj
|OD
| Registar informacija. Tečajevi valuta KAO tečajevi valuta
|GDJE
| Tečajevi valuta. Valuta = &Valuta";

// Faza 2. Postavljanje parametara
Zahtjev . SetParameter("Valuta" , Odabrana valuta);

// Faza 3. Izvršavanje upita i dobivanje uzorka
RequestResult = Zahtjev. Trčanje();
Uzorak = Rezultat upita. Odaberite();

// Prelazak odabira
Pozdrav Sample.Next() petlja
Izvještaj(Selekcija.Tečaj);
EndCycle;

Sastav teksta zahtjeva

Tekst zahtjeva sastoji se od nekoliko dijelova:

  1. Opis zahtjeva— popis polja koja se mogu odabrati i izvora podataka;
  2. Spajanje upita— izrazi „UJEDINITE SE” i „UJEDINITE SVE”;
  3. Organiziranje rezultata— izraz "NARUČI OD...";
  4. Automatska narudžba— izraz „AUTOMATSKO NARUČIVANJE”;
  5. Opis rezultata- izraz "REZULTATI... OD...".

Samo je prvi odjeljak obavezan.

Privremene tablice i skupni upiti

1C jezik upita podržava korištenje privremeni stolovi— tablice dobivene kao rezultat izvršavanja upita i pohranjene na privremenoj osnovi.

Često se možete susresti sa situacijom u kojoj trebate koristiti ne tablice baze podataka kao izvor upita, već rezultat izvršavanja drugog upita. Ovaj problem se može riješiti pomoću ugniježđenih upita ili privremeni stolovi. Korištenje privremenih tablica omogućuje vam da pojednostavite tekst složenog upita tako da ga podijelite na sastavne dijelove, a također, u nekim slučajevima, ubrzate izvršenje upita i smanjite broj zaključavanja. Za rad s privremenim tablicama koristite objekt Voditelj rasporeda. Privremena tablica se stvara korištenjem ključne riječi PLACE iza koje slijedi naziv privremene tablice.

ManagerVT = Novi upravitelj privremenih tablica;
Zahtjev = Novi zahtjev;
Zahtjev . ManagerTemporaryTables = ManagerVT;

Zahtjev . Tekst =
„IZABIRAJ
| Valute. Šifra,
| Valute.Naziv
| Mjesto u valuti
|OD
| Imenik.Valute KAO Valute";

RequestResult = Zahtjev. Izvršiti();

Da biste koristili privremenu tablicu VTVcurrency u drugim upitima, tim upitima morate dodijeliti zajedničkog upravitelja privremene tablice—VT Manager.

Skupni zahtjev je zahtjev koji sadrži nekoliko zahtjeva odvojenih znakom “;”. Prilikom izvršavanja grupnog upita, svi upiti uključeni u njega izvršavaju se sekvencijalno, a rezultati svih privremenih tablica dostupni su svim sljedećim upitima. Eksplicitno dodjeljivanje privremenog upravitelja tablica skupnim upitima nije potrebno. Ako privremeni upravitelj tablica nije dodijeljen, tada će sve privremene tablice biti izbrisane odmah nakon izvršenja upita.

Za skupne upite dostupna je metoda ExecuteBatch(), koja izvršava sve upite i vraća niz rezultata. Privremene tablice u skupnom upitu bit će predstavljene tablicom s jednim retkom i jednim stupcem "Broj", koji pohranjuje broj zapisa. Za otklanjanje pogrešaka skupnih zahtjeva, možete koristiti metodu Izvrši seriju S MEĐU PODACIMA() : Vraća stvarni sadržaj privremenih tablica, a ne broj zapisa.

// Primjer rada s paketnim zahtjevom
Zahtjev = Novi zahtjev;
Zahtjev . Tekst =
„IZABIRAJ
| Valute.Naziv
|OD
| Imenik.Valute KAO Valute
|;
|ODABIR
| Nomenklatura.Naziv
|OD
| Imenik AS Nomenklatura";

Rezultat serije = zahtjev. Izvrši seriju();

TZValute =Rezultat paketa[ 0]. Istovariti();
TZNomenklatura = Rezultat paketa[ 1 ]. Istovariti();

// Primjer korištenja privremenih tablica u skupnom zahtjevu
Zahtjev = Novi zahtjev;
Zahtjev . Tekst =
„IZABIRAJ
| Proizvodi Link KAKO Proizvod
|MJESTO VTProizvodi
|OD
| Imenik.Nomenklatura KAKO Proizvodi
|GDJE
| Proizvodi.Proizvođač = &Proizvođač
|;
|ODABIR
| VTTProizvodi.Proizvod,
| Strukovna škola, količina.
| Strukovna škola.Cijena,
| Strukovna škola.Link AS DocumentPrimnice
|OD
| VT proizvodi AS VT proizvodi
| LIJEVI PRIKLJUČAK Dokument o prijemu robe i usluga AS
| Softver VTProducts.Product = PTU.Nomenclature"
;

Zahtjev . PostaviParametar( "Proizvođač", Proizvođač);

RequestResult = Zahtjev. Trčanje();
Uzorak = Rezultat upita. Odaberite();

Pozdrav Sample.Next() petlja

EndCycle;

Virtualni stolovi

Virtualni stolovi- to su tablice koje nisu pohranjene u bazi podataka, već ih generira platforma. U svojoj srži, to su ugniježđeni upiti prema jednoj ili više fizičkih tablica koje izvršava platforma. Virtualne tablice primaju informacije samo iz registara i uglavnom su namijenjene rješavanju usko specijaliziranih problema.

Postoje sljedeće virtualne tablice (mogući parametri navedeni su u zagradama):

  • Za informativne registre:
    • SliceFirst(<Период>, <Условие>) — najraniji zapisi za navedeni datum;
    • SliceLast(<Период>, <Условие>) — najnoviji zapisi za navedeni datum;
  • Za akumulacijske registre:
    • Ostaci (<Период>, <Условие>) — stanja na navedeni datum;
    • Revolucije (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Transakcije razdoblja;
    • OstaciIPromet(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — stanja i promet za razdoblje;
  • Za računovodstvene registre:
    • Ostaci (<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — stanja na navedeni datum po kontu, dimenzijama i podračunima;
    • Revolucije (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — promet za razdoblje u kontekstu računa, mjerenja, ispr. računi, podkonto, kor. subconto;
    • OstaciIPromet(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — stanja i promet u kontekstu računa, mjerenja i podračuna;
    • PrometDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — promet za razdoblje po kontu Dt, kontu Kt, Subconto Dt, Subconto Kt;
    • MovementsSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — pokreti zajedno s podkonto vrijednostima;
  • Za računske registre:
    • Baza(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — osnovni podaci obračunskog registra;
    • DataGraphics(<Условие>)—grafički podaci;
    • Stvarno razdoblje radnje (<Условие>) je stvarno razdoblje valjanosti.

Kada radite s virtualnim tablicama, trebali biste primijeniti odabire u parametrima virtualnih tablica, a ne u uvjetu WHERE. O tome uvelike ovisi vrijeme izvršenja upita.

Konstruktor upita

Kako bi se ubrzao unos teksta upita, platforma ima posebne alate: Konstruktor upita I Konstruktor upita s obradom rezultata. Da biste pozvali konstruktore, morate kliknuti desnom tipkom miša i odabrati željenu stavku:

Konstruktore je moguće pozvati i iz glavnog izbornika Tekst.

Koristeći alat za sastavljanje upita, programer može interaktivno konstruirati tekst upita. Da biste to učinili, mišem odaberite potrebne tablice i polja, uspostavite odnose, grupiranja, zbrojeve itd. Ovakav pristup štedi vrijeme i eliminira moguće pogreške. Kao rezultat svog rada, konstruktor upita generira tekst upita.

Konstruktor upita s obradom rezultata, osim što generira tekst upita, kreira već gotov fragment koda za primanje i obradu podataka.

Objekt RequestSchema

Platforma vam omogućuje programsku izradu i uređivanje teksta zahtjeva pomoću objekta Shema zahtjeva. Objekt ima jedno svojstvo Skupina zahtjeva, u kojem objekt pohranjuje svojstva svih upita koji se trenutno uređuju. Objekt RequestSchema podržava sljedeće metode:

  • SetQueryText(< Текст>) — popunjava svojstvo Query Packet na temelju poslanog teksta zahtjeva;
  • GetQueryText() - vraća tekst zahtjeva generiran na temelju svojstva Request Packet;
  • FindParameters() - vraća parametre zahtjeva.

Pogledajmo primjer rada s objektom RequestSchema. Za programsko generiranje teksta zahtjeva

SORTIRAJ PO
Valute.Kod

Ugrađeni jezični kod mogao bi izgledati ovako:

RequestScheme = Nova shema zahtjeva;
Paket 1 = Shema zahtjeva. Zahtjev za seriju[ 0 ];
Operater1 = Paket1. Operatori[ 0 ];
// dodavanje izvora
Tablica registara = Operator1. Izvori. Dodati( "Imenik. Valute", "Valute" );
// dodavanje polja
FieldLink = Operator1. SelectableFields. Dodaj("Valute.Veza" , 0);
FieldCode = Operator1. SelectableFields. Dodaj("Valute.Kod", 1);
// određivanje aliasa polja
Paket 1 . Stupci[ 0 ]. Alias ​​​​= "Valuta";
Paket 1 . Stupci[ 1 ]. Alias ​​​​= "Kod";
// dodavanje uvjeta
Operater1 . Izbor. Dodati( "NIJE brisanje zastavice");
// dodaj poredak
Paket 1 . Narudžba. Dodaj(šifra polja);
RequestText = Shema zahtjeva. GetQueryText();

; Ugniježđeni upiti (u razvoju).

Prijem robe i usluga I Povrat robe dobavljaču za navedeno razdoblje.

Nove kartice: Unije/pseudonimi.

Teorijski dio lekcije br.4

1C Query Builder omogućuje vam stvaranje kombinacija upita. Uz njihovu pomoć možete uzastopno ispisati podatke dobivene iz nekoliko upita bez korištenja veza. Jedini uvjet za spajanje je isti skup polja u svakom pojedinačnom zahtjevu.

U dizajneru idite na karticu Unije/pseudonimi. Dizajniran je za stvaranje spojeva upita i postavljanje aliasa za polja upita. Aliasi polja su potrebni ako niste zadovoljni standardnim nazivima polja baze podataka. Ako se polje upita sastoji samo od polja tablice baze podataka, tada za njega nije potreban alias. Ako ste prilikom stvaranja polja koristili funkcije jezika upita, tada je potreban pseudonim za takvo polje. Dizajner upita stvara standardne aliase za takva polja Polje1…PoljeN, ovi aliasi se mogu zamijeniti onima koji vama odgovaraju.

Pogledajmo dijelove kartice Unije/pseudonimi:

  • Zahtjevi(crveni okvir). Ovaj odjeljak sadrži tablicu koja prikazuje sve kombinirane upite. Pomoću izbornika koji se nalazi iznad ovog odjeljka možete dodavati nove, kopirati postojeće, brisati odabrane i mijenjati njihova mjesta. Prilikom dodavanja ili kopiranja zahtjeva, dizajner ide na karticu Tablice i polja, gdje možete navesti tablice baze podataka i potrebna polja za novi upit. Možete se prebacivati ​​između upita pomoću kartica koje će se pojaviti na desnoj strani dizajnera kako se dodaju novi 1c upiti;

  • U stolu Zahtjevi dva stupca:
    • Ime. Postavite automatski u formatu Zahtjev 1… Zahtjev N;
    • Nema duplikata. Postavite ako je potrebno izuzeti duple retke prilikom spajanja s prethodnim upitom. Vrijedno je napomenuti da će ova zastavica djelovati samo na spajanje zahtjeva u kojem je postavljena s prethodnim zahtjevom.

  • Nadimci(plavi okvir). U ovom odjeljku možete postaviti pseudonime za polja upita, kao i postaviti podudarnost polja za kombinirane upite, tako da kao rezultat upita budu u istom stupcu i prikazani pod jednim pseudonima. Ako su polja u spojenim upitima nazvana isto, tada se podudarnost između njih automatski prilagođava. Da biste konfigurirali podudaranje polja, trebate pronaći redak sa željenim aliasom u tablici, pronaći traženi upit u stupcima i odabrati polje na padajućem popisu.

Praktični dio lekcije br.4

Pogledajmo rješenje zadatka danog na početku lekcije. Da vas podsjetim na uvjete:

Zadatak: pomoću upita označite sve knjižene dokumente Prijem robe i usluga I Povrat robe dobavljaču za navedeno razdoblje.

  1. Kreirajmo novi zahtjev;
  2. Pokrenimo dizajner upita;
  3. Odaberimo stol Prijem robe i usluga iz niti Dokumentacija;
  4. Sa stola Prijem robe i usluga odaberite polje Veza;
  5. Idemo na karticu Uvjeti;
  6. U poglavlju Polja, otvorimo temu Prijem robe i usluga pomoću gumba "+";
  7. Pronađimo rekvizite datum i povucite ga u odjeljak s uvjetima, odaberite operator usporedbe Između i označiti parametre za početak i kraj razdoblja, na primjer Početak razdoblja I Kraj razdoblja;
  8. Idemo na karticu Unije/pseudonimi.
  9. Dodajte novi zahtjev, označite Nema duplikata nema potrebe za podizanjem, jer koristimo različite vrste dokumenata;

  10. 1C Query Builder će automatski otići na karticu Tablice i polja. Na desnoj strani prozora vidjet ćete da je drugi zahtjev za pridruživanje aktivan;


  11. Ponovimo točke 1 - 7 za tablicu Vraćanje robe dobavljaču;
  12. Idemo ponovno na karticu Unije/pseudonimi. U tablici aliasa možete vidjeti da polja Veza obje su tablice u istom retku, što znači da će se veze na oba dokumenta naći u istom stupcu kao rezultat upita;
  13. Promijenimo naziv stupca iz Veza na Dokument(postavite pseudonim polja). Da biste to učinili, dvaput kliknite lijevu tipku miša na naziv polja. Nakon toga možete postaviti svoje ime, napisati ga tamo Dokument;

  14. Zahtjev je spreman, kliknite gumb "OK" na dnu prozora dizajnera.

Kao rezultat, dobit ćemo zahtjev sa sljedećim tekstom.

Neka nam bude imenik Nomenklatura s detaljima: “Šifra”, “Naziv”, “Artikal”. Ovaj imenik može se predstaviti u obliku tablice s poljima istog naziva:

Nomenklatura

Svrha upita je reći bazi podataka što želimo odabrati i odakle. U ovoj fazi pretpostavit ćemo da je rezultat upita određena tablica. Recimo da nam je cilj dobiti sve pojedinosti iz imenika "Nomenklatura", tada će tekst zahtjeva imati sljedeći oblik:

Request.Text = "
|ODABIR
| Nomenklatura. Šifra,
| Naziv,
| Nomenklatura.Članak
|OD

Rezultat upita

Nekoliko pojašnjenja. U odjeljku BIRAJTE(SELECT) navodimo koja polja određenih tablica želimo vidjeti u izlazu. U poglavlju IZ(OD) kažemo s kojih tablica da ih uzmemo. Imajte na umu da ključna riječ KAKO(AS) deklariramo alias za tablicu Imenik.Nomenklatura, Možete koristiti gotovo bilo koje ime, s izuzetkom ključnih riječi i brojeva 1C 8 jezika upita. Pseudonim se također može deklarirati za polja:

Request.Text = "
|ODABIR
| Roba. Šifra AS Šifra,
| Naziv robe AS Opis,
| Roba.Članak KAKO Članak
|OD
| Imenik.Nomenklatura AS Roba"

Izlaz će biti tablica oblika:

Također možete odabrati sva polja iz tablice koristeći " * ". Važno je napomenuti da će u ovom slučaju niz standardnih detalja definiranih za objekt imenika biti dodan u polja "Šifra", "Naziv", "Članak", kao što su: "Oznaka za brisanje", "Unaprijed" , itd. Prikaži sve Standardne detalje možete navesti klikom na istoimeni gumb na kartici
Podaci bilo koju referentnu knjigu. Primjer:

Request.Text = "
|ODABIR *
|OD
| Imenik. Nomenklatura AS Nomenklatura";

Ako su polja odabrana iz jedne tablice, tada im možete pristupiti bez točke, ali nitko ne piše tako - nije čitljivo i, u pravilu, u upitu se pojavljuje više od jedne tablice. Sljedeći tekst zahtjeva bit će uspješno izvršen:

Request.Text = "
|ODABIR
| Kodirati,
| Ime,
| šifra dobavljača
|OD
| Imenik.Nomenklatura";

U principu, zahtjev ne mora imati odjeljak IZ, ali u pravilu nitko ne piše ovako:

Request.Text = "
|ODABIR
| Imenik.Nomenklatura.Šifra,
| Imenik.Nomenklatura.Naziv,
| Imenik.Nomenklatura.Članak";

Zahtjev može uključivati ​​ne samo polja infobaze, već i polja primitivnih tipova, na primjer:

Request.Text = "
|ODABIR
| Nomenklatura. Šifra,
| Naziv,
| Nomenklatura broj artikla,
//broj
| 3000 AS Maksimalni trošak,
//datum
| DATETIME(2013, 1, 1) AS Datum isporuke,
//booleov
| ISTINA KAO PLAĆENA,
//crta
| "MebelStroy" KAO PROIZVOĐAČ
|OD
| Imenik. Nomenklatura AS Nomenklatura";

Smjernice odjeljka SELECT

RAZNO- označava da kao rezultat upita želimo vidjeti samo zapise s različitim poljima koji će biti jednostavno odbačeni:

Request.Text = "
|ODABERITE RAZNO
| Nomenklatura.Naziv
|OD
| Imenik. Nomenklatura AS Nomenklatura";

Kao rezultat izvršavanja ovog upita, nećemo vidjeti ni jedno duplo ime.

PRVO - označava da želimo vidjeti samo prvih n zapisa u rezultatu upita:

Request.Text = "
|ODABERITE PRVIH 100
| Nomenklatura.Naziv
|OD
| Imenik. Nomenklatura AS Nomenklatura";

DOZVOLJENO- ograničava odabir u skladu s pravima korisnika. Preporučujem da uvijek koristite ovu ključnu riječ, nikad ne znate kada želite dodijeliti prava korisnicima.

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.Korespondentski račun
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 biramo samo podatke koji zadovoljavaju uvjet iz “WHERE” “Data Selection Condition” Zatim grupiramo zahtjev prema polju “Field Name1”, dok zbrajamo “Field Name2”. “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.Naziv

Zahtjev će primiti prvih 100 unosa direktorija "Banke", poredanih abecednim redom.

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
Poveznica na 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 razlika je 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, npr. “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 (Tablica troškova. Subconto1 AS Imenik. Stavke troškova).

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 Remaining Products 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 i tako dalje. Za ovo se koristi konstrukcija "Value()".

Primjer upotrebe:

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

WHERE Ugovorne 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 ispuniti 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 Counterparties 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čajne liste Najnoviji presjek Valuta AS Valuta,
Tečajne liste 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
Nomenklatura prodaje roba i usluga,
SUM(Prodaja RobeUslugeRobe.Količina) AS Količina,
SUM(Prodaja RobaUslugaRoba.Iznos) AS Iznos
IZ

GRUPIRAJ PO
Prodaja roba i usluga Nomenklatura robe

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
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 Nomenklatura AS Nomenklatura,
Prodaja robe i usluga Roba Link AS Dokument,
Prodaja roba i usluga 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
SORTIRAJ PO
Prodaja robe i usluga 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 platforme 1C ne jamče da će se retci ispisivati ​​u istom nizu prilikom izvršavanja istih 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 i promet nomenklature,.
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProizvodiUSkladištimaOstaciIPromet.KoličinaPromet,
Roba U Skladištima Ostaci I Promet. Količina Ulaz,
Proizvodi U Skladištima Ostaci I Promet. Količina Potroš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 – 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 robe u skladištima i prometa (& Početak razdoblja, & Kraj razdoblja, 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. “Dodajte” iznos iz tablice kretanja iznosu 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 korištenje 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 svojstvo.

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 upita 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 je naznačena 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 rastuće (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 - željena forma 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 stanja (
,
Organizacija = &Organizacija
I Pojedinac = &Individualno) KAKO Međusobna obračuna sa sudionicima organizacija Stanja

POGREŠNO:

BIRAJTE
Međusobna poravnanja sa sudionicima Organizacija Stanje iznosa
IZ
Registar akumulacija. Međusobni obračuni sa sudionicima organizacija (,) KAKO Međusobni obračuni sa sudionicima organizacija
GDJE
Međusobna poravnanja sa sudionicima Organizacija Salda = & Organizacija
I Međusobni obračuni sa sudionicima organizacija Individualno = &Individualno

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(ProductsOrg.Registrar AS Document.Sale of GoodsServices).Date
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.GoodsOrganizations AS GoodsOrganization

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 dobara organizacija AS Roba organizacija

Podupiti u uvjetima spajanja

Za optimizaciju je neprihvatljivo koristiti podupite 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 o robi i uslugama
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, 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 morate 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!

 

Moglo bi biti korisno pročitati: