Logične operacije (1s podjetje). Logične operacije (1s podjetje) Uporaba logičnega ALI v pogojih

Naslednji logične operacije:

NE logično NE (negacija); In logično IN;

ALI logično ALI.

Operandi logičnih operacij morajo biti logični izrazi. V tabeli. 2.5 prikazuje rezultate logičnih operacij na logičnih izrazih LP1 in LP2, ki prevzameta vrednosti prav(I) oz Napačno(L).

tabela resnice

Tabela 2.5

LV1 LV2 LV1 IN LV2 LV1 ALI LV2 NE LV1
in in in in L
in L L in L
L in L in in
L L L L in

Operater negacije je unarni operator, ki se nahaja levo od operanda. Vse druge obravnavane operacije so binarne.

2.6.5. PRIORITETA OPERACIJE

Vse operacije 1C se izvajajo v izrazu od leve proti desni v skladu z njihovo prednostjo (starostjo), to je, če imata dve zaporedni operaciji enako prednost, se najprej izvede leva operacija. Podizrazi v oklepajih se najprej ocenijo. V tabeli. 2.6 Operacije 1C so razvrščene v padajočem vrstnem redu glede na njihovo prednost.

Prednost operacije

Tabela 2. b

%*,/+, NE IN ALI<, <=, >, >=, =, <>

Komentar. Vsaka celica tabele vsebuje operacije z enako prioriteto.

Primer:

8 % 2 * 3 // Vrnil bo 0
8 % (2 * 3) // Vrnil se bo 2

Ker so logične operacije starejše od relacijskih operacij, je naslednji logični izraz napačen:

3>2 in 4< 5 // Так неверно

ker je logični podizraz 2 in 4 prvotno ovrednoten

operandov, ki niso prisotni prav oz Napačno. In to ni res.

Toda logični izraz je resničen

(3 > 2) in (4< 5) // Это pravi primer. Izračunajte rezultat logičnega izraza

(x/a=1) ali (b/(a+b)< 1) и не (б = а) или (х <>6) pri x = 6.0, a= 2,0 in b=3,0.

Če izračunamo rezultat operacij podizrazov, zaprtih v oklepajih, dobimo:

Napačno oz prav in ne Napačno oz Napačno.

Napačno oz prav in prav oz Napačno. Po početju prav in pravilno napačno oz prav oz Napačno. končni rezultat: prav.

2.7. NIVI

niz je podatkovni objekt, ki vsebuje več vrednosti, do katerih dostopa njihovo število ( indeks).

Število elementov v nizu se imenuje njegovo velikost. Velikost matrike je lahko samo celoštevilska dobesedna konstanta.

Operater spremenljivke;

deklarira enodimenzionalno matriko (vektor) a iz petih elementov. Elementi matrike imajo naslednja imena: a, a, a, a in a. V teh imenih so vrednosti 1-5 indeksi elementov matrike.

Šteje se, da je niz definiran, če so podane vrednosti vseh njegovih elementov. Za nastavitev začetnih vrednosti elementov matrike (inicializacija matrike) je možna naslednja zanka:

za in = 1 do 5 ciklov

Naloge

spremenite vrednosti 2. in 5. elementa matrike a.

Na splošno se številski izrazi lahko uporabljajo kot indeksi matrike, imenovani indeksni izrazi. Na primer:

a = 9,1; // Spremeni vrednost 3. elementa matrike a

Če se izraz indeksa matrike ovrednoti na necelo število, se kot indeks vzame celo število te vrednosti. Na primer:

a = 9,1; // Spremeni vrednost 1. elementa matrike a

Vrednost indeksa ne sme presegati meja matrike. Torej, ko delate s predhodno deklarirano matriko a od petih elementov so napačni operatorji

Elementi istega niza so lahko različnih vrst. Na primer:

a = '25.11.01'; // Element tipa Datum Elementi niza so lahko agregatnega tipa. Na primer:

сtr = CreateObject("Imenik.Employees");

tabela = CreateObject("Tabela");

Niz ne more vsebovati drugih nizov kot elementov.

Matrika je lahko formalni parameter programske komponente (postopka ali funkcije). V tem primeru velikost matrike ni določena, oglati oklepaji pa so ohranjeni. Za določitev velikosti matrike, posredovane proceduri (funkciji), se uporablja vgrajena funkcija Size.

Primer:

postopek Inicializacija spremenljivke(-ov) matrike, velikost;

velikostA = Velikost(a); // Vgrajena funkcija Size bo vrnila velikost matrike a

za yin = 1 s ciklom zmA

a[in] = 1; // Zdaj so vsi elementi matrike enaki enemu koncu Loop;

endProcedures // InicializationArray

spremenljivka procedure Execute();

// Klicanje postopka, ki nastavi začetne vrednosti elementov matrike

// Njegov dejanski parameter je ime matrike InitializationArray(a);

endProcedures // Izvedi

Pogoji v poizvedbah se uporabljajo, ko ni treba izbrati vseh zapisov iz tabele infobaze 1C, temveč le tiste, ki ustrezajo enemu ali več izbirnim kriterijem.

Pogoje v poizvedbah 1C je mogoče določiti na različne načine, odvisno od značilnosti same poizvedbe in vira podatkov.

Ključna beseda "KJE"

Ključna beseda KJE uporablja se v poizvedbah 1C, ko se pogoj uporabi za zapise, izbrane iz podatkovne baze. V tem primeru se zapisi filtrirajo v fazi izbire iz tabele informacijske baze.

Na primer, obstaja miza Izplačila, ki vsebuje seznam zaposlenih in izplačanih plačil.

Če morate izbrati plačila v višini najmanj 10.000, bo zahteva izgledala tako

Prošnja. Besedilo= "IZBERI
| Plačila.Zaposleni,
| Plača.Plača
| OD
| Izplačila
|KJE
| Izplačila.Plača >=10000"

Rezultat poizvedbe bo naslednja tabela.

Ključna beseda "HAVING"

Ključna beseda IMATI v poizvedbah 1C se uporablja, ko je treba narediti izbor med že izbranimi zapisi. Ta ključna beseda se na primer uporablja, ko želite filtrirati združene zapise v rezultatu poizvedbe.

Vrnimo se na zgornji primer. Recimo, da moramo izbrati iz tabele Izplačila zaposlenih, ki so skupaj prejeli več kot 20.000. Če želite to narediti, morate najprej vnesti razvrščanje po poljih Zaposleni, izračunajte vsoto po polju Plača za vsakega zaposlenega, nato pa iz prejetih evidenc izberite tiste, ki izpolnjujejo pogoj.

Besedilo zahteve bo videti takole.

Prošnja. Besedilo= "IZBERI
| Plačila.Zaposleni,
| AMOUNT(Plačila.Plača) AS Plača
| OD
| Izplačila
|SKUPINA BY
| Plačila.Zaposleni
|IMETI
| AMOUNT (Plačila. Plača) > 20000"

Rezultat te poizvedbe bo takšen.

Ta primer jasno kaže razliko med ključnimi besedami KJE in IMATI.Če bi uporabili besedo KJE namesto IMATI, potem bi najprej opravili selekcijo evidenc s plačo več kot 20.000, nato pa bi zanje izračunali znesek za vsakega zaposlenega. Kot rezultat bi dobili prazen rezultat poizvedbe, ker noben zaposleni ni prejel več kot 20.000 v enem plačilu.

Izbirni pogoji v virtualnih registrskih tabelah

Vsi registri v sistemu 1C:Enterprise imajo navidezne tabele: akumulacijski registri, registri informacij, računovodski registri. Obstajata dva načina za nastavitev pogojev za navidezne tabele:

  1. skozi parametre virtualne tabele;
  2. prek razdelkov poizvedb KJE oz IMATI.

Razlike med odseki KJE in IMATI smo že upoštevali. Če želite razumeti, kako se pogoji v teh razdelkih poizvedbe razlikujejo od pogojev v parametrih navidezne tabele, morate razumeti, kaj je navidezne registrske tabele v 1C. Njihova pomembna lastnost je, da ne obstajajo v informacijski bazi. To je orodje, ki nam ga nudi platforma 1C: Enterprise za optimizacijo konfiguracije.

Torej, če je pogoj določen v parametrih navidezne tabele, se uporablja v fazi njenega oblikovanja iz zapisov prave tabele registrov. In če v odsekih KJE oz IMATI, nato - v zapise že oblikovane virtualne tabele.

Razmislite o primeru. Podane tabele periodičnega registra informacij valute.

Za najmanjši datum je treba izbrati valute, katerih menjalni tečaj je manjši od 30 rubljev.

Poizvedba s pogojem v parametrih virtualne tabele bo videti tako:

V tem primeru bomo dobili en vnos: Dolar 28.3 od 01.02.2007. To bo prava rešitev problema.

Če postavimo pogoj v odsek KJE, potem bo rezultat poizvedbe prazen, saj bo najprej narejen izrez prvih za vsako valuto (posledično bomo dobili dva zapisa od 01.01.2007 30,25 dolarja in 40,5 evra), nato pa bodo med njimi izbrani zapisi, ki izpolnjujejo pogoj. Toda oba sta prejela zapisno stanje no< 30 ne zadovoljijo.

Za polja poizvedbe je mogoče uporabiti različne funkcije. V tem razdelku bom obravnaval najpogosteje uporabljene (sam) od njih.

DATUM ČAS- nastavi konstantno polje z vrsto datuma. sintaksa:

DATUM ČAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Zahteva.Besedilo =
"IZBERI
| DATETIME(2013, 1, 1) AS OMG";// 1. januar 2013

DATUMSKA RAZLIKA- vrne razliko 2 datumov v podani dimenziji (leto, mesec, dan, ura, minuta, sekunda). sintaksa:

DATUM RAZLIKA(<Дата1>, <Дата2>, <Тип>)
Zahteva.Besedilo =
"IZBERI
| DATEDIFF(DATETIME(2013, 2, 28), DATETIME(2013, 1, 1), DAY)
| KOT DNI DO KONCA zime«;

POMEN- nastavi konstantno polje z vnaprej določenim zapisom ene od tabel baze podatkov, lahko posredujete tudi ničelno referenco. sintaksa:

POMEN (<Имя>)
Zahteva.Besedilo =
"IZBERI
// vnaprej določen element imenika
| VALUE (Referenca. Valute. Rublji) AS Ruble,
// povezava praznega dokumenta
| VALUE(Document.Customer Invoice.NullReference) AS EmptyInvoice,
//enum vrednost
| VALUE(Enumeration.GenderPersons.Male) AS moški,
//preddefiniran račun iz kontnega načrta
| VALUE(Kontni načrt. Samonosno. Blago) AS račun_41";

IZBIRA- analog konstrukcije IF za jezik poizvedb 1C. sintaksa:

IZBIRA
KDAJ<Выражение>POTEM<Выражение>
SIRUČE<Выражение>
KONEC
Zahteva.Besedilo =
"IZBERI
//če je cena manjša od 100, bo poizvedba še vedno vrnila 100
// sicer bo zahteva vrnila pravo ceno
| IZBIRA
| KDAJ Izdelki.Cena > 100
| POTEM Blago.Cena
| DRUGO 100
| KONEC KOT CENA
| OD

POVEZAVA<Имя таблицы>
Zahteva.Besedilo =
"IZBERI
//če je vrsta vrednosti registrarja Potrdilo o dokumentu,
// potem bo zahteva vrnila "Blago prejeto", v nasprotnem primeru "Blago prodano"
| IZBIRA
| KDAJ Ostane Registrar LINK Dokument Potrdilo
| POTEM ""Prejem blaga""
| DRUGO ""Prodaja blaga""
| KONEC KOT POGLED NA GIBANJE
| OD
| Akumulacijski register. Ostane AS ostaja";

MED- preveri, ali je vrednost v območju. sintaksa:

MED<Выражение>in<Выражение>
Zahteva.Besedilo =
//dobite vse izdelke v cenovnem razponu od 100 do 1000
"IZBERI
| Izdelki.Izdelek
| OD
|KJE
| Blago.Cena MED 100 IN 1000";

AT in V HIERARHIJI- preverite prisotnost vrednosti na poslanem seznamu. IN HIERARCHY bo razširil tudi hierarhične elemente navzdol in poiskal vrednost med podrejenimi elementi. sintaksa:

AT(<СписокЗначений>), V HIERARHIJI(<СписокЗначений>)
Zahteva.Besedilo =
//pridobite vse podračune 41. in 10. računa
"IZBERI
| Samonosna.Referenčni račun AS
| OD
| Kontni načrt Samonosna AS Samonosna
|KJE
| Samonosno.Referenca V HIERARHIJI (VREDNOST(Kontni načrt.Samonosno.Blago),
| VREDNOST(Kontni načrt. Samonosna. Materiali))";

LIKE- omogoča primerjavo niza z vzorcem, ki se uporablja, ko iskalni niz ni trdo kodiran. Izdelava predloge:

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

sintaksa:

LIKE"<ТекстШаблона>"
Zahteva.Besedilo =
//poišči vse stole v imeniku nomenklature
"IZBERI
| Izdelki.Izdelek
| OD
| Imenik Blago AS Blago
|KJE
| Blago.Ime LIKE ""orodje%""";
// ta poizvedba bo vrnila stol, stol, stol, pisarniški stol itd.,
// vendar tabela ne bo na tem seznamu

JE NIČ- če polje ni definirano, ga definira v podanem izrazu. sintaksa:

ISNULL(<Выражение>, <Выражение>)
Zahteva.Besedilo =
//Če polje ni definirano (NULL)? nato ji daj prazno referenco
"IZBERI
| ISNULL(Products.Reference, VALUE(Catalog.Products.EmptyReference)) AS Product
| OD
| Priročnik. Blago AS Blago";

Opažam, da je treba NULL obdelati, ker to je zelo "muhast" tip (sistem 1C:Enterprise 8 definira poseben tip NULL z enim elementom). Če poskusite primerjati s takšno vrednostjo ali jo dodeliti, boste zagotovo naleteli na napako, zato ne pozabite na to konstrukcijo. Ko se lahko pojavi NULL:

  • po združevanju tabel, razen interne (naslednji članek o spojih);
  • po izbiri atributov, definiranih samo za skupine imenikov in obratno;
  • po izbiri stolpca dnevnika dokumentov, medtem ko trenutni dokument v tem stolpcu nima vključenih podrobnosti.

To ni popoln seznam funkcij poizvedovalnega jezika 1C 8, če vas zanima delo drugih - napišite v komentarjih.

Praviloma se študij katerega koli programskega jezika začne s primerom pisanja prvega preprostega programa ("Hello world!"). To se naredi z namenom, da vizualno prikažemo delo z osnovnimi skladenjskimi konstrukcijami. Pri tem običajnem načinu podajanja snovi pri učenju novega razvojnega okolja ne bomo naredili izjeme, zato je treba naš prvi članek obravnavati v enakem smislu. V njem bomo podrobno analizirali odgovore na naslednja vprašanja v zvezi s programiranjem na platformi 1C:Enterprise 8:

  • Kje in s kakšno pomočjo napisati programsko kodo v vgrajenem jeziku 1C?
  • Kaj so programski moduli, kakšna so pravila za delo z njimi?
  • Kaj je spremenljivka, kako delati z njo, kako in kje jo razglasiti?
  • Kaj so primerjalni, dodelitveni in pogojni operatorji in kako jih uporabljate?
  • Boolove operacije - kaj so in kako delati z njimi?
  • Zakaj so zanke potrebne in kako jih uporabiti?

Članek bo koristen za vse tiste, ki še niste seznanjeni z razvojem na platformi 1C: Enterprise 8, vendar se želite naučiti programirati v 1C.

Uporabnost

Gradivo je relevantno za platformo "1C:Enterprise 8" izdaje 8.2. in 8.3.

Spremenljivke in operatorji

V tem članku začnemo preučevati vgrajeni jezik 1C:Enterprise 8. Izvedljiva koda je v programskih modulih.

Obstaja precej veliko število modulov, ki so zasnovani za obravnavo različnih dogodkov.

Tako se prijava uporabnika obdeluje v enem modulu, obdelava klika uporabnika na določen gumb pa v povsem drugem.

Tako vsak modul opisuje obnašanje konfiguracije na določeni točki. Modul vsebuje najprej razdelek za deklaracijo spremenljivke. tiste. nekatere spremenljivke lahko deklariramo v modulu.

V prihodnosti jih bo mogoče uporabiti v postopkih in funkcijah tega modula. Če je spremenljivka definirana s ključno besedo Export, bo na voljo zunaj tega modula. Primer vrstice deklaracije spremenljivke:

Rem skladišče, oddelek, skladiščnik izvoz;

Po deklaraciji spremenljivk je del postopkov in funkcij.

Za njimi je del glavnega programa, ki se bo izvajal ob dostopu do tega modula.

Na primer, v glavnem razdelku programa lahko inicializirate spremenljivke, t.j. daj jim nekaj začetnih vrednosti:

stanje=1;
NewExpression=2;
rezultat=3;

Modul si lahko predstavljamo kot kombinacijo različnih operaterjev, ki izvajajo različna dejanja, ki jih potrebujemo.

Ločilo operatorjev je znak ";" (podpičje). Ta znak je znak konca operaterja. tiste. operator lahko zapišemo takole:

Rezultat=100x200
+400
-600;

Ni pomembno, v koliko vrsticah je izjava.

Seveda je pogosto bolj priročno in jasneje operaterja postaviti na eno vrstico, včasih pa so operaterji precej dolgi (število vrstic lahko razumno doseže več deset).

Podpičje je mogoče izpustiti v končnem stavku dane konstrukcije, na primer v postopku. tiste. naslednja koda bo delovala:

Postopek CalculateValue()

Začetna vrednost = 100;
IntermediateValue = ZačetnaValue / 5;
KončnaValue = ZačetnaVrednost+VmesnaValue

Končni postopek

Vendar pa je v končnem stavku bolje uporabiti podpičje. Možno je, da se bo sčasoma gradnja nadaljevala, končni operater pa ne bo več dokončen. To situacijo bomo morali posebej spremljati.

Spremenljivke so zasnovane tako, da vsebujejo določeno vrednost katere koli vrste podatkov. Uporabljajo se za vmesno shranjevanje informacij za obdelavo.

V skoraj vsakem programskem modulu, ki izvaja neko dejanje, so različne spremenljivke. Vnašanje spremenljivk po vrednostih v platformi 1C: Enterprise 8 je mehko.

Na primer, spremenljivka lahko vsebuje vrednost enega podatkovnega tipa in nekaj vrstic pozneje drugega tipa:

Ustvarjeno = napačno;
Ustvarjeno = res;
Ustvarjeno =100;

V prvih dveh stavkih je vrednost spremenljivk logična, v tretjem pa se spremeni v številsko vrednost. tiste. tipkanje je odvisno od vrednosti, ki je dodeljena tej spremenljivki.
Spremenljivke je mogoče deklarirati na dva načina:

  • implicitna metoda (omemba na levi strani operatorja dodelitve opisuje to spremenljivko, ni predhodnega opisa spremenljivke z besedo Spremenljivka, torej ni posebnega dela deklaracije spremenljivk);
  • eksplicitna deklaracija spremenljivk (Variable ControlData;). Izrecna deklaracija spremenljivk se uporablja, na primer, če se pričakuje kasnejši prenos te spremenljivke v funkcijo.

Za imena spremenljivk se uporablja klasičen opis identifikatorja. Identifikator je sestavljen iz črk, številk in podčrtajev. Identifikator se mora začeti s črko ali podčrtajem.

V tem primeru mora ime spremenljivke odražati pomen te spremenljivke. Imena spremenljivk z eno črko (kot so A, B, C) so slab primer. Ne odražajo bistva spremenljivk.

Primeri pravilnih imen spremenljivk: števec (povečajoča spremenljivka za zanko), izvajalec. Če ime spremenljivke vsebuje več besed, se mora vsaka nova beseda zaradi jasnosti začeti z veliko začetnico.

Rezerviranih besed, kot so postopek, funkcija, zanka, končni cikel itd., ni mogoče uporabiti v imenih spremenljivk. (te konstrukcije so v programskem modulu označene z rdečo).

Rezervirane besede so vgrajeni jezikovni operaterji in jih je kar nekaj. Vsi so predstavljeni v Pomočnik za sintakso.

Upoštevati je treba, da podatkovni tipi niso rezervirane besede (na primer Array, Boolean, True, False). Sistem bo takšna imena spremenljivk pravilno zaznal.

Pri pisanju programske kode velike in male črke niso pomembne. Na primer, besedo Postopek lahko napišemo z velikimi in malimi črkami. Poleg tega se lahko v besedi prepletajo velike in male črke.

Za platformo ni pomembno. Po pravilih lepega vedenja pa mora biti začetek besede napisan z veliko začetnico, vse druge črke z malimi.

O jeziku. Uporabljate lahko ruščino in angleščino ter kombinacijo dveh jezikov. Če je komu priročno, lahko varno uporabite angleščino za pisanje programske kode, pa tudi združite ruščino in angleščino. Za platformo je vseeno.

Veliko imen v angleščini si je težko zapomniti. Pri uporabi kombinacije dveh jezikov se berljivost programske kode poslabša.

Boolove operacije

Primerjalni operaterji zelo pogosto uporabljajo logično logiko, ki vrne True ali False.

V pogojnem operaterju lahko na primer primerjate: Če je dogodek = prodaja, potem bo algoritem šel po eni veji (tj. če je vrednost True), v skladu s pogojem False se izvede druga veja algoritma.

Pogoji so lahko precej zapleteni, lahko jih kombiniramo z uporabo naslednjih operatorjev: IN, ALI in NE. Torej, za operator AND:

Resnica IN Resnica = Resnica;
True AND False = Napačno;
False IN True = False;
False IN False = Napačno.

Za operator ALI je dovolj, da je eden od operandov enak True, potem bo vrednost kombinacije True. Vrednost je False samo, če sta oba operanda False.

Operater NOT preprosto obrne trenutno vrednost (False v True, True to False).

S kombinacijo teh operaterjev lahko zgradite precej zapletene pogoje. Pri sestavljanju zapletenih pogojnih stavkov upoštevajte prednost.

Najvišjo prednost ima operator NOT, ki mu sledi operator AND, ki mu sledi OR. Vse, kar je v oklepaju, ima najvišjo prednost in se najprej izvede.

Na primer, dajmo prednost (zaporedje izvajanja) za operacije v zgornjem izrazu:

NE(pogoj1 ALI pogoj2) IN pogoj3 ALI pogoj4
1.Rezultat1 = (pogoj1 ALI pogoj2);
2. Rezultat2 = NE Rezultat1;
3. Rezultat3 = Rezultat2 IN Pogoj1;
4. Rezultat = Rezultat3 ALI Pogoj4;

Obstaja pravilo preoblikovanja:

NE (pogoj1 ALI pogoj2) = NE pogoj1 IN NE pogoj2.

Vendar si ne bi smeli vedno prizadevati za poenostavitev izraza, saj je razširjen izraz pogosto logično lažje brati.

operaterja dodelitve

Operatorja dodelitve ne smemo zamenjevati z enakostjo, čeprav imata enako črkovanje.

Načelo operatorja dodelitve je tako, da se levi vrednosti (spremenljivka na levi strani) dodeli vrednost, ki je desno od znaka enakosti. Vzemimo primer:

Spremenljivka1 = Spremenljivka2 = Spremenljivka3;

Spremenljivki1 je pripisana vrednost enakosti iz Booleove logike, t.j. True, če je spremenljivka2 = spremenljivka3, ali False drugače.

Pri testiranju za položaj programerja začetnika se pogosto uporablja naloga: zamenjaj vrednosti dveh spremenljivk.

Ta problem je rešen z uporabo operatorja dodelitve in ima dve rešitvi.

Rešitev #1 z uporabo začasne spremenljivke:
TempVar = Spremenljivka1;
Spremenljivka1 = Spremenljivka2;
Spremenljivka2 = Temp. spremenljivka;

Rešitev #2:
Spremenljivka1 = Spremenljivka1 + Spremenljivka2;
Spremenljivka2 = Spremenljivka1 – Spremenljivka2;
Spremenljivka1 = Spremenljivka1 – Spremenljivka2;

Pogojni operater

Obstaja tak operator If, po katerem je treba opisati nek pogoj (sam pogoj je lahko precej velik). Pogoju sledi beseda Potem in stavki, ki jih je treba izvesti.

Temu lahko sledi ključna beseda Else in vrsta drugih stavkov. Če obstaja več različnih pogojev, lahko uporabite vrsto ključnih besed Drugače Če(glej primer spodaj). Celotna struktura mora biti zaključena s ključno besedo EndIf sledi podpičje.

Poleg preprostih in večkratnih pogojev obstaja skrajšana oblika pogojnega operaterja: ?(Pogoj, Izraz1, Izraz2);

Če je pogoj resničen, potem Izraz 1, drugače - Izraz 2. Primer kode: ExpensiveItem = ?(Item.Price>100000, True, False);

V praksi namesto primerjalnih zapisov z vrednostjo Prav (laž) vrsta:

Če je spremenljivka = res, potem
in
Če je spremenljivka = False, potem

dejansko se uporablja enakovredni zapis:

Če je spremenljivka potem
in
Če NI spremenljivka, potem

Ciklični operaterji

Za kakršen koli cikel je s ključno besedo potrebna izrecna navedba konca tega cikla Končni cikel. Obstaja več vrst ciklov.

Cikel po števcu- cikel z določenim številom ponovitev. Pogoj za izstop iz zanke je, da je bila mejna vrednost presežena. Primer uporabe za izračun vrednosti A!

A = 5;
Faktorial = 1;
Za števec = 1 Z zanko
Faktorski = Faktorski * Števec;
EndCycle;

Zanka po pogoju– se izvede, medtem ko je pogoj tega cikla resničen. Primer:

Preostala vsota = 1000;
Cena dodatnega artikla = 243;
Količina = 0;
Medtem ko preostali znesek>0 cikel
Količina = količina+1;
Preostali znesek = Preostali znesek - Količina * Cena dodatnega blaga;
Cena ekstra artikla = cena ekstra artikla * 0,8;
Končni cikel
Količina = količina-1;

Ta zanka izračuna, koliko enot izdelka je mogoče kupiti za določen znesek (1000 rubljev), če se po nakupu vsake enote izdelka njegova prejšnja cena pomnoži s faktorjem 0,8. Začetna cena blaga je 243 rubljev.

Primer napake pri uporabi tovrstne zanke s strani začetnikov je večna zanka, ko je pogoj zanke sprva resničen, znotraj same zanke pa se nikakor ne spremeni.

Prelistajte zbirke (drugo ime je Za vsako).

Platforma ima dokaj veliko število zbirk (to so vsebniki, ki vsebujejo elemente določene vrste).

Elemente zbirke lahko ponavljate s posebno vrsto zanke.

Na primer, obstaja niz številk, izračunati morate vsoto vseh elementov matrike:

vsota = 0;
Za vsak element iz zanke matrike
Vsota=Vsota+Postavka;
EndCycle;

Obstajajo posebni operaterji za zanke: Nadaljuj in prekiniti.

Če na neki točki v zanki izvedba nadaljnjih stavkov te zanke postane nesmiselna, se uporabi operator za vrnitev na začetek zanke in organiziranje naslednje zanke. Nadaljuj.

Operater prekiniti omogoča, da se zanka konča, tudi če je pogoj zanke resničen.

S tem se zaključuje naše prvo spoznavanje razvoja v notranjem jeziku 1C.

Kaj pa Hello World? Nismo ga še napisali, kajne? Ja, ampak nič vam ne preprečuje, da bi to storili sami, ker. znanje je že dovolj. No, če to ne deluje, lahko pogledate tukaj.

V tem članku želimo razpravljati z vsemi vami funkcije jezika poizvedb 1s, tako dobro, kot jezikovne konstrukcije poizvedbe. Kakšna je razlika med funkcijo in strukturo? Funkcija se kliče z oklepaji in možnimi parametri v njih, konstrukcija pa je zapisana brez oklepajev. Nedvomno vse konstrukcije in funkcije poizvedovalnega jezika 1s narediti proces pridobivanja podatkov fleksibilen in večnamenski. Te funkcije in konstrukcije veljajo za polja poizvedbe, nekatere pa tudi za pogoje.

Jezikovne funkcije poizvedbe 1s

Od jasnega opisa funkcije jezika poizvedb 1s je veliko manj pogost kot opis struktur, smo se odločili, da začnemo iskati funkcije. Zdaj analizirajmo vsakega posebej in opišemo njegov namen, sintakso in primer uporabe, tako:

1. Funkcija DATUM ČAS- ta funkcija ustvari konstantno polje z vrsto "Datum".

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

Primer uporabe:

2. Funkcija DATUM RAZLIKA- vrne razliko dveh datumov v eni od dimenzij (leto, mesec, dan, ura, minuta, sekunda). Meritev se posreduje kot parameter.

sintaksa: DATUM RAZLIKA(<Дата1>, <Дата2>, <Тип>)

Primer uporabe:

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

3. Funkcija VALUE- nastavi konstantno polje z vnaprej določenim vnosom iz baze podatkov, lahko dobite tudi ničelno referenco katere koli vrste.

Sintaksa: VALUE(<Имя>)

Primer uporabe:

Query.Text = "IZBERI //preddefiniran element | VALUE(Valuta.Dolar.Catalog.Dollar) AS Dollar, //prazna referenca | VALUE(Document.IncomingGoodsServices.EmptyReference) AS Prejem, //prenos vrednosti | VALUE(Transfer.LegalIndividual . Posameznik) AS Posameznik, //preddefiniran račun | VREDNOST(Kontni načrt.Samonosilni.Materiali) AS Račun_10" ;

4. SELECT funkcija- imamo analogno konstrukcijo IF, ki se uporablja v kodi, le ta se uporablja v poizvedbah 1C.

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

Primer uporabe:

Request.Text = //če je znesek večji od 7500, potem mora biti popust v višini 300 rubljev, //torej, če se pogoj sproži, potem funkcija //vrne znesek - 300 //v nasprotnem primeru zahteva bo preprosto vrnil Znesek "IZBERI | IZBERI | KDAJ PMIncome.Znesek > 7500 | THEN PTReceipt.Amount - 300 | ELSE PTReceipt.Amount | END AS Znesek Discounted |FROM | Dokument.ReceiptofGoodsServices.Goods ASTRe";

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

sintaksa: EXPRESS(Ime polja AS TypeName)

Primer uporabe:

Query.Text = "IZBERI RAZLIČNO | Prodaja.Registrator.Številka, | IZBERI | KDAJ Sales.Registrar REF Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar REF Document.Im. THEN EXPRESS(Sales.Registrar AS Document.Release) | END | ... | END AS Številka | OD | Register akumulacije.Nakupi AS Nakupi";

Še vedno obstaja varianta uporabe funkcije EXPRESS na poljih mešanih vrst, kjer se takšne srečujejo? Najpreprostejši primer je "registrator" za kateri koli register. Zakaj bi torej morali vrsto kvalificirati v registrarju? Poglejmo situacijo, ko iz registratorja izberemo polje "Številka", iz katere tabele bo izbrana številka? Pravilen odgovor vseh! Zato, da bi naša poizvedba delovala hitro, moramo s funkcijo EXPRESS podati eksplicitni tip

Primer uporabe:

Query.Text = "IZBERITE | EXPRESS(Nomenklatura.Komentar AS String(300)) AS Komentar, | EXPRESS(Nomenclature.Sum AS Številka(15,2)) AS Sum |FROM | Lookup.Nomenclature AS Nomenklatura";

6. Funkcija ISNULL(alternativno črkovanje IS NULL) - če je polje tipa NULL, ga nadomesti drugi parameter funkcije.

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

Primer uporabe:

Upoštevajte tudi, da je zaželeno, da tip NULL VEDNO zamenjate z neko vrednostjo, ker primerjava z NULL se vedno oceni na FALSE, tudi če primerjate NULL z NULL. Najpogosteje se vrednosti NULL tvorijo kot rezultat združevanja tabel (vse vrste povezav razen notranjih).

Query.Text = //Izberi celotno postavko in njena stanja //če v nekem elementu ni ravnotežja, bo tam polje //NULL, ki bo nadomeščeno z vrednostjo 0 "SELECT | No.Ref, | ISNULL (GoodsInWarehouseRemains.InStockRemain, 0) KAKO Ostanek | IZ | Imenik. Nomenklatura AS Nom | LEFT JOIN Akumulacijski register.

7. Funkcija PREDSTAVITVE- vam omogoča, da dobite predstavitev polja zahteve.

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

Primer uporabe:

Query.Text = "IZBERI | REPRESENTATION(Free RemainsRemains.Nomenclature) AS Nomenklatura, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Acumulation Register.FreeinsRemasRema Freemas"

Konstrukcije v poizvedovalnem jeziku 1s

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

1. Gradbena LINK- je operater za preverjanje logičnega referenčnega tipa. Najpogosteje se pojavlja pri testiranju polja sestavljenega tipa za določeno vrsto. sintaksa: POVEZAVA<Имя таблицы>

Primer uporabe:

Query.Text = //če je vrsta vrednosti registrarja prejem dokumenta, //potem bo zahteva vrnila "Incoming Goods", sicer "Prodaja blaga" "SELECT | SELECT | WHEN Remains.Registrar LINK Document.Incoming GoodsServices | POTEM ""Prihod" | DRUGO "Odhodek" | KONEC KAO Vrsta gibanja | IZ | Register akumulacije. Ostanki blaga v skladiščih AS Ostanki ";

2. Gradnja MED- ta operater preveri, ali je vrednost znotraj navedenega obsega.

sintaksa: MED<Выражение>in<Выражение>

Primer uporabe:

Query.Text = //dobi vso nomenklaturo, katere koda je v območju od 1 do 100 "IZBERI | Nomenklatura.Referenca |FROM | Katalog.Nomenklatura AS Nomenklatura |KJE | Nomenklatura.Koda MED 1 IN 100" ;

3. Konstrukcija B in B HIERARHIJE- preverite, ali je vrednost na posredovanem seznamu (matrike, tabele vrednosti itd. lahko posredujete kot seznam). Operater IN HIERARCHY vam omogoča ogled hierarhije (primer uporabe PlanAccounts).

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

Primer uporabe:

Query.Text = // izberite vse podračune računa "IZBERI | Samonosno. Poveži KAO račun | IZ | Načrt računov. Samonosni AS Samonosno | KJE | Samonosno. Sklic V HIERARHIJI VREDNOSTI( Razpored računov. Samonosna. Blago)";

4. Gradnja LIKE- ta funkcija nam omogoča primerjavo niza z vzorcem niza.

sintaksa: LIKE"<ТекстШаблона>"

Možnosti predloge vrstice:

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

En poljuben znak.

[...] - kateri koli posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih. Naštevanje lahko vsebuje obsege, kot je a-z, kar pomeni kateri koli znak znotraj obsega, vključno s konci obsega.

[^...] - kateri koli posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih, razen tistih, ki so navedeni za znakom negacije.

Primer uporabe:

Query.Text = //poišči celotno nomenklaturo, ki vsebuje korenski TABUR in se začne // bodisi z malo ali veliko črko t "IZBERI | Nomenklatura.Referenca |FROM | Imenik.Nomenklatura AS Nomenklatura |KJE | Ime blaga LIKE "" [Тт ]abur%""" ;

5. Dizajn DOVOLJEN- ta stavek vam omogoča, da izberete samo tiste zapise iz baze podatkov, za katere ima klicatelj pravico branja. Te pravice so konfigurirane na ravni zapisa (RLS).

sintaksa: DOVOLJENO je zapisano za ključno besedo SELECT

Primer uporabe:

Query.Text = "IZBERITE DOVOLJENO | Nasprotne stranke.Sklic |FROM | Imenik.Nasprotne stranke KOT nasprotne stranke";

6. Gradnja RAZLIČNO- omogoča izbiro zapisov, v katerih ni ponavljajočih se zapisov.

sintaksa: Za ključno besedo SELECT je zapisano RAZLIČNO

Primer uporabe:

Request.Text = //izbere zapise, do katerih ima bralec pravice "IZBERI RAZLIČNO | Nasprotne stranke.Ime |OD | Imenik.Nasprotne stranke KOT nasprotne stranke" ;

Konstrukt DIFFERENT lahko uporabite tudi z operaterjem ALLOWED in drugimi operaterji.

Primer uporabe:

Query.Text = //izbere različne zapise, do katerih ima bralec pravice "IZBERI DOVOLJENO RAZLIČNO | Contractors.Name |FROM | Directory.Contractors AS Contractors";

7. Gradnja PRVO- iz rezultata poizvedbe izbere število zapisov, določenih v parametru.

Sintaksa: FIRST<число>

Primer uporabe:

Query.Text = //izberite prve 4 GTD številke iz imenika "IZBERITE PRVE 4 | GTD številke.Referenca |FROM | Katalog.GTE številke KOT GTD številke";

8. Dizajn ZA SPREMEMBO- omogoča zaklepanje tabele, deluje samo v transakcijah (ustrezno samo za avtomatska zaklepanja).

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

Primer uporabe:

Query.Text = "IZBERI | FreeRemainsRemains.Nomenklatura, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Register akumulacije.FreeRemains.Remains AS FreeRemainsRemains |ZA SPREMEMBO |

9. Struktura ORDER BY- razvrsti podatke po določenem polju. Če je polje povezava, potem pri nastavitvi zastave SAMODEJNO NAROČILO bodo razvrščene glede na predstavitev povezave, če je zastavica izklopljena, so povezave razvrščene glede na prednost naslova povezave v pomnilniku.

sintaksa: RAZVRSTI PO<НаименованиеПоля>SAMODEJNO NAROČILO

Primer uporabe:

Query.Text = "IZBERI | FreeRemainsRemains.Nomenklatura AS nomenklatura, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining |Od |

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

sintaksa: GROUP BY<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Primer uporabe:

Query.Text = "IZBERI | ItemsInWarehouse.Nomenklatura AS Nomenklatura, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |FROM |

11. Design HAVING- omogoča uporabo agregatne funkcije za pogoj izbire podatkov, podobno kot konstrukcija WHERE.

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

Primer uporabe:

Query.Text = //izbere združene zapise, pri katerih je polje InStock večje od 3 "IZBERI | GoodsInStock.Nomenklatura AS Nomenklatura, | GoodsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS Na zalogi |OD | Akumulacija Register.Goodhouses ASInWareWInStock ASInStock | |SKUPINA BY | Blago v skladiščih.Nomenklatura, | Blago v skladiščih.Skladišče | |IMETI | ZNESEK (Blago v skladiščih.Na zalogi) > 3" ;

12. INDEX BY konstrukcijo- uporablja se za indeksiranje polja poizvedbe. Indeksirana poizvedba se dokonča dlje, vendar pospeši iskanje v indeksiranih poljih. Uporablja se lahko samo v virtualnih tabelah.

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

Primer uporabe:

Query.Text = "IZBERI | Ime Tz.OS, | Tz.Številka mape, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz | FROM | &Tz HOW Tz | | INDEX BY | Ime Tz.OS , | Tz .CodeOS";

13. Gradnja KJE- vam omogoča, da nastavite pogoj za vsa polja izbora. V rezultat bodo vključeni samo zapisi, ki izpolnjujejo pogoj.

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

Primer uporabe:

Query.Text = //izberi vse zapise s CompensationRemainder<>0 in //AmountFor Calc.CompBalance > 100 "SELECT | Compensation RPO stanja.Račun, | Compensation RPO stanja.Otrok, | Compensation RPO stanja. Compensation Balance, | Compensation RPO stanja. SumFor Calc. Comp Balance | PLACE DataTz |FROM | Register akumulacije Kompenzacija RP Stanja AS Kompenzacija Stanja RPO | Kompenzacija GPO.<>0 | In bilance RPO kompenzacije. Znesek za preostanek CalcComp > 100" ;

14. Oblikovanje REZULTATI ... SPLOŠNO- uporablja se za izračun seštevkov, načrt določa polja, na podlagi katerih se bodo vsote izračunale, in agregatne funkcije uporabljene za polja skupnih vrednosti. Ko uporabljate vsote za vsako polje, ki sledi konstrukciji TOTALS, so podatki združeni. Na voljo je izbirni konstrukt GENERAL, njegova uporaba omogoča tudi dodatno združevanje. Primer rezultata poizvedbe si lahko ogledate spodaj.

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

Primer uporabe:

Query.Text = "IZBERITE | Poravnave.Pogodba z nasprotno stranko.Vrsta pogodbe AS Vrsta pogodbe, | Poravnava.Pogodba z državno stranko AS Pogodba, | Poravnave.Nasprotna stranka, | Poravnave.Znesek vzajemnih poravnav Stanje AS Stanje |OD, | Programska oprema | SPLOŠNO | | Vrsta pogodbe";

Skupine, ki so bile oblikovane med izvedbo zahteve, so na sliki obkrožene, zgornja se nanaša na razdelek SPLOŠNO, druga pa na polje ContractContractorTypeContract.



Povezani članki: