• Stejně jako v žádosti 1s 8.3. Podobné jako podmínky dotazu. Příklad: vyberte produkty, jejichž název končí číslem

    Přes všechny nedostatky je vyhledávání v textových polích stále jedním z nejoblíbenějších. Řetězcové datové typy se můžeme setkat všude - v tomto formátu lze ukládat jména, čísla účtů, adresy a další informace. V dotazech ve vestavěném jazyce 1C se pro pohodlí vývojářů používá speciální operátor „LIKE“. Jedná se o jeden z nejpoužívanějších příkazů, takže bez důkladné znalosti jeho syntaxe a možností bude programátor pracovat jen těžko.

    Pomocí operátoru „LIKE“.

    Než zavedete jakýkoli operátor do praxe, musíte jasně pochopit jeho účel, místa použití a syntaxi. Účelem použití „LIKE“ v dotazu 1C je zkontrolovat splnění podmínky prezentované jako šablona. Vrácená hodnota je logická hodnota, true nebo false, indikující, zda je zadaná podmínka splněna. Operátor LIKE lze v dotazu použít na několika místech:

    • V bloku podmínek označených klíčovým slovem "WHERE";
    • V konstrukci Choice When Then Else End;
    • Přímo ve výběrových polích, jako výsledek porovnávání polí.

    Syntaxe kontroly je vždy stejná a skládá se ze 3 odkazů. Vlevo je textová hodnota, která se kontroluje, poté samotný operátor „LIKE“ a vpravo je kontrolovaná šablona. Pro rychlé a pohodlné vytváření šablon existují speciální symboly, které usnadňují vývoj:

    1. "%" je posloupnost libovolných znaků libovolné délky. Používá se k vyhledávání jednotlivých slov nebo čísel v řetězci;
    2. "_" je libovolný jednotlivý znak. Navrženo k označení přítomnosti jednoho znaku;
    3. "[...]" je posloupnost znaků k porovnání se znaménkem v řetězci. Pomocí takového vzoru se kontroluje shoda pro kterýkoli ze znaků uvedených v závorkách. Můžete také zadat rozsah čísel nebo písmen ([a-g], );
    4. „[^…]“ je opakem předchozího vzoru. Zkontroluje se rozdíl mezi znakem zadaným v řetězci a znaky uvedenými v závorkách.

    Pro lepší asimilaci a pochopení principů tvorby správných šablon se podívejme na některé příklady, se kterými se vývojáři často setkávají. První je, když potřebujeme vybrat z nomenklaturní příručky všechny pozice, v jejichž názvech se slovo "CUTTER" vyskytuje. V tomto případě musíme v podmínkách dotazu použít LIKE:

    SELECT Nomenclature.Name AS Name FROM Directory.Nomenclature AS Nomenklatura WHERE Nomenklatura.Name LIKE "%CUTTER%"

    Pokud odstraníme oba znaky "%", pak dotaz zobrazí nomenklaturu, ve které se název zcela shoduje s názvem uvedeným v uvozovkách. Pokud ponecháme šablonu "CUTTER%" nebo "%CUTTER", pak výsledkem bude seznam nomenklatury končící, respektive začínající danou kombinací znaků.


    Pojďme si rozebrat problém, který může zmást začínající programátory, kteří neznají syntaxi dotazu. Řekněme, že potřebujete najít celou nomenklaturu, v jejímž názvu je symbol „%“. Zejména pro případy, kdy potřebujete vyhledat vyhrazené znaky, existuje operátor „speciální znak“. Jako speciální znak můžete použít #, \, /, ~ a další znaky, po kterých budou všechny vyhrazené znaky jednoduše označovat znak.

    SELECT Nomenclature.Name AS Name FROM Directory.Nomenklatura AS Nomenklatura WHERE Nomenklatura.Name LIKE "%#%" SPECIÁLNÍ CHARAKTER "#"

    Pokud potřebujete použít parametr ve vyhledávání, pak se proměnná v dotazu s parametrem LIKE použije přidáním. Pamatujte, že parametr musí být typu řetězce, jinak jej budete muset v požadavku převést na řetězec. Jedná se o poměrně komplikovanou operaci a je lepší ji předem vyloučit.

    SELECT Nomenclature.Name AS Name FROM Lookup.Nomenclature AS Nomenclature WHERE Nomenclature.Name LIKE "%" + &name + "%"

    Funkce LIKE je použitelná ve všech verzích platformy počínaje 8 a vzhledem k její použitelnosti ji vývojáři 1C nebudou chtít měnit. Textové vyhledávání samozřejmě vždy závisí na přesnosti zadání jména, ale stále zůstává jedním z nejběžnějších. V tomto ohledu musí profesionální vývojáři 1C prostudovat použití LIKE se všemi jeho nuancemi.

    JAKO- Operátor pro kontrolu, zda je řetězec podobný vzoru. Analog LIKE v SQL.
    Operátor JAKO umožňuje porovnat hodnotu výrazu zadaného vlevo od něj s řetězcem šablony zadaným vpravo. Hodnota výrazu musí být typu string. Pokud se hodnota výrazu shoduje se šablonou, výsledek operátoru je TRUE, jinak je FALSE.
    Následující znaky v řetězci šablony jsou servisní znaky a mají jiný význam než znak řetězce:
    . % (procento): sekvence obsahující libovolný počet libovolných znaků
    . _ (podtržítko): jeden libovolný znak
    . […] (jeden nebo více znaků v hranatých závorkách): jakýkoli jednotlivý znak uvedený v hranatých závorkách
    Výčet může obsahovat rozsahy, jako je a-z, což znamená jakýkoli znak v rozsahu, včetně konců rozsahu.
    . [^…] (v hranatých závorkách znak záporu následovaný jedním nebo více znaky): jakýkoli jednotlivý znak jiný než ty, které jsou uvedeny za znakem záporu
    Jakýkoli jiný symbol znamená sám sebe a nenese žádnou další zátěž.
    Pokud je nutné napsat jeden z uvedených znaků jako samotný, pak mu musí předcházet<Спецсимвол>. Moje maličkost<Спецсимвол>(jakýkoli vhodný znak) je definován ve stejném příkazu za klíčovým slovem SPECIAL CHARACTER.
    Například, vzor „%ABC[abc]\_abc%“ SPECIÁLNÍ ZNAK „\“ znamená podřetězec sestávající z posloupnosti znaků:
    písmena A; písmena B; písmena B; jedna číslice; jedno z písmen a, b, c nebo d; znak podtržení; písmena a; písmena b; písmena v.
    Navíc této sekvenci může předcházet libovolná sada znaků.

    Příklady použití:
    Kód 1C v 8.x Postup BankTextInputEnd(prvek, text, hodnota, standardní zpracování)
    StandardProcessing = False;
    //Proveďte dotaz s hledáním vzoru jako "%" +<Текст введенный пользователм в поле ввода> + "%"
    Žádost = Nová žádost;
    Query.SetParameter("Name", "%" + Text + "%");
    Query.Text = "VYBRAT
    | Banks.Link
    | OD
    | Adresář Banky AS Banky
    | KDE
    | Banks.Name JE LIKE &Name";

    Výsledek = Request.Run();
    Selection = Result.Select();
    If Result.Empty() Then
    //Nic nalezeno. Zde můžete zobrazit zprávu nebo něco jiného udělat :)
    v opačném případě
    //Získejte výsledky
    tzResults = Result.Unload();
    //Připravte seznam hodnot, které budou obsahovat nalezené prvky.
    Hodnota = Nový seznam hodnot();
    Value.LoadValues(tzResults.UnloadColumn("Odkaz"));
    EndIf;
    EndProcedure

    Je nutné, aby do „Výchozích smluv“ spadala pouze Názvy Hlavní smlouvy atd.:
    Kód 1C v 8.x Volba
    Když Název JE AKO "Smlouva #%", pak "Smlouva #" //Kvalifikuje se jakýkoli řádek začínající "Smlouva #"
    Když je název LIKE "Hlavní smlouva%[^А-яЁё"+Symbol(33)+"-"+Symbol(126)+"№"""+Symboly.PS+Symboly.Tab+Symboly.PF+Symboly. NPP+ Symbols.VTab+"]%" a potom "Výchozí dohody" //Jakýkoli řetězec začínající na "Hlavní smlouva" bude stačit
    Jinak "jiné"
    Konec jako druh smlouvy

    Informace převzaté z webu

    Operátor LIKE v dotazu kontroluje hodnoty řetězců z tabulek na podobnost se vzorem.
    Používá se následovně, vlevo od tohoto operátoru je řetězec, který se má zkontrolovat, a vpravo je šablona.

    Po kontrole vrací True nebo False, respektive je aktivně používán v podmínkách.
    K vytvoření šablony se používají následující symboly služeb:

    • % (procento) - sekvence obsahující libovolný počet libovolných znaků
    • _ (podtržítko) - jeden libovolný znak
    • […] (jeden nebo více znaků v hranatých závorkách) – jakýkoli jednotlivý znak uvedený v hranatých závorkách
      Kromě různých znaků lze také použít rozsahy, například a-z(A-z), což znamená, že v rozsahu je zahrnut libovolný znak, včetně konců rozsahu.
    • [^…] (v hranatých závorkách znak záporu následovaný jedním nebo více znaky) – libovolný jednotlivý znak, kromě znaků uvedených za znakem záporu

    Zbývající znaky jsou použity pro zamýšlený účel.
    Pokud musí být jeden z výše uvedených servisních znaků přenášen jako znak, musí mu předcházet<Спецсимвол>. Moje maličkost<Спецсимвол>(jakýkoli vhodný znak) je definován ve stejném příkazu za klíčovým slovem SPECIAL CHARACTER.
    Například vzor „%ABC[abc]\_abc%“ SPECIÁLNÍ ZNAK „\“ znamená podřetězec sestávající z posloupnosti znaků:
    písmena A; písmena B; písmena B; jedna číslice; jedno z písmen a, b, c nebo d; znak podtržení; písmena a; písmena b; písmena v.
    Navíc této sekvenci může předcházet libovolná sada znaků.

    Postup SelectContractContainingInNameText(mText)
    //V požadavku použijeme šablonu jako "%" + mText + "%" Požadavek = Nový požadavek; Query.SetParameter("Name", "%" + Text + "%"); Query.Text = "SELECT | Agreements.Reference, | Agreements.Owner |FROM | Directory.Agreementsof Counterparties AS Agreements | |WHERE | Agreements.Name LIKE &Name"; Výsledek = Request.Run(); Selection = Result.Select(); Report("Dohody obsahující v názvu: " + mText + " mají následující protistrany"); While Selection.Next() Loop Report("Účet: " + Selection.Owner + "; Smlouva: " + Selection.Reference EndIf; EndProcedure

    Zvažte účel a použití podmíněného operátoru JAKO v dotazovacím jazyce 1C v příkladech.

    Rychlý průchod

    účel

    Zkontrolujte, zda hodnota řetězce v dotazu odpovídá zadanému vzoru - vrátí hodnotu typu Boolean (TRUE nebo FALSE).

    • Kontrola registru je nezávislá.
    • Dotaz používá indexy tabulek – nesouvisí s indexy fulltextového vyhledávání.
    • U velkých stolů to může trvat dlouho.
    • Řetězce neomezené délky by měly být přetypovány pomocí funkce SUBSTRING

    Místa použití

    • V podmínkách provozovatele KDE
    • Z hlediska designu VOLBA KDYŽ<>PAK "" JINAK "" KONEC
    • V polích výběru (například: Název LIKE & Parametr podobný jako řetězec Vhodné)

    Popis syntaxe operátora LIKE

    Parametr operátora musí být řetězec: může být zadán jako konstanta nebo předán jako parametr dotazu.

    Literály (masky) uvedené níže lze použít společně i samostatně.

    Přesná specifikace řetězce

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Keys.Name LIKE "1"//Ekvivalentní Keys.Name ="1"

    Výsledek:

    % je doslovný význam libovolného počtu libovolných znaků

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Klíče. Název LIKE "%"

    Výsledek: libovolných 10 položek

    _ (podtržítko): literál, který odpovídá libovolnému jednotlivému znaku

    Příklad č. 1:

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Keys.Name LIKE "_"

    Příklad č. 2: počínaje libovolným znakem následovaným "1" následovaným libovolnými znaky

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Klíče. Název LIKE "_1 %"

    Výsledek:

    (jeden nebo více znaků v hranatých závorkách)

    • Každý literál, který odpovídá libovolnému znaku, se používá jako NEBO.
      Je povolen rozsah, například a-z,0-5, což znamená libovolný znak ze zadaného rozsahu

    Příklad

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Keys.Name LIKE "[ls]%"

    Výsledek: 10 začínající na "l" nebo "z"

    Příklad: počínaje 5,6,7

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Klíče. Název LIKE "%"

    Výsledek:

    [^] (v hranatých závorkách ikona výjimky ^ následovaná jedním nebo více znaky)

    Ekvivalent libovolného znaku (_) kromě zadaného ()

    Příklad

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Keys.Name LIKE "8.[^012]%" // nezahrnují 8.0,8.1,8.2

    Výsledek: vše začíná na "8." vyjma těch

    SPECIÁLNÍ CHARACTER - příkaz pro specifikaci výše registrovaných znaků v požadavku

    Jako servisní znak je přípustné použít alespoň: #, ~, /, \

    Příklad:

    VYBERTE prvních 10
    Klíče. Jméno
    Z
    Directory.Keys AS klíče
    KDE
    Keys. Name LIKE "#_" SPECIÁLNÍ CHARAKTER "#"

    Výsledek:

    Použitelnost napříč platformami

    Neplatné parametry LIKE<>

    • Je předán parametr neřetězcového typu: například číslo 1 namísto řetězce "1"
    • Pole neřetězcového typu je porovnáno s platnou maskou (například odkazem) nebo, když je připojeno, hodnota není kontrolována na NUL

    Věnujte pozornost textu chyby, kde je zobrazena otázka:

    Keys.Name LIKE<>&L