1c zahtijeva odabir dizajna kada. Podupiti u uvjetima spajanja

Možete primijeniti različite funkcije na polja upita. U ovom odjeljku razmotrit ću najčešće korištene (ja osobno) od njih.

DATUM VRIJEME- specificira konstantno polje s tipom Datum. Sintaksa:

DATUM VRIJEME(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Zahtjev.Tekst =
„IZABIRAJ
| DATETIME(2013, 1, 1) KAO OMG";//1. siječnja 2013.

DATUM RAZLIKE- vraća razliku između 2 datuma u navedenoj dimenziji (godina, mjesec, dan, sat, minuta, sekunda). Sintaksa:

DAFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)
Zahtjev.Tekst =
„IZABIRAJ
| DATUMSKA RAZLIKA(DATUMVRIJEME(2013, 2, 28), DATUMVRIJEME(2013, 1, 1), DAN)
| KAO DANI DO KRAJA ZIME";

ZNAČENJE- određuje konstantno polje s unaprijed definiranim zapisom jedne od tablica baze podataka; Sintaksa:

ZNAČENJE(<Имя>)
Zahtjev.Tekst =
„IZABIRAJ
//predefinirani element imenika
| VRIJEDNOST(Imenik.Valute.Rublji) AS Rublja,
//prazna poveznica na dokument
| VRIJEDNOST(Dokument.Faktura za plaćanje kupcu.Prazna veza) AS EmptyFaktura,
//vrijednost nabrajanja
| VALUE(Enumeration.GenderIndividuals.Male) AS Male,
//predefinirani konto iz kontnog plana
| VRIJEDNOST(Kontni plan. Samoodrživi. Roba) AS Račun_41";

IZBOR- analog IF konstrukcije za jezik upita 1C. Sintaksa:

IZBOR
KADA<Выражение>ZATIM<Выражение>
INAČE<Выражение>
KRAJ
Zahtjev.Tekst =
„IZABIRAJ
//ako je cijena manja od 100, zahtjev će svejedno vratiti 100
//u suprotnom zahtjev će vratiti stvarnu cijenu
| IZBOR
| WHEN Proizvodi. Cijena > 100
| ONDA Proizvodi.Cijena
| INAČE 100
| KRAJ KAO CIJENA
|OD

VEZA<Имя таблицы>
Zahtjev.Tekst =
„IZABIRAJ
//ako je tip vrijednosti zapisivača potvrda dokumenta,
//tada će zahtjev vratiti "Primitak robe", inače "Prodaja robe"
| IZBOR
| KADA Stanja.Matičar LINK Dokument.Potvrda
| ONDA ""Primitak robe""
| ELSE ""Prodaja robe""
| KRAJ KAO POGLED POKRETA
|OD
| Registar akumulacije stanja AS stanja";

IZMEĐU- provjerava vrijednost za uključivanje u raspon. Sintaksa:

IZMEĐU<Выражение>I<Выражение>
Zahtjev.Tekst =
//dobite sve proizvode u rasponu cijena od 100 do 1000
„IZABIRAJ
| Proizvodi.Proizvod
|OD
|GDJE
| Proizvodi.Cijena IZMEĐU 100 I 1000";

U I U HIJERARHIJI- provjeriti prisutnost vrijednosti u popisu prenesenih podataka. HIJERARHIJA će također proširiti hijerarhijske elemente prema dolje i tražiti vrijednost među podređenim elementima. Sintaksa:

U(<СписокЗначений>), U HIJERARHIJI (<СписокЗначений>)
Zahtjev.Tekst =
//dobiti sve podkonte 41. i 10. konta
„IZABIRAJ
| Samostalni. Povežite AS račun
|OD
| Kontni plan Samoodrživi AS Samoodrživi
|GDJE
| Samostalni. Referenca U HIJERARIJI (VRIJEDNOST (Kontni plan. Samofinanciranje. Roba),
| VRIJEDNOST(Kontni plan. Troškovno računovodstvo. Materijali))";

KAO- omogućuje vam da usporedite niz s uzorkom, koji se koristi kada niz za pretraživanje nije strogo definiran. Izrada predloška:

  • % (postotak): niz koji sadrži bilo koji broj proizvoljnih znakova
  • _ (podvlaka): jedan proizvoljan znak
  • [...] (jedan ili više znakova u uglatim zagradama): svaki pojedinačni znak naveden unutar uglatih zagrada. Nabrajanje može specificirati raspone, na primjer a-z, što znači proizvoljni znak uključen u raspon, uključujući krajeve raspona
  • [^...] (u uglatim zagradama znak negacije iza kojeg slijedi jedan ili više znakova): svaki pojedinačni znak osim onih navedenih nakon znaka negacije

Sintaksa:

KAO "<ТекстШаблона>"
Zahtjev.Tekst =
//pronađi sve stolice u imeniku nomenklature
„IZABIRAJ
| Proizvodi.Proizvod
|OD
| Imenik.Proizvodi AS Proizvodi
|GDJE
| Proizvodi.Naziv SLIČAN kao ""alat%""";
//ovaj zahtjev će vratiti Stolicu, stolicu, visoku stolicu, uredsku stolicu itd.,
//ali tablica neće biti na ovom popisu

NIJE NULL- ako polje nije definirano, tada ga definira u navedenom izrazu. Sintaksa:

ISNULL(<Выражение>, <Выражение>)
Zahtjev.Tekst =
//Ako polje nije definirano (NULL)? zatim mu dodijelite praznu vezu
„IZABIRAJ
| ISNULL(Proizvodi.Veza, VRIJEDNOST(Imenik.Proizvodi.Prazna veza)) AS Proizvod
|OD
| Imenik.Proizvodi AS Proizvodi";

Napominjem da se NULL mora obraditi, jer ovo je vrlo "hirovit" tip (u sustavu 1C:Enterprise 8 definiran je poseban tip NULL s jednim elementom). Ako pokušate usporediti s vrijednošću ove vrste ili je dodijeliti, sigurno ćete naići na pogrešku, stoga ne zaboravite na ovu konstrukciju. Kada se može pojaviti NULL:

  • nakon spajanja tablica, osim internih (vidi sljedeći članak o spajanjima);
  • nakon odabira detalja definiranih samo za grupe imenika i obrnuto;
  • nakon odabira stupca dnevnika dokumenta, dok trenutni dokument nema pojedinosti uključene u ovaj stupac.

Ovo je daleko od toga puni popis funkcije jezika upita 1C 8, ako ste zainteresirani za bilo koji drugi rad, napišite u komentarima.

Pažnja! Ovo je uvodna verzija lekcije, čiji materijali mogu biti nepotpuni.

Prijavite se na stranicu kao student

Prijavite se kao učenik za pristup školskim materijalima

Jezik upita 1C 8.3 za programere početnike: uvjetni operator

Uvjetna izjava u upitu

Napišimo upit koji dobiva nazive i sadržaj kalorija u hrani:

Dodajmo sad rezultatu upita stupac u kojem ćemo prikazati sadržaj masti u hrani prema sljedećim pravilima:

  • ako je sadržaj kalorija manji od 100, tada je sadržaj masti nizak;
  • ako je sadržaj kalorija od 100 do 200, tada je sadržaj masti normalan;
  • ako je sadržaj kalorija veći od 200, tada je sadržaj masti visok.

Kako se to može postići, jer u tablici Imenik.Hrana bez stupca Sadržaj masti?

Ispostavilo se da možemo sami dodati ovaj stupac koristeći uvjetni operator unutar upita:

Pogledajmo pobliže tekst zahtjeva:

U odjeljku BIRAJTE Navedena su polja za odabir: Ime, Sadržaj kalorija, a zatim umjesto trećeg polja postoji konstrukcija uvjetnog operatora čiji rezultat pada u treći stupac.

Uvjeti operatera obrađeni sekvencijalno. Ako se jedan od njih pokaže točnim, tada se odgovarajuća vrijednost vraća kao rezultat. Ako niti jedan od uvjeta nije ispunjen, vraća se vrijednost iz odjeljka INAČE.

Stoga će novi upit vratiti tablicu poput ove:

Povlačenje

Imajte na umu da se poziva treći stupac u tablici koji je vratio upit Polje1. Sustav je automatski generirao ovo ime jer treći stupac ne odgovara niti jednom stvarnom polju u tablici Imenik.Hrana, odakle se moglo dobiti ovo ime.

Ali u našoj je moći dati joj to ime. Da biste to učinili, odmah nakon opisa polja morate napisati ključnu riječ KAKO, a zatim navedite sam naziv, odvojen razmakom. Čitate probnu verziju lekcije, dostupne su cijele lekcije. Ovo ime će se zvati pseudonim polja.

Aliasi se mogu dodijeliti bilo kojim poljima, uključujući ona koja već imaju naziv. Napravimo nadimak Hrana za polje Ime:

Primjer korištenja funkcije PODNIZ:

SELECT Name, SELECT WHEN SUBSTRING(Name, 1, 3) = "Ban" THEN "Ovo je banana" WHEN SUBSTRING(Name, 1, 2) = "Chi" THEN "Ovo je čips" ELSE "Something else" END FROM Referenca . Hrana

Složeniji rezultati uvjetne naredbe

Rezultat uvjetnog operatora može biti ne samo niz, već i broj, datum, booleov ili referentni tip. To može biti ili konstanta gore navedenih vrsta ili polje tablice. Čitate probnu verziju lekcije, dostupne su cijele lekcije.

dovest ću te opći primjer, demonstrirajući sve navedene opcije:

Riješite test

Započni test

1. Obrađuju se uvjeti operatora selekcije (kako se još naziva).

2. Uvjetni operator se uvijek vraća

3. Ako niti jedan od uvjeta nije ispunjen, operator odabira će vratiti vrijednost

4. Odjeljak ELSE u uvjetnoj izjavi

5. U uvjetima odabira može se koristiti izjava

NULL nije ništa drugo nego odsutnost vrijednosti. Mnogi ga ljudi brkaju s vrijednošću "0" broja tipa, praznom referencom na objekt ili praznim nizom. Zbog ovog pogrešnog shvaćanja nastaju mnoge pogreške.

Vrijednost NULL pojavit će se ako se zahtjev odnosi na nepostojeće polje, svojstvo ili neispravnu vezu.

Temeljeno na SQL-u, koji ne dopušta provjeru NULL vrijednost uobičajena jednakost. Ispod su dva načina za provjeru NULL-a u 1C 8.3.

Funkcija jezika upita 1C 8.3 ISNULL() ima dva ulazna parametra:

  • izraz koji se ispituje;
  • zamjenski izraz.

Ako je vrijednost koja se testira NULL, tada će ova funkcija vratiti vrijednost zamjenskog izraza. Ako vrijednost nije NULL, izraz koji se testira bit će vraćen.

Ispod je primjer. Odabire sve stavke tabelarnog dijela proizvoda iz dokumenta “Primka robe i usluga”. Korištenjem lijevog spoja, svakom artiklu se dodjeljuje zadnja cijena iz registra informacija "Cijene artikala".

U tom slučaju može doći do situacije da za neku poziciju jednostavno nema cijene u registru. U ovom slučaju funkcija ISNULL vratit će nam uobičajenu nulu. Ako ga ne koristite, kada pokušate izvesti aritmetičke operacije na polju "Cijena" s vrijednošću NULL, dobit ćemo pogrešku.

BIRAJTE

ISNULL(Cijene.Cijena, 0) KAO Trenutnacijena
IZ



GDJE

POSTOJI NULL u naredbi SELECT

Ekvivalent ISNULL() je ISNULL, koji se koristi u naredbi SELECT i provjerava je li vrijednost NULL. "IS" u ovom slučaju podrazumijeva jednakost, a upit u prethodnom primjeru bi izgledao ovako:

BIRAJTE
Proizvodi. Nomenklatura AS Proizvod,
IZBOR
KADA je cijena NULL
ONDA 0
INAČE Cijene.Cijena
END AS CurrentPrice
IZ
Dokument. Prijem robe i usluga kao robe
LIJEVA KONEKCIJA RegisterInformation.PricesNomenclature.SliceLast AS Cijene
Softverski proizvodi.Nomenklatura = Cijene.Nomenklatura
GDJE
Products.Link = &LinkToDocument

Razlike između funkcije ISNULL() i IS NULL

Kao što možete vidjeti iz prethodnih primjera, u oba slučaja zahtjev vraća iste podatke. Funkcija ISNULL() skraćena je verzija SELECTION WHEN... IS NULL... END, ali je ipak poželjnija iz sljedećih razloga:

  1. Funkcija ISNULL() optimizira upit. Čita se jednom, tako da će se kod provjere složenog izraza zahtjev brže obraditi.
  2. Funkcija ISNULL() skraćuje konstrukciju, čineći upit čitljivijim.
  3. Prilikom izvršavanja funkcije ISNULL(), zamjenski izraz reducira se na tip izraza koji se testira za tipove nizova (duljina niza) i numeričke tipove (dubina bita).

U ovom članku želimo s vama razgovarati o svemu 1C funkcije upitnog jezika, i konstrukcije upitnog jezika. Koja je razlika između funkcije i dizajna? Funkcija se poziva sa zagradama i mogućim parametrima u njima, a konstrukcija se piše bez zagrada. nedvojbeno sve strukture i funkcije 1C upitnog jezika učiniti proces prikupljanja podataka fleksibilnim i multifunkcionalnim. Ove funkcije i konstrukcije primjenjuju se na polja zahtjeva, a neke se također primjenjuju na uvjete.

1C funkcije jezika upita

Jer jasan opis 1c funkcije upitnog jezika mnogo rjeđi od opisa struktura, odlučili smo početi promatrati funkcije. Sada pogledajmo svaki zasebno, opisujući njegovu svrhu, sintaksu i primjer korištenja, dakle:

1. Funkcija DATUM VRIJEME - ovu funkciju kreira konstantno polje tipa "Datum".

Sintaksa: DATUM VRIJEME(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Primjer upotrebe:

2. Funkcija DATUM DIFFERENCE- vraća razliku između dva datuma u jednoj od dimenzija (godina, mjesec, dan, sat, minuta, sekunda). Mjerenje se prenosi kao parametar.

Sintaksa: DAFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Primjer upotrebe:

Query.Text = "ODABIR | RAZLIKADATUM(DATUMVRIJEME(2015, 4, 17), DATUMVRIJEME(2015, 2, 1), DAN) | AS Kol.Dana";

3. Funkcija VRIJEDNOST- postavlja konstantno polje s unaprijed definiranim zapisom iz baze podataka;

Sintaksa: VALUE(<Имя>)

Primjer upotrebe:

Request.Text = "SELECT //predefinirani element | VALUE(Directory.Currencies.Dollar) AS Dollar, //prazna veza | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //prijenos vrijednosti | VALUE(Transfer . Pravna osoba. Fizička osoba, //predefinirani račun VRIJEDNOST (Kontni plan. Samoobračunski materijali) AS Račun_10" ;

4. SELECT funkcija- pred nama je analog konstrukcije IF, koja se koristi u kodu, samo se ova koristi u 1C upitima.

Sintaksa: IZBOR KADA<Выражение>ZATIM<Выражение>INAČE<Выражение>KRAJ

Primjer upotrebe:

Request.Text = //ako je iznos veći od 7500, tada bi trebao postojati popust od 300 rubalja, //dakle, ako je uvjet pokrenut tada funkcija //vraća Zbroj - 300 //inače će zahtjev vratiti samo Zbroj "ODABERI | ODABERI | KADA TCReceipts.Amount > 7500 | THEN TCreceipts.Amount - 300 | ALSE TCreceipts.Amount | END AS AmountWithDiscount | FROM |

5. EXPRESS funkcija- omogućuje vam izražavanje konstantnog polja s određenim tipom.

Sintaksa: EXPRESS(Naziv polja AS Naziv tipa)

Primjer upotrebe:

Query.Text = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) |. END AS Number |. Akumulacijski registar AS Purchases";

Postoji li druga opcija za korištenje funkcije EXPRESS u poljima mješovitih tipova, gdje se pojavljuju? Najjednostavniji primjer je "Matičar" za bilo koji registar. Pa zašto bismo možda morali kvalificirati vrstu u registru? Razmotrimo situaciju kada iz matičara odaberemo polje "Broj", iz koje tablice će se odabrati broj? Točan odgovor od svih! Stoga, da bi naš upit radio brzo, trebali bismo navesti eksplicitni tip pomoću funkcije EXPRESS

Primjer upotrebe:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. ISNULL funkcija(alternativni način pisanja ISNULL) - ako je polje tipa NULL, tada se zamjenjuje drugim parametrom funkcije.

Sintaksa: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Primjer upotrebe:

Također imajte na umu da je preporučljivo UVIJEK zamijeniti NULL tip nekom vrijednošću, jer usporedba s tipom NULL uvijek vraća FALSE čak i ako usporedite NULL s NULL. Najčešće se NULL vrijednosti formiraju kao rezultat spajanja tablica (sve vrste spajanja osim internih).

Query.Text = //Odaberite cijelu stavku i njena stanja //ako u nekoj stavci nema stanja, tada će postojati polje //NULL koje će biti zamijenjeno vrijednošću 0 "SELECT | Br. Link, | ISNULL (ProductsInStockRemaining, 0) AS Directory.Nomenclature AS No. |. RegisterAccumulations.GoodsInWarehousesRemainings | PO (GoodsInWarehousesRemainings = No.Link)";

7. REPREZENTACIJA funkcija- omogućuje vam da dobijete prikaz polja zahtjeva.

Sintaksa: IZVOĐENJE(<НаименованиеПоля>)

Primjer upotrebe:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Registar akumulacije.FreeRemaining.Remaining AS FreeRemainingRemaining ";

Konstrukcije u upitnom jeziku 1C

Razgovarali smo s vama gore 1C funkcije upitnog jezika, sada je vrijeme za razmatranje konstrukcije u 1C upitnom jeziku, nisu manje važni i korisni, počnimo.

1. Izgradnja LINK- je logički operator za provjeru referentnog tipa. Najčešće se susreće prilikom provjere polja složenog tipa u odnosu na određeni tip. Sintaksa: VEZA<Имя таблицы>

Primjer upotrebe:

Request.Text = //ako je tip vrijednosti zapisivača dokument Primitak, //tada će upit vratiti "Primitak robe", inače "Prodaja robe" "SELECT | SELECT | WHEN Remainings.Registrar LINK Document.Recipt of Goods and Usluge |. "Potrošnja" |. OD Preostalih proizvoda u skladištima ;

2. Dizajn IZMEĐU- ovaj operator provjerava je li vrijednost unutar navedenog raspona.

Sintaksa: IZMEĐU<Выражение>I<Выражение>

Primjer upotrebe:

Request.Text = //dobijte cijelu nomenklaturu čiji je kod u rasponu od 1 do 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konstrukcija B i B HIJERARHIJA- provjeriti nalazi li se vrijednost u prenesenoj listi (nizovi, tablice vrijednosti i sl. mogu se prenijeti kao lista). Operator IN HIERARCHY omogućuje pregled hijerarhije (primjer korištenja Kontnog plana).

Sintaksa: U(<СписокЗначений>), U HIJERARHIJI (<СписокЗначений>)

Primjer upotrebe:

Request.Text = //odaberite sve podračune računa "SELECT | Samoodrživi. Povežite AS Račun | FROM | Kontni plan. Samoodrživi AS Samoodrživi | GDJE | Samoodrživi. Veza U HIJERARHIJI VRIJEDNOST (Tabela Računi. Samostalna roba)";

4. Dizajn SLIČAN- Ova nam funkcija omogućuje usporedbu niza s uzorkom niza.

Sintaksa: KAO "<ТекстШаблона>"

Opcije uzorka reda:

% - niz koji sadrži bilo koji broj proizvoljnih znakova.

Jedan proizvoljan znak.

[...] - bilo koji pojedinačni znak ili niz znakova navedenih unutar uglatih zagrada. Nabrajanje može specificirati raspone, na primjer a-z, što znači proizvoljni znak uključen u raspon, uključujući krajeve raspona.

[^...] - bilo koji pojedinačni znak ili niz znakova navedenih unutar uglatih zagrada osim onih navedenih nakon znaka negacije.

Primjer upotrebe:

Query.Text = //pronađi cijelu nomenklaturu koja sadrži korijen TABUR i počinje //malim slovom ili velika slova t "SELECT | Nomenklatura. Link | FROM | Imenik. Nomenklatura KAO Nomenklatura | WHERE | Proizvodi. Naziv LIKE "" [Tt]abur%""" ;

5. Dizajn DOZVOLJEN- ovaj operator omogućuje odabir samo onih zapisa iz baze podataka za koje pozivatelj ima dopuštenje za čitanje. Ta su prava konfigurirana na razini zapisa (RLS).

Sintaksa: ALLOWED se piše iza ključne riječi SELECT

Primjer upotrebe:

Request.Text = "ODABIR DOZVOLJENO | Protustrane. Veza | IZ | Imenik. Protustrane KAO Protustrane";

6. Dizajn VARIOUS- omogućuje odabir zapisa u kojima nema dvostrukih zapisa.

Sintaksa: VARIOUS se piše iza ključne riječi SELECT

Primjer upotrebe:

Request.Text = //odabire zapise na koje čitatelj ima prava "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Također, konstrukcija VARIOUS može se koristiti s operatorom ALLOWED i drugim operatorima.

Primjer upotrebe:

Request.Text = //odabire različite zapise na koje čitatelj ima prava "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Dizajn PRVI- odabire broj zapisa navedenih u parametru iz rezultata upita.

Sintaksa: FIRST<число>

Primjer upotrebe:

Request.Text = //odaberite prva 4 CCD broja iz direktorija "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Dizajn ZA PROMJENE- omogućuje vam zaključavanje tablice, radi samo u transakcijama (relevantno samo za automatska zaključavanja).

Sintaksa: ZA PROMJENU<НаименованиеТаблицы>

Primjer upotrebe:

Query.Text = "SELECT | Besplatni preostali ostaci. Nomenklatura, | Besplatni preostali ostaci. Skladište, | Besplatni preostali ostaci. Na zalihama preostali | OD | Registar akumulacija. Besplatni ostaci. Ostaci KAO besplatni preostali ostaci | ZA PROMJENU | Registar akumulacija . Besplatni ostaci";

9. Dizajn ORDER BY- organizira podatke po određenom polju. Ako je polje poveznica, tada prilikom postavljanja zastavice AUTO NARUDŽBA Razvrstavanje će se dogoditi prema prikazu veze; ako je zastavica isključena, tada se veze poredaju prema seniornosti adrese veze u memoriji.

Sintaksa: SORTIRAJ PO<НаименованиеПоля>AUTO NARUDŽBA

Primjer upotrebe:

Query.Text = "SELECT | Besplatni Preostali Preostali. Nomenklatura KAO Nomenklatura, | Besplatni Preostali Preostali. Skladište KAO Skladište, | Besplatni Preostali Preostali. Na skladištu Preostali | OD | Registrirajte akumulacije. Besplatni Preostali. Preostali KAO Besplatni Preostali Preostali | | NARUČI PO |. Nomenklatura |. AUTOMATSKO ČITANJE NAREDBE";

10. Dizajn GROUP BY- koristi se za grupiranje nizova upita prema određenim poljima. Numerička polja moraju se koristiti s bilo kojom agregatnom funkcijom.

Sintaksa: GRUPIRAJ PO<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Primjer upotrebe:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS STOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GROUP BY | ProductsInWarehouses.Nomenclature, | treasures.Warehouse ";

11. Dizajn HAVING- omogućuje primjenu agregatne funkcije na uvjet odabira podataka, slično konstrukciji WHERE.

Sintaksa: IMAJUĆI<агрегатная функция с условием>

Primjer upotrebe:

Query.Text = //odabire grupirane zapise gdje je polje InStock veće od 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GROUP BY |. ProductsInWarehouses.Warehouse |. DOSTUPNO |. (ProductsInWarehouses.In Stock) > 3" ;

12. Izgradnja INDEX BY- koristi se za indeksiranje polja upita. Upit s indeksiranjem traje duže da se izvrši, ali ubrzava pretraživanje kroz indeksirana polja. Može se koristiti samo u virtualnim tablicama.

Sintaksa: INDEX BY<Поле1, ... , ПолеN>

Primjer upotrebe:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Dizajn WHERE- omogućuje vam postavljanje uvjeta na bilo koje polje odabira. Rezultat će uključivati ​​samo zapise koji zadovoljavaju uvjet.

Sintaksa: GDJE<Условие1 ОператорЛогСоединения УсловиеN>

Primjer upotrebe:

Query.Text = //odabrani su svi zapisi s CompensationRemaining<>0 i //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Register of Accumulation.CompensationRP.Remains AS Compens ationRPORemains |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | I CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. REZULTATI dizajna... OPĆENITO- koristi se za izračun ukupnih iznosa; navodi polja po kojima će se izračunavati ukupni iznosi i agregatne funkcije primijenjene na polja ukupnog iznosa. Kada koristite ukupne vrijednosti za svako polje nakon konstrukcije TOTAL, podaci se grupiraju. Postoji izborna konstrukcija GENERAL; njezina upotreba također omogućuje dodatno grupiranje. U nastavku ćete vidjeti primjer rezultata zahtjeva.

Sintaksa: REZULTATI<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>PO<ОБЩИЕ> <Поле1, ... , ПолеN>

Primjer upotrebe:

Request.Text = "SELECT | Izračuni. Ugovor druge ugovorne strane. Vrsta ugovora KAO Vrsta ugovora, | Izračuni. Ugovor druge ugovorne strane KAO Ugovor, | Izračuni. Druga ugovorna strana, | Izračuni. Iznos salda uzajamne namire KAO salda | OD | Registar akumulacija. Uzajamni Namirenje SA drugim ugovornim stranama. Izračuni UKUPNO |. IZNOS |OPĆENITO, |Vrsta ugovora";

Na slici su prikazane grupacije koje su formirane tijekom izvršenja zahtjeva, gornja se odnosi na odjeljak GENERAL, a druga na polje Counterparty AgreementAgreement Type.

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 je najjednostavniji i učinkovita metoda dobivanje 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, 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 mogu se usporediti 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 Registar Akumulacije.ProizvodiU Skladiš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 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 puna tema, koji 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 isti naziv.

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(Sales of GoodsServicesGoods.Quantity) 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 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 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 Roba
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 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. Virtualni stol – brz način dobivanje podataka 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 1C platforma uzima 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,
Roba U Skladištima OstaciIPromet.KoličinaPotrošnja,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
IZ
Registar Akumulacije.RobaUSkladištima.OstaciIPromet KAO RobaUSkladištimaOstaciIPromet

Ovaj zahtjev vam omogućuje da brzo dobijete veliki broj podaci.

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 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. Iznosu iz tablice kretanja “dodajemo” iznos iz tablice ukupnih iznosa.


Takav jednostavnih koraka 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 izradu 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 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). Desna strana označava korespondenciju polja u različite tablice, ako nije navedeno podudaranje, 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 jednostavna i prikladan način za otklanjanje pogrešaka složenih upita 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 poravnanja 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, 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 produljenog 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!