Uttryck som ett tal i en fråga 1s 8.3. Document.Expenditure AS D

Inkompatibla "EXPRESS"-typer- ett sådant meddelande visas när en 1C 8.2 eller 8.3 programmerare försöker jämföra två olika typer.

Express()-funktionen låter dig konvertera värdet på 1C-begäransfältet till en specifik typ. Detta kan behövas i två fall:

1. Hämta det nödvändiga bitdjupet för ett tal eller det nödvändiga antalet tecken i ett strängvärde. Antalet tecken för fält av obegränsad typ måste begränsas på grund av vissa funktioner.

Få 267 1C-videolektioner gratis:

Till exempel:

EXPRESS(Nomenklatur.Comment AS STRING(300))
EXPRESS(Artikel.Pris SOM NUMMER(15, 2)) SOM Summa

2. Konvertera ett fält av en sammansatt typ till ett fält med en enda typ. Detta kan behövas för ändamål. Om ett värde av en annan typ hamnar i ett inskrivet fält kommer systemet att returnera NULL, så det är alltid nödvändigt att ytterligare ställa in ett villkor i avsnittet "WHERE", vilket begränsar det till REFERENS-operatorn.

Till exempel:

VÄLJA

EXPRESS(Sales.Registrar AS Document.Sales)

FRÅN

WHERE Sales.Registrar LINK Document.Implementation

Hur man undviker misstag

Fel som "EXPRESS INKOMPATIBLA TYPER..." kan uppstå när syntaxen används felaktigt.

Till exempel anses konstruktionen "EXPRESS("123″ AS A NUMBER(5, 2)) AS A Sum" vara felaktig, eftersom det är omöjligt att konvertera från en typ till en annan i en fråga med vanliga metoder.

Om du börjar lära dig 1C-programmering rekommenderar vi vår gratiskurs (glöm inte

I den här artikeln kommer vi att analysera möjligheterna för typcasting i 1C-frågespråket som funktionen "Express" tillhandahåller.
Låt oss titta på några 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, använd Express-funktionen i följande format:

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

Var:
siffra— fält, parametern som ska avrundas
LängdNumber- maximal antal längd
Noggrannhet- noggrannhet för nummeravrundning

Parametrarna och längden och precisionen måste vara positiva heltal.
Se hur den här funktionen fungerar i bilden nedan.

Det andra användningsfallet är stränggjutning. Mycket ofta används strängar med obegränsad längd i konfigurationer, 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 obegränsad längd sträng, och den här frågan kommer inte att fungera.

För att det ska fungera måste du 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 i följande formatfunktion:

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

Var
Stränglängd- den maximala längden till vilken strängen kommer att reduceras.
Låt oss göra om frågan: i villkoret kommer vi att ta en obegränsad sträng till en sträng med en viss längd. Då blir det inga fel.

Låt oss överväga den sista och, jag skulle säga, den viktigaste varianten av dess tillämpning: när du arbetar med fält av en sammansatt typ.
Nedan finns två frågor som använder sammansatta typfä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 sammansatt 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 formatet för dokument och kataloger att vara följande:

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

Var
Tabellnamn— namnet på objektet i .

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

Om du fortfarande "svävar" i frågespråkets konstruktioner, och även de enklaste frågorna orsakar svårigheter för dig, rekommenderar jag dig min kurs "Förfrågningar 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;
Utbildningsmaterial väldesignad och lätt att lära sig;
Flera dussin lektioner;
Användbar 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 väldigt 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.

Frågespråket är en av de grundläggande mekanismerna i 1C 8.3 för utvecklare. Med hjälp av frågor kan du snabbt få vilken data som helst lagrad i databasen. Dess syntax är mycket lik SQL, men det finns vissa skillnader.

De främsta fördelarna med frågespråket 1C 8.3 (8.2) framför SQL:

  • avleda referensfält (vända en eller flera punkter till objektattribut);
  • att arbeta med resultaten är mycket bekvämt;
  • möjligheten att skapa virtuella tabeller;
  • begäran kan skrivas både på engelska och på ryska;
  • möjligheten att blockera data för att undvika låsningar.

Nackdelar med frågespråket i 1C:

  • till skillnad från SQL tillåter inte frågor i 1C dig att ändra data;
  • brist på lagrade procedurer;
  • omöjligheten att konvertera en sträng till ett tal.

Överväg vår minihandledning om de grundläggande konstruktionerna av frågespråket 1C.

På grund av det faktum att förfrågningar i 1C endast tillåter dig att ta emot data, måste varje begäran börja med ordet "SELECT". Efter detta kommando indikeras fälten från vilka du vill hämta data. Om du anger "*" kommer alla tillgängliga fält att väljas. Den plats varifrån data kommer att väljas (dokument, register, kataloger, etc.) anges efter ordet "FRÅN".

I exemplet nedan är namnen på hela nomenklaturen valda från referensboken "Nomenklatur". Efter ordet "HUR" anges alias (namn) för tabeller och fält.

VÄLJA
Nomenclature.Name AS NamnNomenclature
FRÅN
Katalog Nomenklatur AS Nomenklatur

Bredvid kommandot "SELECT" kan du ange nyckelord:

  • OLIKA. Frågan kommer endast att välja rader som skiljer sig åt i minst ett fält (utan dubbletter).
  • Första n, Var n– antalet rader från början av resultatet som ska väljas. Oftast används denna konstruktion i samband med sortering (ORDER BY). Till exempel när du behöver välja ett visst antal av de senaste dokumenten efter datum.
  • TILLÅTEN. Denna design låter dig välja från databasen endast de poster som är tillgängliga för den aktuella användaren. Basanvändning av detta nyckelord användaren kommer att få ett felmeddelande om de försöker söka efter poster som de inte har tillgång till.

Dessa nyckelord kan användas tillsammans eller separat.

FÖR FÖRÄNDRING

Denna klausul låser data för att undvika konflikter. Låst data kommer inte att läsas från en annan anslutning förrän i slutet av transaktionen. I den här klausulen kan du ange specifika tabeller som du vill låsa. Annars kommer alla att blockeras. Designen är endast relevant för det automatiska blockeringsläget.

Oftast används klausulen "FÖR FÖRÄNDRING" när man tar emot saldon. Faktum är att när flera användare arbetar i programmet samtidigt, medan en tar emot saldonen, kan den andra ändra dem. I det här fallet kommer det resulterande saldot inte längre att vara korrekt. Om du blockerar uppgifterna med detta förslag, måste den andra anställde vänta tills den första anställde får rätt balans och utför alla nödvändiga manipulationer med det.

VÄLJA
Ömsesidiga uppgörelser. Anställd,
Ömsesidiga avräkningar Belopp Ömsesidiga avräkningar Saldo
FRÅN
Ackumuleringsregister. Ömsesidiga uppgörelser MED anställda. Saldon AS Ömsesidiga uppgörelser
FÖR FÖRÄNDRING

VAR

Konstruktionen är nödvändig för att påtvinga valfritt val på den avlastade datan. I vissa fall av att hämta data från register är det mer rimligt att föreskriva urvalsvillkor i parametrarna för virtuella tabeller. När du använder "WHERE" erhålls alla poster först, och först därefter tillämpas valet, vilket avsevärt saktar ner frågan.

Nedan följer ett exempel på en förfrågan om att få kontaktpersoner med en specifik tjänst. Valparametern har följande format: &ParameterName (parameternamnet är godtyckligt).

URVAL (FALL)

Konstruktionen låter dig specificera villkor direkt i förfrågan.

I exemplet nedan kommer "AdditionalField" att innehålla text beroende på om dokumentet är upplagt eller inte:

VÄLJA
TillträdeT&U.länk,
VAL
NÄR
SENARE "Dokument upplagt!"
ANNAT "Dokumentet har inte lagts upp..."
AVSLUTA SOM Extrafält
FRÅN
Document.Receipt of GoodsServices AS ReceiptT&C

ANSLUTA SIG

Sammanfogar länkar två tabeller med ett visst länkvillkor.

VÄNSTER/HÖGER GÅ MED

Kärnan i LEFT-kopplingen är att den första specificerade tabellen tas helt och den andra är ansluten till den av anslutningens tillstånd. Om det inte finns några poster som motsvarar den första tabellen i den andra, ersätts NULL som deras värden. Enkelt uttryckt är huvudtabellen den först specificerade tabellen och data från den andra tabellen (om någon) har redan ersatt dess data.

Till exempel behöver du hämta varuartiklar från dokumenten "Mottagande av varor och tjänster" och priser från informationsregistret "Varupriser". I det här fallet, om priset för någon position inte hittas, ersätt NULL istället. Alla objekt från dokumentet kommer att väljas oavsett om de har ett pris eller inte.

VÄLJA
Mottagande av T&U. Nomenklatur,
Priser.Pris
FRÅN
Document.Receipt of GoodsServices.Goods AS ReceiptT&C
INRE KOPPLING
PÅ mottagandet av Q&A.Nomenclature = Priser.Nomenklatur

I RÄTT är allt precis tvärtom.

FULL ANSLUTNING

Denna typ av join skiljer sig från de tidigare genom att alla poster i både den första tabellen och den andra kommer att returneras som ett resultat. Om inga poster hittas i den första eller andra tabellen för det angivna länkvillkoret kommer NULL att returneras istället.

När du använder den fullständiga kopplingen i föregående exempel kommer alla artikelartiklar från varu- och tjänstkvittodokumentet och alla de senaste priserna från registret Artikelpriser att väljas. Värdena för icke-funna poster, både i den första och den andra tabellen, kommer att vara NULL.

INRE KOPPLING

Skillnaden mellan en INNER join och en FULL join är att om en post inte hittas i minst en av tabellerna kommer frågan inte att visa den alls. Som ett resultat kommer endast de artikelartiklar från varu- och tjänstmottagningsdokumentet att väljas för vilka det finns poster i informationsregistret för artikelpriser, om vi i föregående exempel ersätter FULL med INTERN.

GRUPP AV

Gruppering i 1C-frågor gör att du kan komprimera tabellrader (grupperingsfält) enligt en viss gemensam funktion (grupperingsfält). Grupperingsfält kan endast visas med aggregatfunktioner.

Resultatet av nästa förfrågan kommer att vara en lista över objekttyper med deras maxpriser.

VÄLJA
,
MAX(Pris.Pris) AS Pris
FRÅN

GRUPP AV
Priser.Nomenklatur.TypNomenklatur

RESULTAT

Till skillnad från gruppering, när du använder totaler, visas alla poster och totala rader har redan lagts till dem. Gruppering visar endast generaliserade poster.

Resultaten kan sammanfattas för hela tabellen (med nyckelordet "GENERAL"), för flera fält, för fält med hierarkisk struktur (sökord "HIERARKI", "ENDAST HIERARKI"). När man summerar är det inte nödvändigt att använda aggregerade funktioner.

Betrakta ett exempel som liknar exemplet ovan med hjälp av gruppering. I det här fallet returnerar frågeresultatet inte bara grupperade fält utan även detaljerade poster.

VÄLJA
Priser.Nomenklatur.Typ av nomenklatur AS Typ av nomenklatur,
Priser.Pris AS Pris
FRÅN
RegisterInformation.PricesNomenclature.SliceLast AS Priser
RESULTAT
MAXIMUM(Pris)
FÖRBI
Typnomenklatur

HAR

Denna operator liknar WHERE-operatorn, men används bara för aggregerade funktioner. Andra fält än de som används av denna operatör måste grupperas. Operatorn "WHERE" är inte tillämplig för aggregerade funktioner.

I exemplet nedan väljs de maximala artikelpriserna om de överstiger 1000, grupperade efter artikeltyp.

VÄLJA

MAX(Pris.Pris) AS Pris
FRÅN
RegisterInformation.PricesNomenclature.SliceLast AS Priser
GRUPP AV
Priser.Nomenklatur.TypNomenklatur
HAR
MAX(Priser.Pris) > 1000

SORTERA EFTER

Operatören "ORDER BY" sorterar frågeresultatet. För att säkerställa att poster matas ut i en konsekvent ordning, används AUTO-ORDER. Primitiva typer sorteras efter vanliga regler. Referenstyper sorteras efter GUID.

Ett exempel på att få en lista över anställda sorterade efter namn:

VÄLJA
Anställda. Namn AS Namn
FRÅN
Katalog Anställda AS Anställda
SORTERA EFTER
namn
AUTO BESTÄLLNING

Andra konstruktioner av frågespråket 1C

  • FÖRENA- Resultaten av två frågor i en.
  • FÖRENA ALLA– liknande JOIN, men utan att gruppera identiska rader.
  • TÖMT BORD- används ibland när du kopplar samman frågor för att ange en tom kapslad tabell.
  • SÄTTA- skapar en tillfällig tabell för att optimera komplexa 1C-frågor. Sådana förfrågningar kallas för batchförfrågningar.

Frågespråksfunktioner

  • SUBSTRING trunkerar en sträng från en angiven position med det angivna antalet tecken.
  • ÅR ... ANDRA låter dig få det valda värdet av den numeriska typen. Inmatningsparametern är ett datum.
  • PERIODENS BÖRJAN OCH PERIODENS SLUT används när man arbetar med datum. Periodtypen (DAG, MÅNAD, ÅR, etc.) anges som en extra parameter.
  • LÄGG TILL låter dig lägga till eller subtrahera från datumet den angivna tiden för en viss typ (ANDRA, MINUTT, DAG, etc.).
  • DATUMSKILLNAD bestämmer skillnaden mellan två datum och anger typen av utdatavärde (DAG, ÅR, MÅNAD, etc.).
  • ÄR INGET ersätter det saknade värdet med det angivna uttrycket.
  • PRESENTATION och PRESENTATIONSLÄNKAR hämta strängrepresentationen av det angivna fältet. De används för alla värden respektive endast referensvärden.
  • TYP, VÄRDE TYP används för att bestämma typen av ingångsparameter.
  • LÄNKär en logisk jämförelseoperator för attributvärdetypen.
  • UTTRYCKA används för att konvertera värdet till önskad typ.
  • DATUM TID får ett värde av typen "Datum" från numeriska värden (år, månad, dag, timme, minut, sekund).
  • MENANDE i en 1C-förfrågan används den för att specificera fördefinierade värden - kataloger, uppräkningar, planer för typer av egenskaper. Användningsexempel: " Där LegalIndividual = Value(Enumeration.LegalIndividual.Individual)«.

Frågebyggare

För att skapa frågor med 1C finns det en mycket bekväm inbyggd mekanism - frågedesignern. Den innehåller följande huvudflikar:

  • "Tabell och fält" - innehåller de fält som ska väljas och deras källor.
  • "Länkar" - beskriver villkoren för CONNECTION-konstruktionen.
  • "Gruppering" - innehåller en beskrivning av konstruktionerna av grupperingar och sammanfattade fält av dem.
  • "Villkor" - ansvarar för valet av data i förfrågan.
  • "Avancerat" - ytterligare frågeparametrar, såsom nyckelorden för kommandot "SELECT" etc.
  • "Joins / Alias" - möjligheterna att sammanfoga tabeller indikeras och alias sätts ("HOW"-konstruktionen).
  • "Order" - ansvarar för att sortera resultatet av frågor.
  • "Totals" - liknande fliken "Gruppering", men används för "TOTALS"-konstruktionen.

Texten i själva förfrågan kan ses genom att klicka på knappen "Begäran" i det nedre vänstra hörnet. I detta formulär kan det korrigeras manuellt eller kopieras.


Frågekonsol

För att snabbt se resultatet av en fråga i "Enterprise"-läge, eller för att felsöka komplexa frågor, använd . Frågetexten skrivs i den, parametrar ställs in och resultatet visas.

Du kan ladda ner frågekonsolen på ITS-disken eller med .

NULL är inget annat än frånvaron av ett värde. Många förväxlar det med värdet "0" för nummertypen, en tom referens till något objekt eller med en tom sträng. Denna missuppfattning orsakar många fel.

NULL-värdet visas om frågan hänvisar till ett obefintligt fält, egenskap eller trasig länk.

Baserat på SQL, vilket inte tillåter dig att testa för NULL med vanlig likhet. Nedan finns två sätt att kontrollera efter NULL i 1C 8.3.

1C 8.3 frågespråksfunktionen IS NULL() har två indataparametrar:

  • uttrycket som ska kontrolleras;
  • ersättningsuttryck.

Om värdet som testas är NULL, returnerar denna funktion värdet för ersättningsuttrycket. Om värdet inte är NULL kommer uttrycket som kontrolleras att returneras.

Nedan följer ett exempel. Den väljer alla lagerartiklar i den tabellformade delen av varorna från dokumentet "Mottagande av varor och tjänster". Med hjälp av en vänsteranslutning förses varje vara med sista pris från informationsregistret "Varupriser".

I detta fall kan en situation uppstå att det för någon position helt enkelt inte finns något pris i registret. I detta fall kommer ISNULL-funktionen att returnera oss den vanliga nollan. Om du inte använder det kommer vi att få ett fel när du försöker utföra aritmetiska operationer i "Pris"-fältet med ett NULL-värde.

VÄLJA

ISNULL(Priser.Pris, 0) SOM Faktiskt Pris
FRÅN



VAR

DET FINNS NULL i SELECT-satsen

Analogen till funktionen ISNULL() är "IS NULL", som används i SELECT-satsen och kontrollerar om värdet är NULL. "IS" i det här fallet innebär likhet, och frågan i föregående exempel skulle se ut så här:

VÄLJA
Products.Nomenclature AS Produkt,
VAL
NÄR Priser.Priset ÄR NULL
DÅ 0
ANNAT Priser.Pris
SLUT SOM Faktiskt Pris
FRÅN
Document.Incoming GoodsServices.Goods AS Goods
VÄNSTER GÅ MED
PO Goods.Nomenclature = Priser.Nomenklatur
VAR
Goods.Link = &LinkToDocument

Skillnader mellan ISNULL()-funktionen och IS NULL-funktionen

Som du kan se från de tidigare exemplen, returnerar frågan samma data i båda fallen. Funktionen ISNULL() är en förkortning för SELECT WHEN...IS NULL...END, men den är fortfarande att föredra av följande skäl:

  1. Funktionen ESTNULL() optimerar frågan. Den läses en gång, så när du kontrollerar ett komplext uttryck kommer frågan att köras snabbare.
  2. Funktionen ESTNULL() förkortar konstruktionen, vilket gör frågan mer läsbar.
  3. När funktionen ESTNULL() exekveras, konverteras ersättningsuttrycket till typen av uttryck som kontrolleras för typerna av strängtyper (till strängens längd) och numeriska typer (till bitheten).

I den här artikeln vill vi diskutera med er alla frågespråksfunktioner 1s, och frågespråkskonstruktioner. Vad är skillnaden mellan en funktion och en struktur? Funktionen anropas med parenteser och eventuella parametrar i dem, och konstruktionen skrivs utan parentes. Otvivelaktigt alla konstruktioner och funktioner för 1s frågespråk göra datainsamlingsprocessen flexibel och multifunktionell. Dessa funktioner och konstruktioner gäller för frågefält, och vissa gäller även för villkor.

Frågespråksfunktioner 1s

Eftersom en tydlig beskrivning frågespråksfunktioner 1sär mycket mindre vanligt än beskrivningen av strukturer, bestämde vi oss för att börja titta på funktioner. Låt oss nu analysera var och en separat och beskriva dess syfte, syntax och användningsexempel, så:

1. Fungera DATUM TID- den här funktionen skapar ett konstant fält med typen "Datum".

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

Användningsexempel:

2. DATE DIFFERENCE funktion- returnerar skillnaden mellan två datum i en av dimensionerna (år, månad, dag, timme, minut, sekund). Mätningen skickas som en parameter.

Syntax: DIFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Användningsexempel:

Query.Text = "SELECT | DATE DIFFERENCE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Antal dagar";

3. Funktion VALUE- ställer in ett konstant fält med en fördefinierad post från databasen, du kan också få en nollreferens av vilken typ som helst.

Syntax: VALUE(<Имя>)

Användningsexempel:

Fråga . Individuell) AS Individual, //fördefinierat konto | VÄRDE(Kontoplan.Självförsörjande.Material) AS Account_10" ;

4. SELECT-funktion- Vi har en analog till IF-konstruktionen som används i koden, bara denna används i 1C-frågor.

Syntax: VAL NÄR<Выражение>SEDAN<Выражение>ANNAT<Выражение>SLUTET

Användningsexempel:

Request.Text = //om beloppet är mer än 7500, bör det finnas en rabatt på 300 rubel, //derför, om villkoret utlöses, då funktionen //returnerar Beloppet - 300 //annars, begäran kommer helt enkelt att returnera beloppet "SELECT | SELECT | NÄR PMIncome.Amount > 7500 | THEN PTReceipts.Amount - 300 | ELSE PTReceipts.Amount | END AS AmountDiscounted |FROM | Document.ReceiptofGoodsServices.Goods AS PTReceipts";

5. EXPRESS-funktion- låter dig uttrycka ett konstant fält med en specifik typ.

Syntax: EXPRESS(Fältnamn AS Typnamn)

Användningsexempel:

Query.Text = "VÄLJ VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar REF Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar REF Document.Implementation | DÅ EXPRESS(Sales.Registrar AS Document.Release) | END | ... | END AS Number | FROM | Ackumuleringsregister.Purchases AS Purchases";

Finns det fortfarande en variant av användningen av EXPRESS-funktionen i fält av de blandade typerna där sådana möts? Det enklaste exemplet är "Registrar" för alla register. Så varför skulle vi behöva kvalificera typen i registraren? Låt oss överväga situationen när vi väljer fältet "Nummer" från registraren, från vilken tabell kommer numret att väljas? Rätt svar av alla! Därför, för att vår fråga ska fungera snabbt måste vi ange en explicit typ med hjälp av EXPRESS-funktionen

Användningsexempel:

Query.Text = "COOSE | EXPRESS(Nomenclature.Comment AS String(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Reference.Nomenclature AS Nomenclature";

6. ISNULL-funktion(alternativ stavning ÄR NULL) - om fältet är av typen NULL, så ersätts det av funktionens andra parameter.

Syntax: ÄR INGET(<Поле>, <ПодставляемоеЗначение>)

Användningsexempel:

Observera också att det är önskvärt att ALLTID ersätta NULL-typen med något värde, eftersom jämförelse med NULL utvärderas alltid till FALSE även om du jämför NULL med NULL. Oftast bildas NULL-värden som ett resultat av tabellkopplingar (alla typer av kopplingar utom inre).

Query.Text = //Välj hela posten och saldonen på den //om det inte finns något saldo i någon post, kommer det att finnas ett fält //NULL som kommer att ersättas med värdet 0 "SELECT | No.Reference, | ISNULL(GoodsInWarehouseRemains.InStockRemaining, 0) HUR Remainder | FROM | Katalog. Nomenklatur AS Nom | LEFT JOIN Ackumuleringsregister.

7. REPRESENTATION funktion- låter dig få en representation av förfrågningsfältet.

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

Användningsexempel:

Query.Text = "SELECT | REPRESENTATION(Free RemainsRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Accuulation Register.FreeRemainsRemains.Remains.Remains.Remains

Konstruktioner i frågespråket 1s

Ovan diskuterade vi med dig frågespråksfunktioner 1s, nu är det dags att överväga konstruktioner i frågespråk 1s, de är inte mindre viktiga och användbara, låt oss börja.

1. Bygg LÄNK- är en logisk kontrolloperatör för referenstyp. Vanligast när man testar ett fält av en sammansatt typ för en viss typ. Syntax: LÄNK<Имя таблицы>

Användningsexempel:

Query.Text = //om värdetypen för registraren är dokumentkvitto, //då returnerar frågan "Inkommande varor", annars "Välj varuförsäljning" "VÄLJ | VÄLJ | NÄR Remains.Registrar LINK Document.Incoming GoodsServices | DÅ ""Inkommande" | ANNAT "Utgift" | AVSLUTA AS Typ av förflyttning | FRÅN | Ackumuleringsregister. Rester av varor i lager AS kvarstår ";

2. Konstruktion MELLAN- denna operatör kontrollerar om värdet ligger inom det angivna intervallet.

Syntax: MELLAN<Выражение>OCH<Выражение>

Användningsexempel:

Query.Text = //få all nomenklatur vars kod är i intervallet från 1 till 100 "SELECT | Nomenclature.Reference |FROM | Catalog.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code MELLAN 1 OCH 100" ;

3. Konstruktion B och B av HIERARKIN- kontrollera om värdet finns i den godkända listan (matriser, värdetabeller etc. kan skickas som en lista). Operatören IN HIERARKI låter dig se hierarkin (exempel på användning av PlanAccounts).

Syntax: I(<СписокЗначений>), I HIERARKIN(<СписокЗначений>)

Användningsexempel:

Query.Text = // välj alla underkonton till kontot "VÄLJ | Självförsörjande. Länka AS-konto | FRÅN | Kontoplan. Självförsörjande AS Självförsörjande | VAR | Självförsörjande. Referens I HIERARKIVÄRDE( Bokföringsschema. Självförsörjande. Varor)";

4. Konstruktion LIKE- den här funktionen låter oss jämföra en sträng mot ett strängmönster.

Syntax: TYCKA OM"<ТекстШаблона>"

Alternativ för linjemall:

% - en sekvens som innehåller valfritt antal godtyckliga tecken.

En godtycklig karaktär.

[...] - vilket enstaka tecken som helst eller en sekvens av tecken inom hakparenteser. Uppräkningen kan innehålla intervall, såsom a-z, vilket betyder vilket tecken som helst inom intervallet, inklusive ändarna av intervallet.

[^...] - vilket enstaka tecken som helst eller en sekvens av tecken listade inom hakparenteser, förutom de som listas efter negationstecknet.

Användningsexempel:

Query.Text = //hitta hela nomenklaturen som innehåller roten TABUR och börjar //antingen med en liten eller med stor bokstav t "SELECT | Nomenclature.Reference |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Goods.Name LIKE ""[Тт]abur%""" ;

5. Design TILLÅTEN- Med detta uttalande kan du endast välja de poster från databasen som den som ringer har rätt att läsa. Dessa rättigheter är konfigurerade på postnivå (RLS).

Syntax: ALLOWED skrivs efter nyckelordet SELECT

Användningsexempel:

Query.Text = "VÄLJ TILLÅTET | Motparter.Referens |Från | Directory.Motparter AS Motparter";

6. Konstruktion OLIKA- låter dig välja poster där det inte finns några upprepade poster.

Syntax: DIFFERENT skrivs efter nyckelordet SELECT

Användningsexempel:

Request.Text = //väljer poster som läsaren har rättigheter till "SELECT DIFFERENT | Counterparties.Name |FROM | Directory.Counterparties AS Counterparties" ;

DIFFERENT-konstruktionen kan också användas med operatorn ALLOWED och andra operatorer.

Användningsexempel:

Query.Text = //väljer olika poster som läsaren har rättigheter till "SELECT ALLOWED DIFFERENT | Contractors.Name |FROM | Directory.Contractors AS Contractors";

7. Konstruktion FÖRST- väljer antalet poster som anges i parametern från frågeresultatet.

Syntax: FIRST<число>

Användningsexempel:

Query.Text = //välj de första 4 GTD-numren från katalogen "VÄLJ DE FÖRSTA 4 | GTD-nummer.Referens |Från | Katalog.GTE-nummer SOM GTD-nummer";

8. Design FÖR FÖRÄNDRING- låter dig låsa bordet, fungerar endast i transaktioner (relevant endast för automatiska lås).

Syntax: FÖR FÖRÄNDRING<НаименованиеТаблицы>

Användningsexempel:

Query.Text = "SELECT | FreeRemainsRemains.Nomenclature, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Ackumuleringsregister.FreeRemains.Remains AS FreeRemainsRemains |FÖR ÄNDRING |

9. Struktur BESTÄLL EFTER- sorterar data efter ett specifikt fält. Om fältet är en länk, då när flaggan ställs in AUTO BESTÄLLNING kommer att sorteras enligt länkrepresentationen, om flaggan är avstängd, så sorteras länkarna efter senioriteten för länkadressen i minnet.

Syntax: SORTERA EFTER<НаименованиеПоля>AUTO BESTÄLLNING

Användningsexempel:

Query.Text = "VÄLJ | FreeRemainsRemains.Nomenclature AS Nomenclature, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining |FROM | Accumulation Register.FreeRemains.Remains AS FreeRemainsRemains | | BESTÄLLNINGAR BY No;

10. Design GROUP BY- används för att gruppera frågesträngar efter vissa fält. Numeriska fält måste användas med alla aggregerade funktioner.

Syntax: GRUPP AV<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Användningsexempel:

Query.Text = "SELECT | ItemsInWarehouse.Nomenclature AS Nomenclature, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |FROM |

11. Design HA- låter dig tillämpa en aggregatfunktion på dataurvalsvillkoret, liknande WHERE-konstruktionen.

Syntax: HAR<агрегатная функция с условием>

Användningsexempel:

Query.Text = //väljer grupperade poster där InStock-fältet är större än 3 "SELECT | GoodsInStock.Nomenclature AS Nomenclature, | GoodsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |FROM | Ackumuleringsregister.GoodsInWarehouse ASs GoodsInWarehouse | |GRUPPER EFTER | Varor I lager.Nomenklatur, | Varor i lager.Lager | |HAR | BELOPP(Varor i lager.I lager) > 3" ;

12. INDEX EFTER konstruktion- används för att indexera frågefältet. En indexerad fråga tar längre tid att slutföra, men snabbar upp sökningar på indexerade fält. Kan endast användas i virtuella tabeller.

Syntax: INDEXERA EFTER<Поле1, ... , ПолеN>

Användningsexempel:

Query.Text = "SELECT | Tz.OS Name, | Tz.Folder Number, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz |FROM | &Tz HUR Tz | | INDEXERA BY | Tz.OS Name , | Tz .CodeOS";

13. Konstruktion VAR- låter dig införa ett villkor för valfri fält i urvalet. Endast poster som uppfyller villkoret kommer att ingå i resultatet.

Syntax: VAR<Условие1 ОператорЛогСоединения УсловиеN>

Användningsexempel:

Query.Text = //välj alla poster med CompensationRemainder<>0 och // AmountFor Calc.CompBalance > 100 "VÄLJ | Kompensation RPO-saldon.Motpart, | Kompensation RPO-saldon.Barn, | Kompensations-RPO-saldon. Kompensationssaldo, | Kompensations-RPO-saldon. AmountFor Calc.Comp-saldo | PLACERA DataTz | FROM | Ackumuleringsregister Kompensation RP Saldon AS Kompensation R Saldon | VAR | Kompensation RPO saldon Kompensationssaldo<>0 | Och kompensation RPO saldon. Belopp för CalcComp Residual > 100" ;

14. Design RESULTAT ... AV ALLMÄNT- används för att beräkna totalsummorna, designen specificerar de fält med vilka totalsummorna kommer att beräknas och aggregerade funktioner tillämpas på de totala fälten. När man använder totaler för varje fält efter TOTALS-konstruktionen, grupperas data. Det finns en valfri konstruktion ALLMÄNT, dess användning ger också ytterligare gruppering. Du kan se ett exempel på frågeresultatet nedan.

Syntax: RESULTAT<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>FÖRBI<ОБЩИЕ> <Поле1, ... , ПолеN>

Användningsexempel:

Query.Text = "VÄLJ | Settlements.Motpart Agreement.Type of Agreement AS Type of Agreement, | Settlements.Countryparty Agreement AS Agreement, | Settlements.Motparty, | Settlements.Mängd ömsesidiga SettlementsBalance AS Saldo |FRÅN | | Programvara | ALLMÄNT, | Kontraktstyp";

Grupperingar som bildades under utförandet av begäran är inringade i figuren, den översta hänvisar till sektionen ALLMÄNT och den andra till fältet ContractContractorTypeContract.