Endre linjen i 1s-forespørselen. Funksjon for utførelse av substring()-funksjonen

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:

Be om. 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. Tegn.

Be om. 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.

Be om. 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 OPPTREDEN 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

Be om. Tekst= "VELGE
- bare linker, og returnerer de gjenværende verdiene som de er, ikke konvertert.
REPRESENTATION(TRUE) AS Boolean,
REPRESENTASJON (4) SOM ET Nummer,
REPRESENTASJON (Source.Link) AS Link,
;
REPRESENTATION(DATETIME(2016,10,07)) AS Dato" // Boolean = "Ja", Tall = "4", Link = "Forbruksdokument kontantbestilling
Nei... fra..."

Be om. Tekst= "VELGE
// Date="07.10.2016 0:00:00"
REPRESENTATIONREFERENCE(TRUE) AS Boolean,
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 OPPTREDEN TYPE VERDIER

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

Be om. Tekst= "VELGE
TYPE (nummer)
TYPE (streng),
TYPE (Dokument. Kontantordre for utgifter)"
;

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

Be om. 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 motta kontaktinformasjon til motparter fra kontaktinformasjonsregisteret (kontakter til ikke bare motparter, men også organisasjoner, enkeltpersoner etc.):

Be om. 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.

Be om. Tekst= "VELGE
Kontaktinformasjon.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 bestemt referansetype. Den samme oppgaven kan utføres ved hjelp av funksjoner TYPE OPPTREDEN TYPE VERDIER(som har et bredere omfang og ble diskutert ovenfor).

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

Be om. Tekst= "VELGE
Kontaktinformasjon.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 Antall 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. Det er umulig å gruppere etter felt med ubegrenset lengde, så vi konverterer det til en streng med en lengde på 200 tegn.

Be om. 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 AV
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.

Be om. 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 OPPTREDEN 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.

Be om. Tekst= "VELGE
ContactInformation.Introduction,
VALG
NÅR VERDIER TYPE(Kontaktinformasjon.Objekt) = TYPE(Katalog.Motparter)
DERETTER "
Motpart "
ANNET VALG
NÅR VERDIER TYPE(Kontaktinformasjon.Objekt) = TYPE(Katalog.Individer)
DERETTER "
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 DERETTER og verdien brukt hvis betingelsen ikke er oppfylt, etter ordet ELLERS. Alle tre designelementene VALG er obligatoriske. Utelat element ELLERS, 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 ELLER HVIS, 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.

Be om. 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.

Avsnittet inneholder en beskrivelse av særegenhetene ved å utføre SUBSTRING()-funksjonen til spørringsspråket i klient-serverversjonen av arbeidet og de resulterende anbefalingene for å konstruere spørringer.

SUBSTRING() funksjon

I spørringsspråket 1C:Enterprise kan SUBSTRING()-funksjonen i SUBSTRING(,)-formatet brukes på strengtypedata og lar deg velge et fragment som starter med tegnnummeret (tegn i en streng er nummerert som starter med 1) og lengden på karakterene. Resultatet av SUBSTRING()-funksjonen er en strengtype med variabel lengde, og lengden vil bli ansett som ubegrenset hvis den har ubegrenset lengde og parameteren ikke er konstant eller overstiger 1024.

Beregner SUBSTRING()-funksjonen i SQL-serveren

I klient-serverversjonen av arbeidet implementeres SUBSTRING()-funksjonen ved å bruke SUBSTRING()-funksjonen til den tilsvarende SQL-setningen, sendt til SQL Server-databasetjeneren, som beregner resultattypen til SUBSTRING()-funksjonen fra komplekse regler avhengig av typen og verdiene til parameterne, så vel som avhengig av konteksten den brukes i.

I de fleste tilfeller påvirker ikke disse reglene utførelsen av en 1C:Enterprise-forespørsel, men det er tilfeller når maksimal lengde resultatstrenger beregnet av SQL Server. Det er viktig å huske på at i noen sammenhenger når du bruker SUBSTRING()-funksjonen, kan maksimal lengde på resultatet være lik maksimal lengde på en streng med begrenset lengde, som i SQL Server er 4000 tegn. Dette kan føre til at forespørselen avsluttes uventet.

For eksempel, forespørselen:

VELGE
VALG

ANNET NULL
AVSLUTT SOM EN presentasjon,
VALG
NÅR Type = & juridisk adresseIndivid
THEN SUBSTRING(Representasjon, 0 , 200 )
ANNET NULL
SLUTT SOM Presentasjon1
FRA

SORTER ETTER
Opptreden,
Ytelse 1

krasjer med meldingen:

DBMS feil:
Microsoft OLE DB Provider for SQL Server: Advarsel: Spørringsprosessoren kunne ikke produsere en spørringsplan fra optimalisereren fordi den totale lengden på alle kolonner i GROUP BY- eller ORDER BY-leddet overskrider 8000 byte.
HRESULT=80040E14, SQLSTATE=42000, native=8618

Dette skjer fordi Microsoft SQL Server beregner maksimal lengde på strengen som er resultatet av uttrykket:

VALG
NÅR Type = & juridisk adresseIndivid
THEN SUBSTRING(Representasjon, 0 , 200 )
ANNET NULL
AVSLUTT SOM EN presentasjon,

tilsvarer 4000 tegn. Derfor overskrider lengden på en post som består av to slike felt de 8000 bytene som er tillatt for sorteringsoperasjonen.

På grunn av den beskrevne særegenheten ved kjøringen av SUBSTRING()-funksjonen på SQL Server, anbefales det ikke å bruke SUBSTRING()-funksjonen til å konvertere strenger med ubegrenset lengde til strenger med begrenset lengde. I stedet er det bedre å bruke cast-operatøren EXPRESS(). Spesielt kan eksemplet ovenfor skrives om som:

VELGE
VALG
NÅR Type = & juridisk adresseIndivid
ANNET NULL
AVSLUTT SOM EN presentasjon,
VALG
NÅR Type = & juridisk adresseIndivid
EXPRESS (Representasjon AS String(200 ) )
ANNET NULL
SLUTT SOM Presentasjon1
FRA
Informasjonsregister. ContactInformation HVORDAN DU ContactInformation
SORTER ETTER
Opptreden,
Ytelse 1

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 søkeord 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.

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 og spesifikasjoner
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 for 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 AV

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 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 av 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 av 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 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
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 i sammenføyningsspø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 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. Gjelder henholdsvis 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 .

Hilsen, kjære lesere av bloggsiden! I dag skal vi ved hjelp av eksempler se på hvordan du kan bruke 1C spørrefunksjonen i praksis SUBSTRING. Å bruke denne funksjonen er nyttig ikke bare i enkle spørringer, som vi skal se på her, men også i spørsmål og spørringer.

Oppgaven var det som var nødvendig fra dokumentdetaljene Samsvar velg to linjer og sorter etter dem. Overholdelse av en konto av denne typen: 779000/004599. Hvordan kan jeg dele denne verdien i to?

SUBSTRING-funksjonen har tre parametere. Den første er kildestrengen du vil trekke ut deler av tegnene fra - en understreng. Det er tydelig at verditypen til denne parameteren er Linje. OBS, dette er en veldig viktig merknad, hvis du bruker typen av den første parameteren annet enn en streng, vil funksjonen ikke fungere, forespørselen vil generere en feil!

Den andre parameteren bestemmer plasseringen til tegnet i kildestrengen som valget av en del av strengen begynner fra, og den tredje er lengden på den valgte delstrengen. Verditypen for den andre og tredje parameteren er tall.

La oss gå videre til praksis: SUBSTRING VELG Typical.Recorder AS-navn, SUBSTRING(Typical.Registrar.According.Name, 1, 6) AS Cost Account, SUBSTRING(Typical.Registrar.According.Name, 8, 11) AS Department, AMOUNT(SELECT WHEN MONTH(Typical.Period) = 3 THEN EXPRESS(Typical.Amount AS NUMBER(15, 2)) ELSE 0 END) AS March FROM RegisterAccounting .Typical AS Typical WHERE Typical.AccountKt = &AccountKt AND Typical.Period MELLOM &PeriodStart OG &PeriodeEnGROUP BY SUBSTRING(Typical.Recorder.According.Name, 1, 6),

(Typical.Registrar.According.Name, 8, 11), Typical.Registrar ORDER BY Department, Cost Account

Resultatet av denne spørringen er følgende: Navn Kostnadskonto Avdeling
mars 779000 004599 9 000
Utgående betalingsordre 00000000319 fra 03/01/2010 14:42:54 779000 004599 4 721,6
Utgående betalingsordre 00000000320 fra 03/02/2010 12:07:34 786500 004599 987 614,51
Utgående betalingsordre 00000000203 fra 03/01/2010 12:28:52 786500 004599 400 000
Utgående betalingsordre 00000000227 fra 03.03.2010 14:16:00 732000 004600 5 400
Utgående betalingsordre 00000000238 fra 03/05/2010 12:37:57 732500 004600 12 100
Utgående betalingsordre 00000000197 fra 03/01/2010 11:53:11 732500 004600 12 100
Utgående betalingsordre 00000000198 fra 03/01/2010 11:55:39 734100 004600 19 609
Utgående betalingsordre 00000000279 fra 26.03.2010 0:00:00 734100 004600 55 300
Utgående betalingsordre 00000000287 fra 29.03.2010 14:15:36 734100 004600 18 090
Utgående betalingsordre 00000000291 fra 30.03.2010 11:01:10 738000 004600 10 050
Utgående betalingsordre 00000000268 fra 18.03.2010 10:34:25 750400 004600 13 060,98
Utgående betalingsordre 00000000276 fra 18.03.2010 12:20:20 750400 004600 555 645,41
Utgående betalingsordre 00000000281 fra 29.03.2010 12:33:46 754450 004600 24 120
Utgående betalingsordre 00000000234 fra 03.04.2010 12:21:55 754450 004600 100 000
Utgående betalingsordre 00000000290 fra 30.03.2010 10:44:39 786300 004600 20 800
Utgående betalingsordre 00000000240 fra 03/09/2010 10:53:24 786300 004600 61 012
Utgående betalingsordre 00000000269 fra 18.03.2010 10:58:04 786300 004600 6 000
Utgående betalingsordre 00000000289 fra 30.03.2010 9:27:14 786500 004600 36 000
Utgående betalingsordre 00000000228 fra 03.04.2010 9:52:35 786500 004600 378 138,85
Utgående betalingsordre 00000000229 fra 03.04.2010 9:57:50 786503 004600 126 117,75
Utgående betalingsordre 00000000200 fra 03/01/2010 11:58:06 754422 004762 63 000
Utgående betalingsordre 00000000286 fra 29.03.2010 14:10:18 764422 004762 10 000
Utgående betalingsordre 00000000267 fra 17.03.2010 0:00:00 764423 004762 464 370
Utgående betalingsordre 00000000261 fra 15.03.2010 11:16:28 764522 004762 81 357

Så hvis vi tar linjen 779000/004599, vil SUBSTRING(Typical.Recorder.Respective.Name, 1, 6) markere linjen “779000”. EN SUBSTRING(Typical.Recorder.Respective.Name, 8, 11) vil sende ut “004599”.

I samme spørring brukes uttrykket:

SUM(VALG NÅR MÅNED(Typisk.Periode) = 3 SÅ UTTRYKK(Typisk.Sum SOM NUMMER(15, 2)) ANDERS 0 END) AS Avdeling

I samme oppgave var det nødvendig å legge til nye kolonner med navn på månedene og med beløp for disse. Dette uttrykket løser dette problemet. Hvis du trenger å bruke andre måneder, for eksempel januar, så bytt ut uttrykket:

BELØP(VALG NÅR MÅNED(Typisk.Periode) = 1 SÅ UTTRYKK(Typical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS januar

Jeg vil gi et eksempel på en forespørselstekst der månedsfelt (i fet skrift) dannes ved hjelp av en syklus, fra mars til februar.

Query Text = " |SELECT |Typical.Registrar AS Name, |SUB-STRING(Typical.Registrar.Respective.Name, 1, 6) AS Cost Account, |SUB-STRING(Typical.Registrar.Respective.Name, 8, 11) ) AS-avdeling,"; For Sch = 1 til 12 syklus hvis Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Spørringstekst = Spørringstekst + " | FRA | Regnskapsregister." + AccountingRegisterName + ".MovementsSSubconto(| &StartPeriod, | &EndPeriod,"; Line of Restrictions on Details = " (Aktivitet = TRUE) AND (Konto I HIERARKIET (&Account of Analysis))"; Spørretekst = Forespørselstekst + Linje med grenser på Detaljer + " |) AS Typisk |";

Spørringstekst = Spørringstekst + " | HVOR | Typisk.KontoCt = &Analysekonto | OG Typisk.Periode MELLOM &StartPeriode OG &SluttPeriode |GRUPP ETTER | UNDERSTENG(Typisk.Opptaker.Respektiv.Navn, 1, 6), | UNDERTRENG(Typisk.Registrer) Resp. Navn, 8, 11), |.

Det er få mekanismer for å jobbe med strenger i 1C-spørringer. Først kan linjene legges til. For det andre kan du ta en delstreng fra en streng. For det tredje kan strenger sammenlignes, inkludert etter mønster. Det er nok alt som kan gjøres med strenger.

Strengtilsetning

For å legge til rader i en spørring, brukes "+"-operasjonen. Du kan bare legge til strenger med begrenset lengde.

VELG "Navn: " + Motparter Navn AS Kolonne 1 FRA Motparter AS Motparter Link = &Link

Delstrengfunksjon

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

En analog av Environment()-funksjonen fra objektmodellen. Substring()-funksjonen kan brukes på strengdata og lar deg velge et fragment <Строки> , som starter med tegnnummeret <НачальнаяПозиция> (tegn i en linje er nummerert fra 1) og lengde <Длина> tegn. Resultatet av funksjonsberegningen har en strengtype med variabel lengde, og lengden vil anses som ubegrenset hvis <Строка> har ubegrenset lengde og parameter <Длина> er ikke en konstant eller større enn 1024.

Hvis lengden på strengen er mindre enn spesifisert i den andre parameteren, vil funksjonen returnere en tom streng.

Merk følgende! Det anbefales ikke å bruke SUBSTRING()-funksjonen til å konvertere strenger med ubegrenset lengde til strenger med begrenset lengde. I stedet er det bedre å bruke cast-operatøren EXPRESS().

Funksjon lignende

Hvis vi må sørge for at et strengattributt oppfyller visse kriterier, sammenligner vi det:

VELG Motparter Navn AS Kolonne 1 FRA Motparter AS Motparter Name = "Gazprom".

Men hva om du trenger en mer subtil sammenligning? Ikke bare likhet eller ulikhet, men likhet med et bestemt mønster? Det er akkurat dette SIMILAR-funksjonen ble laget for.

LIKE — Operator for å sjekke en streng for likhet med et mønster. Analog av LIKE i SQL.

SIMILAR-operatoren lar deg sammenligne verdien av uttrykket som er spesifisert til venstre for det med mønsterstrengen som er spesifisert til høyre. Verdien av uttrykket må være av typen streng. Hvis verdien av uttrykket samsvarer med mønsteret, vil resultatet av operatoren være TRUE, ellers vil det være FALSE.

Følgende tegn i mønsterstrengen er tjenestetegn og har en annen betydning enn strengtegnet:

  • % (prosent): en sekvens som inneholder et hvilket som helst antall vilkårlige tegn;
  • _ (understrek): ett vilkårlig tegn;
  • […] (ett eller flere tegn i hakeparenteser): ethvert enkelt tegn oppført innenfor hakeparentesene. Oppregningen kan inneholde områder, for eksempel a-z, som betyr et vilkårlig tegn inkludert i området, inkludert endene av området;
  • [^...] (i hakeparentes et negasjonstegn etterfulgt av ett eller flere tegn): ethvert enkelt tegn annet enn de som er oppført etter negasjonstegnet.

Ethvert annet symbol betyr seg selv og bærer ingen ekstra belastning. Hvis et av de oppførte tegnene må skrives som seg selv, må det innledes med<Спецсимвол>. Meg selv<Спецсимвол>(hvilket som helst passende tegn) er definert i den samme setningen etter nøkkelordet SPECIAL CHARACTER.