Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Kako kombinirati 2 direktorija 1C upita. Spoji rezultate upita

Kako kombinirati 2 direktorija 1C upita. Spoji rezultate upita

; Ugniježđeni upiti (u razvoju).

Prijem robe i usluga I Povrat robe dobavljaču za navedeno razdoblje.

Nove kartice: Unije/pseudonimi.

Teorijski dio lekcije br.4

1C Query Builder vam omogućuje stvaranje kombinacija upita. Uz njihovu pomoć možete uzastopno ispisati podatke dobivene iz nekoliko upita bez korištenja veza. Jedini uvjet za spajanje je isti skup polja u svakom pojedinačnom zahtjevu.

U dizajneru idite na karticu Unije/pseudonimi. Dizajniran je za stvaranje spojeva upita i postavljanje aliasa za polja upita. Aliasi polja su potrebni ako niste zadovoljni standardnim nazivima polja baze podataka. Ako se polje upita sastoji samo od polja tablice baze podataka, tada za njega nije potreban alias. Ako ste prilikom stvaranja polja koristili funkcije jezika upita, tada je potreban pseudonim za takvo polje. Dizajner upita stvara standardne aliase za takva polja Polje1…PoljeN, ti aliasi se mogu zamijeniti onima koji vama odgovaraju.

Pogledajmo dijelove kartice Unije/pseudonimi:

  • Zahtjevi(crveni okvir). Ovaj odjeljak sadrži tablicu koja prikazuje sve kombinirane upite. Pomoću izbornika koji se nalazi iznad ovog odjeljka možete dodati nove, kopirati postojeće, izbrisati odabrane i također promijeniti njihova mjesta. Prilikom dodavanja ili kopiranja zahtjeva, dizajner ide na karticu Tablice i polja, gdje možete navesti tablice baze podataka i potrebna polja za novi upit. Možete se prebacivati ​​između upita pomoću kartica koje će se pojaviti na desnoj strani dizajnera kako se dodaju novi 1c upiti;

  • U stolu Zahtjevi dva stupca:
    • Ime. Postavite automatski u formatu Zahtjev 1… Zahtjev N;
    • Nema duplikata. Postavite kada je potrebno izuzeti duple retke prilikom spajanja s prethodnim upitom. Vrijedno je napomenuti da će ova zastavica djelovati samo na spajanje zahtjeva u kojem je postavljena s prethodnim zahtjevom.

  • Nadimci(plavi okvir). U ovom odjeljku možete postaviti pseudonime za polja upita, kao i postaviti podudarnost polja za kombinirane upite, tako da kao rezultat upita budu u istom stupcu i prikazani pod jednim pseudonima. Ako su polja u spojenim upitima nazvana isto, tada se podudarnost između njih automatski prilagođava. Da biste konfigurirali podudaranje polja, trebate pronaći redak sa željenim aliasom u tablici, pronaći traženi upit u stupcima i odabrati polje na padajućem popisu.

Praktični dio lekcije br.4

Pogledajmo rješenje zadatka danog na početku lekcije. Da vas podsjetim na uvjete:

Zadatak: pomoću upita označite sve knjižene dokumente Prijem robe i usluga I Povrat robe dobavljaču za navedeno razdoblje.

  1. Kreirajmo novi zahtjev;
  2. Pokrenimo dizajner upita;
  3. Odaberimo stol Prijem robe i usluga iz niti Dokumentacija;
  4. Sa stola Prijem robe i usluga odaberite polje Veza;
  5. Idemo na karticu Uvjeti;
  6. U poglavlju Polja, otvorimo temu Prijem robe i usluga pomoću gumba "+";
  7. Pronađimo rekvizite datum i povucite ga u odjeljak s uvjetima, odaberite operator usporedbe Između i označiti parametre za početak i kraj razdoblja, na primjer Početak razdoblja I Kraj razdoblja;
  8. Idemo na karticu Unije/pseudonimi.
  9. Dodajte novi zahtjev, označite Nema duplikata nema potrebe za podizanjem, jer koristimo različite vrste dokumenata;

  10. 1C Query Builder će automatski otići na karticu Tablice i polja. Na desnoj strani prozora vidjet ćete da je drugi zahtjev za pridruživanje aktivan;


  11. Ponovimo točke 1 - 7 za tablicu Povrat robe dobavljaču;
  12. Idemo ponovno na karticu Unije/pseudonimi. U tablici aliasa možete vidjeti da polja Veza obje su tablice u istom retku, što znači da će se veze na oba dokumenta naći u istom stupcu kao rezultat upita;
  13. Promijenimo naziv stupca iz Veza na Dokument(postavite pseudonim polja). Da biste to učinili, dvaput kliknite lijevu tipku miša na naziv polja. Nakon toga možete postaviti svoje ime, napisati ga tamo Dokument;

  14. Zahtjev je spreman, kliknite gumb "OK" na dnu prozora dizajnera.

Kao rezultat, dobit ćemo zahtjev sa sljedećim tekstom.

Dobar dan, dragi čitatelji bloga. Danas ćemo detaljno razgovarati kombiniranje zahtjeva u 1C. Također možete preuzeti standardnu ​​konfiguraciju Trade Enterprise Management za Kazahstan, izdanje 1.0.

Ako radite s jednom tablicom, tada ne morate koristiti spajanje. Sasvim je druga stvar kada radite s nekoliko tablica i, na primjer, trebate dobiti podatke o kupnji i prodaji robe.

Klauzula se koristi za kombiniranje KOMBINIRAJ / UNION. Zapravo se događa spajanje rezultata upita, odnosno svaki upit prikuplja podatke neovisno jedan o drugom, a zatim se ti rezultati spajaju u jedan. I samo na zadnji zahtjev izvode se druge operacije, na primjer, naručivanje i izračunavanje ukupnih iznosa.

Nasuprot tome, kod spajanja upita dolazi do "vertikalnog lijepljenja" rezultata, odnosno prvo dolaze retke rezultata prvog upita, a zatim drugog.

Prijeđimo na praksu:

ODABERITE artikl, količinu, iznos KOMBINIRATI ODABERITE stavku, količinu, iznos IZ dokumenta.Potrošni materijal.Roba

Rezultat ovog upita je sljedeći:

Kao rezultat toga, dobit ćemo dvije tablice koje će biti povezane jedna s drugom. Teško je vidjeti gdje završava dokument o primitku, a počinje dokument o izdatku. Ali učinit ćemo nešto da to shvatimo:

ODABERITE Nomenklaturu, količinu KAKO Broj župe, Iznos AS SumPrikhod, 0 KAKO KoličinaPotrošnja, 0 KAKO SumExpenditure IZ Dokumenta.Primanja.Proizvoda KOMBINIRATI Broj župe, 0 KAKO SumPrikhod, Količina AS KoličinaPotrošnja, Iznos AS SumExpenditure IZ Dokumenta.Potrošni materijal.Roba

Kao što možete vidjeti iz teksta zahtjeva, za svaki dokument postavljamo različite pseudonime za količinu i iznos. Također, umjesto onih polja gdje ćemo dobiti vrijednosti iznosa i količine, stavit ćemo nule. To je potrebno kako bi se prazne količine i iznosi zamijenili nulama.

Nomenklatura Broj župe SumPrikhod KoličinaPotrošnja SumExpenditure
A4 papir 25 14 500
Naljepnice 500l 8 4 880
Datoteka prozirna 5 4 100
Uredski set 8 8 840
Uredski set 1 1 105
Datoteka prozirna 1 820
Naljepnice 500l 1 610

Sada moramo ukloniti duple elemente iz rezultata upita. Imamo dva upita i ako sažmemo svaki zasebno da eliminiramo duple elemente, ništa neće raditi. Stoga ćemo zahtjev svesti na sljedeću formu:

BIRAJTE
Nomenklatura,
IZNOS (Broj prihoda) KAO Broj prihoda,
SUM(SumPrikhod) AS SumPrikhod,
IZNOS (količina troškova) KAO količina troškova,
SUM(SumExpense) KAO SumExpense
IZ
(
ODABERITE Nomenklaturu, količinu KAKO Broj župe, Iznos AS SumPrikhod, 0 KAKO KoličinaPotrošnja, 0 KAKO SumExpenditure IZ Dokumenta.Primanja.Proizvoda KOMBINIRATI SELECT Stavka, 0 KAKO Broj župe, 0 KAKO SumPrikhod, Količina AS KoličinaPotrošnja, Iznos AS SumExpenditure IZ Dokumenta.Potrošni materijal.Roba ) AS NestedQuery
GRUPIRAJ PO Nomenklaturi

Dakle, vidimo da je cijeli naš upit zatvoren u zagrade i nazvan NestedQuery. To je učinjeno kako bismo mogli grupirati zapise iz oba podupita i eliminirati duple elemente. Ovaj dizajn naziva se ugniježđeni upit. Rezultat ovog upita je sljedeći:

Nomenklatura Broj župe SumPrikhod KoličinaPotrošnja SumExpenditure
A4 papir 25 14 500
Naljepnice 500l 8 4 880 1 610
Uredski set 5 4 100 1 1 105
Datoteka prozirna 8 8 840 1 820

Kao rezultat toga dobivamo grupiranu tablicu u kojoj su podaci iz ugniježđenih podupita dovedeni u razumljiv oblik.
Broj podupita ne smije biti veći od 255. Ovdje smo koristili četiri podupita.

Postoje situacije kada je potrebno kombinirati nekoliko upita u jednom upitu, a spajanje tablica u tome ne može pomoći. To ćete najlakše pokazati na primjeru.

Pretpostavimo da su u našem sustavu činjenice kupnje i prodaje robe evidentirane dokumentima Prihodi i Rashodi. Druga ugovorna strana može biti kupac ili dobavljač. Dug se može prebiti isporukom robe:

Za izračun ukupnog duga druge ugovorne strane potrebno je zbrojiti zbroj svih troškova te druge ugovorne strane i oduzeti zbroj svih primitaka od iste druge ugovorne strane; to ćete najlakše učiniti pomoću operatora COMBINE ALL:

Zahtjev.Tekst =
"
//izračunajte količinu koju smo otpremili izvođačima
|ODABIR
| Trošak. Protustrana strana,
|OD
| Dokument. Trošak KAO Trošak
|GRUPIRAJ PO
| Trošak. Protustrana
| KOMBINIRAJ SVE
//izračunajte iznos protustranaka
//isporučio nam robu
|ODABIR
| Župa. Protustrana strana,
//uzmite iznos s negativnim predznakom,
//da je kada se kombinira oduzeto od iznosa rashoda
| AMOUNT(-Potvrda.Iznos)
|OD
| Dokument Dolazak KAO Dolazak
|GRUPIRAJ PO
| Dolazak.Protustrana";

U prvom zahtjevu izračunavamo iznos troškova za svaku drugu ugovornu stranu, u drugom - iznos za koji nam je svaka druga ugovorna strana isporučila robu. Iznos u drugom zahtjevu uzima se s predznakom minus, tako da se prilikom sažimanja dobivene tablice oduzima od iznosa otpreme ovoj drugoj strani. Kao rezultat toga, dobivamo tablicu poput:

Nije baš ono što smo htjeli, ali je blizu. Da bi se postigao traženi rezultat, preostaje samo grupiranje po ugovornoj strani. Da biste to učinili, upit se mora smjestiti u privremenu tablicu (o radu s privremenim tablicama govori se u zatvoreni dio tečaja ) i odaberite i grupirajte polja iz njega:

Zahtjev = Novi zahtjev;
Zahtjev.Tekst =
„IZABIRAJ
| Trošak. Protustrana strana,
| AMOUNT(Iznos.Iznos) KAO Dug
| Mjesto VT_Dolazni trošak
|OD
| Dokument. Trošak KAO Trošak
|GRUPIRAJ PO
| Trošak. Protustrana
| KOMBINIRAJ SVE
|ODABIR
| Župa. Protustrana strana,
| AMOUNT(-Potvrda.Iznos)
|OD
| Dokument Dolazak KAO Dolazak
|GRUPIRAJ PO
| Župa.Protustranka
|;
|////////////////////////////////////////////////////////////////////////////////
|ODABIR
| VT_Dolazni trošak. Suprotna ugovorna strana,
| SUM(VT_PrihodiRashodi.Dug) AS Dug
|OD
| VT_Dolazna potrošnja KAO VT_dolazna potrošnja
|GRUPIRAJ PO
| VT_Dolazni trošak. Protustrana strana";

Zahtjevi za spajanje upita

Prilikom spajanja dva upita, broj polja mora biti isti; ako nekom od upita nedostaju polja, onda se ona moraju dodati kao konstante. Pogledajmo gornji primjer, neka i troškovna isprava ima polje za popust kojim se umanjuje iznos duga druge ugovorne strane, ali u ispravi o primitku popusta nema. Kako biti u ovom slučaju? Tako:

Zahtjev = Novi zahtjev;
Zahtjev.Tekst =
„IZABIRAJ
| Trošak. Protustrana strana,

|OD
| Dokument. Trošak KAO Trošak
|GRUPIRAJ PO
| Trošak. Protustrana
| KOMBINIRAJ SVE
|ODABIR
| Župa. Protustrana strana,
| SUM(-Potvrda.Iznos),
//dodajte popust za nulto polje
| 0
|OD
| Dokument Dolazak KAO Dolazak
|GRUPIRAJ PO
| Dolazak.Protustrana";

Ostaje još samo oduzeti popust i grupa.

Redoslijed je također važan. Polja će se spojiti točno redoslijedom kojim su navedena u odjeljcima SELECT oba upita. U odnosu na prethodni primjer, zamijenimo polja popusta i iznosa u uzorku računa:

Zahtjev = Novi zahtjev;
Zahtjev.Tekst =
„IZABIRAJ
| Trošak. Protustrana strana,
| AMOUNT(Iznos.Iznos) KAO dug,
| AMOUNT(Troškovi.Popust) KAO Popust
|OD
| Dokument. Trošak KAO Trošak
|GRUPIRAJ PO
| Trošak. Protustrana
| KOMBINIRAJ SVE
|ODABIR
| Župa. Protustrana strana,
//zamijeniti mjesta
| 0,
| AMOUNT(-Potvrda.Iznos)
|OD
| Dokument Dolazak KAO Dolazak
|GRUPIRAJ PO
| Dolazak.Protustrana";

Ako radite s jednom tablicom, tada ne morate koristiti spajanje. Sasvim je druga stvar kada radite s nekoliko tablica i, na primjer, trebate dobiti podatke o kupnji i prodaji robe.

Klauzula se koristi za kombiniranje KOMBINIRATI. Ono što se zapravo događa je da se rezultati upita spajaju, odnosno svaki upit prikuplja podatke neovisno jedan o drugom, a zatim se ti rezultati spajaju u jedan. I samo na zadnji zahtjev izvode se druge operacije, na primjer, naručivanje i izračunavanje ukupnih iznosa.

Prilikom spajanja upita dolazi do "vertikalnog lijepljenja" rezultata, odnosno prvo dolaze retke rezultata prvog upita, a zatim drugog.

Prijeđimo na praksu:
Kod 1C v 8.x SELECT
Nomenklatura,
Količina,
Iznos
IZ
Dokument.Prijem.Roba

KOMBINIRATI

BIRAJTE
Nomenklatura,
Količina,
Iznos
IZ
Dokument.Prijem.Roba

Rezultat ovog upita je sljedeći:
Nomenklatura Količina Iznos
A4 papir 25 14 500
Naljepnice 500l 8 4 880
Turpija prozirna 5 4 100
Uredski set 8 8 840

Kao rezultat toga, dobit ćemo dvije tablice koje će biti povezane jedna s drugom. Teško je vidjeti gdje završava dokument o primitku, a počinje dokument o izdatku. Ali učinit ćemo nešto da to shvatimo:
Kod 1C v 8.x
BIRAJTE
Nomenklatura,
Količina AS Kol. Dolazak,
Iznos AS SumIncoming,
0 KAO trošak količine,
0 AS AmountExpense
IZ
Dokument.Prijem.Roba

KOMBINIRATI

BIRAJTE
Nomenklatura,
0 AS KolPrihod,
0 AS SumPrihod,
Količina KAO Potrošnja količine,
Iznos KAO IznosRaškova
IZ
Dokument.Potrošni materijal.Roba

Kao što možete vidjeti iz teksta zahtjeva, za svaki dokument postavljamo različite pseudonime za količinu i iznos. Također, umjesto onih polja gdje ćemo dobiti vrijednosti iznosa i količine, stavit ćemo nule. To je potrebno kako bi se prazne količine i iznosi zamijenili nulama.

A4 papir 25 14 500
Naljepnice 500l 8 4 880
Turpija prozirna 5 4 100
Uredski set 8 8 840
Uredski set 1 1 105
Datoteka transparentna 1 820
Naljepnice 500l 1 610

Sada moramo ukloniti duple elemente iz rezultata upita. Imamo dva upita i ako sažmemo svaki zasebno da eliminiramo duple elemente, ništa neće raditi. Stoga ćemo zahtjev svesti na sljedeću formu:
Kod 1C v 8.x
BIRAJTE
Nomenklatura,
IZNOS (Broj prihoda) KAO Broj prihoda,
SUM(SumPrikhod) AS SumPrikhod,
IZNOS (količina troškova) KAO količina troškova,
SUM(SumExpense) KAO SumExpense
IZ

(ODABERITE
Nomenklatura,
Količina AS Kol. Dolazak,
Iznos AS SumIncoming,
0 KAO trošak količine,
0 AS AmountExpense
IZ
Dokument.Prijem.Roba

KOMBINIRATI

BIRAJTE
Nomenklatura,
0 AS KolPrihod,
0 AS SumPrihod,
Količina KAO Potrošnja količine,
Iznos KAO IznosRaškova
IZ
Dokument.Potrošni materijal.Roba) AS AttachedRequest

GRUPIRAJ PO Nomenklaturi

Dakle, vidimo da je cijeli naš upit zatvoren u zagrade i nazvan NestedQuery. To je učinjeno kako bismo mogli grupirati zapise iz oba podupita i eliminirati duple elemente. Ovaj dizajn naziva se ugniježđeni upit. Rezultat ovog upita je sljedeći:
Nomenklatura KolIncoming SumIncoming KolExpenditure SumExpenditure
A4 papir 25 14 500
Naljepnice 500l 8 4 880 1 610
Uredski set 5 4 100 1 1 105
Turpija prozirna 8 8 840 1 820

Kao rezultat toga dobivamo grupiranu tablicu u kojoj su podaci iz ugniježđenih podupita dovedeni u razumljiv oblik. Broj podupita ne smije premašiti 255. Ovdje smo koristili četiri podupita.

Ako želimo ostaviti samo jedinstvene vrijednosti zapisa u upitu bez korištenja grupiranja. Trebate napisati KOMBINIRANU rečenicu bez ključne riječi SVE.

Informacije preuzete sa stranice

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 odrediti uvjete odabira u parametrima virtualnih tablica. Kod korištenja "WHERE" prvo se dohvaćaju svi zapisi, a tek onda se vrši odabir, što značajno usporava upit.

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

ODABIR (SLUČAJ)

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

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

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

PRIDRUŽITI

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

SPOJ LIJEVO/DESNO

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

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 T&C
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Cijene
Software Receipt&U.Nomenclature = Cijene.Nomenklatura

U DESNICI je sve upravo suprotno.

POTPUNA POVEZANOST

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

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

UNUTARNJI SPOJ

Razlika između INNER JOIN-a i FULL JOIN-a je u tome što ako zapis nije pronađen u barem jednoj od tablica, upit ga uopće neće prikazati. Slijedom toga iz dokumenta „Primitak roba i usluga“ bit će odabrane samo one stavke stavki za koje postoji evidencija u 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 perioda (DAN, MJESEC, GODINA, itd.) naznačena je kao dodatni parametar.
  • DODAJ DATUM omogućuje dodavanje ili oduzimanje određenog vremena određene vrste od datuma (SEKUNDA, MINUTA, DAN itd.).
  • DATUM RAZLIKE određuje razliku između dva datuma, označavajući vrstu izlazne vrijednosti (DAN, GODINA, MJESEC itd.).
  • NIJE NULL zamjenjuje vrijednost koja nedostaje navedenim izrazom.
  • ZASTUPSTVO i ZASTUPSTVOLINKOVI dobiti string reprezentaciju navedenog polja. Primijeni na bilo koje vrijednosti i samo na referentne vrijednosti.
  • TIP, TIP VRIJEDNOSTI koriste se za određivanje tipa ulaznog parametra.
  • VEZA je logički operator usporedbe za tip vrijednosti atributa.
  • IZRAZITI koristi se za pretvaranje vrijednosti u željeni tip.
  • DATUM VRIJEME dobiva vrijednost tipa "Datum" iz numeričkih vrijednosti (godina, mjesec, dan, sat, minuta, sekunda).
  • ZNAČENJE u zahtjevu 1C koristi se za označavanje unaprijed definiranih vrijednosti - direktorija, popisivanja, planova za vrste karakteristika. Primjer upotrebe: " Gdje je pravna osoba = vrijednost (nabrajanje. pravna osoba. pojedinac)«.

Query Builder

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

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

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


Konzola zahtjeva

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

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

Najbolji članci na temu