Razdelki spletnega mesta
Izbira urednika:
- Aljaska, plezanje Denali Kam iti za turista na Aljaski
- Predstavitev za lekcijo "Geografska lega Republike Krim" Predstavitev na temo geografske lege Krima
- Zvezna republika Nemčija, Nemčija Kaj je glavno mesto Nemčije
- Predstavitev - celične organele in njihove funkcije Prenesite predstavitev o celičnih organeli
- Zgodovina pojava nemškega mostu v Stavropolu
- Sporočilo na temo: "Potovanje po Rusiji
- Zbogom z arabskimi ruskimi črkami
- Odpri levi meni Gradiščanska Gradiščanska avstrija
- Mecklenburg-Vorpommern - Mecklenburg-Vorpommern Nemško Pomeranije
- Prevarala moža na korporativni zabavi
Oglaševanje
Ustvarjanje in delo s poizvedbami (za začetnike). Ustvarjanje in delo z zahtevami (za začetnike) 1s 8.3 pridobi ime polja zahteve |
Jezik poizvedb v 1C 8 je poenostavljen analog dobro znanega "strukturiranega programskega jezika" (kot se pogosto imenuje SQL). Toda v 1C se uporablja samo za branje podatkov, objektni podatkovni model se uporablja za spreminjanje podatkov. Druga zanimiva razlika je ruska sintaksa. Čeprav v resnici lahko uporabite angleške konstrukcije. Primer zahteve:
Ta zahteva nam bo omogočila vpogled v podatke o imenu in korespondenčnem računu vseh bank, ki obstajajo v bazi podatkov. Opis jezikovnih konstrukcij poizvedbeStruktura zahteveZa pridobitev podatkov je dovolj, da uporabite konstrukciji SELECT (izberi) in FROM (od). Najenostavnejša poizvedba izgleda takole:
Kjer "*" pomeni izbor vseh polj tabele, Reference.Nomenklatura pa ime tabele v bazi podatkov. Razmislite o bolj zapletenem in splošnem primeru:
V tej poizvedbi izberemo podatke polj “FieldName1” in “FieldName1” iz tabel “TableName1” in “TableName”, poljem dodelimo sinonime z operatorjem “HOW”, jih povežemo v skladu z določenim pogojem “TableConnection Pogoj”. Iz prejetih podatkov izberemo le podatke, ki izpolnjujejo pogoj iz "KJE" "Pogoja izbire podatkov". Nato poizvedbo združimo po polju "Ime polja1", pri čemer seštejemo "Ime polja2". Ustvarimo seštevke za "Pogoja za izbiro podatkov". FieldName1" in končno polje "FieldName2". Zadnji korak je razvrščanje poizvedbe s konstrukcijo "ORDER BY". Splošni načrtiRazmislite o splošnih konstrukcijah poizvedovalnega jezika 1C 8.2. PRVIn S tem operaterjem lahko dobite n število prvih zapisov. Vrstni red zapisov je določen z vrstnim redom v poizvedbi.
Zahteva bo prejela prvih 100 vnosov imenika "Banke", razvrščenih po abecedi. DOVOLJENO Ta zasnova je pomembna za delo z mehanizmom. Bistvo mehanizma je omejiti branje (in druga dejanja) na uporabnike za določene zapise v tabeli baze podatkov in ne za tabelo kot celoto. Če uporabnik s poizvedbo poskuša prebrati zapise, ki mu niso na voljo, bo prejel sporočilo o napaki. Da bi se temu izognili, uporabite konstrukcijo "DOVOLJENO", kar pomeni, da bo zahteva prebrala samo dovoljene zapise.
RAZLIČNO Uporaba "DIFFERENT" bo omogočila izključitev podvojenih vrstic iz vnosa rezultata poizvedbe 1C. Podvajanje pomeni, da se vsa polja zahteve ujemajo.
EmptyTable Ta konstrukcija se zelo redko uporablja za združevanje poizvedb. Pri združevanju bo morda treba v eni od tabel podati prazno ugnezdeno tabelo. Operater "EmptyTable" je ravno pravi za to. Primer iz pomoči 1C 8:
JE NIČ Zelo uporabna funkcija, ki vam omogoča, da se izognete številnim napakam. IsNULL() vam omogoča zamenjavo vrednosti NULL z želeno. Zelo pogosto se uporablja pri preverjanju prisotnosti vrednosti v združenih tabelah, na primer:
Lahko se uporablja tudi na druge načine. Na primer, če za vsako vrstico ni znano, v kateri tabeli obstaja vrednost:
AS je operator, ki nam omogoča, da tabeli ali polju dodelimo ime (sinonim). Zgoraj smo videli primer uporabe. Te konstrukcije so zelo podobne – omogočajo vam, da dobite nizovno predstavitev želene vrednosti. Edina razlika je v tem, da VIEW pretvori vse vrednosti v vrsto niza, medtem ko REF VIEW pretvori samo referenčne vrednosti. REFERENČNO REPREZENTACIJO priporočamo za uporabo v sistemskih poizvedbah za sestavo podatkov za optimizacijo, razen če je seveda načrtovano uporabo referenčnega podatkovnega polja pri selekcijah.
EXPRESS Express vam omogoča pretvorbo vrednosti polj v želeno vrsto podatkov. Vrednost lahko pretvorite v primitivni tip ali referenčni tip. Express za referenčni tip se uporablja za omejevanje zahtevanih podatkovnih tipov v poljih sestavljenega tipa, ki se pogosto uporablja za optimizacijo delovanja sistema. Primer:
Za primitivne tipe se ta funkcija pogosto uporablja za omejitev števila znakov v poljih neomejene dolžine (ni mogoče primerjati s takšnimi polji). Da bi se izognili napaki " Neveljavni parametri v operaciji primerjave. Polja ni mogoče primerjati
DATUMSKA RAZLIKA Brezplačne video lekcije 267 1C: Primer uporabe IS NULL v poizvedbi 1C:
Podatkovni tip v poizvedbi je mogoče določiti na naslednji način: z uporabo funkcij TYPE() in VALUETYPE() ali z uporabo logičnega operaterja REFERENCE. Ti dve funkciji sta podobni. Vnaprej določene vrednosti Poleg uporabe posredovanih parametrov v poizvedbah v jeziku poizvedb 1C lahko uporabite vnaprej določene vrednosti ali . Na primer, naštevanja, vnaprej določeni imeniki, kontni načrti itd. Za to se uporablja konstrukcija »Vrednost ()«. Primer uporabe:
PovezavePovezave so 4 vrste: LEVO, PRAV, CELOTNA, NOTRANJA. LEVO in DESNO ZDRUŽITE Združitve se uporabljajo za povezavo dveh tabel z določenim pogojem. Funkcija pri LEVO PRIDRUŽI s tem, da prvo podano tabelo vzamemo v celoti in drugo tabelo povežemo s pogojem. Polja druge tabele, ki jih ni bilo mogoče povezati s pogojem, so napolnjena z vrednostjo NIČ. Na primer: Vrnil bo celotno tabelo nasprotnih strank in izpolnil polje »Banka« samo na tistih mestih, kjer bo izpolnjen pogoj »Nasprotne stranke.Ime = Banke.Ime«. Če pogoj ni izpolnjen, bo polje Banka nastavljeno na NIČ. PRAVI PRIDRUŽITEV v jeziku 1C popolnoma podobno LEVO pridruži se razen ene razlike - v PRAVI SE PRIKLJUČITE"glavna" miza je druga, ne prva. POPOLNA POVEZAVA POPOLNA POVEZAVA razlikuje od leve in desne po tem, da prikazuje vse zapise iz dveh tabel, združuje le tiste, ki jih je mogoče združiti s pogojem. Na primer:
Jezik poizvedbe bo vrnil obe tabeli v celoti le, če je izpolnjen pogoj za pridružitev zapisom. Za razliko od levega/desnega združevanja je možno, da se NULL pojavijo v dveh poljih. NOTRANJI SPOJ NOTRANJI SPOJ se od polnega razlikuje po tem, da prikazuje le tiste zapise, ki bi jih bilo mogoče povezati glede na dani pogoj. Na primer:
Ta poizvedba bo vrnila samo vrstice, v katerih imata banka in nasprotna stranka isto ime. ZdruženjaKonstrukt UNION in UNION ALL združuje dva rezultata v enega. tiste. rezultat izvedbe dveh se bo "združil" v eno, skupno. To pomeni, da sistem deluje popolnoma enako kot običajni, le za začasno mizo. Kako uporabljati INDEX BY Vendar je treba upoštevati eno točko. Izgradnja indeksa na začasni tabeli zahteva tudi čas. Zato je priporočljiva uporaba konstrukcije ” ” le, če je zagotovo znano, da bo v začasni tabeli več kot 1-2 zapisa. V nasprotnem primeru je učinek lahko nasproten – zmogljivost indeksiranih polj ne kompenzira časa gradnje indeksa.
združevanje v skupineJezik poizvedb 1C vam omogoča uporabo posebnih agregatnih funkcij pri združevanju rezultatov poizvedbe. Združevanje se lahko uporablja tudi brez agregatnih funkcij za "odstranjevanje" dvojnikov. Obstajajo naslednje funkcije: Vsota, Količina, Število različnih, Največ, Najmanj, Povprečje. Primer #1:
Poizvedba prejme vse vrstice z blagom in jih povzame po količini in zneskih v kontekstu artikla. Primer #2
Ta primer bo prikazal seznam BIC-ov v imeniku "Banke" in pokazal, koliko dvojnikov obstaja za vsakega od njih. RezultatiVsote so način pridobivanja podatkov iz sistema s hierarhično strukturo. Agregatne funkcije se lahko uporabljajo za polja povzetka, kot za združevanje. Eden najbolj priljubljenih načinov uporabe seštevkov v praksi je paketni odpis blaga.
Poizvedba bo povzročila naslednjo hierarhično : Splošni rezultati Če želite dobiti vsote za vse "skupne zneske", uporabite operator "TOTAL".
Kot rezultat izvedbe poizvedbe dobimo naslednji rezultat: V kateri je 1 raven združevanja združena vsa zahtevana polja. naročanjeOperater ORDER BY se uporablja za razvrščanje rezultata poizvedbe. Razvrščanje primitivnih tipov (niz, število, logično) poteka po običajnih pravilih. Za polja referenčnih tipov se razvrščanje izvede na notranji predstavitvi sklicevanja (enolični identifikator) in ne na kodi ali na predstavitvi reference.
Poizvedba bo prikazala seznam imen referenčne knjige nomenklature, razvrščenih po abecedi. Samodejno urejanje Rezultat nerazvrščene poizvedbe je naključno predstavljen niz vrstic. Razvijalci platforme 1C ne zagotavljajo izhoda vrstic v istem zaporedju pri izvajanju istih poizvedb. Če morate zapise tabele prikazati v stalnem vrstnem redu, morate uporabiti konstrukcijo "Samodejno razvrščanje".
Virtualne mizeNavidezne tabele v 1C so edinstvena lastnost poizvedovalnega jezika 1C, ki je ni v drugih podobnih sintaksah. Navidezna tabela je hiter način za pridobivanje informacij o profilu iz registrov. Vsaka vrsta registra ima svoj nabor virtualnih tabel, ki se lahko razlikujejo glede na nastavitve registra.
Za razvijalca rešitve se podatki vzamejo iz ene (navidezne) tabele, dejansko pa platforma 1C vzame iz številnih tabel in jih pretvori v želeno obliko.
Možnosti virtualne tabele Zelo pomemben vidik dela z navideznimi tabelami je uporaba parametrov. Možnosti virtualne mize so specializirane možnosti za izbiro in prilagajanje. Za takšne tabele se šteje, da je izbira v členu WHERE napačna. Poleg tega, da poizvedba postane neoptimalna, je možno prejeti napačne podatke. Primer uporabe takšnih parametrov: Register akumulacije.GoodsInWarehouses.RemainsAndOturnovers(&začetno obdobje, &končno obdobje, mesec, premiki IN meje obdobja, nomenklatura = &potrebna nomenklatura) Algoritem za virtualne tabele Na primer, najpogosteje uporabljena navidezna tabela tipa "Ostanki" hrani podatke iz dveh fizičnih tabel - stanja in gibanja. Pri uporabi navidezne tabele sistem izvede naslednje manipulacije:
Uporaba graditelja poizvedbGraditelj poizvedb- orodje, vgrajeno v sistem 1C Enterprise, ki močno olajša razvoj poizvedb v bazi podatkov. Graditelj poizvedb ima dokaj preprost in intuitiven vmesnik. Kljub temu razmislimo o uporabi konstruktorja poizvedb podrobneje. Opis konstruktorja poizvedbe 1CPodrobneje razmislimo o vsakem zavihku oblikovalca. Izjema je zavihek Builder, to je tema za ločeno razpravo. Kartica Tabele in poljaTa zavihek določa vir podatkov in polja za prikaz v poročilu. Pravzaprav so tukaj opisane konstrukcije SELECT.FROM. Vir je lahko tabela fizične baze podatkov, tabela navideznega registra, začasne tabele, ugnezdene poizvedbe itd. V kontekstnem meniju navideznih tabel lahko nastavite parametre navidezne tabele: Zavihek PovezaveZavihek se uporablja za opis povezav več tabel, ustvarja konstrukcije z besedo JOIN. Zavihek združevanjaNa tem zavihku vam sistem omogoča združevanje in povzetek zahtevanih polj rezultatov tabele. Opisana je uporaba SKUPINE PO, VSOTA, MINIMALNO, POVPREČNO, NAJVEČJE, ŠTEVILO, ŠTEVILO RAZLIČNIH struktur. Zavihek PogojiOdgovoren je za vse, kar je v besedilu zahteve za konstrukcijo WHERE, torej za vse pogoje, ki so naloženi prejetim podatkom. Zavihek Naprednozavihek Poleg tega polna vseh vrst parametrov, ki so zelo pomembni. Poglejmo si vsako od lastnosti. združevanje v skupine Izbira zapisov:
združevanje v skupine Vrsta zahteve določa, kakšna bo vrsta poizvedbe: pridobivanje podatkov, ustvarjanje začasne tabele ali uničenje začasne tabele. Spodaj je zastava Zakleni prejete podatke za kasnejšo spremembo. Omogoča vam omogočanje možnosti nastavitve zaklepanja podatkov, ki zagotavlja varnost podatkov od trenutka, ko so prebrani do spremenjenih (relevantno samo za način Samodejno zaklepanje, konstrukcija ZA SPREMEMBO). Zavihek Pridružitve/VzdevkiNa tem zavihku oblikovalca poizvedb lahko nastavite možnost združevanja različnih tabel in vzdevkov (konstrukcija AS). Tabele so navedene na levi strani. Če nastavite zastavice pred tabelo, bo uporabljena konstrukcija JOIN, v nasprotnem primeru - JOIN ALL (razlike med obema metodama). V desnem delu so navedena korespondenca polj v različnih tabelah, če korespondenca ni določena, bo poizvedba vrnila NULL. Zavihek naročilaTukaj določite vrstni red vrednosti (ORDER BY) - padajoče (DESC) ali naraščajoče (ASC). Obstaja tudi zanimiva zastava - Samodejno urejanje(v poizvedbi - AVTONAROČILO). Sistem 1C privzeto prikazuje podatke v "kaotičnem" vrstnem redu. Če nastavite to zastavico, bo sistem razvrstil podatke po notranjih podatkih. Kartica Paket poizvedbNa zavihku Oblikovanje poizvedbe lahko ustvarite nove in jih uporabite tudi kot navigacijo. V besedilu zahteve so paketi ločeni s simbolom “;” (podpičje). Gumb za poizvedbo v ustvarjalniku poizvedbV spodnjem levem kotu ustvarjalnika poizvedb je gumb Zahtevaj, s katerim si lahko kadar koli ogledate besedilo poizvedbe: V tem oknu lahko prilagodite zahtevo in jo izvedete. Uporaba konzole za poizvedbeKonzola za poizvedbe je preprost in priročen način za odpravljanje napak v zapletenih poizvedbah in hitro pridobivanje informacij. V tem članku bom poskušal opisati, kako uporabljati konzolo za poizvedbe in zagotoviti povezavo za prenos poizvedovalne konzole. Oglejmo si to orodje podrobneje. Prenesite konzolo zahtev 1CNajprej, če želite začeti s poizvedovalno konzolo, jo morate od nekod prenesti. Obdelave so običajno razdeljene na dve vrsti - upravljane oblike in običajne (ali jih včasih imenujemo 8.1 in 8.2 / 8.3). Ta dva pogleda sem poskušal združiti v eni obdelavi – v želenem načinu delovanja se odpre želena oblika (v upravljanem načinu konzola deluje samo v debelem načinu). Opis poizvedbene konzole 1CZačnimo obravnavo poizvedbene konzole z opisom glavne plošče za obdelavo: V glavi poizvedbene konzole lahko vidite čas izvedbe zadnje poizvedbe z natančnostjo milisekund, kar vam omogoča primerjavo različnih modelov glede na zmogljivost. Prva skupina gumbov v ukazni vrstici je odgovorna za shranjevanje trenutnih poizvedb v zunanjo datoteko. To je zelo priročno, vedno se lahko vrnete k pisanju zapletene poizvedbe. Ali pa na primer shranite seznam tipičnih primerov določenih konstrukcij. Na levi strani lahko v polju "Zahteva" ustvarite nove zahteve in jih shranite v drevesno strukturo. Druga skupina gumbov je odgovorna le za upravljanje seznama zahtev. Z njim lahko ustvarite, kopirate, izbrišete, premaknete zahtevo.
Parametri zahteve: Omogoča vam, da nastavite trenutne parametre za zahtevo. V oknu s parametri poizvedbe je zanimivo naslednje:
Nastavite parameter kot seznam vrednosti zelo preprosto, dovolj je, da kliknete gumb za brisanje vrednosti (križ) pri izbiri vrednosti parametra, sistem vas bo pozval, da izberete vrsto podatkov, kjer morate izbrati »Seznam vrednosti«: Na zgornji plošči je tudi gumb za klic nastavitev konzole za poizvedbe: Tukaj lahko določite možnosti samodejnega shranjevanja poizvedbe in možnosti izvedbe poizvedbe. Besedilo zahteve se vnese v polje zahteve za ukazno mizo. To lahko storite s preprostim testnim nizom poizvedb ali s klicem posebnega orodja – konstruktorja poizvedbe. Konstruktor poizvedbe 1C 8 se pokliče iz kontekstnega menija (desni gumb miške), ko kliknete na vnosno polje: Tudi v tem meniju so uporabne funkcije, kot je čiščenje ali dodajanje znakov za prelom vrstice (»|«) zahtevi ali pridobivanje kode zahteve v tako priročni obliki:
Spodnje polje poizvedbene konzole prikazuje polje rezultata poizvedbe, za katerega je bila ta obdelava ustvarjena:
Optimizacija poizvedbEna najpomembnejših točk pri izboljšanju produktivnosti 1C podjetja 8.3 je optimizacijazahteve. Ta točka je tudi zelo pomembna za pridobitev certifikata. Spodaj bomo govorili o tipičnih vzrokih za neoptimalno delovanje poizvedbe in optimizacijskih metodah. Izbire v navidezni tabeli z uporabo konstrukcije WHERETreba je uporabiti filtre za podrobnosti virtualne tabele samo prek parametrov BT. V nobenem primeru ne bi smeli uporabljati konstrukcije WHERE za izbiro v virtualni tabeli, to je z vidika optimizacije velika napaka. V primeru izbire z uporabo KJE bo sistem dejansko prejel VSE zapise in šele nato izbral potrebne. PRAV:
NI V REDU:
Pridobivanje vrednosti polja sestavljenega tipa skozi pikoPri pridobivanju podatkov sestavljenega tipa v pikčasti poizvedbi sistem levo združi točno toliko tabel, kolikor je možnih tipov v polju sestavljenega tipa. Na primer, zelo nezaželeno je, da se optimizacija nanaša na polje registrskega vpisa - registrar. Registrar ima sestavljeno vrsto podatkov, med katerimi so vse možne vrste dokumentov, ki lahko zapisujejo podatke v register. NI V REDU:
Se pravi, da se takšna poizvedba ne bo nanašala na eno tabelo, temveč na 22 tabel baze podatkov (ta register ima 21 vrst registrarjev). PRAV:
Ali druga možnost - dodajanje takšnih informacij rekviziti, na primer v našem primeru - dodajanje datuma. PRAV:
Podpoizvedbe v stanju pridružitveZa optimizacijo je nesprejemljivo uporabljati podpoizvedbe v pogojih združevanja, to znatno upočasni poizvedbo. V takih primerih je priporočljivo uporabiti VT. Za povezavo morate uporabiti samo metapodatke in predmete BT, ki ste jih predhodno indeksirali s povezovalnimi polji. NI V REDU:
PRAV:
Povezovanje zapisov z navideznimi tabelamiObstajajo situacije, ko pri povezovanju virtualne mize z drugimi sistem ne deluje optimalno. V tem primeru lahko za optimizacijo delovanja poizvedbe poskusite navidezno tabelo postaviti v začasno tabelo, pri čemer ne pozabite indeksirati združenih polj v poizvedbi začasne tabele. To je posledica dejstva, da so VT pogosto vsebovani v več fizičnih tabelah DBMS, zato je za njihovo izbiro sestavljena podpoizvedba, težava pa je podobna prejšnjemu odstavku. Uporaba filtrov na neindeksiranih poljihEna najpogostejših napak pri sestavljanju poizvedb je uporaba pogojev na neindeksiranih poljih, kar je v nasprotju pravila optimizacije poizvedb. DBMS ne more izvesti poizvedbe optimalno, če je poizvedba filtrirana z neindeksiranimi polji. Če se vzame začasna tabela, je potrebno tudi indeksirati povezovalna polja. Za vsak pogoj mora obstajati ustrezen indeks. Ustrezen indeks je tisti, ki izpolnjuje naslednje zahteve:
Če DBMS ne pobere pravilnih indeksov, bo skenirana celotna tabela - to bo zelo negativno vplivalo na zmogljivost in lahko privede do dolgega zaklepanja celotnega niza zapisov. Uporaba logičnega ALI v pogojihTo je vse, ta članek je pokrival osnovne vidike optimizacije poizvedb, ki bi jih moral poznati vsak strokovnjak za 1C. Zelo uporaben brezplačen videotečaj o razvoju in optimizaciji poizvedb, močno priporočam začetniki in še več!
Zahteve zasnovan za pridobivanje in obdelavo informacij iz baze podatkov, da se uporabniku zagotovi v zahtevani obliki. Obdelava tukaj pomeni združevanje polj, razvrščanje vrstic, izračun vsote itd. Nemogoče je spreminjati podatke s poizvedbami v 1C! Zahteva se izvede v skladu z danimi navodili − besedilo zahteve. Besedilo zahteve je sestavljeno v skladu s sintakso in pravili jezik poizvedbe. Jezik poizvedb 1C:Enterprise 8 temelji na standardu SQL, vendar ima nekaj razlik in razširitev. Shema dela z zahtevoSplošna shema za delo z zahtevo je sestavljena iz več zaporednih stopenj:
1. Predmet Povpraševanje ima lastnino Besedilo Besedilo, ki mu želite dodeliti besedilo poizvedbe.
2. Nastavitev vrednosti parametrov se izvede z metodo setParameter(< Имя>, < Значение>) . Parametri v besedilu zahteve so označeni s simbolom " & ” in se običajno uporabljajo v izbirnih pogojih (razdelek WHERE) in v parametrih virtualne tabele.
3. Po dodelitvi besedila in nastavitvi parametrov je treba izvesti poizvedbo in pridobiti rezultat izvedbe. Izvajanje se izvaja z metodo Execute(), ki vrne predmet Zahtevajte rezultat. Iz rezultata poizvedbe lahko:
4. Pridobivanje rezultatov poizvedbe lahko zaobidete z zanko:
Celoten primer poizvedbe bi lahko izgledal takole:
Zahtevajte telesno sestavoBesedilo zahteve je sestavljeno iz več razdelkov:
Potreben je samo prvi del. Začasne tabele in paketne poizvedbeJezik poizvedb 1C podpira uporabo začasne mize- tabele, pridobljene kot rezultat poizvedbe in shranjene začasno. Pogosto lahko naletite na situacijo, ko morate kot vir poizvedbe uporabiti ne tabele baze podatkov, temveč rezultat druge poizvedbe. Ta problem je mogoče rešiti z ugnezdenimi poizvedbami oz začasne mize. Uporaba začasnih tabel vam omogoča, da poenostavite besedilo kompleksne poizvedbe tako, da ga razdelite na njegove sestavne dele, v nekaterih primerih pa tudi pospešite izvajanje poizvedbe in zmanjšate število zaklepanja. Objekt se uporablja za delo z začasnimi tabelami. Upravitelj začasnih tabel. Začasna tabela je ustvarjena s ključno besedo PUT, ki ji sledi ime začasne tabele.
Če želite začasno tabelo VTCurrency uporabljati v drugih poizvedbah, morate tem poizvedbam dodeliti skupnega začasnega upravitelja tabel, Upravitelja VT. paketna zahteva je zahteva, ki vsebuje več zahtev, ločenih z znakom ";". Ko se izvede paketna poizvedba, se vse poizvedbe znotraj nje izvajajo zaporedno, rezultati vseh začasnih tabel pa so na voljo za vse naslednje poizvedbe. Izrecno dodelitev začasnega upravitelja tabel paketnim poizvedbam ni potrebna. Če začasni upravljalnik tabel ni dodeljen, bodo vse začasne tabele izbrisane takoj po izvedbi poizvedbe. Za paketne poizvedbe je na voljo metoda ExecuteBatch(), ki izvede vse poizvedbe in vrne niz rezultatov. Začasne tabele v paketni poizvedbi bodo predstavljene s tabelo z eno vrstico in enim stolpcem Count, ki shranjuje število zapisov. Za odpravljanje napak paketnih zahtev lahko uporabite metodo ExecutePacketWith IntermediateData() : vrne dejansko vsebino začasnih tabel, ne pa števila zapisov.
Virtualne mizeVirtualne mize- to so tabele, ki niso shranjene v bazi podatkov, ampak jih tvori platforma. V svojem bistvu so to ugnezdene poizvedbe v eni ali več fizičnih tabelah, ki jih izvaja platforma. Virtualne tabele prejemajo informacije samo iz registrov in so v glavnem namenjene reševanju visoko specializiranih nalog. Obstajajo naslednje navidezne tabele (možni parametri so navedeni v oklepajih):
Pri delu z navideznimi tabelami uporabite filtre v parametrih navideznih tabel in ne v členu WHERE. To močno vpliva na čas izvedbe poizvedbe. Zahtevaj konstruktorjaZa pospešitev vnosa besedil poizvedb ima platforma posebna orodja: Zahtevaj konstruktorja in Konstruktor poizvedb z obdelavo rezultatov. Če želite poklicati konstruktorje, kliknite z desno tipko miške in izberite zahtevani element: Konstruktorje lahko pokličete tudi iz glavnega menija Besedilo. Z uporabo konstruktorja poizvedbe lahko programer interaktivno sestavi besedilo poizvedbe. V ta namen se z miško izberejo potrebne tabele in polja, vzpostavijo povezave, skupine, seštevka itd. Ta pristop prihrani čas in odpravi morebitne napake. Kot rezultat svojega dela konstruktor poizvedbe ustvari besedilo poizvedbe. Konstruktor poizvedbe z obdelavo rezultatov poleg generiranja besedila poizvedbe ustvari že pripravljen fragment kode za sprejemanje in obdelavo podatkov. Objekt QuerySchemaPlatforma vam omogoča programsko ustvarjanje in urejanje besedila poizvedbe z uporabo predmeta Shema zahteve. Objekt ima eno lastnost PacketRequests Objekt, ki shranjuje lastnosti vseh poizvedb, ki se trenutno urejajo. Objekt RequestSchema podpira naslednje metode:
FindParameters() – Vrne parametre poizvedbe. Oglejmo si primer dela s predmetom QueryScheme. Za programsko generiranje besedila zahteve
Koda v vgrajenem jeziku bi lahko izgledala takole:
Programiranje 1C ni sestavljeno samo iz pisanja programa. 1C je ingot uporabniških dejanj in podatkov, s katerimi dela. Podatki so shranjeni v bazi podatkov. Poizvedbe 1C so način pridobivanja podatkov iz baze podatkov, da bi jih uporabniku prikazali v obliki ali jih obdelali. Temeljni del poročila je zahteva 1C. V primeru poročila SKD je to glavnina poročila. Sedi. Vdihni. Pomiri se. Zdaj vam bom povedal novico. Za programiranje v 1C ni dovolj vedeti programskega jezika 1C. Prav tako morate poznati jezik poizvedb 1C. Jezik poizvedb 1C je popolnoma ločen jezik, ki vam omogoča, da določite, katere podatke moramo dobiti iz baze podatkov. Prav tako je dvojezičen - torej lahko pišete v ruščini ali angleščini. Izjemno je podoben poizvedovalnemu jeziku SQL in tisti, ki to poznajo, se lahko sprostijo. Kako se uporabljajo zahteve 1C Ko uporabnik zažene 1C v načinu Enterprise, v delujočem odjemalcu ni niti enega grama podatkov. Zato, ko morate odpreti imenik, 1C zahteva podatke iz baze podatkov, torej zahteva 1C. Zahteve 1C so:
Ustvarjanje in izvajanje zahtev 1C Zahteva 1C je dejansko besedilo zahteve v jeziku poizvedbe 1C. Ker 1C spodbuja koncept vizualnega programiranja, kjer je mogoče veliko ali skoraj vse narediti brez pisanja kode s peresi, obstaja poseben objekt konstruktor poizvedb, ki omogoča risanje besedila poizvedbe brez poznavanja jezika poizvedbe. Vendar se čudeži ne dogajajo - za to morate vedeti, kako delati s konstruktorjem. Ko je besedilo zahteve 1C pripravljeno, ga je treba izvesti. Za to je predmet v kodi 1C Zahteva (). Tukaj je primer: Zahteva = Nova zahteva(); Kot lahko vidite v primeru, po izvedbi zahteve 1C pridemo do rezultata in ga moramo obdelati. Rezultat je ena ali več vrstic tabele (v posebni obliki). Rezultat je mogoče naložiti v običajno tabelo: Ali pa samo po vrsti. Delo z zahtevami 1C Osnovna načela zahtev 1C Osnovna načela izdelave zahteve 1C - Primer izdelave takšne poizvedbe 1C: IZBERI Seznam tabel 1C Imena tabel si lahko ogledate v oknu konfiguratorja. Namesto »Imenik« je treba napisati le »Imenik«, na primer »Imenik. Nomenklatura« ali »Dokument. Prodaja blaga in storitev« ali »Register akumulacije. Prodaja«. Za registre obstajajo dodatne tabele (virtualne), ki vam omogočajo, da dobite skupne številke. Informacijski register.RegisterName.SliceLast(&Date) - 1C zahteva iz registra informacij, če je periodična, na določen datum Register akumulacije.RegisterName.Remains(&Date) - 1C zahteva iz bilančnega registra za določen datum Akumulacijski register.RegisterName.Turnovers(&StartDate, &EndDate) – poizvedba 1C iz registra prometa za obdobje od začetnega datuma do končnega datuma. Dodatna načela Ko zahtevamo seznam nekaterih podatkov, delujejo osnovna načela. Lahko pa zahtevamo tudi številke in zahteva nam jih lahko izračuna (na primer dodaj). IZBERI Ta poizvedba 1C nam bo vrnila skupno število dokumentov. Vendar ima vsak dokument polje Organizacija. Recimo, da želimo izračunati število dokumentov za vsako organizacijo s poizvedbo 1C. IZBERI Ta poizvedba 1C nam bo vrnila število dokumentov za vsako organizacijo (pravijo tudi "v kontekstu organizacij"). Dodatno izračunajmo količino teh dokumentov z zahtevo 1C: IZBERI Ta zahteva 1C nam bo vrnila tudi količino dokumentov. IZBERI Jezik poizvedb 1C je obsežen in zapleten in v eni lekciji ne bomo upoštevali vseh njegovih značilnosti - preberite naše naslednje lekcije. Na kratko o dodatnih funkcijah jezika poizvedb 1C:
Konstruktor poizvedb 1C Da ne bi pisali besedila poizvedbe z rokami, obstaja konstruktor poizvedb 1C. Z desno miškino tipko kliknite kjer koli v modulu in izberite Query Builder 1C. V oblikovalniku poizvedb 1C na levi izberite želeno tabelo in jo povlecite v desno. Iz tabele izberite zahtevana polja v oblikovalniku poizvedb 1C in povlecite v desno. Če ne želite le izbrati polja, temveč zanj uporabiti neko funkcijo seštevanja, potem ko ga povlečete, dvokliknite polje z miško. Na zavihku Združevanje boste morali izbrati (povleci in spustiti) zahtevana polja za združevanje. Na zavihku Pogoji v 1C Query Builder lahko na enak način izberete želene filtre (s povlečenjem polj, po katerih boste izbrali). Bodite prepričani, da izberete pravi pogoj. Na zavihku Naročilo je označeno razvrščanje. Na zavihku Totals - seštevanje seštevkov. Z ustvarjalnikom poizvedb 1C lahko preučite katero koli obstoječo poizvedbo. Če želite to narediti, z desno tipko miške kliknite besedilo obstoječe poizvedbe in izberite tudi oblikovalec poizvedbe 1C - in poizvedba se bo odprla v oblikovalniku poizvedb 1C. Odločil sem se prispevati in opisati tiste značilnosti jezika, ki niso bile obravnavane v zgornjih člankih. Članek je namenjen razvijalcem začetnikom. 1. Konstrukcija "OD". Za pridobivanje podatkov iz baze podatkov ni treba uporabiti konstrukcije "FROM". IZBERITE Imenik.Banke.* Izbere vsa polja iz imenika Banke. In je podoben poizvedbi: IZBERITE Banke.* IZ Imenika Banke AS Banke 2. Podatki o naročilu po referenčnem polju Ko moramo podatke poizvedbe razvrstiti po primitivnih vrstah: "String", "Number", "Date" itd., potem se vse reši s konstrukcijo "ORDER BY", če morate podatke razvrstiti po referenci polje? Referenčno polje je povezava, edinstven identifikator, t.j. Grobo rečeno, določen poljuben nabor znakov in običajno razvrščanje morda ne bosta prinesla pričakovanega rezultata. Za naročanje referenčnih polj se uporablja konstrukcija "AUTOORDER". Če želite to narediti, morate podatke najprej razvrstiti neposredno po referenčnem tipu z uporabo konstrukcije "ORDER BY" in nato konstrukcije "AUTOORDER". V tem primeru bo za dokumente razvrščanje potekalo v vrstnem redu "Datum-> Številka", za imenike - po "Glavni pogled". Če razvrščanje ne temelji na referenčnih poljih, uporaba konstrukcije "AUTOORDER" ni priporočljiva. V nekaterih primerih lahko konstrukcija "AUTOORDER" upočasni postopek vzorčenja. Podobno lahko prepišete brez samodejnega urejanja dokumentov: 3. Pridobitev besedilne predstavitve referenčnega tipa. "PREZENTACIJSKA" konstrukcija. Ko morate za prikaz prikazati polje referenčne vrste, na primer polje »Banka«, ki je povezava do elementa imenika »Banke«, morate razumeti, da je pri prikazu tega polja podpoizvedba na » Imenik Banke" se bo samodejno izvedel, da bi dobili iskanje imenika. To bo upočasnilo izpis podatkov. Da bi se temu izognili, je potrebno v zahtevi uporabiti konstrukcijo "PRESENTATION", da takoj dobimo predstavitev objekta in ga že prikažemo za ogled. V sistemu za sestavo podatkov se ta mehanizem uporablja privzeto, vendar bi morali pri ustvarjanju postavitev v celicah določiti predstavitev referenčnega polja in na primer v prepis vstaviti samo povezavo. 4. Pogoj za vzorčenje podatkov po predlogi. Na primer, morate dobiti Mobilni telefoni vrsta zaposlenih (8-123-456-78-912). Če želite to narediti, morate v zahtevo postaviti naslednji pogoj: IZ Imenika IZBERITE Employee.Name, Employee.Phone AS Phone.Employees AS Employees, KJE je telefon LIKE "_-___-___-__-__" Znak "_" je storitev in nadomešča kateri koli znak. 5. Sočasna uporaba seštevkov in skupin.
IZBERITE Storitve.Organizacija AS Organizacija, Storitve.Nomenklatura AS Nomenklatura, SUM(Storitve.Znesek dokumenta) AS Vsota dokumenta IZ Dokumenta.Storitve AS Storitve SKUPINA BY Storitve.Organizacija, Storitve.Nomenklatura REZULTATI PO SPLOŠNIH, Organizaciji, storitvah.Nomenklatura V tem primeru bo zahteva vrnila skoraj enako kot ta zahteva: IZBERITE Storitve Organizacija AS Organizacija, storitve Nomenklatura AS Nomenklatura, storitve Znesek dokumenta AS Znesek dokumenta IZ dokumenta. Samo prva poizvedba bo strnila zapise z isto nomenklaturo. 6. Dereferenciranje polj. Referenčna polja skozi piko se imenuje operacija dereferenciranja referenčnega polja. Na primer Plačilo.Organizacija.Upravna enota. V tem primeru se v referenčnem polju »Organizacija« dokumenta »Plačilo« nanaša na drugo tabelo »Organizacije«, v kateri bo prejeta vrednost atributa »Upravna enota«. Pomembno je razumeti, da pri dostopu do polj prek pike platforma implicitno ustvari podpoizvedbo in združi te tabele. povpraševanje: Lahko se predstavi kot: IZBERITE Plačilo.Povezava, Plačilo.Organizacija, Plačilo.Organizacija, Organizacije. Administrativna enota IZ dokumenta.Plačilo AS Plačilo LEVO PRIDRUŽI Imenik.Organizacije AS Organizacije Programska oprema Plačilo.Organizacija = Organizacije.Povezava Pri dereferenciranju referenčnih polj sestavljenega tipa poskuša okvir ustvariti implicitne povezave z vsemi tabelami, ki so del tipa polja. V tem primeru poizvedba ne bo optimalna.Če je jasno znano, kakšen tip polja je, je treba taka polja omejiti po vrsti s konstrukcijo EXPRESS(). Na primer, obstaja akumulacijski register "Nedodeljena plačila", kjer lahko več dokumentov deluje kot registrator. V tem primeru je napačno pridobiti vrednosti podrobnosti registrarja na ta način: IZBERITE nedodeljena plačila.Register.Datum, ..... IZ registra akumulacije.Nedodeljena plačila KOT nedodeljena plačila morate omejiti vrsto sestavljenega zapisovalnika polj: IZBERI EXPRESS(Nedodeljena plačila. Registrar AS dokument. Plačilo). Datum, ..... IZ registra akumulacije. Nedodeljena plačila KOT Nedodeljena plačila 7. Gradnja "KJE" Pri levem združevanju dveh tabel, ko na desno tabelo naložite pogoj "WHERE", bomo dobili rezultat, podoben rezultatu z notranjim združevanjem tabel. Primer. Iz Imenika strank je treba izbrati vse stranke in za tiste stranke, ki imajo plačilni dokument z vrednostjo atributa "Organizacija" = &Organizacija, dokument "Plačilo" prikazati, za tiste, ki ga nimajo, ga ne prikazati. Rezultat poizvedbe bo vrnil zapise samo za tiste stranke, ki so imele plačilo po organizaciji v parametru, druge stranke pa bo filtriral. Zato morate vsa plačila za "tako in to" organizacijo najprej dobiti v začasni tabeli, nato pa jo z levim spojem povezati z imenikom "Odjemalci". IZBERITE Plačilo.Sklic KOT Plačilo, Plačilo.Delničar KAO Stranka DAJ plačila IZ Dokumenta.Plačilo KOT Plačilo KJE Plačilo.Oddelek = &Oddelek; ///////////////////////////////////////////////// / ///////////////////////////// SELECT Clients.Reference AS Client, ISNULL(topayments.Payment, "") AS Payment FROM Imenik .Clients AS Clients LEFT JOIN To stanje lahko zaobidete na drug način. je treba naložiti pogoj "KJE" neposredno v razmerju obeh tabel. Primer: IZBERITE Clients.Reference, Payment.Reference FROM Directory.US_Subscribers AS ST_Subscribers LEFT JOIN Document.Payment AS plačilna programska oprema (Clients.Reference = Payment.Client IN Payment.Client.Name LIKE "Sugar Bag") SKUPINA PO Strankah.Referenca, Plačilo. Povezava 8. Združitve z ugnezdenimi in navideznimi tabelami Podpoizvedbe pogosto je treba izbrati podatke glede na določen pogoj. Če jih nato uporabite v povezavi z drugimi tabelami, lahko to kritično upočasni izvajanje poizvedbe. Na primer, za nekatere stranke moramo pridobiti znesek stanja za trenutni datum. SELECT UnallocatedPayRemainders.Customer, UnallocatedPaymentsRemains.AmountRemains FROM (IZBERITE Clients.Reference AS Reference FROM Directory.Clients AS Clients WHERE Clients.Reference To(&Clients)) AS NestedQuery Pri izvajanju takšne poizvedbe bo optimizer DBMS verjetno naredil napake pri izbiri načrta, kar bo vodilo do neoptimalne izvedbe poizvedbe. Pri združevanju dveh tabel optimizator DBMS izbere algoritem za združevanje tabel na podlagi števila zapisov v obeh tabelah. V primeru ugnezdene poizvedbe je izredno težko določiti število zapisov, ki jih bo vrnila ugnezdena poizvedba. Zato namesto ugnezdenih poizvedb vedno uporabite začasne tabele. Torej prepišimo poizvedbo. IZBERI odjemalce.POVEZAVO KOT POVEZAVO DAJ odjemalce IZ Imenika.Odjemalci KOT odjemalce KJE V tem primeru bo optimizator lahko določil, koliko zapisov uporablja začasna tabela tClients, in bo lahko izbral optimalni algoritem za pridružitev tabele. Virtualne mize , vam omogočajo, da dobite skoraj že pripravljene podatke za večino aplikacijskih opravil (rezina prvega, rezina zadnjega, ostanki, prometi, ostanki in prometi) Ključna beseda tukaj je virtualna. Te tabele niso fizične, ampak jih sistem sestavi sproti, t.j. pri prejemanju podatkov iz virtualnih tabel sistem zbira podatke iz končnih tabel registrov, sestavlja, združuje in izda uporabniku. tiste. ko se združite z navidezno tabelo, se pridružite s podpoizvedbo. V tem primeru lahko optimizator DBMS izbere tudi neoptimalen načrt pridružitve. Če se poizvedba ne oblikuje dovolj hitro in poizvedba uporablja združitve v navideznih tabelah, je priporočljivo, da dostop do navideznih tabel prenesete v začasno tabelo in nato naredite združitev med dvema začasnima tabelama. Prepišimo prejšnjo poizvedbo. IZBERI Clients.Link AS Link PUT Clients FROM Directory.Clients AS Clients INDEKS PO POVEZAVI KJE 9.Preverjanje rezultata poizvedbe. Rezultat izvedbe poizvedbe je lahko prazen; če želite preveriti prazne vrednosti, uporabite konstrukcijo: RequestRes = Zahtevaj.Izvrši(); Če reQuery.Empty() potem Return; EndIf; Metoda Prazno() je treba uporabiti pred metodami Izberi() oz Razloži (), saj je za pridobitev zbirke potreben čas. Za nikogar ni odkritje, da je zelo nezaželeno uporabljati poizvedbe v ciklu. To lahko kritično vpliva na čas delovanja določene funkcije. Zelo zaželeno je, da v zahtevi prejmete vse podatke in jih šele nato obdelate v zanki. Toda včasih obstajajo primeri, ko postane nemogoče odstraniti zahtevo iz zanke. V tem primeru lahko za optimizacijo premaknete ustvarjanje poizvedbe izven zanke in zamenjate potrebne parametre v zanki ter izvedete poizvedbo. Zahteva = Nova zahteva; Query.Text = "IZBERI | Odjemalci.Povezava, | Odjemalci.Datum rojstva |OD | Imenik.Odjemalci KOT odjemalci |KJE | Odjemalci.Povezava = &Odjemalec"; Za vsako vrstico FROM TableClients Loop Query.SetParameter("Client", Client); Rezultat poizvedbe = Poizvedba.Izvedi().Izberi(); EndCycle; To bo rešilo sistem pred razčlenjevanjem zahteve v zanki. 11. Konstrukcija "HAVING". Konstrukcija, ki je pri poizvedbah precej redka. Omogoča vam, da določite pogoje za vrednosti agregatnih funkcij (SUM, MINIMUM, AVERAGE itd.). Na primer, izbrati morate samo tiste stranke, katerih znesek plačila je bil septembra več kot 13.000 rubljev. Če uporabite pogoj "KJE", potem boste morali najprej ustvariti začasno tabelo ali ugnezdeno poizvedbo, tam združiti zapise glede na znesek plačila in nato uporabiti pogoj. Temu se bo izognila konstrukcija "HAVING". IZBERITE Plačilo.Stranka, ZNESEK(Znesek.Plačilo) KOT ZNESEK IZ Dokumenta.Plačilo KOT Plačilo KJE MESEC(Datum.Plačilo) = 9 SKUPINA PO plačilu.Stranka IMA ZNESEK(Znesek plačila) > 13000 V konstruktorju morate samo odpreti zavihek »Pogoji«, dodati nov pogoj in potrditi potrditveno polje »Po meri«. Potem samo napiši Znesek (Znesek plačila) > 13000
Tukaj ne bom opisoval načel trivrednostne logike v bazi podatkov, na to temo je veliko člankov. Le pogled na to, kako NIČ lahko vpliva na rezultat poizvedbe. Vrednost NULL v resnici ni vrednost in dejstvo, da vrednost ni definirana, ni znano. Zato vsaka operacija na NULL vrne NULL, pa naj bo to seštevanje, odštevanje, deljenje ali primerjava. Vrednosti NULL ni mogoče primerjati z vrednostjo NULL, ker ne vemo, kaj bi primerjali. tiste. obe primerjavi: NULL = NULL, NULL<>NULL ni True ali False, to ni znano. Poglejmo si primer. Za tiste stranke, ki nimajo plačil, moramo prikazati polje »Atribut« z vrednostjo »Brez plačil«. In zagotovo vemo, da imamo takšne stranke. In da bi odražal bistvo tega, kar sem napisal zgoraj, naredimo to takole. IZBERITE "Brez plačil" AS Atribut, NULL AS Document PUT za plačila; ///////////////////////////////////////////////// / /////////////////////////////// SELECT Clients.Link AS Client, Payment.Link AS Payment PUT tClientPayment IZ Imenika.Clients AS Clients LEFT JOIN Document.Payment AS Payment Software Clients.Link = Payment.Shareholder; ///////////////////////////////////////////////// / /////////////////////////////// IZBERI tClientPayment.Customer IZ tClientPay AS tClientPay NOTRANJA PRIDRUŽITEV topayments AS topayments BY tClientPayment.Payment = dokument Bodite pozorni na drugo začasno tabelo tCustomerPayment. Z levim spojem izberem vse stranke in vsa plačila za te stranke. Za tiste stranke, ki nimajo plačil, bo polje "Plačilo" NULL. Po logiki sem v prvi začasni tabeli "topayments" označil 2 polji, eno od njih je NULL, drugo je vrstica "Nima plačil". V tretji tabeli z notranjim spojem združujem tabeli »tClientPayment« in »tPayment« s polji »Plačilo« in »Dokument«. Vemo, da je v prvi tabeli polje »Dokument« NULL, v drugi tabeli pa so NULL tudi tisti, ki nimajo plačil v polju »Plačilo«. Kaj nam bo vrnilo takšno povezanost? In nič ne bo vrnil. Ker primerjava NULL = NULL ne oceni kot True. Da bi nam poizvedba vrnila pričakovani rezultat, jo prepišemo: IZBERITE "Brez plačil" AS Sign, VALUE(Document. Payment. EmptyReference) AS Document PUT to Payments; ///////////////////////////////////////////////// / ////////////////////////////// SELECT Clients.Reference AS Client, ISNULL(Payment.Reference, VALUE(Document.Payment) .EmptyReference )) KAKO POSTAVITI tClientPayment IZ Imenika.Clients AS Clients LEFT JOIN Document.Payment AS Payment ON Clients.Reference = Payment.Shareholder; ///////////////////////////////////////////////// / /////////////////////////////// IZBERI tClientPayment.Customer IZ tClientPay AS tClientPay NOTRANJA PRIDRUŽITEV topayments AS topayments BY tClientPayment.Payment = dokument Zdaj smo v drugi začasni tabeli navedli, da če je polje "Plačilo" NULL, potem je to polje prazen sklic na plačilni dokument. V prvi tabeli smo NULL tudi zamenjali z ničelno referenco. Zdaj so v povezavo vključena polja, ki niso NULL, in poizvedba bo vrnila pričakovani rezultat. Vse zahteve v članku odražajo situacije, ki bi jih rad upošteval in nič več. O niti ne morejo biti nori ali ne optimalni, glavna stvar je, da odražajo bistvo primera. 13. Nedokumentirana oblikovna značilnost "IZBIRA KDAJ ... POTEM .... KONEC". V primeru, ko je treba v zahtevi opisati konstrukcijo "Pogoji", potem uporabimo standardno sintakso: SELECT SELECT WHEN Users.Name = "Vasya Pupkin" POTEM "Naš najljubši zaposleni" DRUGO "Tega ne vemo" END AS Polje 1 IZ Imenika.Users AS Uporabniki Kaj pa, če moramo na primer v poizvedbi dobiti ime meseca? Pisanje velikega konstrukta v poizvedbi je grdo in zamudno, zato nam lahko ta oblika pisanja zgoraj pomaga: IZBERITE MESEC (ZDA_Izračun porabe_Razpored prometa. Obdobje izračuna) KDAJ 1 POTEM "januar" KAD 2 POTEM "februar" KAD 3 POTEM "marec" KO 4 POTEM "april" KO 5 POTEM "maj" KO "NE" KO "NE" KO J julij" KDAJ 8 POTEM "avgust" KO 9 POTEM "september" KDAJ 10 PA "oktober" KO 11 POTEM "november" KO 12 POTEM "december" KONČA SE KOT MESEC Zdaj zasnova ni videti tako okorna in je zlahka zaznana. 14. Izvedba paketne poizvedbe.
SELECT Users.Link AS Ime, Uporabniki.Datum rojstva, Uporabniki.Vloga ENTER Users IZ Imenika.Users AS Uporabniki; ///////////////////////////////////////////////// / /////////////////////////////// IZBERI tuUsers.Ime, tuUsers.Datum rojstva FROM tuUsers AS tuUsers GROUP BY tuUsers. Ime, tuUsers Datum rojstva; ///////////////////////////////////////////////// / /////////////////////////////// IZBERI wUsers.Name, wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Name, wUsers Datum rojstva tPackage = Zahtevaj.IzvršiPaket(); TP_Rojstni datum = tPaket.Odstrani(); Kot lahko vidimo, se lahko poizvedba izvede v paketu in dela z rezultatom kot matriko. V nekaterih primerih zelo priročno. 15. Pogoji v zahtevi za paket Imamo na primer paketno zahtevo, kjer najprej dobimo polja: »Ime, datum rojstva, koda« iz imenika »Uporabniki« in želimo iz imenika »Posamezniki« pridobiti zapise s pogojem na teh poljih. SELECT Users.Individual.Name AS Ime, Users.Individual.Date of Birth AS Datum rojstva, Users.Individual.Code AS Koda VSTAVITE v Uporabniki IZ Imenika.Users AS Uporabniki; ///////////////////////////////////////////////// / ////////////////////////////// IZBERI Posameznike.Povezava AS Posameznik IZ Imenika.Posamezniki AS Posamezniki Uporabite lahko naslednje pogoje: KJE Posamezniki.Koda B (IZBIRAJTE torUs.Kodo IZ TuUserov) IN Posamezniki.Ime ob (IZBERITE torUsers.Kodo FROM TuUusers) IN Posamezniki.Datum rojstva ob (IZBERITE torUsers.BirthDate IZ TuUsers) In možno je takole: WHERE (Posamezniki.Koda, Posamezniki.Ime, Posamezniki.Datum rojstva) AT (IZBERITE torUsers.Code, ToeUsers.Ime, torUsers.Datum rojstva FROM torUsers) In ne pozabite upoštevati pravil. 16. Pokličite graditelja poizvedb za "Stanje" v paketni poizvedbi Ko morate naložiti pogoj, kot v zgornjem primeru, lahko pozabite, kako se to ali ono polje kliče v navidezni tabeli. Za konstrukcijo "B" je treba postaviti oklepaje in med oklepaji pustiti prazen prostor (presledek), to mesto označiti in poklicati konstruktor poizvedbe. Konstruktor bo imel dostop do vseh tabel paketnih poizvedb. Sprejem deluje tako na virtualnih tabelah registrov kot na zavihku "Pogoji". V slednjem primeru je potrebno označiti potrditveno polje "A (arbitrary condition)" in vstopiti v način urejanja "F4". Poizvedbe so pogosto izmišljene na poti in služijo le za prikaz "trikov", o katerih sem razmišljal. Želel sem razmisliti o uporabi indeksov v poizvedbah, vendar je to boleče obsežna tema. Dal ga bom v ločen članek ali pa ga kasneje dodal sem. upd1. Odstavki 11,12 Rabljene knjige: V tem članku želimo razpravljati z vsemi vami funkcije jezika poizvedb 1s, tako dobro, kot jezikovne konstrukcije poizvedbe. Kakšna je razlika med funkcijo in strukturo? Funkcija se kliče z oklepaji in možnimi parametri v njih, konstrukcija pa je zapisana brez oklepajev. Nedvomno vse konstrukcije in funkcije poizvedovalnega jezika 1s narediti proces pridobivanja podatkov fleksibilen in večnamenski. Te funkcije in konstrukcije veljajo za polja poizvedbe, nekatere pa tudi za pogoje. Jezikovne funkcije poizvedbe 1sOd jasnega opisa funkcije jezika poizvedb 1s je veliko manj pogost kot opis struktur, smo se odločili, da začnemo iskati funkcije. Zdaj analizirajmo vsakega posebej in opišemo njegov namen, sintakso in primer uporabe, tako: 1. Funkcija DATUM ČAS- ta funkcija ustvari konstantno polje z vrsto "Datum". sintaksa: DATUM ČAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>) Primer uporabe: 2. Funkcija DATUM RAZLIKA- vrne razliko dveh datumov v eni od dimenzij (leto, mesec, dan, ura, minuta, sekunda). Meritev se posreduje kot parameter. sintaksa: DATUM RAZLIKA(<Дата1>, <Дата2>, <Тип>) Primer uporabe: Query.Text = "IZBERI | DATUM RAZLIKA(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Število dni"; 3. Funkcija VALUE- nastavi konstantno polje z vnaprej določenim vnosom iz baze podatkov, lahko dobite tudi ničelno referenco katere koli vrste. Sintaksa: VALUE(<Имя>) Primer uporabe: Query.Text = "IZBERI //preddefiniran element | VALUE(Valuta.Dolar.Catalog.Dollar) AS Dollar, //prazna referenca | VALUE(Document.IncomingGoodsServices.EmptyReference) AS Prejem, //prenos vrednosti | VALUE(Transfer.LegalIndividual . Posameznik) AS Posameznik, //preddefiniran račun | VREDNOST(Kontni načrt.Samonosilni.Materiali) AS Račun_10" ; 4. SELECT funkcija- imamo analogno konstrukcijo IF, ki se uporablja v kodi, le ta se uporablja v poizvedbah 1C. sintaksa: IZBIRA KDAJ<Выражение>POTEM<Выражение>SIRUČE<Выражение>KONEC Primer uporabe: Request.Text = //če je znesek večji od 7500, potem mora biti popust v višini 300 rubljev, //torej, če se pogoj sproži, potem funkcija //vrne znesek - 300 //v nasprotnem primeru zahteva bo preprosto vrnil Znesek "IZBERI | IZBERI | KDAJ PMIncome.Znesek > 7500 | THEN PTReceipt.Amount - 300 | ELSE PTReceipt.Amount | END AS Znesek Discounted |FROM | Dokument.ReceiptofGoodsServices.Goods ASTRe"; 5. EXPRESS funkcija- omogoča izražanje konstantnega polja z določeno vrsto. sintaksa: EXPRESS(Ime polja AS TypeName) Primer uporabe: Query.Text = "IZBERI RAZLIČNO | Prodaja.Registrator.Številka, | IZBERI | KDAJ Sales.Registrar REF Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar REF Document.Im. THEN EXPRESS(Sales.Registrar AS Document.Release) | END | ... | END AS Številka | OD | Register akumulacije.Nakupi AS Nakupi"; Še vedno obstaja varianta uporabe funkcije EXPRESS na poljih mešanih vrst, kjer se takšne srečujejo? Najpreprostejši primer je "registrator" za kateri koli register. Zakaj bi torej morali vrsto kvalificirati v registrarju? Poglejmo situacijo, ko iz registratorja izberemo polje "Številka", iz katere tabele bo izbrana številka? Pravilen odgovor vseh! Zato, da bi naša poizvedba delovala hitro, moramo s funkcijo EXPRESS podati eksplicitni tip Primer uporabe: Query.Text = "IZBERITE | EXPRESS(Nomenklatura.Komentar AS String(300)) AS Komentar, | EXPRESS(Nomenclature.Sum AS Številka(15,2)) AS Sum |FROM | Lookup.Nomenclature AS Nomenklatura"; 6. Funkcija ISNULL(alternativno črkovanje IS NULL) - če je polje tipa NULL, ga nadomesti drugi parameter funkcije. sintaksa: ISNULL(<Поле>, <ПодставляемоеЗначение>) Primer uporabe: Upoštevajte tudi, da je zaželeno, da tip NULL VEDNO zamenjate z neko vrednostjo, ker primerjava z NULL se vedno oceni na FALSE, tudi če primerjate NULL z NULL. Najpogosteje se vrednosti NULL tvorijo kot rezultat združevanja tabel (vse vrste povezav razen notranjih). Request.Text = //Izberi celotno postavko in njena stanja //če v nekem elementu ni ravnotežja, bo tam polje //NULL, ki bo nadomeščeno z vrednostjo 0 "SELECT | No.Ref, | ISNULL (GoodsInWarehouseRemains.InStockRemain, 0) KAKO Ostanek | IZ | Imenik. Nomenklatura AS Nom | LEFT JOIN Akumulacijski register. 7. Funkcija PREDSTAVITVE- vam omogoča, da dobite predstavitev polja zahteve. sintaksa: REPREZENTACIJA(<НаименованиеПоля>) Primer uporabe: Query.Text = "IZBERI | REPRESENTATION(Free RemainsRemains.Nomenclature) AS Nomenklatura, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Acumulation Register.FreeinsRemasRema Freemas" Konstrukcije v poizvedovalnem jeziku 1sZgoraj smo razpravljali z vami funkcije jezika poizvedb 1s, zdaj je čas za razmislek konstrukcije v poizvedovalnem jeziku 1s, niso nič manj pomembni in uporabni, začnimo. 1. Gradbena LINK- je operater za preverjanje logičnega referenčnega tipa. Najpogosteje se pojavlja pri testiranju polja sestavljenega tipa za določeno vrsto. sintaksa: POVEZAVA<Имя таблицы> Primer uporabe: Query.Text = //če je vrsta vrednosti registrarja prejem dokumenta, //potem bo zahteva vrnila "Incoming Goods", sicer "Prodaja blaga" "SELECT | SELECT | WHEN Remains.Registrar LINK Document.Incoming GoodsServices | POTEM ""Prihod" | DRUGO "Odhodek" | KONEC KAO Vrsta gibanja | IZ | Register kopičenja. Ostanki blaga v skladiščih AS Ostanki "; 2. Gradnja MED- ta operater preveri, ali je vrednost znotraj navedenega obsega. sintaksa: MED<Выражение>IN<Выражение> Primer uporabe: Query.Text = //dobi vso nomenklaturo, katere koda je v razponu od 1 do 100 "IZBERI | Nomenklatura.Referenca |FROM | Katalog.Nomenklatura AS Nomenklatura |KJE | Nomenklatura.Koda MED 1 IN 100" ; 3. Konstrukcija B in B HIERARHIJE- preverite, ali je vrednost na posredovanem seznamu (matrike, tabele vrednosti itd. lahko posredujete kot seznam). Operater IN HIERARCHY vam omogoča ogled hierarhije (primer uporabe PlanAccounts). sintaksa: IN(<СписокЗначений>), V HIERARHIJI(<СписокЗначений>) Primer uporabe: Query.Text = // izberite vse podračune računa "IZBERI | Samonosno. Poveži KAO račun | IZ | Načrt računov. Samonosni AS Samonosno | KJE | Samonosno. Sklic V HIERARHIJI VREDNOSTI( Razpored računov. Samonosna. Blago)"; 4. Gradnja LIKE- ta funkcija nam omogoča primerjavo niza z vzorcem niza. sintaksa: LIKE"<ТекстШаблона>" Možnosti predloge vrstice: % - zaporedje, ki vsebuje poljubno število poljubnih znakov. En poljuben znak. [...] - kateri koli posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih. Naštevanje lahko vsebuje obsege, kot je a-z, kar pomeni kateri koli znak znotraj obsega, vključno s konci obsega. [^...] - kateri koli posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih, razen tistih, ki so navedeni za znakom negacije. Primer uporabe: Query.Text = //poišči celotno nomenklaturo, ki vsebuje korenski TABUR in se začne // bodisi z malo ali veliko črko t "IZBERI | Nomenklatura.Referenca |FROM | Imenik.Nomenklatura AS Nomenklatura |KJE | Ime blaga LIKE "" [Тт ]abur%""" ; 5. Dizajn DOVOLJEN- ta stavek vam omogoča, da izberete samo tiste zapise iz baze podatkov, za katere ima klicatelj pravico branja. Te pravice so konfigurirane na ravni zapisa (RLS). sintaksa: DOVOLJENO je zapisano za ključno besedo SELECT Primer uporabe: Query.Text = "IZBERITE DOVOLJENO | Nasprotne stranke.Sklic |FROM | Imenik.Nasprotne stranke KOT nasprotne stranke"; 6. Gradnja RAZLIČNO- omogoča izbiro zapisov, v katerih ni ponavljajočih se zapisov. sintaksa: Za ključno besedo SELECT je zapisano RAZLIČNO Primer uporabe: Request.Text = //izbere zapise, do katerih ima bralec pravice "IZBERI RAZLIČNO | Nasprotne stranke.Ime |OD | Imenik.Nasprotne stranke KOT nasprotne stranke" ; Konstrukt DIFFERENT lahko uporabite tudi z operaterjem ALLOWED in drugimi operaterji. Primer uporabe: Query.Text = //izbere različne zapise, do katerih ima bralec pravice "IZBERI DOVOLJENO RAZLIČNO | Contractors.Name |FROM | Directory.Contractors AS Contractors"; 7. Gradnja PRVO- iz rezultata poizvedbe izbere število zapisov, določenih v parametru. Sintaksa: FIRST<число> Primer uporabe: Query.Text = //izberite prve 4 GTD številke iz imenika "IZBERITE PRVE 4 | GTD številke. Referenca | IZ | Katalog.GTE številke KOT GTD številke"; 8. Dizajn ZA SPREMEMBO- omogoča zaklepanje tabele, deluje samo v transakcijah (ustrezno samo za avtomatska zaklepanja). sintaksa: ZA SPREMEMBO<НаименованиеТаблицы> Primer uporabe: Query.Text = "IZBERI | FreeRemainsRemains.Nomenklatura, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Register akumulacije.FreeRemains.Remains AS FreeRemainsRemains |ZA SPREMEMBO | 9. Struktura ORDER BY- razvrsti podatke po določenem polju. Če je polje povezava, potem pri nastavitvi zastave SAMODEJNO NAROČILO bodo razvrščene glede na predstavitev povezave, če je zastavica izklopljena, so povezave razvrščene glede na prednost naslova povezave v pomnilniku. sintaksa: RAZVRSTI PO<НаименованиеПоля>SAMODEJNO NAROČILO Primer uporabe: Query.Text = "IZBERI | FreeRemainsRemains.Nomenklatura AS nomenklatura, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining |FROM | 10. Oblikovanje GROUP BY- uporablja se za združevanje nizov poizvedbe po določenih poljih. Številska polja je treba uporabiti s katero koli agregatno funkcijo. sintaksa: GROUP BY<НаименованиеПоля1>, .... , <НаименованиеПоляN> Primer uporabe: Query.Text = "IZBERI | ItemsInWarehouse.Nomenklatura AS Nomenklatura, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |FROM | 11. Design HAVING- omogoča uporabo agregatne funkcije za pogoj izbire podatkov, podobno kot konstrukcija WHERE. sintaksa: IMATI<агрегатная функция с условием> Primer uporabe: Query.Text = //izbere združene zapise, kjer je polje InStock večje od 3 "IZBERI | GoodsInStock.Nomenklatura AS Nomenklatura, | GoodsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS Na zalogi |OD | Akumulacija Register.Goodhouses ASInStockWInStock | |SKUPINA BY | Blago v skladiščih.Nomenklatura, | Blago v skladiščih.Skladišče | |IMETI | ZNESEK (Blago v skladiščih.Na zalogi) > 3" ; 12. INDEX BY konstrukcijo- uporablja se za indeksiranje polja poizvedbe. Indeksirana poizvedba se dokonča dlje, vendar pospeši iskanje v indeksiranih poljih. Uporablja se lahko samo v virtualnih tabelah. sintaksa: INDEX BY<Поле1, ... , ПолеN> Primer uporabe: Query.Text = "IZBERI | Ime Tz.OS, | Tz.Številka mape, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz | FROM | &Tz HOW Tz | | INDEX BY | Ime Tz.OS , | Tz .CodeOS"; 13. Gradnja KJE- vam omogoča, da nastavite pogoj za vsa polja izbora. V rezultat bodo vključeni samo zapisi, ki izpolnjujejo pogoj. sintaksa: KJE<Условие1 ОператорЛогСоединения УсловиеN> Primer uporabe: Query.Text = //izberi vse zapise s CompensationRemainder<>0 in //AmountFor CalculationCompBalance > 100 "IZBERITE | Kompenzacija RPO stanja.Izvajalec, | Kompenzacija RPO stanja.Otrok, | Kompenzacija RPO stanja. Kompenzacija Preostanek, | Kompenzacija RPO stanja.<>0 | In bilance RPO kompenzacije. Znesek za preostanek CalcComp > 100" ; 14. Oblikovanje REZULTATI ... SPLOŠNO- uporablja se za izračun seštevkov, načrt določa polja, na podlagi katerih se bodo vsote izračunale, in agregatne funkcije uporabljene za skupna polja. Ko uporabljate vsote za vsako polje, ki sledi konstrukciji TOTALS, so podatki združeni. Na voljo je izbirni konstrukt GENERAL, njegova uporaba omogoča tudi dodatno združevanje. Primer rezultata poizvedbe si lahko ogledate spodaj. sintaksa: REZULTATI<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>VKLOPLJENO<ОБЩИЕ> <Поле1, ... , ПолеN> Primer uporabe: Query.Text = "IZBERITE | Poravnave.Pogodba z nasprotno stranko.Vrsta pogodbe AS Vrsta pogodbe, | Poravnava.Pogodba z državno stranko AS Pogodba, | Poravnave.Nasprotna stranka, | Poravnave.Znesek medsebojnih poravnav Saldo AS Preostalo |GENERAL | Programska oprema | | Vrsta pogodbe"; Skupine, ki so nastale med izvedbo zahteve, so na sliki obkrožene, zgornja se nanaša na razdelek SPLOŠNO, druga pa na polje ContractContractorContractType. |
priljubljeno:
Romantični junak v J-jevi pesmi |
Novo
- Vodenje za sopotnike
- Zakaj sanjati o jami "Na obrazu" grozno, prijazno v notranjosti
- Skyrim - Edino zdravilo (prehod)
- Vodenje College of Winterhold The Elder Scrolls V: Skyrim
- College of Winterhold uničenja
- Starost za poroko
- Zgodovina valentinovega
- Kaj se bo zgodilo z vašim telesom, če boste vsak večer pili vino?
- Torbarski volk ali tasmanski volk
- Kateri jezik govorijo Šorci?