Udtryk i en forespørgsel 1s 8.2. Document.Expenditure AS Udgifter

Lad os se på resten nu.

Funktioner til at arbejde med strenge i 1C-forespørgsler

Der er få funktioner og operatorer til at arbejde med strengdata i 1C-forespørgsler.

Først kan strenge i forespørgsler tilføjes. Operatoren "+" bruges til dette:

Anmodning. Tekst="VÆLG
" "Linje: " " + Kilde.Navn
;

For det andet kan du vælge en del af strengen. Til dette bruges funktionen SUBSTRING. Funktionen ligner det indbyggede sprog 1C. Den har tre muligheder:

  1. Kildestreng.
  2. Nummeret på det tegn, hvorfra den valgte streng skal begynde.
  3. Karakterer.

Anmodning. Tekst= "VÆLGE
SUBSTRING("
"Linje:" ", 4, 3) SOM resultat"; // Resultat: øje

Fungere ER NULL

NULL er en speciel datatype på 1C:Enterprise platformen. Det er også den eneste mulige værdi af denne type. NULL kan forekomme i forespørgsler i flere tilfælde: ved tilslutning af forespørgselskilder, hvis den tilsvarende værdi ikke blev fundet i en af ​​tabellerne; når du får adgang til detaljerne om et ikke-eksisterende objekt; hvis NULL var angivet i listen over forespørgselsfelter (f.eks. når resultaterne af et udvalg fra flere tabeller kombineres) osv.

Da NULL hverken er null eller den tomme streng eller endda en værdi Udefineret, det er ofte nyttigt at erstatte det med en mere nyttig datatype. Det er hvad funktionen er til. ER NULL.

Den har to muligheder:

  1. Værdien, der skal kontrolleres.
  2. Værdien, der skal erstattes den første parameter med, hvis den er NULL.

Anmodning. Tekst= "VÆLGE
ISNULL(Source.Remainder, 0) AS Remainder"
; // Hvis feltet rest=NULL som følge af anmodningen,
// så vil det blive erstattet af 0, og det vil være muligt at udføre matematiske operationer med det

Funktioner YDEEVNE og PRÆSENTATIONSLINKS

Disse funktioner er designet til at få strengrepræsentationer af forskellige værdier. Det vil sige, at de konverterer referencer, tal, booleaner osv. til almindelig tekst. Forskellen mellem dem er, at funktionen YDEEVNE konverterer alle datatyper til tekst (streng) og funktionen PRÆSENTATIONSLINKS- kun links, og returnerer de resterende værdier, er ikke konverteret.

Anmodning. Tekst= "VÆLGE
PRESENT(TRUE) SOM en Boolean,
REPRÆSENTATION (4) SOM ET TAL,
PRESENT(Source.Reference) SOM reference,
REPRESENTATION(DATETIME(2016,10,07)) AS Date"
;
// Boolean = "Ja", Tal = "4", Reference = "Dokument kontantkupon #... dateret..."
// Date="10/07/2016 0:00:00"

Anmodning. Tekst= "VÆLGE
REFERENCEREPRÆSENTATION (SAND) SOM en boolesk,
REFERENCEREPRÆSENTATION (4) SOM Nummer,
REPRESENTATIONLINK(Source.Link) AS Link,
REFERENCEREPRÆSENTATION(DATETIME(2016,10,07)) SOM Dato"
;
// Boolean = TRUE, Tal = 4, Ref = "Dokument Cash voucher #... dateret..."
// Dato=07.10.2016 0:00:00

Funktioner TYPE og VÆRDITYPE

Fungere TYPE returnerer datatypen for 1C:Enterprise-platformen.

Anmodning. Tekst= "VÆLGE
TYPE (antal) ,
TYPE(streng),
TYPE (Dokument. Udgående kontantordre)"
;

Fungere VÆRDITYPE returnerer typen af ​​den værdi, der sendes til den.

Anmodning. Tekst= "VÆLGE
VALUETYPE(5) AS nummer,
TYPE ("
"Linje" ") AS-streng,
TYPE(Source.Reference) AS Reference
Fra Directory.Source AS Source"
;
//Number=Number, String=String, Directory = DirectoryReference.Source

Disse funktioner er praktiske at bruge, for eksempel når du skal finde ud af, om feltet modtaget i anmodningen er en værdi af en eller anden type. For eksempel vil vi få kontaktoplysninger på modparter fra kontaktinformationsregistret (kontakter gemmes der ikke kun for modparter, men også for organisationer, enkeltpersoner osv.):

Anmodning. Tekst= "VÆLGE

FRA

HVOR
VALUE TYPE(ContactInformation.Object) = TYPE(Bibliotek.Konti)"
;

Fungere BETYDER

Fungere Betyder giver dig mulighed for at bruge 1C-konfigurationsobjekter direkte i anmodningen uden at bruge .

Lad os supplere det foregående eksempel med endnu en betingelse. Du skal kun få telefoner fra modparter.

Anmodning. Tekst= "VÆLGE
ContactInformation.View
FRA
Register over oplysninger Kontaktoplysninger AS Kontaktoplysninger
HVOR
VALUE TYPE(Kontaktoplysninger.Objekt) = TYPE(Katalog.Konti)
AND ContactInformation.Type = VALUE(Enumeration.ContactInformation Types.Phone)"
;

Bemærk at denne funktion kun kan bruges med foruddefinerede værdier, dvs. med værdier, der kan tilgås direkte fra konfiguratoren. Det er funktionen BETYDER kan ikke bruges med brugeroprettede opslagselementer, men kan arbejde med opregninger, med foruddefinerede opslagselementer, med værdier EmptyLink.

Operatør LINK

Operatør LINK er designet til at kontrollere de værdier, der modtages af anmodningen om at tilhøre en specifik referencetype. Den samme opgave kan udføres ved hjælp af funktionerne TYPE og VÆRDITYPE(som har et bredere anvendelsesområde og er blevet diskuteret ovenfor).

For eksempel kunne opgaven med at vælge modparters kontaktoplysninger løses således:

Anmodning. Tekst= "VÆLGE
ContactInformation.View
FRA
Register over oplysninger Kontaktoplysninger AS Kontaktoplysninger
HVOR
Kontaktoplysninger.Objekt LINK Directory.Modparter"
;

Operatør UDTRYKKE

Operatør UDTRYKKE brugt i 1C-forespørgsler i to tilfælde:

  • når du skal ændre egenskaberne for en primitiv type;
  • når det er nødvendigt at lave et felt med en enkelt type fra et felt med en sammensat datatype.

Primitive datatyper omfatter: tal, streng, dato, boolesk. Nogle af disse datatyper har yderligere egenskaber. Type Nummer har længde og præcision, type Linje - længde eller ubegrænset.

Operatør UDTRYKKE giver dig mulighed for at ændre ikke datatypen, men yderligere egenskaber. For eksempel kan han lave en streng med en begrænset længde af en streng med ubegrænset længde. Dette er nyttigt, hvis du vil gruppere forespørgselsresultater efter et sådant felt. Det er ikke muligt at gruppere efter felter med ubegrænset længde, så vi konverterer det til en streng med en længde på 200 tegn.

Anmodning. Tekst= "VÆLGE
MÆNGDE(ANDRE INDKOMST AF VARER/TJENESTER.REF) SOM REF
FRA
Dokument.Modtagelse af varer/ydelser AS Modtagelse af varer/ydelser
GRUPPE EFTER
EXPRESS(Indkommende varer/tjenester. Kommentar SOM EN STRING(200))"
;

I nogle tilfælde kan anmodninger om felter med en sammensat datatype muligvis ikke behandles optimalt af 1C-platformen. Dette fører til øget udførelsestid for forespørgsler, så det kan være nyttigt at konvertere en sammensat type til en enkelt type på forhånd.

Anmodning. Tekst= "VÆLGE
EXPRESS(Bevægelse af vareomsætning.Ordre SOM Dokument.Kundeordre).Dato SOM Bestillingsdato,
Omsætning af gods. Nomenklatur
FRA
Akkumuleringsregister Varebevægelser Omsætning AS Flytning af varer Omsætning
HVOR
Bevægelse af vareomsætning. Ordre LINK Dokument. Ordre af kunden"
;

Operatører VALG og ER NULL

Operatør VALG ligner operatør HVIS i det indbyggede 1C-sprog, men har en noget afkortet funktionalitet.

Antag, at vi ønsker at få kontaktoplysninger fra kontaktinformationsregistret og samtidig angive i et separat anmodningsfelt, om de tilhører en modpart eller en person.

Anmodning. Tekst= "VÆLGE
Kontaktinformation.Repræsentation,
VALG
WHEN VALUE TYPE(Kontaktoplysninger.Objekt) = TYPE(Katalog.Konti)
DEREFTER "
modpart "
ANDET VALG
WHEN VALUE TYPE(Kontaktoplysninger.Objekt) = TYPE(Katalog.Personer)
DEREFTER "
Individuel"
ANDET "En anden "
SLUTTEN
SLUT SOM EJER
FRA
Register over oplysninger. Kontaktoplysninger AS Kontaktoplysninger"
;

Som det kan ses af eksemplet, i designet VALG der er altid en betingelse efter ordet HVORNÅR; den værdi, der skal anvendes, hvis betingelsen er sand, efter ordet DEREFTER og den anvendte værdi, hvis betingelsen ikke er opfyldt efter ordet ELLERS. Alle tre strukturelle elementer VALG er obligatoriske. Udelad element ELLERS, ligesom det gøres ved brug af operatøren HVIS i det indbyggede sprog 1C er det umuligt. Også operatøren VALG der er ingen analog til designet ELSEIF, men du kan sætte en VALG i den anden, som det blev gjort i vores eksempel.

Operatør ER NULL bruges i byggeriet VALG for at sammenligne anmodningsfeltet med NULL-typen.

Anmodning. Tekst= "VÆLGE
VALG
NÅR værdien ER NULL SÅ 0
ELSE Betydning
SLUTTEN"
;

Hertil kommer operatøren ER NULL kan bruges i forespørgselsbetingelser, for eksempel i en sætning HVOR.

I denne artikel vil vi analysere mulighederne for typecasting i 1C-forespørgselssproget, som "Express"-funktionen giver.
Lad os se på nogle få muligheder for at bruge denne funktion.
Og den første mulighed er at afrunde tal.

For at gøre dette skal du bruge Express-funktionen i følgende format:

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

Hvor:
Nummer— felt, den parameter, der skal afrundes
LængdeNumber- maksimal antal længde
Nøjagtighed- tal afrunding nøjagtighed

Parametrene og længden og præcisionen skal være positive heltal.
Se, hvordan denne funktion fungerer i figuren nedenfor.

Den anden use case er strengstøbning. Meget ofte bruges strenge af ubegrænset længde i konfigurationer, hvilket pålægger nogle begrænsninger. For eksempel kan vi ikke sammenligne strenge med ubegrænset længde.
I forespørgslen nedenfor er feltet FullName af typen ubegrænset længde streng, og denne forespørgsel vil ikke fungere.

For at det skal virke, skal du konvertere et felt med ubegrænset længde til en streng med en bestemt længde, dette gøres ved hjælp af Express i følgende formatfunktion:

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

Hvor
Strengelængde- den maksimale længde, som strengen reduceres til.
Lad os lave forespørgslen om: i betingelsen vil vi bringe en ubegrænset streng til en streng med en vis længde. Så er der ingen fejl.

Lad os overveje den sidste og, vil jeg sige, den vigtigste variant af dens anvendelse: når du arbejder med felter af en sammensat type.
Nedenfor er to forespørgsler, der bruger sammensatte typefelter. Den første er forkert og den anden er korrekt.

De der. når du har brug for at få et felt af en eller anden sammensat type, skal du altid få værdien af ​​dette felt først efter typestøbning ved hjælp af Express-funktionen. I dette tilfælde vil formatet for dokumenter og mapper være som følger:

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

Hvor
Tabelnavn— navnet på objektet i .

Brug altid ekspresfunktionen, når du arbejder med sammensatte typer, dette optimerer forespørgslen i høj grad.

Hvis du stadig "svæver" i konstruktionerne af forespørgselssproget, og selv de simpleste forespørgsler volder dig vanskeligheder, så anbefaler jeg dig mit kursus "Forespørgsler i 1C fra begynder til professionel". Hvor disse og mange andre spørgsmål diskuteres mere detaljeret.

Hvad er specielt ved dette kursus:
Kurset er designet til dem, der ikke er fortrolige med forespørgselssproget i 1C;
Træningsmaterialet er velorganiseret og let at lære;
Flere dusin lektioner;
Nyttige praktiske eksempler;
Alle lektioner præsenteres i et klart og enkelt sprog.

Til mine læsere, 25% rabatkupon: hrW0rl9Nnx

Jeg forsøger at frigive forskellige interessante gratis artikler og videotutorials så ofte som muligt. Derfor vil jeg blive meget glad, hvis du støtter mit projekt ved at overføre ethvert beløb:

Du kan overføre ethvert beløb direkte:
Yandex.Money — 410012882996301
Webpenge - R955262494655

Deltag i mine grupper.

Forespørgselssproget er en af ​​de grundlæggende mekanismer i 1C 8.3 for udviklere. Ved hjælp af forespørgsler kan du hurtigt få alle data gemt i databasen. Dens syntaks ligner meget SQL, men der er nogle forskelle.

De vigtigste fordele ved 1C 8.3 (8.2) forespørgselssproget i forhold til SQL:

  • dereferencereferencefelter (vending af en eller flere prikker til objektattributter);
  • arbejde med resultaterne er meget bekvemt;
  • evnen til at oprette virtuelle tabeller;
  • anmodningen kan skrives både på engelsk og russisk;
  • muligheden for at blokere data for at undgå dødvande.

Ulemper ved forespørgselssproget i 1C:

  • i modsætning til SQL tillader 1C-forespørgsler dig ikke at ændre data;
  • mangel på lagrede procedurer;
  • umuligheden af ​​at konvertere en streng til et tal.

Overvej vores mini-tutorial om de grundlæggende konstruktioner af 1C-forespørgselssproget.

På grund af det faktum, at anmodninger i 1C kun tillader dig at modtage data, skal enhver anmodning begynde med ordet "SELECT". Efter denne kommando er de felter, du ønsker at hente data fra, angivet. Hvis du angiver "*", vil alle tilgængelige felter blive valgt. Det sted, hvorfra dataene vil blive valgt (dokumenter, registre, mapper osv.) er angivet efter ordet "FRA".

I eksemplet nedenfor er navnene på hele nomenklaturen valgt fra referencebogen "Nomenklatur". Efter ordet "HOW" er aliaser (navne) for tabeller og felter angivet.

VÆLGE
Nomenclature.Name AS NavnNomenclature
FRA
Katalog Nomenklatur AS Nomenklatur

Ved siden af ​​kommandoen "SELECT" kan du angive nøgleord:

  • FORSKELLIGE. Forespørgslen vil kun vælge rækker, der adskiller sig i mindst ét ​​felt (uden dubletter).
  • FØRSTE n, hvor n– antallet af rækker fra begyndelsen af ​​resultatet, der skal vælges. Oftest bruges denne konstruktion i forbindelse med sortering (ORDER BY). For eksempel når du skal vælge et bestemt antal af de seneste dokumenter efter dato.
  • TILLADT. Dette design giver dig mulighed for fra databasen kun at vælge de poster, der er tilgængelige for den aktuelle bruger. Hvis dette søgeord bruges, vil brugeren modtage en fejlmeddelelse, hvis de forsøger at forespørge poster, de ikke har adgang til.

Disse nøgleord kan bruges alle sammen eller hver for sig.

TIL FORANDRING

Denne klausul låser data for at undgå konflikter. Låste data vil ikke blive læst fra en anden forbindelse før slutningen af ​​transaktionen. I denne klausul kan du angive specifikke tabeller, som du vil låse. Ellers vil alle blive blokeret. Designet er kun relevant for den automatiske blokeringstilstand.

Oftest bruges "FOR FORANDRING"-klausulen ved modtagelse af saldi. Faktisk, når flere brugere arbejder i programmet på samme tid, mens den ene modtager saldi, kan den anden ændre dem. I dette tilfælde vil den resulterende saldo ikke længere være korrekt. Hvis du blokerer dataene med dette forslag, så indtil den første medarbejder modtager den korrekte saldo og udfører alle de nødvendige manipulationer med den, skal den anden medarbejder vente.

VÆLGE
Gensidige forlig. Medarbejder,
Gensidige afregninger Beløb Gensidige afregninger Saldo
FRA
Akkumuleringsregister. Gensidige Afregninger MED Medarbejdere. Saldi AS Gensidige Afregninger
TIL FORANDRING

HVOR

Konstruktionen er nødvendig for at påtvinge ethvert valg på de aflæstede data. I nogle tilfælde af indhentning af data fra registre er det mere rimeligt at foreskrive udvælgelsesbetingelser i parametrene for virtuelle tabeller. Ved brug af "WHERE" indhentes alle poster først, og først derefter anvendes valget, hvilket bremser forespørgslen betydeligt.

Det følgende er et eksempel på en anmodning om at få kontaktpersoner med en bestemt stilling. Valgparameteren har følgende format: &ParameterName (parameternavnet er vilkårligt).

UDVALG (CASE)

Konstruktionen giver dig mulighed for at specificere betingelser direkte i anmodningsteksten.

I eksemplet nedenfor vil "AdditionalField" indeholde tekst, afhængigt af om dokumentet er bogført eller ej:

VÆLGE
AdmissionT&U.Link,
VALG
HVORNÅR
SÅ "Dokument sendt!"
ELSE "Dokument blev ikke sendt..."
AFSLUT SOM Ekstrafelt
FRA
Document.Receipt of GoodsServices AS ReceiptT&C

TILSLUTTE

Forener sammenkæder med to tabeller med en bestemt linkbetingelse.

VENSTRE/HØJRE JOIN

Essensen af ​​LEFT join er, at den første specificerede tabel tages fuldstændigt, og den anden er knyttet til den af ​​forbindelsens tilstand. Hvis der ikke er nogen poster, der svarer til den første tabel i den anden, erstattes NULL som deres værdier. Enkelt sagt er hovedtabellen den først specificerede tabel, og dataene i den anden tabel (hvis nogen) er allerede erstattet af dens data.

Fx skal du hente varevarer fra dokumenterne "Modtagelse af varer og ydelser" og priser fra informationsregistret "Varepriser". I dette tilfælde, hvis prisen på en position ikke findes, skal du erstatte NULL i stedet. Alle varer fra dokumentet vil blive valgt, uanset om de har en pris eller ej.

VÆLGE
Modtagelse af T&U. Nomenklatur,
Priser.Pris
FRA
Document.Receipt of GoodsServices.Goods AS ReceiptT&C
INDRE JOIN
VED modtagelse af Q&A.Nomenklatur = Priser.Nomenklatur

I RET er alt præcis det modsatte.

FULD FORBINDELSE

Denne type join adskiller sig fra de tidligere ved, at alle poster i både den første tabel og den anden vil blive returneret som et resultat. Hvis der ikke findes nogen poster i den første eller anden tabel for den angivne linkbetingelse, returneres NULL i stedet.

Når du bruger den fulde sammenføjning i det foregående eksempel, vil alle varevarer fra vare- og servicemodtagelsesdokumentet og alle de seneste priser fra vareprisregistret blive valgt. Værdierne for ikke-fundne poster, både i den første og den anden tabel, vil være NULL.

INDRE JOIN

Forskellen mellem en INNER join og en FULL join er, at hvis en post ikke findes i mindst én af tabellerne, så vil forespørgslen slet ikke vise den. Som følge heraf vil kun de varevarer fra vare- og servicemodtagelsesdokumentet blive valgt, for hvilke der er indtastninger i vareprisernes informationsregister, hvis vi i det foregående eksempel erstatter FULD med INTERN.

GRUPPE EFTER

Gruppering i 1C-forespørgsler giver dig mulighed for at skjule tabelrækker (grupperingsfelter) i henhold til et bestemt fællestræk (grupperingsfelter). Grupperingsfelter kan kun vises ved hjælp af aggregerede funktioner.

Resultatet af den næste forespørgsel vil være en liste over varetyper med deres maksimumpriser.

VÆLGE
,
MAX(Price.Price) AS Pris
FRA

GRUPPE EFTER
Priser.Nomenklatur.TypeNomenklatur

RESULTATER

I modsætning til gruppering, når du bruger totaler, vises alle poster, og samlede rækker er allerede føjet til dem. Gruppering viser kun generaliserede poster.

Resultaterne kan opsummeres for hele tabellen (ved hjælp af nøgleordet "GENERAL"), for flere felter, for felter med en hierarkisk struktur (søgeord "HIERARKI", "KUN HIERARKI"). Ved opsummering er det ikke nødvendigt at bruge aggregerede funktioner.

Overvej et eksempel svarende til eksemplet ovenfor ved at bruge gruppering. I dette tilfælde returnerer forespørgselsresultatet ikke kun grupperede felter, men også detaljerede poster.

VÆLGE
Priser.Nomenklatur.Nomenklaturtype AS Nomenklaturtype,
Priser.Pris AS Pris
FRA
RegisterInformation.PricesNomenclature.SliceLast AS Priser
RESULTATER
MAKSIMUM(pris)

Type nomenklatur

AT HAVE

Denne operator ligner WHERE-operatoren, men bruges kun til aggregerede funktioner. Andre felter end dem, der bruges af denne operatør, skal grupperes. "WHERE"-operatoren gælder ikke for aggregerede funktioner.

I eksemplet nedenfor er de maksimale varepriser valgt, hvis de overstiger 1000, grupperet efter varetype.

VÆLGE

MAX(Price.Price) AS Pris
FRA
RegisterInformation.PricesNomenclature.SliceLast AS Priser
GRUPPE EFTER
Priser.Nomenklatur.TypeNomenklatur
AT HAVE
MAX(Priser.Pris) > 1000

SORTER EFTER

Operatoren "ORDER BY" sorterer forespørgselsresultatet. For at sikre, at poster udsendes i en ensartet rækkefølge, bruges AUTO-ORDER. Primitive typer sorteres efter de sædvanlige regler. Referencetyper er sorteret efter GUID.

Et eksempel på at få en liste over medarbejdere sorteret efter navn:

VÆLGE
Medarbejdere.Navn AS Navn
FRA
Directory Medarbejdere AS Medarbejdere
SORTER EFTER
Navn
AUTO BESTILLING

Andre konstruktioner af 1C-forespørgselssproget

  • FORENE- resultaterne af to forespørgsler i én.
  • FOREN ALLE– ligner JOIN, men uden at gruppere identiske rækker.
  • TOM BORD- nogle gange brugt, når du forbinder forespørgsler for at angive en tom indlejret tabel.
  • SÆTTE- opretter en midlertidig tabel for at optimere komplekse 1C-forespørgsler. Sådanne anmodninger kaldes batch-anmodninger.

Forespørgselssprogfunktioner

  • SUBSTRING afkorter en streng fra en specificeret position med det angivne antal tegn.
  • ÅR…ANDET giver dig mulighed for at få den valgte værdi af den numeriske type. Indtastningsparameteren er en dato.
  • PERIODENS BEGYNDELSE OG PERIODENS AFSLUTNING bruges, når man arbejder med datoer. Som en ekstra parameter angives periodetypen (DAG, MÅNED, ÅR osv.).
  • TILFØJ giver dig mulighed for at tilføje eller trække fra datoen det angivne tidspunkt for en bestemt type (SEKUND, MINUTE, DAG osv.).
  • DATO FORSKEL bestemmer forskellen mellem to datoer og specificerer typen af ​​outputværdi (DAG, ÅR, MÅNED osv.).
  • ER NULL erstatter den manglende værdi med det angivne udtryk.
  • PRÆSENTATION og PRÆSENTATIONSLINKS få strengrepræsentationen af ​​det angivne felt. De bruges til henholdsvis alle værdier og kun referenceværdier.
  • TYPE, VÆRDI TYPE bruges til at bestemme typen af ​​inputparameteren.
  • LINK er en logisk sammenligningsoperator for attributværditypen.
  • UDTRYKKE bruges til at konvertere værdien til den ønskede type.
  • DATO TID får en værdi af typen "Dato" fra numeriske værdier (år, måned, dag, time, minut, sekund).
  • BETYDER i en 1C-anmodning bruges den til at specificere foruddefinerede værdier - mapper, opregninger, planer for typer af karakteristika. Eksempel på brug: " Hvor LegalIndividual = Værdi(Enumeration.LegalIndividual.Individual)«.

Forespørgselsbygger

For at oprette forespørgsler med 1C er der en meget praktisk indbygget mekanisme - forespørgselsdesigneren. Den indeholder følgende hovedfaner:

  • "Tabeller og felter" - indeholder de felter, der skal vælges, og deres kilder.
  • "Links" - beskriver betingelserne for CONNECTION-konstruktionen.
  • "Grupper" - indeholder en beskrivelse af konstruktionerne af grupperinger og opsummerede felter af dem.
  • "Betingelser" - er ansvarlig for udvælgelsen af ​​data i anmodningen.
  • "Avanceret" - yderligere forespørgselsparametre, såsom nøgleordene for kommandoen "SELECT" osv.
  • "Joins / Aliaser" - mulighederne for at forbinde tabeller er angivet, og aliaser er sat ("HOW"-konstruktionen).
  • "Ordre" - er ansvarlig for at sortere resultatet af forespørgsler.
  • "Totaler" - ligner fanen "Grupper", men bruges til "TOTALER"-konstruktionen.

Selve forespørgslens tekst kan ses ved at klikke på knappen "Forespørgsel" i nederste venstre hjørne. I denne formular kan den rettes manuelt eller kopieres.


Forespørgselskonsol

For hurtigt at se resultatet af en forespørgsel i "Enterprise"-tilstand eller for at fejlsøge komplekse forespørgsler, brug . Forespørgselsteksten er skrevet i den, parametre indstilles, og dens resultat vises.

Du kan downloade forespørgselskonsollen på ITS-disken eller ved at .

EXPRESS-funktionen i 1C 8-forespørgselssproget tolkes af mange som en typekonverter, men den er slet ikke beregnet til disse formål. Detaljer under klippet...

Så mange mennesker tror fejlagtigt, at de kan konvertere et felt med typen Linje i et felt med type Nummer eller et link til en streng. Faktisk kan EXPRESS-operatøren transformere:

  • primitive typeindstillinger;
  • et sammensat typefelt i et enkelt typefelt;

Lad os se nærmere på disse situationer...

Konvertering af primitive typeindstillinger

Lad os overveje en situation, hvor vi ønsker at gruppere data efter en linje af en ubegrænset type, for eksempel er en sådan linje ofte en kommentar i dokumenter. I dette tilfælde vil vi ikke være i stand til at gruppere efter kommentar, vi får en fejl. Derfor skal vi konvertere en streng med ubegrænset længde til en streng med begrænset længde og derefter gruppere. Eksempel, lad os tælle antallet af dokumenter med de samme kommentarer:

VÆLGE
EXPRESS(Incoming.Comment AS STRING(300)) AS Kommentar,
QUANTITY(Incoming.Reference) SOM reference
FRA
Dokument Indgang AS Indgang

GRUPPE EFTER
EXPRESS(Incoming.Comment AS A STRING(300))

En anden situation er, når der bruges beregninger i forespørgslen, ved udgangen kan vi få et tal med et stort antal decimaler (1100.001568794) . For ikke at behandle dette tal, efter at forespørgslen er udført, kan det straks afkortes til den ønskede længde, men det er vigtigt at forstå, at tallet er trunkeret, ikke afrundet. Eksempel:

VÆLGE
Salg.Produkt,
EXPRESS(Salg.Mængde * Salg.Pris SOM NUMMER(15, 2)) SOM Sum
FRA

Konvertering af en sammensat type til en enkelt type

Registerregistret har ofte en sammensat type, for at konvertere det til en enkelt type brug konstruktionen UDTRYKKE men hvis du på prøvetagningsstadiet forsøger at konvertere implementeringsdokumentet til et indgående dokument, vil anmodningen helt sikkert gå ned med en fejl, så du bør tjekke linktypen før konvertering. Her er sådan noget vrøvl))) Hvorfor har du brug for alt det her, spørger du. Jeg svarer, dette er et af de øjeblikke med implicit forespørgselsoptimering på bekostning af kortfattet skrivning. Lad os se på dette øjeblik med et eksempel.

Lad os sige, at du har sat dig for at få nummeret på hver registrator fra PH Sales. skriv en forespørgsel:

VÆLG ANDET
Salgs.Registrator.Nummer
FRA
Akkumuleringsregister.Salg AS Salg

Faktisk kunne intet være nemmere. Det er kun 1C på udførelsesstadiet, der konverterer denne anmodning uden nogen forbindelser til en anmodning med så mange venstreforbindelser, som vi har mulige registratorer. De der. hvis der skrives 20 dokumenter til dette register, får vi en SQL-forespørgsel med 20 venstre joins. Hvorfor sker det? Fordi den indbyggede 1C-optimering ikke behandler felter modtaget gennem en prik særlig godt, er det i dette tilfælde Number-attributten. Disse er tærterne, hvis vi ofte ønsker at modtage dokumentnummeret, så er det mest rimeligt at inkludere det i registeroplysningerne eller bruge EXPRESS-operatøren, men på bekostning af kortheden:

VÆLG ANDET
Salgsregistratornummer,
VALG
NÅR Sales.Registrar LINK Document.Expenditure
SÅ UDTRYK(Salg.Registrator AS Document.Expenses)
ANDET VALG
NÅR Sales.Registrar LINK Document.Implementation
SÅ UDTRYK(Sales.Registrar AS Document.Sales)
SLUTTEN
...
SLUT SOM ET TAL
FRA
Akkumuleringsregister.Salg AS Salg

Nu vil et bestemt bord deltage i den venstre joinforbindelse.

I det generelle tilfælde bør du omhyggeligt henvise til data gennem en prik, fordi. 1C bruger i dette tilfælde en venstre join i SQL-forespørgslen, hvilket kan påvirke ydeevnen betydeligt. Dette er et af optimeringspunkterne.

Der er få mekanismer til at arbejde med strenge i 1C-forespørgsler. Først kan strenge tilføjes. For det andet kan en understreng tages fra en streng. For det tredje kan strenge sammenlignes, herunder efter mønster. Det er omtrent alt, hvad du kan gøre med strenge.

Streng tilføjelse

Operatoren "+" bruges til at tilføje strenge i en forespørgsel. Du kan kun tilføje strenge af begrænset længde.

VÆLG "Navn: " + Contractors.Name AS Column1 FROM Directory.Contractors AS Contractors WHERE Contractors.Reference = &Reference

Substring funktion

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

En analog af Environment()-funktionen fra objektmodellen. Substring()-funktionen kan anvendes på strengtypedata og giver dig mulighed for at vælge et fragment <Строки> , begyndende med et taltegn <НачальнаяПозиция> (tegn i en streng er nummereret fra 1) og længde <Длина> tegn. Resultatet af funktionsevalueringen har en strengtype med variabel længde, og længden vil blive betragtet som ubegrænset, hvis <Строка> har ubegrænset længde og parameter <Длина> er ikke en konstant eller større end 1024.

Hvis strenglængden er mindre end angivet i den anden parameter, vil funktionen returnere en tom streng.

Opmærksomhed! Det anbefales ikke at bruge funktionen SUBSTRING() til at konvertere strenge af ubegrænset længde til strenge med begrænset længde. I stedet er det bedre at bruge cast-operatoren EXPRESS().

Funktion lignende

Hvis vi skal sikre os, at string-attributten opfylder visse kriterier, sammenligner vi den:

VÆLG Counterparties.Name AS Column1 FROM Directory.Counterparties AS Counterpartyes WHERE Counterparties.Name = "Gazprom"

Men hvad nu hvis en mere subtil sammenligning er nødvendig? Ikke kun for lighed eller ulighed, men for lighed med et bestemt mønster? Det er præcis, hvad LIKE-funktionen blev skabt til.

LIKE - En operator til at kontrollere, om en streng ligner et mønster. Analog af LIKE i SQL.

LIKE-operatoren giver dig mulighed for at sammenligne værdien af ​​det udtryk, der er angivet til venstre for det, med skabelonstrengen, der er angivet til højre. Udtryksværdien skal være af typen streng. Hvis værdien af ​​udtrykket matcher skabelonen, vil resultatet af operatoren være TRUE, ellers vil det være FALSK.

Følgende tegn i skabelonstrengen er servicetegn og har en anden betydning end strengtegnet:

  • % (procent): en sekvens, der indeholder et vilkårligt antal vilkårlige tegn;
  • _ (understregning): et vilkårligt tegn;
  • […] (et eller flere tegn inden for kantede parenteser): ethvert enkelt tegn, der er anført inden for firkantede parenteser. En opregning kan indeholde intervaller, såsom a-z, som betyder et hvilket som helst tegn inden for intervallet, inklusive enderne af intervallet;
  • [^...] (i firkantede parenteser et negationstegn efterfulgt af et eller flere tegn): Ethvert enkelt tegn ud over dem, der er anført efter negationstegnet.

Ethvert andet symbol betyder sig selv og bærer ingen ekstra belastning. Hvis det er nødvendigt at skrive et af de anførte tegn som sig selv, skal det foranstilles af<Спецсимвол>. Mig selv<Спецсимвол>(enhver passende karakter) er defineret i den samme sætning efter nøgleordet SPECIAL CHARACTER.