1c zastupanje u zahtjevu. Značajke rada s poljem View i funkcijom View() upitnog jezika

U ovom ćemo članku ispitati temu ugniježđenih tablica u jeziku upita 1C.

Možete koristiti ugniježđenu izvornu tablicu upita u poljima za odabir upita. Na primjer, dokument “Pružanje usluga” ima tabelarični dio Usluge, pa se i taj tabelarični dio može prikazati u polju za odabir. Sada ćete vidjeti kako se to može implementirati.

U svojoj bazi podataka za obuku pokrenut ću konzolu upita, otvoriti dizajner upita i odabrati tablicu "Pružanje usluga".

Proširimo ovu tablicu

I u njemu vidimo tablični dio "Usluge".

Odaberimo cijeli ovaj dio tablice.

Kao što vidite, cijeli tablični dio usluge je u potpunosti otišao u polja.

Imajte na umu da tabularni dio, zapravo, dolazi kao zasebno polje pod nazivom “Services” i čiji će tip biti “Request Result”. Naučimo kako koristiti ugniježđenu tablicu u upitu.

Ostavimo tri polja ugniježđene tablice i dodamo neka polja iz zaglavlja dokumenta.

Kliknimo OK u dizajneru i vidimo kako će izgledati naš zahtjev.

Kao što vidite, u zahtjevu postoji točka iza polja "Usluge", a odabrana polja navedena su u zagradama iza nje.

Ispunimo zahtjev.

Na slici vidimo da su u polju „Usluge“ navedena sva odabrana polja u tabelarnom dijelu dokumenta odvojena zarezima. Nemaju sve konzole za upite zaslon poput onog na gornjoj slici; ponekad može samo pisati “ “.

Još jedna zanimljiva točka: u ugniježđenoj tablici možete staviti zvjezdicu umjesto polja, tada će se pojaviti sva polja tabelarnog dijela. To se ne može učiniti u konstruktoru, samo ručno u zahtjevu. Zahtjev će imati sljedeći oblik:

Da vidimo kako će se takav zahtjev izvršiti.

Jedino što ova zvjezdica neće biti spremljena ako otvorimo konstruktor upita.

Naučili smo kako napraviti upit s ugniježđenom tablicom u konzoli, sada ćemo naučiti kako koristiti ugniježđenu tablicu u odabiru

U stvarnosti nije tako teško pristupiti ugniježđenoj tablici prilikom obrade upita. Jednostavno pristupite odabiru prema nazivu svoje tablice i dobijete varijablu tipa "Rezultat upita". I onda to obrađujete kao uobičajeni rezultat zahtjeva: ako želite, uzmite uzorak, ako želite, izvršite prijenos.

Ispod je mali primjer koda koji radi s ugniježđenom tablicom:


&Na poslužitelju
Procedura FillOnServer()
Zahtjev = Novi zahtjev;
Zahtjev. Tekst = „IZABIRAJ
| Prodaja proizvoda. Link,
| Prodaja proizvoda.Proizvodi.(
| Proizvod,
| Količina
|OD
| Dokument. Prodaja proizvoda KAKO PRODAVATI PROIZVODE"
;
Fetch = Upit. Trčanje(). Odaberite();
Zbogom selekciji. Next() petlja
TopLine of the Tree = Prodaja proizvoda. GetItems();
NoviRed = GornjeRedTree. Dodati();
Nova linija. Veza = Odabir. Veza;
TableProducts = Izbor. Roba;
SelectionProducts = TableProducts. Odaberite();
Dok odabir proizvoda. Next() petlja
TreeChildRow = Novi red. GetItems();
ProductRow = ChildTreeRow. Dodati();
ProductString. Link = Izbor proizvoda. Proizvod;
ProductString. Količina = uzorci. Količina ;
EndCycle;
EndCycle;
Kraj postupka

Dopustite mi da objasnim gornji kôd.

Prije svega, dobili smo linearnu selekciju, a kroz ovu selekciju prolazimo u petlji, u kojoj kreiramo gornji red stabla vrijednosti (nalazi se na obrascu) i u njega upišemo vezu na naš dokument.

I onda najzanimljivija stvar, možete je čak i sami pogledati kasnije u programu za ispravljanje pogrešaka, okrećemo se polju za odabir proizvoda i radi praktičnosti upišite ovo polje u zasebnu varijablu u tabliciProizvodi. Ova varijabla je tipa "Rezultat upita". I lako možete dobiti uzorak ovog rezultata. To je ono što mi radimo. Ostaje zaobići ovaj odabir korištenjem next funkcije i while petlje.

A unutar ove petlje nazivat ćemo polja odabira kao polja ugniježđene tablice i pisati ih u retke djece stabla iz obrasca.

Ovo je rezultat koji će ovaj kod vratiti

Još uvijek imate pitanja?

Na njih ćete sami odgovoriti kada proučite moj tečaj "Upiti u 1C za početnike". Gdje se pobliže raspravlja o ovim i mnogim drugim pitanjima. Sve informacije dane su u jednostavnom i pristupačnom obliku i razumljive su čak i onima koji nisu osobito upoznati s programiranjem u 1C.

Promo kod za 20% popusta: hrW0rl9Nnx

Podržite moj projekt donacijom bilo kojeg iznosa

Pridružite se mojim grupama.

26.10.2016

Predstavljanje objekata (linkovi) u 1C

Najprije definirajmo koje se vrste objekata metapodataka mogu konfigurirati za pregled.

Kao što možete vidjeti na snimci zaslona, ​​rukovatelj dobivanjem pogleda dostupan je za:

  • Imenici
  • Dokumenti
  • Karakteristični tipski planovi
  • Kontni planovi
  • Vanjski izvori podataka
  • Planovi razmjene
  • Poslovni procesi
  • Zadaci
Sada, koristeći referentne knjige kao primjer, pogledajmo rad mehanizma. Kreirajmo direktorij s jednostavnom strukturom: 2 atributa niza i atribut tipa reference (za provjeru rezultata)


Zatim ćemo stvoriti nekoliko elemenata u imeniku, s različitim vrijednostima detalja niza, au jednom ćemo naznačiti vezu za provjeru


Kao što vidite sada je prikazan standardni prikaz elemenata (vrijednost standardnog atributa "Ime"). Otvorimo modul upravitelja našeg imenika i dodajmo mu sljedeći kod: Procedura Primanje obrade prezentacije (Podaci, Prezentacija, Standardna obrada) Standardna obrada = False; Pogled = "(" + Data.Attribute1 + ", " + Data.Attribute2 + ") " + Data.Name; EndProcedureProcedureProcessingGettingRepresentationFields(Fields, StandardProcessing) StandardProcessing = False; Fields.Add("Props1"); Fields.Add("Props2"); Fields.Add("Ime"); Kraj postupka Spremite i primijenite konfiguraciju. Pokretanje "1C:Enterprise"


Sada je prezentacija elemenata promijenjena, kao što smo napisali u modulu upravitelja (prvo vrijednosti dva detalja, a zatim naziv).
Otvorimo pomoćnika za sintaksu 1C i vidimo koje smo postupke koristili: Sintaksa: ProcessingGettingViewFields(<Поля>, <СтандартнаяОбработка>) Opis: Poziva se prilikom primanja sastava polja iz kojih se oblikuje prikaz objekta ili veze. Bilješka: Rezultat obrade događaja pohranjuje se u predmemoriju za sesiju. Sintaksa: ProcessingReceiveView(<Данные>, <Представление>, <СтандартнаяОбработка>) Opis: Poziva se kada se dohvati prikaz objekta ili reference. Drugim riječima, prvo smo dobili sastav polja koji nam je potreban pri generiranju prikaza, a zatim smo naznačili prikaz kojeg formata trebamo dobiti.

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- ova funkcija stvara konstantno polje s tipom "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 = "SELECT | DIFFERENCEDATE(DATUMTIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funkcija VRIJEDNOST- postavlja konstantno polje s unaprijed definiranim zapisom iz baze podataka; također možete dobiti praznu vezu bilo koje vrste.

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, //prijenosna vrijednost | VALUE(Transfer . Pravna osoba. Fizička osoba) KAO Fizička osoba, //predefinirani račun | VRIJEDNOST(Kontni plan. Samoodržavajući. Materijali) KAO 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 aktiviran, tada funkcija //vraća Iznos - 300 //inače će zahtjev vratiti samo Iznos "SELECT | SELECT | WHEN TCReceipts.Amount > 7500 | THEN TCreceipts.Amount - 300 | ELSE TCreceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipts of GoodsServices.Goods AS TCreips";

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 | ... | END AS Number | FROM | RegisterAccumulations.Purchases 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 (ProductsInStockRemains.InStockRemaining, 0) AS Remainder | FROM | Directory.Nomenclature AS No. | LIJEVA VEZA Registar Akumulacije. GoodsInWarehouses. Remainings AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclature = 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 Remaining.Registrar LINK Document.Receipt of GoodsServices | THEN ""Potvrda"" | ELSE ""Potrošnja"" | END AS Vrsta kretanja | OD | Registar akumulacije. Preostali proizvodi u skladištima KAO Ostaci" ;

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 kod leži 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. Samoodrživi. 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 //bilo malim ili velikim slovom 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. 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 | AUTO ORDER VANIE";

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 | ItemsInWarehouses.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) AS STOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInWarehouses | |GROUP BY | ItemsInWarehouses.Nomenclature, | ItemsA tSkladište ah.Skladište" ;

11. Dizajn HAVING- omogućuje vam 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 | | GRUPIRAJ PO | ProizvodiUSkladištima.Nomenklatura, |ProizvodiUSkladištima.Skladište | |DOSTUPNO | IZNOS(ProizvodiUSkladištima.Na zalihama) > 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 akumulacije.CompensationRP.Remains AS Compensation RPRemains | WHERE |CompensationRPORmaining.CompensationRemaining<>0 | I CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. REZULTATI dizajna... OPĆENITO- koristi se za izračun ukupnih zbrojeva; dizajn specificira polja po kojima će se ukupni zbrojevi izračunavati i agregatne funkcije primijenjene na polja ukupnih zbrojeva. 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 Nagodba S drugim ugovornim stranama. Stanja KAO Izračuni | UKUPNO | IZNOS (Stanje) | Softver | OPĆENITO, | Vrsta ugovora";

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

Jezik upita 1C 8 nezamjenjiv je alat za programera 1C; omogućuje vam pisanje konciznijeg, jednostavnijeg, razumljivijeg koda i korištenje manje resursa sustava pri radu s podacima. Ovaj članak otvara niz lekcija posvećenih jeziku upita 1C 8. U prvoj lekciji ćemo pogledati strukturu glavnog operatora ovog jezika - BIRAJTE. Pomoću ovog operatora možete kreirati odabire iz tablica baze podataka. Odabrane podatke tablice moguće je sortirati, postavljati uvjete na nju, povezivati ​​i kombinirati s podacima iz drugih tablica, grupirati po raznim poljima i još mnogo toga.

Jezik upita 1C enterprise 8 - Operatorska struktura SELECT

Pogledajmo strukturu operatora SELECT (neobavezni dijelovi operatora navedeni su u uglatim zagradama). Jezik upita 1C nudi širok raspon alata za stvaranje uzoraka podataka.

SELECT [ALOWED] [DIFFERENT] [FIRST A] [Field1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEFT JOIN][FULL JOIN] Table2 AS Alias ​​​​Table2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS Alias ​​​​TablesC BY Expression1 [And Expression2]...[And ExpressionD]] .. . ... BY Izraz1 [I Izraz2]...[I IzrazE]] ... [TablicaF AS Alias ​​TabliceF] ... ] [GROUP BY Polje Grupiranja1[,] ... [Polje GrupiranjaG]] [WHERE Izraz1 [AND Izraz2] ... [I IzrazH]] [UJEDINITI SVE...] [; ...] [INDEX BY Alias1 ... AliasB] [TOTALS [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY [GENERAL][,] [ Polje grupiranja1][,] ... [Polje grupiranja]]

Ključne riječi i blokovi za rad s poljima

  • BIRAJTE— ključna riječ koja označava početak operatora;
  • DOZVOLJENO označava da odabir treba uključivati ​​zapise tablice koji imaju pristup čitanju za danog korisnika;
  • RAZNO označava da bi uzorak trebao uključivati ​​samo različite (u svim poljima) tokove. Drugim riječima, dvostruki retci bit će isključeni iz uzorka;
  • PRVI A ako navedete ovu ključnu riječ, tada će samo prvi A od redaka odabranih upitom biti uključen u odabir, gdje je A prirodni broj;
  • Blok terena— ovaj blok označava polja koja treba uključiti u odabir. Ova će polja biti odabrani stupci. U najjednostavnijem slučaju, polje izgleda ovako: Table Alias.TableFieldName AS Field Alias

    Na taj način označavamo iz koje tablice preuzimamo ovo polje. Jezik upita 1C omogućuje vam da odredite bilo koji alias, ali oni se ne bi trebali ponavljati u istoj izjavi SELECT. Polje može biti složenije, sastojati se od raznih kombinacija polja tablice, funkcija upitnog jezika i agregatnih funkcija, ali nećemo pokrivati ​​te slučajeve u ovom vodiču;

Ključne riječi i blokovi za rad s tablicama

  • PUT TemporaryTableName- ključna riječ MJESTO namijenjen je stvaranju privremene tablice s određenim imenom, koja će biti pohranjena u RAM-u u određenoj 1C 8 sesiji dok ne završi ili dok se privremena tablica ne uništi. Treba napomenuti da se imena privremenih tablica u jednoj 1C 8 sesiji ne smiju ponavljati;
  • Blok tablica i odnosa— blok označava sve tablice korištene u ovom upitu, kao i odnose između njih. Blok počinje ključnom riječi IZ, nakon čega slijedi naziv i alias prve tablice. Ako je ova tablica povezana s drugim tablicama, odnosi su naznačeni. Jezik upita 1C sadrži sljedeći skup vrsta povezivanja:
    • UNUTARNJI SPOJ— zapis iz lijeve tablice bit će uključen u odabir samo ako je ispunjen uvjet povezivanja, zapis iz desne tablice bit će uključen u odabir samo ako je ispunjen uvjet povezivanja;
    • LIJEVI SPOJ— zapis iz lijeve tablice bit će uključen u izbor u svakom slučaju, zapis iz desne tablice će biti uključen u izbor samo ako je ispunjen uvjet povezivanja;
    • POTPUNA POVEZANOST— zapis iz lijeve tablice će u svakom slučaju prvi biti uključen u izbor, zatim samo ako je ispunjen uvjet povezivanja, zapis iz desne tablice će biti prvi uvršten u izbor u svakom slučaju, onda samo ako je uvjet povezivanja je ispunjeno. U ovom slučaju, dobiveni dvostruki retci isključeni su iz uzorka.

    Nakon vrste veze, naznačeno je ime i alias druge tablice. Slijedi ključna riječ PO, nakon čega slijede komunikacijski uvjeti međusobno povezani logičkim operatorima I, ILI. Svaki izraz u uvjetu mora vratiti Booleovu vrijednost (True, False). Ako je prva tablica povezana s nekim drugim tablicama osim druge, tada se ponovno prikazuje vrsta veze, i tako dalje. Svaka od tablica koja sudjeluje u povezivanju može se pak povezati s drugim tablicama, što je prikazano u dijagramu strukture upita. Ako tablica nije povezana s prvom, tada je naznačena bez vrste veze, zatim njezine veze mogu slijediti, i tako dalje;

Ključne riječi i blokovi za pretvorbu podataka

  • Grupni blok— ovaj blok se koristi za grupiranje redaka tablice. Redovi se kombiniraju u jedan ako su vrijednosti polja navedene iza ključne riječi GRUPIRAJ PO ispasti isto. U ovom slučaju, sva druga polja se zbrajaju, prosječno povećavaju, maksimiziraju ili minimiziraju pomoću agregatnih funkcija. U bloku polja koriste se agregatne funkcije. Primjer: Maximum(TableAlias.TableFieldName) AS FieldAlias
  • Blok uvjeta- u ovom bloku iza ključne riječi GDJE naznačeni su uvjetni izrazi odvojeni logičkim operatorima I, ILI, da bi bilo koji od odabranih redaka bio uključen u uzorak, potrebno je da svi uvjeti u agregatu imaju vrijednost Pravi.
  • SVE SPOJITI— ova se ključna riječ koristi za kombiniranje upita (operatora IZABERI). Jezik upita 1C omogućuje vam kombiniranje nekoliko upita u jedan. Kako bi se upiti spojili, moraju imati isti skup polja;
  • «;» - točka-zarez se koristi za odvajanje izjava koje su neovisne jedna o drugoj IZABERI;
  • INDEX BY— ključna riječ se koristi za indeksiranje polja navedenih iza nje;
  • Blok sažetka— koristi se za izradu uzoraka nalik stablu. Za svako od polja grupiranja navedenih iza ključne riječi PO, u odabiru će se stvoriti zaseban red. U ovom retku, pomoću agregatnih funkcija, izračunat će se ukupne vrijednosti polja navedenih nakon ključne riječi REZULTATI.

Želite li nastaviti učiti jezik upita 1C 8? Zatim pročitajte sljedeći članak.

Jezik upita 1C jedna je od glavnih razlika između verzija 7.7 i 8. Jedna od najvažnijih točaka u učenju programiranja 1C je jezik upita. U 1C 8.3 upiti su najmoćniji i najučinkovitiji alat za dobivanje podataka. Upitni jezik omogućuje vam dobivanje informacija iz baze podataka na prikladan način.

Sama sintaksa uvelike podsjeća na klasični T-SQL, osim što u 1C-u, koristeći upitni jezik, podatke možete primati samo pomoću konstrukcije Select. Jezik također podržava složenije konstrukcije, na primjer (zahtjev unutar zahtjeva). Upiti u 1C 8 mogu se pisati i ćirilicom i latinicom.

U ovom ću članku pokušati govoriti o glavnim ključnim riječima u jeziku upita 1C:

  • izabrati
  • dozvoljeno
  • razne
  • izraziti
  • prvi
  • za promjenu
  • značenje
  • tip vrijednosti (i operator REFERENCE)
  • izbor
  • grupirati po
  • imajući
  • NIJE NULL
  • Da NULL
  • veze - desno, lijevo, unutarnje, puno.

Kao i neke male trikove jezika 1C pomoću kojih možete optimalno konstruirati tekst zahtjeva.

Za otklanjanje pogrešaka u upitima u sustavu 1C 8.2 postoji poseban alat - konzola upita. Opis možete pogledati i preuzeti na poveznici -.

Pogledajmo najvažnije i najzanimljivije operatore 1C upitnog jezika.

IZABERI

U jeziku upita 1C Enterprise 8 svaki upit počinje ključnom riječi BIRAJTE. U jeziku 1C nema konstrukcija UPDATE, DELETE, CREATE TABLE, INSERT; te se manipulacije izvode u objektnoj tehnologiji. Njegova je svrha samo čitanje podataka.

Na primjer:

BIRAJTE
Trenutni imenik.Naziv
IZ
Imenik.Nomenklatura AS Tekući imenik

Upit će vratiti tablicu s nazivima stavki.

U blizini strukture BIRAJTE možete pronaći ključne riječi ZA PROMJENU, DOZVOLJENO, RAZNO, PRVI

DOZVOLJENO— odabire samo zapise iz tablice na koje trenutačni korisnik ima pravo.

RAZNO— znači da rezultat neće sadržavati duplicirane retke.

ODABIR (SLUČAJ)

Vrlo često programeri podcjenjuju ovaj dizajn. Primjer njegove upotrebe:

Naziv trenutnog imenika,

WHEN Current Directory.Service THEN

"Servis"

KRAJ KAKO POGLEDATINomenklatura

Imenik.Nomenklatura AS Tekući imenik

Primjer će vratiti tekstualnu vrijednost u polju "Vrsta artikla" - "Proizvod" ili "Usluga".

GDJE

Dizajn 1C upitnog jezika, koji vam omogućuje da nametnete odabir primljenim podacima. Imajte na umu da sustav prima sve podatke s poslužitelja, a tek onda se odabire na temelju ovog parametra.

BIRAJTE
Imenik.Naziv
IZ
Tekući imenik.Nomenklatura AS Tekući imenik
WHERE CurrentDirectory.Service = TRUE

U primjeru odabiremo zapise za koje je vrijednost atributa “Service” postavljena na “True”. U ovom primjeru mogli bismo se snaći sa sljedećim uvjetom:

"GDJE JE SERVIS"

U biti, odabiremo retke u kojima je izraz iza ključne riječi jednak "True".

Možete koristiti izravne uvjete u izrazima:

WHERE Šifra = "005215"

Koristeći operator "VALUE()" u uvjetima, koristite pristup unaprijed definiranim elementima i enumeracijama u 1C zahtjevu:

WHERE Tip artikla = Vrijednost(Enumeracija.Vrste artikla.Proizvod)

Vremenske vrijednosti mogu se odrediti na sljedeći način:

WHERE Datum prijema > DATETIME(2012,01,01):

Najčešće se uvjeti navode kao parametri proslijeđeni zahtjevu:

Besplatno nabavite 267 video lekcija o 1C:

WHERE NomenclatureGroup= &NomenclatureGroup

Uvjet se može nametnuti tipu atributa ako je složenog tipa:

Ako trebate ograničiti odabir s popisa vrijednosti ili niza, možete učiniti sljedeće:

GDJE je akumulacijski registar. Registrator B (&popis dokumenata za odabir)

Stanje također može biti složeno i sastoji se od nekoliko uvjeta:

WHERE Datum primitka > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

GRUPIRAJ PO

Dizajn 1C 8.2 jezika upita koji se koristi za grupiranje rezultata.

Na primjer:

BIRAJTE
Prijem robe i usluga Roba. Roba,
SUM(Primitak RobeUslugeRobe.Količina) AS Količina,
SUM(Primitak RobeUslugeRobe.Iznos) AS Iznos
IZ
Dokument Potvrda o primitku robe i usluga Roba KAKO Potvrda o primitku robe i usluga Roba

GRUPIRAJ PO
Prijem RobaUslugeRoba.Roba

Ovaj zahtjev će sažeti sve račune po iznosu i količini po stavci.

Osim ključne riječi IZNOS Možete koristiti druge agregatne funkcije: KOLIČINA, BROJ RAZLIČITIH, MAKSIMUM, MINIMUM, PROSJEČAN.

IMAJUĆI

Dizajn koji se često zaboravlja, ali je vrlo važan i koristan. Omogućuje vam da odredite odabir u obliku agregatne funkcije, to se ne može učiniti u dizajnu GDJE.

Primjer korištenja HAVING u 1C zahtjevu:

BIRAJTE
Prijem robe i usluga Roba. Roba,
SUM(Primitak RobeUslugeRobe.Količina) AS Količina,
SUM(Primitak RobeUslugeRobe.Iznos) AS Iznos
IZ
Dokument Potvrda o primitku robe i usluga Roba KAKO Potvrda o primitku robe i usluga Roba

GRUPIRAJ PO
Primitak robe i usluga Roba, roba

SUM(Primitak RobeUslugeRobe.Količina) > 5

Tako ćemo odabrati broj proizvoda koji je stigao više od 5 komada.

ZNAČENJE()

Na primjer:

WHERE Banka = Vrijednost (Imenik.Banke.Prazna veza)

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

WHERE Tip artikla = Vrijednost(Enumeracija.Vrste artikla.Service)

VRSTA na zahtjev

Tip podataka može se provjeriti pomoću funkcija TYPE() i VALUETYPE() ili pomoću logičkog operatora REFERENCA.

IZRAZITI()

Express operator u 1C upitima koristi se za pretvaranje tipova podataka.

Sintaksa: IZRAZITI(<Выражение>KAKO<Тип значения>)

Pomoću njega možete pretvoriti vrijednosti niza u datum ili referentne vrijednosti u podatke niza i tako dalje.

U praktičnim primjenama, Express() operator se vrlo često koristi za pretvaranje polja neograničene duljine, jer se polja neograničene duljine ne mogu odabrati, grupirati itd. Ako se takva polja ne pretvore, dobit ćete pogrešku Ne možete uspoređivati ​​polja neograničene duljine i polja nekompatibilnih vrsta.

BIRAJTE
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
IZ
Registar informacija Kontakt informacije KAKO Kontakt informacije

GRUPIRAJ PO
EXPRESS(Informacije o kontaktu.Predstavljanje KAO RED(150)),
ContactInformation.Object

ISNULL (ISNULL)

Vrlo korisna funkcija jezika upita 1C koja provjerava vrijednost u zapisu i je li jednaka NULL, To vam omogućuje da ga zamijenite vlastitom vrijednošću. Najčešće se koristi kod dobivanja virtualnih tablica stanja i prometa radi skrivanja NULL i stavite čistu 0 (nula).

ISNULL(Porezi prije mjeseca. Primijenjena FSS naknada, 0)

Takva funkcija 1C upitnog jezika ISNULL vratit će nulu ako nema vrijednosti, što će izbjeći pogrešku.

PRIDRUŽITI

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.

Primjer lijevog spajanja u zahtjevu 1C:

Vratit će cijelu tablicu i ispuniti polje "Banka" samo na onim mjestima gdje je ispunjen uvjet "Naziv druge strane = Naziv banke". Ako uvjet nije ispunjen, polje Banka bit će postavljeno na NULL.

RIGHT JOIN na jeziku 1C 8.3 apsolutno sličan LIJEVI priključak, s izuzetkom jedne razlike: in 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:

POTPUNA POVEZANOST
Imenik.Banke KAKO Banke

PO

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

UNUTARNJI SPOJ

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

Na primjer:

IZ
Imenik.Druge strane AS Klijenti

UNUTARNJI SPOJ
Imenik.Banke KAKO Banke

PO
Klijenti.Naziv = Banke.Naziv

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

Zaključak

Ovo je samo mali dio sintakse iz jezika upita 1C 8; u budućnosti ću pokušati detaljnije razmotriti neke točke, pokazati i još mnogo toga!

Udio: