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

Odlučio sam dati svoj doprinos i opisati one značajke jezika o kojima se nije govorilo u gornjim člancima. Članak je namijenjen programerima početnicima.

1. “IZ” dizajn.

Za dobivanje podataka iz baze uopće nije potrebno koristiti konstrukciju “FROM”.
Primjer: Trebamo odabrati sve podatke o bankama iz imenika banaka.
Zahtjev:

SELECT Imenik.Banke.*

Odabire sva polja iz direktorija Banke. I slično je zahtjevu:

SELECT Banks.* FROM Directory.Banke KAO Banke

2. Naručivanje podataka po referentnom polju

Kada trebamo podatke upita organizirati po primitivnim tipovima: "Niz", "Broj", "Datum" itd., onda se sve rješava korištenjem konstrukcije "ORDER BY" ako treba podatke poredati po referentnom polju? Referentno polje je poveznica, jedinstveni identifikator, tj. Grubo govoreći, neki proizvoljni skup znakova i uobičajeni poredak mogu dati rezultat koji nije sasvim očekivan. Za poredak referentnih polja koristi se konstrukcija "AUTO ORDER". Da biste to učinili, prvo morate poredati podatke izravno prema tipu reference pomoću konstrukcije "ORDER BY", a zatim konstrukcije "AUTO ORDER".

U ovom slučaju, za dokumente će se redoslijed dogoditi redoslijedom "Datum->Broj", za referentne knjige u "Glavnom prikazu". Ako se poredak ne pojavljuje prema referentnim poljima, tada se ne preporučuje korištenje konstrukcije "AUTO ORDER".

U nekim slučajevima, konstrukcija "AUTO ORDER" može usporiti proces odabira. Slično, možete prepisati bez automatskog naručivanja dokumenata:

3. Dobivanje tekstualnog prikaza referentnog tipa. Dizajn "PREZENTACIJE".

Kada trebate prikazati polje referentne vrste, na primjer, polje "Banka", koje je poveznica na element direktorija "Banke", morate razumjeti da se pri prikazu ovog polja, podupit na " Banke" automatski će se pokrenuti kako bi se dobio prikaz imenika. To će usporiti izlaz podataka. Kako biste to izbjegli, trebate koristiti konstrukciju “PREZENTACIJA” u zahtjevu kako biste odmah dobili prikaz objekta i zatim ga prikazali za pregled.

U sustavu sastavljanja podataka ovaj mehanizam se koristi prema zadanim postavkama, ali kada kreirate rasporede u ćelijama, trebali biste navesti prikaz referentnog polja i, na primjer, samu vezu postaviti u transkript.

4. Uvjet za uzorkovanje podataka prema predlošku.

Na primjer, trebate dobiti mobitele zaposlenika obrasca (8 -123- 456-78-912). Da biste to učinili, morate postaviti sljedeći uvjet u zahtjevu:

SELECT Employee.Name, Employee.Phone AS Phone FROM Directory.Employees AS Employees WHERE Phone LIKE "_-___-___-__-__"

Znak "_" je servisni znak i zamjenjuje bilo koji znak.

5. Istodobna uporaba zbrojeva i grupiranja.


Ukupni zbrojevi se često koriste zajedno s grupiranjem; u ovom slučaju agregatne funkcije možda neće biti navedene u ukupnim zbrojevima.

ODABERITE Pružanje usluga. Organizacija KAO Organizacija, Pružanje usluga. Nomenklatura KAO Nomenklatura, SUM(Pružanje usluga. Količina dokumenta) KAO Zbroj dokumenata IZ Dokumenta. Pružanje usluga KAO Pružanje usluga GRUPIRAJ PO Pružanje usluga. Organizacija, Pružanje usluga. Nomenklatura REZULTATI PO OPĆEM, Organizacija, Nomen klatura

U ovom slučaju, upit će vratiti gotovo isto kao i sljedeći upit:

ODABERITE Pružanje usluga. Organizacija KAO Organizacija, Pružanje usluga. Nomenklatura KAO Nomenklatura, Pružanje usluga. Količina dokumenta KAO Količina dokumenta IZ Dokumenta. Pružanje usluga KAO Pružanje usluga REZULTATI IZNOS (Količina dokumenta) PO OPĆENITO, Organizacija, Nomenklatura

Samo će prvi upit sažeti zapise s istom nomenklaturom.

6. Dereferenciranje polja.

Upućivanje na polja kroz točku naziva se operacija dereferenciranja referentnog polja. Na primjer Plaćanje.Organizacija.Upravna jedinica. U ovom slučaju se u referentnom polju "Organizacija" dokumenta "Plaćanje" odnosi na drugu tablicu "Organizacije" u kojoj će se dobiti vrijednost atributa "Upravna jedinica". Važno je razumjeti da kada se poljima pristupa kroz točku, platforma implicitno stvara podupit i spaja te tablice.

Zahtjev:

Može se predstaviti kao:

ODABERITE Veza.Plaćanje, Organizacija.Plaćanje, Organizacija.Plaćanje, Organizacije. AdministrativeUnit FROM Document.Payment AS Payment LEFT JOIN Directory.Organizations AS Software Organizations Payment.Organization = Organisations.Link

Prilikom dereferenciranja referentnih polja kompozitnog tipa, okvir pokušava stvoriti implicitne spojeve sa svim tablicama koje su dio tog tipa polja. U tom slučaju upit neće biti optimalan.Ako se jasno zna o kojem se tipu polja radi potrebno je takva polja ograničiti po tipu konstrukcijom IZRAZITI().

Na primjer, postoji akumulacijski registar "Neraspoređena plaćanja", gdje nekoliko dokumenata može djelovati kao registar. U ovom slučaju nije ispravno dobiti vrijednosti pojedinosti registra na ovaj način:

SELECT UnallocatedPayments.Register.Date, ..... FROM RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

trebali biste ograničiti vrstu složenog polja na logger:

SELECT EXPRESS(UnallocatedPayments.Register AS Document.Payment).Date, ..... FROM RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

7. Konstrukcija "GDJE"

S lijevim spajanjem dviju tablica, kada nametnete uvjet “WHERE” na desnu tablicu, dobit ćemo rezultat sličan rezultatu s unutarnjim spajanjem tablica.

Primjer. Potrebno je odabrati sve Klijente iz Imenika klijenata i za one klijente koji imaju platni dokument sa vrijednošću atributa "Organizacija" = &Organizacija prikazati dokument "Plaćanje", za one koji nemaju ne iskazivati ​​ga.

Rezultat upita vratit će zapise samo za one klijente koji su u parametru imali plaćanje po organizaciji, a filtrirat će ostale klijente. Stoga prvo morate primiti sva plaćanja za "tu i takvu" organizaciju u privremenoj tablici, a zatim je povezati s direktorijem "Klijenti" pomoću lijevog spoja.

SELECT Payment.Link AS Payment, Payment.Shareholder AS Client PLACE toPayments FROM Document.Payment AS Payment WHERE Payment.Branch = &Branch; /////////////////////////////////////////////// // /////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") AS Payment FROM Directory .Clients AS Klijenti LIJEVA VEZA topayments KAO topayments SOFTVER Clients.Link = topayments.Client

Ovo stanje možete zaobići na drugi način. Potrebno je nametnuti uvjet "WHERE" izravno na odnos između dvije tablice. Primjer:

SELECT Clients.Link, Payment.Link FROM Directory.US_Subscribers AS US_Subscribers LIJEVA VEZA Document.Payment AS Payment Software (Clients.Link = Payment.Client I Payment.Client.Name LIKE "Sugar Packet") GRUPIRAJ PREMA Clients.Link, Payment. Veza

8. Spajanja s ugniježđenim i virtualnim tablicama

Ugniježđeni upitičesto potrebno za dohvaćanje podataka na temelju nekog uvjeta. Ako ih zatim koristite u kombinaciji s drugim tablicama, to može kritično usporiti izvršenje upita.

Na primjer, trebamo dobiti iznos stanja na trenutni datum za neke klijente.

SELECT UnallocatedPaymentsRemains.Customer, UnallocatedPaymentsRemains.AmountRemaining FROM (SELECT Clients.Link AS Link FROM Directory.Clients AS Clients WHERE Clients.Link IN(&Clients)) AS NestedQuery LEFT JOIN RegisterAccumulations.UnallocatedPayments.Balances AS UnallocatedPayments BY Nested Request. Veza = UnallocatedPaymentsBalances. Kupac

Prilikom izvršavanja takvog upita, optimizator DBMS-a može pogriješiti pri odabiru plana, što će dovesti do neoptimalnog izvršenja upita. Prilikom spajanja dviju tablica, DBMS optimizator odabire algoritam spajanja tablica na temelju broja zapisa u obje tablice. Ako postoji ugniježđeni upit, iznimno je teško odrediti broj zapisa koje će ugniježđeni upit vratiti. Stoga uvijek trebate koristiti privremene tablice umjesto ugniježđenih upita. Pa prepišimo zahtjev.

SELECT Clients.Link AS Link PLACE tClients FROM Directory.Clients AS Clients WHERE
Klijenti.Veza B (&Klijenti) ; /////////////////////////////////////////////// // /////////////////////////// SELECT tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients LEFT JOIN RegisterAccumulations.UnalocatedPayments.Balances (, Client IN (SELECT tClients.Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

U tom slučaju, optimizator će moći odrediti koliko zapisa koristi privremena tablica tClients i moći će odabrati optimalni algoritam za spajanje tablica.

Virtualni stolovi , omogućuju vam da dobijete praktički gotove podatke za većinu primijenjenih zadataka (odsječak prvog, odsječak zadnjeg, ostatke, preokrete, ostatke i preokrete) Ključna riječ ovdje je virtualna. Ove tablice nisu fizičke, već ih sustav sastavlja u hodu, tj. Prilikom primanja podataka iz virtualnih tablica, sustav prikuplja podatke iz završnih registarskih tablica, sastavlja, grupira i izdaje ih korisniku.

Oni. Prilikom povezivanja s virtualnom tablicom, uspostavlja se veza s podupitom. U ovom slučaju, DBMS optimizator također može odabrati neoptimalan plan povezivanja. Ako se upit ne generira dovoljno brzo, a upit koristi spojeve u virtualnim tablicama, tada je preporučljivo premjestiti pristup virtualnim tablicama na privremenu tablicu, a zatim napraviti spoj između dvije privremene tablice. Prepišimo prethodni zahtjev.

SELECT Clients.Link AS Link PLACE tClients FROM Directory.Clients AS Clients INDEX BY Link WHERE
Klijenti.Veza B (&Klijenti) ; /////////////////////////////////////////////// // /////////////////////////// SELECT UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS Client PLACE salda FROM RegisterAccumulations.UnallocatedPayments.Balances(, Client B ( SELECT tClients. Link FROM tClients)) AS UnallocatedPaymentsBalances; /////////////////////////////////////////////// // /////////////////////////// SELECT tClients.Link, toRemainders.AmountRemaining AS AmountRemaining FROM tClients AS tClients LEFT JOIN toRemainders AS Remainders BY tClients.Link = tOstaci.Klijent

9.Provjera rezultata zahtjeva.

Rezultat upita može biti prazan; za provjeru praznih vrijednosti upotrijebite sljedeću konstrukciju:

ResRequest = Request.Execute(); If resQuery.Empty() Then Return; završi ako;

metoda Prazan() treba koristiti prije metoda Odaberite () ili Istovariti(), jer dohvaćanje zbirke zahtijeva vrijeme.

Nikome nije otkriće da je izrazito nepoželjno koristiti upite u petlji. To može kritično utjecati na vrijeme rada određene funkcije. Vrlo je poželjno primiti sve podatke u zahtjevu i zatim ih obraditi u petlji. Ali ponekad postoje slučajevi kada postane nemoguće premjestiti zahtjev izvan petlje. U ovom slučaju, za optimizaciju, možete premjestiti stvaranje upita izvan petlje, au petlji zamijeniti potrebne parametre i izvršiti upit.

Zahtjev = Novi zahtjev; Query.Text = "SELECT | Clients.Link, | Clients.Birthdate |FROM | Directory.Clients AS Clients |WHERE | Clients.Link = &Client"; Za svaki red FROM TableClient Loop Query.SetParameter("Klijent", Klijent); QueryResult = Query.Execute().Select(); EndCycle;

Ovo će spasiti sustav od provjere sintakse zahtjeva u petlji.

11. Konstrukcija "HAVING".

Dizajn koji je prilično rijedak u zahtjevima. Omogućuje vam da nametnete uvjete vrijednostima agregatnih funkcija (SUM, MINIMUM, AVERAGE itd.). Na primjer, trebate odabrati samo one klijente čiji je iznos plaćanja u rujnu bio veći od 13.000 rubalja. Ako koristite uvjet "WHERE", prvo ćete morati stvoriti privremenu tablicu ili ugniježđeni upit, tamo grupirati zapise prema iznosu plaćanja i zatim primijeniti uvjet. Konstrukcija "HAVING" pomoći će da se to izbjegne.

SELECT Payment.Customer, AMOUNT(Payment.Amount) AS Amount FROM Document.Payment AS Payment WHERE MONTH(Payment.Date) = 9 GROUP BY Payment.Customer HAVING AMOUNT(Payment.Amount) > 13000

U konstruktoru, da biste to učinili, samo idite na karticu "Uvjeti", dodajte novi uvjet i potvrdite okvir "Prilagođeno". Onda samo piši Iznos(Uplata.Iznos) > 13000


12. NULL vrijednost

Ovdje neću opisivati ​​principe trovrijedne logike u bazi podataka; postoji mnogo članaka o ovoj temi. Samo ukratko o tome kako NULL može utjecati na rezultat upita. Vrijednost NULL zapravo nije vrijednost, a činjenica da je vrijednost nedefinirana je nepoznata. Stoga svaka operacija s NULL vraća NULL, bilo da se radi o zbrajanju, oduzimanju, dijeljenju ili usporedbi. Vrijednost NULL ne može se usporediti s vrijednošću NULL jer ne znamo što usporediti. Oni. obje ove usporedbe su: NULL = NULL, NULL<>NULL nije True ili False, nepoznata je.

Pogledajmo primjer.

Za one klijente koji nemaju plaćanja potrebno je prikazati polje “Potpiši” s vrijednošću “Nema plaćanja”. Štoviše, pouzdano znamo da imamo takve klijente. A kako bismo odražavali bit onoga što sam gore napisao, učinimo to ovako.

ODABERITE "Nema plaćanja" KAO atribut, NULL KAO dokument PLACE topayments; /////////////////////////////////////////////// // /////////////////////////// SELECT Clients.Link AS Client, Payment.Link HOW Payment PUT tClientPayment FROM Directory.Clients AS Clients LEFT CONNECTION Document. Payment AS Payment Software Clients.Link = Payment.Shareholder; /////////////////////////////////////////////// // /////////////////////////// SELECT tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNO PRIDRUŽIVANJE tPayment AS tTopay BY tClientPayment.Payment = tPayment. Dokument

Obratite pozornost na drugu privremenu tablicu tClientPayment. S lijevim spojem odabirem sve klijente i sva plaćanja za te klijente. Za one klijente koji nemaju uplate, polje “Plaćanje” bit će NULL. Slijedeći logiku, u prvoj privremenoj tablici “tPayments” označio sam 2 polja, jedno od njih NULL, drugi redak “Nema plaćanja”. U trećoj tablici povezujem tablice “tClientPayment” i “tPayment” pomoću polja “Payment” i “Document” internim spajanjem. Znamo da je u prvoj tablici polje “Dokument” NULL, au drugoj tablici oni koji nemaju uplate u polju “Plaćanje” također su NULL. Što će nam takva veza vratiti? Ali ništa neće vratiti. Budući da usporedba NULL = NULL ne daje vrijednost True.

Kako bi zahtjev vratio očekivani rezultat, prepišimo ga:

SELECT "No payments" AS Attribute, VALUE(Document.Payment.EmptyLink) AS Document PLACE toPayments; /////////////////////////////////////////////// // //////////////////////////// SELECT Clients.Link AS Client, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) HOW Plaćanje PUT tClientPayment FROM Directory.Klijenti KAO Klijenti LIJEVA VEZA Dokument.Plaćanje KAO Plaćanje BY Clients.Link = Payment.Shareholder; /////////////////////////////////////////////// // /////////////////////////// SELECT tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNO PRIDRUŽIVANJE tPayment AS tTopay BY tClientPayment.Payment = tPayment. Dokument

Sada, u drugoj privremenoj tablici, naveli smo da ako je polje "Plaćanje" NULL, tada je ovo polje = prazna poveznica na dokument plaćanja. U prvoj tablici također smo zamijenili NULL praznom referencom. Sada veza uključuje polja koja nisu NULL i zahtjev će vratiti očekivani rezultat.

Svi zahtjevi sadržani u članku odražavaju situacije koje bih želio razmotriti i ništa više. OKO Oni ne moraju biti varljivi ili suboptimalni, glavno je da odražavaju bit primjera.

13. Nedokumentirana značajka dizajna "CHOICE WHEN...THEN...END".

U slučaju kada je u zahtjevu potrebno opisati konstrukciju “Uvjeti”, koristimo standardnu ​​sintaksu:

SELECT SELECTION WHEN Users.Name = "Vasya Pupkin" THEN "Our favorite zaposlenik" ELSE "Mi ovo ne znamo" END AS Field1 FROM Directory.Users AS Users

Ali što ako, na primjer, trebamo dobiti naziv mjeseca u zahtjevu? Pisanje velike konstrukcije u zahtjevu je ružno i dugotrajno, pa nam ovaj gornji oblik pisanja može pomoći:

SELECT MONTH(US_CalculationConsumption_ScheduleTurnover.CalculationPeriod) WHEN 1 THEN "January" WHEN 2 THEN "February" WHEN 3 THEN "March" WHEN 4 THEN "April" WHEN 5 THEN "May" WHEN 6 THEN "June" WHEN 7 THEN "July" K KADA 8 ONDA "kolovoz" KADA 9 ONDA "rujan" KADA 10 ONDA "listopad" KADA 11 ONDA "studeni" KADA 12 ONDA "prosinac" ZAVRŠI KAO mjesec

Sada dizajn izgleda manje glomazno i ​​lako ga je razumjeti.

14. Skupno izvođenje upita.


Kako se zahtjevi ne bi množili, možete stvoriti jedan veliki zahtjev, podijeliti ga u pakete i raditi s njim.
Na primjer, trebam dobiti sljedeća polja iz direktorija "Korisnici": "Datum rođenja" i dostupne uloge za svakog korisnika. prenesite ovo u različite tablične dijelove obrasca. Naravno, to možete učiniti u jednom zahtjevu, tada ćete morati iterirati kroz zapise ili ih suziti, ili možete učiniti ovo:

SELECT Users.Link AS Puno ime, Users.Date of Birth, Users.Role PUT vtUsers FROM Directory.Users AS Users; /////////////////////////////////////////////// // /////////////////////////// SELECT tueUsers.Puno ime, tueUsers.Datum rođenja FROM tueUsers AS tueUsers GROUP BY tueUsers.puno ime, tueUsers . Datum rođenja; /////////////////////////////////////////////// // /////////////////////////// SELECT wUsers.Full Name, wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Full Name, wUsers. Datum rođenja

tPaket = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

Kao što vidimo, upit se može izvršiti u paketu, a rezultat se može obraditi kao niz. U nekim slučajevima to je vrlo povoljno.

15. Uvjeti u skupnom zahtjevu

Na primjer, imamo paketni zahtjev, gdje prvo dobivamo polja: "Ime, datum rođenja, šifra" iz direktorija "Korisnici" i želimo dobiti zapise s uvjetima za ta polja iz direktorija "Pojedinci".

SELECT Users.Individual.Name AS Ime, Users.Individual.Date of Birth AS Datum rođenja, Users.Individual.Code AS Code PLACE vtUsers FROM Directory.Users AS Korisnici; /////////////////////////////////////////////// // //////////////////////////// ODABERITE Pojedince. Povežite KAO Pojedinca IZ direktorija. Pojedinci KAO Pojedinci

Možete postaviti uvjete poput ovih:

WHERE Individuals.Code IN (SELECT vtUsers.Code FROM vtUsers) AND Individuals.Name IN (SELECT vtUsers.Code FROM vtUsers) AND Individuals.BirthDate IN (SELECT vtUsers.DateBirth FROM tvUsers)

A možete to učiniti ovako:

WHERE (Individuals.Code, Individuals.Name, Individuals.Date of Birth) IN (SELECT tueUsers.Code, tueUsers.Name, tueUsers.Datum rođenja FROM tueUsers)

Štoviše, potrebno je održavati red.

16. Pozivanje graditelja upita za “uvjet” u skupnom zahtjevu

Kada je potrebno nametnuti uvjet, kao u gornjem primjeru, možete zaboraviti kako se zove ovo ili ono polje u virtualnoj tablici.
Na primjer, potrebno je postaviti uvjet na polje "Datum rođenja", au virtualnoj tablici ovo polje se zove "Datum rođenja dužnika", a ako zaboravite ime, morat ćete izaći iz uređivanja uvjeta bez spremanje i pogledajte naziv polja. Kako biste to izbjegli, možete koristiti sljedeću tehniku.

Potrebno je staviti zagrade iza konstrukcije “B” i ostaviti prazan prostor (prostor) između zagrada, označiti ovaj prostor i pozvati konstruktor upita. Dizajner će imati pristup svim tablicama paketnog upita. Tehnika radi i na tablicama virtualnih registara i na kartici "Uvjeti". U potonjem slučaju, trebate označiti okvir "P (proizvoljni uvjet)" i ući u način uređivanja "F4".

Upiti su često izmišljani u hodu i jednostavno služe za ilustraciju "tehnika" koje sam razmatrao.

Htio sam pogledati korištenje indeksa u upitima, ali ovo je vrlo široka tema. Stavit ću ga u zaseban članak ili dodati ovdje kasnije.

ažuriranje1. Točke 11,12
ažuriranje2. Točke 13,14,15,16

Rabljene knjige:
Jezik upita "1C:Enterprise 8" - E.Yu. Hrustaljeva
Stručno usavršavanje u sustavu 1C:Enterprise 8."

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. Na temelju upotrebe ove ključne riječi, korisnik će primiti poruku o pogrešci kada pokuša postaviti upit o zapisima 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 “FOR CHANGE” kod primanja stanja. Uostalom, kada nekoliko korisnika istovremeno radi u programu, 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 navesti uvjete odabira u parametrima virtualnih tablica. Kod korištenja "WHERE" prvo se dohvaćaju svi zapisi, a tek onda se vrši selekcija, što znatno usporava upit.

Ispod je 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.

Primjerice, 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 i specifikacije
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 informacijskom šifrantu „Cijene stavki“, ako u prethodnom primjeru „PUNO“ zamijenimo 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 sortirani su prema uobičajenim pravilima. 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 razdoblja (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 .

Članak pruža korisne tehnike pri radu s upitima 1C v.8.2, kao i informacije koje nisu toliko poznate o jeziku upita. Ne nastojim dati potpuni opis jezika upita, ali želim se zadržati samo na nekim točkama koje bi mogle biti korisne za nekoga.

Dakle, počnimo. Zahtjev je poseban objekt u 1C 8.2, koji se koristi za generiranje i izvršavanje upita prema tablicama baze podataka u sustavu. Da biste izvršili upit, trebate sastaviti tekst upita koji opisuje koje će se tablice koristiti kao izvori podataka upita, koja polja odabrati, koje sortiranje i grupiranje primijeniti itd. Više o upitima možete pročitati u knjizi "1C 8.2 Developer's Guide". Jezik upita 1C 8.2 vrlo je sličan u sintaksi drugim jezicima upita SQL baze podataka, ali postoje i razlike. Među glavnim prednostima ugrađenog jezika upita valja istaknuti dereferenciranje polja, prisutnost virtualnih tablica, praktičan rad s ukupnim iznosima i netipizirana polja u upitima. Nedostaci su što ne možete koristiti upit kao izlazno polje, ne možete koristiti pohranjene procedure i ne možete pretvoriti niz u broj.

Dat ću informacije i preporuke o jeziku upita točku po točku:
1. Kako biste povećali čitljivost zahtjeva i smanjili broj parametara zahtjeva, možete koristiti literal za pristup unaprijed definiranim konfiguracijskim podacima u zahtjevu VRIJEDNOST (REPREZENTACIJA VRIJEDNOSTI). Kao prikaz vrijednosti, vrijednosti enumeracija, unaprijed definirani podaci imenika, planovi tipova izračuna, planovi tipova karakteristika, kontni planovi, prazne veze, vrijednosti točaka rute, vrijednosti prijenosa sustava ( na primjer, Vrsta kretanja akumulacije, Vrsta računa).
Primjeri:

WHERE Grad = VRIJEDNOST(Imenik.Gradovi.Moskva)
WHERE Grad = VRIJEDNOST(Imenik.Gradovi.Prazna veza)
WHEREProductType = VALUE(Enumeration.ProductTypes.Service)
WHEREMovementType = VALUE(MovementTypeAccumulation.Incoming)
GDJE je točka rute =
VRIJEDNOST(Poslovni proces.Ugovor.Točka rute.Ugovor)

Izraz u zagradama uvijek počinje jednom riječju (Imenik, Enumeration, itd.) koja odgovara vrsti unaprijed definirane vrijednosti.

2. Automatsko sređivanje u upitu može uvelike usporiti proces. Ako sortiranje nije potrebno, bolje ga je uopće ne koristiti. U mnogim je slučajevima učinkovitije napisati sortiranje pomoću ključne riječi SORTIRAJ PO.

3. Morate biti sigurni da se pri korištenju aliasa ne pojavljuje dvosmisleno polje. Inače, sustav neće razumjeti kojem objektu treba pristupiti.
Primjer zahtjeva s dvosmislenim poljem:
BIRAJTE
Nomenklatura.Link,
Remaining GoodsRemaining.QuantityRemaining
IZ
Imenik.Nomenklatura AS Nomenklatura
LIJEVA VEZA Registrirajte akumulacije Preostala roba Preostala KAO Preostala roba Preostala
Software Remaining ProductsRemaining.Nomenclature = Nomenclature.Link
Potrebno je ispraviti alias tablice, na primjer, ovako: “Imenik.Nomenklatura KAO Nomenklatura1”, a “Nomenklatura.Veza” treba ispraviti u skladu s “Nomenklatura1.Veza”.

4. Ponekad je korisno dobiti prikaz referentnih polja pomoću ključne riječi IZVOĐENJE zajedno s vezom tako da nema ponovnog pristupa bazi podataka. Ovo je korisno kada se prikazuje rezultat upita u tablici.
Primjer:
BIRAJTE
PREDSTAVLJANJE(Dokument.Druga strana) KAO Primatelj,
PREZENTACIJA(Dokument.Baza)
IZ
Dokument.Račun KAO dokument

5.Koristite u zahtjevu EXPRESS(vrsta AS polja) omogućuje vam uklanjanje nepotrebnih tablica iz veze s poljem kompozitnog tipa podataka. Time se ubrzava izvršenje zahtjeva.
Primjer (opisničar je polje kompozitnog tipa za fizičku tablicu očevidnika akumulacije Preostale robe, u zahtjevu se odabire Datum i Broj dokumenata Prijem robe, dok se prilikom pristupa detaljima dokumenta Datum i Broj kroz upisnika, ne postoji višestruka veza tablice upisnika s tablicama dokumenata koji su upisnici za upisnik ostatka robe):
ODABERITE RAZNO[b] EXPRESS(Preostala roba. Registrator KAO dokument. Potvrda o primitku robe). Broj KAO BROJ POTVRDE,
[b] EXPRESS(Preostala roba. Registrator KAO dokument. Potvrda o primitku robe). Datum KAO DATUM PRIJEMA
[b]OD Registar akumulacija Preostala roba KAO Preostala roba GDJE (EXPRESS(Preostala roba. Registrator KAO dokument. Potvrda o primitku robe) NIJE NULL)

6. Kada u konfiguraciji 1C postoje korisnici koji imaju ograničena prava na određene konfiguracijske objekte, u zahtjevu za takve objekte mora se koristiti ključna riječ DOZVOLJENO tako da se zahtjev izvrši bez greške (Odaberite Dopušteno...)

7. Kada spajate tablice koje sadrže ugniježđene tablice (na primjer, dokument s tabličnim dijelom), ključna riječ može biti korisna PRAZNA TABLICA kada npr. neki od dokumenata nema tabelarnog dijela.
Primjer:
SELECT Link.Number, EMPTY TABLE.(Br., Artikal, Količina) AS Composition

SVE SPOJITI
SELECT Link.Number, Composition.(LineNumber, Nomenclature, Quantity)
IZ Dokument.Račun

8. Kada radite sa spojevima tablica koje sadrže po jedan red, može biti potrebno spojiti retke tablica (u obje tablice ne postoji polje kojim bi se mogli spajati). To se može postići korištenjem konstrukcije " POTPUNA VEZA Tablica prema TRUE" Ako tablice imaju više od jednog redaka, rezultat će biti broj redaka jednak umnošku broja redaka obje tablice. Ako u jednoj tablici ima O redaka, tada će broj redaka u rezultirajućoj tablici biti jednak broju redaka u drugoj tablici. Također, za povezivanje takvih tablica možete koristiti kartezijanski proizvod tablica, u kojem će se sve kombinacije redaka iz obje tablice pojaviti u rezultirajućoj tablici. Moramo upamtiti da ako postoji 0 redaka u jednoj od tablica, tada će kartezijanski umnožak biti 0, pa će puno spajanje biti bolje. Općenito, umjesto potpune veze PO ISTINITO Možete koristiti bilo koju drugu vrstu spajanja, ali u ovom slučaju također je moguće da rezultirajuća tablica ima 0 redaka, čak i ako jedna od tablica ima broj redaka različit od nule. U slučaju potpunog spajanja, ova situacija će se dogoditi samo u jednom slučaju, ako je broj redaka u obje tablice 0. Ako znate da postoji točno barem jedan red u tablici, tada možete koristiti LIJEVI SPOJ s drugom tablicom s uvjetom PO ISTINITO.
Primjer (doduše izmišljen, za Full Join):
BIRAJTE
prvi 1
Gender.Link,
K. Protustranka
IZ
Nabrajanje.Spol KAO Rod
POTPUNA POVEZANOST (Odaberite prvu 1 D. Protustranku IZ dokumenta. Prodaja robe KAKO D Dogovoriti do D. Trenutak vremena) KAKO
NA (ISTINA)

9. Da biste dobili jedinstvene zapise za određeno polje, ispravnije je koristiti ključnu riječ umjesto grupiranja RAZNO u zahtjevu, jer je ova konstrukcija mnogo jasnija i ključna riječ GRUPIRAJ PO ima širu primjenu i često se koristi ako je dodatno potrebno izračunati agregatne funkcije grupiranjem. U nekim slučajevima potrebno je ispisati ograničeni broj redaka. Da biste to učinili, trebate navesti ključnu riječ u opisu zahtjeva PRVI a nakon njega - potreban broj redaka.
Primjer za PRVI:
Odaberite prvih 5
Imenik.Nomenklatura.Naziv,
Imenik.Nomenklatura.Nabavna cijena
Poredaj po
Imenik.Nomenklatura.NabavnaCijena Silazno
Primjer za RAZNO:
Odaberite Razno
Dokument.Potrošni materijal.Druga strana

10. Funkcije agregacije u upitu mogu se koristiti bez ključne riječi SKUPINA. U tom će slučaju svi rezultati biti grupirani u jedan redak.
Primjer:
Odaberite
Iznos(Faktura.Iznos) Kao iznos
Iz
Document.Invoice.Composition As Invoice

11. U upitima u poljima za odabir možete slobodno pristupiti detaljima polja za odabir. Ova se značajka naziva dereferenciranje odabranog polja. Ako je izvor podataka ugniježđena tablica (tablični dio dokumenta), tada se u izbornim poljima može pristupiti i poljima glavne tablice (npr. preko polja Link pristupiti polju glavne tablice Račun)
Primjer:
BIRAJTE[b] Primitak robe i usluga Roba. Količina KAO Količina, Primitak robe i uslugaRoba.Veza.Druga ugovorna strana IZ GDJE
Postoji jedna osobitost korištenja dereferenciranja polja ako u zahtjevu postoje grupiranja. U svim upitima s grupiranjima na popisima polja upita možete slobodno pristupiti pojedinostima polja grupiranja.
Primjer:
BIRAJTE
Prijem robe i usluga Roba. Nomenklatura,
Prijem robe i usluga Roba. Nomenklatura. Šifra,
SUM (Primitak robe i usluga Roba. Količina) AS Količina,
Prijem robe i uslugaRoba.Veza.Druga strana,
Prijem robe i uslugaGoods.Link.Date
IZ
Dokument Potvrda o primitku robe i usluga Roba KAKO Potvrda o primitku robe i usluga Roba
GDJE
Prijem robe i uslugaGoods.Link = &Link
GRUPIRAJ PO
Prijem robe i usluga Roba. Nomenklatura,
Prijem robe i uslugaGoods.Link
Pomoć 1C kaže da ako postoji grupiranje, samo polja grupiranja i agregatne funkcije za polja odabira mogu sudjelovati u poljima odabira upita. Postoji jedan izuzetan slučaj kada se agregatne funkcije primjenjuju na polja ugniježđene tablice. U tom slučaju u popisu polja za odabir moguće je pristupiti poljima gornje tablice, bez grupiranja rezultata po tim poljima.
Primjer:
BIRAJTE
Prijem robe i usluga. Roba. (SUM (količina), nomenklatura),
Prijem robe i usluga. Link,
Prijem dobara i usluga. Protustrana strana
IZ
Dokument Prijem robe i usluga KAKO Prijem robe i usluga
GRUPIRAJ PO
Primitak robe i usluga. Roba. (Nomenklatura)

12. Ponekad, umjesto navođenja bilo kojeg polja u grupiranju, korisno je uključiti sljedeći parametar u polja odabira upita:
BIRAJTE DocProducts.Nomenclature, &Druga strana, &Razdoblje, SUM(DocProducts.Quantity * DocProducts.K) AS Količina, SUM(DocProducts.Amount) KAO iznos IZ Document.Admission.Products KAO DocProducts GDJE DocProducts.Link = &Link
GRUPIRAJ PO DocProducts.Nomenklatura
Zatim postavite parametar u tijelu zahtjeva:
Request.SetParameter("&Account", SelectAccount);
Query.SetParameter("&Razdoblje", Datum);

13. U univerzalnim upitima, parametri se mogu koristiti u opisu izvora podataka upita, u uvjetima GDJE, u uvjetima spajanja tablica i parametrima virtualnih tablica. Postoje dvije tehnike za stvaranje generičkih upita:
A) korištenje mehanizma ulančavanja nizova, dodavanje varijabli tekstu zahtjeva;
Primjer1:

OrderingType = ?(NEKA VARIJABLA,"","DESC");
Query.Text = "Odaberi... Rasporedi PO Polju1 " + OrderType + "...";
Primjer2:
Query.Text = "Odaberi polje1...";

Ako je NEKA VARIJABLA = 1 Tada
Zahtjev.Tekst = Zahtjev.Tekst + ",Polje2 ...";
završi ako;
B) koristite parametre u različitim dijelovima zahtjeva (na primjer, u odjeljku izvora podataka zahtjeva), a zatim ugrađenu metodu jezika - STREPLACE(). Prilikom dizajniranja univerzalnih upita, korisno je pristupiti svojstvu objekata METODATA(), s kojim možete odrediti naziv tablice za neku poveznicu (na primjer, za dokument to će biti nešto poput ovoga - Veza . METADATA().NAME), proslijeđen kroz parametar nekoj univerzalnoj proceduri.
Primjer:
Odaberite
DocTch.Nomenklatura,
...
IZ
&Neki DocTC KAO DocTC
Zatim postavite parametar u tijelu zahtjeva
Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Document."+Link.Metadata().Name+".Products");

Parametri se mogu koristiti u uvjetima upita kako bi se omogućio izborni uvjet &Parametar ILI NE SomeProperty:
Request.SetParameter(“&Parametar”, “Counterparty.Name=””Ivanov”””);
Korištenje literala PRAVI možete ukloniti određene filtre u zahtjevu
Query.SetParameter("&Parametar", True);

14. Vrlo korisna u dizajneru upita je naredba kontekstnog izbornika tablice - " Preimenuj tablicu...", s kojim možete smisliti neki generalizirani naziv za izvor podataka. Za stvaranje upita za tablice iste vrste, slične strukture, može biti korisno da druga tablica kopira tekst upita prve tablice, idite u prozor dizajnera upita i odaberite stavku u kontekstnom izborniku tablice - Zamijeni tablicu... i odaberite drugu tablicu.

15. Kada radite sa stvaranjem ugniježđenih upita u odjeljcima uvjeta ili parametara virtualnih tablica dizajnera upita, koristi se tehnika označavanja razmaka u zagradama, zatim se stavka "Dizajner upita" pojavljuje u kontekstnom izborniku i kada uređujete ugniježđeni upit, cijeli upit u zagradama je označen u uvjetu.
Primjer ugniježđenog upita:
Proizvod B (Odaberi proizvod...)

16. Prilikom dizajniranja ACS izvješća u upitima za bilančne registre, praktičnije je i ispravnije koristiti izraz kao parametar Period AddToDate(EndPeriod(Period,DAY),SECOND,1), budući da se virtualna stanja dobivaju na početku razdoblja, ne uključujući posljednju sekundu. Tehnika +1 sekunda ne može se koristiti s dokumentima: u skladu s novom metodom knjiženja dokumenata, stanja u registru moraju biti primljena za Razdoblje određeno graničnim objektom s trenutkom dokumenta uključujući (a ne na datum dokument +1 sekunda!), a prema starom načinu knjiženja - u trenutku dokumenta (a ne na datumu dokumenta!). Prilikom analize prometa ili podataka za razdoblje, zgodno je dodati parametar uz vrstu Standardno razdoblje(u ovom slučaju nema potrebe davati zadnji datum intervala na kraju dana). Za standardno polje “Početak razdoblja”, u polje “Izraz” morate unijeti "&Razdoblje. Datum početka" A za standardno polje "Kraj razdoblja" u polju "Izraz" napišite " &Razdoblje.Završni datum". Puno korisnih informacija o jeziku upita može se pronaći ne u pomoćniku za sintaksu, već u punoj pomoći konfiguratora 1C 8.2 (gumb F1)

17. Funkcija upita IsNull(prikladnije je napisati englesku verziju IsNull) obično se koristi za uklanjanje Null vrijednosti za numerička polja upita. U nekim slučajevima, na primjer, potpuno spajanje dviju tablica, funkcija IsNull (Parametar1,Parametar2) može uspješno zamijeniti dizajn IZBOR KADA... ONDA..DRUGO....KRAJ, kada za bilo koje polje NULL vrijednosti mogu biti iu prvoj iu drugoj tablici (ova konstrukcija omogućuje dobivanje vrijednosti koja nije Null za polje). Ali to moramo zapamtiti, za razliku od uvjetnog operatora IZBOR funkcija IsNull pretvara tip drugog argumenta u tip prvog argumenta, što se mora uzeti u obzir ako su tipovi argumenata različiti!
Primjer:
IsNull(Reg.Remaining,0)
IsNull(Doc.Product,Doc1.Item)

18. Kod uvjetne građevine IZBOR Postoji alternativna sintaksa za jednostavan slučaj testiranja jednakosti na određenu vrijednost, ali je, međutim, nedokumentirana:
Odabir izraza Kada 1 Zatim “Visoko” Kada 2 Zatim “Srednje” Drugo “Nisko” Kraj

19. Operator provjere vrijednosti NULL Da Null(Možemo preporučiti korištenje engleske verzije Je Null). Ova konstrukcija se pojavila jer je svaka operacija koja uspoređuje dvije vrijednosti, od kojih je barem jedna Null, uvijek lažna. Pisati Gdje je ime = nula pogrešno. Zanimljiv je i oblik negacije ovog operatora Nema Null- pogrešno, ali ispravno Da Nije Null odnosno oblika Nije (polje1 je nula)- ovo je značajna razlika od svih operatora koji se koriste zajedno s He operatorom.

20. Ponekad je obrazac operatora koristan U za provjeru podudaranja s jednom od navedenih vrijednosti.
Primjer:
...Gdje je Product.Name B ("Kućanski aparati", "Računala")
Za referentne knjige, obrazac operatora može biti koristan U provjere članstva u hijerarhiji.
Primjer:
...Gdje je nomenklatura U HIJERARHIJI (&Grupa)
Operater Učesto se koristi za provjeru je li vrijednost uključena u rezultat podupita.
Primjer:
...Gdje Nomenklatura.Veza B (Odaberite Nomenklatura.Veza...).
U podupitu možete pristupiti vanjskim poljima upita u uvjetu.
Primjer:
// Odaberite nazive proizvoda koji su bili prisutni
// u fakturama
BIRAJTE
Proizvodi.Naziv
IZ
Imenik.Nomenklatura KAKO Proizvodi
GDJE
Proizvodi. Veza B
(ODABERITE
Sastav fakture.Nomenklatura
IZ
Dokument.Račun.Sastav KAO Sastav računa
GDJE
InvoiceContent.Nomenclature = Products.Link)
Operacija U može se koristiti s nizovima, popisima vrijednosti, tablicama vrijednosti, ugniježđenim upitima. U ovom slučaju moguće je smanjiti uvjete
Sintaksa za podupit
(izraz1, izraz2,...,izrazN) U (Odaberi izraz1, izraz2,...,izrazN...)
Sintaksa za tablicu vrijednosti
(izraz1, izraz2,...,izrazN) U (&TK), gdje se prvih N stupaca koristi u tablici TK vrijednosti

20. Postoji šala na internetu o tome kako dizajner upita uvijek radi LIJEVO spajanje tablica (i njihova zamjena), bez obzira kako odredimo PRAVO:
1C: Poduzeće voli "lijevo".

21. Pogodno je ispravljati pogreške složenih upita u konzoli upita. Ima ih mnogo na internetu. Nakon otklanjanja pogrešaka u upitu, možete ga kopirati, a u dizajneru upita postoji prekrasan gumb " Zahtjev“, gdje ga možete zalijepiti u istu formu i spremiti (ranije ga je bilo moguće samo kopirati u konfiguratoru i formatirati zahtjev pomoću znaka za prijelom retka). U prozoru koji se otvori kada kliknete gumb "Upit", možete urediti upit i vidjeti rezultat izvršenja, što je prilično zgodno.

22. Kada dizajnirate ACS izvješća, morate imati na umu da ako trebate osigurati filtriranje prema određenom polju, nije potrebno dodati parametar tekstu zahtjeva. Query Builder ima karticu " Sastav podataka", gdje možete dodati parametre uvjetima. Osim toga, na razini ACS izvještaja postoji kartica uvjeta gdje možete dodati proizvoljne uvjete i spremiti ih u brzim postavkama. U tom će slučaju uvjeti biti univerzalni (jednakost, neravnopravnost, pripadnost, uvrštenost na popis itd.).

23. Kada radite s dokumentima, možda ćete morati dodati sortiranje po polju virtualne tablice TRENUTAK VREMENA, ali loša sreća - u ugniježđenim upitima sortiranje po ovom polju ne radi ispravno. Ples s tamburama pomaže: razvrstavanje po virtualnom polju TRENUTAK VREMENA zamjenjuje se s dva sortiranja: po datumu i po vezi. Također možete riješiti problem putem privremene tablice premještanjem ugniježđenog upita u zaseban upit. Za mnoga izdanja ova značajka ili pogreška nije ispravljena.
Primjer neispravnog zahtjeva koji prima zadnji objavljeni dokument za navedenu drugu ugovornu stranu (odnosno tablični dio dokumenta):

BIRAJTE
ConsumableProducts.Link,
Potrošni materijal. Broj retka,
PotrošniProizvodi.Proizvod,
Potrošni artikli. Količina,
Potrošni proizvodi Cijena,
Potrošni artikli. Količina
IZ

GDJE
Potrošni proizvodi. Veza B
(ODABERI TOP 1
D. Veza
IZ
Dokument. Potrošni materijal AS D
GDJE
D. Link Dirigirano

REDOSLIJED PREMA D. Linku. Trenutak vremena SILAZUĆI)

Moguća rješenja:
A) Zamijenite s SORTIRAJ PO na
REDAJ PO D.Datumu OPIS.
POREDAK PREMA D.Linku SILAZNO

B) Možete premjestiti ugniježđeni upit u privremenu tablicu:
ODABERI VRH 1
D. Veza
POSTAVITE TZLink
IZ
Dokument. Potrošni materijal AS D
GDJE
D. Link Dirigirano
I D.Counterparty = &Counterparty

SORTIRAJ PO
D. Link Trenutak vremena SILAZI
;

////////////////////////////////////////////////////////////////////////////////
BIRAJTE
ConsumableProducts.Link,
Potrošni materijal. Broj retka,
PotrošniProizvodi.Proizvod,
Potrošni artikli. Količina,
Potrošni proizvodi Cijena,
Potrošni artikli. Količina
IZ
Dokument.Potrošni materijal.Roba KAO Potrošni materijalRoba
GDJE
Potrošni proizvodi. Veza B
(ODABERITE
T.Link
IZ
TZLink AS T)
C) Možete se pozvati na glavnu tablicu dokumenta, a tek onda na tablični dio
ODABERI VRH 1
Consumable.Link,
Potrošni materijal. Roba.(
Veza,
broj retka,
Proizvod,
Količina,
Cijena,
Iznos
)
IZ
Dokument.Potrošni materijal KAO potrošni materijal
GDJE
Expense.Counterparty = &Counterparty
I potrošni materijal.Provedeno

SORTIRAJ PO
Consumable.Moment of Time DECREASE

24. Prilikom pristupa glavnoj tablici dokumenta (imeniku) možete pristupiti i podacima u podređenoj tablici (tabularnom dijelu). Ova prilika se zove dereferenciranje polja tablice. Primjer zadatka je zadatak traženja dokumenata koji sadrže određeni proizvod u tabličnom dijelu.
Primjer:
Izaberite Potvrda.Veza IZ Dokument.Potvrda Gdje Potvrda.Roba.Nomenklatura = &Nomenklatura.

Prednost ovog upita nad upitom na ugniježđenoj tablici Receipt.Goods je u tome što će, ako postoje duplikati u dokumentima, rezultat upita vratiti samo jedinstvene dokumente bez korištenja ključne riječi RAZNO.
Usporedi:
Odaberite Various Products.Link FROM Document.Receipt.Products kao proizvode gdje su Products.Nomenclature = &Nomenclature.
To je vjerojatno sve. Jasno je da još uvijek ima mnogo pitanja u jeziku upita koja nisam obradio. Za pisanje ovog članka koristio sam informacije koje sam dobio nakon završetka osnovnog tečaja 1C 8.2 spec8.ru, kao i iz knjige “1C 8.2 Developer’s Guide” i Interneta.
Hvala svima!

Za prikaz referentnih polja u izvješću potrebno je dobiti prikaz referentnog polja u zahtjevu, te ga prilikom ispisa koristiti, a ne samu poveznicu. Ovaj odjeljak opisuje neke značajke polja "View" i funkcije za dobivanje pogleda - View(). Više o ispisu referentnih polja možete pročitati u odjeljku "Izlaz referentnih polja".

Zastupstvo na terenu

Svaka tablica objekata u infobazi ima virtualno polje - "Pogled". Ovo polje sadrži tekstualni prikaz objekta. U upitu je moguće dobiti ovo polje na isti način kao i druga polja tablice, ali se na ovom polju ne mogu izvoditi nikakve operacije. Ova značajka je zbog činjenice da je ovo polje virtualno, i zapravo, kada dohvaća ovo polje iz baze podataka, upit prima nekoliko polja, a kada prima vrijednost polja iz rezultata upita, pretvara primljene vrijednosti u niz. Dakle, jedino što možete učiniti s poljem Pogled je staviti ga u rezultat upita.

Kao rezultat toga, ne preporučuje se sortiranje rezultata upita po polju "Prikaz", jer ovo neće dati željeni rezultat - rezultat upita će biti poredan uzlaznim redoslijedom referenci objekta. Više o tome možete pročitati u odjeljku “Značajke sređivanja po referentnim poljima”.

Prikaz funkcije()

Funkcija pogleda dizajnirana je za dobivanje tekstualnog prikaza bilo koje vrijednosti koja se može dobiti korištenjem upitnog jezika. Funkcija View() radi i za referentne i za primitivne tipove. Za vrste referenci, rezultat funkcije potpuno je sličan primanju polja "Reprezentacija" iz reference proslijeđene kao parametar funkciji. Za primitivne tipove, rezultat funkcije je niz u koji je pretvorena vrijednost proslijeđena kao parametar. Osobitost ove funkcije je da se njen rezultat ne može koristiti u izrazu. Ova značajka je zbog činjenice da se pretvorba vrijednosti u niz provodi već prilikom primanja podataka iz rezultata upita, jer Pretvaranje proizvoljne vrijednosti u niz prilikom izvršavanja zahtjeva na poslužitelju se ne provodi, zbog činjenice da se prilikom pretvaranja vrijednosti u niz moraju uzeti u obzir lokalne postavke.

Korištenje funkcije View() ima nekoliko prednosti u odnosu na korištenje polja View. Na primjer, u slučaju kada polje iz kojeg je izveden prikaz može sadržavati i referentne i primitivne tipove, dohvaćanje polja Reprezentacije isprekidanog iz takvog polja rezultirat će time da se prikazi za vrijednosti primitivnog tipa neće dobiti. Međutim, ako se za takvo polje koristi funkcija Representation(), tada će se dobiti prikaz niza bez obzira na vrstu vrijednosti sadržanu u polju. Osim toga, ako se funkcija View() primijeni na polje koje je referenca na više od tri tablice, upitni jezik dohvaća samo referentne vrijednosti iz baze podataka i dohvaća vrijednosti pogleda jednim ili više dodatnih upita. Ovo vam ponašanje omogućuje učinkovitije dobivanje prikaza za polja koja se odnose na veliki broj tablica (na primjer, na bilo koji direktorij), zbog činjenice da upit koji se izvršava neće sadržavati veliki broj veza koje su potrebne za dobivanje polja koja čine pogled.

Korištenje funkcije Representation() također može biti korisno kod dobivanja prikaza polja - enumeracije, u slučaju izvršavanja zahtjeva preko COM veze

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

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

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

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

Kao i neki mali trikovi jezika 1C pomoću kojih možete optimalno konstruirati tekst zahtjeva.

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

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

IZABERI

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

Na primjer:

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

Upit će vratiti tablicu s nazivima stavki.

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

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

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

ODABIR (SLUČAJ)

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

Naziv trenutnog imenika,

WHEN Current Directory.Service THEN

"Servis"

KRAJ KAKO POGLEDATINomenklatura

Imenik.Nomenklatura AS Tekući imenik

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

GDJE

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

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

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

"GDJE JE SERVIS"

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

Možete koristiti izravne uvjete u izrazima:

WHERE Šifra = "005215"

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

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

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

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

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

Besplatno nabavite 267 video lekcija o 1C:

WHERE NomenclatureGroup= &NomenclatureGroup

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

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

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

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

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

GRUPIRAJ PO

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

Na primjer:

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

GRUPIRAJ PO
Prijem RobaUslugeRoba.Roba

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

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

IMAJUĆI

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

Primjer korištenja HAVING u 1C zahtjevu:

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

GRUPIRAJ PO
Primitak robe i usluga Roba, roba

SUM(Primitak RobeUslugeRobe.Količina) > 5

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

ZNAČENJE()

Na primjer:

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

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

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

VRSTA na zahtjev

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

IZRAZITI()

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

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

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

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

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

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

ISNULL (ISNULL)

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

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

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

PRIDRUŽITI

Postoje 4 vrste veza: LIJEVO, PRAVO, KOMPLETAN, INTERNI.

LIJEVI i DESNI SPOJ

Spojevi se koriste za povezivanje dviju tablica na temelju određenog uvjeta. Značajka kada LIJEVO PRIDRUŽI je da prvu navedenu tablicu uzmemo u cijelosti i uvjetno vežemo drugu tablicu. Polja druge tablice koja se ne mogu vezati uvjetom popunjavaju se vrijednošću NULL.

Primjer lijevog spajanja u zahtjevu 1C:

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

RIGHT JOIN na jeziku 1C 8.3 apsolutno sličan LIJEVI priključak, s izuzetkom jedne razlike: in PRAVO PRIKLJUČKA"Glavni" stol je drugi, a ne prvi.

POTPUNA POVEZANOST

POTPUNA POVEZANOST razlikuje se od lijeve i desne po tome što prikazuje sve zapise iz dvije tablice i povezuje samo one koje može povezati po uvjetu.

Na primjer:

POTPUNA POVEZANOST
Imenik.Banke KAKO Banke

PO

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

UNUTARNJI SPOJ

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

Na primjer:

IZ
Imenik.Druge strane AS Klijenti

UNUTARNJI SPOJ
Imenik.Banke KAKO Banke

PO
Klijenti.Naziv = Banke.Naziv

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

Zaključak

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

KATEGORIJE

POPULARNI ČLANCI

2023 “kingad.ru” - ultrazvučni pregled ljudskih organa