Opprette og arbeide med forespørsler (for nybegynnere). Opprette og arbeide med spørringer (for nybegynnere) Spørringspakkefanen

Opprette og arbeide med forespørsler (for nybegynnere). Opprette og arbeide med spørringer (for nybegynnere) Spørringspakkefanen

I denne artikkelen ønsker vi å diskutere alt med deg 1C spørringsspråkfunksjoner, og spørrespråkkonstruksjoner. Hva er forskjellen mellom funksjon og design? Funksjonen kalles med parenteser og mulige parametere i dem, og konstruksjonen skrives uten parentes. Utvilsomt alle strukturer og funksjoner i 1C spørrespråk gjøre datainnsamlingsprosessen fleksibel og multifunksjonell. Disse funksjonene og konstruksjonene gjelder for spørringsfelt, og noen gjelder også for betingelser.

1C Språkfunksjoner

Fordi en klar beskrivelse 1c spørringsspråkfunksjoner er mye mindre vanlig enn beskrivelser av strukturer, bestemte vi oss for å begynne å se på funksjoner. La oss nå se på hver enkelt separat, og beskrive dens formål, syntaks og eksempel på bruk, så:

1. Funksjon DATO TID- denne funksjonen lager et konstant felt med "Dato"-typen.

Syntaks: DATO TID(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Brukseksempel:

2. DATO DIFFERENCE funksjon- returnerer forskjellen mellom to datoer i en av dimensjonene (år, måned, dag, time, minutt, sekund). Målingen sendes som en parameter.

Syntaks: DIFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Brukseksempel:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funksjon VALUE- setter et konstant felt med en forhåndsdefinert post fra databasen du kan også få en tom lenke av hvilken som helst type.

Syntaks: VALUE(<Имя>)

Brukseksempel:

Request.Text = "VELG //forhåndsdefinert element | VALUE(Directory.Currencies.Dollar) AS Dollar, //empty link | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //transfer value | VALUE(Transfer . Legal Individual) AS Individual, //forhåndsdefinert konto VALUE(Kontoplan. Egenregnskap.Materials) AS Account_10" ;

4. VELG funksjon- vi har foran oss en analog av IF-konstruksjonen, som brukes i koden, bare denne brukes i 1C-spørringer.

Syntaks: VALG NÅR<Выражение>DERETTER<Выражение>ELLERS<Выражение>SLUTT

Brukseksempel:

Request.Text = //hvis beløpet er mer enn 7500, så bør det være en rabatt på 300 rubler, //så hvis betingelsen utløses, returnerer funksjonen Sum - 300 //ellers returnerer forespørselen ganske enkelt Sum "VELG | VELG | NÅR TCReceipts.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithDiscount | FROM |

5. EXPRESS-funksjon- lar deg uttrykke et konstant felt med en bestemt type.

Syntaks: EXPRESS(Feltnavn AS Typenavn)

Brukseksempel:

Query.Text = "VELG VARIOUS | Sales.Registrar.Number, | VELG | NÅR Sales.Registrar LINK Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE VELG | NÅR Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) |. END AS Number |.

Er det et annet alternativ for å bruke EXPRESS-funksjonen i felt med blandede typer, hvor forekommer de? Det enkleste eksemplet er "Registrar" for ethvert register. Så hvorfor må vi kanskje kvalifisere typen i registraren? La oss vurdere situasjonen når vi velger "Nummer"-feltet fra registraren, fra hvilken tabell vil nummeret bli valgt? Det riktige svaret av alle! Derfor, for at søket vårt skal fungere raskt, bør vi spesifisere en eksplisitt type ved å bruke EXPRESS-funksjonen

Brukseksempel:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. ISNULL-funksjon(alternativ stavemåte ISNULL) - hvis feltet er av typen NULL, erstattes det med den andre parameteren til funksjonen.

Syntaks: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Brukseksempel:

Vær også oppmerksom på at det er tilrådelig å ALLTID erstatte NULL-typen med en eller annen verdi, fordi sammenligning med typen NULL returnerer alltid FALSE selv om du sammenligner NULL med NULL. Oftest dannes NULL-verdier som et resultat av sammenføyningstabeller (alle typer sammenføyninger unntatt interne).

Query.Text = //Velg hele elementet og dets saldo //hvis det ikke er noen saldo i en vare, vil det være et felt //NULL som vil bli erstattet med verdien 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Remainings |. Directory.Nomenclature AS Nr.

7. REPRESENTASJON funksjon- lar deg få en representasjon av forespørselsfeltet.

Syntaks: OPPTREDEN(<НаименованиеПоля>)

Brukseksempel:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Accumulation Register.FreeRemainingRemaining.Freema

Konstruerer i 1C spørringsspråk

Vi diskuterte med deg ovenfor 1C spørringsspråkfunksjoner, nå er det på tide å vurdere konstruksjoner i 1C-spørringsspråket, de er ikke mindre viktige og nyttige, la oss komme i gang.

1. Bygg LINK- er en logisk operator for å sjekke en referansetype. Oppstår oftest når du sjekker et felt av en kompleks type mot en bestemt type. Syntaks: LINK<Имя таблицы>

Brukseksempel:

Request.Text = //hvis registreringsverditypen er dokumentmottak, //så vil spørringen returnere "Mottak av varer", ellers "Salg av varer" "VELG | VELG | NÅR Rester.registrator LINK Document.Receipt of Goods and Tjenester |. SÅ "Kvittering" |. "Forbruk" |.

2. Design MELLOM- denne operatøren sjekker om verdien er innenfor det angitte området.

Syntaks: MELLOM<Выражение>OG<Выражение>

Brukseksempel:

Request.Text = //hent hele nomenklaturen hvis kode er i området fra 1 til 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code MELLOM 1 OG 100" ;

3. Konstruksjon B og B HIERARKI- sjekk om verdien er i den overførte listen (matriser, verditabeller osv. kan overføres som en liste). Operatoren IN HIERARKIET lar deg se hierarkiet (et eksempel på bruk av kontoplanen).

Syntaks: I(<СписокЗначений>), I HIERARKIET(<СписокЗначений>)

Brukseksempel:

Request.Text = //velg alle underkontoer til kontoen "VELG | Selvforsørgende. Koble AS-konto | FRA | Kontoplan. Selvforsørgende AS Selvforsørgende | HVOR | Selvforsørgende. Kobling I HIERARKIVERDI (Kart over Kontoer.

4. Design LIGNENDE- Denne funksjonen lar oss sammenligne en streng med et strengmønster.

Syntaks: SOM "<ТекстШаблона>"

Alternativer for radmønster:

% - en sekvens som inneholder et hvilket som helst antall vilkårlige tegn.

En vilkårlig karakter.

[...] - ethvert enkelt tegn eller sekvens av tegn oppført innenfor hakeparenteser. Oppregningen kan spesifisere områder, for eksempel a-z, som betyr et vilkårlig tegn inkludert i området, inkludert endene av området.

[^...] - ethvert enkelt tegn eller sekvens av tegn oppført innenfor hakeparenteser, bortsett fra de som er oppført etter negasjonstegnet.

Brukseksempel:

Query.Text = //finn hele nomenklaturen som inneholder roten TABUR og begynner //enten med en liten eller stor bokstav t "SELECT | Nomenclature. Link | FROM | Directory. Nomenclature AS Nomenclature | WHERE | Products. Name LIKE "" [Tt ]abur%""" ;

5. Design TILLATT- denne operatøren lar deg velge bare de postene fra databasen som den som ringer har lesetillatelse til. Disse rettighetene er konfigurert på postnivå (RLS).

Syntaks: ALLOWED skrives etter nøkkelordet SELECT

Brukseksempel:

Request.Text = "VELG TILLATT | Motparter. Link | FRA | Katalog. Motparter AS Motparter";

6. Design DIVERSE- lar deg velge poster der det ikke er noen dupliserte poster.

Syntaks: VARIOUS er skrevet etter nøkkelordet SELECT

Brukseksempel:

Request.Text = //velger poster som leseren har rettigheter til "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Dessuten kan VARIOUS-konstruksjonen brukes med den TILLATTE operatøren og andre operatører.

Brukseksempel:

Request.Text = //velger ulike poster som leseren har rettigheter til "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Design FØRST- velger antall poster spesifisert i parameteren fra søkeresultatet.

Syntaks: FØRST<число>

Brukseksempel:

Request.Text = //velg de første 4 CCD-numrene fra katalogen "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Design FOR ENDRING- lar deg låse et bord, fungerer kun i transaksjoner (relevant kun for automatiske låser).

Syntaks: FOR ENDRING<НаименованиеТаблицы>

Brukseksempel:

Query.Text = "VELG | Frie rester Rester. Nomenklatur, | Gratis Rester Rester. Lager, | Gratis Rester Rester. På lager Resterende | FRA | Register over akkumulasjoner. Gratis Rester. Rester AS Gratis Rester Rester | FOR ENDRING | Register over akkumulasjoner . Gratis rester";

9. Design BESTILL ETTER- organiserer data etter et bestemt felt. Hvis feltet er en lenke, så når du setter flagget AUTO BESTILLING Sortering vil skje etter koblingsrepresentasjon hvis flagget er slått av, sorteres koblinger etter ansienniteten til lenkeadressen i minnet.

Syntaks: SORTER ETTER<НаименованиеПоля>AUTO BESTILLING

Brukseksempel:

Query.Text = "VELG | Frie rester. Nomenklatur AS Nomenklatur, | Gratis gjenværende rester. Warehouse AS lager, | Gratis rester. På lager Gjenværende | FRA | Registrer akkumulasjoner. Gratis rester. Gjenstående AS Gratis gjenværende | | BESTILL ETTER |. Nomenklatur |. AUTO BESTILLINGSLESING";

10. Design GROUP BY- brukes til å gruppere søkestrenger etter spesifikke felt. Numeriske felt må brukes med en hvilken som helst aggregert funksjon.

Syntaks: GRUPPE AV<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Brukseksempel:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |InWarehouses.trehouses;

11. Design HAVING- lar deg bruke en aggregert funksjon på en datavalgbetingelse, lik WHERE-konstruksjonen.

Syntaks: HA<агрегатная функция с условием>

Brukseksempel:

Query.Text = //velger grupperte poster der InStock-feltet er større enn 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks.Items GROUP BY |. ProductsInWarehouses.Nomenclature, |. ProductsInWarehouses.Warehouse |.

12. Bygg INDEKS ETTER- brukes til å indeksere søkefeltet. Et søk med indeksering tar lengre tid å fullføre, men gjør søking gjennom indekserte felt raskere. Kan bare brukes i virtuelle tabeller.

Syntaks: INDEKSER ETTER<Поле1, ... , ПолеN>

Brukseksempel:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLASS DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Design HVOR- lar deg pålegge en betingelse på alle valgfelt. Resultatet vil kun inkludere poster som tilfredsstiller betingelsen.

Syntaks: HVOR<Условие1 ОператорЛогСоединения УсловиеN>

Brukseksempel:

Query.Text = //alle poster med CompensationRemaining er valgt<>0 og //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORmains.Counterparty, |CompensationRPORmains.Child, | CompensationRPORmains.CompensationRemaining, | CompensationRPORmains.AmountForCalcCompRemains |Place Dataccumulation Register |FOR.Compensation.Compensation |KompensasjonRPORmaining.CompensationRemaining<>0 | And CompensationRPORmains.AmountForCalcCompRemaining> 100" ;

14. Design RESULTATER... GENERELT- brukes til å beregne totaler. Designet spesifiserer feltene som totaler skal beregnes med, og aggregerte funksjoner brukes på de totale feltene. Ved bruk av totaler for hvert felt etter TOTAL-konstruksjonen, grupperes data. Det er en valgfri GENERELL konstruksjon. Bruken av den gir også ekstra gruppering. Du vil se et eksempel på forespørselsresultatet nedenfor.

Syntaks: RESULTATER<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>AV<ОБЩИЕ> <Поле1, ... , ПолеN>

Brukseksempel:

Request.Text = "VELG | Beregninger. Motpartsavtale. Type avtale AS Kontraktstype, | Beregninger. Motpartsavtale AS Kontrakt, | Beregninger. Motpart, | Beregninger. Mengde av gjensidig oppgjørssaldo AS Saldo | FRA | Akkumuleringsregister. Gjensidig Oppgjør MED Motparter. Beregninger |. BELØP (Saldo) |

Figuren skisserer grupperingene som ble dannet under utførelsen av forespørselen, den øverste refererer til GENERELT, og den andre til feltet MotpartsavtaleAvtaletype.

En spørring er et kraftig verktøy som tjener til å raskt (sammenlignet med alle andre metoder) innhente og behandle data som finnes i ulike objekter i 1C-informasjonsbasen.

Opprett en forespørsel

Forespørselen opprettes som et eget objekt som har et påkrevd attributt Tekst, der selve forespørselen faktisk er plassert. I tillegg kan ulike parametere som er nødvendige for utførelse av den sendes til forespørselen. Etter at teksten og parameterne for forespørselen er fylt ut, må forespørselen utføres og resultatet av utførelsen plasseres i et utvalg eller verditabell. Det hele ser omtrent slik ut:

//Opprett en forespørsel
Request = ny forespørsel;

//Fyll inn forespørselsteksten
Be om. Tekst= "Her skriver vi teksten til forespørselen";

//Send parametere til forespørselen
Be om. SetParameter("ParameterName" , ParameterValue) ;

//Utfør forespørselen
Resultat = Spørring. Løpe() ;

//Last opp søkeresultatet til utvalget
Prøve = Resultat. Velg() ;

//Last opp søkeresultatet til verditabellen
Tabell = Resultat. Unload() ;

//Siste handlinger kan kombineres
Hent = Spørring. Løpe() . Velg() ;
//eller
Tabell = Spørring. Løpe() . Unload() ;

Grunnleggende om 1C spørrespråk

De enkleste og mest brukte spørringene brukes til å hente data fra en eller annen kilde. Kilden kan være nesten alle objekter som inneholder alle data: kataloger, dokumenter, registre, konstanter, oppregninger, planer for typer egenskaper, etc.

Fra disse objektene, ved hjelp av en spørring, kan du hente verdiene til detaljer, tabelldeler, detaljer om tabelldeler, endringer, ressurser, etc.

For å få forespørselsteksten er den ofte praktisk å bruke Be om konstruktør. Den kalles når du høyreklikker hvor som helst i programmodulen.

For eksempel, hvis du trenger å få verdiene til alle katalogdetaljer Motparter, vil forespørselen se slik ut:

Be om. Tekst = "VELGE
| *
|FRA
| Katalog motparter"
;

Hvis du bare trenger å få individuelle detaljer, gjør du dette:

Be om. Tekst = "VELGE
| Kode,
| Navn,
| Foreldre
|FRA
| Katalog motparter"
;

For å motta en slik forespørsel tekst inn Spørringskonstruktør du må velge de aktuelle feltene på fanen Tabeller og felt.

Du kan tilordne aliaser til elementene og kildene som er valgt i spørringen og bruke dem senere både i selve spørringen og når du arbeider med resultatet. I tillegg kan forespørselen inneholde felt med en forhåndsdefinert spesifikk verdi, eller med en beregnet verdi:

Be om. Tekst = "VELGE
| Clients.Code AS-nummer,

| 1000 AS FieldWithValue
|FRA
;

Hent = Spørring. Løpe() . Velg() ;

Bye Selection. Neste() Loop
ClientNumber = Eksempel. Antall;
ClientName = Utvalg. Navn;
Verdi = prøve. FieldWithValue;
EndCycle ;

Bruk fanen for å angi aliaser Fagforeninger/Aliaser V Spørringsbygger.

Et felt med en fast eller beregnet verdi opprettes manuelt på fanen Tabeller og felt, i en kolonne Enger.

Alle valgte elementer kan ordnes i enten forover eller omvendt rekkefølge. Du kan velge ett eller flere felt for bestilling. Sammen med å arrangere, kan det noen ganger være nyttig å velge bare ett eller noen få av de første elementene.

//Bestill klienter etter navn fra A til Å og velg de 10 første
Be om. Tekst = "VELG FØRSTE 10
| Clients.Code AS-nummer,
| Clients.Name AS Navn,
| 1000 AS FieldWithValue
|FRA

| BESTILL ETTER
| Navn"
;

//Velg den nyeste alfabetiske klienten
Be om. Tekst = "VELG TOPP 1
| Clients.Code AS-nummer,
| Clients.Name AS Navn,
| 1000 AS FieldWithValue
|FRA
| Katalog Motparter AS Kunder
| BESTILL ETTER
| Navn DECLINE"
;

Du kan begrense utvalget av elementer til de som brukeren har tilgangsrettigheter til. Eller fjern dupliserte linjer fra søkeresultatet.

//Sampling data tillatt for brukeren
Be om. Tekst = "VELG TILLATT
| Clients.Code AS-nummer,
| Clients.Name AS Navn,
| 1000 AS FieldWithValue
|FRA
| Katalog motparter AS klienter"
;

//Utvalg av ikke-repeterende elementer
Be om. Tekst = "VELG DIVERSE
| Clients.Code AS-nummer,
| Clients.Name AS Navn,
| 1000 AS FieldWithValue
|FRA
| Katalog motparter AS klienter"
;

Rekkefølgen settes på fanen Rekkefølge V Spørringsbygger antall valgte elementer, oppløsning og repeterbarhetsparametere er på fanen I tillegg.

Fortsettelse følger…

Spørringsspråket er en av de grunnleggende mekanismene til 1C 8.3 for utviklere. Ved å bruke spørringer kan du raskt hente alle data som er lagret i databasen. Syntaksen er veldig lik SQL, men det er noen forskjeller.

De viktigste fordelene med 1C 8.3 (8.2) spørringsspråk fremfor SQL:

  • derefererende referansefelt (henviser ett eller flere punkter til objektdetaljer);
  • å jobbe med resultater er veldig praktisk;
  • muligheten til å lage virtuelle tabeller;
  • forespørselen kan skrives på både engelsk og russisk;
  • muligheten til å blokkere data for å unngå vranglås.

Ulemper med spørringsspråket i 1C:

  • i motsetning til SQL, tillater ikke 1C-spørringer endring av data;
  • mangel på lagrede prosedyrer;
  • umulighet å konvertere en streng til et tall.

La oss ta en titt på miniopplæringen vår om de grunnleggende konstruksjonene til 1C-spørringsspråket.

På grunn av det faktum at spørringer i 1C bare lar deg motta data, må enhver spørring begynne med ordet "SELECT". Etter denne kommandoen indikeres feltene som data må hentes fra. Hvis du angir "*", vil alle tilgjengelige felt bli valgt. Stedet som dataene skal velges fra (dokumenter, registre, kataloger osv.) er angitt etter ordet "FRA".

I eksemplet diskutert nedenfor, er navnene på hele nomenklaturen valgt fra "Nomenklatur"-katalogen. Etter ordet "HVORDAN", er aliaser (navn) for tabeller og felt indikert.

VELGE
Nomenklatur Navn AS Navn på nomenklatur
FRA
Directory.Nomenclature AS Nomenclature

Ved siden av "SELECT"-kommandoen kan du spesifisere nøkkelord:

  • DIVERSE. Spørringen vil kun velge rader som er forskjellige i minst ett felt (uten duplikater).
  • Første n, Hvor n– antall rader fra begynnelsen av resultatet som må velges. Oftest brukes denne konstruksjonen i forbindelse med sortering (ORDER BY). For eksempel når du trenger å velge et visst antall dokumenter som er nyere etter dato.
  • TILLATT. Denne utformingen lar deg velge fra databasen bare de postene som er tilgjengelige for gjeldende bruker. Basert på bruken av dette nøkkelordet, vil brukeren motta en feilmelding når han forsøker å forespørre poster som de ikke har tilgang til.

Disse nøkkelordene kan brukes sammen eller hver for seg.

FOR ENDRING

Dette forslaget blokkerer data for å forhindre gjensidige konflikter. Låste data vil ikke bli lest fra en annen tilkobling før transaksjonen avsluttes. I denne klausulen kan du spesifisere spesifikke tabeller som må låses. Ellers blir alle blokkert. Designet er kun relevant for den automatiske låsemodusen.

Oftest brukes "FOR CHANGE"-klausulen ved mottak av saldo. Når alt kommer til alt, når flere brukere jobber i programmet samtidig, mens en mottar saldo, kan en annen endre dem. I dette tilfellet vil den resulterende resten ikke lenger være korrekt. Hvis du blokkerer dataene med dette forslaget, vil den andre ansatte bli tvunget til å vente til den første ansatte mottar riktig saldo og utfører alle nødvendige manipulasjoner med den.

VELGE
Gjensidige oppgjør.
Gjensidige oppgjør Mengde gjensidige oppgjør Saldo
FRA
Akkumuleringsregister. Gjensidige oppgjør med ansatte
FOR ENDRING

HVOR

Designet er nødvendig for å pålegge en eller annen form for valg på de opplastede dataene. I noen tilfeller av innhenting av data fra registre, er det mer rimelig å spesifisere utvalgsbetingelser i parametrene til virtuelle tabeller. Ved bruk av "WHERE" hentes alle poster først, og først deretter tas valget i bruk, noe som bremser spørringen betydelig.

Nedenfor er et eksempel på en forespørsel om å skaffe kontaktpersoner til en bestemt stilling. Valgparameteren har formatet: &ParameterName (parameternavnet er vilkårlig).

UTVALG (CASE)

Designet lar deg spesifisere betingelser direkte i forespørselens brødtekst.

I eksemplet nedenfor vil "AdditionalField" inneholde tekst avhengig av om dokumentet er lagt ut eller ikke:

VELGE
AdmissionTiU.Link,
VALG
NÅR OpptakT&U.Utført
SÅ "Dokumentet er bestått!"
ELSE "Dokumentet ble ikke lagt ut..."
SLUTT SOM tilleggsfelt
FRA
Dokumentmottak av varer og tjenester HVORDAN Mottaksvilkår

BLI MED

Sammenføyninger kobler to tabeller basert på en spesifikk relasjonsbetingelse.

VENSTRE/HØYRE FORBINDELSE

Essensen av LEFT-koblingen er at den første spesifiserte tabellen tas i sin helhet og den andre er knyttet til den i henhold til tilkoblingstilstanden. Hvis det ikke er noen poster som tilsvarer den første tabellen i den andre, erstattes NULL som deres verdier. Enkelt sagt er hovedtabellen den første spesifiserte tabellen, og dataene til den andre tabellen (hvis noen) er allerede erstattet med dataene.

For eksempel er det nødvendig å hente varevarer fra «Mottak av varer og tjenester»-dokumenter og priser fra informasjonsregisteret «Varepriser». I dette tilfellet, hvis prisen for en posisjon ikke blir funnet, erstatter du NULL i stedet. Alle varer fra dokumentet vil bli valgt uavhengig av om de har en pris eller ikke.

VELGE
Kvittering&U.nomenklatur,
Priser.Pris
FRA
Dokumentmottak av varer og tjenester HVORDAN Varemottak
INTERN JOIN RegisterInformation.PricesNomenclature.SliceLast AS Priser
Software Receipt&U.Nomenclature = Priser.Nomenklatur

I HØYRE er alt stikk motsatt.

FULL TILKOBLING

Denne typen tilkobling skiller seg fra de forrige ved at som et resultat vil alle poster fra både den første tabellen og den andre bli returnert. Hvis ingen poster blir funnet i den første eller andre tabellen basert på den angitte koblingsbetingelsen, vil NULL bli returnert i stedet.

Når du bruker en full tilkobling i forrige eksempel, vil alle vareelementer fra "Mottak av varer og tjenester"-dokumentet og alle de siste prisene fra "Varepriser"-registeret bli valgt. Verdiene til postene som ikke ble funnet i både den første og andre tabellen vil være lik NULL.

INDRE BLI MED

Forskjellen mellom en INNER JOIN og en FULL JOIN er at hvis en post ikke finnes i minst én av tabellene, vil spørringen ikke vise den i det hele tatt. Som et resultat vil kun de vareelementene fra dokumentet "Mottak av varer og tjenester" velges som det er poster for i informasjonsregisteret "Varepriser", hvis vi i forrige eksempel erstatter "FULL" med "INTERNAL".

GRUPPE AV

Gruppering i 1C-spørringer lar deg skjule tabellrader (grupperingsfelt) i henhold til en viss felles karakteristikk (grupperingsfelt). Grupperingsfelt kan bare vises ved bruk av aggregerte funksjoner.

Resultatet av følgende spørring vil være en liste over produkttyper med maksimalpriser for dem.

VELGE
,
MAX(Price.Price) AS Pris
FRA

GRUPPE AV
Priser.Nomenklatur.Type nomenklatur

RESULTATER

I motsetning til gruppering, når du bruker totaler, vises alle poster og totale rader legges til dem. Gruppering viser bare generaliserte poster.

Resultatene kan oppsummeres for hele tabellen (ved å bruke nøkkelordet «GENERAL»), for flere felt, for felt med hierarkisk struktur (søkeord «HIERARKI», «KUN HIERARKI»). Ved oppsummering av resultater er det ikke nødvendig å bruke aggregerte funksjoner.

La oss se på et eksempel som ligner på eksemplet ovenfor ved å bruke gruppering. I dette tilfellet vil søkeresultatet ikke bare returnere grupperte felt, men også detaljerte poster.

VELGE
Priser.Nomenklatur.Type nomenklatur AS Type nomenklatur,
Priser.Pris AS Pris
FRA
Register over informasjonspriser på nomenklaturen Øyeblikksbilde av de siste AS-prisene
RESULTATER
MAKSIMUM(pris)
AV
TypeNomenklatur

HA

Denne operatoren ligner på WHERE-operatoren, men brukes bare for aggregerte funksjoner. De resterende feltene, unntatt de som brukes av denne operatøren, må grupperes. WHERE-operatøren gjelder ikke for aggregerte funksjoner.

I eksemplet nedenfor er maksprisene for en vare valgt hvis de overstiger 1000, gruppert etter varetype.

VELGE

MAX(Price.Price) AS Pris
FRA
Register over informasjonspriser på nomenklaturen Øyeblikksbilde av de siste AS-prisene
GRUPPE AV
Priser.Nomenklatur.Type nomenklatur
HA
MAKSIMUM(Priser.Pris) > 1000

SORTER ETTER

Operatoren ORDER BY sorterer resultatet av en spørring. For å sikre at poster vises i en konsistent rekkefølge, brukes AUTO ORDER. Primitive typer sorteres etter vanlige regler. Referansetyper er sortert etter GUID.

Et eksempel på å få en liste over ansatte sortert etter navn:

VELGE
Ansatte.Navn AS Navn
FRA
Directory.Employees HVORDAN ansatte
SORTER ETTER
Navn
AUTO BESTILLING

Andre 1C spørringsspråkkonstruksjoner

  • KOMBINERE– resultater av to spørringer i ett.
  • KOMBINER ALT– ligner på COMBINE, men uten å gruppere identiske rader.
  • TOM BORD– noen ganger brukt når du slår sammen spørringer for å spesifisere en tom nestet tabell.
  • PLASS– oppretter en midlertidig tabell for å optimalisere komplekse 1C-spørringer. Slike forespørsler kalles batchforespørsler.

Språkfunksjoner

  • SUBSTRING avkorter en streng fra en spesifisert posisjon til et spesifisert antall tegn.
  • ÅR...ANDRE lar deg få den valgte verdien av en numerisk type. Inndataparameteren er datoen.
  • BEGYNNELSE PÅ PERIODE og SLUT PÅ PERIODE brukes når du arbeider med datoer. Type periode (DAG, MÅNED, ÅR, osv.) er angitt som en tilleggsparameter.
  • ADDKDATE lar deg legge til eller trekke fra en bestemt tid av en bestemt type fra en dato (ANDRE, MINUTT, DAG, etc.).
  • FORSKJELL DATO bestemmer forskjellen mellom to datoer, og indikerer typen utdataverdi (DAG, ÅR, MÅNED, osv.).
  • ISNULL erstatter den manglende verdien med det angitte uttrykket.
  • REPRESENTASJON og REPRESENTASJONSLINKER få en strengrepresentasjon av det angitte feltet. Bruk på alle verdier og bare referanseverdier.
  • TYPE, TYPE VERDIER brukes til å bestemme typen inndataparameter.
  • LINK er en logisk sammenligningsoperator for attributtverditypen.
  • UTTRYKKE brukes til å konvertere en verdi til ønsket type.
  • DATO TID får en verdi av typen "Dato" fra numeriske verdier (år, måned, dag, time, minutt, sekund).
  • BETYDNING i en 1C-forespørsel brukes den til å indikere forhåndsdefinerte verdier - kataloger, oppregninger, planer for typer egenskaper. Brukseksempel: " Hvor juridisk person = verdi(oppregning. juridisk person. individuell)«.

Spørringsbygger

For å lage spørringer med 1C er det en veldig praktisk innebygd mekanisme - spørringsdesigneren. Den inneholder følgende hovedfaner:

  • "Tabeller og felt" - inneholder feltene som må velges og deres kilder.
  • "Connections" - beskriver betingelsene for CONNECTION-strukturen.
  • "Gruppering" - inneholder en beskrivelse av grupperingsstrukturer og summerte felt basert på dem.
  • "Betingelser" - er ansvarlig for å velge data i forespørselen.
  • «Avansert» – flere søkeparametere, for eksempel nøkkelord for «SELECT»-kommandoen, osv.
  • "Joins/Aliases" - mulighetene for å slå sammen tabeller er indikert og aliaser er spesifisert ("HOW"-konstruksjonen).
  • "Ordre" er ansvarlig for å sortere resultatet av forespørsler.
  • "Totals" - ligner på "Gruppering"-fanen, men brukes for "TOTALS"-konstruksjonen.

Teksten til selve forespørselen kan sees ved å klikke på "Request"-knappen i nedre venstre hjørne. I dette skjemaet kan det rettes manuelt eller kopieres.


Be om konsoll

For raskt å vise resultatet av en spørring i Enterprise-modus, eller feilsøke komplekse spørringer, bruk . Den inneholder teksten til forespørselen, setter parametrene og viser resultatet.

Du kan laste ned spørringskonsollen på ITS-disken, eller via .

Spørringsspråket i 1C 8 er en forenklet analog av det velkjente "strukturerte programmeringsspråket" (som det oftere kalles, SQL). Men i 1C brukes den kun for å lese data en objektdatamodell brukes til å endre data.

En annen interessant forskjell er den russiske syntaksen. Selv om du faktisk kan bruke engelskspråklige konstruksjoner.

Eksempelforespørsel:

VELGE
Banks.Name,
Banker.Korrespondentkonto
FRA
Directory.Banks HVORDAN Banker

Denne forespørselen vil tillate oss å se informasjon om navn og korrespondentkonto til alle banker som finnes i databasen.

Spørrespråk er den enkleste og mest effektive måten å få informasjon på. Som det fremgår av eksempelet ovenfor, må du bruke metadatanavn på spørringsspråket (dette er en liste over systemobjekter som utgjør konfigurasjonen, dvs. kataloger, dokumenter, registre osv.).

Beskrivelse av spørringsspråkkonstruksjoner

Spørringsstruktur

For å få data er det nok å bruke "SELECT" og "FROM" konstruksjonene. Den enkleste forespørselen ser slik ut:

VELG * FRA Kataloger.Nomenklatur

Der "*" betyr å velge alle feltene i tabellen, og Directories.Nomenclature – navnet på tabellen i databasen.

La oss se på et mer komplekst og generelt eksempel:

VELGE
<ИмяПоля1>HVORDAN<ПредставлениеПоля1>,
Sum(<ИмяПоля2>) HVORDAN<ПредставлениеПоля2>
FRA
<ИмяТаблицы1>HVORDAN<ПредставлениеТаблицы1>
<ТипСоединения>FORBINDELSE<ИмяТаблицы2>HVORDAN<ПредставлениеТаблицы2>
AV<УсловиеСоединениеТаблиц>

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

GRUPPE AV
<ИмяПоля1>

SORTER ETTER
<ИмяПоля1>

RESULTATER
<ИмяПоля2>
AV
<ИмяПоля1>

I denne spørringen velger vi dataene til feltene "Feltnavn1" og "Feltnavn1" fra tabellene "Tabellnavn1" og "Tabellnavn", tildeler synonymer til feltene ved å bruke "HOW"-operatoren, og kobler dem ved å bruke en bestemt betingelse "TableConnectionCondition" ".

Fra de mottatte dataene velger vi kun data som oppfyller betingelsen fra "HVOR" "Datavalgsbetingelse". Deretter grupperer vi forespørselen etter feltet "Feltnavn1", mens vi summerer "Feltnavn2". "Feltnavn1" og det siste feltet "Feltnavn2".

Det siste trinnet er å sortere forespørselen ved å bruke ORDER BY-konstruksjonen.

Generelle design

La oss se på de generelle strukturene til spørrespråket 1C 8.2.

FØRSTn

Ved å bruke denne operatoren kan du få n antall første poster. Rekkefølgen på postene bestemmes av rekkefølgen i spørringen.

VELG FØRSTE 100
Banks.Name,
Banker Kode AS BIC
FRA
Directory.Banks HVORDAN Banker
SORTER ETTER
Banks.Name

Forespørselen vil motta de første 100 oppføringene i "Banker"-katalogen, sortert alfabetisk.

TILLATT

Denne designen er relevant for arbeid med mekanismen. Essensen av mekanismen er å begrense lesing (og andre handlinger) til brukere for spesifikke poster i en databasetabell, og ikke tabellen som helhet.

Hvis en bruker prøver å bruke en spørring til å lese poster som er utilgjengelige for ham, vil han motta en feilmelding. For å unngå dette bør du bruke "TILLATT"-konstruksjonen, det vil si at forespørselen kun vil lese poster som er tillatt til den.

VELG TILLATT
Lagring av tilleggsinformasjon
FRA
Directory.Repository av tilleggsinformasjon

DIVERSE

Bruk av "DIFFERENT" vil forhindre at dupliserte linjer kommer inn i 1C-søkeresultatet. Duplisering betyr at alle forespørselsfelt samsvarer.

VELG FØRSTE 100
Banks.Name,
Banker Kode AS BIC
FRA
Directory.Banks HVORDAN Banker

Tom tabell

Denne konstruksjonen brukes svært sjelden til å kombinere spørringer. Når du blir med, må du kanskje spesifisere en tom nestet tabell i en av tabellene. "EmptyTable"-operatoren er akkurat riktig for dette.

Eksempel fra 1C 8 hjelp:

VELG Link.Number, TOM TABELL.(Nr., Vare, Antall) SOM sammensetning
FRA Dokument.Utgiftsfaktura
KOMBINER ALT
VELG Link.Number, Contents.(LineNumber, Product, Quantity)
FRA Document.Invoice Document.Invoice.Composition.*

ISNULL

En veldig nyttig funksjon som lar deg unngå mange feil. YesNULL() lar deg erstatte NULL-verdien med den ønskede. Svært ofte brukt for å sjekke for tilstedeværelsen av en verdi i sammenføyde tabeller, for eksempel:

VELGE
Nomenklatur Ref.
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
FRA


Kan brukes på andre måter. For eksempel, hvis det for hver rad ikke er kjent i hvilken tabell verdien finnes:

ISNULL(InvoiceReceived.Dato, InvoiceIssued.Dato)

HOW er en operator som lar oss tildele et navn (synonym) til en tabell eller et felt. Vi så et eksempel på bruk ovenfor.

Disse konstruksjonene er veldig like - de lar deg få en strengrepresentasjon av ønsket verdi. Den eneste forskjellen er at REPRESENTATION konverterer alle verdier til en strengtype, mens REPRESENTATIONREF kun konverterer referanseverdier. REFERANSEREPRESENTASJON anbefales brukt i datasammensetningssystemspørringer for optimalisering, med mindre selvfølgelig referansedatafeltet er planlagt brukt i valg.

VELGE
View(Link), //string, for eksempel "Forhåndsrapport nr. 123 datert 10/10/2015
View(DeletionMark) AS DeleteMarkText, //string, "Ja" eller "Nei"
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True or False
FRA
Document.Advance Report

UTTRYKKE

Express lar deg konvertere feltverdier til ønsket datatype. Du kan konvertere en verdi til enten en primitiv type eller en referansetype.

Express for en referansetype brukes til å begrense de forespurte datatypene i felt av en kompleks type, ofte brukt for å optimalisere systemytelsen. Eksempel:

EXPRESS(TabellCost.Subconto1 AS Directory.Cost Items).Type aktivitetForSkatteRegnskapskostnader

For primitive typer brukes denne funksjonen ofte for å begrense antall tegn i felt med ubegrenset lengde (slike felt kan ikke sammenlignes med). For å unngå feilen " Ugyldige parametere i sammenligningsoperasjonen. Kan ikke sammenligne felt
ubegrenset lengde og felt av inkompatible typer
", må du uttrykke slike felt som følger:

EXPRESS(Comment AS Line(150))

FORSKJELL DATO

Få 267 videotimer på 1C gratis:

Et eksempel på bruk av IS NULL i en 1C-forespørsel:

VELGE FRA
Ref
VENSTRE TILKOBLING Registrer Akkumuleringer.Produkter I Varehus.Remaining AS Gjenværende produkt
ProgramvarenomenklaturRef.Link = Solgte varekomiteerRemains.Nomenclature
HVOR IKKE gjenværende produkter ER NULL

Datatypen i en spørring kan bestemmes ved å bruke funksjonene TYPE() og VALUETYPE() eller ved å bruke den logiske REFERENCE-operatoren. De to funksjonene er like.

Forhåndsdefinerte verdier

I tillegg til å bruke beståtte parametere i spørringer i 1C-spørringsspråket, kan du bruke forhåndsdefinerte verdier eller . For eksempel overføringer, forhåndsdefinerte kataloger, kontoplaner og så videre. For dette brukes "Value()"-konstruksjonen.

Brukseksempel:

WHERE Nomenclature.Type of Nomenclature = Verdi(Katalog.Types of Nomenclature.Produkt)

HVOR Motparter.Type kontaktinformasjon = Verdi(Opptelling.Typer kontaktinformasjon.Telefon)

HVOR Kontosaldo.Regnskapskonto = Verdi(Kontoplan.Profit.ProfittTap)

Tilkoblinger

Det er 4 typer tilkoblinger: VENSTRE, IKKE SANT, KOMPLETT, INTERN.

VENSTRE og HØYRE FORBINDELSE

Sammenføyninger brukes til å koble to tabeller basert på en spesifikk tilstand. Innslag når VENSTRE BLI MED er at vi tar den første angitte tabellen i sin helhet og betinget binder den andre tabellen. Feltene i den andre tabellen som ikke kunne bindes av betingelse er fylt med verdien NULL.

For eksempel:

Den vil returnere hele tabellen over motparter og fylle ut "Bank"-feltet kun på de stedene der betingelsen "Motparter.Navn = Banker.Navn" vil være oppfylt. Dersom vilkåret ikke er oppfylt, settes Bank-feltet til NULL.

HØYRE JOIN på 1C-språk helt lik VENSTRE tilkobling, med unntak av én forskjell - i RETT TIL TILKOBLING"Hovedtabellen" er den andre, ikke den første.

FULL TILKOBLING

FULL TILKOBLING skiller seg fra venstre og høyre ved at den viser alle poster fra to tabeller og kobler kun sammen de som den kan koble til etter betingelse.

For eksempel:

FRA

FULL TILKOBLING
Directory.Banks HVORDAN Banker

AV

Spørringsspråket vil returnere begge tabellene fullstendig bare hvis betingelsen for å bli med i postene er oppfylt. I motsetning til en venstre/høyre-kobling, er det mulig for NULL å vises i to felt.

INDRE BLI MED

INDRE BLI MED skiller seg fra full ved at den viser bare de postene som kan kobles til i henhold til en gitt tilstand.

For eksempel:

FRA
Katalog Motparter AS Kunder

INDRE BLI MED
Directory.Banks HVORDAN Banker

AV
Clients.Name = Banks.Name

Denne spørringen vil kun returnere rader der banken og motparten har samme navn.

Foreninger

JOIN- og JOIN ALL-konstruksjonene kombinerer to resultater til ett. De. resultatet av å utføre to vil bli "slått sammen" til en felles.

Det vil si at systemet fungerer nøyaktig det samme som vanlige, bare for et midlertidig bord.

Hvordan bruke INDEX BY

Men ett punkt bør tas i betraktning. Å bygge en indeks på en midlertidig tabell tar også tid å fullføre. Derfor er det tilrådelig å bruke " "-konstruksjonen bare hvis det er sikkert kjent at det vil være mer enn 1-2 poster i den midlertidige tabellen. Ellers kan effekten være motsatt – ytelsen til indekserte felt kompenserer ikke for tiden det tar å bygge indeksen.

VELGE
Valutakurser Siste tverrsnitt Valuta AS Valuta,.
Valutakurser Siste tverrsnitt.
PUT Valutakurser
FRA
Informasjonsregister.Valutakurser.Siste Slice(&Periode,) AS ValutakursSiste Slice
INDEKSER ETTER
Valuta
;
VELGE
PriserNomenklatur.Nomenklatur,
PriserNomenklaturer.Pris,
PriserNomenklaturer.Valuta,
Valutakurser.Rate
FRA
Informasjonsregister.Nomenklaturpriser.Siste skive(&Periode,
Nomenklatur B (&Nomenklatur) OG PriceType = &PriceType) AS PriceNomenclature
VENSTRE JOIN Valutakurser AS Valutakurser
ProgramvarepriserNomenclatures.Currency = Valutakurser.Valuta

Gruppering

1C-spørringsspråket lar deg bruke spesielle aggregerte funksjoner når du grupperer søkeresultater. Gruppering kan også brukes uten aggregerte funksjoner for å "eliminere" duplikater.

Følgende funksjoner finnes:

Mengde, Mengde, Antall forskjellige, Maksimum, Minimum, Gjennomsnitt.

Eksempel #1:

VELGE
Salg av varer og tjenester, nomenklatur.
SUM(Sales of GoodsServicesGoods.Quantity) AS Quantity,
SUM(Salg of GoodsServicesGoods.Amount) AS Beløp
FRA

GRUPPE AV
Nomenklatur for varer og tjenester

Forespørselen mottar alle linjer med varer og oppsummerer dem etter mengde og beløp etter vare.

Eksempel nr. 2

VELGE
Banks.Code,
ANTALL(DIFERENT Banks.Link) SOM antall duplikater
FRA
Directory.Banks HVORDAN Banker
GRUPPE AV
Banks.Code

Dette eksemplet vil vise en liste over BIC-er i "Banker"-katalogen og vise hvor mange duplikater som finnes for hver av dem.

Resultater

Resultater er en måte å hente data fra et system med hierarkisk struktur. Aggregerte funksjoner kan brukes for oppsummeringsfelt, akkurat som for grupperinger.

En av de mest populære måtene å bruke resultater på i praksis er batch-avskrivning av varer.

VELGE




FRA
Dokumenter Salg av varer og tjenester HVORDAN Salg av varer og tjenester
SORTER ETTER

RESULTATER
SUM(antall),
SUM(Sum)
AV
Nomenklatur

Resultatet av spørringen vil være følgende hierarkisk:

Generelle resultater

Hvis du trenger å få totaler for alle "totaler", bruk operatoren "GENERELT".

VELGE
Salg av varer og tjenester Varer Nomenclature AS Nomenclature,.
Salg av varer og tjenester varer Link AS Dokument,.
Salg av varer og tjenester varer Kvantitet AS Kvantitet,.
Salg av varer og tjenester varer. Beløp
FRA
Dokumenter Salg av varer og tjenester HVORDAN Salg av varer og tjenester
SORTER ETTER
Salg av varer og tjenester
RESULTATER
SUM(antall),
SUM(Sum)
AV
ER VANLIG,
Nomenklatur

Som et resultat av å utføre forespørselen får vi følgende resultat:

I hvilket 1 grupperingsnivå er aggregeringen av alle nødvendige felt.

Arrangere

Operatoren ORDER BY brukes til å sortere resultatet av en spørring.

Sortering for primitive typer (streng, tall, boolsk) følger de vanlige reglene. For referansetypefelt skjer sortering etter den interne representasjonen av lenken (den unike identifikatoren), i stedet for etter kode eller referanserepresentasjon.

VELGE

FRA
Directory.Nomenclature AS Nomenclature
SORTER ETTER
Navn

Forespørselen vil vise en liste over navn i nomenklaturkatalogen, sortert alfabetisk.

Autobestilling

Resultatet av en spørring uten sortering er et kaotisk presentert sett med rader. 1C-plattformutviklere garanterer ikke at rader sendes ut i samme sekvens når identiske spørringer utføres.

Hvis du trenger å vise tabellposter i konstant rekkefølge, må du bruke Auto-Order-konstruksjonen.

VELGE
Nomenclature.Name AS Navn
FRA
Directory.Nomenclature AS Nomenclature
AUTO BESTILLING

Virtuelle bord

Virtuelle tabeller i 1C er en unik egenskap ved 1C-spørringsspråket som ikke finnes i andre lignende syntakser. En virtuell tabell er en rask måte å få profilinformasjon fra registre.

Hver registertype har sitt eget sett med virtuelle tabeller, som kan variere avhengig av registerinnstillingene.

  • kutt av den første;
  • kutt av sistnevnte.
  • rester;
  • revolusjoner;
  • saldo og omsetning.
  • bevegelser fra subconto;
  • revolusjoner;
  • hastighet Dt Kt;
  • rester;
  • saldo og omsetning
  • subconto.
  • utgangspunkt;
  • grafiske data;
  • faktisk gyldighetsperiode.

For løsningsutvikleren er dataene hentet fra én (virtuell) tabell, men faktisk tar 1C-plattformen fra mange tabeller og transformerer dem til den nødvendige formen.

VELGE
Produkter i varehusrester og omsetning,.
ProductsIn WarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityOmsetning,
GoodsIn WarehousesRemainsAndTurnover.QuantityIncoming,
ProdukterI varehusRemainsAndTurnover.QuantityConsumption,
ProductsI WarehousesRemainingsAndTurnover.QuantityFinalRemaining
FRA
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS GoodsInWarehousesRemainsAndTurnover

Denne spørringen lar deg raskt hente en stor mengde data.

Virtuelle bordalternativer

Et veldig viktig aspekt ved å jobbe med virtuelle tabeller er bruken av parametere. Virtuelle tabellparametere er spesialiserte parametere for valg og konfigurasjon.

For slike tabeller anses det som feil å bruke utvalg i "HVOR"-konstruksjonen. I tillegg til at spørringen blir suboptimal, er det mulig å motta feil data.

Et eksempel på bruk av disse parameterne:

Register over varer i varehus og omsetning (& Begynnelse av perioden, & Slutt av perioden, Måned, Bevegelser og grenser for perioden, Nomenklatur = & Påkrevd nomenklatur).

Algoritme for virtuelle tabeller

For eksempel lagrer det mest brukte virtuelle bordet av typen "Remains" data fra to fysiske tabeller - balanser og bevegelser.

Når du bruker en virtuell tabell, utfører systemet følgende manipulasjoner:

  1. Vi får den nærmeste beregnede verdien når det gjelder dato og mål i totaltabellen.
  2. Vi "legger til" beløpet fra bevegelsestabellen til beløpet fra totaltabellen.


Slike enkle handlinger kan forbedre ytelsen til systemet som helhet betydelig.

Bruke spørringsbyggeren

Spørringsbygger– et verktøy innebygd i 1C Enterprise-systemet som i stor grad letter utviklingen av databasespørringer.

Spørringsbyggeren har et ganske enkelt, intuitivt grensesnitt. La oss likevel se på bruken av spørringskonstruktøren mer detaljert.

Spørringstekstkonstruktøren startes fra kontekstmenyen (høyre museknapp) på ønsket sted i programkoden.

Beskrivelse av 1C-forespørselskonstruktøren

La oss se på hver kategori av designeren mer detaljert. Unntaket er Builder-fanen, som er et emne for en annen diskusjon.

Kategorien Tabeller og felt

Denne kategorien spesifiserer datakilden og feltene som må vises i rapporten. I hovedsak er konstruksjonene SELECT.. FROM beskrevet her.

Kilden kan være en fysisk databasetabell, en virtuell registertabell, midlertidige tabeller, nestede spørringer, etc.

I kontekstmenyen til virtuelle tabeller kan du angi parametere for virtuelle tabeller:

Fanen Tilkoblinger

Fanen brukes til å beskrive sammenhenger av flere tabeller og lager konstruksjoner med ordet TILKOBLING.

Kategorien Gruppering

På denne fanen lar systemet deg gruppere og oppsummere de nødvendige feltene i tabellresultatet. Beskriver bruken av konstruksjonene GRUPPER ETTER, SUM, MINIMUM, GJENNOMSNITT, MAKSIMUM, ANTALL, ANTALL FORSKJELLIGE.

Betingelser-fanen

Ansvarlig for alt som kommer i forespørselsteksten etter WHERE-konstruksjonen, det vil si for alle betingelsene som stilles til mottatte data.

Avansert-fanen

Tab I tillegg fylt med alle slags parametere som er veldig viktige. La oss se på hver av egenskapene.

Gruppering Valg av poster:

  • Første n– en parameter som returnerer bare N poster til spørringen (den FØRSTE operatøren)
  • Ingen duplikater– sikrer unikheten til de mottatte postene (ANNET operatør)
  • Tillatt– lar deg velge bare de postene som systemet lar deg velge under hensyntagen til (TILLATT konstruksjon)

Gruppering Forespørselstype bestemmer hvilken type spørring som skal være: hente data, opprette en midlertidig tabell eller ødelegge en midlertidig tabell.

Under er det et flagg Lås mottatte data for senere endring. Den lar deg aktivere muligheten til å stille inn datalåsing, som sikrer sikkerheten til data fra det øyeblikket de leses til de endres (relevant kun for automatisk låsemodus, design FOR ENDRING).

Sammenføyninger/aliaser-fanen

På denne kategorien i spørringsdesigneren kan du angi muligheten til å slå sammen forskjellige tabeller og aliaser (HOW-konstruksjonen). Tabellene er angitt på venstre side. Hvis du setter flaggene på motsatt side av tabellen, vil UNITE-konstruksjonen bli brukt, ellers - UNITE ALL (forskjeller mellom de to metodene). På høyre side er korrespondansen til felt i forskjellige tabeller angitt hvis korrespondansen ikke er spesifisert, vil spørringen returnere NULL.

Bestill-fanen

Dette spesifiserer rekkefølgen som verdiene er sortert i (ORDER BY) - synkende (DESC) eller stigende (ASC).

Det er også et interessant flagg - Autobestilling(i forespørselen - AUTO BESTILLING). Som standard viser 1C-systemet data i en "kaotisk" rekkefølge. Hvis du setter dette flagget, vil systemet sortere data etter interne data.

Søk Batch-fanen

På fanen spørringsdesigner kan du opprette nye, og også bruke den som navigasjon. I forespørselsteksten er pakker atskilt med symbolet ";" (komma).

"Query"-knappen i spørringsdesigneren

I nedre venstre hjørne av forespørselsdesigneren er det en forespørsel-knapp, som du kan se forespørselsteksten med når som helst:

I dette vinduet kan du gjøre justeringer av forespørselen og utføre den.


Bruke spørringskonsollen

Query Console er en enkel og praktisk måte å feilsøke komplekse spørringer og raskt skaffe informasjon. I denne artikkelen vil jeg prøve å beskrive hvordan du bruker Query Console og gi en lenke for å laste ned Query Console.

La oss se nærmere på dette verktøyet.

Last ned 1C spørrekonsoll

Først av alt, for å begynne å jobbe med spørringskonsollen, må du laste den ned fra et sted. Behandlinger er vanligvis delt inn i to typer - kontrollerte former og konvensjonelle (eller noen ganger kalles de 8.1 og 8.2/8.3).

Jeg prøvde å kombinere disse to visningene i én behandling - ønsket skjema åpnes i ønsket driftsmodus (i administrert modus fungerer konsollen bare i tykk modus).

Beskrivelse av 1C-spørringskonsollen

La oss begynne å se på spørringskonsollen med en beskrivelse av hovedbehandlingspanelet:

I overskriften på spørringskonsollen kan du se utførelsestiden for den siste spørringen med millisekunders nøyaktighet, dette lar deg sammenligne ulike design når det gjelder ytelse.

Den første gruppen med knapper i kommandolinjen er ansvarlig for å lagre gjeldende spørringer til en ekstern fil. Dette er veldig praktisk; du kan alltid gå tilbake til å skrive en kompleks forespørsel. Eller, for eksempel, lagre en liste over typiske eksempler på visse design.

Til venstre, i «Request»-feltet, kan du opprette nye forespørsler og lagre dem i en trestruktur. Den andre gruppen av knapper er ansvarlig for å administrere listen over forespørsler. Ved å bruke den kan du opprette, kopiere, slette, flytte en forespørsel.

  • Henrettebe om– enkel utførelse og resultater
  • Utfør pakken– lar deg se alle mellomliggende spørringer i en gruppe spørringer
  • Viser midlertidige tabeller– lar deg se resultatene som midlertidige spørringer returnerer på en tabell

Forespørselsparametere:

Lar deg angi gjeldende parametere for forespørselen.

I vinduet med spørringsparametere er følgende interessant:

  • Knapp Få fra forespørsel finner automatisk alle parametere i forespørselen for utviklerens bekvemmelighet.
  • Flagg Felles parametere for alle forespørsler– når den er installert, sletter ikke behandlingen parametrene når du går fra forespørsel til forespørsel i den generelle listen over forespørsler.

Angi en parameter med en liste over verdier Det er veldig enkelt, bare når du velger en parameterverdi, klikker du på fjernverdiknappen (kryss), systemet vil be deg om å velge datatypen, der du må velge "Verdiliste":

I topppanelet er det også en knapp for å hente innstillingene for spørrekonsollen:

Her kan du spesifisere parametere for automatisk lagring av spørringer og parametere for utføring av spørringer.

Forespørselsteksten legges inn i konsollforespørselsfeltet. Dette kan gjøres ved ganske enkelt å skrive en spørringstest eller ved å ringe et spesialverktøy - spørringsdesigneren.

1C 8-spørringsdesigneren kalles opp fra kontekstmenyen (høyre museknapp) når du klikker på inndatafeltet:

Denne menyen har også slike nyttige funksjoner som å slette eller legge til linjeskift ("|") til forespørselen, eller motta forespørselskoden i denne praktiske formen:

Request = Ny forespørsel;
Request.Text = ”
|VELG
| Valutaer.Link
|FRA
| Directory.Currencies AS Valutaer”;
RequestResult = Request.Execute();

Det nedre feltet i spørringskonsollen viser søkeresultatfeltet, og det er grunnen til at denne behandlingen ble opprettet:



I tillegg kan spørringskonsollen, i tillegg til listen, vise data i form av et tre - for spørringer som inneholder totaler.

Spørringsoptimalisering

Et av de viktigste punktene for å øke produktiviteten til 1C enterprise 8.3 er optimaliseringforespørsler. Dette punktet er også veldig viktig når bestått sertifiseringen. Nedenfor vil vi snakke om typiske årsaker til ikke-optimal spørringsytelse og optimaliseringsmetoder.

Valg i en virtuell tabell ved hjelp av WHERE-konstruksjonen

Det er nødvendig å bruke filtre på de virtuelle tabelldetaljene bare gjennom VT-parametrene. Under ingen omstendigheter bør du bruke WHERE-konstruksjonen for valg i en virtuell tabell. Dette er en alvorlig feil fra et optimaliseringssynspunkt. Ved valg med WHERE vil systemet faktisk motta ALLE poster og først da velge de nødvendige.

IKKE SANT:

VELGE

FRA
Register over gjensidige oppgjør med deltakere i organisasjoner.
,
Organisasjon = &Organisasjon
OG Individuell = &Individuell) HVORDAN Gjensidige oppgjør med deltakere i organisasjoner balanserer

FEIL:

VELGE
Gjensidige oppgjør med deltakere i organisasjoner Beløpssaldo
FRA
Register over akkumuleringer med deltakere i organisasjoner (,) HVORDAN Gjensidige oppgjør med deltakere i organisasjoner
HVOR
Gjensidige oppgjør med deltakere av organisasjoner Saldo = & Organisasjon
OG Gjensidige oppgjør med deltakere i organisasjoner Individuelle = &Individuelle

Hente verdien av et felt av en kompleks type ved å bruke en prikk

Når du mottar data av en kompleks type i en spørring gjennom en prikk, kobles systemet med en venstre sammenføyning nøyaktig så mange tabeller som det er mulige typer i feltet for den komplekse typen.

For eksempel er det høyst uønsket for optimalisering for å få tilgang til registerpostfeltet – registrar. Registraren har en sammensatt datatype, blant annet er alle mulige dokumenttyper som kan skrive data til registeret.

FEIL:

VELGE
Record Set.Recorder.Date,
RecordSet.Quantity
FRA
RegisterAccumulations.ProductsOrganizations AS SetRecords

Det vil si, faktisk vil en slik spørring ikke få tilgang til én tabell, men 22 databasetabeller (dette registeret har 21 registrartyper).

IKKE SANT:

VELGE
VALG
NÅR ProductsOrg.Registrar LINK Document.Salg of Products and Services
SÅ EXPRESS(ProductsOrg.Registrar AS Document.Sale of GoodsServices).Dato
NÅR GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
SÅ EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Dato
SLUTT SOM DATO,
ProductsOrg.Quantity
FRA
Registrer Akkumuleringer.ProdukterOrganisasjoner AS ProdukterOrganisasjon

Eller det andre alternativet er å legge til slik informasjon i detaljene, for eksempel i vårt tilfelle å legge til en dato.

IKKE SANT:

VELGE
ProdukterOrganisasjoner.Dato,
ProdukterOrganisasjoner.Antall
FRA
Register over akkumulasjoner av organisasjoner AS

Undersøk i en sammenføyningstilstand

For optimalisering er det uakseptabelt å bruke underspørringer i sammenføyningsforhold, dette bremser søket betydelig. Det er tilrådelig å bruke VT i slike tilfeller. For å koble til, må du bare bruke metadata og VT-objekter, etter å ha indeksert dem tidligere etter tilkoblingsfelt.

FEIL:

VELG …

VENSTRE BLI MED (
VELG FRA RegisterInformation.Limits
HVOR …
GRUPPE AV...
) AV …

IKKE SANT:

VELG …
PUT-grenser
FRA Informasjonsregister.Begrensninger
HVOR …
GRUPPE AV...
INDEKSER ETTER...;

VELG …
FROM Dokument salg av varer og tjenester
LEFT JOIN Grenser
AV …;

Bli med poster med virtuelle tabeller

Det er situasjoner når systemet ikke fungerer optimalt når du kobler et virtuelt bord til andre. I dette tilfellet, for å optimere ytelsen til spørringen, kan du prøve å plassere den virtuelle tabellen i en midlertidig tabell, og ikke glemme å indeksere de sammenføyde feltene i den midlertidige tabellspørringen. Dette skyldes det faktum at VT-er ofte finnes i flere fysiske DBMS-tabeller som et resultat, en underspørring kompileres for å velge dem, og problemet viser seg å være lik det forrige punktet.

Bruke valg basert på ikke-indekserte felt

En av de vanligste feilene når du skriver spørringer er å bruke betingelser på ikke-indekserte felt, dette motsier spørringsoptimaliseringsregler. DBMS kan ikke utføre en spørring optimalt hvis spørringen inkluderer valg på ikke-indekserbare felt. Hvis du tar en midlertidig tabell, må du også indeksere tilkoblingsfeltene.

Det må være en passende indeks for hver tilstand. En passende indeks er en som tilfredsstiller følgende krav:

  1. Indeksen inneholder alle feltene som er oppført i betingelsen.
  2. Disse feltene er helt i begynnelsen av indeksen.
  3. Disse valgene er fortløpende, det vil si at verdier som ikke er involvert i spørringsbetingelsen, ikke "kiles" mellom dem.

Hvis DBMS ikke velger de riktige indeksene, vil hele tabellen bli skannet - dette vil ha en svært negativ innvirkning på ytelsen og kan føre til forlenget blokkering av hele settet med poster.

Bruker logisk ELLER under forhold

Det er alt, denne artikkelen dekket de grunnleggende aspektene ved spørringsoptimalisering som enhver 1C-ekspert bør vite.

Et veldig nyttig gratis videokurs om søkeutvikling og optimalisering, Jeg anbefaler på det sterkeste for nybegynnere og mer!

Klyuev V.V.

http://prof1c.kklab.ru

Skapelse ogjobber med forespørsler. Enkleste operasjonerfor nybegynnere(Vanlig søknad)

God ettermiddag

I dag vil jeg fortelle deg om hvordan du kan begynne å jobbe med spørringer og lære (naturligvis gradvis) hvordan du jobber med spørringer i 1C. For de som er kjent med MS-spørsmål
SQL vil selvfølgelig være mye enklere.

Så la oss åpne konfiguratoren og lage en ny ekstern prosessering.

Deretter vil vi motta et vindu med vår behandling. La oss fortsette direkte til eksperimenter på forespørsler, for dette vil vi opprette et nytt skjema i behandlingen vår - og for dette, i listen (hvitt felt), velg Skjemaer - og klikk (+) Legg til, godta alle de foreslåtte standardskjemaparametrene , og klikk ferdig.

Så vi har laget et tomt skjema for deg, med knapper og. I vinduet med skjemaet velger du fanene og går direkte til å skrive koden som skal kjøres når du klikker på utfør-knappen. For å gjøre dette, finn fremgangsmåten ButtonExecutePress(Button)

og skriv følgende kode:

Prosedyre ButtonExecutePress(Button) Request = New Request() ; Be om. Tekst = " VELG | * | FRA| Dokument . Faktura for betaling til kjøper" ; Resultat = Forespørsel. Utfør (). Avlast (); Slutt på prosedyre

La oss kommentere det vi skrev her. Vi valgte alle dokumentene "Faktura for betaling til kjøper" med forespørselen. Jeg vil umiddelbart merke meg at, avhengig av konfigurasjonen du eksperimenterer med, se på sammensetningen av dokumentene i konfigurasjonen din, og i stedet for "Faktura for betaling til kjøperen" som jeg indikerte, erstatter du ethvert dokumentobjekt fra liste over dokumenter i din konfigurasjon, gjerne slik at dokumenter av denne typen er opprettet i informasjonsbasen, for å unngå å få et tomt spørringsresultat. Jeg vil også merke meg et viktig poeng - hvis det er for mange slike dokumenter, kan utførelsen av forespørselen ta litt tid - på grunn av det faktum at vi ikke begrenser forespørselen til betingelser og velger alle felt - som stjernen ( *) forteller oss.

Ved å bruke søkeordet "Velg" beordrer vi vår forespørsel om å velge alle felt (*) (dokumentdetaljer) fra dokumentet "Faktura for betaling til kjøper".

Viktig:
Jeg vil også merke meg at når du skriver et spørringsspråk, bør konfigurasjonsobjekter adresseres i entall, ikke flertall. I dette
I dette tilfellet er Dokumenter-objektet i konfigurasjonen (Documents-grenen) - Dokumentet er skrevet i forespørselen. Også til sammensetningen av dokumentene - vi kommer gjennom prikken (.) - og navnet på dokumentet.

Vi mottar resultatet av forespørselen i form av en verditabell, som bevist av metoden (parameteren) vi brukte - Last opp, det vil si at vi først utførte
forespørsel (Execute), og først da lastet opp resultatet av å utføre forespørselen til verditabellen, og verditabellen er plassert i resultatvariabelen.

Deretter lagrer vi behandlingen vår til en fil, for å gjøre dette, klikk Fil->Lagre som og skriv filnavnet, for min behandling satte jeg navnet "ExternalProcessing1Demo", for ikke å søke etter behandlingen på lenge, du kan lagre den på skrivebordet, så må vi åpne den)).

La oss nå lære litt grunnleggende feilsøking. For å gjøre dette, nå i feltet ved siden av teksten Resultat = ... dobbeltklikk på venstre museknapp slik at en rød sirkel vises, bør du få noe sånt som følgende:

Så, vi har nå satt et bruddpunkt på linjen med resultatet, la oss nå kjøre konfigurasjonen for feilsøking ved å trykke på tasten (F 5) eller knappen
på verktøylinjen:

Nå, i 1C:Enterprise-modusen vi lanserte, la oss åpne vår lagrede behandling Fil->Åpne og finne stedet der du lagret behandlingsfilen, velg den og klikk åpen. Klikk på "Kjør"-knappen i vår behandling. Hvis du gjorde alt riktig, vil du automatisk bytte til konfiguratormodus og se følgende på stedet der bruddpunktet vårt ble installert:

En pil dukket opp på sirkelen vår - vi flyttet til trinn-for-trinn-utførelse av koden vår, og da vil vi se det mest interessante. Hvis du gjorde alt riktig, kan du nå få resultatet av forespørselen.

For å visualisere forespørselen, gjør følgende: I toppmenyen til konfiguratoren, finn feilsøkingsmenyen og velg Tableau-kommandoen.

Et tomt vindu -> Tableau vil åpnes nederst i konfiguratorvinduet. Det er tomme linjer i dette vinduet. Dobbeltklikk på den tomme uthevede linjen og skriv ordet Resultat. Du bør få følgende:

Så i vinduet vi spesifiserte, bør vi motta resultatet av å utføre koden vår, nemlig nå - variabelen "Resultat", siden vi ennå ikke har utført denne kodelinjen - vi har en tom verdi og datatypen til variabelen er "Udefinert".

La oss ta et skritt - å utføre den angitte kodelinjen. For å gjøre dette, trykk på tasten, eller i menyen Debug->Step through... (F 10).

Og hva ser vi i tablået vårt:

Vi ser med deg - verdien av variabelen og typen av variabelen. Nå kan vi også se innholdet i verditabellen vår, for å gjøre dette, flytt musepekeren til resultatfeltet, høyreklikk og velg "Vis verdi i et eget vindu"

Vi får opp et vindu med dokumentene vi har valgt, som ligger i Resultatvariabelen

Å oppsummere:

Du lærte hvordan du oppretter en enkel forespørsel, og var også med på å feilsøke koden din og så til og med på resultatet av forespørselen vår i konfiguratoren.

visninger