Hur får man fram typen (typ) av ett dokument i en begäran? 1s 8 typvärden på begäran

I den här artikeln kommer vi att analysera möjligheterna för typkonvertering i frågespråket 1C, som tillhandahålls av funktionen "Express".
Låt oss titta på flera alternativ för att använda den här funktionen.
Och det första alternativet är att avrunda siffror.

För att göra detta måste du använda Express-funktionen i följande format:

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

Var:
siffra— fältet som behöver rundas
LängdNumber— maximal antalslängd
Noggrannhet— noggrannhet av talavrundning

Parametrarna både längd och precision måste vara positiva heltal.
Se hur denna funktion fungerar i bilden nedan.

Det andra användningsfallet är stränggjutning. Mycket ofta använder konfigurationer strängar med obegränsad längd, vilket medför vissa begränsningar. Vi kan till exempel inte jämföra strängar med obegränsad längd.
I frågan nedan är fältet FullName av typen sträng med obegränsad längd, och den här frågan kommer inte att fungera.

För att det ska fungera är det nödvändigt att konvertera ett fält med obegränsad längd till en sträng med en viss längd; detta görs med hjälp av Express-funktionen i följande format:

Uttrycka(<Строка>som sträng(<ДлинаСтроки>)

Var
Linjelängd– den maximala längden till vilken strängen kommer att reduceras.
Låt oss omarbeta frågan: i villkoret kommer vi att konvertera en obegränsad sträng till en sträng med en viss längd. Då blir det inga fel.

Låt oss överväga det sista och, jag skulle säga, det viktigaste alternativet för dess tillämpning: när du arbetar med fält av en sammansatt typ.
Nedan finns två frågor som använder sammansatta fält. Den första är fel och den andra är korrekt.

De där. När du behöver få ett fält av någon komplex typ, ska du alltid få värdet på detta fält först efter att ha castat typen med hjälp av Express-funktionen. I det här fallet kommer dokumenten och referensböckerna att ha följande format:

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

Var
Tabellnamn— objektnamn i .

Använd alltid expressfunktionen när du arbetar med sammansatta typer, det optimerar frågan avsevärt.

Om du fortfarande "simmar" i frågespråkets konstruktioner, och även de enklaste frågorna orsakar svårigheter för dig, rekommenderar jag dig min kurs "Frågor i 1C från nybörjare till proffs." Där dessa och många andra frågor diskuteras mer ingående.

Vad är speciellt med den här kursen:
Kursen är utformad för dig som inte är bekant med frågespråket i 1C;
Utbildningsmaterialet är välplanerat och lätt att lära sig;
Flera dussin lektioner;
Användbara praktiska exempel;
Alla lektioner presenteras på ett tydligt och enkelt språk

För mina läsare, 25% rabattkupong: hrW0rl9Nnx

Jag försöker släppa olika intressanta gratisartiklar och videohandledningar så ofta som möjligt. Därför blir jag mycket glad om du stödjer mitt projekt genom att överföra valfritt belopp:

Du kan överföra valfritt belopp direkt:
Yandex.Money - 410012882996301
Web Money - R955262494655

Gå med i mina grupper.

43
NULL – saknade värden. Ej att förväxla med nollvärde! NULL är inte ett tal, är inte lika med ett mellanslag, en tom referens eller Odefinierad. NULL är ett typbildande värde, dvs. det finns en typ NULL och ett enda värde av denna typ. NULL... 26
För att generera och exekvera frågor till databastabeller i 1C-plattformen används ett speciellt objekt för programmeringsspråket Query. Detta objekt skapas genom att anropa New Request-konstruktionen. Bekväm begäran... 18
Artikeln ger användbara tekniker när du arbetar med 1C v.8.2-frågor, samt information som inte är så välkänd om frågespråket. Jag försöker inte ge en fullständig beskrivning av frågespråket, utan vill bara uppehålla mig vid... 13
LIKE - Operator för att kontrollera en sträng för likhet med ett mönster. Analog av LIKE i SQL. Operatorn SIMILAR låter dig jämföra värdet på uttrycket som anges till vänster om det med mönstersträngen som anges till höger. Betydelsen av uttrycket...

1C-frågespråket är en av de största skillnaderna mellan version 7.7 och 8. En av de viktigaste punkterna för att lära sig 1C-programmering är frågespråket. I 1C 8.3 är frågor det mest kraftfulla och effektiva verktyget för att få data. Frågespråket låter dig få information från databasen på ett bekvämt sätt.

Syntaxen i sig påminner mycket om klassisk T-SQL, förutom att i 1C, med hjälp av frågespråket, kan du bara ta emot data med Select-konstruktionen. Språket stöder också mer komplexa konstruktioner, till exempel (begäran inom en begäran). Frågor i 1C 8 kan skrivas på både kyrilliska och latinska.

I den här artikeln kommer jag att försöka prata om de viktigaste nyckelorden i frågespråket 1C:

  • välja
  • tillåtet
  • olika
  • uttrycka
  • först
  • för förändring
  • menande
  • värdetyp (och REFERENSoperator)
  • val
  • Grupp av
  • har
  • ÄR INGET
  • Ja NULL
  • anslutningar - höger, vänster, intern, full.

Samt några små knep i 1C-språket, med hjälp av vilka du optimalt kan konstruera förfrågningstexten.

För att felsöka frågor i 1C 8.2-systemet tillhandahålls ett speciellt verktyg - frågekonsolen. Du kan se beskrivningen och ladda ner den via länken -.

Låt oss titta på de viktigaste och mest intressanta operatorerna för 1C frågespråk.

VÄLJ

I frågespråket 1C Enterprise 8 börjar varje fråga med ett nyckelord VÄLJA. I 1C-språket finns det inga UPDATE, DELETE, CREATE TABLE, INSERT-konstruktioner; dessa manipulationer utförs i objektteknologi. Dess syfte är att endast läsa data.

Till exempel:

VÄLJA
Nuvarande Directory.Name
FRÅN
Directory.Nomenclature AS Current Directory

Frågan returnerar en tabell med objektnamn.

Nära strukturen VÄLJA du kan hitta nyckelord FÖR FÖRÄNDRING, TILLÅTEN, OLIKA, FÖRST

TILLÅTEN— väljer endast poster från tabellen som den aktuella användaren har rättigheter till.

OLIKA— betyder att resultatet inte kommer att innehålla dubbletter av rader.

URVAL (FALL)

Mycket ofta underskattas denna design av programmerare. Ett exempel på dess användning:

Nuvarande Directory.Name,

NÄR Aktuell Directory.Service DÅ

"Service"

SLUTA HUR MAN VISAR Nomenklatur

Directory.Nomenclature AS Current Directory

Exemplet returnerar ett textvärde i fältet "Artikeltyp" - "Produkt" eller "Tjänst".

VAR

Utformningen av 1C-frågespråket, som gör att du kan lägga val på mottagna data. Observera att systemet tar emot all data från servern och först då väljs den baserat på denna parameter.

VÄLJA
Directory.Name
FRÅN
Current Directory.Nomenclature AS Current Directory
WHERE CurrentDirectory.Service = TRUE

I exemplet väljer vi poster för vilka värdet på attributet "Service" är satt till "True". I det här exemplet skulle vi kunna klara oss med följande villkor:

"VAR ÄR TJÄNSTEN"

I huvudsak väljer vi rader där uttrycket efter nyckelordet är lika med "True".

Du kan använda direkta villkor i uttryck:

WHERE-kod = "005215"

Använd "VALUE()"-operatorn i villkoren, använd åtkomst till fördefinierade element och uppräkningar i en 1C-förfrågan:

WHERE Artikeltyp = Värde(Enumeration.Artikeltyper.Produkt)

Tidsvärden kan specificeras enligt följande:

WHERE Mottagningsdatum > DATETIME(2012,01,01):

Oftast anges villkor som parametrar som skickas till begäran:

Få 267 videolektioner på 1C gratis:

WHERE NomenclatureGroup= &NomenclatureGroup

Ett villkor kan ställas på attributtypen om den är av en sammansatt typ:

Om du behöver begränsa urvalet från en lista med värden eller en array kan du göra följande:

VAR är ackumulationsregistret Registrar B (&Lista över dokument för urval)

Tillståndet kan också vara komplext och består av flera tillstånd:

WHERE Mottagningsdatum > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

GRUPP AV

Design av frågespråket 1C 8.2 som används för att gruppera resultatet.

Till exempel:

VÄLJA
Mottagande av varor och tjänster varor.
SUM(Receipt of GoodsServicesGoods.Quantity) AS Quantity,
SUM(Receipt of GoodsServicesGoods.Amount) SOM Belopp
FRÅN
Dokument Mottagande av varor och tjänster Varor HUR Mottagande av varor och tjänster Varor

GRUPP AV
Mottagande av varorTjänsterGoods.Goods

Denna begäran kommer att sammanfatta alla kvitton efter belopp och kvantitet per artikel.

Förutom nyckelordet BELOPP Du kan använda andra aggregerade funktioner: KVANTITET, ANTAL OLIKA, MAXIMAL, MINIMUM, GENOMSNITT.

HAR

En design som ofta glöms bort, men den är väldigt viktig och användbar. Det låter dig specificera urval i form av en aggregerad funktion, detta kan inte göras i designen VAR.

Exempel på användning av HAVING i en 1C-förfrågan:

VÄLJA
Mottagande av varor och tjänster varor.
SUM(Receipt of GoodsServicesGoods.Quantity) AS Quantity,
SUM(Receipt of GoodsServicesGoods.Amount) SOM Belopp
FRÅN
Dokument Mottagande av varor och tjänster Varor HUR Mottagande av varor och tjänster Varor

GRUPP AV
Mottagande av varor och tjänster varor

SUM(Receipt of GoodsServicesGoods.Quantity) > 5

Så vi kommer att välja antalet produkter som anlände mer än 5 stycken.

MENANDE()

Till exempel:

WHERE Bank = Value(Directory.Banks.EmptyLink)

WHERE Nomenclature Type = Value(Directory.Nomenclature Types.Product)

WHERE Artikeltyp = Värde(Enumeration.Item Types.Service)

TYP på begäran

Datatypen kan kontrolleras genom att använda funktionerna TYPE() och VALUETYPE() eller med den logiska REFERENCE-operatorn.

UTTRYCKA()

Express-operatorn i 1C-frågor används för att konvertera datatyper.

Syntax: UTTRYCKA(<Выражение>HUR<Тип значения>)

Med hjälp av det kan du konvertera strängvärden till datum eller referensvärden till strängdata och så vidare.

I praktiska tillämpningar används Express()-operatorn mycket ofta för att konvertera fält med obegränsad längd, eftersom fält med obegränsad längd inte kan väljas, grupperas, etc. Om sådana fält inte konverteras får du ett felmeddelande Du kan inte jämföra fält med obegränsad längd och fält av inkompatibla typer.

VÄLJA
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
FRÅN
Register över information Kontaktinformation HUR Kontaktinformation

GRUPP AV
EXPRESS(ContactInfo.Representation AS ROW(150)),
ContactInformation.Object

ISNULL (ISNULL)

Ganska användbar funktion av 1C frågespråk som kontrollerar värdet i posten, och om det är lika NULL, Detta gör att du kan ersätta den med ditt eget värde. Används oftast när man skaffar virtuella tabeller över saldon och omsättning för att gömma sig NULL och sätt en tydlig 0 (noll).

ISNULL(Pre-month Taxes.AppliedFSS Benefit, 0)

En sådan funktion av 1C frågespråk ISNULL kommer att returnera noll om det inte finns något värde, vilket kommer att undvika ett fel.

ANSLUTA SIG

Det finns 4 typer av anslutningar: VÄNSTER, HÖGER, KOMPLETT, INTERN.

VÄNSTER och HÖGER ANSLUTNING

Joins används för att länka två tabeller baserat på ett specifikt villkor. Funktion när VÄNSTER GÅ MEDär att vi tar den första specificerade tabellen i sin helhet och villkorligt binder den andra tabellen. Fälten i den andra tabellen som inte kunde bindas av villkor är fyllda med värdet NULL.

Ett exempel på en vänsteranslutning i en 1C-förfrågan:

Den kommer att returnera hela tabellen och fylla i fältet "Bank" endast på de platser där villkoret "Motparter.Namn = Banker.Namn" är uppfyllt. Om villkoret inte är uppfyllt sätts fältet Bank till NULL.

HÖGER JOIN i 1C 8.3 språk helt lika VÄNSTER anslutning, med undantag för en skillnad: i RÄTT TILL ANSLUTNING"Huvudtabellen" är den andra, inte den första.

FULL ANSLUTNING

FULL ANSLUTNING skiljer sig från vänster och höger genom att den visar alla poster från två tabeller och ansluter endast de som den kan koppla ihop med villkor.

Till exempel:

FULL ANSLUTNING
Directory.Banks HUR Banker

FÖRBI

Frågespråket returnerar båda tabellerna helt endast om villkoret Join records är uppfyllt. Till skillnad från en vänster/höger-koppling är det möjligt för NULL att visas i två fält.

INRE KOPPLING

INRE KOPPLING skiljer sig från den fullständiga genom att den endast visar de poster som kan anslutas enligt ett givet villkor.

Till exempel:

FRÅN
Katalog Motparter AS Kunder

INRE KOPPLING
Directory.Banks HUR Banker

FÖRBI
Clients.Name = Banks.Name

Denna fråga returnerar endast rader där banken och motparten har samma namn.

Slutsats

Detta är bara en liten del av syntaxen från frågespråket 1C 8; i framtiden kommer jag att försöka överväga några punkter mer i detalj, visa och mycket mer!

Låt oss titta på resten nu.

Funktioner för att arbeta med strängar i 1C-frågor

Det finns få funktioner och operatorer för att arbeta med strängdata i 1C-frågor.

För det första kan strängar i frågor läggas till. För att göra detta, använd operatorn "+":

Begäran. Text = "VÄLJ
" "Linje: " " + Källa.Namn
;

För det andra kan du välja en del av raden. För att göra detta, använd funktionen SUBSTRUKTION. Funktionen liknar det inbyggda 1C-språket. Den har tre parametrar:

  1. Källsträng.
  2. Numret på det tecken som den valda raden ska börja med.
  3. Tecken.

Begäran. Text= "VÄLJA
SUBSTRING("
"Linje:" ", 4, 3) SOM RESULTAT"; // Resultat: okej

Fungera ÄR INGET

NULL är en speciell datatyp på 1C:Enterprise-plattformen. Det är också det enda möjliga värdet av denna typ. NULL kan visas i frågor i flera fall: vid anslutning av frågekällor, om ett motsvarande värde inte hittades i någon av tabellerna; när du kommer åt detaljerna för ett icke-existerande objekt; om NULL angavs i listan med frågefält (till exempel när urvalsresultat från flera tabeller kombineras), etc.

Eftersom NULL varken är null eller den tomma strängen eller ens ett värde Odefinierad, det är ofta användbart att ersätta den med någon mer användbar datatyp. Det är vad funktionen är designad för. ÄR INGET.

Den har två parametrar:

  1. Värdet som kontrolleras.
  2. Värdet att ersätta den första parametern med om den visar sig vara NULL.

Begäran. Text= "VÄLJA
ISNULL(Source.Remainder, 0) AS Remainder"
; // Om resultatet av begäran är fältet rest = NULL,
// då kommer den att ersättas med 0, och du kan utföra matematiska operationer med den

Funktioner PRESTANDA Och INTRODUKTIONSLÄNKAR

Dessa funktioner är utformade för att erhålla strängrepresentationer av olika värden. Det vill säga de konverterar referenser, siffror, booleaner osv. till vanlig text. Skillnaden mellan dem är att funktionen PRESTANDA konverterar alla datatyper till text (sträng) och funktionen INTRODUKTIONSLÄNKAR- endast länkar, och returnerar de återstående värdena som de är, inte konverterade.

Begäran. Text= "VÄLJA
REPRESENTATION(TRUE) AS Boolean,
REPRESENTATION (4) SOM NUMMER,
REPRESENTATION (Source.Link) AS Link,
REPRESENTATION(DATETIME(2016,10,07)) SOM Datum"
;
// Boolean = "Ja", Antal = "4", Link = "Dokument Kontantkvittot ordernummer... från..."
// Date="07.10.2016 0:00:00"

Begäran. Text= "VÄLJA
REPRESENTATIONREFERENCE(TRUE) AS Boolean,
REPRESENTATIONREFERENS(4) SOM NUMMER
PRESENTINGLINK(Source.Link) AS Link,
REPRESENTATIONREFERENCE(DATETIME(2016,10,07)) AS Date"
;
// Boolean = TRUE, Number = 4, Link = "Dokument Kontantkvitto ordernummer... från..."
// Datum=07.10.2016 0:00:00

Funktioner TYP Och TYP VÄRDEN

Fungera TYP returnerar datatypen 1C:Enterprise-plattform.

Begäran. Text= "VÄLJA
TYPE (antal)
TYPE (sträng),
TYPE (Dokument. Expenditure Cash Order)"
;

Fungera TYP VÄRDEN returnerar typen av värdet som skickas till den.

Begäran. Text= "VÄLJA
VÄRDEN TYP (5) SOM Nummer,
TYP ("
"Linje" ") AS String,
TYP (Source.Link) AS Referens
Från Directory.Source AS Source"
;
//Number=Number, String=String, Directory = DirectoryLink.Source

Dessa funktioner är praktiska att använda, till exempel när du behöver ta reda på om ett fält som tas emot i en förfrågan är ett värde av någon typ. Låt oss till exempel hämta kontaktinformationen för motparter från kontaktinformationsregistret (kontakter för inte bara motparter, utan även organisationer, individer etc. lagras där):

Begäran. Text= "VÄLJA

FRÅN

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

Fungera MENANDE

Fungera Menande låter dig använda 1C-konfigurationsobjekt direkt i en begäran, utan att använda .

Låt oss lägga till ytterligare ett villkor till föregående exempel. Du behöver bara få telefonnummer till dina motparter.

Begäran. Text= "VÄLJA
ContactInformation.Introduktion
FRÅN
Register över information Kontaktinformation HUR Kontaktinformation
VAR
VALUES TYPE(ContactInformation.Object) = TYPE(Katalog.Motparter)
AND ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Det bör noteras att denna funktion endast kan användas med fördefinierade värden, dvs. med värden som kan nås direkt från konfiguratorn. Det vill säga funktionen MENANDE kan inte användas med katalogelement skapade av användare, men kan arbeta med uppräkningar, med fördefinierade katalogelement, med värden EmptyLink.

Operatör LÄNK

Operatör LÄNKär utformad för att kontrollera de värden som returneras av en begäran för att se om de tillhör en specifik referenstyp. Samma uppgift kan utföras med hjälp av funktioner TYP Och TYP VÄRDEN(som har en bredare räckvidd och diskuterades ovan).

Till exempel skulle uppgiften att välja kontaktinformation för motparter kunna lösas på detta sätt:

Begäran. Text= "VÄLJA
ContactInformation.Introduktion
FRÅN
Register över information Kontaktinformation HUR Kontaktinformation
VAR
ContactInformation.Object LINK Directory.Counterparties"
;

Operatör UTTRYCKA

Operatör UTTRYCKA används i 1C-frågor i två fall:

  • när du behöver ändra egenskaperna hos en primitiv typ;
  • när du behöver förvandla ett fält med en sammansatt datatyp till ett fält med en enda typ.

Primitiva datatyper inkluderar: nummer, sträng, datum, booleskt. Vissa av dessa datatyper har ytterligare egenskaper. Typ siffra har längd och precision, typ Linje - längd eller obegränsad.

Operatör UTTRYCKA låter dig ändra inte datatypen, utan ytterligare egenskaper. Han kan till exempel förvandla en sträng med obegränsad längd till en sträng med begränsad längd. Detta kan vara användbart om du behöver gruppera frågeresultat efter ett sådant fält. Du kan inte gruppera efter fält med en obegränsad längd, så vi konverterar den till en sträng med en längd på 200 tecken.

Begäran. Text= "VÄLJA
KVANTITET (OLIKA Ankomst av varor och tjänster. Länk) AS Länk
FRÅN
Dokument Mottagande av varor och tjänster HUR Mottagande av varor och tjänster
GRUPP AV
EXPRESS(Mottagande av varor och tjänster. Kommentar SOM RAD (200))"
;

I vissa fall kan det hända att frågor till fält med en sammansatt datatyp inte bearbetas optimalt av 1C-plattformen. Detta resulterar i längre frågetider, så det kan vara användbart att konvertera en sammansatt typ till en enda typ i förväg.

Begäran. Text= "VÄLJA
EXPRESS(Movement of GoodsTurnover.Order AS Document.Customer Order).Datum AS Order Date,
Förflyttning av varor Omsättning.Nomenklatur
FRÅN
RegisterAccumulations.Movement of Goods.Turnover AS Movement of GoodsOmsättning
VAR
Förflyttning av godsOmsättning.Order LÄNK Dokument.Kundorder"
;

Operatörer VAL Och ÄR INGET

Operatör VAL liknande operatören OM i det inbyggda 1C-språket, men har något minskad funktionalitet.

Låt oss säga att vi vill få kontaktinformation från kontaktinformationsregistret och samtidigt ange i ett separat förfrågningsfält om den tillhör en motpart eller en individ.

Begäran. Text= "VÄLJA
ContactInformation.Introduction,
VAL
NÄR VÄRDEN TYPE(Kontaktinformation.Objekt) = TYP(Katalog.Motparter)
DÅ"
Motpart "
ANNAT VAL
NÄR VÄRDEN TYPE(ContactInformation.Object) = TYPE(Katalog.Individualer)
DÅ"
Enskild"
ANNAT "Någon annan" "
SLUTET
SLUT SOM ÄGARE
FRÅN
Register över information. Kontaktinformation AS Kontaktinformation"
;

Som framgår av exemplet, i designen VAL det finns alltid ett villkor efter ordet NÄR; värde tillämpas om villkoret är sant efter ordet SEDAN och värdet som tillämpas om villkoret inte är uppfyllt, efter ordet ANNAT. Alla tre designelement VALär obligatoriska. Utelämna element ANNAT, på samma sätt som när du använder operatören OM i det inbyggda 1C-språket är det omöjligt. Även från operatören VAL det finns ingen analog till designen ELSEIF, men du kan investera en VAL i en annan, som gjordes i vårt exempel.

Operatör ÄR INGET används i design VAL för att jämföra ett frågefält med typ NULL.

Begäran. Text= "VÄLJA
VAL
NÄR VÄRDET ÄR NULL DÅ 0
ANDRA betydelse
SLUTET"
;

Dessutom operatören ÄR INGET kan användas i frågeförhållanden, till exempel i en mening VAR.

Uppmärksamhet! Detta är en introduktionsversion av lektionen, vars material kan vara ofullständigt.

Logga in på sidan som student

Logga in som elev för att få tillgång till skolmaterial

Frågespråk 1C 8.3 för nybörjare programmerare: funktioner och operatorer för att arbeta med typer (VALUE TYPE, TYPE, REFERENCE, ISNULL, EXPRESS)

Låt oss komma ihåg att varje attribut (egenskap, fält) i en katalog, ett dokument eller något annat applikationsobjekt har sin egen typ. Och vi kan titta på den här typen i konfiguratorn:

I frågespråket finns det en hel klass av funktioner och operatorer för att arbeta med typer av detaljer. Låt oss titta på dem.

VALUE TYPE funktion

Denna funktion tar en parameter (värde) och returnerar dess typ. För rekvisita som beskrivs i bilden (ovan) Smak katalog Mat följande kommer att returneras:

Låt oss nu titta på rekvisita Särskiljande egenskap i katalogen Städer:

Du ser att denna rekvisita kan vara en av flera typer: Linje, Directory.Tastes, Directory.Colors. Denna typ av detaljer kallas KOMPOSIT.

Om vi ​​försöker fylla i värdet på en sådan detalj i 1C:Enterprise-läge kommer systemet att fråga oss vilken typ av värde som kommer att anges:

Och först efter vårt val kommer det att tillåta oss att ange värdet för den valda typen.

Alltså, katalogelement av samma typ ( Directory.Cities) kommer att kunna lagra i samma attribut ( Särskiljande egenskap) värden av olika typer (sträng, färger eller smaker).

Du kan se detta själv genom att klicka på elementen i katalogen Städer i 1C:Enterprise-läge. Du läser en testversion av lektionen, fullständiga lektioner finns tillgängliga.

Här är det utmärkande egenskapsvärdet ett katalogelement Smaker:

Här är raden:

Och här finns i allmänhet ett inslag i referensboken Färger:

Det här är de möjligheter en sammansatt datatyp öppnar upp för oss!

Jag undrar hur funktionen kommer att bete sig TYP VÄRDEN på rekvisitan DistinctiveElement, med en sammansatt datatyp:

Detta är redan mycket intressant. Låt oss titta på varje rad individuellt.

Typen av värde för den särskiljande egenskapen för elementet Ryssland är lika med NULL. Det är första gången vi stöter på den här typen. Värden av denna typ används endast för att bestämma det saknade värdet när man arbetar med databasen.

Detta är sant, eftersom Ryssland-elementet är en grupp och inte ett vanligt katalogelement Städer, så den har inget fält Särskiljande egenskap. Och typen av ett saknat värde, som vi läste ovan, är alltid lika med NULL.

Typen av värde för den särskiljande egenskapen för Perm är lika med Smaker. Detta är sant, eftersom värdet av den särskiljande egenskapen som anges i databasen för staden Perm är en länk till katalogelementet Smaker.

För Krasnoyarsk är typen av attribut lika med Färger, eftersom det valda värdet i databasen är en länk till ett katalogelement Färger.

För Voronezh är typen av attribut lika med Linje, eftersom värdet som anges i databasen är en vanlig sträng.

Indien är en grupp igen, så det har ingen betydelse. Och typen av det saknade värdet är, som vi minns, lika med NULL.

Så här är det. Om du går till katalogelementet Städer med namn Sao Paulo, då ser du att fältet Särskiljande egenskap inte alls ifylld. Den är tom. A alla tomma fält av en sammansatt typ har en speciell betydelse Odefinierad .

MED ODEFINIERAD vi stöter också på för första gången. Menande ODEFINIERAD används när det är nödvändigt att använda ett tomt värde som inte tillhör någon annan typ. Det här är precis vår situation. Och värdetypen ODEFINIERAD, som du säkert redan gissat, är lika med NULL.

Funktion TYP

Det tar bara en parameter - namnet på den primitiva typen ( LINJE, SIFFRA, DATUM, BOOLEAN), eller namnet på tabellen vars länktyp du vill hämta.

Resultatet av denna konstruktion blir ett värde av typen Typ för den angivna typen.

Låter vagt, eller hur?

Låt oss titta på tillämpningen av denna design och allt kommer omedelbart att falla på plats.

Anta att vi måste välja alla katalogposter Städer, som har sammansatta rekvisita Särskiljande egenskap har ett värde av typ LINJE:

Låt oss nu välja alla poster som har attributvärden Särskiljande egenskapär länkar till katalogelement Färger(tabell Directory.Colors):

Reträtt

Som du minns, vissa delar av katalogen Städer har inte rekvisita Särskiljande egenskap. Fungera TYP VÄRDEN för sådana element den producerar NULL.

Hur kan du välja sådana element i en fråga? En speciell logisk operatör tillhandahålls för detta ÄR INGET(inte att förväxla med funktionen ÄR INGET, som vi kommer att titta på nedan). Du läser en testversion av lektionen, fullständiga lektioner finns tillgängliga.

Här är ett exempel på dess användning:

Bra. Men märkte du att det inte finns något inslag av Sao Paulo, rekvisita värde typ Särskiljande egenskap som han också gav ut NULL. Varför hände det?

Men saken är att situationen för grupper (Ryssland, Indien, Brasilien), som fyller i detaljerna Särskiljande egenskap omöjligt i princip, eftersom de inte har det alls, skiljer sig från situationen för Sao Paulo-elementet, för vilket det är möjligt att fylla i rekvisita, men det är helt enkelt inte ifyllt och är lika, som vi minns, med en särskilt värde ODEFINIERAD.

För att välja alla poster som har det nödvändiga Särskiljande egenskap närvarande, men inte ifylld, bör en annan konstruktion användas:

Men jämförelse med UNDEFINIERAD för att bestämma tomma (ofyllda) attribut fungerar bara för sammansatta typer.

Förresten, den logiska operatorn IS NULL har en negationsform som ser ut så här:

Logisk operator LÄNK

Låt oss till exempel välja från katalogen Städer endast de poster som har värdet av ett sammansatt attribut Särskiljande egenskapär en länk till ett katalogelement Smaker:

Som du kommer ihåg kunde vi lösa samma problem med hjälp av TYP VÄRDEN Och TYP:

Funktion ISNULL

Funktionen är utformad för att ersätta ett värde NULL till en annan mening.

Vi minns att meningen NULL returneras om det begärda attributet (fält, egenskap) inte finns.

Till exempel rekvisita Särskiljande egenskap för kataloggrupper Städer:

Fungera ÄR INGET hjälper oss att mata ut ett annat värde om detta värde är lika med NULL. Du läser en testversion av lektionen, fullständiga lektioner finns tillgängliga. Låt i det här fallet vara raden "Det finns ingen sådan rekvisita!":

Det visar sig att om den första parametern för funktionen ÄR INGET inte jämnlikt NULL, så kommer han tillbaka. Om den är NULL returneras den andra parametern.

EXPRESS-funktion

Denna funktion är endast för fält som har en sammansatt typ. Ett utmärkt exempel på ett sådant område är fastigheten Särskiljande egenskap för katalogelement Städer.

Som vi minns kan sammansatta fält vara en av flera typer som anges i konfiguratorn.

För fält Särskiljande egenskap sådana giltiga typer är LINJE, Directory.Colors Och Directory.Tastes.

Ibland blir det nödvändigt att gjuta värdena för ett sammansatt fält till en specifik typ.

Låt oss lista alla fältvärden Särskiljande egenskap att skriva Referens. Färger:

Som ett resultat var alla elementvärden som var av typ Directory.Colors, förblev fyllda och konverterades till den angivna typen. Alla värden av andra typer ( LINJE, Directory.Tastes) är nu lika NULL. Detta är det speciella med typgjutning med funktionen UTTRYCKA.

Du kan gjuta en typ antingen till en primitiv typ ( BOOLEAN, SIFFRA, LINJE, DATUM) eller till en referenstyp. Du läser en testversion av lektionen, fullständiga lektioner finns tillgängliga. Men typen som gjutningen görs till måste inkluderas i listan över typer för detta sammansatta fält, annars kommer systemet att ge ett fel.

Gör provet

Starta testet

1. Välj det mest korrekta påståendet

2. Detaljer som kan ta värden av en av flera typer kallas

3. För att bestämma typen av attributvärde, använd funktionen

4. Tomma detaljer av en sammansatt typ är viktiga