Når du arbeider med spørringer, må enhver programmerer samhandle på en eller annen måte med tomme verdier. Hva mener vi med tom verdi?

En nullverdi er enten ingen verdi eller standardverdien for datatypen. Med primitive typer er alt ganske enkelt: standardverdien er en startverdi som fungerer som utgangspunkt.

Typer nullverdier

La oss se på hvilke typer tomme verdier som kan oppstå eller kreves i en spørring.

  • For nummertypen er den tomme verdien null – 0.
  • For strengtypen – en tom streng – "".
  • For datotypen – 1. januar i det første året – 01/01/0001 00:00:00. Det er fra denne datoen at tiden telles i 1C.*
  • For den boolske typen er standardverdien teknisk False, men logisk sett er begge verdiene av typen polstret. Derfor, avgjørelsen om en tom verdi er falsk eller ikke, er basert på logikken til en spesifikk algoritme.

*Vær forsiktig, utenfor 1C er det forskjellige datotellingssystemer med forskjellige utgangspunkt.

Den manglende verdien tilsvarer bare typen Null. Denne typen inneholder bare én verdi, som ikke indikerer noen verdi.

Lignende type Udefinert inneholder også bare én verdi, men Udefinert betyr ikke fravær av data, men bare umuligheten av å bestemme standardverdien for typen. Udefinert er standardverdien for sammensatte typer, inkludert de som ikke er eksplisitt definert. For eksempel verdien i ny linje tabell med verdier i en kolonne der typen ikke er eksplisitt definert.

Co referanse typer er det mye mindre usikkerhet. Alle referansetyper gir en nullverdi. En tom verdi er den samme referansen med datatypen spesifisert, men uten unik identifikator spesifikk betydning. Takket være dette kan vi behandle en tom lenke som om den var en vanlig og bruke alle metodene som tilbys av plattformen på den, og jobbe med den som om den var en fullverdig verdi.

Arbeide med nullverdier i en spørring

Enten du trenger å angi en nullverdi eksplisitt i et spørringsresultat eller sammenligne eksisterende verdier med en nullverdi, må du vite hvordan du beskriver nullverdier i spørringen din.

Typer Tall, streng, boolsk beskrives i forespørselen som i det innebygde språket:

SELECT 0 AS ExampleTypeNumber, "Hello world" AS ExampleTypeString, True AS ExampleTypeBoolean

Udefinert, som i hovedsak er en primitiv type, beskrives på samme måte:

Velg Batch.Period Fra akkumuleringsregister.Batch As Batch Where Remains.DocumentBatch = Udefinert

Tomme referanseverdier er litt vanskeligere å definere. Alle referanseobjekter har en forhåndsdefinert tjenesteverdi på EmptyReference. Takket være dette er det mulig å velge en tom lenke på en enkelt måte - gjennom verdifunksjonen:

Velg Verdi(Directory.Nomenclature.EmptyLink) Hvordan tømme nomenklaturen

Mulighetene for å jobbe med Null-verdier er noe rikere. Som andre primitive typer beskrives Null på samme måte som i det innebygde språket. I tillegg er det en spesiell operatør Is Null og en funksjon IsNull.

  • Operatoren Is Null lar deg lage et logisk uttrykk som sammenligner den valgte verdien med Null-verdien.
  • IsNull-funksjonen returnerer det første argumentet hvis det ikke er Null, og det andre argumentet ellers.

Uttrykk som definerer tomme verdier kan brukes i alle spørringsseksjoner som støtter uttrykk. Du kan for eksempel legge til en tom lenke til Velg-delen eller en nullkontroll i betingelsen.

Praktiske eksempler

Bruke verdifunksjonen

Velg Products.Link As Nomenclature, Products.Link = Value(Directory.Nomenclature.EmptyLink) Like ThisLinkEmpty From TueProducts As TueProducts

Bruke Is Null-operatoren

Velg Products.Link As Nomenclature, Products.Link Is Null Like This LinkEmpty From TueProducts As TueProducts

Null til venstre eller full sammenføyning

Sjekker for null

Eksemplet demonstrerer en vanlig praktisk situasjon når, med venstre sammenføyning, det ikke er noen match for det første bordet i det andre. I dette tilfellet vil alle feltene i den andre tabellen være Null.

Velg TueProducts.Link As Nomenclature, Remains.QuantityRemaining As Quantity, Remains.QuantityRemaining Is Null As NoRemaining From TueProducts as TueProducts Venstre tilkobling RegisterAccumulations.ProductsInWarehouses.Remains As Remains By TueProducts.Link = Remains.Nomenclature

Håndtering av nullverdier

Endring av forrige spørring for å demonstrere en vanlig teknikk for å få noen standardverdier for å erstatte manglende. I i dette eksemplet Ved å bruke IsNull-funksjonen erstattes den manglende restverdien med en logisk riktig 0.

Velg TueProducts.Link As Nomenclature, IsNull (Remaining.QuantityRemaining, 0) As Quantity From TueProducts as TueProducts Venstre tilkobling RegisterAccumulations.ProductsInWarehouses.Remains As Remains By TueProducts.Link = Remains.Nomenclature

I denne artikkelen så vi på ulike typer tomme verdier og deres egenskaper, og studerte måter å bestemme ulike typer tomme verdier i spørringer, og i den praktiske delen var vi overbevist om brukervennligheten av det vurderte materialet.

En streng er en av de primitive datatypene i 1C:Enterprise 8-variabler med typen linje inneholde tekst.

Skriv inn variabelverdier linje er omgitt av doble anførselstegn. Flere variabler av denne typen kan brettes.

Per1 = "Ord 1" ;
Per2 = "Ord 2" ;
Per3 = Per1 + " " + Per2;

Til slutt Per 3 vil bety" Ord 1 Ord 2".

I tillegg har 1C:Enterprise 8-systemer funksjoner for arbeid med strenger. La oss se på de viktigste:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funksjonen er utformet for å vise en dialogboks der brukeren kan spesifisere verdien av en variabel av typen Linje. Parameter <Строка> er påkrevd og inneholder navnet på variabelen som den angitte strengen skal skrives inn i. Parameter <Подсказка> valgfritt - dette er tittelen på dialogboksen. Parameter <Длина> valgfritt, viser maksimal lengde på inndatastrengen. Standard er null, som betyr ubegrenset lengde. Parameter <Многострочность> valgfri. Definerer flerlinjers tekstinntastingsmodus: Sann – flerlinjet tekstinntasting med linjeskilletegn; False - skriv inn en enkel streng.

Du kan skrive inn en streng hvis du kjenner tegnkoden i Unicode:

Symbol(<КодСимвола>) — koden legges inn som et tall.

Bokstav= Symbol(1103) ;

// jeg

Det er også en invers funksjon som lar deg finne ut koden til et symbol.<Строка>, <НомерСимвола>) — Symbolkode(

returnerer Unicode-nummeret til det angitte tegnet som et tall.

Tekstkonverteringsfunksjoner for store og små bokstaver:<Строка>) VReg( - konverterer alle tegn i en streng til.

store bokstaver<Строка>) NReg(

— Konverterer alle tegn i en streng til små bokstaver.<Строка>) TReg(

— konverterer alle tegn i strengen til store og små bokstaver i tittelen. Det vil si at de første bokstavene i alle ord konverteres til store bokstaver, og de resterende bokstavene konverteres til små bokstaver.

Funksjoner for å søke og erstatte tegn i en streng:<Строка>, <ПодстрокаПоиска>) Finne(

— finner tegnnummeret for forekomsten av søkedelstrengen. For eksempel:

Finn ("String" , "oka" );<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) // 4 StrFind( Søking er mulig fra begynnelsen eller slutten av strengen. For eksempel:

Number4-forekomster = Str Finn ( "Defensivitet", "om" ,Søkeretning. Fra start, 1, 4);

// 7<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) StrReplace(

– finner alle forekomster av søkedelstrengen i kildestrengen og erstatter den med erstatningsdelstrengen.

StrReplace ("String" , "oka", "" );<Строка>) // Side EmptyString(– sjekker strengen for signifikante tegn. Hvis det ikke er noen signifikante tegn, eller ingen tegn i det hele tatt, returneres verdien ekte.

. Ellers -<Строка>, <ПодстрокаПоиска>) Løgn

StrNumberCurrences( – Beregner antall forekomster av søkedelstrengen i kildestrengen. StrNumberOccurrences (

"lær, studer og studer igjen"<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — , "studer" , "" ); // 3 StrTemplate( erstatter parametere i en streng med tall. Linjen må inneholde erstatningsmarkører av formen: "%1..%N". Markørnummerering starter fra 1. Hvis parameterverdien

Udefinert , erstattes en tom streng., "1" , "2" ) ; StrTemplate (

"Parameter 1 = %1, parameter 2 = %2"

// Parameter 1= 1, Parameter 2 = 2<Строка>, <ЧислоСимволов>) Stringkonverteringsfunksjoner:

Løve(<Строка>, <ЧислоСимволов>) – returnerer de første tegnene i en streng.

Høyre(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – returnerer de siste tegnene i en streng.<ЧислоСимволов>Onsdag(<НачальныйНомер>.

– returnerer en streng med lengde<Строка>) , med utgangspunkt i symbolet

AbbrL(<Строка>) trimmer ikke-signifikante tegn til venstre for det første signifikante tegnet i strengen.

Forkortelse(<Строка>) — klipper av ubetydelige tegn til høyre for det siste signifikante tegnet i linjen.

AbbrLP(<Строка>, <НомерСтроки>) – kutter av ubetydelige tegn til venstre for det første signifikante tegnet i linjen og til høyre for det siste signifikante tegnet i linjen.

StrGetString(

– Får en flerlinjet streng etter tall.<Строка>) Andre funksjoner:

StrLength(<Строка>) – returnerer antall tegn i strengen.

StrNumberRow(<Строка1>, <Строка2> ) – returnerer antall linjer i en flerlinjet streng. En linje anses som ny hvis den er atskilt fra den forrige med et linjeskifttegn. StrCompare(– sammenligner to strenger på en måte som ikke skiller mellom store og små bokstaver. Funksjonen fungerer som et objekt

  • Sammenligning av verdier
  • . Returnerer:
  • 1 - hvis den første linjen er større enn den andre

-1 - hvis den andre linjen er større enn den første

0 - hvis strengene er like StrCompare("Første linje" , "Andre linje" );<Значение>) .

// 1 I 1C utføres sjekking av en tom verdi av en spesiell funksjon. For å sjekke om attributtet eller variabelen din er fylt ut, bruk en funksjon fra den globale konteksten(denne oppslagsboken, dokumentet osv.). Variabler og detaljer som inneholder verdier er også tomme. Null Og StrTemplate(.

1s sjekk for tom verdi. Eksempler

Variabel = Directories.Nomenclature.EmptyLink();

Check = ValueFilled(Variable); I dette tilfellet er variabelen Undersøkelse ekte vil inneholde verdien StrCompare("Første linje" , "Andre linje" );<Значение>) . Også funksjon

. kan brukes direkte under forhold.

Eksempel 1.1

Hvis verdien er fylt(variabel) så Rapporter("Verdien i variabelen er ikke tom!"); endIf;

Variabel = Documents.AdvanceReport.FindByNumber("000000001"); Check = ValueFilled(Variable); I dette eksemplet, hvis dokumentet Forhåndsrapport 000000001 med nummer I dette tilfellet er variabelen eksisterer, da i variabelen EmptyString( vil inneholde verdien ekte.

, ellers Bruk funksjon Verdifylt ikke mulig for variabler av mutable typer, som f.eks, Tabell over verdier Tre av verdier

osv. Funksjonen fungerer for alle konfigurasjoner. Hvordan kan du sjekke at verditabellen i 1C er tom? Til dette formål brukes metoden Mengde()

, kan du bruke den til å sjekke hvor mange rader som finnes i verditabellen. Eksempel 3. La Mitt bord

— Tabell med verdier definert ovenfor i koden.

Hvis MyTable.Quantity() = 0 Returner deretter; endIf;

Den samme metoden kan brukes til å bestemme fylden til verditreet og søkeresultatutvalget. Eksempel 4. La MyTree

- verditreet definert ovenfor i koden.

Hvis MyTree.Rows.Quantity() = 0 Returner; endIf;

Som du kan se, sjekker vi i verditreet for tilstedeværelsen av rader på første nivå hvis de ikke er der, så er treet tomt. Eksempel 5. La Forespørsel

— spørring til 1C 8-databasen definert ovenfor.

Denne artikkelen vil se på måter å se etter en tom verdi avhengig av typen attributt som kontrolleres, inkludert en tom lenke.

NULL-verdien returneres i tilfellet når attributtet rett og slett ikke eksisterer. Typen i dette tilfellet vil også være NULL. For eksempel kan du slå sammen to tabeller ved å bruke en venstre sammenføyning. I tilfelle ingen verdi blir funnet i høyre tabell for venstre tabell, vil NULL bli returnert. Se etter gitt verdi

kan gjøres ved å bruke konstruksjonen “IS NULL” og “ ”. I det første tilfellet returneres True eller False. I det andre tilfellet kan du umiddelbart sette en annen verdi i tilfellet når NULL returneres.

1C 8.3-forespørselen nedenfor vil returnere en liste over kontaktpersoner for de partnerne som ikke har spesifisert et segment.
VELGE
KontaktpersonerPartners.Link
FRA
INTERN JOIN Directory.Partner Segments AS Partner Segments
Programvarekontaktpersoner til Partnere.Eier = Segmenter av Partnere.Foreldre
HVOR
Partner Segment Link ER NULL

Tom dato

Verdien sjekkes for en tom dato ved å sammenligne den med konstruksjonen DATETIME(1, 1, 1, 0, 0, 0). Et eksempel på bruk er gitt nedenfor:

Tom lenke i 1C-forespørsel

I tilfellet når det returnerte attributtet er av en referansetype, for eksempel, det er et element i en katalog, et dokument, etc., brukes følgende konstruksjon: VALUE(Directory.DirectoryName.EmptyLink).

I eksemplet nedenfor velger spørringen alle partnere som ikke har spesifisert en forretningsregion.

For å se etter "ValueFilled" må du gjøre den motsatte betingelsen:

Partners.BusinessRegion<>VERDI(Directory.Business Regions.EmptyLink)

Tom streng

For å sjekke strengtyper, er det gjort en sammenligning med en annen prøve. I dette tilfellet - "".

Spørringen nedenfor vil velge alle partnere med et tomt navn.

Hva menes med en linje i 1c

Strenger i 1C, hvordan skille en streng fra andre typer fordi i modulen er alle tegnene tekst, og derfor en streng. Hvert kontinuerlig sett med tegn omgitt av doble anførselstegn ("") regnes som en streng i konfiguratoren, den er svart.

Report("Hei, verden!");

Du bør også huske at noen metoder, både system- og selvskrevne, kan returnere en strengverdi.

For å finne ut om verdien vi er interessert i er en streng, kan vi sammenligne typen med typen " Linje":

If TypeValue("Noen tekst") = Type("String") Then Report("Verditype - String"); endIf;

Det er flere spesialfunksjoner for å jobbe med en streng som konverterer andre typer til en streng og omvendt. Her er noen eksempler:

String til nummer

Tall("123,45");

Tall("123,45");

Hvis parameteren inneholder ugyldige tegn, for eksempel bokstaver, vil dette føre til en feil.

String til dato

Dato("20101220235959");

Det er ikke nødvendig å angi klokkeslett (siste 6 tegn).

Se etter tom streng

EmptyString() – denne funksjonen sjekker om strengen som sendes som en parameter inneholder signifikante tegn (ubetydelige tegn er stort sett usynlige på skjermen: mellomrom, linjeskift, etc.)

EmptyString(" ");
EmptyString(" a ");

Nummer til streng

Rad(123,45); Format(1253.25);

For å sammenligne strenger kan du ganske enkelt bruke likhetstegnet

Hvis "torsdag" = "torsdag" Da
endIf;

Plusstegnet (+) brukes til å koble sammen strenger. Kobling av strenger i programmering kalles sammenkobling.

Utspekulert! Dersom flere ulike typer variabler legges til, vil programmet ta utgangspunkt i typen av den første variabelen. Derfor, for nøyaktig å få en verdi av en strengtype, kan du bruke følgende notasjon:

SomeString = ""+Årets dag(CurrentDate()) +Day of the Week(CurrentDate());

Hvis du får resultatet fra forrige oppføring, vil det se omtrent slik ut:

Som du kan se, er det ikke nok plass som skiller dagen i året og ukedagen til å gjøre dette, du kan legge til et mellomrom (“ ”) som følger:

SomeString = ""+Årets dag(CurrentDate()) + " " +Ukedag(CurrentDate());

Linjeskift

For å bryte en linje, kan du bruke enten et linjeskifttegn:

SomeString = ""+Årets dag(CurrentDate()) + Symbols.PS +Day of the Week(CurrentDate());

eller en rett linje

SomeString = ""+Årets dag(CurrentDate()) + " |"+Ukedag(CurrentDate());