Express Boolean v poizvedbi 1C 8.3. Pretvarjanje nastavitev primitivnega tipa

V tem članku želimo z vami razpravljati o vsem Funkcije poizvedovalnega jezika 1C, in tudi konstrukcije poizvedovalnega jezika. Kakšna je razlika med funkcijo in dizajnom? Funkcijo pokličemo z oklepaji in možnimi parametri v njih, konstrukcijo pa zapišemo brez oklepajev. Nedvomno vse strukture in funkcije poizvedovalnega jezika 1C narediti postopek pridobivanja podatkov prilagodljiv in večnamenski. Te funkcije in konstrukcije veljajo za polja zahtev, nekatere pa tudi za pogoje.

Funkcije poizvedovalnega jezika 1C

Ker jasen opis Funkcije poizvedovalnega jezika 1c je veliko manj pogost kot opisi struktur, smo se odločili, da začnemo preučevati funkcije. Zdaj pa si oglejmo vsakega posebej, z opisom njegovega namena, sintakse in primera uporabe, torej:

1. funkcija DATETIME - to funkcijo ustvari stalno polje tipa "Datum".

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

Primer uporabe:

2. Funkcija DATE DIFFERENCE- vrne razliko med dvema datumoma v eni od dimenzij (leto, mesec, dan, ura, minuta, sekunda). Meritev se posreduje kot parameter.

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

Primer uporabe:

Query.Text = "IZBERI | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS število dni";

3. Funkcija VALUE- nastavi konstantno polje z vnaprej določenim zapisom iz baze lahko dobi tudi prazno povezavo katere koli vrste.

Sintaksa: VALUE(<Имя>)

Primer uporabe:

Request.Text = "IZBERI //predefiniran element | VALUE(Directory.Currencies.Dollar) AS Dollar, //prazna povezava | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Potrdilo, //transfer value | VALUE(Transfer . Pravna oseba. Posameznik) AS Posameznik, //predefiniran račun VALUE(Kontni načrt. Samoobračunski materiali) AS Account_10" ;

4. SELECT funkcijo- pred nami je analog konstrukcije IF, ki se uporablja v kodi, le ta se uporablja v poizvedbah 1C.

Sintaksa: IZBIRA KDAJ<Выражение>POTEM<Выражение>DRUGAČE<Выражение>KONEC

Primer uporabe:

Request.Text = //če je znesek večji od 7500, bi moral obstajati popust 300 rubljev, //torej, če je pogoj sprožen, potem funkcija //vrne znesek - 300 //v nasprotnem primeru bo zahteva preprosto vrnila znesek "IZBERI | IZBERI | KO TCReceipts.Amount > 7500 | THEN TCReceipts.Amount - 300 | DRUGAČE TCReceipts.Amount | KONEC KOT Znesek s popustom | OD |

5. funkcija EXPRESS- omogoča izražanje konstantnega polja z določeno vrsto.

Sintaksa: EXPRESS(Ime polja AS Ime vrste)

Primer uporabe:

Query.Text = "IZBERI RAZLIČNO | Številka.Registra.Prodaje, | IZBERI | KO POVEZAVA Registra.Prodaje Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ALSE SELECT | KO POVEZAVA Registra.Registrar Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) |. END AS Number |. Register AS Purchases";

Ali obstaja še kakšna možnost za uporabo funkcije EXPRESS v poljih mešanih tipov, kje se pojavljajo? Najenostavnejši primer je "Registrar" za kateri koli register. Zakaj bi torej morda morali kvalificirati vrsto v registrarju? Poglejmo situacijo, ko v registrarju izberemo polje "Številka", iz katere tabele bo izbrana številka? Pravilen odgovor vseh! Zato moramo za hitro delovanje naše poizvedbe določiti eksplicitno vrsto s funkcijo EXPRESS

Primer uporabe:

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. Funkcija ISNULL(alternativno črkovanje ISNULL) - če je polje tipa NULL, se nadomesti z drugim parametrom funkcije.

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

Primer uporabe:

Upoštevajte tudi, da je priporočljivo VEDNO zamenjati tip NULL z neko vrednostjo, ker primerjava s tipom NULL vedno vrne FALSE, tudi če primerjate NULL z NULL. Najpogosteje se vrednosti NULL oblikujejo kot rezultat združevanja tabel (vse vrste združevanj, razen notranjih).

Query.Text = //Izberi celotno postavko in njena stanja //če v neki postavki ni stanja, potem bo polje //NULL, ki bo nadomeščeno z vrednostjo 0 "IZBERI | Št. Povezava, | ISNULL (ProductsInStockRemaining, 0) AS Directory.Nomenclature AS No. |. RegisterAccumulations.GoodsInWarehousesRemainings | PO (GoodsInWarehousesRemainings = No.Link)";

7. REPRESENTATION funkcija- vam omogoča, da dobite predstavitev polja zahteve.

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

Primer uporabe:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Register kopičenja.FreeRemaining.Remaining AS FreeRemainingRemaining ";

Konstrukcije v poizvedovalnem jeziku 1C

Zgoraj smo razpravljali z vami Funkcije poizvedovalnega jezika 1C, zdaj je čas za razmislek konstrukcije v poizvedovalnem jeziku 1C, niso nič manj pomembni in uporabni, začnimo.

1. Gradnja LINK- je logični operator za preverjanje referenčnega tipa. Najpogosteje se pojavi pri preverjanju polja kompleksne vrste glede na določeno vrsto. Sintaksa: POVEZAVA<Имя таблицы>

Primer uporabe:

Request.Text = //če je vrsta vrednosti zapisovalnika dokument Prejem, //potem bo poizvedba vrnila "Prejem blaga", sicer "Prodaja blaga" "IZBERI | IZBERI | KO Preostalo.Registrar POVEZAVA Dokument.Prejem blagaStoritve | POTEM ""Potrošnja" |. FROM Preostali proizvodi v skladiščih" ;

2. Design BETWEEN - tega operaterja preveri, ali je vrednost znotraj podanega območja.

Sintaksa: MED<Выражение>IN<Выражение>

Primer uporabe:

Request.Text = //pridobite celotno nomenklaturo, katere koda je v območju od 1 do 100 "SELECT | Nomenclature.Link |FROM | Imenik.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konstrukcija B in B HIERARHIJA- preverimo, ali je vrednost v prenesenem seznamu (matrike, tabele vrednosti itd. lahko prenesemo kot seznam). Operator IN HIERARCHY omogoča vpogled v hierarhijo (primer uporabe kontnega načrta).

Sintaksa: IN(<СписокЗначений>), V HIERARHIJI(<СписокЗначений>)

Primer uporabe:

Request.Text = //izberite vse podračune računa "IZBERI | Samonosno. Povezava AS Račun | OD | Kontni načrt. Samonosno AS Samonosno | KJE | Samonosno. Povezava V HIERARHIJI VREDNOST (Tabela Računi. Samonosno blago)";

4. Oblikovanje PODOBNO- Ta funkcija nam omogoča primerjavo niza z vzorcem niza.

Sintaksa: VŠEČ "<ТекстШаблона>"

Možnosti vzorca vrstic:

% - zaporedje, ki vsebuje poljubno število poljubnih znakov.

En poljuben znak.

[...] - vsak posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih. Oštevilčenje lahko določa obsege, na primer a–z, kar pomeni poljuben znak, vključen v obseg, vključno s konci obsega.

[^...] - vsak posamezen znak ali zaporedje znakov, navedenih znotraj oglatih oklepajev, razen tistih, navedenih za znakom za zanikanje.

Primer uporabe:

Query.Text = //poiščite celotno nomenklaturo, ki vsebuje koren TABUR in se začne //bodisi z malo ali veliko črko t "SELECT | Nomenklatura. Povezava | FROM | Imenik. Nomenklatura KOT Nomenklatura | WHERE | Izdelki. Ime LIKE "" [Tt ]abur%""" ;

5. Dizajn DOVOLJEN- ta operater omogoča izbiro samo tistih zapisov iz baze podatkov, za katere ima klicatelj dovoljenje za branje. Te pravice so konfigurirane na ravni zapisa (RLS).

Sintaksa: DOVOLJENO piše za ključna beseda IZBERI

Primer uporabe:

Request.Text = "IZBERI DOVOLJENO | Nasprotne stranke. Povezava | IZ | Imenik. Nasprotne stranke KOT Nasprotne stranke";

6. Oblikovanje RAZLIČNO- omogoča izbiro zapisov, v katerih ni podvojenih zapisov.

Sintaksa: VARIOUS je zapisano za ključno besedo SELECT

Primer uporabe:

Request.Text = //izbere zapise, do katerih ima bralec pravice "SELECT VARIOUS | Counterparties.Name |FROM | Imenik. Counterparties AS Counterparties" ;

Tudi konstrukcijo VARIOUS je mogoče uporabiti z operatorjem ALLOWED in drugimi operatorji.

Primer uporabe:

Request.Text = //izbere različne zapise, do katerih ima bralec pravice "IZBERI DOVOLJENE RAZLIČNE | Nasprotne stranke.Ime |FROM | Imenik. Nasprotne stranke KOT Nasprotne stranke";

7. Design FIRST- iz rezultata poizvedbe izbere število zapisov, navedenih v parametru.

Sintaksa: FIRST<число>

Primer uporabe:

Request.Text = //izberi prve 4 številke CCD iz imenika "IZBERI PRVE 4 | Številke CCD. Povezava | FROM | Imenik. Številke CCD KOT številke CCD";

8. Dizajn ZA SPREMEMBE- omogoča zaklepanje tabele, deluje samo v transakcijah (relevantno samo za avtomatske ključavnice).

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

Primer uporabe:

Query.Text = "IZBERI | Brezplačni preostanki Preostanki. Nomenklatura, | Brezplačni preostanki Preostanki. Skladišče, | Brezplačni preostanki Preostanki. Na zalogi Preostali | OD | Register akumulacij. Brezplačni preostanki. Ostanki KOT Prosti preostanki Preostanki | ZA SPREMEMBO | Register akumulacij . Brezplačni preostanki";

9. Dizajn ORDER BY- ureja podatke po določenem polju. Če je polje povezava, potem pri nastavitvi zastavice AVTO NAROČILO Razvrščanje bo potekalo po predstavitvi povezave; če je zastavica izklopljena, bodo povezave razvrščene po starosti naslova povezave v pomnilniku.

Sintaksa: NAROČI PO<НаименованиеПоля>AVTO NAROČILO

Primer uporabe:

Query.Text = "IZBERI | Brezplačni preostali preostanki. Nomenklatura KOT Nomenklatura, | Brezplačni preostali preostanki. Skladišče KOT Skladišče, | Brezplačni preostali preostanki. Na zalogi Preostali | OD | Registrirajte akumulacije. Brezplačni preostanki. Preostali kot prosti preostali preostanki | | NAROČI PO |. Nomenklatura |. SAMODEJNO BRANJE NAROČILA";

10. Oblikovanje GROUP BY- uporablja se za združevanje nizov poizvedb po določenih poljih. Številska polja je treba uporabiti s katero koli agregatno funkcijo.

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

Primer uporabe:

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. Oblikovanje HAVING- omogoča uporabo agregatne funkcije za pogoj izbire podatkov, podobno konstrukciji WHERE.

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

Primer uporabe:

Query.Text = //izbere združene zapise, kjer je polje InStock večje od 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInStocks | | GROUP BY |. ProductsInWarehouses.Nomenclature, |. ProductsInWarehouses.Warehouse |. ZNESEK (ProductsInWarehouses.In Stock) > 3" ;

12. Gradnja INDEX BY- uporablja se za indeksiranje poizvedbenega polja. Poizvedba z indeksiranjem traja dlje, vendar pospeši iskanje po indeksiranih poljih. Lahko se uporablja samo v virtualnih tabelah.

Sintaksa: INDEKS PO<Поле1, ... , ПолеN>

Primer uporabe:

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

13. Oblikovanje KJE- omogoča, da določite pogoj za poljubna izbirna polja. Rezultat bo vseboval le zapise, ki bodo izpolnjevali pogoj.

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

Primer uporabe:

Query.Text = //izbrani so vsi zapisi s CompensationRemaining<>0 in //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Register kopičenja.CompensationRP.Remains AS Compens ationRPORemains |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | In CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. REZULTATI oblikovanja... SPLOŠNO- uporablja se za izračun seštevkov; določa polja, po katerih se izračunajo seštevki, in agregatne funkcije, uporabljene za polja s seštevki. Pri uporabi vsot za vsako polje, ki sledi konstrukciji TOTAL, so podatki združeni. Obstaja neobvezen konstrukt GENERAL, njegova uporaba zagotavlja tudi dodatno združevanje. Spodaj boste videli primer rezultata zahteve.

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

Primer uporabe:

Request.Text = "IZBERI | Izračuni. Pogodba nasprotne stranke. Vrsta pogodbe AS Vrsta pogodbe, | Izračuni. Pogodba nasprotne stranke AS Pogodba, | Izračuni. Nasprotna stranka, | Izračuni. Znesek stanja medsebojne poravnave AS stanja | OD | Register akumulacij. Vzajemna Poravnava Z nasprotnimi strankami. Izračuni SKUPAJ |. SPLOŠNO, |Vrsta pogodbe;

Na sliki so prikazane skupine, ki so se oblikovale med izvajanjem zahteve, zgornja se nanaša na razdelek SPLOŠNO, druga pa na polje Counterparty AgreementAgreement Type.

Poglejmo zdaj ostalo.

Funkcije za delo z nizi v poizvedbah 1C

Obstaja malo funkcij in operaterjev za delo s podatki nizov v poizvedbah 1C.

Prvič, lahko dodate nize v poizvedbe. Če želite to narediti, uporabite operator "+":

Zahteva. Besedilo = "IZBERI
" "Vrstica: " " + Source.Name
;

Drugič, lahko izberete del črte. Če želite to narediti, uporabite funkcijo PODSTRUKCIJA. Funkcija je podobna vgrajenemu jeziku 1C. Ima tri parametre:

  1. Izvorni niz.
  2. Številka znaka, s katerim naj se začne izbrana vrstica.
  3. Število znakov.

Zahteva. Besedilo= "IZBERI
PODNIZ("
"Vrstica:" ", 4, 3) KOT REZULTAT";

// Rezultat: v redu funkcija

ISNULL NULL je poseben podatkovni tip na platformi 1C:Enterprise. On je edini možen pomen

ta tip. NULL se lahko pojavi v poizvedbah v več primerih: pri povezovanju virov poizvedbe, če ustrezna vrednost ni bila najdena v eni od tabel; pri dostopu do podrobnosti neobstoječega predmeta; če je bila na seznamu poizvedbenih polj navedena NULL (na primer pri združevanju rezultatov izbire iz več tabel) itd. Ker NULL ni niti nič, niti prazen niz, niti celo vrednost Nedefinirano, pogosto ga je koristno nadomestiti s kakšnim uporabnejšim podatkovnim tipom. Temu je namenjena funkcija.

ISNULL.

  1. Ima dva parametra:
  2. Vrednost, ki se preverja.

Zahteva. Besedilo= "IZBERI
Vrednost za zamenjavo prvega parametra, če se izkaže, da je NULL.
; ISNULL(Vir.Ostanek, 0) AS Ostanek"
// Če je rezultat zahteve ostanek polja = NULL,

// potem bo nadomeščen z 0 in z njim lahko izvajate matematične operacije Funkcije ZMOGLJIVOST in

UVODPOVEZAVE Funkcije Te funkcije so zasnovane za pridobivanje predstavitev nizov različnih vrednosti. To pomeni, da pretvorijo sklice, števila, logične vrednosti itd. v golo besedilo. Razlika med njima je v tem, da funkcija in pretvori vse tipe podatkov v besedilo (niz) in funkcijo

Zahteva. Besedilo= "IZBERI
- samo povezave in vrne preostale vrednosti, kot so, ne pretvorjene.
REPRESENTATION(TRUE) AS Boolean,
PREDSTAVITEV (4) KOT Število,
ZASTOPSTVO (Vir.Povezava) AS Povezava,
;
REPRESENTATION(DATETIME(2016,10,07)) AS Date"
// Boolean = "Da", Število = "4", Link = "Dokument Blagajniški nalog št.... od..."

Zahteva. Besedilo= "IZBERI
// Datum="07.10.2016 0:00:00"
REPRESENTATIONREFERENCE(TRUE) AS Boolean,
REFERENCA REPREZENTACIJE(4) KOT ŠTEVILKA
PRESENTINGLINK(Source.Link) AS Link,
;
// Boolean = TRUE, Število = 4, Link = "Dokument Blagajniški nalog št.... od..."
// Datum=07.10.2016 0:00:00

// potem bo nadomeščen z 0 in z njim lahko izvajate matematične operacije VRSTA ZMOGLJIVOST VREDNOSTI VRSTE

// Rezultat: v redu VRSTA vrne podatkovni tip platforme 1C:Enterprise.

Zahteva. Besedilo= "IZBERI
VRSTA (število)
VRSTA (niz),
VRSTA (Dokument. Izdatni Blagajniški nalog)"
;

// Rezultat: v redu VREDNOSTI VRSTE vrne vrsto vrednosti, ki mu je bila posredovana.

Zahteva. Besedilo= "IZBERI
VREDNOSTI TIP (5) Številka AS,
VRSTA ("
"linija" ") AS String,
TYPE (Source.Link) AS Referenca
Iz imenika. Vir AS Source"
;
//Številka=Število, Niz=Niz, Imenik = Povezava do imenika.Vir

Te funkcije so priročne za uporabo, na primer, ko morate ugotoviti, ali je polje, prejeto v zahtevi, vrednost neke vrste. Na primer, pridobimo kontaktne podatke nasprotnih strank iz registra kontaktnih informacij (tam so shranjeni kontakti ne samo nasprotnih strank, ampak tudi organizacij, posameznikov itd.):

Zahteva. Besedilo= "IZBERI

OD

KJE
VREDNOSTI VRSTA(Podatki o kontaktu.Predmet) = VRSTA(Imenik.Nasprotne stranke)"
;

// Rezultat: v redu POMEN

// Rezultat: v redu Pomen omogoča uporabo konfiguracijskih objektov 1C neposredno v zahtevi, brez uporabe .

Dodajmo prejšnjemu primeru še en pogoj. Pridobiti morate samo telefonske številke svojih nasprotnih strank.

Zahteva. Besedilo= "IZBERI
Kontaktne informacije. Uvod
OD
Register informacij Kontaktni podatki KAKO
KJE
VREDNOSTI VRSTA(Podatki o kontaktu.Predmet) = VRSTA(Imenik.Nasprotne stranke)
IN ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Upoštevati je treba, da je to funkcijo mogoče uporabljati samo z vnaprej določenimi vrednostmi, tj. z vrednostmi, do katerih lahko dostopate neposredno iz konfiguratorja. Oziroma funkcija POMEN ni mogoče uporabiti z elementi imenika, ki so jih ustvarili uporabniki, lahko pa deluje s števili, z vnaprej določenimi elementi imenika, z vrednostmi EmptyLink.

Operater POVEZAVA

Operater POVEZAVA je zasnovan za preverjanje vrednosti, ki jih vrne zahteva, da ugotovi, ali pripadajo določenemu referenčnemu tipu. Isto nalogo je mogoče opraviti z uporabo funkcij VRSTA ZMOGLJIVOST VREDNOSTI VRSTE(ki imajo širši obseg in so bili obravnavani zgoraj).

Na primer, izbirna naloga kontaktni podatki nasprotne stranke je mogoče rešiti na ta način:

Zahteva. Besedilo= "IZBERI
Kontaktne informacije. Uvod
OD
Register informacij Kontaktni podatki KAKO
KJE
ContactInformation.Object LINK Directory.Counterparties"
;

Operater EKSPRES

Operater EKSPRES uporablja se v poizvedbah 1C v dveh primerih:

  • ko morate spremeniti značilnosti primitivnega tipa;
  • ko morate spremeniti polje s sestavljenim podatkovnim tipom v polje z enim samim tipom.

Primitivni tipi podatkov vključujejo: število, niz, datum, logična vrednost. Nekateri od teh tipov podatkov imajo dodatne značilnosti. Vrsta številka ima dolžino in natančnost, vrsto vrstica - dolžino ali neomejeno.

Operater EKSPRES vam omogoča, da ne spremenite vrste podatkov, temveč dodatne značilnosti. Na primer, vrvico z neomejeno dolžino lahko spremeni v vrvico z omejeno dolžino. To je lahko uporabno, če morate združiti rezultate poizvedbe glede na takšno polje. Ne morete združevati po poljih z neomejeno dolžino, zato ga pretvorimo v niz z dolžino 200 znakov.

Zahteva. Besedilo= "IZBERI
KOLIČINA (RAZLIČNO Prihod blaga in storitev. Povezava) AS Povezava
OD
Dokument. Prejem blaga in storitev KAKO Prejem blaga in storitev
ZDRUŽI PO
EXPRESS(Prejem blaga in storitev. Komentar KOT VRSTICA (200))"
;

V nekaterih primerih platforma 1C morda ne bo optimalno obdelala poizvedb do polj s sestavljenim podatkovnim tipom. Posledica tega so daljši časi izvajanja poizvedbe, zato je lahko koristna pretvorba vnaprej sestavljeni tip v samski.

Zahteva. Besedilo= "IZBERI
EXPRESS(Gibanje blaga.Promet.Naročilo KOT Dokument.Naročilo stranke).Datum KOT Datum naročila,
Gibanje blaga. Nomenklatura
OD
Register Akumulacije. Gibanje blaga. Promet AS Gibanje blaga Promet
KJE
Gibanje blaga. Promet. Dokument POVEZAVA NAROČILA. Naročilo stranke"
;

Operaterji IZBIRA ZMOGLJIVOST JE NIČ

Operater IZBIRA podobno kot operater ČE v vgrajenem jeziku 1C, vendar ima nekoliko zmanjšano funkcionalnost.

Recimo, da želimo prejeti kontaktne podatke iz registra informacij ContactInformation in hkrati v ločenem polju zahteve navesti, ali pripadajo nasprotni stranki ali posamezniku.

Zahteva. Besedilo= "IZBERI
Kontaktne informacije. Uvod,
IZBIRA
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
POTEM "
Nasprotna stranka "
DRUGA IZBIRA
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
POTEM "
posameznik"
ELSE "Nekdo drug" "
KONEC
KONČAJ KOT LASTNIK
OD
Register kontaktnih informacij AS Kontaktne informacije.
;

Kot je razvidno iz primera, pri oblikovanju IZBIRA za besedo je vedno pogoj KDAJ; uporabljena vrednost, če je pogoj za besedo resničen POTEM in vrednost, uporabljeno, če pogoj ni izpolnjen, za besedo DRUGAČE. Vsi trije oblikovalski elementi IZBIRA so obvezni. Izpustite element DRUGAČE, enako kot pri uporabi operaterja ČE v vgrajenem jeziku 1C je nemogoče. Tudi od operaterja IZBIRA ni analoga zasnove ELSEIF, vendar lahko vložite enega IZBIRA v drugem, kot je bilo storjeno v našem primeru.

Operater JE NIČ uporabljen pri oblikovanju IZBIRA za primerjavo polja poizvedbe z vrsto NULL.

Zahteva. Besedilo= "IZBERI
IZBIRA
KO JE VREDNOST NIČ, JE 0
ELSE Pomen
KONEC"
;

Poleg tega operater JE NIČ lahko uporabite v pogojih poizvedbe, na primer v stavku KJE.

Jezik poizvedb je eden temeljnih mehanizmov 1C 8.3 za razvijalce. S poizvedbami lahko hitro pridobite vse podatke, shranjene v bazi podatkov. Njegova sintaksa je zelo podobna SQL, vendar obstaja nekaj razlik.

Glavne prednosti poizvedovalnega jezika 1C 8.3 (8.2) pred SQL:

  • dereferenciranje referenčnih polj (sklicevanje ene ali več točk na podrobnosti objekta);
  • delo z rezultati je zelo priročno;
  • možnost ustvarjanja virtualnih tabel;
  • zahtevek je lahko napisan v angleškem in ruskem jeziku;
  • možnost blokiranja podatkov, da se izognete zastojem.

Slabosti jezika poizvedb v 1C:

  • za razliko od SQL poizvedbe v 1C ne dovoljujejo spreminjanja podatkov;
  • pomanjkanje shranjenih postopkov;
  • nezmožnost pretvorbe niza v število.

Oglejmo si našo mini vadnico o osnovnih konstruktih poizvedovalnega jezika 1C.

Ker poizvedbe v 1C omogočajo samo prejemanje podatkov, se mora vsaka poizvedba začeti z besedo »IZBERI«. Po tem ukazu se prikažejo polja, iz katerih je treba pridobiti podatke. Če določite »*«, bodo izbrana vsa razpoložljiva polja. Za besedo »OD« je označeno mesto, iz katerega se bodo izbirali podatki (dokumenti, registri, imeniki ipd.).

V primeru, obravnavanem spodaj, so imena celotne nomenklature izbrana iz imenika »Nomenklatura«. Za besedo "KAKO" so navedeni vzdevki (imena) za tabele in polja.

IZBERI
Nomenklatura Ime AS Ime nomenklature
OD
Imenik.Nomenklatura AS Nomenklatura

Zraven ukaza “IZBERI” lahko določite ključne besede:

  • RAZNO. Poizvedba bo izbrala samo vrstice, ki se razlikujejo v vsaj enem polju (brez dvojnikov).
  • PRVI št, Kje n– število vrstic od začetka rezultata, ki jih je treba izbrati. Najpogosteje se ta konstrukcija uporablja v povezavi z razvrščanjem (ORDER BY). Na primer, ko morate izbrati določeno število dokumentov, ki so novejši po datumu.
  • DOVOLJENO. Ta zasnova vam omogoča, da iz baze podatkov izberete samo tiste zapise, ki so na voljo trenutnemu uporabniku. Na podlagi uporabe te ključne besede bo uporabnik prejel sporočilo o napaki, ko bo poskušal poizvedovati po zapisih, do katerih nima dostopa.

Te ključne besede se lahko uporabljajo skupaj ali ločeno.

SPREMENITI

Ta predlog blokira podatke, da prepreči medsebojne konflikte. Zaklenjeni podatki ne bodo prebrani iz druge povezave, dokler se transakcija ne konča. V tem členu lahko podate določene tabele, ki jih je treba zakleniti. V nasprotnem primeru bodo vsi blokirani. Zasnova je pomembna samo za način samodejnega zaklepanja.

Najpogosteje se klavzula »FOR CHANGE« uporablja pri prejemanju stanj. Konec koncev, ko več uporabnikov dela v programu hkrati, medtem ko eden prejema stanja, jih lahko drugi spremeni. V tem primeru dobljeni ostanek ne bo več pravilen. Če s tem predlogom blokirate podatke, dokler prvi zaposleni ne prejme pravilnega stanja in z njim naredi vse potrebne manipulacije, drugi zaposleni bo moral počakati.

IZBERI
Medsebojni obračuni, zaposleni.
Medsebojni obračuni Bilanca
OD
Register medsebojnih obračunov z zaposlenimi AS Medsebojni obračuni
SPREMENITI

KJE

Zasnova je potrebna za uvedbo neke vrste izbire naloženih podatkov. V nekaterih primerih pridobivanja podatkov iz registrov je bolj smiselno izbirne pogoje določiti v parametrih virtualnih tabel. Pri uporabi »WHERE« se najprej pridobijo vsi zapisi, šele nato se izvede izbira, kar bistveno upočasni poizvedbo.

Spodaj je primer prošnje za pridobitev kontaktnih oseb za določeno delovno mesto. Izbirni parameter ima obliko: &ImeParametra (ime parametra je poljubno).

IZBIRA (CASE)

Zasnova vam omogoča, da določite pogoje neposredno v telesu zahteve.

V spodnjem primeru bo »AdditionalField« vsebovalo besedilo, odvisno od tega, ali je dokument objavljen ali ne:

IZBERI
VstopninaT&U.Link,
IZBIRA
KDAJ Opravljen sprejem T&U
POTEM "Dokument je bil sprejet!"
ELSE »Dokument ni bil objavljen ...«
KONEC KOT dodatno polje
OD
Potrdilo o prejemu blaga in storitev KAKO Prejem T&C

PRIDRUŽI SE

Spoji povezujejo dve tabeli na podlagi določenega razmerja.

PRIKLJUČEK LEVO/DESNO

Bistvo LEFT spoja je, da se prva podana tabela prevzame v celoti, druga pa se z njo poveže glede na pogoje povezave. Če ni zapisov, ki bi ustrezali prvi tabeli v drugi, se kot njihove vrednosti nadomesti NULL. Preprosto povedano, glavna tabela je prva navedena tabela in podatki druge tabele (če obstajajo) so že nadomeščeni z njenimi podatki.

Na primer, potrebno je pridobiti postavke postavk iz dokumentov »Prejem blaga in storitev«, cene pa iz informatorja »Cene postavk«. V tem primeru, če cena za katero koli pozicijo ni najdena, nadomestite NULL. Vsi artikli iz dokumenta bodo izbrani ne glede na to, ali imajo ceno ali ne.

IZBERI
Prejem & U. Nomenklatura,
Cene.Cena
OD
Dokument. Potrdilo o prejemu blaga in storitev KAKO
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Cene
Prejem programske opreme&U.Nomenklatura = cene.Nomenklatura

NA DESNICI je vse ravno obratno.

POPOLNA POVEZAVA

Ta vrsta povezave se od prejšnjih razlikuje po tem, da bodo posledično vrnjeni vsi zapisi tako prve kot druge tabele. Če v prvi ali drugi tabeli na podlagi podanega pogoja povezave ni najden noben zapis, bo namesto tega vrnjena vrednost NULL.

Pri uporabi polne povezave v prejšnjem primeru bodo izbrane vse postavke artiklov iz dokumenta »Prejem blaga in storitev« in vse zadnje cene iz šifranta »Cene artiklov«. Vrednosti zapisov, ki niso bili najdeni, tako v prvi kot v drugi tabeli bodo enake NULL.

NOTRANJI SPOJ

Razlika med INNER JOIN in FULL JOIN je v tem, da če zapis ni najden v vsaj eni od tabel, ga poizvedba sploh ne bo prikazala. Posledično bodo izbrane samo tiste postavke postavk iz dokumenta Prejem blaga in storitev, za katere obstajajo zapisi v informacijskem šifrantu Cene artiklov, če v prejšnjem primeru zamenjamo »POLNO« z »INTERNO«.

ZDRUŽI PO

Združevanje v poizvedbe 1C vam omogoča strnitev vrstic tabele (polja za združevanje) glede na določeno skupno značilnost (polja za združevanje). Polja za združevanje je mogoče prikazati samo z uporabo agregatnih funkcij.

Rezultat naslednje poizvedbe bo seznam vrst izdelkov z najvišjimi cenami zanje.

IZBERI
,
MAX(Cena.Cena) AS Cena
OD

ZDRUŽI PO
Cene. Nomenklatura. Vrsta nomenklature

REZULTATI

Za razliko od združevanja so pri uporabi vsot prikazani vsi zapisi in dodane so jim vrstice vsot. Razvrščanje v skupine prikaže samo posplošene zapise.

Rezultate lahko povzamemo za celotno tabelo (s ključno besedo “GENERAL”), za več polj, za polja s hierarhično strukturo (ključne besede “HIERARCHY”, “ONLY HIERARCHY”). Pri povzemanju rezultatov ni treba uporabiti agregatnih funkcij.

Oglejmo si primer, podoben zgornjemu primeru, z uporabo združevanja. V tem primeru bo rezultat poizvedbe vrnil ne le združena polja, ampak tudi podrobne zapise.

IZBERI
Cene.Nomenklatura. Vrsta nomenklature AS Vrsta nomenklature,
Cene. Cena KOT Cena
OD
Register cen nomenklature Posnetek najnovejših cen AS
REZULTATI
NAJVEČ (cena)
BY
Tipska nomenklatura

IMATI

Ta operator je podoben operatorju WHERE, vendar se uporablja samo za agregatne funkcije. Preostala polja, razen tistih, ki jih uporablja ta operater, morajo biti združena. Operator WHERE ni uporaben za agregatne funkcije.

V spodnjem primeru so najvišje cene artikla izbrane, če presegajo 1000, razvrščene po vrsti artikla.

IZBERI

MAX(Cena.Cena) AS Cena
OD
Register cen nomenklature Posnetek najnovejših cen AS
ZDRUŽI PO
Cene. Nomenklatura. Vrsta nomenklature
IMATI
MAXIMUM(Cene.Cena) > 1000

NAROČI PO

Operator ORDER BY razvrsti rezultat poizvedbe. Da bi zagotovili, da so zapisi prikazani v na trajni osnovi, uporablja se AUTO ORDER. Primitivni tipi so razvrščeni po običajnih pravilih. Referenčne vrste so razvrščene po GUID.

Primer pridobivanja seznama zaposlenih, razvrščenih po imenu:

IZBERI
Zaposleni. Ime AS Ime
OD
Imenik.Zaposleni KAKO Zaposleni
NAROČI PO
Ime
AVTO NAROČILO

Druge konstrukcije poizvedovalnega jezika 1C

  • ZDRUŽUJ– rezultati dveh poizvedb v eno.
  • ZDRUŽI VSE– podobno kot COMBINE, vendar brez združevanja enakih vrstic.
  • PRAZNA MIZA– včasih se uporablja pri združevanju poizvedb za podajanje prazne ugnezdene tabele.
  • KRAJ– ustvari začasno tabelo za optimizacijo kompleksnih poizvedb 1C. Take zahteve se imenujejo paketne zahteve.

Funkcije poizvedovalnega jezika

  • PODNIZ skrajša niz z določenega položaja na določeno število znakov.
  • LETO...DRUGO omogočajo pridobitev izbrane vrednosti številskega tipa. Vhodni parameter je datum.
  • ZAČETEK OBDOBJA in KONEC OBDOBJA uporablja se pri delu z datumi. Vrsta obdobja (DAN, MESEC, LETO itd.) je navedena kot dodatni parameter.
  • ADDKDATE vam omogoča dodajanje ali odštevanje določenega časa določene vrste od datuma (SEKUNDA, MINUTA, DAN itd.).
  • DATUM RAZLIKE določa razliko med dvema datumoma, ki označuje vrsto izhodne vrednosti (DAN, LETO, MESEC itd.).
  • funkcija nadomesti manjkajočo vrednost s podanim izrazom.
  • ZASTOPSTVO in ZASTOPSTVOPOVEZAVE dobite nizovno predstavitev podanega polja. Uporabite za vse vrednosti in samo za referenčne.
  • TIP, TIP VREDNOSTI se uporabljajo za določitev vrste vhodnega parametra.
  • POVEZAVA je logični operator primerjave za vrsto vrednosti atributa.
  • EKSPRES se uporablja za pretvorbo vrednosti v želeno vrsto.
  • DATETIME pridobi vrednost tipa "Datum" iz številskih vrednosti (leto, mesec, dan, ura, minuta, sekunda).
  • POMEN v zahtevi 1C se uporablja za označevanje vnaprej določenih vrednosti - imenikov, oštevilčenja, načrtov za vrste značilnosti. Primer uporabe: " Kjer je pravna oseba = vrednost (naštevanje. pravna oseba. posameznik)«.

Graditelj poizvedb

Za ustvarjanje poizvedb z 1C je zelo priročen vgrajen mehanizem - oblikovalec poizvedb. Vsebuje naslednje glavne zavihke:

  • “Tabele in polja” - vsebuje polja, ki jih je treba izbrati, in njihove vire.
  • “Povezave” - opisuje pogoje za strukturo POVEZAVE.
  • »Združevanje«—vsebuje opis struktur združevanja in seštevnih polj, ki temeljijo na njih.
  • “Pogoji” - je odgovoren za izbiro podatkov v zahtevku.
  • "Dodatno" - dodatne možnosti zahtevo, kot so ključne besede ukaza “SELECT” itd.
  • “Joins/Aliases” - navedene so možnosti združevanja tabel in določeni aliasi (konstrukt “KAKO”).
  • »Vrstni red« je odgovoren za razvrščanje rezultatov poizvedb.
  • »Skupaj« - podoben zavihku »Združevanje«, vendar se uporablja za konstrukcijo »SKUPAJ«.

Besedilo same zahteve si lahko ogledate s klikom na gumb “Zahtevaj” v spodnjem levem kotu. V tej obliki ga je mogoče popraviti ročno ali kopirati.


Konzola za zahteve

Če si želite hitro ogledati rezultat poizvedbe v načinu Enterprise ali odpraviti napake pri kompleksnih poizvedbah, uporabite . Vanj je zapisano besedilo zahteve, nastavljeni so parametri in prikazan je njen rezultat.

Poizvedovalno konzolo lahko prenesete na disk ITS ali prek .

NULL ni nič drugega kot odsotnost vrednosti. Veliko ljudi ga zamenjuje z vrednostjo »0« številke tipa, praznim sklicevanjem na objekt ali praznim nizom. Zaradi tega napačnega prepričanja nastanejo številne napake.

Vrednost NULL se prikaže, če se zahteva nanaša na neobstoječe polje, lastnost ali prekinjeno povezavo.

Temelji na SQL, ki ne dovoljuje običajnega testiranja enakosti za NULL. Spodaj sta dva načina za preverjanje NULL v 1C 8.3.

Funkcija poizvedovalnega jezika 1C 8.3 ISNULL() ima dva vhodna parametra:

  • izražanje, ki ga je treba preizkusiti;
  • nadomestni izraz.

Če je preizkušena vrednost NULL, bo ta funkcija vrnila vrednost nadomestnega izraza. Če vrednost ni NULL, bo vrnjen izraz, ki se testira.

Spodaj je primer. Izbere vse postavke postavk tabelarnega dela produkta iz dokumenta “Prejem blaga in storitev”. Z uporabo levega spoja je vsakemu artiklu dodeljena zadnja cena iz informacijskega registra »Cene artiklov«.

V tem primeru lahko pride do situacije, da za neko pozicijo preprosto ni cene v registru. V tem primeru nam bo funkcija ISNULL vrnila običajno ničlo. Če ga ne uporabljate, bomo ob poskusu izvajanja aritmetičnih operacij v polju »Cena« z vrednostjo NULL prejeli napako.

IZBERI

ISNULL(Cene.Cena, 0) AS TrenutnaCena
OD



KJE

V stavku SELECT JE NULL

Ekvivalent ISNULL() je ISNULL, ki se uporablja v stavku SELECT in preverja, ali je vrednost NULL. »IS« v tem primeru pomeni enakost in poizvedba v prejšnjem primeru bi bila videti takole:

IZBERI
Izdelki Nomenklatura AS Izdelek,
IZBIRA
KO je cena NIČ
POTEM 0
SICER Cene.Cena
END AS CurrentPrice
OD
Dokument o prejemu blaga in storitev kot blago
LEVA POVEZAVA RegisterInformation.PricesNomenclature.SliceLast AS Cene
Programski izdelki.Nomenklatura = Cene.Nomenklatura
KJE
Products.Link = &LinkToDocument

Razlike med funkcijama ISNULL() in IS NULL

Kot lahko vidite iz prejšnjih primerov, v obeh primerih zahteva vrne iste podatke. Funkcija ISNULL() je skrajšana različica SELECTION WHEN... IS NULL... END, vendar je še vedno boljša zaradi naslednjih razlogov:

  1. Funkcija ISNULL() optimizira poizvedbo. Prebere se enkrat, zato bo pri preverjanju kompleksnega izraza zahteva obdelana hitreje.
  2. Funkcija ISNULL() skrajša konstrukcijo, zaradi česar je poizvedba bolj berljiva.
  3. Pri izvajanju funkcije ISNULL() se nadomestni izraz zmanjša na tip izraza, ki se preskuša za vrste nizov (na dolžino niza) in številske vrste (na bitno globino).

Obstaja nekaj mehanizmov za delo z nizi v poizvedbah 1C. Najprej je mogoče dodati vrstice. Drugič, lahko vzamete podniz iz niza. Tretjič, strune je mogoče primerjati, tudi po vzorcu. To je verjetno vse, kar je mogoče narediti s strunami.

Dodajanje nizov

Za dodajanje vrstic v poizvedbo se uporablja operacija “+”. Dodate lahko samo nize omejene dolžine.

IZBERITE "Ime: " + Ime nasprotnih strank AS Stolpec 1 FROM Nasprotne stranke KJE Povezava

Funkcija podniza

PODNIZ(<Строка>, <НачальнаяПозиция>, <Длина>)

Analog funkcije Environment() iz objektnega modela. Funkcijo Substring() je mogoče uporabiti za podatke niza in omogoča izbiro fragmenta <Строки> , začenši s številko znaka <НачальнаяПозиция> (znaki v vrstici so oštevilčeni od 1) in dolžino <Длина> znakov. Rezultat izračuna funkcije ima vrsto niza spremenljive dolžine in dolžina se bo štela za neomejeno, če <Строка> ima neomejeno dolžino in parameter <Длина> ni konstanta ali večja od 1024.

Če je dolžina niza manjša od podane v drugem parametru, bo funkcija vrnila prazen niz.

Pozor! Uporaba funkcije SUBSTRING() za pretvorbo nizov neomejene dolžine v nize omejene dolžine ni priporočljiva. Namesto tega je bolje uporabiti cast operator EXPRESS().

Funkcija Podobna

Če se moramo prepričati, da atribut niza izpolnjuje določene kriterije, ga primerjamo:

SELECT Nasprotne stranke Stolpec 1 FROM Counterparties AS Counterparties Name = "Gazprom".

Kaj pa, če potrebujete bolj subtilno primerjavo? Ne samo enakost ali neenakost, ampak podobnost z določenim vzorcem? Prav za to je bila ustvarjena funkcija SIMILAR.

LIKE — Operator za preverjanje podobnosti niza z vzorcem. Analog LIKE v SQL.

Operator SIMILAR vam omogoča, da primerjate vrednost izraza, podanega levo od njega, z nizom vzorca, podanim desno. Vrednost izraza mora biti vrste niz. Če se vrednost izraza ujema z vzorcem, bo rezultat operatorja TRUE, sicer pa FALSE.

Naslednji znaki v nizu predloge so servisni znaki in imajo drugačen pomen od znaka niza:

  • % (odstotek): zaporedje, ki vsebuje poljubno število poljubnih znakov;
  • _ (podčrtaj): en poljuben znak;
  • […] (eden ali več znakov v oglatih oklepajih): vsak posamezen znak, naveden v oglatih oklepajih. Naštevanje lahko vsebuje obsege, na primer a-z, kar pomeni poljuben znak, vključen v obseg, vključno s konci obsega;
  • [^...] (v oglatih oklepajih znak za zanikanje, ki mu sledi en ali več znakov): kateri koli posamezen znak, razen tistih, navedenih za znakom za zanikanje.

Vsak drug simbol pomeni samega sebe in ne nosi nobene dodatne obremenitve. Če je treba enega od navedenih znakov zapisati kot samega sebe, mora biti pred njim znak<Спецсимвол>. sebe<Спецсимвол>(kateri koli primeren znak) je definiran v istem stavku za ključno besedo SPECIAL CHARACTER.

WiFi