1s eräkyselyn suoritus. Yksinkertaiset kyselyt. Joidenkin kyselykielioperaattoreiden ominaisuudet

1C GOODWILL -yrityksen blogi

1C Enterprise -alustan avulla voit suorittaa useita kyselyjä peräkkäin kerrallaan. 1C:ssä tätä kutsutaan pyyntöpaketiksi. Yhdessä paketissa jokainen pyyntö on erotettu puolipisteellä.

Paketin kyselyjen vaiheittaisen suorittamisen saavuttamiseksi yleensä luodaan aluksi väliaikaiset taulukot, minkä jälkeen muodostetaan ehdot niiden jakamiselle, kuten suodattimet, liitokset ja liitokset. Tämän ansiosta lopputulos saavutetaan. Erän mahdollisten kyselyjen tuloksena saadut väliaikaiset taulukot ovat olemassa koko erän loppuun asti tai kunnes suoritetaan kysely, joka tuhoaa väliaikaiset taulukot.

Lisäksi eräkyselyiden ja väliaikaisten taulukoiden käyttö lisää merkittävästi tämän koodin koko segmentin luettavuutta. Monimutkaisia ​​kyselyjä, jotka sisältävät myös sisäkkäisiä kyselyitä, voi olla erittäin vaikea ymmärtää. Jos kuitenkin jaat pitkän monimutkaisen kyselyn useisiin ja käytät jopa väliaikaisia ​​taulukoita, tämä ei vain paranna havaintoa, vaan useimmissa tapauksissa lisää suorituskykyä.

Toinen tärkeä yksityiskohta eräkyselyjen hyväksi 1C:ssä on se, että toisin kuin sisäkkäisissä kyselyissä, voimme saada jokaisen erän kyselyn tuloksen erikseen.

Esimerkki pyyntöpaketin luomisesta 1C-kielellä

Jos haluat nähdä esimerkin kyselypaketin luomisesta, käytämme kyselyn suunnittelijaa, jota kutsumme selvyyden vuoksi kyselykonsolista. Näin ollen voimme heti nähdä paketin suorittamisen tuloksen.

Luodaan yksinkertainen eräpyyntö. Ehdotan, että liität pyyntötekstin välittömästi konsoliin ja avaat sitten suunnittelijan ja katsot kuinka pyyntöpaketti muodostuu. Lisää uusi pyyntö konsoliin ja liitä seuraava teksti:

Omavarainen.Vanhempi,

Itsekantava koodi,

Itsekantava pikavalintakoodi.

Omavarainen nimi,

Itsekantava. Tyyppi,

Omavarainen, taseen ulkopuolinen,

Itsekannattava, määrällinen.

Tilikartta Self-supporting AS Self-supporting

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

Itsekantavat tyypitSubconto.Line Number AS rivinumero,

Self-supportingTypes of Subconto.ViewSubconto AS TypeSubconto,

Self-supportingTypesSubconto.TypeSubconto.Name AS-nimi,

Self-supportingTypesSubconto.TypeSubconto.ValueType ASValueType,

Self-supportingTypesSubconto.OnlyTurnover AS OnlyTurnover,

Self-supportingTypesSubconto.Summary AS Summative

Tilikartta Self-conto

JÄRJESTÄ

Itsekantava TypesSubconto.NumberLines

Minusta se näyttää tältä:

Siirrytään nyt kyselyn suunnittelijaan. Täällä olemme kiinnostuneita "Pyyntöpaketti" -välilehdestä:

Kuten näet, meillä on kahden pyynnön paketti. Kaksoisnapsauttamalla mitä tahansa niistä voit jatkaa sen muokkaamista:

Napsauta "Ok"-painiketta ja yritä nähdä eräpyynnön tulos.

Asetetaan "Tili"-parametri. Voit valita minkä tahansa tilin tilikartasta. Kuten luultavasti jo arvasit, tämän pyyntöpaketin on saatava tiliominaisuudet. Napsauta "Suorita" ja katso tulos:

Menetelmät Run() ja RunBatch()

Execute()-menetelmän lisäksi, joka suorittaa yksitellen kaikki erän pyynnöt ja palauttaa viimeisen pyynnön tuloksen, 1C:ssä on ExecutePackage()-metodi. Se palauttaa joukon näytteitä erän jokaisesta pyynnöstä. Yllä olevassa esimerkissä tämä on juuri tämä menetelmä.

ArrayResults = Query.ExecuteBatch();

Valinta1 = ArrayResults.Select();

Jos Valitse1.Seuraava() Sitten

//Toiminnot valinnan kanssa 1

loppu Jos;

SelectionViewsSubconto = ArrayResults.Select();

Viesti Eräpyyntöjen käsittely versioissa 1C 8.3 ja 8.2 ilmestyi ensimmäisen kerran 1C GOODWILL -yrityksen blogiin.

ne lisäävät huomattavasti luettavuutta, mikä vähentää virheiden todennäköisyyttä => tämä yksin riittää minulle.

1C:Enterprise version 8.0 sisäänrakennetusta kyselykielestä puuttui kyky käyttää väliaikaisia ​​taulukoita ja kirjoittaa eräkyselyjä. Samaan aikaan oli usein tarpeen suorittaa monimutkaisia ​​laskelmia yhden pyynnön sisällä (eli yksi vuorovaikutussykli asiakkaan - 1C:Enterprise-palvelimen - DBMS-palvelimen välillä). Tällaisten ongelmien ratkaisemiseksi käytettiin alikyselyitä - kutsuja ei metatieto-objekteihin, vaan näiden objektien valintoihin. Tyypillisesti alikyselyt suoritettiin ryhmittelyllä ja niitä käytettiin usein liitoksissa.

DBMS-palvelimen optimoija (riippumatta siitä, mitä DBMS:ää käytät) ei aina pysty optimoimaan tällaista kyselyä oikein. Tässä tapauksessa optimoijan ongelma on oikean yhteystavan valinta. Kahden näytteen yhdistämiseen on useita algoritmeja. Yhden tai toisen algoritmin valinta riippuu siitä, kuinka monta tietuetta yhteen ja toiseen näytteeseen sisältyy. Jos yhdistät kaksi fyysistä taulukkoa, DBMS voi helposti määrittää molempien näytteiden koon saatavilla olevien tilastojen perusteella. Jos jokin yhdistetyistä valinnoista on alikysely, on erittäin vaikea ymmärtää, kuinka monta tietuetta se palauttaa. Tässä tapauksessa DBMS voi tehdä virheen valitessaan suunnitelmaa, mikä johtaa kyselyn suorituskyvyn katastrofaaliseen laskuun.

Kyselyn kirjoittaminen uudelleen yllä olevalla menetelmällä on tarkoitettu yksinkertaistamaan DBMS-optimoijan työtä. Uudelleenkirjoitetussa kyselyssä kaikki liitoksiin osallistuvat valinnat ovat fyysisiä taulukoita ja DBMS pystyy helposti määrittämään kunkin valinnan koon. Näin DBMS voi taatusti valita nopeimman kaikista mahdollisista suunnitelmista. Lisäksi DBMS tekee oikean valinnan ehdoista riippumatta. Tällä tavalla uudelleen kirjoitettu kysely toimii yhtä hyvin kaikissa DBMS-järjestelmissä, mikä on erityisen tärkeää kiertoratkaisuja kehitettäessä. Lisäksi tällä tavalla uudelleen kirjoitettu kysely on paremmin luettava, helpompi ymmärtää ja virheenkorjaus.

On ymmärrettävä, että kirjoittamalla kyselyn tällä tavalla uudelleen, olemme saaneet hidastaa sitä ylimääräisistä kustannuksista - väliaikaisten taulukoiden luomisesta. Jos DBMS ei tee virhettä suunnitelman valinnassa, se todennäköisesti suorittaa vanhan kyselyn nopeammin kuin uusi. Tämä hidastuminen on kuitenkin aina erittäin pientä. Hidastuksen suuruus riippuu käytetystä DBMS:stä ja laitteiston suorituskyvystä. Tyypillisessä tapauksessa yhden väliaikaisen taulukon luominen voi kestää useita millisekunteja. Toisin sanoen näillä hidastuksilla ei voi olla huomattavaa vaikutusta järjestelmän suorituskykyyn, ja ne voidaan yleensä jättää huomiotta.

Eräpyyntöä tarvitaan, kun pyyntö on liian monimutkainen muotoiltavaksi ja saattamiseksi toimimaan tehokkaasti. Ymmärtääksesi, mikä eräpyyntö on, voit käyttää seuraavaa kaaviota:

Muuten, eräkyselyvaihtoehdot tulivat saataville vain ratkaisussa 8.1.11.67.4 - joten et ehkä vielä tiedä kuinka tämä käytännössä toimii. Yksinkertaisesti sanottuna riittää, että luot sarjan kyselyjä ja yhdistät ne ";"-symbolin kautta. Esimerkiksi:

Tulos palautetaan viimeisen kautta. Muuten, eräkyselyitä tuetaan jokaisessa tavallisessa konsolissa. Esimerkki sen suorittamisesta kyselykonsolin kautta:

Miksi emme voi tulla toimeen ilman eräpyyntöjä?

Laitamme välituloksen väliaikaiseen taulukkoon ja aiomme käyttää sitä joissakin tulevissa kyselyissä. Ilman väliaikaista taulukkotoimintoa tällainen välikysely olisi toistettava uudelleen. Jos et tiedä miten eräkysely toimii ja miten sitä käytetään, voit suorittaa useita kyselyitä peräkkäin käyttämällä sisäkkäisten taulukoiden tietoja - näin oli ennenkin, nyt sinun ei tarvitse tuhlata aikaa tähän, koska meillä on tehokas ja yksinkertainen eräpyyntö 1C:ssä. Se on kätevää, sinun ei enää tarvitse muistaa, missä väliaikaisen pöydän pitäisi olla. Käytä kulunvalvontajärjestelmän ominaisuuksia minimoidaksesi ja nopeuttaaksesi. Järjestelmä valitsee, lajittelee ja sijoittaa. Näin tämän suositun ja luotettavan ratkaisun kehittäjät asettavat tämän innovaation.

Ilmoitus 1C-kehittäjien eräpyynnöistä
  • Koko ohjelman merkittävä optimointi;
  • Tunnetun ratkaisun skaalautuvuuden lisääminen;
  • Tehokas suorituskyky erän sijoitusominaisuuksien käyttöönoton ansiosta;
  • Yksinkertainen ja selkeä järjestelmänhallinta;
  • Parhaat mahdollisuudet integroitumiseen muihin ratkaisuihin.
Mikä on kyselytoiminto versiossa 8.1.11?

Kyselyt parantavat merkittävästi työskentelyä väliaikaisten taulukoiden kanssa. Eräkyselyiden toiminnallisuus tarkoittaa, että mikä tahansa tietylle kyselylle erästä luotu taulukko toimii, kunnes eräkysely on suorittanut toimintonsa kokonaan tai kunnes komento sen tuhoamiseksi on saavutettu. Nyt voit vastaanottaa sekä viimeisimmän pyynnön tuloksen - tämä on Execute()-komento, että koko joukon tuloksia käyttämällä ExecutePackage()-menetelmää.

Algoritmi eräpyynnön luomiseen asiantuntevasti

Joten tiedämme nyt, että eräpyyntö koostuu useista pyynnöistä, joita kuvailemme yhdeksi yleiseksi pyynnöksi. Ne on teloitettava yksi toisensa jälkeen. Mikä tahansa välitulos koko sisällytettyjen kyselyjen ketjun suorittamisen aikana voidaan sijoittaa väliaikaiseen taulukkoon. Tämän rakenteen avulla kaikki pyynnöt voivat käyttää näitä välitietoja. On tärkeää, että minkä tahansa väliaikaiseen taulukkoon sijoitetun kyselyn tuloksia voidaan käyttää toistuvasti. Tässä tapauksessa sinun ei enää tarvitse rekisteröidä samaa asiaa useita kertoja.

Menetelmän haitat

Eräkyselyiden käytön eduista puhuttaessa on syytä mainita ilmeinen haitta. Tosiasia on, että tällä toiminta-algoritmilla järjestelmä pakotetaan jatkuvasti luomaan taulukoita, joihin se tallentaa koko tietokannan. Jokaisen taulukon luominen ja poistaminen myöhemmin vie aikaa. Tässä on esimerkki:

Tämän seurauksena meillä on taulukko:

Nyt käytämme eräpyyntöä, muista, että tarvitsemme puolipisteen tähän, saamme:

Huomaa, että kolmas pyyntö yhdisti kahden ensimmäisen tulokset, katsotaanpa mitä tapahtui:

Yritetään nyt lisätä kauneutta ja muuttaa hieman tekstiä kolmannelle pyynnölle, kuten näin:

Nyt meillä on tämä:

Jäljelle jää vain yhdistää sarakkeet nimikkeistöön ja laittaa nollia tyhjiin soluihin.

1C Enterprise -alustan avulla voit suorittaa useita kyselyjä peräkkäin kerrallaan. 1C:ssä tätä kutsutaan pyyntöpaketiksi. Yhdessä paketissa jokainen pyyntö on erotettu puolipisteellä.

Paketin kyselyjen vaiheittaisen suorittamisen saavuttamiseksi yleensä luodaan aluksi väliaikaiset taulukot, minkä jälkeen muodostetaan ehdot niiden jakamiselle, kuten suodattimet, liitokset ja liitokset. Tämän ansiosta lopputulos saavutetaan. Erässä mahdollisesti tehtyjen kyselyjen tuloksena saadut väliaikaiset taulukot ovat olemassa koko erän loppuun asti tai kunnes suoritetaan kysely, joka tuhoaa väliaikaiset taulukot.

Lisäksi eräkyselyiden ja väliaikaisten taulukoiden käyttö lisää merkittävästi tämän koodin koko segmentin luettavuutta. Monimutkaisia ​​kyselyjä, jotka sisältävät myös sisäkkäisiä kyselyitä, voi olla erittäin vaikea ymmärtää. Jos kuitenkin jaat pitkän monimutkaisen kyselyn useisiin ja käytät jopa väliaikaisia ​​taulukoita, tämä ei vain paranna havaintoa, vaan useimmissa tapauksissa lisää suorituskykyä.

Toinen tärkeä yksityiskohta eräkyselyiden hyväksi 1C:ssä on, että toisin kuin, voimme saada erikseen kunkin erän kyselyn tuloksen.

Esimerkki pyyntöpaketin luomisesta 1C-kielellä

Jos haluat nähdä esimerkin kyselypaketin luomisesta, käytämme kyselyn suunnittelijaa, jota pyydämme selvyyden vuoksi kyselykonsolista. Näin ollen voimme heti nähdä paketin suorittamisen tuloksen.

Luodaan yksinkertainen eräpyyntö. Ehdotan, että lisäät pyyntötekstin välittömästi kohtaan ja avaat sen ja katsot kuinka pyyntöpaketti muodostuu. Lisää uusi pyyntö konsoliin ja liitä seuraava teksti:

Hanki 267 videotuntia 1C:llä ilmaiseksi:

Itsekantava linkki,
Omavarainen.Vanhempi,
Itsekantava koodi,
Itsekantava pikavalintakoodi.
Omavarainen nimi,
Itsekantava. Tyyppi,
Omavarainen, taseen ulkopuolinen,
Itsekantava, määrällinen.
FROM
Tilikartta Self-supporting AS Self-supporting
MISSÄ
Self-supporting.Link = &Tili
;
////////////////////////////////////////////////////////////////////////////////

VALITA
Itsekantavat tyypitSubconto.Line Number AS rivinumero,
Self-supportingTypes of Subconto.ViewSubconto AS TypeSubconto,
Self-supportingTypesSubconto.TypeSubconto.Name AS-nimi,
Self-supportingTypesSubconto.TypeSubconto.ValueType ASValueType,
Self-supportingTypesSubconto.OnlyTurnover AS OnlyTurnover,
Self-supportingTypesSubconto.Summary AS Summative
FROM
Tilikartta Self-conto
MISSÄ
Self-supportingTypesSubaccount.Link = &Tili
JÄRJESTÄ
Itsekantava TypesSubconto.NumberLines

Minusta se näyttää tältä:

Siirrytään nyt kyselyn suunnittelijaan. Täällä olemme kiinnostuneita "Pyyntöpaketti" -välilehdestä:

Kuten näet, meillä on kahden pyynnön paketti. Kaksoisnapsauttamalla mitä tahansa niistä voit jatkaa sen muokkaamista:

Napsauta "Ok"-painiketta ja yritä nähdä eräpyynnön tulos.

Asetetaan "Tili"-parametri. Voit valita minkä tahansa tilin tilikartasta. Kuten luultavasti jo arvasit, tämän pyyntöpaketin pitäisi saada tilin ominaisuuksia. Napsauta "Suorita" ja katso tulos:

Menetelmät Run() ja RunBatch()

Kyselysuunnittelija versioissa 1C 8.3 ja 8.2 on tehokas kehitystyökalu. Sen avulla voit kirjoittaa pyyntötekstiä käyttämällä erityistä visuaalista ympäristöä. Siten 1C-pyynnön luomiseksi ei tarvitse tietää sisäänrakennettua kyselykieltä, riittää navigointi suunnittelijan yksinkertaisessa ja intuitiivisessa käyttöliittymässä.

Kyselyn rakennustyökalu on joukko välilehtiä, joista jokainen vastaa omasta osastaan ​​kyselyä. Täytä siis välilehti Pöydät ja kentät Valitsemme taulukot, joista 1C-kysely vastaanottaa näiden taulukoiden tiedot ja kentät, jotka ovat tarpeen tietyn ongelman ratkaisemiseksi. Täyte muuraukseen ehdot asetamme valituille taulukoille ehtoja, jotta voimme valita niistä vain tarvitsemamme tiedot ja niin edelleen.

Kuvaus kyselyn suunnittelijasta virallisella 1C 8 -sivustolla: v8.1c.ru

Taulukot ja kentät; ; ; ; ; ; Sisäkkäiset kyselyt (kehitellään).

Jotta voit kutsua 1s 8 -kyselyn suunnittelijaa ohjelmakoodissa, sinun on:

  • Luo uusi pyyntö
Pyyntö = Uusi pyyntö;
  • Aseta tyhjä pyyntötekstirivi
Request.Text = "";
  • Aseta hiiren osoitin lainausmerkkien väliin ja paina hiiren oikeaa painiketta. Valitse kohde avautuvasta pikavalikosta Kyselyn rakentaja ja vastaa Joo kysymykseen uuden pyynnön luomisesta. Jos pyyntöteksti on jo kirjoitettu muistiin, sinun on napsautettava mitä tahansa sen sisällä ja soitettava rakentajalle ;

Tarkastellaan kaikkia kyselynmuodostajan päävälilehtiä käyttämällä pieniä esimerkkejä monimutkaisempia. Tämän lähestymistavan avulla aloitteleva 1C-ohjelmoija voi tutkia tehokkaammin rakentajaa ja kaikkia sen ominaisuuksia. Esimerkeissä käytämme kokoonpanoa Kirjanpito 3.0.

Oppitunti 1. Kyselyn rakentaja on yksinkertaisin käyttötapa.

Tehtävä: kirjoita pyyntö nimikkeistöhakemistoon, valitse hakemiston koko nimikkeistö.

Uudet välilehdet: Pöydät ja kentät.

Uudet mekanismit: pyyntötekstin katselu ja muokkaaminen "Pyyntö"-painikkeella.

Aloita pyynnön luominen luomalla uusi pyyntö ja soittamalla rakentajalle (kuten muutama kappale yllä kirjoitettu). Tämän jälkeen suunnitteluikkuna avautuu välilehdelle Pöydät ja kentät.

Oppitunnin nro 1 teoreettinen osa

Tab Pöydät ja kentät koostuu kolmesta osasta:

Tietokanta. Tässä osiossa esitellään kaikki tietokantataulukot, joita voidaan käyttää kyselyn muodostamiseen;

Taulukot. Tässä osiossa valitaan tähän kyselyyn tarvittavat taulukot. Siirrä ne sitten osiosta tietokanta tarvitsee:

  • Tai kaksoisnapsauta taulukkoa;
  • Tai käytä ">"- tai ">>"-painikkeita.

Yllä oleva jakso Taulukot Painikkeita on useita. Useimmista niistä keskustellaan yksityiskohtaisemmin seuraavilla oppitunneilla. Toistaiseksi annan vain lyhyitä selityksiä.

  • Luo alikysely(Punainen viiva). Suunniteltu luomaan uusi alikysely;
  • Luo väliaikainen taulukon kuvaus(keltainen viiva). Voit määrittää tämän kyselyn ulkopuolella sijaitsevan väliaikaisen taulukon nimen, ja sitä voidaan käyttää myös arvotaulukon välittämiseen kyselyyn;
  • Vaihda nykyinen elementti(vihreä linja). Voit siirtyä valittuun alikyselyyn, väliaikaiseen taulukkoon tai väliaikaisen taulukon kuvaukseen.
  • Poista nykyinen kohde(sininen viiva). Poistaa valitun taulukon valituista taulukoista;
  • Vaihda pöytä(sininen viiva). Avaa valintaikkunan valitun taulukon korvaamista varten. Hyödyllinen, jos olet valinnut väärän rekisterin virtuaalitaulukon, koska paikannus tapahtuu luettelossa parhaillaan valitussa taulukossa.
  • Virtuaalipöydän asetukset(violetti viiva). Avaa virtuaalirekisteritaulukon parametrit.

Kentät. Tämä osio valitsee taulukon kentät edellisestä osiosta. Nämä kentät ovat kyselyn tuloksena saadun taulukon tai valinnan sarakkeita. Niitä tarvitaan ensisijaisesti siksi, että valituista taulukoista saadaan vain tietyssä tapauksessa tarpeelliset tiedot. Siirtääksesi ne osiosta Tarvittavat taulukot:

  • Tai kaksoisnapsauta kenttää;
  • Tai käytä ">"- tai ">>"-painikkeita;
  • Voit myös lisätä uuden kentän itse käyttämällä mielivaltaista lauseketta valittujen taulukoiden kentistä ja kyselykielifunktioista.

Yllä oleva jakso Kentät Painikkeita on useita. Kenttien luomista mielivaltaisilla lausekkeilla käsitellään yksityiskohtaisemmin seuraavilla oppitunneilla. Toistaiseksi annan vain lyhyitä selityksiä.

  • Lisätä(vihreä linja). Suunniteltu lisäämään uusi kenttä käyttämällä ilmaisueditoria;
  • Vaihda nykyinen elementti(Punainen viiva). Mahdollistaa valitun kentän muuttamisen editorin avulla;
  • Poista nykyinen(sininen viiva). Poistaa valitun kentän luettelosta.

Oppitunnin nro 1 käytännön osa

Olemme käsitelleet tämän oppitunnin tehtävän suorittamiseen tarvittavaa teoriaa. Haluan muistuttaa, miltä se kuulostaa: kirjoita pyyntö nimikkeistöhakemistoon, valitse koko hakemiston nimikkeistö.

Aloitetaan kohteiden pyynnön luominen:

  • Luodaan uusi pyyntö ja avataan konstruktori oppitunnin alussa määritetyllä menetelmällä;
  • Luvussa Tietokanta, avataan ketju Hakemistot ja löydä sieltä opas Nimikkeistö;
  • Valitse se ja siirrä se osioon ">" -painikkeella Taulukot;
  • Luvussa Taulukot avaa nimikkeistöhakemisto +-kuvakkeen avulla;
  • Etsi kenttä avautuvasta kenttäluettelosta Linkki ja siirrä se osioon Kentät käyttämällä ">"-painiketta
  • Tuotepyyntö on valmis, napsauta "OK"-painiketta suunnittelijaikkunan alaosassa.