Užklausų kūrimas ir darbas su jais (pradedantiesiems). Užklausų kūrimas ir darbas su jais (pradedantiesiems) 1s 8.3 jei užklausoje

1C programavimas susideda ne tik iš programos rašymo. 1C yra vartotojo veiksmų ir duomenų, su kuriais jis dirba, luitas.

Duomenys saugomi duomenų bazėje. 1C užklausos yra būdas gauti duomenis iš duomenų bazės, kad būtų galima juos parodyti vartotojui formoje arba apdoroti.

Pagrindinė ataskaitos dalis yra 1C užklausa. Ataskaitos atveju ACS yra didžiausia ataskaitos dalis.

Atsisėskite. Atsikvėpti. Nusiramink. Dabar aš jums papasakosiu naujienas.

Norint programuoti 1C, nepakanka žinoti 1C programavimo kalbą. Taip pat turite žinoti 1C užklausos kalbą.

1C užklausos kalba yra visiškai atskira kalba, kuri leidžia mums nurodyti, kokius duomenis turime gauti iš duomenų bazės.

Jis taip pat yra dvikalbis – tai yra, galite rašyti rusiškai arba angliškai. Ji labai panaši į SQL užklausų kalbą ir ją žinantys gali atsipalaiduoti.

Kaip naudojamos 1C užklausos

Kai vartotojas paleidžia 1C įmonės režimu, veikiančiame kliente nėra nė gramo duomenų. Todėl, kai reikia atidaryti katalogą, 1C prašo duomenų iš duomenų bazės, tai yra, pateikia 1C užklausą.

1C užklausos yra:

  • Automatinės užklausos 1C
    Automatiškai generuoja sistema. Sukūrėte dokumentų sąrašo formą. Pridėtas stulpelis. Tai reiškia, kad atidarius šią formą įmonės režimu, bus pateikta užklausa ir bus prašoma šio stulpelio duomenų.
  • Pusiau automatinės užklausos 1C
    1C kalboje yra daug metodų (funkcijų), kai pasiekiama duomenų bazės užklausa. Pavyzdžiui.GetObject()
  • Rankinės 1C užklausos (programuotojo parašytos specialiai kaip užklausa)
    Galite patys parašyti 1C užklausą kode ir ją vykdyti.

1C užklausų kūrimas ir vykdymas

1C užklausa yra tikrasis užklausos tekstas 1C užklausos kalba.
Tekstą galima rašyti rašikliais. Tai yra, imkite ir parašykite (jei mokate šią kalbą).

Kadangi 1C propaguoja vizualinio programavimo koncepciją, kai daug ar beveik viską galima padaryti be kodo rašymo ranka, yra specialus Query Constructor objektas, leidžiantis nupiešti užklausos tekstą nežinant užklausos kalbos. Tačiau stebuklų nebūna – tam reikia mokėti dirbti su konstruktoriumi.

Kai 1C užklausos tekstas bus paruoštas, jį reikia įvykdyti. Šiuo tikslu yra objektas 1C kode Request(). Štai pavyzdys:

Užklausa = Nauja užklausa();
Query.Text = "PASIRINKITE
| Nomenklatūra.Nuoroda
|NUO
| Katalogas.Nomenklatūra AS Nomenklatūra
|KUR
| Nomenklatūra.Paslauga“;
Select = Query.Run().Select();

Ataskaita(Pasirinkimas.Nuoroda);
EndCycle;

Kaip matote pavyzdyje, įvykdžius 1C užklausą, rezultatas ateina pas mus ir mes turime jį apdoroti. Rezultatas yra viena ar kelios lentelės eilutės (specialia forma).

Rezultatą galima įkelti į įprastą lentelę:
Atnešti = Query.Run().Iškrauti(); //Rezultatas – reikšmių lentelė

Arba tiesiog apeikite eilutę po eilutės.
Select = Query.Run().Select();
Nors Select.Next() Loop
//Padarykite ką nors su užklausos rezultatais
EndCycle;

Darbas su 1C užklausomis

Pagrindiniai 1C užklausų principai

Pagrindiniai 1C užklausos sudarymo principai –
PASIRINKITE laukų sąrašą FROM Lentelės pavadinimas WHERE Sąlygos

Tokios 1C užklausos sudarymo pavyzdys:

PASIRINKTI
//Pasirinktinų laukų sąrašas
nuoroda,
Vardas,
Kodas
NUO
//lentelės, iš kurios pasirenkame duomenis, pavadinimas
//lentelių sąrašas yra objektų sąrašas konfigūravimo programos lange
Katalogas.Nomenklatūra
KUR
//nurodykite pasirinkimą
Produkto tipas = &Paslauga //pasirinkimas pagal išorinę vertę
Arba paslauga // Būlio tipo atributas „Service“, pasirinkimas pagal reikšmę True
RŪŠIUOTI PAGAL
//Rūšiavimas
vardas

1C lentelių sąrašas

Lentelių pavadinimus galite pamatyti konfigūravimo programos lange. Vietoj „Katalogai“ tereikia parašyti „Katalogas“, pvz., „Katalogas.Nomenklatūra“ arba „Dokumentas.Prekių ir paslaugų pardavimas“ arba „Kaupimo registras.Pardavimai“.

Yra papildomos lentelės (virtualios) registrams, kurios leidžia gauti galutinius skaičius.

Information Register.RegisterName.Last Slice(&Date) – 1C užklausa iš informacijos registro, jei ji periodinė, konkrečiai datai

Kaupimo registras. Registro pavadinimas. Likučiai(&data) – 1C užklausa iš likučių registro konkrečiai datai

Kaupimo registras.Regitro pavadinimas.Apyvarta (&Pradžios data, &Pabaigos data) – 1C užklausa iš apyvartos registro už laikotarpį nuo pradžios datos iki pabaigos datos.

Papildomi principai

Kai prašome kai kurių duomenų sąrašo, veikia pagrindiniai principai. Bet mes taip pat galime paprašyti skaičių ir užklausa gali juos suskaičiuoti (pavyzdžiui, pridėti).

PASIRINKTI
//Kiekis(FieldName) – skaičiuoja kiekį
//Field AS OtherName – pervadina lauką
Kiekis (Nuoroda) AS Paskelbtų dokumentų kiekis
NUO

KUR
Atlikta

Ši 1C užklausa grąžins mums visą dokumentų skaičių. Tačiau kiekvienas dokumentas turi lauką Organizacija. Tarkime, kad norime suskaičiuoti kiekvienos organizacijos dokumentų skaičių naudodami 1C užklausą.

PASIRINKTI
//tik dokumento laukas
Organizacija,
//skaičiuoti kiekį
Kiekis(Nuoroda) AS KiekisPagal organizacijas
NUO
Dokumentas.Prekių ir paslaugų pardavimas
KUR
Atlikta
GRUPUOTI PAGAL

Organizacija

Šioje 1C užklausoje bus pateiktas kiekvienos organizacijos dokumentų skaičius (taip pat vadinamas „pagal organizaciją“).

Papildomai apskaičiuokime šių dokumentų kiekį naudodami 1C užklausą:

PASIRINKTI
//tik dokumento laukas
Organizacija,
//skaičiuoti kiekį

// suskaičiuokite sumą

NUO
Dokumentas.Prekių ir paslaugų pardavimas
KUR
Atlikta
GRUPUOTI PAGAL
//būtina naudoti, jei laukų sąraše yra funkcija count() ir vienas ar daugiau laukų vienu metu – tuomet reikia sugrupuoti pagal šiuos laukus
Organizacija

Šis 1C prašymas taip pat grąžins mums dokumentų kiekį.

PASIRINKTI
//tik dokumento laukas
Organizacija,
//skaičiuoti kiekį
Kiekis (nuoroda) AS Kiekis pagal organizacijas,
// suskaičiuokite sumą
Suma (Dokumento suma) AS suma
NUO
Dokumentas.Prekių ir paslaugų pardavimas
KUR
Atlikta
GRUPUOTI PAGAL
//būtina naudoti, jei laukų sąraše yra funkcija count() ir vienas ar daugiau laukų vienu metu – tuomet reikia sugrupuoti pagal šiuos laukus
Organizacija
PO REZULTATAI Bendra

1C užklausų kalba yra plati ir sudėtinga, todėl mes nenagrinėsime visų jos galimybių vienoje pamokoje – skaitykite kitas mūsų pamokas.

Trumpai apie papildomas 1C užklausų kalbos funkcijas:

  • Duomenų sujungimas iš kelių lentelių
  • Įdėtos užklausos
  • Partijos užklausa
  • Sukurkite savo virtualias lenteles
  • Užklausa iš verčių lentelės
  • Integruotų funkcijų naudojimas reikšmėms gauti ir manipuliuoti.

1C užklausų kūrimo priemonė

Kad užklausos tekstas nebūtų rašomas ranka, yra 1C užklausos dizaineris. Tiesiog dešiniuoju pelės mygtuku spustelėkite bet kurią modulio vietą ir pasirinkite 1C Query Designer.

1C užklausų dizaino kairėje pasirinkite norimą lentelę ir vilkite ją į dešinę.

Iš 1C užklausų dizaino lentelės pasirinkite reikiamus laukus ir vilkite į dešinę. Jei norite ne tik pažymėti lauką, bet pritaikyti jam kokią nors sumavimo funkciją, nuvilkę du kartus spustelėkite laukelį pele. Tada skirtuke Grupavimas turėsite pasirinkti (nuvilkti) reikiamus laukus grupavimui.

1C užklausų dizainerio skirtuke Sąlygos galite pasirinkti reikiamus pasirinkimus tokiu pačiu būdu (vilkdami laukus, kuriais pasirinksite). Būtinai pasirinkite tinkamą sąlygą.

Skirtuke Užsakymas nurodomas rūšiavimas. Skirtuke Rezultatai – rezultatų apibendrinimas.

Naudodami 1C užklausų dizainerį galite ištirti bet kurią esamą užklausą. Norėdami tai padaryti, dešiniuoju pelės mygtuku spustelėkite esamos užklausos tekstą ir taip pat pasirinkite 1C užklausos dizaineris - ir užklausa bus atidaryta 1C užklausų dizainerėje.

1C 8 užklausų kalba yra nepakeičiamas 1C programuotojo įrankis, leidžiantis rašyti glaustesnį, paprastesnį, suprantamesnį kodą ir naudoti mažiau sistemos išteklių dirbant su duomenimis. Šis straipsnis atidaro pamokų, skirtų 1C 8 užklausų kalbai, seriją. Pirmoje pamokoje apžvelgsime pagrindinio šios kalbos operatoriaus struktūrą - PASIRINKTI. Naudodami šį operatorių galite kurti pasirinkimus iš duomenų bazės lentelių. Pasirinktus lentelės duomenis galima rūšiuoti, dėti sąlygas, susieti ir derinti su kitų lentelių duomenimis, grupuoti pagal įvairius laukus ir dar daugiau.

Užklausos kalba 1C įmonė 8 – operatoriaus struktūra PASIRINKITE

Pažiūrėkime į operatoriaus SELECT struktūrą (neprivalomos operatoriaus dalys nurodomos laužtiniuose skliaustuose). 1C užklausų kalba suteikia daugybę įrankių duomenų pavyzdžiams kurti.

PASIRINKTI [Leidžiamą] [SKITINGĄ] [FIRST A] [Field1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[VIDINIS PRIJUNGIMAS ][LEFT JOIN][FULL JOIN] Table2 AS pseudonimas ​​Table2 [[VIDINIS PRISIJUNGIMAS][LEFT JOIN][FULL JOIN] Lentelė C AS Pseudonimas C lentelės pagal išraišką1 [Ir išraiška2]...[Ir išraiškaD]] .. . ... PAGAL 1 reiškinį [Ir 2 išraišką]...[Ir išraiškąE]] ... [TableF AS TableF slapyvardį] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [IR] Išraiška2] ... [IR išraiškaH]] [SUJUNGTI VISUS...] [; ...] [INDEKSAS PAGAL slapyvardį1 ... PseudonimasB] [IŠ viso [Agregavimo funkcija (1 laukas)][,] [Agregavimo funkcija (2 laukas)][,] ... [Agregavimo funkcija (I laukas)] PAGAL [BENDRAS DALIS][,] [ GroupingField1][,] ... [GroupingFieldj]]

Raktažodžiai ir blokai darbui su laukais

  • PASIRINKTI— raktažodis, nurodantis operatoriaus pradžią;
  • LEIDŽIAMAS nurodo, kad pasirinkimas turi apimti lentelės įrašus, turinčius skaitymo prieigą tam vartotojui;
  • ĮVAIRUS rodo, kad imtyje turi būti tik skirtingi (visuose laukuose) srautai. Kitaip tariant, pasikartojančios eilutės bus pašalintos iš imties;
  • PIRMOJI A jei nurodysite šį raktinį žodį, tada į pasirinkimą bus įtraukta tik pirmoji A iš užklausoje pasirinktų eilučių, kur A yra natūralusis skaičius;
  • Lauko blokas— šiame bloke nurodomi laukai, kuriuos reikia įtraukti į pasirinkimą. Šie laukai bus pasirinkti stulpeliai. Paprasčiausiu atveju laukas atrodo taip: Table Alias.TableFieldName AS Lauko slapyvardis

    Taip nurodome, iš kurios lentelės paimame šį lauką. 1C užklausos kalba leidžia nurodyti bet kokius slapyvardžius, tačiau jie neturėtų būti kartojami tame pačiame SELECT sakinyje. Laukas gali būti sudėtingesnis, susidedantis iš įvairių lentelės laukų, užklausos kalbos funkcijų ir agreguotų funkcijų derinių, tačiau šioje pamokoje tokių atvejų neapžvelgsime;

Raktiniai žodžiai ir blokai darbui su lentelėmis

  • Įdėkite laikinosios lentelės pavadinimą- raktažodis VIETA skirta sukurti laikiną lentelę konkrečiu pavadinimu, kuri bus saugoma RAM per tam tikrą 1C 8 sesiją, kol ji pasibaigs arba kol laikina lentelė bus sunaikinta. Reikėtų pažymėti, kad laikinųjų lentelių pavadinimai vienoje 1C 8 sesijoje neturėtų kartotis;
  • Lentelių ir ryšių blokas— blokas nurodo visas šioje užklausoje naudojamas lenteles, taip pat ryšius tarp jų. Blokas prasideda raktiniu žodžiu NUO, po kurio nurodomas pirmosios lentelės pavadinimas ir slapyvardis. Jei ši lentelė susijusi su kitomis lentelėmis, tada nurodomi ryšiai. 1C užklausos kalboje yra šie ryšio tipų rinkiniai:
    • VIDINIS PRISIJUNGIMAS— įrašas iš kairiosios lentelės bus įtrauktas į pasirinkimą tik tuo atveju, jei bus įvykdyta prisijungimo sąlyga, įrašas iš dešinės lentelės bus įtrauktas į pasirinkimą tik tada, kai bus įvykdyta prisijungimo sąlyga;
    • KAIRIS RYŠYS— įrašas iš kairės lentelės bus įtrauktas į pasirinkimą bet kuriuo atveju, įrašas iš dešinės lentelės bus įtrauktas į atranką tik tuo atveju, jei bus įvykdyta prisijungimo sąlyga;
    • PILNAS PRIJUNGIMAS— įrašas iš kairiosios lentelės bet kuriuo atveju pirmiausia bus įtrauktas į pasirinkimą, tada tik tuo atveju, jei įvykdoma prisijungimo sąlyga, įrašas iš dešinės lentelės pirmiausia bus įtrauktas į pasirinkimą, o tik tada, jei prisijungimo sąlyga yra patenkintas. Tokiu atveju gautos pasikartojančios eilutės neįtraukiamos į imtį.

    Po ryšio tipo nurodomas antrosios lentelės pavadinimas ir slapyvardis. Toliau ateina raktinis žodis BY, po kurio seka ryšio sąlygos, sujungtos viena su kita loginiais operatoriais IR, ARBA. Kiekviena sąlygos išraiška turi grąžinti Būlio reikšmę (tiesa, klaidinga). Jei pirmoji lentelė yra prijungta prie kitų nei antrosios lentelės, tada vėl nurodomas ryšio tipas ir pan. Kiekviena iš jungime dalyvaujančių lentelių savo ruožtu gali būti prijungta prie kitų lentelių, tai parodyta užklausos struktūros diagramoje. Jei lentelė nesusijusi su pirmąja, tada ji nurodoma be ryšio tipo, tada gali sekti jos jungtys ir pan.;

Raktažodžiai ir duomenų konvertavimo blokai

  • Grupės blokas— šis blokas naudojamas lentelės eilutėms grupuoti. Eilutės sujungiamos į vieną, jei po raktinio žodžio nurodytos laukų reikšmės GRUPUOTI PAGAL pasirodo esąs tas pats. Šiuo atveju visi kiti laukai yra sumuojami, apskaičiuojami, maksimaliai padidinami arba sumažinami naudojant agregavimo funkcijas. Suvestinės funkcijos naudojamos lauko bloke. Pavyzdys: Maximum(TableAlias.TableFieldName) AS Lauko Alias
  • Būklės blokas- šiame bloke po raktinio žodžio KUR nurodomos sąlyginės išraiškos, atskirtos loginiais operatoriais IR, ARBA, kad kuri nors iš pasirinktų eilučių būtų įtraukta į pavyzdį, būtina, kad visos suvestinės sąlygos turėtų reikšmę Tiesa.
  • VISKĄ DERINTI— šis raktinis žodis naudojamas užklausoms (operatoriams PASIRINKTI). 1C užklausų kalba leidžia sujungti kelias užklausas į vieną. Kad užklausos būtų sujungtos, jos turi turėti tą patį laukų rinkinį;
  • «;» - kabliataškiai naudojami atskirti vienas nuo kito nepriklausomus teiginius PASIRINKTI;
  • RODYKLĖ PAGAL— raktažodis naudojamas po jo nurodytiems laukams indeksuoti;
  • Santraukos blokas— naudojamas į medžius panašiems pavyzdžiams statyti. Kiekvienam iš grupavimo laukų, nurodytų po raktinio žodžio PAGAL, pasirinkime bus sukurta atskira eilutė. Šioje eilutėje, naudojant suvestines funkcijas, bus apskaičiuojamos bendros laukų, nurodytų po raktinio žodžio, reikšmės REZULTATAI.

Ar norite toliau mokytis 1C 8 užklausų kalbos? Tada perskaitykite kitą straipsnį.

Prašymas . Tekstas = "PASIRINKITE | StorageUnits.Link |NUO | Directory.usStorageUnits KAIP touseStorageUnits // 1 pavyzdys: palyginimas su tuščia logine reikšme: |KUR | StorageUnits.AllowSelectionFromReserveZone = Netiesa // 2 pavyzdys. bet jei ši Būlio reikšmė yra apibrėžta, tada geriau būtų taip: // neigiamo Būlio sąlyga: |KUR | NĖRA saugojimo vienetų. Leiskite pasirinkti iš rezervinės zonos // 3 pavyzdys. pasirinkimas pagal tuščio lauko, kurio tipas yra „konkretaus tipo katalogas“, sąlyga |KUR | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // 3a pavyzdys. pasirinkimas pagal tuščio lauko, kurio tipas yra „konkretaus tipo dokumentas“, sąlygą |KUR | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // 3b pavyzdys. pasirinkimas pagal tuščio lauko, kurio tipas yra „skirtingų tipų dokumentai“, sąlygą ( sudėtinis laukas) |KUR | (Mūsų informacijos registras.Dokumentas = VALUE(Document.OurDocument1.EmptyLink) | ARBA OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | ARBA... (ir tt – paeiliui pateikiame visų galimų šio sudėtinio lauko tipų sąlygas) ) // 4 pavyzdys arba atvirkščiai, jei reikia pasirinkti užpildytą "stygos" tipo reikšmę, tuomet padės sąlyga: |KUR | Saugyklos vieneto pavadinimas > """" // 5 pavyzdys. Jei reikia pasirinkti konkretaus tipo dokumentus su sudėtiniu duomenų tipu, pavyzdžiui, „RunningTasks“ registre, „Task“ išteklius turi sudėtinį tipą, tarp kurio reikšmių galimas dokumentas „Pasirinkimas“. |KUR | EXPRESS(Informacijos registrasVykdomosužduotys.Užduotis AS Document.Selection) LINK Dokumentas.Pasirinkimas // 5a pavyzdys. Kitas panašus pavyzdys, kai reikia pasirinkti konkretaus tipo dokumentus | PASIRINKIMAS | KADA IŠRAŠYTI (Dokumentų korespondencija. DokumentasBU AS dokumentas. Prekių ir paslaugų gavimas) LINK Dokumentas. Prekių ir paslaugų gavimas | TADA ""Prekių ir paslaugų gavimas"" | KADA IŠRAŠYTI (Dokumentų korespondencija. DocumentBU AS dokumentas. Prekių ir paslaugų pardavimas) LINK Dokumentas Prekių ir paslaugų pardavimas | TADA ""Prekių ir paslaugų pardavimas"" | KITA """" | PABAIGA kaip dokumento rodinys // 6 pavyzdys. pasirinkimas pagal neapibrėžtos reikšmės sąlygą: |KUR | SavedSettings.User = UNEFFINED // Pavyzdys 7. atranka pagal judesio tipą Kaupimo registro "Įeinantys", "Išlaidos" - panašiai): |KUR | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Pavyzdys 8. Kaip užklausoje nurodyti, kad užklausos vykdyti nereikia (pvz., reikia programiškai, priklausomai nuo kokios nors sąlygos, grąžinti tuščią užklausos rezultatą - Request.Text = StrReplace(Request.Text, "KUR Doc.Link = &DocumentLink" , "KUR YRA MELAS");). Norėdami tai padaryti, tiesiog pridėkite sąlygą „Where is False“. Beje, nepaisant pavyzdyje prašomų duomenų kiekio, toks prašymas bus įvykdytas akimirksniu. |KUR YRA MELAS // 9 pavyzdys. Tikrinimas, ar užklausos rezultate yra duomenų: Jei nePrašymas.Vykdyti().Tuščia() Tada // 10 pavyzdys. pasirinkimas pagal tuščią datą: |KUR | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Šiame straipsnyje norime viską aptarti su jumis 1C užklausų kalbos funkcijos, ir užklausos kalbos konstrukcijos. Kuo skiriasi funkcija ir dizainas? Funkcija iškviečiama su skliaustais ir galimais parametrais juose, o konstrukcija rašoma be skliaustų. Neabejotinai visos 1C užklausų kalbos struktūros ir funkcijos padaryti duomenų gavimo procesą lanksčiu ir daugiafunkciniu. Šios funkcijos ir konstrukcijos taikomos užklausų laukams, o kai kurios taip pat taikomos sąlygoms.

1C užklausų kalbos funkcijos

Nes aiškus aprašymas 1C užklausų kalbos funkcijos yra daug rečiau nei struktūrų aprašymai, nusprendėme pradėti žiūrėti į funkcijas. Dabar pažvelkime į kiekvieną atskirai, apibūdindami jo paskirtį, sintaksę ir naudojimo pavyzdį, taigi:

1. Funkcija DATA LAIKAS- ši funkcija sukuria pastovų lauką, kurio tipas yra „Data“.

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

Naudojimo pavyzdys:

2. Funkcija DATE DIFFERENCE- grąžina skirtumą tarp dviejų datų viename iš matmenų (metai, mėnuo, diena, valanda, minutė, sekundė). Matavimas perduodamas kaip parametras.

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

Naudojimo pavyzdys:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Kiekis.Dienos";

3. Funkcija VALUE- nustato pastovų lauką su iš anksto nustatytu įrašu iš duomenų bazės; taip pat galite gauti bet kokio tipo tuščią nuorodą.

Sintaksė: VALUE(<Имя>)

Naudojimo pavyzdys:

Request.Text = "SELECT //iš anksto apibrėžtą elementą | VERTĖ (Katalogas. Valiutos. Doleris) AS doleris, //tuščia nuoroda | VERTĖ (Dokumentas. Prekių ir paslaugų gavimas. EmptyLink) AS kvitas, //pervedimo vertė | VERTĖ (Pervedimas) . Juridinis asmuo. Individualus) AS Asmuo, //iš anksto nustatyta sąskaita | VERTĖ (Sąskaitų planas. Savarankiškas. Medžiagos) AS sąskaita_10" ;

4. SELECT funkcija- prieš mus yra IF konstrukcijos analogas, kuris naudojamas kode, tik šis naudojamas 1C užklausose.

Sintaksė: PASIRINKTI KADA<Выражение>TADA<Выражение>KITAIP<Выражение>GALAS

Naudojimo pavyzdys:

Request.Text = //jei suma yra didesnė nei 7500, tada turėtų būti 300 rublių nuolaida, //taigi, jei sąlyga suaktyvinama, funkcija //grąžina Suma - 300 //kitaip užklausa grąžins tiesiog Suma "PASIRINKITE | PASIRINKTI | KAI TKR kvitai.Suma > 7500 | THEN TKRkvitai.Suma - 300 | KITAS TKRkvitai.Suma | PABAIGA AS SumaSu nuolaida |NUO | Dokumentas.Prekių gavimasPaslaugos.Prekės AS TKR";

5. EXPRESS funkcija- leidžia išreikšti pastovų lauką tam tikru tipu.

Sintaksė: EXPRESS (lauko pavadinimas AS tipo pavadinimas)

Naudojimo pavyzdys:

Query.Text = "PASIRINKITE ĮVAIRIUS | Pardavimas.Regitros numeris, | PASIRINKTI | KAI Pardavimas.Registruotojas LINK Dokumentas.Sunaudojimas | THEN EXPRESS(Pardavimas.Registr.Kaip dokumentas.Sunaudojimo reikmenys) | ELSE SELECT | WHEN Pardavimas |Registruotojas LINK Dokumentas.Įgyvendinimas THEN EXPRESS(Pardavimas.Regitra AS dokumentas.Įdiegimas) | END | ... | END AS Numeris | NUO | RegistruotiAkumuliacijos.Pirkimai AS Pirkimai";

Ar yra kita galimybė naudoti funkciją EXPRESS mišrių tipų laukuose, kur jie atsiranda? Paprasčiausias pavyzdys yra bet kurio registro „Regitras“. Taigi kodėl mums gali reikėti kvalifikuoti tipą registratoriuje? Panagrinėkime situaciją, kai iš registratoriaus pasirenkame lauką „Skaičius“, iš kurios lentelės bus pasirinktas skaičius? Teisingas visų atsakymas! Todėl, kad mūsų užklausa veiktų greitai, turėtume nurodyti aiškų tipą naudodami funkciją EXPRESS

Naudojimo pavyzdys:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Katalogas.Nomenklatūra AS Nomenklatūra";

6. ISNULL funkcija(alternatyvi rašyba ISNULL) – jei laukas yra NULL tipo, tada jis pakeičiamas antruoju funkcijos parametru.

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

Naudojimo pavyzdys:

Taip pat atkreipkite dėmesį, kad NULL tipą patartina VISADA pakeisti tam tikra reikšme, nes palyginimas su tipu NULL visada grąžina FALSE, net jei lyginate NULL su NULL. Dažniausiai NULL reikšmės susidaro dėl lentelių sujungimo (visų tipų sujungimai, išskyrus vidinius).

Query.Text = //Pasirinkite visą prekę ir jos likučius //jei kurioje nors prekėje nėra likučio, bus laukas //NULL, kuris bus pakeistas reikšme 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Likęs | NUO | Katalogas.Nomenklatūra AS Nr. | KAIRIS RYŠYS Registruoti sankaupas. Prekės Sandėliuose. Likučiai AS PrekėsSandėliuose Likučiai | ĮJUNGTA (Prekės.Sandėlių numeriai)Nuorodos;

7. ATSTOVAVIMO funkcija- leidžia gauti užklausos lauko vaizdą.

Sintaksė: SPEKTAKLIS(<НаименованиеПоля>)

Naudojimo pavyzdys:

Query.Text = "SELECT | ATSTOVYMAS(FreeRemainingRemains.Nomenclature) AS nomenklatūra, | ATSTOVYMAS(FreeRemaining.Warehouse) AS Sandėlis, | FreeRemainingRemaining.InStockRemaining |NUO |Akumuliacijos Registras.LikusiasLikęs;Likęs

Konstrukcijos 1C užklausos kalba

Mes su jumis aptarėme aukščiau 1C užklausų kalbos funkcijos, dabar laikas pagalvoti konstrukcijas 1C užklausos kalba, jie ne mažiau svarbūs ir naudingi, pradėkime.

1. Statybos LINK- yra loginis operatorius, skirtas patikrinti nuorodos tipą. Dažniausiai susiduriama tikrinant kompleksinio tipo lauką su konkrečiu tipu. Sintaksė: LINK<Имя таблицы>

Naudojimo pavyzdys:

Request.Text = //jei registratoriaus vertės tipas yra dokumentas Kvitas, //tada užklausa pateiks "Prekių gavimas", kitu atveju "Prekių pardavimas" "SELECT | SELECT | WHEN Remainings.Registr LINK Dokumentas.Prekių gavimas ir Paslaugos | TADA ""Kvitas"" | KITA ""Vartojimas" | END AS Judėjimo tipas | NUO | Kaupimo registras. Likę produktai sandėliuose AS lieka" ;

2. Dizainas TARP- šis operatorius patikrina, ar reikšmė yra nurodytame diapazone.

Sintaksė: TARP<Выражение>IR<Выражение>

Naudojimo pavyzdys:

Request.Text = //gauti visą nomenklatūrą, kurios kodas yra nuo 1 iki 100 "SELECT | Nomenclature.Link | FROM | Katalogas. Nomenklatūra AS Nomenklatūra | WHERE | Nomenklatūra.Kodas NUO 1 IR 100" ;

3. B ir B konstrukcijos HIERARCHIJA- patikrinkite, ar reikšmė yra perduodamame sąraše (masyvus, verčių lenteles ir kt. galima perkelti kaip sąrašą). Operatorius IN HIERARCHY leidžia peržiūrėti hierarchiją (sąskaitų plano naudojimo pavyzdys).

Sintaksė: IN(<СписокЗначений>), HIERARCHIJOJE(<СписокЗначений>)

Naudojimo pavyzdys:

Request.Text = //pasirinkite visas paskyros subsąskaitas "SELECT | Savarankiškas. Susieti AS paskyrą | IŠ Sąskaitos. Savarankiškas. Prekės)“;

4. Dizainas PANAŠUS- Ši funkcija leidžia palyginti eilutę su eilutės raštu.

Sintaksė: KAIP "<ТекстШаблона>"

Eilučių modelio parinktys:

% – seka, turinti bet kokį skaičių atsitiktinių simbolių.

Vienas savavališkas simbolis.

[...] – bet koks vienas simbolis arba simbolių seka, nurodyta laužtiniuose skliaustuose. Sąrašas gali nurodyti diapazonus, pvz., a-z, o tai reiškia savavališką simbolį, įtrauktą į diapazoną, įskaitant diapazono galus.

[^...] – bet koks atskiras simbolis arba simbolių seka, nurodyta laužtiniuose skliaustuose, išskyrus tuos, kurie išvardyti po neigimo ženklo.

Naudojimo pavyzdys:

Query.Text = //raskite visą nomenklatūrą, kurioje yra šaknis TABUR ir kuri prasideda //mažąja arba didžiąja raide t "SELECT | Nomenklatūra. Nuoroda | FROM | Katalogas. Nomenklatūra AS Nomenklatūra | WHERE | Produktai. Pavadinimas PATINKA "" [Tt ]abur%""" ;

5. Dizainas LEIDŽIAMAS- šis operatorius leidžia iš duomenų bazės pasirinkti tik tuos įrašus, kuriems skambinantysis turi leidimą skaityti. Šios teisės sukonfigūruotos įrašo lygiu (RLS).

Sintaksė: ALOWED rašomas po raktinio žodžio SELECT

Naudojimo pavyzdys:

Request.Text = "PASIRINKITE LEIDŽIAMUS | Sandorio šalis. Nuoroda | IŠ | Katalogas. Sandorio šalys KAIP sandorio šalys";

6. Dizainas ĮVAIRUS- leidžia pasirinkti įrašus, kuriuose nėra pasikartojančių įrašų.

Sintaksė: VARIOUS rašomas po raktinio žodžio SELECT

Naudojimo pavyzdys:

Request.Text = //parenka įrašus, į kuriuos skaitytojas turi teises "PASIRINKTI ĮVAIRIUS | Counterparties.Name |FROM | Katalogas. Sandorio šalys AS Counterparties" ;

Taip pat ĮVAIRINGA konstrukcija gali būti naudojama su LEIDŽIAMU operatoriumi ir kitais operatoriais.

Naudojimo pavyzdys:

Request.Text = //parenka įvairius įrašus, į kuriuos skaitytojas turi teises "SELECT ALOWED VARIOUS | Counterparties.Name | FROM | Directory. Counterparties AS Counterparties";

7. Dizainas PIRMA- iš užklausos rezultato pasirenka parametre nurodytą įrašų skaičių.

Sintaksė: FIRST<число>

Naudojimo pavyzdys:

Request.Text = //pasirinkite pirmuosius 4 CCD numerius iš katalogo "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Dizainas POKYČIAMS- leidžia užrakinti lentelę, veikia tik operacijose (aktualu tik automatiniams užraktams).

Sintaksė: DĖL POKYČIŲ<НаименованиеТаблицы>

Naudojimo pavyzdys:

Query.Text = "SELECT | Laisvos likučio likučiai. Nomenklatūra, | Laisvos likučio likučiai. Sandėlis, | Laisvos likučio likučiai. Likę sandėlyje | FROM | Kaupimų registras. Nemokami likučiai. Likučiai, kaip nemokami likučiai Likučiai | PAKEITIMAI Registras | . Nemokami likučiai. Likučiai";

9. Dizainas UŽSAKYTI PAGAL- tvarko duomenis pagal tam tikrą lauką. Jei laukas yra nuoroda, tada nustatant vėliavėlę AUTOMATINIS UŽSAKYMAS Rūšiuojama pagal nuorodos atvaizdavimą; jei vėliavėlė išjungta, nuorodos rūšiuojamos pagal nuorodos adreso atmintyje senumą.

Sintaksė: RŪŠIUOTI PAGAL<НаименованиеПоля>AUTOMATINIS UŽSAKYMAS

Naudojimo pavyzdys:

Query.Text = "SELECT | Nemokami likučiai. Nomenklatūra AS Nomenklatūra, | Laisvos likučio likučiai. Sandėlis AS Sandėlis, | Laisvos likučio likučiai. Sandėlyje Likęs | NUO | Nomenklatūra | AUTOMATINIS UŽSAKYMO ATGAVIMAS";

10. Dizainas GROUP BY- naudojamas sugrupuoti užklausos eilutes pagal konkrečius laukus. Skaitiniai laukai turi būti naudojami su bet kokia agregato funkcija.

Sintaksė: GRUPUOTI PAGAL<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Naudojimo pavyzdys:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsIn Warehouses.Warehouse, | SUM(GoodsInWarehouses.Stock) AS ATJEKOS |IŠ | RegistruotiSandėliuose AS ProduktaiSandėliuose AS ProduktaiNamuose |ProduktaiNamuose |ProduktaiNamuose | Sandėliai. Sandėlis" ;

11. Dizainas TURIMAS- leidžia duomenų atrankos sąlygai taikyti agregavimo funkciją, panašią į WHERE konstrukciją.

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

Naudojimo pavyzdys:

Query.Text = //parenka sugrupuotus įrašus, kuriuose InStock laukas yra didesnis nei 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |NUO | Registruokitės | GRUPĖ PAGAL | ProduktaiSandėliuose.Nomenklatūra, | ProduktaiSandėliuose.Sandėlis | |Turiu | SUMMA(ProduktaiSandėliuose.Sandėliuose) > 3" ;

12. Statyba INDEX BY- naudojamas užklausos lauko indeksavimui. Užklausa su indeksavimu užtrunka ilgiau, bet pagreitina paiešką indeksuotuose laukuose. Galima naudoti tik virtualiose lentelėse.

Sintaksė: RODYKLĖ PAGAL<Поле1, ... , ПолеN>

Naudojimo pavyzdys:

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

13. Dizainas KUR- leidžia nustatyti sąlygą bet kuriems pasirinkimo laukams. Rezultatas apims tik sąlygą atitinkančius įrašus.

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

Naudojimo pavyzdys:

Query.Text = //pasirinkti visi įrašai su CompensationRemaining<>0 ir //AmountFor CalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains, | CompensationRPORemains.AmountForCalcCompRemains.CalcCompRemains |CalcCompRemains | AS KompensacijaRPOstat ki |KUR |AtlyginimasRPORlikęs.Atlyginimas<>0 | Ir CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizaino REZULTATAI... BENDRA- naudojamas sumoms apskaičiuoti; projekte nurodomi laukai, pagal kuriuos bus skaičiuojamos sumos ir sumoms laukams taikomos agregacinės funkcijos. Kai naudojate kiekvieno lauko sumas pagal TOTAL konstrukciją, duomenys sugrupuojami. Yra neprivaloma konstrukcija BENDRA, jos naudojimas taip pat suteikia papildomą grupavimą. Žemiau pamatysite užklausos rezultato pavyzdį.

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

Naudojimo pavyzdys:

Request.Text = "SELECT | Skaičiavimai. Sandorio šalies sutartis. Sutarties tipas AS Sutarties tipas, | Skaičiavimai. Sandorio šalies sutartis AS Sutartis, | Skaičiavimai. Sandorio šalis, | Skaičiavimai. Tarpusavio atsiskaitymo likučio suma AS likutis | NUO | Kaupimų registras. Abipusė Atsiskaitymas SU sandorio šalimis. Likučiai AS Skaičiavimai | IŠ VISO | SUMA (Likutis) | Programinė įranga | BENDRA, | Sutarties tipas";

Paveikslėlyje pateikiamos grupuotės, kurios buvo suformuotos vykdant užklausą, viršutinė skirta skyriui BENDRA, o antrajame lauke Sandorio šalies sutarties tipas.

Šiame straipsnyje mes išnagrinėsime įdėtųjų lentelių temą 1C užklausos kalba.

Užklausos pasirinkimo laukuose galite naudoti įdėtą užklausos šaltinio lentelę. Pavyzdžiui, dokumentas „Paslaugų teikimas“ turi lentelinę Paslaugų dalį, todėl ši lentelės dalis taip pat gali būti rodoma pasirinkimo lauke. Dabar pamatysite, kaip tai galima įgyvendinti.

Savo mokymo duomenų bazėje paleisiu užklausų pultą, atidarysiu užklausų dizainerį ir pasirinksiu lentelę „Paslaugų teikimas“.

Išplėskime šią lentelę

Ir joje matome lentelės dalį „Paslaugos“.

Pažymime visą šią lentelės dalį.

Kaip matote, visa lentelės formos paslaugos dalis visiškai pateko į laukus.

Atkreipkite dėmesį, kad lentelės dalis iš tikrųjų yra atskiras laukas, vadinamas „Paslaugos“, kurio tipas bus „Užklausos rezultatas“. Išmoksime naudoti įdėtą lentelę užklausoje.

Palikime tris įdėtosios lentelės laukus ir pridėkime keletą laukų iš dokumento antraštės.

Dizaineryje spustelėkite Gerai ir pažiūrėkime, kaip atrodys mūsų prašymas.

Kaip matote, užklausoje po lauko „Paslaugos“ yra taškas, o po jo skliausteliuose pateikiami pasirinkti laukai.

Išpildykime prašymą.

Paveiksle matome, kad visi pasirinkti laukai lentelinėje dokumento dalyje yra išvardyti atskirti kableliais lauke „Paslaugos“. Ne visose užklausų pultuose yra toks ekranas, koks pateiktas aukščiau esančiame paveikslėlyje; kartais jis gali tiesiog pasakyti „ “.

Kitas įdomus momentas: įdėtoje lentelėje vietoj laukų galite įdėti žvaigždutę, tada atsiras visi lentelės dalies laukai. To negalima padaryti konstruktoriuje, tik rankiniu būdu užklausoje. Prašymas bus pateiktas tokia forma:

Pažiūrėkime, kaip toks prašymas bus įvykdytas.

Vienintelis dalykas yra tai, kad ši žvaigždutė nebus išsaugota, jei atidarysime užklausos konstruktorių.

Mes išmokome padaryti užklausą su įdėta lentele konsolėje, dabar išmoksime naudoti įdėtą lentelę pasirinkime

Tiesą sakant, apdorojant užklausą nėra taip sunku pasiekti įdėtą lentelę. Jūs tiesiog pasieksite pasirinkimą pagal savo lentelės pavadinimą ir gausite kintamąjį, kurio tipas yra „Užklausos rezultatas“. Tada apdorojate jį kaip įprastą užklausos rezultatą: jei norite, gaukite pavyzdį, jei norite, įkelkite.

Toliau pateikiamas nedidelis kodo, veikiančio su įdėta lentele, pavyzdys:


&Serveryje
Procedūra FillOnServer()
Užklausa = nauja užklausa;
Prašymas. Tekstas = "PASIRINKITE
| Prekės pardavimas. Nuoroda,
| Prekės pardavimas.Produktai.(
| Produktas,
| Kiekis
|NUO
| Dokumentas. Produktų pardavimas KAIP PARDUOTI produktus"
;
Paimti = užklausa. Vykdyti (). Pasirinkite ();
Iki atrankos. Kitas() Ciklas
TopLine of the Tree = Produktų pardavimas. GetItems();
NewRow = TopRowTree. Papildyti();
Nauja linija. Nuoroda = pasirinkimas. Nuoroda;
TableProducts = Pasirinkimas. Prekės;
SelectionProducts = lentelėProduktai. Pasirinkite ();
Atliekant produktų pasirinkimą. Kitas() Ciklas
TreeChildRow = Nauja eilutė. GetItems();
ProductRow = ChildTreeRow. Papildyti();
Produkto eilutė. Nuoroda = Produkto pasirinkimas. Produktas;
Produkto eilutė. Kiekis = SampleItems. Kiekis ;
EndCycle;
EndCycle;
Procedūros pabaiga

Leiskite paaiškinti aukščiau pateiktą kodą.

Visų pirma, mes gavome linijinį pasirinkimą, ir mes einame per šį pasirinkimą kilpa, kurioje sukuriame viršutinę verčių medžio eilutę (ji yra formoje), ir joje įrašome nuorodą į savo dokumentą.

Ir tada įdomiausia, kad vėliau galite net patys pažiūrėti debugeryje, kreipiamės į Produktų pasirinkimo laukelį, o patogumui šį lauką įrašykite į atskirą kintamąjį TableProducts. Šis kintamasis yra „Užklausos rezultato“ tipo. Ir jūs galite lengvai gauti šio rezultato pavyzdį. Tai mes darome. Belieka apeiti šį pasirinkimą naudojant kitą funkciją ir while kilpą.

O šios kilpos viduje pasirinkimo laukus vadinsime įdėtos lentelės laukais ir įrašysime juos į antrines medžio eilutes iš formos.

Tai yra rezultatas, kurį šis kodas grąžins

Vis dar turite klausimų?

Į juos atsakysite patys, kai studijuosite mano kursą „Užklausos 1C pradedantiesiems“. Kur šie ir daugelis kitų klausimų aptariami plačiau. Visa informacija pateikiama paprasta ir prieinama forma ir yra suprantama net tiems, kurie nėra ypač susipažinę su programavimu 1C.

Akcijos kodas su 20% nuolaida: hrW0rl9Nnx

Remkite mano projektą skirdami bet kokią sumą

Prisijunk prie mano grupių.