Innehåller i begäran 1s. Liknar frågevillkor. Exempel: välj produkter vars namn slutar med ett nummer

LIKE-operatorn i en fråga kontrollerar strängvärden från tabeller för likhet med ett mönster.
Den används enligt följande till vänster om denna operator är strängen som ska kontrolleras, och till höger är mallen.

Efter kontroll returnerar den True eller False, den används aktivt under förhållanden.
Följande servicesymboler används för att skapa en mall:

  • % (procent) - en sekvens som innehåller valfritt antal godtyckliga tecken
  • _ (understreck) - ett godtyckligt tecken
  • […] (ett eller flera tecken inom hakparenteser) - vilket enstaka tecken som helst inom hakparenteser
    Dessutom, förutom olika tecken, kan intervall användas, till exempel a-z(A-z), vilket betyder att det finns ett godtyckligt tecken som ingår i intervallet, inklusive ändarna av intervallet.
  • [^...] (inom hakparenteser ett negationstecken följt av ett eller flera tecken) - vilket enstaka tecken som helst, förutom de som anges efter negationstecknet

De återstående tecknen används för sitt avsedda syfte.
Om ett av ovanstående tjänstecken måste överföras som ett tecken, måste det föregås av<Спецсимвол>. Jag själv<Спецсимвол>(vilket lämpligt tecken som helst) definieras i samma sats efter nyckelordet SPECIAL CHARACTER.
Till exempel betyder mönstret "%ABC[abc]\_abc%" SPECIALTECKET "\" en delsträng som består av en sekvens av tecken:
bokstäverna A; bokstäverna B; bokstäverna B; en siffra; en av bokstäverna a, b, c eller d; understrykningskaraktär; bokstäverna a; bokstäverna b; bokstäver in.
Dessutom kan denna sekvens föregås av en godtycklig uppsättning tecken.

Procedur SelectContractContainingInNameText(mText)
//I begäran kommer vi att använda en mall som "%" + mText + "%" Request = New Request; Query.SetParameter("Namn", "%" + Text + "%"); Query.Text = "SELECT | Agreements.Reference, | Agreements.Owner |FROM | Directory.AgreementsofCounterparties AS Agreements | |WHERE | Agreements.Name LIKE &Name"; Result = Request.Run(); Selection = Result.Select(); Report("Avtal som innehåller i namnet: " + mText + " har följande motparter"); While Selection.Next() Loop Report("Konto: " + Selection.Owner + "; Kontrakt: " + Selection.Reference EndIf; EndProcedure

I den här artikeln vill vi diskutera med er alla frågespråksfunktioner 1s, såväl som 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 - given funktion 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. VÄLJ 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 specifik 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: PÅ(<СписокЗначений>), 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 = "SELECT | FreeRemainsRemains.Nomenclature AS Nomenclature, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining |FROM |

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.Konto, | Kompensation RPO-saldon.Barn, | Kompensations-RPO-saldon. Kompensationssaldo, | Kompensations-RPO-saldon. AmountFor Calc. Comp-saldo | PLACE DataTz |FRÅN | Ackumuleringsregister Ersättning RP Saldon AS Ersättning RPO Saldon |<>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 fälten för vilka totalsummorna kommer att beräknas och aggregerade funktioner tillämpas på sammanfattningsfält. 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>PÅ<ОБЩИЕ> <Поле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.

Trots alla brister är textfältsökning fortfarande en av de mest populära. Vi kan möta strängdatatyper överallt - namn, kontonummer, adresser och annan information kan lagras i detta format. I frågor på det inbyggda 1C-språket, för utvecklarnas bekvämlighet, speciell operatör"TYCKA OM". Detta är ett av de mest använda kommandona, så utan en grundlig kunskap om dess syntax och kapacitet kommer det att vara svårt för en programmerare att arbeta.

Använder operatorn "LIKE".

Innan du använder någon operatör i praktiken måste du tydligt förstå dess syfte, applikationsplatser och syntax. Syftet med att använda "LIKE" i 1C-frågan är att kontrollera att villkoret är uppfyllt som en mall. Returvärdet är ett booleskt värde, sant eller falskt, vilket indikerar om det angivna villkoret är uppfyllt. LIKE-operatorn kan användas på flera ställen i en fråga:

  • I villkorsblocket märkt nyckelord"VAR";
  • I konstruktionen Val When Then Else End;
  • Direkt i urvalsfälten, som ett resultat av fältjämförelse.

Syntaxen för kontrollen är alltid densamma och består av 3 länkar. Till vänster är textvärdet som kontrolleras, sedan själva "LIKE"-operatorn och till höger är mallen som kontrolleras. För att snabbt och enkelt skapa mallar finns det Särskilda symboler underlätta utveckling:

  1. "%" - en sekvens av alla tecken godtycklig längd. Används för att söka efter enskilda ord eller siffror i en sträng;
  2. "_" är ett enskilt tecken. Designad för att indikera närvaron av en karaktär;
  3. "[...]" är en sekvens av tecken att jämföra med ett tecken i strängen. Med hjälp av ett sådant mönster kontrolleras en matchning för någon av de tecken som anges inom parentes. Du kan också ange ett antal siffror eller bokstäver ([a-g], );
  4. "[^...]" är motsatsen till föregående mönster. Skillnaden mellan tecknet som anges i strängen och de som anges inom parentes kontrolleras.

För att bättre assimilera och förstå principerna för att skapa korrekta mallar, låt oss titta på några exempel som ofta stöter på i utvecklarnas liv. Den första är när vi behöver välja från nomenklaturens referensbok alla positioner i vars namn ordet "CUTTER" förekommer. I det här fallet måste vi använda LIKE i frågevillkoren:

VÄLJ Nomenclature.Name AS Name FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SOM "%CUTTER%"

Om vi ​​tar bort båda "%"-tecknen, kommer frågan att visa nomenklaturen, där namnet helt matchar det som anges inom citattecken. Om vi ​​lämnar mallen "CUTTER%" eller "%CUTTER", kommer resultatet att bli en lista med nomenklatur som slutar respektive börjar med en given kombination av tecken.


Låt oss analysera ett problem som kan förvirra nybörjare som inte känner till frågesyntaxen. Låt oss säga att du måste hitta all nomenklatur, i vars namn det finns en symbol "%". Speciellt för de fall då du behöver söka efter reserverade tecken finns det en "special character"-operator. Som specialtecken kan du använda #, \, /, ~ och andra tecken, varefter alla reserverade tecken helt enkelt betecknar ett tecken.

VÄLJ Nomenclature.Name AS Namn FRÅN Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SOM "%#%" SPECIALTECKET "#"

Om du behöver använda en parameter i sökningen, används variabeln i frågan med parametern LIKE genom att lägga till. Kom ihåg att parametern måste vara en strängtyp annars måste du konvertera den till en sträng i begäran. Detta är en ganska komplicerad operation och det är bättre att utesluta det i förväg.

VÄLJ Nomenclature.Name AS Name FROM Lookup.Nomenclature AS Nomenclature WHERE Nomenclature.Name SOM "%" + &name + "%"

LIKE-funktionen är tillämplig i alla versioner av plattformen, från och med 8, och på grund av dess tillämplighet kommer 1C-utvecklare inte att vilja ändra den. Naturligtvis beror textsökning alltid på exaktheten i att skriva in namnet, men det är fortfarande en av de vanligaste. I detta avseende måste professionella 1C-utvecklare studera användningen av LIKE med alla dess nyanser.

43
NULL - saknade värden. Ej att förväxla med null! NULL är inte ett tal, inte lika med ett mellanslag, nollreferens, odefinierat. NULL är ett typbildande värde, dvs. det finns en NULL-typ och ett enda värde av denna typ. NULL... 26
För att skapa och utföra frågor till databastabeller i 1C-plattformen används ett speciellt objekt av programmeringsspråket Request. Detta objekt skapas genom att anropa New Request-konstruktionen. Bekväm begäran... 18
Artikeln ger användbara knep 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 Full beskrivning frågespråk, men jag vill bara fokusera på ... 12
Inför uppgiften var det nödvändigt att välja alla dokument för betalningen och gruppera dem efter dokumenttyp! När jag tittade igenom alla boenden och kommunala tjänster och internet insåg jag det enkla vägen få dokumenttyp i begäran nr:(Jag var tvungen...

Operatör TYCKA OM låter dig i en fråga jämföra data för strängtypen till vänster om operatorn med data för strängtypen till höger om operatorn. Resultatet av jämförelsen är Sant eller Falskt, så jämförelsen kan användas som ett villkor.

För operatör TYCKA OM specialtjänsttecken tillhandahålls som inte uppfattas som en sträng:

  • "%" procentsymbol: indikerar närvaron av valfritt antal godtyckliga tecken i strängen
  • "[...]" ett eller flera tecken inom hakparenteser: indikerar närvaron av någon (enskild) av de listade tecknen. Dessutom kan ett antal tecken anges (till exempel )
  • "_" understreck: indikerar närvaron av godtyckliga tecken
  • "[^...]" negationstecken: anger närvaron av ett enda tecken utom de inom hakparenteser
Om du behöver ange ett av ovanstående specialtecken för jämförelse måste du använda nyckelordet "SPECIAL CHARACTER"

Funktioner för användning med olika DBMS

IBM DB2" Endast en parameter kan lokaliseras till höger om LIKE-operatorn. De enda jokertecknen är "_" (understreck betyder vilket tecken som helst) och "%" (procent som betyder en sekvens av alla tecken).
Vid användning av en DBMS " PostgreSQL" eller " Oracle Database"specialtecken "hakparenteser [...]" accepteras endast om det anges av texten i begäran, och skickas INTE som en parameter till begäran.

I filbasen kommer specialtecken därför alltid att uppfattas på samma sätt och på olika sätt, beroende på vilket DBMS som används i klient-serverversionen.

Exempel: välj produkter som innehåller symbolen "%" i namnet

VÄLJ | Referenslänk | FRÅN | Spravochnik.Nomenklatur HUR ref | VAR | Ref Namn SOM "%\%" SPECIALTECKEN "\"

Exempel: välj produkter vars namn börjar med ordet "Tank"

VÄLJ | Referenslänk | FRÅN | Spravochnik.Nomenklatur HUR ref | VAR | Ref Namn SOM "Buck%"

Exempel: välj produkter vars namn slutar med ett nummer

VÄLJ | Referenslänk | FRÅN | Spravochnik.Nomenklatur HUR ref | VAR | Ref Namn SOM "%"