Kun rakennetaan kyselyitä, 1c-kielellä on mahdollista saada kyselyn suorittamisen tulos komennolla: "Place<ИмяВременнойТаблицы>", Missä<ИмяВременнойТаблицы>- "väliaikaisen taulukon" nimi, joka on "Query"-objektin ominaisuus ja on TemporaryTableManager-tyyppinen objekti, joka kuvaa väliaikaisten taulukoiden nimiavaruutta ja vastaa niiden luomisesta ja tuhoamisesta tietokannassa. Tätä mekanismia käytetään välikyselytietojen hankkimiseen muissa kyselyissä käytettäväksi, mikä helpottaa niiden virheenkorjausta, koodin optimointia ja kyselyiden luettavuutta.

Oletetaan, että sinulla on kysely, jossa on useita väliaikaisia ​​taulukoita, ja sinun on suoritettava virheenkorjaus kunkin taulukon sisällöstä. Tyypillisesti tällaiset tehtävät ratkaistaan ​​kyselykonsolin avulla, mutta jos tämä ei ole mahdollista (esimerkiksi arvoluettelot, taulukot jne. välitetään kyselyyn), käytä alla olevaa menetelmää.

Lisäämme moduuliimme seuraavan toiminnon (palvelintoiminto, jos tämä on hallittava sovellus):

Funktio VT Data (Kysely, VT:n nimi) Taulukkotiedot = Uusi kysely; Datataulukot. Text = "Valitse * | From " + NameVT+ " |" ; ReturnTableData. Suorittaa ( ) . Unload() ; EndFunction

Kutsutaan sitä pyyntötekstin jälkeen esimerkiksi:

Pyyntö = Uusi pyyntö; Pyyntö. Teksti = "SELECT |TZItotal.Name |PAIKKA Lopullinen |FROM |&TZItotal AS TZItotal |; |//////////////////////////////// / ////////////////////// |VALITSE |* |PAIKKANUMERO |FROM |Hakemisto. Nimikkeistö AS-nimikkeistö | //////////////////////////////////////// |VALITSE |* |Alkaen |Lopullinen AS Yhteensä |. LEFT JOIN Nom AS Nom |. Yhteensä.Nimi = Nimi.Nimi; Pyyntö. TemporaryTableManager = uusi TemporalTableManager; Pyyntö. suorittaa ( ) ; Taulukko = DataVT(Kysely, "Lopullinen" ) ;

Nyt Taulukko-muuttuja sisältää väliaikaisen taulukon Total, jota voidaan tarkastella virheenkorjauksessa tai tulostaa laskentataulukkoasiakirjaan.

Elinikä

Kun kysely suoritetaan, alusta tuhoaa kaikki väliaikaiset taulukot, jotka on luotu osana sen suorittamista. Toisin sanoen 1C:Enterprise-alustalta yhden pyynnön sisällä luotujen väliaikaisten taulukoiden käyttöikä alkaa siitä hetkestä, kun taulukko on luotu pyyntöön, ja päättyy, kun se suoritetaan.

Tässä tapauksessa on mahdollista tuhota väliaikainen taulukko ohjelmallisesti suorittamalla "DESTROY"-käsky jossakin kyselypaketissa<ИмяВременнойТаблицы>Sitten alusta suorittaa SQL-komennon "TRUNCATE" tuhotakseen väliaikaisen taulukon.

Käytettäessä väliaikaista taulukonhallintaa, jos kehittäjä ei ole nimenomaisesti tuhonnut taulukoita (kyselylause "DESTROY", tilapäisen taulukon hallinnan palauttaminen "Undefined" tai käyttämällä "Close()"-menetelmää), alusta tuhoaa ne. itsenäisesti sen jälkeen, kun konteksti on tuhoutunut, jossa ne muodostuivat. Toisin sanoen objekti tuhoutuu, kun prosessi tai toiminto, jossa se luotiin, päättyy.

Suorituskykyvaikutus

Tilapäisten taulukoiden käyttö voi vähentää merkittävästi SQL-palvelimen kuormitusta käyttämällä uudelleen taulukosta aiemmin luotua näytettä muissa kyselyissä. Tietysti tilapäisten taulukoiden luominen ja tallentaminen vie lisäresursseja, mutta verrattuna resurssien tuhlaamiseen toistuviin taulukkokyselyihin tämä vaihtoehto on optimaalinen.

Tilapäisten taulukoiden luominen arvotaulukon perusteella voi vaikuttaa negatiivisesti suorituskykyyn, koska arvotaulukon siirtäminen ja väliaikaisen taulukon täyttäminen SQL-palvelimelle sen perusteella voi kestää kauan ja aiheuttaa lisäkuormitusta järjestelmään. Tätä ominaisuutta tulisi käyttää vain, jos tulevat kyselyt käyttävät intensiivisesti arvotaulukon tietoja. Muuten optimaalisempi vaihe olisi käsitellä tämä taulukko ohjelmallisesti tietokantakyselyn suorittamisen jälkeen. Tarkka vastaus riippuu tietystä ongelmasta.

Johtopäätös

1C:Enterprise-alustan tuki väliaikaisille taulukoille mahdollistaa optimaalisempien kyselyjen kirjoittamisen tietokantaan, kun taas itse kyselyteksti on myös yksinkertaistettu ja luettavampaa.

Tärkein argumentti tilapäisten taulukoiden käytön puolesta on, että niiden käyttö antaa SQL-palvelimelle mahdollisuuden rakentaa optimaalisempia kyselysuunnitelmia.

Pyynnöt on suunniteltu poimimaan ja käsittelemään tietoja tietokannasta ja toimittamaan ne käyttäjälle vaaditussa muodossa. Käsittely tarkoittaa tässä kenttien ryhmittelyä, rivien lajittelua, kokonaissumman laskemista jne. Et voi muuttaa tietoja kyselyillä 1C:ssä!

Pyyntö suoritetaan annettujen ohjeiden mukaisesti − pyydä tekstiä. Pyyntöteksti on koottu syntaksin ja sääntöjen mukaisesti kyselyn kieli. 1C:Enterprise 8:n kyselykieli perustuu standardiin SQL, mutta siinä on joitain eroja ja laajennuksia.

Suunnitelma työskentelyyn pyynnöstä

Pyynnön kanssa työskentelyn yleinen järjestelmä koostuu useista peräkkäisistä vaiheista:

  1. Luodaan Request-objekti ja asetetaan pyyntöteksti;
  2. Pyyntöparametrien asettaminen;
  3. Pyynnön toteuttaminen ja tuloksen saaminen;
  4. Pyynnön tuloksen ohittaminen ja vastaanotettujen tietojen käsittely.

1. Objekti Pyyntö on omaisuutta Teksti, johon sinun on määritettävä pyyntöteksti.

// Vaihtoehto 1
Pyyntö = Uusi pyyntö;
Pyyntö . Teksti =
"VALITA
| Valuuttakurssit. Jakso,
| Valuuttakurssit. Valuutta,
| Valuuttakurssit. Kurssi
|FROM

| MISSÄ
;

// Vaihtoehto 2
Pyyntö = Uusi pyyntö("VALITA
| Valuuttakurssit. Jakso,
| Valuuttakurssit. Valuutta,
| Valuuttakurssit. Kurssi
|FROM
| Tietojen rekisteri. Valuuttakurssit AS Valuuttakurssit
| MISSÄ
| Valuuttakurssit. Valuutta = &valuutta");

2. Parametriarvot asetetaan menetelmällä SetParameter(< Имя>, < Значение>) . Pyyntötekstin parametrit on merkitty symbolilla " & " ja niitä käytetään yleensä valintaehdoissa (WHERE-osio) ja virtuaalitaulukon parametreissa.

Pyyntö);

3. Tekstin antamisen ja parametrien asettamisen jälkeen pyyntö on suoritettava ja suorituksen tulos on saatava. Suoritus suoritetaan Execute()-metodilla, joka palauttaa objektin Kyselyn tulos. Kyselyn tuloksesta voit:

  • saada valinta Select-menetelmällä (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • lataa arvot arvotaulukkoon tai arvopuuhun Upload-menetelmällä (< ТипОбхода>) .

// Ota näyte

Näyte = Kyselyn tulos. Valita();

// Hae arvotaulukko
RequestResult = Pyyntö. Juosta();
Pöytä = Kyselyn tulos. Purkaa();

4. Voit ohittaa kyselyn tulosvalinnan silmukan avulla:

Hei hei Sample.Next() Loop
Raportti(Valinta.Kurssi);
EndCycle;

Täydellinen esimerkki pyynnön kanssa työskentelystä voi näyttää tältä:

// Vaihe 1. Pyynnön luominen ja pyyntötekstin asettaminen
Pyyntö = Uusi pyyntö;
Pyyntö . Teksti =
"VALITA
| Valuuttakurssit. Jakso,
| Valuuttakurssit. Valuutta,
| Valuuttakurssit. Kurssi
|FROM
| Tietojen rekisteri. Valuuttakurssit AS Valuuttakurssit
| MISSÄ
| Valuuttakurssit. Valuutta = &valuutta";

// Vaihe 2. Parametrien asettaminen
Pyyntö . SetParameter("Valuutta" , Valittu valuutta);

// Vaihe 3. Kyselyn suorittaminen ja näytteen hakeminen
RequestResult = Pyyntö. Juosta();
Näyte = Kyselyn tulos. Valita();

// Valinnan läpi kulkeminen
Hei hei Sample.Next() Loop
Raportti(Valinta.Kurssi);
EndCycle;

Pyyntötekstin koostumus

Pyyntöteksti koostuu useista osista:

  1. Pyydä kuvausta— luettelo valittavissa olevista kentistä ja tietolähteistä;
  2. Kyselyjen yhdistäminen— ilmaisut "YHDISTÄ" ja "YHDISTÄ KAIKKI";
  3. Tulosten järjestäminen— ilmaisu "TILAUS...";
  4. Automaattinen tilaus— ilmaisu "AUTOTILAUS";
  5. Tulosten kuvaus- ilmaisu "TULOKSET ... BY ...".

Vain ensimmäinen osa on pakollinen.

Väliaikaiset taulukot ja eräkyselyt

1C-kyselykieli tukee käyttöä väliaikaiset pöydät— taulukot, jotka on saatu kyselyn suorittamisen tuloksena ja tallennettu väliaikaisesti.

Voit usein kohdata tilanteen, jossa sinun ei tarvitse käyttää tietokantataulukoita kyselyn lähteenä, vaan toisen kyselyn suorittamisen tulosta. Tämä ongelma voidaan ratkaista käyttämällä sisäkkäisiä kyselyitä tai väliaikaiset pöydät. Väliaikaisten taulukoiden avulla voit yksinkertaistaa monimutkaisen kyselyn tekstiä jakamalla sen osaosiin, ja joissain tapauksissa myös nopeuttaa kyselyn suorittamista ja vähentää lukkojen määrää. Käytä objektia työskennelläksesi väliaikaisten taulukoiden kanssa Aikataulun johtaja. Väliaikainen taulukko luodaan käyttämällä avainsanaa PLACE, jota seuraa väliaikaisen taulukon nimi.

ManagerVT = Uusi TemporaryTablesManager;
Pyyntö = Uusi pyyntö;
Pyyntö . ManagerTemporaryTables = ManagerVT;

Pyyntö . Teksti =
"VALITA
| Valuutat.Koodi,
| Valuutat.Nimi
|Paikka valuutoissa
|FROM
| Hakemisto. Valuutat AS valuutat";

RequestResult = Pyyntö. Suorittaa();

Jos haluat käyttää väliaikaista VTVcurrency-taulukkoa muissa kyselyissä, sinun on määritettävä näille kyselyille yhteinen väliaikainen taulukkohallinta - VT Manager.

Eräpyyntö on pyyntö, joka sisältää useita ";"-merkillä erotettuja pyyntöjä. Eräkyselyä suoritettaessa kaikki siihen sisältyvät kyselyt suoritetaan peräkkäin, ja kaikkien väliaikaisten taulukoiden tulokset ovat kaikkien myöhempien kyselyjen käytettävissä. Väliaikaisen taulukonhallinnan nimenomaista määrittämistä eräkyselyille ei tarvitse. Jos väliaikaista taulukonhallintaa ei ole määritetty, kaikki väliaikaiset taulukot poistetaan välittömästi kyselyn suorittamisen jälkeen.

Eräkyselyille on käytettävissä ExecuteBatch()-menetelmä, joka suorittaa kaikki kyselyt ja palauttaa joukon tuloksia. Eräkyselyn väliaikaiset taulukot esitetään taulukolla, jossa on yksi rivi ja yksi sarake "Count", joka tallentaa tietueiden lukumäärän. Eräpyyntöjen virheenkorjaukseen voit käyttää menetelmää Suorita Erä VÄLITIEDoilla() : Se palauttaa väliaikaisten taulukoiden todellisen sisällön, ei tietueiden määrää.

// Esimerkki eräpyynnön käsittelystä
Pyyntö = Uusi pyyntö;
Pyyntö . Teksti =
"VALITA
| Valuutat.Nimi
|FROM
| Directory.Currencies AS Valuutat
|;
|VALITSE
| Nimikkeistö. Nimi
|FROM
| Hakemisto Nomenclature AS Nomenclature";

BatchResult = Pyyntö. ExecuteBatch();

TZValuutat =Pakettitulos[0]. Purkaa();
TZNomenclature = Paketin tulos[1]. Purkaa();

// Esimerkki väliaikaisten taulukoiden käytöstä eräpyynnössä
Pyyntö = Uusi pyyntö;
Pyyntö . Teksti =
"VALITA
| Tuotteet
|PLACE WTT Tuotteet
|FROM
| Directory.Nomenclature AS Tuotteet
| MISSÄ
| Tuotteet.Manufacturer = &Valmistaja
|;
|VALITSE
| VTTTuotteet.Tuote,
| Ammattikoulu, määrä.
| Ammattikoulu. Hinta,
| Ammattikoulu.Link AS DocumentReceipts
|FROM
| VT Products AS VT Products
| LEFT CONNECTION Asiakirja Tavaroiden ja palveluiden vastaanotto
| Ohjelmisto VTProducts.Product = PTU.Nomenclature"
;

Pyyntö . SetParameter( "Valmistaja", Valmistaja);

RequestResult = Pyyntö. Juosta();
Näyte = Kyselyn tulos. Valita();

Hei hei Sample.Next() Loop

EndCycle;

Virtuaalipöydät

Virtuaalipöydät- Nämä ovat taulukoita, joita ei ole tallennettu tietokantaan, vaan ne ovat alustan luomia. Pohjimmiltaan nämä ovat sisäkkäisiä kyselyitä yhteen tai useampaan alustan suorittamaan fyysiseen taulukkoon. Virtuaalitaulukot saavat tietoa vain rekistereistä ja ne on tarkoitettu pääosin pitkälle erikoistuneiden ongelmien ratkaisemiseen.

Seuraavat virtuaalitaulukot ovat olemassa (mahdolliset parametrit on merkitty suluissa):

  • Tietorekisterit:
    • SliceFirst(<Период>, <Условие>) — määrätyn päivämäärän varhaisimmat tietueet;
    • SliceLast(<Период>, <Условие>) — viimeisimmät tietueet tietyltä päivämäärältä;
  • Keräysrekisterit:
    • Ylijäämät (<Период>, <Условие>) — määrätyn päivämäärän saldot;
    • vallankumoukset (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Kauden tapahtumat;
    • JäännösJa Liikevaihto(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — kauden saldot ja liikevaihto;
  • Kirjanpitorekistereistä:
    • Ylijäämät (<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — määritetyn päivämäärän saldot tilien, dimensioiden ja alatilien mukaan;
    • vallankumoukset (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — kauden liikevaihto kirjanpidon, mittausten, korr. tilit, subconto, cor. subconto;
    • JäännösJa Liikevaihto(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — saldot ja liikevaihto tilien, mittausten ja alatilien yhteydessä;
    • LiikevaihtoDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — kauden liikevaihto tilit Dt, tilit Kt, Subconto Dt, Subconto Kt;
    • MovementsSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — liikkeet yhdessä subconto-arvojen kanssa;
  • Laskentarekisterit:
    • Base(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — laskentarekisterin perustiedot;
    • DataGraphics(<Условие>)—kaaviotiedot;
    • ActualActionPeriod(<Условие>) on todellinen voimassaoloaika.

Kun työskentelet virtuaalitaulukoiden kanssa, sinun tulee käyttää valintoja virtuaalitaulukoiden parametreissa, ei WHERE-tilassa. Kyselyn suoritusaika riippuu suuresti tästä.

Kyselyn rakentaja

Kyselytekstien syöttämisen nopeuttamiseksi alustalla on erikoistyökaluja: Kyselyn rakentaja Ja Kyselykonstruktori tuloskäsittelyllä. Voit kutsua rakentajia napsauttamalla hiiren kakkospainikkeella ja valitsemalla haluamasi kohteen:

Rakentajat voidaan kutsua myös päävalikosta Teksti.

Kyselyn rakennustyökalun avulla ohjelmoija voi rakentaa interaktiivisesti kyselytekstiä. Voit tehdä tämän valitsemalla tarvittavat taulukot ja kentät hiirellä, luomalla suhteita, ryhmittelyjä, kokonaismääriä jne. Tämä lähestymistapa säästää aikaa ja eliminoi mahdolliset virheet. Työnsä tuloksena kyselyn rakentaja luo kyselytekstin.

Kyselykonstruktori tuloskäsittelyllä luo kyselytekstin generoinnin lisäksi valmiin koodinpätkän tiedon vastaanottamista ja käsittelyä varten.

RequestSchema-objekti

Alustan avulla voit ohjelmallisesti luoda ja muokata pyyntötekstiä objektin avulla Pyydä Schema. Objektilla on yksi ominaisuus Joukko pyyntöjä, johon objekti tallentaa kaikkien parhaillaan muokattavien kyselyjen ominaisuudet. RequestSchema-objekti tukee seuraavia menetelmiä:

  • SetQueryText(< Текст>) — täyttää Query Packet -ominaisuuden lähetetyn pyyntötekstin perusteella;
  • HankiQueryText() - palauttaa Request Packet -ominaisuuden perusteella luodun pyyntötekstin;
  • FindParameters() - palauttaa pyynnön parametrit.

Katsotaanpa esimerkkiä RequestSchema-objektin kanssa työskentelystä. Pyyntötekstin ohjelmallinen luominen

JÄRJESTÄ
Valuutat.Koodi

Upotettu kielikoodi saattaa näyttää tältä:

RequestScheme = Uusi RequestScheme;
Paketti 1 = RequestScheme. RequestBatch[0];
Operaattori 1 = Paketti1. Operaattorit[0];
// lisäämällä lähdettä
RegisterTable = Operaattori1. Lähteet. Lisätä( "Hakemisto. Valuutat", "Valuutat" );
// kenttien lisääminen
FieldLink = Operaattori1. Valittavissa olevat kentät. Add("Valuutat.Linkki" , 0 );
Kenttäkoodi = Operaattori1. Valittavissa olevat kentät. Add("Valuutat.Koodi", 1);
// kenttäaliaksien määrittäminen
Paketti 1 . Sarakkeet[0]. Alias ​​= "Valuutta" ;
Paketti 1 . Sarakkeet[1]. Alias ​​= "Koodi" ;
// ehdon lisääminen
Operaattori 1 . Valinta. Lisätä( "NOT FlagDeletion");
// lisää järjestys
Paketti 1 . Tilaus. Lisää(Kenttäkoodi);
RequestText = RequestScheme. HankiQueryText();

Hei kaikki! Tai pikemminkin niille, jotka vielä joskus katsovat tätä blogia :)

Pitkän kokopäivätyöstä johtuvan poissaolon jälkeen päätin vihdoin kirjoittaa uuden postauksen.

Sain äskettäin tietää, että jotkut ihmiset eivät tiedä, että 1C 8.3 -alustalla on sisäänrakennettu työkalu väliaikaisten taulukoiden virheenkorjaukseen. Se ilmestyi suhteellisen äskettäin, yhdessä 1C 8.3.8 -julkaisuista - "Tiedon saamiseksi"() sovellettu Väliaikaiselle pöytävastaavalle.

Samaan aikaan tämä työkalu helpottaa huomattavasti kykyä tutkia ongelmia, esimerkiksi analysoitaessa tyypillisiä mekanismeja.

Kaikki on melko yksinkertaista.

1. Hanki väliaikaiset kyselytaulukot

Viankorjausta käytettäessä laskemme ensin väliaikaisten taulukoiden luettelon Query.TemporaryTableManager.Tables. Tällä tavalla saamme listan suoritettavan kyselyn luomista taulukoista:

2. Hanki väliaikainen taulukko virheenkorjausta varten

Sitten pääsemme väliaikaiseen taulukkoon, jota tarvitsemme virheenkorjaukseen lisäämällä Get(<Индекс таблицы>)

3. Saamme tiedot suoraan

GetData()-menetelmän avulla voit saada kyselyn tuloskokoelman suoraan valitulle väliaikaiselle taulukolle.

Jos taulukon virheenkorjaus suoritetaan suoraan indeksillä 0 (kuten tiedätte, indeksit ja numerointi 1C:ssä alkavat nollasta), tiedot saadaan laskemalla seuraava rivi:

Query.TemporaryTableManager.Tables.Get(0).GetData().Unload()

Virheenkorjaus tällä tavalla vie vähemmän aikaa kuin käyttämällä erilaisia ​​"sauvoja" 😀

Siinä kaikki, hyvää kehitystä sinulle ja hyvää lomaa!

PS. Ja niille, jotka tukevat palkanlaskentaa yrityksessä (ei vain ohjelmoijia), muistutan, että tälle aiheelle on varattu erillinen resurssi Pro-Zup.info.

Jos sinulla on kysyttävää tästä aiheesta, olet kiinnostunut laajentamaan vakioohjelman ominaisuuksia tai sinulla on vianetsintäehdotuksia, tervetuloa resurssiin https://pro-zup.info/

Kyselymekanismi, joka syntyi 1C-ohjelman versiossa 7, yleistyi ja kasvaa jatkuvasti suosiotaan 8-alustan ensimmäisten versioiden julkaisun myötä. Hallittujen lomakkeiden ja tiedonmuodostusjärjestelmien tulo on lisännyt merkittävästi tämän työkalun soveltamisalaa. Monien aloittelevien ohjelmoijien on kuitenkin melko vaikea hallita sitä.

Käyttämällä objektia nimeltä "Temporary Table Manager" voit:

  • Yksinkertaistaa pyyntötekstiä huomattavasti;
  • Jaa se yksinkertaisempiin lohkoihin;
  • Paranna sen luettavuutta ja rakennetta.

Muutama sana siitä, miten se toimii

Periaatteessa väliaikaisen taulukonhoitajan työ voidaan jakaa neljään käyttövaiheeseen:

  1. Esimiehen luominen;
  2. Täytä se;
  3. Tietojen lukeminen taulukoista;
  4. Johtajan tuhoaminen ja pöytien tyhjentäminen.

Puhutaanpa jokaisesta vaiheesta yksityiskohtaisemmin.

Väliaikaisen taulukonhallinnan luominen

Tämän objektin määrittelemiseksi sinun on suoritettava kuvassa 1 esitetty koodi

Tässä on huomioitava, että väliaikaisen taulukonhallinnan määritelmä annetaan ennen Execute()-operaattoria, muuten koodin suorittamisen keskeyttää taatusti virhe, jonka tietoikkuna on esitetty kuvassa 2.

Kuva 2

Johtajan täyttäminen

Samassa kuvassa 1 on rivi, joka siirtää valinnan väliaikaiseen taulukkoon. Se alkaa "Place"-operaattorilla. Kohde on kohdetaulukon nimi.

"Query Builder" -sovelluksella tämä rivi voidaan luoda "Lisäasetukset"-välilehdelle Kuva 3.

Kuva 3

Tätä varten tarvitset:

  1. Aseta "Kyselyn tyyppi" -kytkin "Luo väliaikainen taulukko" -asentoon;
  2. Määritä vastaanottimen nimi.

Jos käytät virheenkorjausohjelmaa johtajan täyttöjärjestyksen tarkistamiseen, huomaat, että tiedot näkyvät siinä vasta, kun Execute()-pyyntömenetelmä on suoritettu.

Voit määrittää, kuinka täynnä johtaja on Quantity()-operaattorilla. Esimerkkirivi: MVT.Tables.Quantity().

Esimiestaulukoiden lukeminen

Seuraava vaihe on lukea tiedot olemassa olevista taulukoista toisessa kyselyssä. Tässä on yksi ongelma: luotava uusi kysely ei tiedä täytetyn taulukon olemassaolosta, joten se ei näy konsolin "Database"-ikkunassa.

Se on rekisteröitävä ja luotava manuaalisesti.

Tätä varten "Taulukot ja kentät" -välilehdellä (kuva 4) sinun on suoritettava tietty toimintosarja:

Kuva 4

  1. Napsauta tämän välilehden Taulukot-ikkunavalikossa "Luo väliaikainen taulukon kuvaus" -painiketta.
  2. Avautuvassa ikkunassa on määritettävä kentän nimi ja kuvaus (kentän tyyppi), sellaisena kuin se on määritetty olemassa olevassa taulukossa;
  3. Tarvittavat kentät tai funktiot niiden kanssa on siirrettävä välilehden kolmanteen ikkunaan.

Koko suoritusajan tilapäisiä taulukoita tallennetaan käyttäjän tietokoneen RAM-muistiin tiedostotilassa työskennellessä tai tukkivat palvelimen muistia asiakas-palvelin-tilassa, kunnes hallintaa kutsunut toiminto tai toiminto on täysin valmis. Suuret tietomäärät voivat heikentää merkittävästi jopa heikoimman laitteiston suorituskykyä.

Pöytien poistaminen

Yleensä kokeneet asiantuntijat, jotta muistia ei tukkeutuisi liikaa, suosittelevat väliaikaisten taulukoiden poistamista heti niiden käytön jälkeen, jos niitä ei kutsuta muualle.

Taulukoiden poistaminen hallinnasta voidaan tehdä kahdella päätavalla:

  • Määrittämällä avainsanan Destroy suoraan pyyntötekstissä;
  • Käyttämällä Close()-menetelmää, jota sovelletaan suoraan johtajaan.

Toisessa tapauksessa kaikki eri kyselyillä luodut taulukot tuhotaan väkisin.

Ensimmäisen vaihtoehdon käyttö tietojen poistamiseen voidaan määrittää nimenomaisesti kirjoittamalla rivi, kuten "Destroy TableName" kyselytekstiin tai käyttämällä "Query Designer" -ikkunan "Advanced"-välilehteä (kuva 2).

Siirtämällä kytkimen "Tuhoa"-asentoon ja määrittämällä poistettavan kohteen nimen, voit suorittaa tämän toiminnon ilman ongelmia.

Siirto (TK) pyynnöstä

Yksi tämän hallinnan yleisimmistä käyttötavoista on arvotaulukon välittäminen yhtenä kyselyn tietolähteenä. Kuten tiedät, tämän kokoelman suoraa käyttöä 1C-pyynnössä ei tarjota.

Tätä varten pyyntötekstin on sisällettävä rivi, kuten "Valitse * Aseta MVT &Tz-välilehdestä". Välittämällä olemassa olevan arvotaulukon "TZ"-parametriksi pyyntöön, saamme objektin, joka soveltuu jatkokäsittelyyn muissa pyynnöissä.

Ainoa ehto, joka estää TK:n välittämisen parametrina, ovat sen sarakkeiden implisiittisesti ilmoitetut tyypit. Eli kun luot TK-sarakkeita, sinun on täytettävä toinen parametri rivillä, kuten "New TypeDescription(")).

On tilanteita, joissa on tarpeen yhdistää useita kyselyitä yhteen kyselyyn, eivätkä taulukkoliitokset auta tässä. Helpoin tapa osoittaa se on esimerkin avulla.

Oletetaan, että järjestelmässämme tavaran oston ja myynnin tosiasiat kirjataan asiakirjoihin Tulot ja Kulut. Vastapuoli voi olla joko ostaja tai toimittaja. Velka voidaan kuitata toimittamalla tavarat:

Laskeaksesi vastapuolen kokonaisvelan, sinun on laskettava yhteen tämän vastapuolen kaikkien kulujen summa ja vähennettävä kaikkien saman vastapuolen kuittien summa. Helpoin tapa tehdä tämä on käyttää COMBINE ALL -operaattoria:

Pyyntö.Teksti =
"
//laske urakoitsijoille lähettämämme summa
|VALITSE
| Kulu. Vastapuoli,
|FROM
| Document.Expense AS Expense
|GROUP BY
| Kulu. Vastapuoli
|. YHDISTÄ KAIKKI
//laske vastapuolten määrä
//toimitti tavarat meille
|VALITSE
| Seurakunta.
//ota summa negatiivisella merkillä,
//että yhdistettynä se vähennettiin kulusummasta
| SUMMA(-kuitti.summa)
|FROM
| Asiakirja Arrival AS Saapuminen
|GROUP BY
| Saapuminen. Vastapuoli";

Ensimmäisessä pyynnössä laskemme kunkin vastapuolen kulujen määrän, toisessa - summan, jolla kukin vastapuoli toimitti meille tavaroita. Toisen pyynnön summa otetaan miinusmerkillä, joten kun tuloksena oleva taulukko tiivistetään, se vähennetään tälle vastapuolelle lähetetyn lähetyksen määrästä. Tuloksena saamme seuraavanlaisen taulukon:

Se ei ole aivan sitä mitä halusimme, mutta se on lähellä. Vaaditun tuloksen saavuttamiseksi ei tarvitse muuta kuin ryhmitellä vastapuolittain. Tätä varten kysely on sijoitettava väliaikaiseen taulukkoon (työskentely väliaikaisten taulukoiden kanssa käsitellään kohdassa suljettu osa kurssista ) ja valitse ja ryhmittele kentät siitä:

Pyyntö = Uusi pyyntö;
Pyyntö.Teksti =
"VALITA
| Kulu. Vastapuoli,
| SUMMA(kulut.Summa) velana
|Paikka VT_Incoming Expense
|FROM
| Document.Expense AS Expense
|GROUP BY
| Kulu. Vastapuoli
|. YHDISTÄ KAIKKI
|VALITSE
| Seurakunta.
| SUMMA(-kuitti.summa)
|FROM
| Asiakirja Arrival AS Saapuminen
|GROUP BY
| Seurakunta. Vastapuoli
|;
|////////////////////////////////////////////////////////////////////////////////
|VALITSE
| VT_Incoming Expense, vastapuoli.
| SUM(VT_IncomeExpenditure.Debt) AS Velka
|FROM
| VT_IncomingConsumption AS VT_IncomingConsumption
|GROUP BY
| VT_Saapuvat kulut.

Vaatimukset kyselyjen yhdistämiselle

Kun yhdistetään kaksi kyselyä, kenttien lukumäärän on oltava sama, jos jostakin kyselystä puuttuu kenttiä, ne on lisättävä vakioiksi. Katsotaanpa yllä olevaa esimerkkiä, olkoon kulutositteessa myös alennuskenttä, joka pienentää vastapuolen velan määrää, mutta kuittitositteessa ei ole alennuksia. Kuinka olla tässä tapauksessa? Niin:

Pyyntö = Uusi pyyntö;
Pyyntö.Teksti =
"VALITA
| Kulu. Vastapuoli,

|FROM
| Document.Expense AS Expense
|GROUP BY
| Kulu. Vastapuoli
|. YHDISTÄ KAIKKI
|VALITSE
| Seurakunta.
| SUMMA(-kuitti.summa),
//lisää nollakentän alennus
| 0
|FROM
| Asiakirja Arrival AS Saapuminen
|GROUP BY
| Saapuminen. Vastapuoli";

Jäljelle jää vain alennus ja ryhmä vähentäminen.

Järjestys on myös tärkeä. Kentät yhdistetään täsmälleen siinä järjestyksessä, jossa ne on määritetty molempien kyselyiden SELECT-osissa. Edelliseen esimerkkiin verrattuna vaihdetaan alennus- ja summakentät kuittinäytteessä:

Pyyntö = Uusi pyyntö;
Pyyntö.Teksti =
"VALITA
| Kulu. Vastapuoli,
| SUMMA(kulut.Summa) velana,
| SUMMA(kulut.Alennus) AS Alennus
|FROM
| Document.Expense AS Expense
|GROUP BY
| Kulu. Vastapuoli
|. YHDISTÄ KAIKKI
|VALITSE
| Seurakunta.
//vaihda paikkaa
| 0,
| SUMMA(-kuitti.summa)
|FROM
| Asiakirja Arrival AS Saapuminen
|GROUP BY
| Saapuminen. Vastapuoli";


kiinni