Izrazi kao broj u upitu 1s 8.3. Dokument. Potrošni materijal AS D

Nekompatibilne vrste "EXPRESS"- ova se poruka pojavljuje kada programer 1C 8.2 ili 8.3 pokuša usporediti dvije različite vrste.

Funkcija Express() omogućuje vam pretvaranje vrijednosti polja zahtjeva 1C u određenu vrstu. Ovo može biti potrebno u dva slučaja:

1. Dobiti traženi kapacitet broja ili potreban broj znakova vrijednosti niza. Broj znakova u poljima neograničenog tipa mora biti ograničen zbog određenih značajki.

Besplatno nabavite 267 video lekcija o 1C:

Na primjer:

EXPRESS(Nomenklatura.Komentar KAO STRING(300))
EXPRESS(Nomenklatura.Cijena KAO BROJ(15, 2)) KAO Iznos

2. Pretvorite polje složenog tipa u polje jednog tipa. Ovo može biti potrebno za svrhe. Ako upisano polje sadrži vrijednost drugog tipa, sustav će vratiti NULL, stoga je uvijek potrebno dodatno postaviti uvjet u odjeljku WHERE, ograničavajući ga operatorom LINK.

Na primjer:

BIRAJTE

EXPRESS(Prodaja.Registrar AS Dokument.Implementacija)

IZ

GDJE Prodaja. Registrator LINK Dokument. Implementacija

Kako izbjeći greške

Pogreške poput "Nekompatibilni tipovi EXPRESS..." mogu se pojaviti kada se sintaksa koristi neispravno.

Na primjer, konstrukcija "EXPRESS("123″ AS NUMBER(5, 2)) AS SUM" smatra se pogrešnom jer se zahtjev ne može pretvoriti iz jedne vrste u drugu korištenjem standardnih metoda.

Ako počinjete učiti 1C programiranje, preporučujemo naš besplatni tečaj (ne zaboravite

U ovom ćemo članku analizirati mogućnosti pretvorbe tipa u jeziku upita 1C, koje pruža funkcija "Express".
Pogledajmo nekoliko opcija za korištenje ove funkcije.
A prva opcija je zaokruživanje brojeva.

Da biste to učinili, trebate koristiti funkciju Express u sljedećem formatu:

Izraziti(<Число>kao broj(<ДлинаЧисла>,<Точность>))

Gdje:
Broj— polje koje treba zaokružiti
DužinaBrojevi— najveća duljina broja
Točnost— točnost zaokruživanja broja

Parametri i duljina i preciznost moraju biti pozitivni cijeli brojevi.
Pogledajte kako ova funkcija radi na slici ispod.

Drugi slučaj upotrebe je string casting. Vrlo često konfiguracije koriste nizove neograničene duljine, što nameće neka ograničenja. Na primjer, ne možemo uspoređivati ​​nizove neograničene duljine.
U upitu u nastavku, polje FullName ima niz tipa neograničene duljine i ovaj upit neće raditi.

Da bi funkcionirao, potrebno je polje neograničene duljine pretvoriti u string određene duljine, što se radi pomoću funkcije Express u sljedećem formatu:

Izraziti(<Строка>kao niz (<ДлинаСтроки>)

Gdje
Duljina linije– maksimalna duljina na koju će se niz smanjiti.
Preradimo upit: u uvjetu ćemo pretvoriti neograničeni niz u niz određene duljine. Tada neće biti grešaka.

Razmotrimo posljednju i, rekao bih, najvažniju opciju za njegovu primjenu: kada radite s poljima složenog tipa.
Ispod su dva upita koji koriste složena polja. Prvi je pogrešan, a drugi točan.

Oni. Kada trebate dobiti polje nekog složenog tipa, uvijek dohvatite vrijednost ovog polja tek nakon pretvaranja tipa pomoću funkcije Express. U tom će slučaju dokumenti i referentne knjige imati sljedeći format:

Izraziti(<Документ>kao Dokument.<ИмяТаблицы>)
Izraziti(<Справочник>kao Imenik.< ИмяТаблицы >)
.

Gdje
TableName— naziv objekta u .

Uvijek koristite funkciju express kada radite sa složenim tipovima, ona uvelike optimizira upit.

Ako još uvijek "plivate" u konstrukcijama upitnog jezika, pa vam čak i najjednostavniji upiti stvaraju poteškoće, preporučujem vam moj tečaj "Upiti u 1C od početnika do profesionalca". Gdje se pobliže raspravlja o ovim i mnogim drugim pitanjima.

Što je posebno kod ovog tečaja:
Tečaj je namijenjen onima koji nisu upoznati s jezikom upita u 1C;
Obrazovni materijal dobro strukturiran i lak za učenje;
Nekoliko desetaka lekcija;
Koristan praktični primjeri;
Sve lekcije prikazane su jasnim i jednostavnim jezikom

Za moje čitatelje, kupon za popust od 25%: hrW0rl9Nnx

Nastojim objavljivati ​​razne zanimljive besplatne članke i video upute što je češće moguće. Stoga će mi biti jako drago ako podržite moj projekt prijenosom bilo kojeg iznosa:

Možete izravno prenijeti bilo koji iznos:
Yandex.Money - 410012882996301
Web Money - R955262494655

Pridružite se mojim grupama.

Jezik upita jedan je od temeljnih mehanizama 1C 8.3 za programere. Pomoću upita možete brzo dohvatiti sve podatke pohranjene u bazi podataka. Sintaksa mu je vrlo slična SQL-u, ali postoje neke razlike.

Glavne prednosti upitnog jezika 1C 8.3 (8.2) u odnosu na SQL:

  • dereferenciranje referentnih polja (upućivanje jedne ili više točaka na detalje objekta);
  • rad s rezultatima vrlo je zgodan;
  • mogućnost stvaranja virtualnih tablica;
  • zahtjev se može napisati na engleskom i ruskom jeziku;
  • mogućnost blokiranja podataka kako bi se izbjegli zastoji.

Nedostaci jezika upita u 1C:

  • za razliku od SQL-a, u 1C upiti ne dopuštaju promjenu podataka;
  • nedostatak pohranjenih procedura;
  • nemogućnost pretvaranja niza u broj.

Pogledajmo naš mini vodič o osnovnim konstrukcijama 1C upitnog jezika.

Zbog činjenice da vam upiti u 1C omogućuju samo primanje podataka, svaki upit mora započeti riječju "SELECT". Nakon ove naredbe naznačena su polja iz kojih se moraju dobiti podaci. Ako navedete “*”, bit će odabrana sva dostupna polja. Mjesto s kojeg će se birati podaci (isprave, upisnici, imenici i sl.) navodi se iza riječi "OD".

U primjeru koji se razmatra u nastavku, nazivi cijele nomenklature odabrani su iz direktorija "Nomenklatura". Nakon riječi “KAKO” navedeni su aliasi (nazivi) za tablice i polja.

BIRAJTE
Nomenklatura Naziv AS Naziv nomenklature
IZ
Imenik.Nomenklatura AS Nomenklatura

Uz naredbu “SELECT” možete odrediti ključne riječi:

  • RAZNO. Upit će odabrati samo retke koji se razlikuju u barem jednom polju (bez duplikata).
  • PRVI n, Gdje n– broj redaka od početka rezultata koje je potrebno odabrati. Najčešće se ova konstrukcija koristi zajedno s sortiranjem (ORDER BY). Na primjer, kada trebate odabrati određeni broj dokumenata koji su noviji po datumu.
  • DOZVOLJENO. Ovaj dizajn omogućuje odabir iz baze podataka samo onih zapisa koji su dostupni trenutnom korisniku. Osnove za korištenje ovoga ključna riječ Korisnik će primiti poruku o pogrešci kada pokuša pretražiti zapise kojima nema pristup.

Ove se ključne riječi mogu koristiti zajedno ili odvojeno.

ZA PROMJENU

Ovaj prijedlog blokira podatke kako bi spriječio međusobne sukobe. Zaključani podaci neće se čitati s druge veze dok transakcija ne završi. U ovoj klauzuli možete navesti određene tablice koje je potrebno zaključati. U protivnom će svi biti blokirani. Dizajn je relevantan samo za način automatskog zaključavanja.

Najčešće se koristi klauzula “ZA PROMJENU” kod primanja stanja. Uostalom, kada nekoliko korisnika radi u programu istovremeno, dok jedan prima stanja, drugi ih može promijeniti. U tom slučaju dobiveni ostatak više neće biti točan. Ako blokirate podatke ovim prijedlogom, dok prvi zaposlenik ne dobije točnu ravnotežu i ne izvrši sve potrebne manipulacije s njim, drugi će zaposlenik biti prisiljen čekati.

BIRAJTE
Međusobni obračuni Zaposlenik,
Međusobni obračuni Iznos međusobnih obračuna Stanje
IZ
Registar akumulacija Međusobni obračuni sa zaposlenicima Stanja AS Međusobni obračuni
ZA PROMJENU

GDJE

Dizajn je neophodan kako bi se učitanim podacima nametnula neka vrsta selekcije. U nekim slučajevima dobivanja podataka iz registara, razumnije je odrediti uvjete odabira u parametrima virtualnih tablica. Kod korištenja "WHERE" prvo se dohvaćaju svi zapisi, a tek onda se vrši odabir, što značajno usporava upit.

U nastavku se nalazi primjer zahtjeva za dobivanje kontakt osoba za određenu poziciju. Parametar odabira ima format: &NazivParametra (naziv parametra je proizvoljan).

ODABIR (SLUČAJ)

Dizajn vam omogućuje da odredite uvjete izravno u tijelu zahtjeva.

U donjem primjeru, "AdditionalField" će sadržavati tekst ovisno o tome je li dokument objavljen ili ne:

BIRAJTE
Prijem T&U.Link,
IZBOR
KADA Obavlja prijemT&U
ONDA "Dokument je usvojen!"
ELSE “Dokument nije objavljen...”
END AS AdditionalField
IZ
Dokument Prijem robe i usluga KAKO Prijem T&C

PRIDRUŽITI

Spajanja povezuju dvije tablice na temelju određenog uvjeta odnosa.

SPOJ LIJEVO/DESNO

Bit LIJEVOG spajanja je da se prva navedena tablica u cijelosti preuzima, a druga se na nju povezuje prema uvjetu povezivanja. Ako nema zapisa koji odgovaraju prvoj tablici u drugoj, tada se kao njihove vrijednosti zamjenjuje NULL. Jednostavno rečeno, glavna tablica je prva navedena tablica, a podaci druge tablice (ako postoje) već su zamijenjeni njezinim podacima.

Na primjer, potrebno je pribaviti stavke stavki iz dokumenata „Primka roba i usluga“, a cijene iz informacijskog očevidnika „Cijene stavki“. U tom slučaju, ako cijena za bilo koju poziciju nije pronađena, umjesto toga zamijenite NULL. Sve stavke iz dokumenta bit će odabrane bez obzira imaju li cijenu ili ne.

BIRAJTE
Prijemna i u. nomenklatura,
Cijene.Cijena
IZ
Dokument Potvrda o primitku robe i usluga Roba KAKO Potvrda o primitku T&C
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Cijene
Software Receipt&U.Nomenclature = Cijene.Nomenklatura

U DESNICI je sve upravo suprotno.

POTPUNA POVEZANOST

Ova vrsta povezivanja razlikuje se od prethodnih po tome što će kao rezultat biti vraćeni svi zapisi i prve i druge tablice. Ako se u prvoj ili drugoj tablici ne pronađu zapisi na temelju navedenog uvjeta veze, umjesto toga će se vratiti NULL.

Kod korištenja pune veze u prethodnom primjeru bit će odabrane sve stavke iz dokumenta „Primka roba i usluga“ i sve posljednje cijene iz šifranta „Cijene artikala“. Vrijednosti zapisa koji nisu pronađeni u prvoj i drugoj tablici bit će jednaki NULL.

UNUTARNJI SPOJ

Razlika između INNER JOIN-a i FULL JOIN-a je u tome što ako zapis nije pronađen u barem jednoj od tablica, upit ga uopće neće prikazati. Slijedom toga, iz dokumenta „Primitak roba i usluga“ bit će odabrane samo one stavke stavki za koje postoji evidencija u informatiku „Cijene stavki“, ako u prethodnom primjeru zamijenimo „PUNO“ s „INTERNO“.

GRUPIRAJ PO

Grupiranje u 1C upitima omogućuje vam sažimanje redaka tablice (polja grupiranja) prema određenoj zajedničkoj karakteristici (polja grupiranja). Polja grupiranja mogu se prikazati samo pomoću agregatnih funkcija.

Rezultat sljedećeg upita bit će popis vrsta proizvoda s maksimalnim cijenama za njih.

BIRAJTE
,
MAX(Cijena.Cijena) AS Cijena
IZ

GRUPIRAJ PO
Cijene. Nomenklatura. Vrsta nomenklature

REZULTATI

Za razliku od grupiranja, pri korištenju ukupnih zbrojeva prikazuju se svi zapisi i dodaju im se reci s ukupnim zbrojem. Grupiranje prikazuje samo generalizirane zapise.

Rezultati se mogu sažeti za cijelu tablicu (koristeći ključnu riječ “OPĆENITO”), za više polja, za polja s hijerarhijskom strukturom (ključne riječi “HIJERARHIJA”, “SAMO HIJERARHIJA”). Pri sumiranju rezultata nije potrebno koristiti agregatne funkcije.

Pogledajmo primjer sličan gornjem primjeru koristeći grupiranje. U tom će slučaju rezultat upita vratiti ne samo grupirana polja, već i detaljne zapise.

BIRAJTE
Cijene.Nomenklatura. Vrsta nomenklature AS Vrsta nomenklature,
Cijene.Cijena KAO Cijena
IZ
Registar informacija. Cijene nomenklature. Snimak najnovijih AS cijena
REZULTATI
MAKSIMALNO (cijena)
PO
TipNomenklatura

IMAJUĆI

Ovaj je operator sličan operatoru WHERE, ali se koristi samo za agregatne funkcije. Preostala polja, osim onih koje koristi ovaj operator, moraju biti grupirana. Operator WHERE nije primjenjiv na agregatne funkcije.

U donjem primjeru odabrane su maksimalne cijene artikla ako prelaze 1000, grupirane prema vrsti artikla.

BIRAJTE

MAX(Cijena.Cijena) AS Cijena
IZ
Registar informacija. Cijene nomenklature. Snimak najnovijih AS cijena
GRUPIRAJ PO
Cijene. Nomenklatura. Vrsta nomenklature
IMAJUĆI
MAKSIMALNO(Cijene.Cijena) > 1000

SORTIRAJ PO

Operator ORDER BY sortira rezultat upita. Kako bi se osiguralo da su zapisi prikazani dosljednim redoslijedom, koristi se AUTO ORDER. Primitivni tipovi su razvrstani po normalna pravila. Vrste referenci sortirane su prema GUID-u.

Primjer dobivanja popisa zaposlenika sortiranih po imenu:

BIRAJTE
Zaposlenici. Ime KAO Ime
IZ
Imenik.Zaposlenici KAKO Zaposlenici
SORTIRAJ PO
Ime
AUTO NARUDŽBA

Ostale konstrukcije 1C jezika upita

  • KOMBINIRATI– rezultati dvaju upita u jedan.
  • SVE SPOJITI– slično COMBINE, ali bez grupiranja identičnih redaka.
  • PRAZAN STOL– ponekad se koristi kada se spajaju upiti za navođenje prazne ugniježđene tablice.
  • MJESTO– stvara privremenu tablicu za optimizaciju složenih 1C upita. Takvi zahtjevi nazivaju se skupni zahtjevi.

Značajke jezika upita

  • PODNIZ skraćuje niz s određenog položaja na određeni broj znakova.
  • GODINA...DRUGA omogućuju vam da dobijete odabranu vrijednost numeričkog tipa. Ulazni parametar je datum.
  • POČETAK RAZDOBLJA i KRAJ RAZDOBLJA koristi se pri radu s datumima. Vrsta perioda (DAN, MJESEC, GODINA, itd.) naznačena je kao dodatni parametar.
  • DODAJ DATUM omogućuje dodavanje ili oduzimanje određenog vremena određene vrste od datuma (SEKUNDA, MINUTA, DAN itd.).
  • DATUM RAZLIKE određuje razliku između dva datuma, označavajući vrstu izlazne vrijednosti (DAN, GODINA, MJESEC itd.).
  • NIJE NULL zamjenjuje vrijednost koja nedostaje navedenim izrazom.
  • ZASTUPSTVO i ZASTUPSTVOLINKOVI dobiti string reprezentaciju navedenog polja. Primijeni na bilo koje vrijednosti i samo na referentne vrijednosti.
  • TIP, TIP VRIJEDNOSTI koriste se za određivanje tipa ulaznog parametra.
  • VEZA je logički operator usporedbe za tip vrijednosti atributa.
  • IZRAZITI koristi se za pretvaranje vrijednosti u željeni tip.
  • DATUM VRIJEME dobiva vrijednost tipa "Datum" iz numeričkih vrijednosti (godina, mjesec, dan, sat, minuta, sekunda).
  • ZNAČENJE u zahtjevu 1C koristi se za označavanje unaprijed definiranih vrijednosti - direktorija, popisivanja, planova za vrste karakteristika. Primjer upotrebe: " Gdje je pravna osoba = vrijednost (nabrajanje. pravna osoba. pojedinac)«.

Query Builder

Za izradu upita s 1C postoji vrlo zgodan ugrađeni mehanizam - dizajner upita. Sadrži sljedeće glavne kartice:

  • “Tablice i polja” - sadrži polja koja je potrebno odabrati i njihove izvore.
  • “Veze” - opisuje uvjete za strukturu VEZE.
  • “Grupiranje”—sadrži opis struktura grupiranja i zbrojenih polja koja se temelje na njima.
  • “Uvjeti” - odgovoran je za odabir podataka u zahtjevu.
  • “Napredno”—dodatni parametri upita, kao što su ključne riječi za naredbu “SELECT” itd.
  • “Joins/Aliases” - naznačene su mogućnosti spajanja tablica i navedeni su aliasi (konstrukcija “KAKO”).
  • “Red” je odgovoran za sortiranje rezultata upita.
  • “Ukupno” - slično kartici “Grupiranje”, ali se koristi za konstrukciju “UKUPNO”.

Sam tekst zahtjeva možete pogledati klikom na gumb “Zahtjev” u donjem lijevom kutu. U ovom obliku može se ispraviti ručno ili kopirati.


Konzola zahtjeva

Za brzi pregled rezultata upita u načinu rada Enterprise ili otklanjanje pogrešaka složenih upita koristite . Sadrži tekst zahtjeva, postavlja parametre i prikazuje rezultat.

Konzolu upita možete preuzeti na ITS disku ili putem .

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 normalno testiranje jednakosti za NULL. 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 KAO Proizvod,
IZBOR
KADA Cijene. Cijena JE NULL
ONDA 0
INAČE Cijene.Cijena
END AS CurrentPrice
IZ
Dokument Prijem robe i usluga Roba KAO roba
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 izvođenja 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- 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, //pa ako je uvjet pokrenut tada funkcija //vraća Sum - 300 //inače će zahtjev vratiti samo Sum "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.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | RegisterAccumulations.Purchases AS Purchases";

Druga je mogućnost korištenje funkcije EXPRESS u poljima mješoviti tipovi gdje se to nalazi? 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.