Uttrykk som en type i en 1C-forespørsel. S: Bedriften elsker "til venstre"

I denne artikkelen vil vi analysere mulighetene for typekonvertering i 1C-spørringsspråket, som leveres av "Express" -funksjonen.
La oss se på flere alternativer for å bruke denne funksjonen.
Og det første alternativet er å avrunde tall.

For å gjøre dette, må du bruke Express-funksjonen i følgende format:

Uttrykke(<Число>som nummer(<ДлинаЧисла>,<Точность>))

Hvor:
Tall— feltet som må avrundes
LengdeTallmaksimal lengde tall
Nøyaktighet— tallavrundingsnøyaktighet

Parametrene både lengde og presisjon må være positive heltall.
Se hvordan denne funksjonen fungerer på bildet nedenfor.

Den andre brukssaken er strengstøping. Svært ofte bruker konfigurasjoner strenger med ubegrenset lengde, noe som pålegger noen begrensninger. For eksempel kan vi ikke sammenligne strenger med ubegrenset lengde.
I spørringen nedenfor er FullName-feltet av typen streng med ubegrenset lengde, og denne spørringen vil ikke fungere.

For at det skal fungere, er det nødvendig å konvertere et felt med ubegrenset lengde til en streng med en viss lengde dette gjøres ved å bruke Express-funksjonen i følgende format:

Uttrykke(<Строка>som streng(<ДлинаСтроки>)

Hvor
Linjelengde– maksimal lengde som strengen skal reduseres til.
La oss omarbeide spørringen: i betingelsen vil vi konvertere en ubegrenset streng til en streng med en viss lengde. Da blir det ingen feil.

La oss vurdere det siste og, jeg vil si, det viktigste alternativet for bruken: når du arbeider med felt kompositt type.
Nedenfor er to spørringer som bruker sammensatte felt. Den første er feil og den andre er riktig.

De. Når du trenger å få et felt av en kompleks type, får du alltid verdien av dette feltet først etter å ha castet typen ved hjelp av Express-funksjonen. I dette tilfellet vil dokumentene og oppslagsbøkene ha følgende format:

Uttrykke(<Документ>som dokument.<ИмяТаблицы>)
Uttrykke(<Справочник>som en katalog.< ИмяТаблицы >)
.

Hvor
Tabellnavn— objektnavn i .

Bruk alltid ekspressfunksjonen når du arbeider med sammensatte typer, den optimerer spørringen betraktelig.

Hvis du fortsatt "svømmer" i konstruksjonene til spørringsspråket, og selv de enkleste spørringene forårsaker vanskeligheter for deg, anbefaler jeg deg kurset mitt "Spørringer i 1C fra nybegynner til proff." Hvor disse og mange andre problemstillinger diskuteres mer detaljert.

Hva er spesielt med dette kurset:
Kurset er laget for de som ikke er kjent med spørrespråket i 1C;
Pedagogisk materiale godt strukturert og lett å lære;
Flere dusin leksjoner;
Nyttige praktiske eksempler;
Alle leksjoner presenteres i et klart og enkelt språk

For mine lesere, 25% rabattkupong: hrW0rl9Nnx

Jeg prøver å gi ut ulike interessante gratis artikler og videoopplæringer så ofte som mulig. Derfor vil jeg være veldig glad hvis du støtter prosjektet mitt ved å overføre et hvilket som helst beløp:

Du kan overføre et hvilket som helst beløp direkte:
Yandex.Money - 410012882996301
Web Money - R955262494655

Bli med i gruppene mine.

La oss se på resten nå.

Funksjoner for arbeid med strenger i 1C-spørringer

Det er få funksjoner og operatorer for å jobbe med strengdata i 1C-spørringer.

For det første kan strenger i spørringer legges til. For å gjøre dette, bruk "+"-operatoren:

Forespørsel. Tekst = "VELG
" "Linje: " " + Kilde.Navn
;

For det andre kan du velge en del av linjen. For å gjøre dette, bruk funksjonen SUBSTRUKSJON. Funksjonen ligner på det innebygde 1C-språket. Den har tre parametere:

  1. Kildestreng.
  2. Nummeret på tegnet som den valgte linjen skal begynne med.
  3. Antall tegn.

Forespørsel. Tekst= "VELGE
SUBSTRING("
"Linje: " ", 4, 3) SOM RESULTAT";

// Resultat: ok Funksjon

ISNULL NULL er en spesiell datatype på 1C:Enterprise-plattformen. Han er den eneste mulig mening

denne typen. NULL kan vises i spørringer i flere tilfeller: når du kobler til spørringskilder, hvis en tilsvarende verdi ikke ble funnet i en av tabellene; når du får tilgang til detaljene til et ikke-eksisterende objekt; hvis NULL ble spesifisert i listen over søkefelt (for eksempel når du kombinerer utvalgsresultater fra flere tabeller), etc. Fordi NULL verken er null eller den tomme strengen, heller ikke en verdi Udefinert, det er ofte nyttig å erstatte den med en mer nyttig datatype. Det er dette funksjonen er laget for.

ISNULL.

  1. Den har to parametere:
  2. Verdien som kontrolleres.

Forespørsel. Tekst= "VELGE
Verdien som skal erstatte den første parameteren med hvis den viser seg å være NULL.
; ISNULL(Source.Remainder, 0) AS Remainder"
// Hvis resultatet av forespørselen er feltet rest = NULL,

// så vil den bli erstattet med 0, og du kan utføre matematiske operasjoner med den Funksjoner YTELSE Og

INTRODUKSJONSLINKER Disse funksjonene er designet for å oppnå strengrepresentasjoner forskjellige betydninger Funksjoner. Det vil si at de konverterer referanser, tall, booleaner osv. til ren tekst. Forskjellen mellom dem er at funksjonen Og konverterer alle datatyper til tekst (streng), og funksjonen

Forespørsel. Tekst= "VELGE
- bare linker, og returnerer de gjenværende verdiene som de er, ikke konvertert.
REPRESENTATION(TRUE) AS Boolean,
REPRESENTASJON (Source.Link) AS Link,
REPRESENTATION(DATETIME(2016,10,07)) AS Dato"
;
// Boolean = "Ja", Tall = "4", Link = "Forbruksdokument kontantbestilling Nei... fra..."
// Date="07.10.2016 0:00:00"

Forespørsel. Tekst= "VELGE
REPRESENTATIONREFERENCE(TRUE) AS Boolean,
REPRESENTASJONSREFERANSE(4) SOM NUMMER
PRESENTINGLINK(Source.Link) AS Link,
REPRESENTATIONREFERANCE(DATETIME(2016,10,07)) AS Date"
;
// Boolean = TRUE, Number = 4, Link = "Dokument Kontantkvitteringsordre nr... fra..."
// Dato=07.10.2016 0:00:00

// så vil den bli erstattet med 0, og du kan utføre matematiske operasjoner med den TYPE YTELSE TYPE VERDIER

// Resultat: ok TYPE returnerer datatypen 1C:Enterprise-plattform.

Forespørsel. Tekst= "VELGE
TYPE (nummer)
TYPE (streng),
TYPE (Dokument. Kontantordre for utgifter)"
;

// Resultat: ok TYPE VERDIER returnerer typen verdi som er sendt til den.

Forespørsel. Tekst= "VELGE
VERDIER TYPE (5) SOM Nummer,
TYPE ("
"Linje" ") AS-streng,
TYPE (Kilde.Link) AS Referanse
Fra Directory.Source AS Source"
;
//Number=Nummer, String=String, Directory = DirectoryLink.Source

Disse funksjonene er praktiske å bruke, for eksempel når du skal finne ut om et felt mottatt i en forespørsel er en verdi av en eller annen type. For eksempel vil vi innhente kontaktinformasjon til motparter fra kontaktinformasjonsregisteret (kontakter til ikke bare motparter, men også organisasjoner, enkeltpersoner osv.):

Forespørsel. Tekst= "VELGE

FRA

HVOR
VALUES TYPE(ContactInformation.Object) = TYPE(Katalog.Motparter)"
;

// Resultat: ok BETYDNING

// Resultat: ok Betydning lar deg bruke 1C-konfigurasjonsobjekter direkte i en forespørsel, uten å bruke .

La oss legge til en betingelse til i forrige eksempel. Du trenger bare å få telefonnumrene til dine motparter.

Forespørsel. Tekst= "VELGE
ContactInformation.Introduksjon
FRA
Register over informasjon Kontaktinformasjon HVORDAN kontaktinformasjon
HVOR
VALUES TYPE(ContactInformation.Object) = TYPE(Katalog.Motparter)
OG ContactInfo.Type = VERDI(Enum.ContactInfoTypes.Phone)"
;

Det skal bemerkes at denne funksjonen kun kan brukes med forhåndsdefinerte verdier, dvs. med verdier som kan nås direkte fra konfiguratoren. Det vil si funksjonen BETYDNING kan ikke brukes med katalogelementer opprettet av brukere, men kan arbeide med opplistinger, med forhåndsdefinerte katalogelementer, med verdier EmptyLink.

Operatør LINK

Operatør LINK er designet for å sjekke verdiene som returneres av en forespørsel for å se om de tilhører en spesifikk referansetype. Den samme oppgaven kan utføres ved hjelp av funksjoner TYPE YTELSE TYPE VERDIER(som har et bredere omfang og ble diskutert ovenfor).

For eksempel valgoppgaven kontaktinformasjon motparter kan løses på denne måten:

Forespørsel. Tekst= "VELGE
ContactInformation.Introduksjon
FRA
Register over informasjon Kontaktinformasjon HVORDAN kontaktinformasjon
HVOR
ContactInformation.Object LINK Directory.Counterparties"
;

Operatør UTTRYKKE

Operatør UTTRYKKE brukt i 1C-spørringer i to tilfeller:

  • når du trenger å endre egenskapene til en primitiv type;
  • når du trenger å gjøre om et felt med en sammensatt datatype til et felt med en enkelt type.

Primitive datatyper inkluderer: tall, streng, dato, boolsk. Noen av disse datatypene har tilleggsegenskaper. Type Tall har lengde og presisjon, type Linje - lengde eller ubegrenset.

Operatør UTTRYKKE lar deg endre ikke datatypen, men tilleggsegenskaper. For eksempel kan han gjøre om en streng med ubegrenset lengde til en streng med begrenset lengde. Dette kan være nyttig hvis du trenger å gruppere søkeresultater etter et slikt felt. Du kan ikke gruppere etter felt med ubegrenset lengde, så vi konverterer den til en streng med en lengde på 200 tegn.

Forespørsel. Tekst= "VELGE
KVANTITET (forskjellig ankomst av varer og tjenester. Link) AS Link
FRA
Dokumenter mottak av varer og tjenester HVORDAN mottak av varer og tjenester
GRUPPE ETTER
EXPRESS(mottak av varer og tjenester. Kommentar SOM RAD (200))"
;

I noen tilfeller kan det hende at spørsmål til felt med en sammensatt datatype ikke behandles optimalt av 1C-plattformen. Dette resulterer i lengre spørretider, så det kan være nyttig å konvertere en sammensatt type til en enkelt type på forhånd.

Forespørsel. Tekst= "VELGE
EXPRESS(Movement of GoodsTurnover.Order AS Document.Customer Order).Dato AS Order Date,
Bevegelse av varer Omsetning.Nomenklatur
FRA
Registrer Akkumuleringer.Movement of Goods.Turnover AS Movement of GoodsOmsetning
HVOR
Movement of GoodsTurnover.Order LINK Document.Client Order"
;

Operatører VALG YTELSE ER NULL

Operatør VALG ligner på operatør HVIS i det innebygde 1C-språket, men har noe redusert funksjonalitet.

La oss si at vi ønsker å motta kontaktinformasjon fra kontaktinformasjonsregisteret og samtidig angi i et eget forespørselsfelt om den tilhører en motpart eller en enkeltperson.

Forespørsel. Tekst= "VELGE
ContactInformation.Introduction,
VALG
NÅR VERDIER TYPE(Kontaktinformasjon.Objekt) = TYPE(Katalog.Motparter)
SÅ"
Motpart "
ANNET VALG
NÅR VERDIER TYPE(Kontaktinformasjon.Objekt) = TYPE(Katalog.Individualer)
SÅ"
Individuell"
ANDET "Noen andre" "
SLUTT
SLUTT SOM EIER
FRA
Register over informasjon Kontaktinformasjon AS.
;

Som det fremgår av eksempelet, i designet VALG det er alltid en betingelse etter ordet NÅR; verdi brukt hvis betingelsen er sann etter ordet DA og verdien brukt hvis betingelsen ikke er oppfylt, etter ordet NOE ANNET. Alle tre designelementene VALG er obligatoriske. Utelat element NOE ANNET, på samme måte som når du bruker operatøren HVIS i det innebygde 1C-språket er det umulig. Også fra operatøren VALG det er ingen analog til designet ELSEIF, men du kan investere en VALG i en annen, slik det ble gjort i vårt eksempel.

Operatør ER NULL brukt i design VALG for å sammenligne et spørringsfelt med typen NULL.

Forespørsel. Tekst= "VELGE
VALG
NÅR VERDEN ER NULL, SÅ 0
ELSE Betydning
SLUTT"
;

I tillegg kommer operatøren ER NULL kan brukes i spørringsforhold, for eksempel i en setning HVOR.

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. Grunnlag for bruk av dette nøkkelord Brukeren vil 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.

Å ENDRE

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
Å ENDRE

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å 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 kropp.

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
Dokumenter mottak av varer og tjenester
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 er forskjellig fra tidligere emner, at som et resultat vil alle poster fra både det første og det andre bordet bli returnert. Hvis iht gitt tilstand Hvis det ikke finnes noen poster i den første eller andre tabellen, 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

Forskjell INTERN BLI MEDLEM fra FULL er at hvis en post ikke finnes i minst én av tabellene, vil ikke spørringen 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 ETTER

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

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

VELGE
,
MAX(Price.Price) AS Pris
FRA

GRUPPE ETTER
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)
VED
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 ETTER
Priser.Nomenklatur.Type nomenklatur
HA
MAKSIMUM(Priser.Pris) > 1000

BESTILL PÅ

Operatoren ORDER BY sorterer resultatet av en spørring. For å sikre at poster vises i en konsistent rekkefølge, brukes AUTO ORDER. Primitive typer er sortert 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
BESTILL PÅ
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.
  • STED– 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 spesifisert tid fra en dato bestemt type(ANDRE, MINUTT, DAG osv.).
  • FORSKJELL DATO bestemmer forskjellen mellom to datoer, og indikerer typen utdataverdi (DAG, ÅR, MÅNED, osv.).
  • Funksjon 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.
  • DATETIME 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 å se 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 .

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

1C Språkfunksjoner

Fordi en klar beskrivelse 1C spørresprå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 DATETIME - denne funksjonen oppretter et konstant felt av typen "Dato".

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

Eksempel på bruk:

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>, <Тип>)

Eksempel på bruk:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Number of 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(<Имя>)

Eksempel på bruk:

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 VERDI(Kontoplan. Egenregnskap.Material) 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<Выражение>DA<Выражение>NOE ANNET<Выражение>SLUTT

Eksempel på bruk:

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 så funksjonen //returnerer Beløp - 300 //ellers vil forespørselen ganske enkelt returnere Beløp "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)

Eksempel på bruk:

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

Et annet alternativ er å bruke EXPRESS-funksjonen i felt blandede typer hvor finnes disse? 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, må vi spesifisere en eksplisitt type ved å bruke EXPRESS-funksjonen

Eksempel på bruk:

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(<Поле>, <ПодставляемоеЗначение>)

Eksempel på bruk:

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) HVORDAN Gjenstående |.Nomenclature AS No. |.

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

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

Eksempel på bruk:

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

Konstruerer i 1C spørrespråk

Vi diskuterte med deg ovenfor 1C spørresprå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<Имя таблицы>

Eksempel på bruk:

Request.Text = //hvis verditypen er logger dokument Entre, //så vil forespørselen returnere "mottak av varer", ellers "salg av varer" "VELG | VELG | NÅR Rester. Registrar LINK-dokument. Mottak av varer og tjenester | SÅ ""Kvittering"" | ELSE ""Forbruk" " | END AS Bevegelsestype |FRA | Akkumuleringsregister. Resterende varer i lager AS Rester" ;

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

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

Eksempel på bruk:

Request.Text = //hent hele nomenklaturen hvis kode ligger 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(<СписокЗначений>)

Eksempel på bruk:

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: LIKER "<ТекстШаблона>"

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.

Eksempel på bruk:

Query.Text = //finn hele nomenklaturen som inneholder roten TABUR og begynner //enten med en liten bokstav eller med store bokstaver t "VELG | Nomenklatur. Link | FRA | Katalog. Nomenklatur AS Nomenklatur | HVOR | Produkter. Navn 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 er skrevet etter nøkkelordet SELECT

Eksempel på bruk:

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 skrives etter nøkkelordet SELECT

Eksempel på bruk:

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.

Eksempel på bruk:

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<число>

Eksempel på bruk:

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: Å ENDRE<НаименованиеТаблицы>

Eksempel på bruk:

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 lenkerpresentasjon hvis flagget er slått av, sorteres koblinger etter ansienniteten til lenkeadressen i minnet.

Syntaks: BESTILL PÅ<НаименованиеПоля>AUTO BESTILLING

Eksempel på bruk:

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

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 ETTER<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Eksempel på bruk:

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<агрегатная функция с условием>

Eksempel på bruk:

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>

Eksempel på bruk:

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>

Eksempel på bruk:

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>VED<ОБЩИЕ> <Поле1, ... , ПолеN>

Eksempel på bruk:

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.

Oppmerksomhet! Dette er en introduksjonsversjon av leksjonen, hvis materiell kan være ufullstendig.

Logg inn på siden som student

Logg på som elev for å få tilgang til skolemateriell

Spørringsspråk 1C 8.3 for nybegynnere programmerere: funksjoner og operatorer for å arbeide med typer (VERDITYPE, TYPE, REFERENSE, ISNULL, EXPRESS)

La oss huske at hvert attributt (egenskap, felt) til en katalog, et dokument eller et annet applikasjonsobjekt har sin egen type. Og vi kan se på denne typen i konfiguratoren:

I spørringsspråket er det en hel klasse med funksjoner og operatorer for å jobbe med typer detaljer. La oss se på dem.

VERDI TYPE funksjon

Denne funksjonen tar én parameter (verdi) og returnerer typen. For rekvisittene beskrevet på bildet (over) Smak katalog Mat følgende vil bli returnert:

La oss nå se på rekvisittene Særtrekk i katalogen Byer:

Du ser at dette attributtet kan være én av flere typer: Linje, Directory.Tastes, Directory.Colors. Denne typen detaljer kalles KOMPOSITT.

Hvis vi prøver å fylle ut verdien av en slik detalj i 1C:Enterprise-modus, vil systemet spørre oss hvilken type verdi som vil bli lagt inn:

Og først etter vårt valg vil det tillate oss å angi verdien av den valgte typen.

Dermed katalogelementer av samme type ( Directory.Cities) vil kunne lagre i samme attributt ( Særtrekk) verdier forskjellige typer(streng, farger eller smaker).

Du kan se dette selv ved å klikke på elementene i katalogen Byer i 1C:Enterprise-modus. Du leser en prøveversjon av leksjonen, fulle leksjoner er tilgjengelige.

Her er meningen særpreg er et katalogelement Smaker:

Her er linjen:

Og her er generelt et element i oppslagsboken Farger:

Dette er mulighetene en sammensatt datatype åpner for oss!

Jeg lurer på hvordan funksjonen vil oppføre seg TYPE VERDIER på rekvisittene DistinctiveElement, som har en sammensatt datatype:

Dette er allerede veldig interessant. La oss se på hver linje individuelt.

Type verdi av det særegne for elementet Russland er lik NULL. Dette er første gang vi har støtt på denne typen. Verdier av denne typen brukes utelukkende for å bestemme den manglende verdien når du arbeider med databasen.

Dette er sant, fordi Russland-elementet er en gruppe, og ikke et vanlig katalogelement Byer, så den har ikke noe felt Særtrekk. Og typen manglende verdi, som vi leste ovenfor, er alltid lik NULL.

Type verdi av det særegne for Perm er lik Smaker. Det er riktig, fordi verdien av den karakteristiske funksjonen som er lagt inn i databasen for byen Perm er en lenke til katalogelementet Smaker.

For Krasnoyarsk er typen attributt lik Farger, fordi verdien valgt i databasen er en kobling til et katalogelement Farger.

For Voronezh er typen attributt lik Linje, fordi verdien angitt i databasen er en vanlig streng.

India er en gruppe igjen, så det har ingen betydning. Og typen av den manglende verdien, som vi husker, er lik NULL.

Her er tingen. Hvis du går til katalogelementet Byer med navn São Paulo, så vil du se at feltet Særtrekk ikke fylt ut i det hele tatt. Det er tomt. EN alle tomme felt av en sammensatt type har en spesiell betydning UDEFINERT.

MED UDEFINERT vi møter også for første gang. Betydning UDEFINERT brukes når det er nødvendig å bruke en tom verdi som ikke tilhører noen annen type. Dette er akkurat vår situasjon. Og verditypen UDEFINERT, som du sikkert allerede har gjettet, er lik NULL.

Funksjon TYPE

Det tar bare én parameter - navnet på den primitive typen ( LINJE, TALL, DATO, BOOLEAN), eller navnet på tabellen hvis koblingstype du ønsker å hente.

Resultatet av denne konstruksjonen vil være en verdi av typen Type for den angitte typen.

Høres vagt ut, ikke sant?

La oss se på bruken av dette designet, og alt vil umiddelbart falle på plass.

Anta at vi må velge alle katalogoppføringer Byer, som har sammensatte rekvisitter Særtrekk har en typeverdi LINJE:

La oss nå velge alle poster som har attributtverdier Særtrekk er lenker til katalogelementer Farger(bord Directory.Colors):

Trekke seg tilbake

Som du husker, noen elementer i katalogen Byer har ikke rekvisitter Særtrekk. Funksjon TYPE VERDIER for slike elementer den produserer NULL.

Hvordan kan du velge slike elementer i en spørring? En spesiell logisk operatør er gitt for dette ER NULL(ikke å forveksle med funksjonen Funksjon, som vi skal se på nedenfor). Du leser en prøveversjon av leksjonen, fulle leksjoner er tilgjengelige.

Her er et eksempel på bruken:

Stor. Men la du merke til at det ikke er noe element av Sao Paulo, rekvisitter verdi type Særtrekk som han også ga ut NULL. Hvorfor skjedde dette?

Men saken er at situasjonen er for grupper (Russland, India, Brasil), som fyller ut detaljene Særtrekk umulig i prinsippet, siden de ikke har det i det hele tatt, skiller seg fra situasjonen for Sao Paulo-elementet, der det er mulig å fylle ut rekvisitter, men det er rett og slett ikke fylt ut og er lik, som vi husker, til en spesiell verdi UDEFINERT.

For å velge alle poster som har de nødvendige Særtrekk tilstede, men ikke fylt, bør en annen konstruksjon brukes:

Men sammenligning med UDEFINERT for å bestemme tomme (ufylte) attributter vil bare fungere for sammensatte typer.

Forresten, den logiske operatoren IS NULL har en negasjonsform som ser slik ut:

Logisk operatør LINK

La oss for eksempel velge fra katalogen Byer bare de postene som har verdien av et sammensatt attributt Særtrekk er en kobling til et katalogelement Smaker:

Som du husker, kunne vi løse det samme problemet ved å bruke TYPE VERDIER Og TYPE:

Funksjon ISNULL

Funksjonen er laget for å erstatte en verdi NULL til en annen betydning.

Vi husker at meningen NULL returneres hvis det forespurte attributtet (felt, egenskap) ikke eksisterer.

For eksempel rekvisitter Særtrekk for kataloggrupper Byer:

// Resultat: ok Funksjon vil hjelpe oss å skrive ut en annen verdi hvis denne verdien er lik NULL. Du leser en prøveversjon av leksjonen, fulle leksjoner er tilgjengelige. La i dette tilfellet være linjen "Det er ingen slik rekvisitt!":

Det viser seg at hvis den første parameteren til funksjonen Funksjon ikke like NULL, så kommer han tilbake. Hvis den er NULL, returneres den andre parameteren.

EXPRESS-funksjon

Denne funksjonen er kun for felt som har en sammensatt type. Et utmerket eksempel på et slikt felt er eiendommen Særtrekk for katalogelementer Byer.

Som vi husker, kan sammensatte felt være en av flere typer spesifisert i konfiguratoren.

For felt Særtrekk slike gyldige typer er LINJE, Directory.Colors Og Directory.Tastes.

Noen ganger er det behov for å kaste verdiene til et sammensatt felt til en bestemt type.

La oss liste alle feltverdier Særtrekkå skrive Referanse.Farger:

Som et resultat, alle elementverdier som var av typen Directory.Colors, forble fylt og ble konvertert til den angitte typen. Alle verdier av andre typer ( LINJE, Directory.Tastes) er nå like NULL. Dette er det særegne ved typestøping ved hjelp av funksjonen UTTRYKKE.

Du kan kaste en type enten til en primitiv type ( BOOLEAN, TALL, LINJE, DATO) eller til en referansetype. Du leser en prøveversjon av leksjonen, fulle leksjoner er tilgjengelige. Men typen som støpen lages til må inkluderes i listen over typer for dette komposittfeltet, ellers vil systemet gi en feil.

Ta testen

Start testen

1. Velg det mest korrekte utsagnet

2. Detaljer som kan ta verdier av en av flere typer kalles

3. For å bestemme typen attributtverdi, bruk funksjonen

4. Tomme detaljer av en kompositttype er viktig