1s paketinės užklausos vykdymas. Paprastos užklausos. Kai kurių užklausų kalbos operatorių ypatybės

1C GOODWILL įmonės tinklaraštis

1C Enterprise platforma leidžia vienu metu vykdyti kelias užklausas nuosekliai. 1C tai vadinama užklausų paketu. Viename pakete kiekviena užklausa atskiriama kabliataškiu.

Norint pasiekti laipsnišką užklausų vykdymą pakete, paprastai iš pradžių sukuriamos laikinos lentelės, tada sudaromos jų bendrinimo sąlygos, tokios kaip filtrai, sujungimai ir sujungimai. Dėl to pasiekiamas galutinis rezultatas. Laikinosios lentelės, gautos atlikus bet kokias paketo užklausas, išlieka iki visos paketo pabaigos arba tol, kol bus vykdoma užklausa, kuri sunaikina laikinąsias lenteles.

Be to, paketinių užklausų ir laikinų lentelių naudojimas žymiai padidina viso šio kodo segmento skaitomumą. Sudėtingas užklausas, kuriose taip pat yra įdėtųjų užklausų, gali būti labai sunku suprasti. Tačiau jei ilgą sudėtingą užklausą suskaidysite į kelias ir netgi naudosite laikinas lenteles, tai ne tik pagerins suvokimą, bet ir daugeliu atvejų padidins našumą.

Kita svarbi 1C paketinių užklausų detalė yra ta, kad, skirtingai nei įdėtosios užklausos, mes galime atskirai gauti kiekvienos paketo užklausos rezultatą.

Užklausų paketo kūrimo 1C kalba pavyzdys

Norėdami pamatyti pavyzdį, kaip sukurti užklausų paketą, naudosime užklausų dizainerį, kurį aiškumo dėlei iškviesime iš užklausų konsolės. Taigi, mes iš karto matome paketo vykdymo rezultatą.

Sukurkime paprastą paketinio užklausą. Siūlau iš karto įklijuoti užklausos tekstą į konsolę, o tada atidaryti konstruktorių ir pažiūrėti kaip formuojamas užklausų paketas. Pridėkite naują užklausą prie konsolės ir įklijuokite šį tekstą:

Save išlaikantis.Tėvai,

Savarankiškas kodas,

Savarankiškas greito pasirinkimo kodas.

Savarankiškas vardas,

Savarankiškas. Tipas,

Savarankiškas, nebalansinis,

Savarankiškas, kiekybinis.

Sąskaitų planas Savarankiškas AS

////////////////////////////////////////////////////////////////////////////////

Savarankiškai palaikantys tipaiSubconto.Line Number AS eilutės numeris,

Savarankiškai palaikantys Subconto.ViewSubconto AS tipai Subconto,

Self-supportingTypesSubconto.TypeSubconto.Name AS pavadinimas,

Self-supportingTypesSubconto.TypeSubconto.ValueType ASValueType,

Self-supportingTypesSubconto.OnlyTurnover AS OnlyApyvarta,

Self-supportingTypesSubconto.Summary AS Summative

Sąskaitų planas Savarankiškų sąskaitų tipai

RŪŠIUOTI PAGAL

Savarankiškai palaikantys tipaiSubconto.NumberLines

Man tai atrodo taip:

Dabar pereikime prie užklausų kūrėjo. Čia mus sudomins skirtukas „Paketo užklausa“:

Kaip matote, turime dviejų užklausų paketą. Dukart spustelėję bet kurį iš jų, galite pereiti prie jo redagavimo:

Spustelėkite mygtuką „Gerai“ ir pabandykite pamatyti paketinės užklausos rezultatą.

Nustatykime parametrą „Paskyra“. Iš sąskaitų plano galite pasirinkti bet kurią sąskaitą. Kaip tikriausiai jau atspėjote, šis užklausų paketas turi gauti paskyros ypatybes. Spustelėkite „Vykdyti“ ir pamatysite rezultatą:

Metodai Run() ir RunBatch()

Be metodo „Execute()“, kuris po vieną vykdys visas paketo užklausas ir grąžins paskutinės užklausos rezultatą, 1C yra ir „ExecuteBatch()“ metodas. Jis grąžina kiekvienos partijos užklausos pavyzdžių masyvą. Aukščiau pateiktame pavyzdyje šis metodas vykdomas.

ArrayResults = Query.ExecuteBatch();

Selection1 = ArrayResults.Select();

Jei Select1.Next() Tada

//Veiksmai su pasirinkimu 1

endIf;

SelectionViewsSubconto = ArrayResults.Select();

Įrašas Darbas su paketinėmis užklausomis 1C 8.3 ir 8.2 versijose pirmą kartą pasirodė 1C GOODWILL įmonės tinklaraštyje.

jie labai padidina skaitomumą, kas sumažina klaidų tikimybę => man užtenka vien to.

Integruotai 1C:Enterprise 8.0 versijos užklausų kalbai trūko galimybės naudoti laikinąsias lenteles ir rašyti paketines užklausas. Tuo pačiu metu dažnai reikėjo atlikti sudėtingus skaičiavimus per vieną užklausą (ty vieną kliento sąveikos ciklą - 1C:Enterprise serveris - DBVS serveris). Tokioms problemoms spręsti buvo naudojamos antrinės užklausos – iškvietimai ne į metaduomenų objektus, o į pasirinkimus iš šių objektų. Paprastai antrinės užklausos buvo atliekamos su grupavimu ir dažnai buvo naudojamos sujungimams.

DBVS serverio optimizavimo priemonė (nepriklausomai nuo to, kurią DBVS naudojate) ne visada gali tinkamai optimizuoti tokią užklausą. Šiuo atveju optimizatoriaus problema yra tinkamo prisijungimo būdo pasirinkimas. Yra keli algoritmai, skirti sujungti du pavyzdžius. Vieno ar kito algoritmo pasirinkimas priklauso nuo to, kiek įrašų bus viename ir kitame pavyzdyje. Jei sujungiate dvi fizines lenteles, DBVS gali lengvai nustatyti abiejų imčių dydį pagal turimą statistiką. Jei viena iš sujungtų pasirinkimų yra antrinė užklausa, tampa labai sunku suprasti, kiek įrašų ji grąžins. Tokiu atveju DBVS gali suklysti pasirinkdama planą, dėl ko katastrofiškai sumažės užklausos našumas.

Užklausos perrašymas naudojant aukščiau pateiktą metodą, skirtas supaprastinti DBVS optimizatoriaus darbą. Perrašytoje užklausoje visi sujungimuose dalyvaujantys pasirinkimai bus fizinės lentelės, o DBVS galės lengvai nustatyti kiekvieno pasirinkimo dydį. Tai leis DBVS pasirinkti greičiausią iš visų galimų planų. Be to, DBVS padarys teisingą pasirinkimą nepaisydama jokių sąlygų. Tokiu būdu perrašyta užklausa vienodai gerai veiks bet kurioje DBVS, o tai ypač svarbu kuriant cirkuliacijos sprendimus. Be to, tokiu būdu perrašyta užklausa yra geriau skaitoma, lengviau suprantama ir derinama.

Reikia suprasti, kad tokiu būdu perrašydami užklausą, galėjome įvesti tam tikrą jos sulėtėjimą dėl papildomų išlaidų – laikinų lentelių kūrimo. Jei DBVS nesuklys pasirinkdama planą, greičiausiai ji senąją užklausą vykdys greičiau nei naują. Tačiau šis sulėtėjimas visada bus labai mažas. Sulėtėjimo dydis priklauso nuo naudojamos DBVS ir aparatinės įrangos našumo. Įprastu atveju vienos laikinos lentelės sukūrimas gali užtrukti kelias milisekundes. Tai reiškia, kad šie sulėtėjimai negali turėti pastebimos įtakos sistemos veikimui ir, kaip taisyklė, gali būti ignoruojami.

Paketinė užklausa reikalinga, kai užklausa yra per sudėtinga, kad ją būtų galima suformuluoti ir veiksmingai veikti. Norėdami suprasti, kas yra paketo užklausa, galite naudoti šią diagramą:

Beje, paketinės užklausos parinktys tapo prieinamos tik sprendime 8.1.11.67.4, todėl galbūt dar nežinote, kaip tai veikia praktiškai. Paprasčiau tariant, pakanka sukurti užklausų seriją ir sujungti jas per simbolį „;“. Pavyzdžiui:

Rezultatas grąžinamas per paskutinį. Beje, paketinės užklausos palaikomos kiekvienoje įprastoje konsolėje. Jos vykdymo per užklausų konsolę pavyzdys:

Kodėl negalime išsiversti be paketinių užklausų?

Tarpinį rezultatą įtraukiame į laikiną lentelę ir planuojame jį naudoti kai kuriose ateities užklausose. Be laikinosios lentelės funkcijos tokia tarpinė užklausa turėtų būti kartojama dar kartą. Jei nežinote, kaip veikia paketinė užklausa ir kaip ja naudotis, galite paleisti kelias užklausas vieną po kitos, naudodami duomenis iš įdėtųjų lentelių – taip buvo anksčiau, dabar jums nebereikia gaišti laiko, nes turime veiksmingą ir paprastą partijos užklausa 1C. Tai patogu, jums nebereikia prisiminti, kur turėtų būti laikinas stalas. Norėdami sumažinti ir pagreitinti, naudokite prieigos kontrolės sistemos galimybes. Sistema parinks, surūšiuos, vietą. Taip šią naujovę pozicionuoja šio populiaraus ir patikimo sprendimo kūrėjai.

1C kūrėjų paketinių užklausų paskelbimas
  • Reikšmingas visos programos optimizavimas;
  • Žinomo sprendimo mastelio didinimas;
  • Efektyvus našumas, nes įdiegtos partijos talpinimo galimybės;
  • Paprastas ir nesudėtingas sistemos administravimas;
  • Geriausios galimybės integruotis su kitais sprendimais.
Kas yra 8.1.11 užklausos funkcija?

Būtent užklausos žymiai pagerina darbą su laikinomis lentelėmis. Paketinių užklausų funkcionalumas reiškia, kad bet kuri lentelė, sugeneruota konkrečiai užklausai iš paketinės grupės, veikia tol, kol paketinė užklausa visiškai užbaigia savo veiksmą arba kol pasiekiama komanda ją sunaikinti. Dabar galite gauti ir naujausios užklausos rezultatą – tai bus komanda Execute() – ir visą eilę rezultatų naudodami ExecutePackage() metodą.

Algoritmas, skirtas kompetentingai sukurti paketinį užklausą

Taigi, dabar žinome, kad paketinė užklausa yra kelios užklausos, kurias apibūdiname kaip vieną bendrą užklausą. Jie turi būti vykdomi vienas po kito. Bet koks tarpinis rezultatas vykdant visą įtrauktų užklausų grandinę gali būti patalpintas į laikiną lentelę. Su šia struktūra bet kuri užklausa gali pasiekti šiuos tarpinius duomenis. Svarbu, kad bet kurios užklausos, patalpintos į laikinąją lentelę, rezultatus būtų galima naudoti pakartotinai. Tokiu atveju nebereikia registruoti to paties kelis kartus.

Metodo trūkumai

Kalbant apie paketinių užklausų naudojimo pranašumus, verta paminėti akivaizdų trūkumą. Faktas yra tas, kad naudojant šį veiksmų algoritmą, sistema yra nuolat priversta kurti lenteles, kuriose saugoma visa duomenų bazė. Kiekvienai lentelei sukurti ir vėliau ištrinti reikia laiko. Štai pavyzdys:

Dėl to turime lentelę:

Dabar mes naudojame paketinį užklausą, atminkite, kad mums reikia kabliataškio, gauname:

Atkreipkite dėmesį, kad 3-ioji užklausa apjungė pirmųjų dviejų rezultatus, pažiūrėkime, kas atsitiko:

Dabar pabandykime pridėti grožio ir šiek tiek pakeisti 3-ojo prašymo tekstą, pavyzdžiui:

Dabar mes turime tai:

Belieka sujungti stulpelius su Nomenklatūra ir tuščiuose langeliuose įdėti nulius.

1C Enterprise platforma leidžia vienu metu vykdyti kelias užklausas nuosekliai. 1C tai vadinama užklausų paketu. Viename pakete kiekviena užklausa atskiriama kabliataškiu.

Norint pasiekti paketo užklausų vykdymą žingsnis po žingsnio, paprastai iš pradžių sukuriamos laikinos lentelės, tada sudaromos jų bendrinimo sąlygos, tokios kaip filtrai, sujungimai ir sujungimai. Dėl to pasiekiamas galutinis rezultatas. Laikinosios lentelės, gautos atlikus bet kokias paketo užklausas, išlieka iki visos paketo pabaigos arba tol, kol bus vykdoma užklausa, kuri sunaikina laikinąsias lenteles.

Be to, paketinių užklausų ir laikinų lentelių naudojimas žymiai padidina viso šio kodo segmento skaitomumą. Sudėtingas užklausas, kuriose taip pat yra įdėtųjų užklausų, gali būti labai sunku suprasti. Tačiau jei ilgą sudėtingą užklausą suskaidysite į kelias ir netgi naudosite laikinas lenteles, tai ne tik pagerins suvokimą, bet ir daugeliu atvejų padidins našumą.

Kita svarbi 1C paketinių užklausų detalė yra ta, kad, skirtingai nei, mes galime atskirai gauti kiekvienos paketo užklausos rezultatą.

Užklausų paketo kūrimo 1C kalba pavyzdys

Norėdami pamatyti pavyzdį, kaip sukurti užklausų paketą, naudosime užklausų dizainerį, kurį aiškumo dėlei iškviesime iš užklausų konsolės. Taigi, mes iš karto matome paketo vykdymo rezultatą.

Sukurkime paprastą paketinio užklausą. Siūlau iš karto įterpti užklausos tekstą į , o tada atsidaryti ir pažiūrėti kaip formuojasi užklausų paketas. Pridėkite naują užklausą prie konsolės ir įklijuokite šį tekstą:

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Savarankiška nuoroda,
Save išlaikantis.Tėvai,
Savarankiškas kodas,
Savarankiškas greito pasirinkimo kodas.
Savarankiškas vardas,
Savarankiškas. Tipas,
Savarankiškas, nebalansinis,
Savarankiškas, kiekybinis.
NUO
Sąskaitų planas Savarankiškas AS
KUR
Savarankiškas.Nuoroda = &Paskyra
;
////////////////////////////////////////////////////////////////////////////////

PASIRINKTI
Savarankiškai palaikantys tipaiSubconto.Line Number AS eilutės numeris,
Savarankiškai palaikantys Subconto.ViewSubconto AS tipai Subconto,
Self-supportingTypesSubconto.TypeSubconto.Name AS pavadinimas,
Self-supportingTypesSubconto.TypeSubconto.ValueType ASValueType,
Self-supportingTypesSubconto.OnlyTurnover AS OnlyApyvarta,
Self-supportingTypesSubconto.Summary AS Summative
NUO
Sąskaitų planas Savarankiškų sąskaitų tipai
KUR
Self-supportingTypesSubaccount.Link = &Paskyra
RŪŠIUOTI PAGAL
Savarankiškai palaikantys tipaiSubconto.NumberLines

Man tai atrodo taip:

Dabar pereikime prie užklausų kūrėjo. Čia mus sudomins skirtukas „Paketo užklausa“:

Kaip matote, turime dviejų užklausų paketą. Dukart spustelėję bet kurį iš jų, galite pereiti prie jo redagavimo:

Spustelėkite mygtuką „Gerai“ ir pabandykite pamatyti paketinės užklausos rezultatą.

Nustatykime parametrą „Paskyra“. Iš sąskaitų plano galite pasirinkti bet kurią sąskaitą. Kaip tikriausiai jau atspėjote, šis užklausų paketas turėtų gauti paskyros ypatybes. Spustelėkite „Vykdyti“ ir pamatysite rezultatą:

Metodai Run() ir RunBatch()

1C 8.3 ir 8.2 užklausų kūrėjas yra galingas kūrimo įrankis. Tai leidžia sudaryti užklausos tekstą naudojant specialią vaizdinę aplinką. Taigi, norint sukurti 1C užklausą, nebūtina žinoti įmontuotos užklausos kalbos, pakanka naršyti paprastoje ir intuityvioje dizainerio sąsajoje.

Užklausos kūrimo priemonė yra skirtukų rinkinys, kurių kiekvienas yra atsakingas už savo užklausos dalį. Taigi užpildykite skirtuką Lentelės ir laukai Mes pasirenkame lenteles, iš kurių 1C užklausa gaus šių lentelių duomenis ir laukus, reikalingus konkrečiai problemai išspręsti. Užpildymas į mūrą Sąlygos pasirinktoms lentelėms keliame sąlygas, kad iš jų atrinktume tik mums reikalingus duomenis ir pan.

Užklausos kūrėjo aprašymas oficialioje 1C 8 svetainėje: v8.1c.ru

Stalai ir laukai; ; ; ; ; ; Įdėtos užklausos (kuriamos).

Norėdami iškviesti 1s 8 užklausų dizainerį programos kode, turite:

  • Sukurkite naują užklausą
Užklausa = nauja užklausa;
  • Nustatykite tuščią užklausos teksto eilutę
Request.Text = "";
  • Padėkite pelės žymeklį tarp kabučių ir paspauskite dešinįjį pelės mygtuką. Atsidariusiame kontekstiniame meniu pasirinkite elementą Užklausos konstruktorius ir atsakyti Taipį klausimą apie naujos užklausos sukūrimą. Jei užklausos tekstas jau užrašytas, tuomet reikia spustelėti bet kur jo viduje ir paskambinti konstruktoriui ;

Pažvelkime į visus pagrindinius užklausų kūrimo priemonės skirtukus naudodami nedidelius didėjančio sudėtingumo pavyzdžius. Šis metodas leis pradedantiesiems 1C programuotojui efektyviau ištirti konstruktorių ir visas jo galimybes. Pavyzdžiams naudosime konfigūraciją Apskaita 3.0.

1-oji pamoka. Užklausų kūrimo priemonė yra paprasčiausias naudojimo atvejis.

Užduotis: parašyti užklausą į nomenklatūros katalogą, pasirinkti visą katalogo nomenklatūrą.

Nauji skirtukai: Lentelės ir laukai.

Nauji mechanizmai: užklausos teksto peržiūra ir redagavimas naudojant mygtuką „Prašyti“.

Norėdami pradėti kurti užklausą, sukurkime naują užklausą ir iškvieskime konstruktorių (kaip parašyta keliose pastraipose aukščiau). Po to skirtuke atsidarys dizainerio langas Lentelės ir laukai.

1 pamokos teorinė dalis

Skirtukas Lentelės ir laukai susideda iš trijų skyrių:

Duomenų bazė. Šiame skyriuje pateikiamos visos duomenų bazės lentelės, kurias galima naudoti kuriant užklausą;

Lentelės. Šiame skyriuje pasirenkamos šiai užklausai reikalingos lentelės. Tada perkelkite juos iš skyriaus duomenų bazėje reikia:

  • Arba dukart spustelėkite lentelę;
  • Arba naudokite „>“ arba „>>“ mygtukus.

Viršuje esantis skyrius Lentelės Yra keletas mygtukų. Daugelis jų bus išsamiau aptarti tolesnėse pamokose. Kol kas pateiksiu tik trumpus paaiškinimus.

  • Sukurkite antrinę užklausą(Raudona linija). Skirta sukurti naują antrinę užklausą;
  • Sukurkite laikiną lentelės aprašymą(geltona linija). Leidžia nurodyti laikinos lentelės, esančios už šios užklausos ribų, pavadinimą;
  • Keisti esamą elementą(žalia linija). Leidžia pereiti prie pasirinktos antrinės užklausos, laikinosios lentelės arba laikinosios lentelės aprašymo;
  • Pašalinti esamą elementą(mėlyna linija). Pašalina pasirinktą lentelę iš pasirinktų lentelių;
  • Pakeiskite lentelę(mėlyna linija). Atidaromas dialogo langas, skirtas pakeisti pasirinktą lentelę. Naudinga, jei pasirinkote neteisingą registro virtualią lentelę, nes padėtis nustatoma sąraše šiuo metu pasirinktoje lentelėje.
  • Virtualios lentelės parinktys(violetinė linija). Atidaro virtualaus registro lentelės parametrus.

Laukai. Šioje skiltyje pasirenkami lentelės laukai iš ankstesnės skilties. Šie laukai bus lentelės arba pasirinkimo, gauto atlikus užklausą, stulpeliai. Jie reikalingi pirmiausia tam, kad iš pasirinktų lentelių būtų galima gauti tik konkrečiu atveju reikalingą informaciją. Norėdami juos perkelti iš skyriaus Reikalingos lentelės:

  • Arba dukart spustelėkite lauką;
  • Arba naudokite „>“ arba „>>“ mygtukus;
  • Taip pat galite patys įtraukti naują lauką, naudodami pasirinktų lentelių laukų ir užklausos kalbos funkcijų savavališką išraišką.

Viršuje esantis skyrius Laukai Yra keletas mygtukų. Laukų kūrimas naudojant savavališkas išraiškas bus išsamiau aptartas tolesnėse pamokose. Kol kas pateiksiu tik trumpus paaiškinimus.

  • Papildyti(žalia linija). Sukurta pridėti naują lauką naudojant laisvosios išraiškos rengyklę;
  • Keisti esamą elementą(Raudona linija). Leidžia keisti pasirinktą lauką naudojant redaktorių;
  • Ištrinti srovę(mėlyna linija). Pašalina pasirinktą lauką iš sąrašo.

1 pamokos praktinė dalis

Išnagrinėjome teoriją, reikalingą šioje pamokoje pateiktai užduočiai atlikti. Priminsiu, kaip tai skamba: parašykite užklausą į nomenklatūros katalogą, pasirinkite visą katalogo nomenklatūrą.

Pradėkime kurti prekių užklausą:

  • Sukurkime naują užklausą ir pamokos pradžioje nurodytu būdu atidarykime konstruktorių;
  • Skyriuje Duomenų bazė, atidarykime temą Katalogai ir mes ten rasime vadovą Nomenklatūra;
  • Pasirinkite jį ir naudokite mygtuką „>“, kad perkeltumėte jį į skyrių Stalai;
  • Skyriuje Lentelės atidarykite nomenklatūros katalogą naudodami „+“ piktogramą;
  • Atsidariusiame laukų sąraše raskite lauką Nuoroda ir perkelkite į skyrių Laukai naudodami mygtuką ">".
  • Prekės užklausa paruošta, dizainerio lango apačioje spustelėkite mygtuką „Gerai“.