doma - Otroške pričeske
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:

IZBERI
Banke.Ime,
Banke.Pravilni račun
IZ
Imenik Banke AS Banke

Ta zahteva nam bo omogočila vpogled v podatke o imenu in korespondenčnem računu vseh bank, ki obstajajo v bazi podatkov.

Jezik poizvedb je najpreprostejši in najučinkovitejši način za pridobivanje informacij. Kot lahko vidite iz zgornjega primera, se morate v jeziku poizvedb pritožiti z imeni metapodatkov (je seznam sistemskih objektov, ki sestavljajo konfiguracijo, to so imeniki, dokumenti, registri itd.).

Opis jezikovnih konstrukcij poizvedbe

Struktura zahteve

Za pridobitev podatkov je dovolj, da uporabite konstrukciji SELECT (izberi) in FROM (od). Najenostavnejša poizvedba izgleda takole:

IZBERI * IZ imenikov Nomenklatura

Kjer "*" pomeni izbor vseh polj tabele, Reference.Nomenklatura pa ime tabele v bazi podatkov.

Razmislite o bolj zapletenem in splošnem primeru:

IZBERI
<ИмяПоля1>KAKO<ПредставлениеПоля1>,
vsota (<ИмяПоля2>) KAKO<ПредставлениеПоля2>
IZ
<ИмяТаблицы1>KAKO<ПредставлениеТаблицы1>
<ТипСоединения>SKUPINA<ИмяТаблицы2>KAKO<ПредставлениеТаблицы2>
VKLOPLJENO<УсловиеСоединениеТаблиц>

KJE
<УсловиеОтбораДанных>

GROUP BY
<ИмяПоля1>

RAZVRSTI PO
<ИмяПоля1>

REZULTATI
<ИмяПоля2>
VKLOPLJENO
<ИмяПоля1>

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črti

Razmislite 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.

IZBERI PRVI 100
Banke.Ime,
Banke.Koda AS BIC
IZ
Imenik Banke AS Banke
RAZVRSTI PO
Banke Ime

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.

IZBIRA DOVOLJENA
RepositoryAdditionalInformation.Link
IZ
Imenik. Shranjevanje dodatnih informacij

RAZLIČNO

Uporaba "DIFFERENT" bo omogočila izključitev podvojenih vrstic iz vnosa rezultata poizvedbe 1C. Podvajanje pomeni, da se vsa polja zahteve ujemajo.

IZBERI PRVI 100
Banke.Ime,
Banke.Koda AS BIC
IZ
Imenik Banke AS Banke

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:

IZBERITE Referenčna številka, PRAZNA TABELA (Št., Tov, Količina) KOT SESTAVA
IZ dokumenta.Račun
ZDRUŽITE VSE
IZBERITE Št. povezave, sestavo. (Številka vrstice, izdelek, količina)
IZ Dokument.Račun Dokument.Račun.Sestava.*

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:

IZBERI
Referenca nomenklature,
IsNULL(Preostala količina izdelka.Preostala količina,0) AS Preostala količina
IZ


Lahko se uporablja tudi na druge načine. Na primer, če za vsako vrstico ni znano, v kateri tabeli obstaja vrednost:

ISNULL(RačunInvoiceReceived.Date, InvoiceIssued.Date)

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.

IZBERI
Pogled(povezava), //niz, na primer "Napredno poročilo št. 123 z dne 10.10.2015
Representation(DeletionMark) AS DeleteMarkText, //string, "Da" ali "Ne"
ReferenceRepresentation(DeletionMark) AS DeletionMarkBoolean //boolean, True or False
IZ
Document.AdvanceReport

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:

EXPRESS(Tabela stroškov.Subconto1 AS imenik.Stroškovne postavke).Vrsta dejavnostiZa davčno obračunavanje stroškov

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
neomejena dolžina in polja nezdružljivih tipov
«, je treba taka polja izraziti na naslednji način:

EXPRESS(Komentar kot niz (150))

DATUMSKA RAZLIKA

Brezplačne video lekcije 267 1C:

Primer uporabe IS NULL v poizvedbi 1C:

IZBIRAJTE IZ
Ref
LEVO PRIDRUŽI
Programska oprema
KJE NI Ostanki blaga Količina ostankov JE NIČ

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:

KJE

WHERE Counterparties.KindofContactInformation = Vrednost (Enumeration.Types ofContactInformation.Phone)

KJE Stanja na računih.Računovodski račun = Vrednost (Kontni načrt.Samonosno. Dobiček-Izguba)

Povezave

Povezave 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:

IZ

POPOLNA POVEZAVA
Imenik Banke AS Banke

VKLOPLJENO

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:

IZ
Imenik Nasprotne stranke AS Stranke

NOTRANJI SPOJ
Imenik Banke AS Banke

VKLOPLJENO
Stranke.Ime = Banke.Ime

Ta poizvedba bo vrnila samo vrstice, v katerih imata banka in nasprotna stranka isto ime.

Združenja

Konstrukt 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.

IZBERI
CurrenciesCurrencySliceLast.Currency AS Valuta,
CurrenciesCurrencySliceLast.Course
PUT Valutni tečaji
IZ
DataRegister.Currency Rates.SliceLast(&Period,) AS Currency RatesSliceLast
INDEX BY
valuta
;
IZBERI
CeneNomenklatura.Nomenklatura,
CeneNomenklatura.Cena,
Cene Nomenklature. Valuta,
Tečaji Valuta. Tečaj
IZ
RegisterInformation.PricesNomenclature.SliceLast(&Period,
Artikel B (&Nomenklatura) IN Vrsta cene = &Tip cene) AS Cene artiklov
LEFT JOIN Valutni tečaji KOT tečaji valut
Nomenklatura cen programske opreme. Valuta = Obrestne mere Valuta. Valuta

združevanje v skupine

Jezik 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:

IZBERI
Realizacija blaga, storitev, blaga. Nomenklatura,
SUM(Prodaja blaga, storitev, blaga. Količina) AS količina,
SUM(Prodaja blaga, storitev, blaga. Znesek) AS Vsota
IZ

GROUP BY
Realizacija blaga, storitev, blaga Nomenklatura

Poizvedba prejme vse vrstice z blagom in jih povzame po količini in zneskih v kontekstu artikla.

Primer #2

IZBERI
Banks.Code,
ŠTEVILKA (RAZLIČNE banke. Referenca) AS Število dvojnikov
IZ
Imenik Banke AS Banke
GROUP BY
Banke.Code

Ta primer bo prikazal seznam BIC-ov v imeniku "Banke" in pokazal, koliko dvojnikov obstaja za vsakega od njih.

Rezultati

Vsote 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.

IZBERI




IZ
Dokument.Prodaja blagaStoritve.Blago AS Realizacija blagaStoritveBlago
RAZVRSTI PO

REZULTATI
SUM(število),
SUM(Znesek)
VKLOPLJENO
Nomenklatura

Poizvedba bo povzročila naslednjo hierarhično :

Splošni rezultati

Če želite dobiti vsote za vse "skupne zneske", uporabite operator "TOTAL".

IZBERI
Realizacija blaga, storitev, blaga Nomenklatura AS Nomenklatura,
Realizacija Blago Storitve Blago Referenčni dokument AS,
Prodaja blaga, storitev, blaga Količina AS količina,
Realizacija blaga storitev Blago Znesek AS Znesek
IZ
Dokument.Prodaja blagaStoritve.Blago AS Realizacija blagaStoritveBlago
RAZVRSTI PO
Realizacija blaga in storitev Blago Referenca Datum
REZULTATI
SUM(število),
SUM(Znesek)
VKLOPLJENO
SPLOŠNO,
Nomenklatura

Kot rezultat izvedbe poizvedbe dobimo naslednji rezultat:

V kateri je 1 raven združevanja združena vsa zahtevana polja.

naročanje

Operater 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.

IZBERI

IZ
Imenik Nomenklatura AS Nomenklatura
RAZVRSTI PO
ime

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".

IZBERI
Nomenklatura Ime AS Ime
IZ
Imenik Nomenklatura AS Nomenklatura
SAMODEJNO NAROČILO

Virtualne mize

Navidezne 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.

  • najprej odrežite;
  • rezino slednjega.
  • ostanki;
  • promet;
  • stanja in promet.
  • premiki iz subconto;
  • promet;
  • vrtljajev Dt Kt;
  • ostanki;
  • stanja in promet
  • subconto.
  • osnova;
  • grafični podatki;
  • dejansko obdobje veljavnosti.

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.

IZBERI
Blago v skladiščih ostanki in promet. Nomenklatura,
Blago V Skladiščih OstankiIn Promet. Količina
Blago v skladiščih ostanki in promet. KoličinaPromet,
Blago v skladiščih ostanki in promet. Količina dohodni,
BlagoV Skladiščih OstankiIn prometi.KoličinaPoraba
Blago v skladiščih Ostanki in promet
IZ
Register akumulacije Blago v skladiščih Ostanki in promet KAO Blago v skladiščih Ostanki in prometi

Takšna poizvedba vam omogoča hitro pridobivanje velike količine podatkov.

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:

  1. Izračunano vrednost, najbližjo datumu in dimenzijam, dobimo v tabeli vsot.
  2. Znesek iz tabele gibanja »Dodaj« znesku iz tabele s skupnimi zneski.


Takšna preprosta dejanja lahko znatno izboljšajo delovanje sistema kot celote.

Uporaba graditelja poizvedb

Graditelj 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.

Konstruktor besedila poizvedbe se zažene s kontekstnim menijem (z desnim klikom) na pravem mestu v programski kodi.

Opis konstruktorja poizvedbe 1C

Podrobneje razmislimo o vsakem zavihku oblikovalca. Izjema je zavihek Builder, to je tema za ločeno razpravo.

Kartica Tabele in polja

Ta 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 Povezave

Zavihek se uporablja za opis povezav več tabel, ustvarja konstrukcije z besedo JOIN.

Zavihek združevanja

Na 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 Pogoji

Odgovoren je za vse, kar je v besedilu zahteve za konstrukcijo WHERE, torej za vse pogoje, ki so naloženi prejetim podatkom.

Zavihek Napredno

zavihek Poleg tega polna vseh vrst parametrov, ki so zelo pomembni. Poglejmo si vsako od lastnosti.

združevanje v skupine Izbira zapisov:

  • Prvi N– parameter, ki vrne samo N zapisov v poizvedbi (operater FIRST)
  • Brez ponavljajočih se– zagotavlja edinstvenost prejetih zapisov (DRUGAČEN operater)
  • Dovoljeno– omogoča izbiro samo tistih zapisov, ki vam jih sistem omogoča, da izberete ob upoštevanju (DOVOLJENA konstrukcija)

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/Vzdevki

Na 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čila

Tukaj 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 poizvedb

Na 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 poizvedb

V 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 poizvedbe

Konzola 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 1C

Najprej, č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 1C

Zač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.

  • tecipovpraševanje– enostavna izvedba in doseganje rezultatov
  • Izvedite paket- omogoča ogled vseh vmesnih zahtevkov v nizu zahtevkov
  • Ogled začasnih tabel- omogoča ogled rezultatov, ki jih vrnejo začasne poizvedbe v tabeli

Parametri zahteve:

Omogoča vam, da nastavite trenutne parametre za zahtevo.

V oknu s parametri poizvedbe je zanimivo naslednje:

  • Gumb Pridobite iz zahteve samodejno poišče vse parametre v zahtevi za udobje razvijalca.
  • Zastava Enotni parametri za vse zahteve– ko je nastavljena, njegova obdelava ne počisti parametrov pri premikanju od zahteve do zahteve na splošnem seznamu zahtev.

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:

Zahteva = Nova zahteva;
Poizvedba.Besedilo = "
|IZBERI
| Valute.Povezava
| OD
| Priročnik. Valute kot valute«;
QueryResult = Query.Execute();

Spodnje polje poizvedbene konzole prikazuje polje rezultata poizvedbe, za katerega je bila ta obdelava ustvarjena:



Prav tako lahko poizvedbena konzola poleg seznama prikaže podatke v obliki drevesa - za poizvedbe, ki vsebujejo vsote.

Optimizacija poizvedb

Ena 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 WHERE

Treba 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:

IZBERI

IZ
Register akumulacije. Medsebojne poravnave z vlagatelji organizacij. Stanja(
,
Organizacija = &Organizacija
IN Posameznik = &Posameznik) KAKO Vzajemni obračuni z vlagatelji Organizacijami Stanja

NI V REDU:

IZBERI
Medsebojne poravnave z vlagateljiOrganizacijamiStanja.ZnesekStanje
IZ
Register akumulacije Medsebojne poravnave z vlagatelji organizacij Stanja(,)
KJE
Vzajemni obračuni z DepositorsOrganizationsBalances.Organization = &Organizacija
IN Vzajemni obračuni z DepozitorjiOrganizacijeStanja.Posameznik = &Posameznik

Pridobivanje vrednosti polja sestavljenega tipa skozi piko

Pri 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:

IZBERI
RecordSet.Registrator.Date,
RecordSet.Number
IZ
Register akumulacije.Organizacija blaga KOT niz zapisov

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:

IZBERI
IZBIRA
WHEN GoodsOrg.Registrar LINK Dokument.Prodaja blagaStoritve
THEN EXPRESS(GoodsOrg.Registrar AS dokument.Prodaja blagaStoritve).Datum
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
POTEM EXPRESS (Blago Org. Registrar AS dokument. Prejem blaga/storitev). Datum
KONEC AS Datum,
BlagoOrg.Količina
IZ
RegisterAccumulation.GoodsOrganizations AS GoodsOrg

Ali druga možnost - dodajanje takšnih informacij rekviziti, na primer v našem primeru - dodajanje datuma.

PRAV:

IZBERI
Blagovne Organizacije.Datum,
Blago Organizacije. Količina
IZ
RegisterAccumulation.GoodsOrganizations AS GoodsOrganizations

Podpoizvedbe v stanju pridružitve

Za 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:

IZBERI …

LEVO PRIDRUŽI (
IZBERI IZ Register informacij.Omejitve
KJE …
ZDRUŽI PO…
) NA …

PRAV:

IZBERI …
PUT Omejitve
IZ Registra informacij.Omejitve
KJE …
ZDRUŽI PO…
KAZALO PO…;

IZBERI …
IZ dokumenta. Realizacija blagaStoritve
Omejitve LEFT JOIN
VKLOPLJENO …;

Povezovanje zapisov z navideznimi tabelami

Obstajajo 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 poljih

Ena 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:

  1. Indeks vsebuje vsa polja, navedena v pogoju.
  2. Ta polja so na samem začetku indeksa.
  3. Te izbire gredo v vrsto, to pomeni, da se vrednosti, ki ne sodelujejo v pogoju poizvedbe, ne "zagozdijo" med njimi.

Č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 pogojih

To 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 zahtevo

Splošna shema za delo z zahtevo je sestavljena iz več zaporednih stopenj:

  1. Ustvarjanje predmeta Zahteva in nastavitev besedila zahteve;
  2. Nastavitev parametrov zahteve;
  3. Izvedite zahtevo in dobite rezultat;
  4. Obhod rezultatov poizvedbe in obdelava prejetih podatkov.

1. Predmet Povpraševanje ima lastnino Besedilo Besedilo, ki mu želite dodeliti besedilo poizvedbe.

// Možnost 1
Zahteva = Nova zahteva;
Povpraševanje . Besedilo =
"IZBERI
| Tečaji valut. Obdobje,
| Valute. Valuta,
| Tečaji Valuta. Tečaj
| OD

|KJE
;

// Možnost 2
Zahteva = Nova zahteva("IZBERI
| Tečaji valut. Obdobje,
| Valute. Valuta,
| Tečaji Valuta. Tečaj
| OD
| Register informacij.Menjaji valut AS Tečaji valut
|KJE
| Currencies.Currency = &Valuta");

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.

povpraševanje);

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:

  • pridobite izbor z metodo Select (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • razložite vrednosti v tabelo vrednosti ali drevo vrednosti z metodo Unload (< ТипОбхода>) .

// Pridobite izbor

Vzorec = Rezultat poizvedbe. Izberite();

// Pridobi tabelo vrednosti
RequestResult = Zahteva. Izvedi();
mizo = Rezultat poizvedbe. raztovoriti();

4. Pridobivanje rezultatov poizvedbe lahko zaobidete z zanko:

adijo Pridobi zanko .Next().
Poročilo (Izbor . Tečaj);
EndCycle;

Celoten primer poizvedbe bi lahko izgledal takole:

// Faza 1. Ustvarite zahtevo in nastavite besedilo zahteve
Zahteva = Nova zahteva;
Povpraševanje . Besedilo =
"IZBERI
| Tečaji valut. Obdobje,
| Valute. Valuta,
| Tečaji Valuta. Tečaj
| OD
| Register informacij.Menjaji valut AS Tečaji valut
|KJE
| Currencies.Currency = &Valuta";

// Faza 2. Nastavitev parametrov
Povpraševanje . SetParameter("Valuta", izbrana valuta);

// Faza 3. Izvedite poizvedbo in pridobite izbor
RequestResult = Zahteva. Izvedi();
Vzorec = Rezultat poizvedbe. Izberite();

// Premikanje po izboru
adijo Pridobi zanko .Next().
Poročilo (Izbor . Tečaj);
EndCycle;

Zahtevajte telesno sestavo

Besedilo zahteve je sestavljeno iz več razdelkov:

  1. Zahtevajte opis— seznam izbirnih polj in podatkovnih virov;
  2. Združevanje poizvedb- izraza "JOIN" in "JOIN ALL";
  3. Rezultati naročanja- izraz "ORDER BY ...";
  4. Samodejno urejanje- izraz "AVTONAROČILO";
  5. Opis rezultatov- izraz "REZULTATI ... NA ...".

Potreben je samo prvi del.

Začasne tabele in paketne poizvedbe

Jezik 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.

VTManager = NewTempTableManager;
Zahteva = Nova zahteva;
Povpraševanje . TempTable Manager = Upravitelj VT;

Povpraševanje . Besedilo =
"IZBERI
| Valute.Koda,
| Valute.Ime
|PUT WTCvalute
| OD
| Priročnik. Valute AS Valute»;

RequestResult = Zahteva. teci();

Č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.

// Primer dela s paketno zahtevo
Zahteva = Nova zahteva;
Povpraševanje . Besedilo =
"IZBERI
| Valute.Ime
| OD
| Priročnik Valute AS Valute
|;
|IZBERI
| Nomenklatura. Opis
| OD
| Imenik Nomenklatura AS Nomenklatura»;

PacketResult = Zahteva. IzvediPaket();

TZ valute = PackageResult[ 0 ]. Razloži ();
TZNomenklatura = PackageResult[1]. Razloži ();

// Primer uporabe začasnih tabel v paketni poizvedbi
Zahteva = Nova zahteva;
Povpraševanje . Besedilo =
"IZBERI
| Products.Reference AS Product
|PUT VTTProducts
| OD
| Imenik Nomenklatura AS Blago
|KJE
| Izdelki.Proizvajalec = &Proizvajalec
|;
|IZBERI
| VTTProducts.Product,
| PTU. Količina,
| PTU. Cena,
| PTU.Reference AS DocumentReceipt
| OD
| VTTProducts AS VTTProducts
| LEFT JOIN Document.Incoming GoodsServices.Goods AS PTU
| Programska oprema VTTproducts.Product = PTU.Nomenclature "
;

Povpraševanje . setParameter( "Proizvajalec", Proizvajalec);

RequestResult = Zahteva. Izvedi();
Vzorec = Rezultat poizvedbe. Izberite();

adijo Pridobi zanko .Next().

EndCycle;

Virtualne mize

Virtualne 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):

  • Za informativne registre:
    • SliceFirst(<Период>, <Условие>) - najzgodnejši zapisi za določen datum;
    • SliceRecent(<Период>, <Условие>) - zadnji zapisi za navedeni datum;
  • Za akumulacijske registre:
    • Ostanki(<Период>, <Условие>) - stanja na določen datum;
    • Promet (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Obdobne transakcije;
    • Ostanki IN promet (<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — stanja in promet za obdobje;
  • Za računovodske registre:
    • Ostanki(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) - stanja na določen datum v okviru računa, meritev in podkonto;
    • Promet (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) - prometi za obdobje v okviru obračunov, meritev, kor. računi, podkonto, kor. subconto;
    • Ostanki IN promet (<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) - stanja in prometi v okviru kontov, meritev in podračunov;
    • prometDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) - prometi za obdobje v okviru konta Dt, konta Kt, Subconto Dt, Subconto Kt;
    • MovementsSubconto (<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) - premiki skupaj s podkonto vrednostmi;
  • Za računske registre:
    • osnova (<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) - osnovni podatki obračunskega registra;
    • DataGraphics(<Условие>) — podatki grafa;
    • Dejansko obdobje delovanja (<Условие>) je dejansko obdobje veljavnosti.

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 konstruktorja

Za 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 QuerySchema

Platforma 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:

  • Nastavi besedilo zahteve(< Текст>) — izpolni lastnost RequestBatch na podlagi poslanega besedila zahteve;
  • GetTextRequest() - vrne besedilo zahteve, ustvarjeno na podlagi lastnosti RequestBag;
  • FindParameters() – Vrne parametre poizvedbe.

Oglejmo si primer dela s predmetom QueryScheme. Za programsko generiranje besedila zahteve

RAZVRSTI PO
Valute.Koda

Koda v vgrajenem jeziku bi lahko izgledala takole:

RequestSchema = Nova zahtevana shema;
Paket 1 = Shema poizvedbe. RequestBatch[0];
Operater 1 = Paket1. Operaterji [ 0 ];
// dodaj vir
RegisterTable = Operator1. Viri. Dodaj ( "Priročnik. Valute", "Valute" );
// dodajanje polj
FieldLink = Operater1. Izbirna polja. Dodaj("Valute.Povezava" , 0 );
Koda polja = Operater1. Izbirna polja. Dodaj("Valute.Koda" , 1 );
// določanje vzdevkov polj
Paket 1 . Stolpci [ 0 ]. Alias ​​= "Valuta";
Paket 1 . Stolpci[ 1 ]. Alias ​​= "Koda";
// dodajanje pogoja
Operater 1 . Izbor. Dodaj ( "Ni označeno za brisanje");
// dodaj naročilo
Paket 1 . Naročite. Dodaj (koda polja);
Besedilo poizvedbe = Shema poizvedbe. GetTextRequest();

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:

  • Samodejne zahteve 1C
    samodejno generira sistem. Ustvarili ste obrazec za seznam dokumentov. Dodan stolpec. To pomeni, da ko odprete ta obrazec v načinu Enterprise, bo prišlo do poizvedbe in zahtevani bodo podatki za ta stolpec.
  • Polavtomatske zahteve 1C
    V jeziku 1C obstaja veliko metod (funkcij), ob dostopu pa se izvede poizvedba v bazi podatkov. Na primer. GetObject()
  • Ročne zahteve 1C (napisal jih je programer posebej kot zahtevo)
    Poizvedbo 1C lahko napišete sami v kodi in jo izvedete.

Ustvarjanje in izvajanje zahtev 1C

Zahteva 1C je dejansko besedilo zahteve v jeziku poizvedbe 1C.
Besedilo je mogoče napisati ročno. Se pravi, vzemite in napišite (če poznate ta jezik).

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();
Query.Text = "IZBERI
| Nomenklatura.Povezava
| OD
| Imenik Nomenklatura AS Nomenklatura
|KJE
| Nomenklatura.Storitev";
Izbira = Poizvedba.Izvedi().Izberi();

Poročilo (Izbor. Povezava);
EndCycle;

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:
Izbira = Zahtevaj.Izvrši().Naloži(); //Rezultat - tabela vrednosti

Ali pa samo po vrsti.
Izbira = Poizvedba.Izvedi().Izberi();
Medtem ko Selection.Next() Zanka
// Naredite nekaj z rezultati poizvedbe
EndCycle;

Delo z zahtevami 1C

Osnovna načela zahtev 1C

Osnovna načela izdelave zahteve 1C -
SELECT Seznam polj FROM TableName WHERE Pogoji

Primer izdelave takšne poizvedbe 1C:

IZBERI
//seznam polj za izbiro
povezava,
ime,
Koda
IZ
//ime tabele, iz katere izberemo podatke
//seznam tabel je seznam predmetov v oknu konfiguratorja
Imenik.Nomenklatura
KJE
//določi izbor
ProductType = &Service //izbor po zunanji vrednosti
Ali Service // Atribut "Service" tipa Boolean, izbor po vrednosti True
RAZVRSTI PO
//Razvrščanje
ime

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
//Quantity(FieldName) – šteje količino
//Field AS OtherName - preimenuje polje
Količina (Referenca) AS Količina izvedenih dokumentov
IZ

KJE
Održano

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
// samo polje dokumenta
organizacija,
// preštej število
Količina (Referenca) AS Količina po organizacijah
IZ
Dokument. Prodaja blaga/storitev
KJE
Održano
GROUP BY

Organizacija

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
// samo polje dokumenta
organizacija,
// preštej število

//izračunaj količino

IZ
Dokument. Prodaja blaga/storitev
KJE
Održano
GROUP BY
// je treba uporabiti, če ima seznam polj funkcijo count() in eno ali več polj hkrati - potem morate združiti po teh poljih
Organizacija

Ta zahteva 1C nam bo vrnila tudi količino dokumentov.

IZBERI
// samo polje dokumenta
organizacija,
// preštej število
Količina (Referenca) AS Količina po organizacijah,
//izračunaj količino
Znesek(DocumentAmount) AS Znesek
IZ
Dokument. Prodaja blaga/storitev
KJE
Održano
GROUP BY
// je treba uporabiti, če ima seznam polj funkcijo count() in eno ali več polj hkrati - potem morate združiti po teh poljih
Organizacija
REZULTATI Splošno

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:

  • Združevanje podatkov iz več tabel
  • Podpoizvedbe
  • paketna zahteva
  • Ustvarite svoje virtualne mize
  • Poizvedba iz tabele vrednosti
  • Uporaba vgrajenih funkcij za pridobivanje vrednosti in manipulacijo vrednosti.

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".
Primer: Iz imenika bank moramo izbrati vse podatke o bankah.
povpraševanje:

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.


Vsote se pogosto uporabljajo v povezavi z združevanjem, v tem primeru se lahko agregatne funkcije v seštevkih izpustijo.

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
Odjemalci.Povezava B (&Clients) ; ///////////////////////////////////////////////// / //////////////////////// SELECT tClients.Reference, UnallocatedPayments.SumBalance, FROM tClients AS tClients LEFT JOIN Acumulation Register.UnallocatedPayments.Stanje (, Client IN ( IZBERI tClients.Reference FROM tClients)) AS UnallocatedPaymentsBalances ON tClients.Reference = UnallocatedPaymentsBalances.Clients

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
Odjemalci.Povezava B (&Clients) ; ///////////////////////////////////////////////// / /////////////////////////////// IZBERI UnallocatedPayments.AmountBalance, UnallocatedPayments.Customer AS Stranka POSTAVI stanja IZ registra akumulacije.UnallocatedPayments .Stanja(, Client IN (IZBERITE tClients.Reference FROM tClients)) AS UnallocatedPaymentsStanje; ///////////////////////////////////////////////// / ////////////////////////////// SELECT tClients.Reference, nato Remains.SumRemainder AS SumRemainder FROM tClients AS tClients tClients.Reference = tRemainders .Stranka

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


12. Ničelna vrednost

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.


Da ne bi ustvarili zahtev, lahko ustvarite eno veliko zahtevo, jo razdelite v pakete in že delate z njo.
Na primer, moram pridobiti polja iz imenika »Uporabniki«: »Datum rojstva« in razpoložljive vloge za vsakega uporabnika. da ga razložite v različne dele tabele na obrazcu. Seveda lahko to storite v eni poizvedbi, nato pa morate ponavljati zapise ali strniti ali pa to storite:

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();
TP_Roles = tPackage.Unload();

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.
Na primer, za polje "Datum rojstva" morate naložiti pogoj, v virtualni tabeli pa se to polje imenuje "Datum rojstva dolžnika", in če ste pozabili ime, boste morali zapustiti urejanje stanje brez shranjevanja in si oglejte ime polja. Da bi se temu izognili, lahko uporabite naslednji trik.

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
upd2. Predmeti 13,14,15,16

Rabljene knjige:
Jezik poizvedbe 1C:Enterprise 8 - E.Yu. Hrustalev
Strokovni razvoj v sistemu 1C:Enterprise 8.

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 1s

Od 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 1s

Zgoraj 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.



 


Preberite:



Divji stepski konji: tarpani Tarpan žival

Divji stepski konji: tarpani Tarpan žival

Še pred 150-200 leti so v stepah južne Evrope in celo v gozdno-stepskem območju našli divje konje ali tarpane, kot so oni, v razmeroma velikem številu ...

Mesečni horoskop Najbolj natančen horoskop za avgust

Mesečni horoskop Najbolj natančen horoskop za avgust

Rastoča luna: Napovedovalci nas pogosto razočarajo in delajo napake v napovedih. Kako se naučiti videti in čutiti svojo prihodnost? RAK V...

Načini reševanja konfliktov

Načini reševanja konfliktov

Konflikti so neločljivi v vsaki ekipi. Nekatere razjezijo, druge navdihujejo. Scenariji vedenja, testi, nasveti in triki, kako ...

Kakšni kaktusi rastejo v Ameriki Kakšna je razlika med kaktusi in sukulentami

Kakšni kaktusi rastejo v Ameriki Kakšna je razlika med kaktusi in sukulentami

Kaktusi so odporne rastline, ki dobro prenašajo suho podnebje. Zaradi svoje majhne...

slika vira RSS