Partiipäring 1s 8.3. Lihtsad päringud. Taotluste partii loomine kujundaja abil

need suurendavad tunduvalt loetavust, mis vähendab vigade tõenäosust => minu jaoks sellest üksi piisab.

1C:Enterprise'i versiooni 8.0 sisseehitatud päringukeelel puudus võimalus kasutada ajutisi tabeleid ja kirjutada pakkpäringuid. Samal ajal oli sageli vaja ühe päringu raames teha keerukaid arvutusi (see tähendab, et kliendi - 1C:Enterprise serveri - DBMS-i serveri vaheline suhtlustsükkel oli üks). Selliste probleemide lahendamiseks kasutati alampäringuid – kõnesid mitte metaandmete objektidele, vaid nendest objektidest tehtud valikutele. Tavaliselt tehti alampäringud rühmitamisega ja neid kasutati sageli liitumistes.

DBMS-i serveri optimeerija (olenemata sellest, millist DBMS-i te kasutate) ei saa alati sellist päringut õigesti optimeerida. Sel juhul on optimeerija probleemiks õige ühendusmeetodi valimine. Kahe valimi ühendamiseks on mitu algoritmi. Ühe või teise algoritmi valik sõltub sellest, kui palju kirjeid ühes ja teises proovis sisaldub. Kui ühendate kaks füüsilist tabelit, saab DBMS olemasoleva statistika põhjal hõlpsasti määrata mõlema valimi suuruse. Kui üks ühendatud valikutest on alampäring, on väga raske aru saada, mitu kirjet see tagastab. Sel juhul võib DBMS teha plaani valimisel vea, mis toob kaasa päringu jõudluse katastroofilise languse.

Päringu ümberkirjutamine ülaltoodud meetodi abil on mõeldud DBMS-i optimeerija töö lihtsustamiseks. Ümberkirjutatud päringus on kõik liitumistes osalevad valikud füüsilisteks tabeliteks ja DBMS-il on lihtne iga valiku suurust määrata. See võimaldab tagada, et DBMS valib kõigist võimalikest plaanidest kiireima. Lisaks teeb DBMS olenemata tingimustest õige valiku. Sel viisil ümber kirjutatud päring töötab võrdselt hästi igas DBMS-is, mis on eriti oluline ringluslahenduste väljatöötamisel. Lisaks on sel viisil ümber kirjutatud päring paremini loetav, hõlpsamini mõistetav ja silutav.

Tuleb mõista, et niimoodi päringut ümber kirjutades oleme võib-olla lisanud lisakulu – ajutiste tabelite loomise – sellesse mõningase aeglustumise. Kui DBMS plaani valimisel viga ei tee, täidab see tõenäoliselt vana päringu kiiremini kui uus. See aeglustumine on aga alati äärmiselt väike. Aeglustumise suurus sõltub kasutatavast DBMS-ist ja riistvara jõudlusest. Tavalisel juhul võib ühe ajutise tabeli loomiseks kuluda mitu millisekundit. See tähendab, et need aeglustused ei saa süsteemi jõudlust märgatavalt mõjutada ja reeglina võib neid ignoreerida.

See artikkel on mõeldud lugejatele, kes tunnevad SQL-keelt.

Alates versioonist 8 kasutatav 1C päringukeel on tänapäeval muutunud andmebaasidega töötamiseks kasulikuks tööriistaks, mis võimaldab teil neist lugeda, kuid mitte kirjutada. Süntaktiliselt on päringukeel väga sarnane SQL-keelega, kuid vene keeles.

Allpool on peamise päringukeele ja SQL-i operaatorite vastavustabel:

1C päringu keeleoperaatorid

SQL-lause

ERINEVAD

ÜHEND

GROUP BY

KOMBINEERIDA

SORTEERIMA

Ja see pole täielik nimekiri. Täielikumat viiteteavet saadaolevate päringukeeleoperaatorite kohta leiate päringukujundajast, mida käsitletakse allpool.

1C päringu täitmine programmikoodist toimub sisseehitatud keeleobjekti “Request” abil. Näide andmebaasipäringu kirjutamisest, kasutades sisseehitatud programmeerimiskeelt:

Taotlus = uus taotlus; Query.Text = "SELECT | Synonym.Link AS Link |FROM | Directory.Directory1 AS Sünonüüm"; Select = Query.Run().Select(); While Selection.Next() Loop // Sisesta valikutöötlus SelectionDetailedRecords EndCycle;

Meetod "Käivita" käivitab päringu, meetod "Select" tagastab väärtuse "SelectFromQueryResult". Võite kasutada ka Unload meetodit, mis tagastab väärtuste tabeli.

Päringu parameetrid salvestatakse atribuuti "Parameetrid" (antud juhul on see struktuur, seega on siin rakendatavad kõik struktuurimeetodid - sisestamine, kustutamine jne).

Näide parameetri "Query.Parameters.Insert" määramisest ("Directory", DirectoryLink). Taotluses pääsete parameetritele juurde, kasutades ampersandi “&kataloog”. Allpool on näide parameetreid kasutavast päringust:

Taotlus = uus taotlus; Query.Text = "SELECT | Users.Link AS Link, | Users.Parent AS Parent, | Users.Name AS Nimi |FROM | Kataloog.Kasutajad AS Kasutajad |KUS | Kasutajad.Link = &Kataloog"; Query.Parameters.Insert("Kataloog", DirectoryLink); Select = Query.Run().Select(); While Selection.Next() Loop // Sisesta valikutöötlus SelectionDetailedRecords EndCycle;

Pidagem meeles, et päringukeel on mõeldud ainult andmete lugemiseks andmebaasist, seega pole sellel analooge sellistele SQL-lausetele nagu INS ERT ja UPDATE. Andmeid saab muuta ainult sisseehitatud 1C programmeerimiskeele objektmudeli kaudu. Ka 1C päringukeeles on operaatoreid, millel pole SQL-is analooge, näiteks:

  • HIERARHIAS
  • KOHT
  • INDEX BY

HIERARHIAS– võimaldab valida kõik hierarhilise kataloogi elemendid, mis sisalduvad ülekantud lingi hierarhias. Kasutamise näide HIERARHIAS:

VALI tooted.Link, tooted.artikkel kataloogist.Tooted AS Tooted WHERE Tooted.Link HIERARHIAS(&Citrus)"

Sel juhul tagastab tulemus kõik tsitrusviljade nomenklatuuri kataloogi alluvad elemendid, olenemata sellest, mitu hierarhiataset sellel kataloogil on.

Samuti on näiteks ülesandeks leida toode nimega “Pliiats”. Toode peab olema kantud kirjatarvete hierarhiasse. Kaup”, see tähendab, et me ei pea otsima ukselinki. Sel juhul on nomenklatuuri struktuur järgmine:

kontor

|_ Täitepliiatsid |_ Punane pastakas |_ Sinine pastakas |_ Tindipliiatsid |_ Joonlauad

Aksessuaarid

|_ Ukselingid |_ Lihtne ukselink |_ Luksuslik ukselink

Kirjutame järgmise palve:

SELECT Tooted.Link, Tooted.Artikli kataloogist.Tooted AS Tooted WHERE Tooted.Nimi nagu "Pen%" JA tooted.Link HIERARHIAS(&Kirjatarbed)"

Disaini kasutamisel HIERARHIAS tuleb arvestada, et kui edastate tühja lingi parameetrile "Office", aeglustub päringu täitmine, kuna platvorm kontrollib iga elementi, et näha, kas see kuulub juure.

KOHT– See väide asetab tulemuse ajutisse tabelisse. Taotluse näidis:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Nimi KOHT ValitudKasutajad FROM Kataloog.Kasutajad AS Kasutajad WHERE Kasutajad.Link = &Directory; SELECT SelectedUsers.Link AS Link, SelectedUsers.Parent AS Parent, SelectedUsers.Name AS nimi FROM SelectedUsers AS SelectedUsers

Seda SQL-päringut käivitatakse mitme päringuga:

  • Ajutise tabeli loomine (platvorm saab "taaskasutada" varem loodud ajutisi tabeleid, nii et loomine ei toimu alati);
  • Andmete paigutamine ajutisse tabelisse;
  • Põhipäringu täitmine, nimelt SEL ECT sellest ajutisest tabelist;
  • Ajutise laua lõhkumine/puhastamine.

Ajutise tabeli saab konstruktsiooni kaudu selgesõnaliselt hävitada HÄVITADA, või kaudselt - ajutise tabelihalduri sulgemisel.

Sisseehitatud programmeerimiskeele objektil “Query” on atribuut “Temporary Table Manager”, mis on mõeldud ajutiste tabelitega töötamiseks. Näidiskood:

MVT = Uus ajutine tabelihaldur(); Taotlus = uus taotlus; Query.TemporaryTableManager = MVT;

Pärast päringu täitmist saab MVT muutujat kasutada teist korda teises päringus, mis on kahtlemata ajutiste tabelite kasutamise eelis. Sel juhul kustutatakse ajutine tabel andmebaasist, kui kutsutakse "Close" meetod...

MVT.Close();

...või muutuja mälust kustutamisel, st meetodi täitmisel, milles muutuja deklareeriti. Ajutised tabelid suurendavad ketta alamsüsteemi koormust, nii et te ei tohiks luua liiga palju ajutisi alamsüsteeme (näiteks tsüklina) ega suuremahulisi alamsüsteeme.

INDEX BY– seda operaatorit kasutatakse koos operaatoriga KOHT. Ajutise tabeli loomisel saab see operaator loodava tabeli indekseerida, mis kiirendab oluliselt sellega töötamist (aga ainult juhul, kui indeks vastab teie päringule).

Tasuta ekspertide konsultatsioon

Täname palve eest!

1C spetsialist võtab teiega ühendust 15 minuti jooksul.

Mõnede päringukeeleoperaatorite omadused

VAHETUSEKS– see operaator on mõeldud konkreetse päringutabeli (või kõigi päringus osalevate tabelite) lukustamiseks. Lukustamine toimub U-luku paigaldamisega lauale. SQL-is rakendatakse seda vihje UPDLOCK kaudu. See disain on vajalik ummikseisude vältimiseks. Näide taotlusest koos konstruktsiooniga MUUDATUSEKS:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS nimi FROM Directory.Users AS Users LASKUS LIITUMINE Kataloog.RFK AS RFK BY Users.RFK = RFK.Link kataloogi MUUTMISEKS.Kasutajad

Selles näites asetatakse U-lukk tabelisse Kasutajad. Kui te luku jaoks tabelit ei määra, rakendatakse see kõigile päringus osalevatele tabelitele. Oluline on märkida, et see disain töötab ainult konfiguratsioonides, kus automaatne lukuhaldusrežiim on lubatud.



ÜHEND– päring toetab ühendusi VASAK/PAREM, TÄIS, SISEMINE, mis vastab SQL-is liitumistele – LEFT/RIGHT JOIN, OUTER JOIN, INNER JOIN.

Päringukoostajat kasutades aga seda teha ei saa ÕIGE LIITUMINE. Konstruktor lihtsalt vahetab tabeleid, kuid operaator on alati vasakukäeline. Sel põhjusel ei näe te 1C-s kunagi õiget liitumist.

Süntaktiliselt näeb ühendus välja selline:

SELECT Tabel1.Link AS Link kataloogist.Kataloog1 AS Tabel1 LEFT JOIN Directory.Drectory2 AS Tabel2 BY Tabel1.Atribuudid = Tabel2.Atribuudid

1C päringukeeles ei ole tehtemärki Descartes'i tootega liitumiseks (CROSS JOIN). Operaatori puudumine ei tähenda aga, et päringukeel sellist ühendust ei toeta. Vajadusel saate tabeleid ühendada järgmiselt:

SELECT Tabel1.Link AS Link kataloogist.Kataloog1 AS Tabel1 VASAKULE LIITUMINE Kataloog.Kataloog2 AS Tabel2 TÕENE

Nagu näitest näha, on ühenduse võti seadistatud TÕESTI st ühe tabeli iga rida vastab teise tabeli reale. Ühenduse tüüp (LEFT, RIGHT, FULL, INNER) pole oluline, kui mõlemas tabelis on ridu, kuid kui ühes tabelis (oletame, et tabelis) pole ridu, on tulemus erinev. Näiteks kasutamisel SISEMINEühenduse tulemus on tühi. Kasutades VASAK PAREMühendamise tulemuseks on andmed või mitte andmed, olenevalt sellest, millise tabeliga me ühendame - andmetega või mitte. Kasutades TÄIS Andmed ühendatakse alati (loomulikult ainult ühest tabelist, kuna teine ​​on tühi), ühenduse tüübi valik sõltub konkreetsest rakenduse ülesandest.

Väike visuaalne vihje erinevate ühenduste toimimise kohta:



LIKE. Erinevalt sarnasest SQL-i operaatorist - LIKE, on mall jaoks LIKE saab määrata ainult mõne erimärgi abil:

  • % (protsent): jada, mis sisaldab suvalist arvu suvalisi märke;
  • _ (alakriips): üks suvaline märk;
  • / - järgmist märki tuleks tõlgendada tavalise tähemärgina.

TARKVARA TULEMUSED SQL-i analoog on ROLLUP-i operaator. Näide operaatori kasutamisest TULEMUSED:

VALI Tooted.Hind AS Hind, Tooted.Toode AS Toode kataloogist.Nomenklatuur AS Tooted TULEMUSED KESKMINE (HIND) Toote JÄRGI

Tulemus saab olema selline:

Voodi

9833,333

Raud

Pliiats

See tähendab, et tulemusele lisatakse täiendav rida, mis sisaldab selle välja väärtust, mille järgi rühmitatakse, ja liitmisfunktsiooni väärtust.

Töötamine partiitaotlustega

1C võimaldab teil töötada taotluste partiidega. Paketttaotluses eraldatakse päringu tekstid semikooloniga (;). 1C partii taotlus täidetakse järjestikku. Paketitaotluse teksti näide:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Nimi FROM Kataloog.Kasutajad AS Kasutajad;
SELECT Töögraafik.Kasutaja AS-i kasutaja, töögraafik.kuupäev AS-i kuupäev, töögraafik.Tööaeg AS-i tööaeg FROM-ist Registreeru teave.Töögraafik AS-i töögraafik

Kõigi paketis sisalduvate päringute tulemuste saamiseks peate kasutama päringuobjekti meetodit "ExecutePackage", mitte "Run". See meetod täidab kõik taotlused järjestikku. Päringutulemus on tulemuste massiiv iga paketi päringu kohta ja massiivi paigutuse järjestus on sama, mis päringute jada paketi tekstis.

Päringukeele kaalumisel tasub mainida sellist funktsiooni nagu virtuaalsed tabelid. Virtuaaltabeleid andmebaasis ei ole; need on omamoodi ümbris, mis käivitatakse DBMS-i poolel päringuna, kasutades alampäringuid. Näide 1C-päringust, kasutades virtuaalseid tabeleid:

SELECT RegisterKohustusedKäibed.Kohustus AS Vastutus FROM RegistristAccumulations.RegisterLiabilities.Turnover() AS RegisterLiabilitiesKäibed

Selline päring DBMS-ile näeks välja järgmine:

SEL ECT T1.FLD25931RRRRRERF FR OM (Valige t2._fld25931rref kui FLD25931RRRRERF, CAST (SUM (T2._FLD25936) AS Numbriline (38, 8)) As FLD25936 (CUMLDT (ARV25936) (CUMLDT (ARV25936) (CUMLDTVERS2 (3.5.5) 8, 8)) AS Fld25937Käive_ FR OM dbo._AccumRgTn25938 T2 WH ERE ((T2._Fld949 = @P1)) JA ((T2._Fld25936 @P2 VÕI T2._Fld25937 @P2 VÕI T2._Fld25937 RÜHM (BRR)3 BRREF25) SUM( T2._Fld25) 936 ) NUMBRIKUNA(38, 8))) 0.0 VÕI (CAST(SUM(T2._Fld25937) NUMBRIKUNA(38, 8))) 0.0) T1>>>>

On näha, et see ei näe välja nagu SQL, kuna seal on alampäring, rühmitamine. Virtuaalsed tabelid on üldiselt "süntaktiline suhkur", see tähendab, et need luuakse üldiselt päringute arendamise mugavuse huvides, nii et päringud oleksid kompaktsemad ja loetavamad.

Ainult registritel on virtuaalsed tabelid, kuid millised virtuaalsed tabelid on registris saadaval, on näha päringukujundajas.



Virtuaalsete tabelite kasutamisel peate alati esitama valikutingimuse. Vastasel juhul võivad tekkida jõudlusprobleemid.



Päringu sisus näeb see välja järgmine:

Kogumisregister Kohustuste register Käiberegister (, Toiming = &Tegevus) AS vastutusregister Käibed

Päringute kirjutamise, st päringutekstide loomise mugavuse huvides on 1C-s konstruktor, mida saab kontekstimenüü kaudu kutsuda (hiire parem nupp):



Päringukujundajas näete toetatud päringukeele funktsioonide ja operaatorite täielikku loendit.


Päringu koostaja on väga paindlik visuaalne tööriist mis tahes keerukusega päringute loomiseks. See on saadaval ainult konfiguraatori režiimis. Ettevõtlusrežiimis on nn päringukonsool - see on väline töötlemine, mis edastatakse ITS-kettale. Hallatud rakenduse jaoks saab päringukonsooli alla laadida saidilt its.1c.ru.

Päringu kujundajaga töötamise kirjeldus ei kuulu selle artikli reguleerimisalasse, mistõttu seda üksikasjalikult ei käsitleta.

Päringu ebaoptimaalse toimivuse põhjused

Allpool on loetelu peamistest põhjustest (kuid mitte kõigist), mis viivad päringu aeglase täitmiseni.

  • Ühenduste kasutamine alampäringutega

Alampäringutega ei ole soovitatav ühendada, alampäringud tuleks asendada ajutiste tabelitega. Alampäringute ühendamine võib kaasa tuua märkimisväärse jõudluse kaotuse ja päringu täitmise kiirus erinevates DBMS-ides võib oluliselt erineda. Selliste päringute täitmiskiirus on tundlik ka DBMS-i statistika suhtes. Selle käitumise põhjuseks on see, et DBMS-i optimeerija ei saa alati õigesti määrata optimaalset päringu täitmisplaani, kuna optimeerija ei tea midagi selle kohta, mitu rida alampäring pärast selle täitmist tagastab.

  • Virtuaalsete tabelite kasutamine päringu ühendamisel

Virtuaalsed tabelid DBMS-i tasemel käivitatakse alampäringutena, seega on põhjused samad, mis esimeses lõigus.

  • Tingimuste kasutamine päringus, mis ei sobi olemasolevate indeksitega

Kui päringu tingimustes (operaatoris KUS või virtuaalse tabeli tingimused) kasutab välju, mis pole kõik indeksis sisalduvad, täidetakse see päring SQL-i konstruktsiooni tabeli kontrolli või indeksi kontrolli (täielikult või osaliselt) abil. See ei mõjuta mitte ainult päringu täitmisaega, vaid lisaridadele pannakse ka liigne S-lukk, mis omakorda võib viia luku eskalatsioonini, st kogu tabel lukustatakse.

  • VÕI kasutamine päringutingimustes

Loogilise operaatori kasutamine VÕI disainis KUS tulemuseks võib olla ka tabeli skaneerimine. See juhtub seetõttu, et DBMS ei saa indeksit õigesti kasutada. Selle asemel VÕI saate disaini kasutada KOMBINEERI KÕIK.

  • Liittüüpi väljade jaoks andmete vastuvõtmine punkti kaudu

Väärtusi ei soovitata saada punkti kaudu (konstruktsioonis VALI KUS), sest kui objekti atribuut osutub keerukaks tüübiks, toimub liitumine iga sellesse komplekstüüpi kuuluva tabeliga. Selle tulemusena muutub DBMS-i päring oluliselt keerulisemaks, mis võib takistada optimeerijal õiget päringu täitmisplaani valimist.

1C GOODWILL ettevõtte ajaveeb

1C Enterprise platvorm võimaldab teil täita mitu päringut järjestikku korraga. 1C-s nimetatakse seda päringupaketiks. Ühes paketis on iga päring eraldatud semikooloniga.

Päringute järkjärgulise täitmise saavutamiseks paketis luuakse reeglina algselt ajutised tabelid, seejärel moodustatakse nende jagamise tingimused, nagu filtrid, liitumised ja liitumised. Tänu sellele saavutatakse lõpptulemus. Partii mis tahes päringute tulemusel saadud ajutised tabelid eksisteerivad kuni partii kui terviku lõpuni või kuni ajutised tabelid hävitava päringu täitmiseni.

Lisaks suurendab pakettpäringute ja ajutiste tabelite kasutamine oluliselt selle koodi kogu segmendi loetavust. Keerulisi päringuid, mis sisaldavad ka pesastatud päringuid, võib olla väga raske mõista. Kui aga jagate pika keeruka päringu mitmeks ja kasutate isegi ajutisi tabeleid, ei paranda see mitte ainult taju, vaid suurendab enamikul juhtudel ka jõudlust.

Teine oluline detail 1C pakettpäringute kasuks on see, et erinevalt pesastatud päringutest saame partii iga päringu tulemuse eraldi hankida.

Näide päringupaketi loomisest 1C keeles

Päringute paketi loomise näite nägemiseks kasutame päringukujundajat, mida selguse huvides kutsume päringukonsoolist. Seega näeme koheselt paketi täitmise tulemust.

Loome lihtsa partiipäringu. Soovitan kohe kleepida päringu tekst konsooli ja seejärel avada konstruktor ja vaadata, kuidas päringupakett moodustatakse. Lisage konsooli uus taotlus ja kleepige järgmine tekst:

Isemajandav. Lapsevanem,

Isemajandav. Kood,

Isemajandav. Kiirvaliku kood,

Isemajandav. Nimi,

Isemajandav. Tüüp,

Isemajandav. Bilansiväline,

Isemajandav. Kvantitatiivne,

Kontoplaan Isemajandav AS Isemajandav

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

Isemajandavad tüübidSubconto.Line Number AS Rea number,

Self-toesingTypes 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

Kontoplaan. Isemajandav. Alamkonto tüübid AS Isearvestus Alamkonto tüübid

SORTEERIMA

Isemajandavad TypesSubconto.NumberLines

Minu jaoks näeb see välja selline:

Liigume nüüd päringukujundaja juurde. Siin huvitab meid vahekaart „Taotle pakett”:

Nagu näete, on meil pakett kahest taotlusest. Topeltklõpsates mis tahes neist, saate jätkata selle redigeerimist:

Klõpsake nuppu "Ok" ja proovige näha partiipäringu tulemust.

Määrame parameetri "Konto". Kontoplaanist saate valida mis tahes konto. Nagu arvatavasti juba arvasite, peab see päringupakett saama konto atribuute. Klõpsake "Käivita" ja vaadake tulemust:

Meetodid Run() ja RunBatch()

Lisaks meetodile Execute(), mis täidab ükshaaval kõik partii taotlused ja tagastab viimase päringu tulemuse, on 1C-s meetod ExecuteBatch(). See tagastab partii iga päringu näidiste massiivi. Ülaltoodud näites on see meetod täpselt selline.

ArrayResults = Query.ExecuteBatch();

Valik1 = ArrayResults.Select();

Kui Select1.Next() Siis

//Toimingud valikuga 1

endIf;

SelectionViewsSubconto = ArrayResults.Select();

Postitus 1C 8.3 ja 8.2 komplektitaotlustega töötamine ilmus esmakordselt ettevõtte 1C GOODWILL ajaveebis.

Päringukujundaja versioonides 1C 8.3 ja 8.2 on võimas arendustööriist. See võimaldab koostada päringu teksti spetsiaalse visuaalse keskkonna abil. Seega ei ole 1C päringu loomiseks vaja teada sisseehitatud päringukeelt, piisab disaineri lihtsas ja intuitiivses liideses navigeerimisest.

Päringu koostaja on vahekaartide komplekt, millest igaüks vastutab päringu oma osa eest. Nii et täitke vahekaart Lauad ja väljad Valime tabelid, kust 1C päring saab nende tabelite andmed ja väljad, mis on vajalikud konkreetse probleemi lahendamiseks. Täitmine müüritise sisse Tingimused seame valitud tabelitele tingimused, et valida nende hulgast ainult meile vajalikud andmed jne.

Päringu kujundaja kirjeldus ametlikul 1C 8 veebisaidil: v8.1c.ru

Lauad ja põllud; ; ; ; ; ; Pesastatud päringud (arenduses).

Programmikoodis 1s 8 päringukujundaja kutsumiseks peate:

  • Looge uus taotlus
Taotlus = uus taotlus;
  • Määrake tühi taotluse tekstirida
Request.Text = "";
  • Asetage hiirekursor jutumärkide vahele ja vajutage hiire paremat nuppu. Valige avanevas kontekstimenüüs üksus Päringu konstruktor ja vastata Jah küsimusele uue päringu loomise kohta. Kui päringu tekst on juba üles kirjutatud, peate selle sees klõpsama ja helistama konstruktorile ;

Vaatame kõiki päringute koostaja peamisi vahekaarte, kasutades väikeseid näiteid, mis keerukust suurendavad. See lähenemisviis võimaldab algajal 1C programmeerijal konstruktorit ja kõiki selle võimalusi tõhusamalt uurida. Näidete jaoks kasutame konfiguratsiooni Raamatupidamine 3.0.

1. tund. Päringu koostaja on lihtsaim kasutusjuht.

Ülesanne: kirjutada päring nomenklatuuri kataloogi, valida kogu kataloogi nomenklatuur.

Uued vahelehed: Lauad ja väljad.

Uued mehhanismid: päringu teksti vaatamine ja redigeerimine nupu "Taotle" abil.

Päringu loomise alustamiseks loome uue päringu ja helistame konstruktorile (nagu paar lõiku eespool kirjutatud). Pärast seda avaneb vahekaardil kujundaja aken Lauad ja väljad.

Tunni nr 1 teoreetiline osa

Tab Lauad ja väljad koosneb kolmest osast:

Andmebaas. Selles jaotises on esitatud kõik andmebaasitabelid, mida saab päringu koostamiseks kasutada;

Tabelid. Selles jaotises valitakse selle päringu jaoks vajalikud tabelid. Nende seejärel jaotisest teisaldamiseks andmebaasi vaja:

  • Või topeltklõps tabelil;
  • Või kasutage nuppe “>” või “>>”.

Eespool jaotis Tabelid Nuppe on mitmeid. Enamikku neist käsitletakse üksikasjalikumalt järgmistes tundides. Praegu annan ainult lühidalt selgitusi.

  • Looge alampäring(Punane joon). Mõeldud uue alampäringu loomiseks;
  • Loo ajutine tabeli kirjeldus(kollane joon). Võimaldab määrata ajutise tabeli nime, mis asub väljaspool seda päringut; seda saab kasutada ka väärtuste tabeli päringule edastamiseks;
  • Muuda praegust elementi(roheline joon). Võimaldab hüpata valitud alampäringu, ajutise tabeli või ajutise tabeli kirjelduse juurde;
  • Eemalda praegune üksus(sinine joon). Eemaldab valitud tabeli valitud tabelite hulgast;
  • Vahetage laud välja(sinine joon). Avab valitud tabeli asendamise dialoogi. Kasulik, kui olete valinud vale registri virtuaaltabeli, kuna positsioneerimine toimub loendis parajasti valitud tabelis.
  • Virtuaallaua valikud(lilla joon). Avab virtuaalse registri tabeli parameetrid.

Väljad. See jaotis valib tabeliväljad eelmisest jaotisest. Need väljad on päringu tulemusel saadud tabeli või valiku veerud. Neid on vaja eelkõige selleks, et saada valitud tabelitest ainult konkreetsel juhul vajalikku teavet. Nende sektsioonist teisaldamiseks Vajalikud lauad:

  • Või topeltklõpsake väljal;
  • Või kasutage nuppe “>” või “>>”;
  • Uue välja saab lisada ka ise, kasutades suvalist avaldist valitud tabelite ja päringukeele funktsioonide väljadelt.

Eespool jaotis Väljad Nuppe on mitmeid. Väljade loomist suvaliste avaldiste abil käsitletakse üksikasjalikumalt järgmistes õppetundides. Praegu annan vaid lühiseletusi.

  • Lisama(roheline joon). Mõeldud uue välja lisamiseks vaba väljenduse redaktori abil;
  • Muuda praegust elementi(Punane joon). Võimaldab redaktori abil valitud välja muuta;
  • Kustuta praegune(sinine joon). Eemaldab valitud välja loendist.

Tunni nr 1 praktiline osa

Oleme käsitlenud selles tunnis antud ülesande täitmiseks vajalikku teooriat. Tuletan meelde, kuidas see kõlab: kirjutage päring nomenklatuurikataloogi, valige kogu kataloogi nomenklatuur.

Alustame üksuste päringu loomist:

  • Koostame uue päringu ja avame konstruktori tunni alguses määratud meetodil;
  • Peatükis Andmebaas, avame lõime Kataloogid ja me leiame sealt giidi Nomenklatuur;
  • Valige see ja kasutage nuppu ">", et see jaotisesse teisaldada lauad;
  • Peatükis Tabelid avage nomenklatuuri kataloog, kasutades ikooni "+";
  • Leidke avanevas väljade loendis väli Link ja teisaldage see jaotisesse Väljad kasutades nuppu ">".
  • Kaubapäring on valmis, klõpsake kujundaja akna allosas nuppu "OK".

Kui mu päring muutus nii keeruliseks, et ületas minu arusaamise piirid, otsustasin kasutada pakkpäringuid.

Kuid ma seisin silmitsi tõsiasjaga, et ma ei teadnud neist midagi. Selgus, et kõik on väga lihtne. 5 minuti pärast saate kasutada pakettpäringuid. Alusta lugemist.

Nagu selgus, on kõik väga lihtne. Peate lihtsalt kirjutama mitu semikoolonitega eraldatud päringut. Tulemus tagastatakse viimases päringus.

Paketttaotlused ilmusid ainult versioonis 8.1.11.67.4.

Siin on taotluse tekst:

SELECT T1.Zn KOHT VTBtähed FROM (VALI "A" AS Zn KOMBINEERI KÕIK SELECT "B") AS T1;

SELECT T1.ZN PLACE VTDIGITS FROM (SELECT "1" AS VN COMBINE ALL SELECT "2") AS T1;

SELECT TB.Zn, TC.Zn, TB.Zn+TC.Zn FROM VTB Letters AS TB, VTC Numbers AS TC

Pakettpäringuid toetavad kõik tavalised päringukonsoolid.

Joonisel on näidatud päringu täitmise näidis:

Ja nüüd natuke kogemusest. Miks me vajame partiitaotlusi?

Fakt on see, et ajutisse tabelisse saate panna mingi vahetulemuse, mida võib siis vaja minna mitmes järgnevas päringus.

Varem, kui ajutisi tabeleid polnud, tuli päringu tekst dubleerida.

Loomulikult saate ilma pakettpäringuta hakkama, täites järjest mitut päringut ja manipuleerides pesastatud tabelitega. Kuid partiitaotlustega on see mugavam. Kirjutate lihtsalt päringu ega mõtle ajutiste tabelite paigutamisele. Kõik toimub iseenesest.

Lisaks valib andmekoostamissüsteemi (DCS) kasutamisel arukalt vajalikud väljad ja minimeerib kogu päringute paketi.

Kui päringutel oleks meetod Request.Run() siis nüüd on meetod olemas Request.ExecuteBatch(), mis tagastab kõik paketist olevad tabelid massiivina.

Paketttaotluste teade 1c veebisaidil on siin: http://v8.1c.ru/overview/release_8_1_11/#Functional

Elulugu

Lubage mul selgitada, mis ajendas mind paketttaotlusi alustama.

Niisiis, kujutage ette, et on olemas dokument, sellel on tabeliosa. Kolumnis" Viga» näitab, kas dokumendi täitmisel on viga. Kolumnis" Teksti vead» võib olla üks või mitu lauset veatekstidega. Lausetes sisalduvate vigade liigid on ette teada.

Niisiis, paneme tabelisse kõigi vigade loendi Veakoodid- see sisaldab veakoodi ja otsingu alamstringi.

Iga rea ​​kohta saame ühe, kaks või enam viga. Sest Ühel real võib olla mitu viga.

Aga viga ei pruugita ära tunda, s.t. lipp" Viga" seisab, kuid veatekst ei andnud meile veakoodi.

Teeme vasakühenduse, kus veakood on NULL, anname veakoodi " Muud vead» .

Aga probleem oli selles, et seal oli umbes 200 veakoodi, nii et vasakpoolne ühendus töötas väga kaua. Ma pidin selle asendama sisemise ühendusega, mis lendas. Kuid samal ajal läksid kaduma read, mille puhul viga ei leitud. Ma ei saanud ikka veel aru, kuidas need jooned tulemuseks saada.

Taotlus oli kirjutatud küljendussüsteemi, st. Põhimõtteliselt ei saa kasutada väärtustabeleid ega ajutisi tabeleid. Siin tulevad kasuks pakettpäringud.

Ühendasin lihtsalt veel kord kõik vigadega read kõigi nende ridadega, mille puhul vigu leiti, ja lisasin siiski veatüübi “Muud vead”.