İstekteki gibi 1s 8.3. Sorgu koşullarına benzer. Örnek: adı bir sayı ile biten ürünleri seçin
Tüm eksikliklere rağmen, metin alanı araması hala en popüler olanlardan biridir. Dize veri türlerini her yerde görebiliriz - adlar, hesap numaraları, adresler ve diğer bilgiler bu biçimde saklanabilir. Yerleşik 1C dilindeki sorgularda, geliştiricilerin rahatlığı için özel bir operatör "GİBİ" kullanılır. Bu en çok kullanılan komutlardan biridir, bu nedenle sözdizimi ve yetenekleri hakkında kapsamlı bilgi sahibi olmadan bir programcının çalışması zor olacaktır.
"BEĞEN" operatörünü kullanma
Herhangi bir operatörü uygulamaya koymadan önce amacını, uygulama yerlerini ve sözdizimini net bir şekilde anlamanız gerekir. 1C sorgusunda "GİBİ" kullanmanın amacı, şablon olarak sunulan koşulun karşılanıp karşılanmadığını kontrol etmektir. Dönen değer, verilen koşulun karşılanıp karşılanmadığını gösteren bir boolean, doğru veya yanlıştır. LIKE operatörü, bir sorguda birkaç yerde kullanılabilir:
- "WHERE" anahtar kelimesi ile belirtilen koşullar bloğunda;
- Seçim Ne Zaman Sonra Biter yapımında;
- Alan karşılaştırması sonucunda doğrudan seçim alanlarında.
Kontrolün sözdizimi her zaman aynıdır ve 3 bağlantıdan oluşur. Solda kontrol edilen metin değeri, ardından "GİBİ" operatörünün kendisi ve sağda kontrol edilmekte olan şablon yer alır. Hızlı ve rahat şablonlama için geliştirmeyi kolaylaştıran özel semboller vardır:
- "%", keyfi uzunluktaki herhangi bir karakter dizisidir. Bir dizide tek tek sözcükleri veya sayıları aramak için kullanılır;
- "_" herhangi bir tek karakterdir. Bir karakterin varlığını belirtmek için tasarlanmıştır;
- "[...]", dizedeki bir işaretle karşılaştırılacak bir karakter dizisidir. Böyle bir kalıp yardımıyla, parantez içinde listelenen karakterlerden herhangi birinin eşleşmesi kontrol edilir. Ayrıca bir sayı veya harf aralığı da belirleyebilirsiniz ([a-g], );
- “[^…]” önceki kalıbın tersidir. Dizide belirtilen karakter ile parantez içinde listelenen karakter arasındaki fark kontrol edilir.
Doğru şablon oluşturma ilkelerini daha iyi özümsemek ve anlamak için, geliştiricilerin hayatında sıklıkla karşılaşılan bazı örneklere bakalım. İlki, terminoloji referans kitabından, adlarında "CUTTER" kelimesinin geçtiği tüm pozisyonları seçmemiz gerektiği zamandır. Bu durumda, sorgu koşullarında LIKE kullanmamız gerekir:
"%CUTTER%" GİBİ.Her iki "%" karakterini de kaldırırsak, sorgu, adın tırnak içinde gösterilenle tamamen eşleştiği terminolojiyi gösterecektir. "CUTTER%" veya "%CUTTER" kalıbını bırakırsak, sonuç, belirli bir karakter kombinasyonuyla sırasıyla biten veya başlayan terminoloji listesi olacaktır.
Sorgu sözdizimini bilmeyen acemi programcıların kafasını karıştırabilecek bir sorunu inceleyelim. Adında "%" sembolü bulunan tüm terminolojiyi bulmanız gerektiğini varsayalım. Özellikle ayrılmış karakterleri aramanız gerektiğinde, "özel karakter" operatörü vardır. Özel bir karakter olarak #, \, /, ~ ve diğer karakterleri kullanabilirsiniz, bundan sonra herhangi bir ayrılmış karakter sadece bir karakteri gösterir.
Ad OLARAK Ad OLARAK Dizin. Ad Adını Ad OLARAK SEÇİN NEREDE Adlandırma. Ad LIKE "%#%" ÖZEL KARAKTER "#"Aramada bir parametre kullanmanız gerekiyorsa LIKE parametresi ile sorgudaki değişken eklenerek kullanılır. Parametrenin bir dize türü olması gerektiğini, aksi takdirde istekte onu bir dizeye dönüştürmeniz gerekeceğini unutmayın. Bu oldukça karmaşık bir işlemdir ve önceden dışlamak daha iyidir.
"%" + &name + "%" GİBİ Nomenclature.Name WHERE Terminoloji.Ad Olarak Arama.Nomenklatürden Ad OLARAK Ad OLARAK SEÇİNLIKE işlevi, platformun 8'den başlayarak tüm sürümlerinde geçerlidir ve uygulanabilirliği nedeniyle 1C geliştiricileri bunu değiştirmek istemeyecektir. Tabii ki, metin arama her zaman adı girmenin doğruluğuna bağlıdır, ancak yine de en yaygın olanlardan biri olmaya devam etmektedir. Bu bağlamda, profesyonel 1C geliştiricilerinin LIKE kullanımını tüm nüanslarıyla incelemesi gerekir.
BEĞENMEK- Bir dizinin bir kalıba benzer olup olmadığını kontrol eden operatör. SQL'de LIKE'ın analogu.
Şebeke BEĞENMEK solunda belirtilen ifadenin değerini sağında belirtilen şablon dizesiyle karşılaştırmanıza olanak tanır. İfade değeri string türünde olmalıdır. İfadenin değeri şablonla eşleşirse operatörün sonucu TRUE, aksi takdirde FALSE olur.
Şablon dizesindeki aşağıdaki karakterler hizmet karakterleridir ve dize karakterinden farklı bir anlama sahiptir:
. % (yüzde): herhangi bir sayıda rasgele karakter içeren sıra
. _ (alt çizgi): rastgele bir karakter
. […] (köşeli parantez içinde bir veya daha fazla karakter): köşeli parantez içinde listelenen herhangi bir tek karakter
Bir numaralandırma, aralığın uçları da dahil olmak üzere aralık içindeki herhangi bir karakter anlamına gelen a-z gibi aralıklar içerebilir.
. [^…] (köşeli parantez içinde bir veya daha fazla karakterin izlediği bir olumsuzlama işareti): olumsuzlama işaretinden sonra listelenenler dışındaki herhangi bir tek karakter
Diğer herhangi bir sembol kendisi anlamına gelir ve herhangi bir ek yük taşımaz.
Listelenen karakterlerden birinin kendisi olarak yazılması gerekiyorsa, önüne<Спецсимвол>. Kendim<Спецсимвол>(uygun herhangi bir karakter), aynı ifadede SPECIAL CHARACTER anahtar sözcüğünden sonra tanımlanır.
Örneğin, kalıp “%ABC[abc]\_abc%” ÖZEL KARAKTER “\”, karakter dizisinden oluşan bir alt dize anlamına gelir:
A harfleri; B harfleri; B harfleri; Bir basamak; a, b, c veya d harflerinden biri; alt çizgi karakteri; a harfleri; b harfleri; harfler
Ayrıca, bu diziden önce rastgele bir karakter dizisi gelebilir.
Kullanım örnekleri:
Code 1C v 8.x Prosedür BankTextInputEnd(Öğe, Metin, Değer, StandardProcessing)
Standart İşleme = Yanlış;
//"%" gibi bir kalıp için arama yaparak bir sorgu yapın +<Текст введенный пользователм в поле ввода> + "%"
İstek = Yeni İstek;
Query.SetParameter("Ad", "%" + Metin + "%");
Query.Text = "SEÇ
| Bankalar.Link
| KİMDEN
| Dizin Bankalar AS Bankalar
|NEREDE
| Banks.Name IS GİBİ &İsim";
Sonuç = Request.Run();
Seçim = Result.Select();
Eğer Result.Empty() O zaman
//Hiçbirşey Bulunamadı. Burada bir mesaj veya yapacak başka bir şey görüntüleyebilirsiniz :)
Aksi takdirde
//Sonuç almak
tzResults = Result.Unload();
// Bulunan öğeleri içerecek bir değer listesi hazırlayın.
Değer = Yeni ValueList();
Value.LoadValues(tzResults.UnloadColumn("Bağlantı"));
EndIf;
Prosedürü Bitir
"Varsayılan Sözleşmeler" kapsamına yalnızca Ana Sözleşme vb. Adlarının girmesi gerekir:
Kod 1C - 8.x Seçimi
İsim "Sözleşme #%" GİBİ OLDUĞUNDA "Sözleşme #" //"Sözleşme #" ile başlayan herhangi bir satır uygun olur
İsim GİBİ olduğunda "Ana Sözleşme%[^А-яЁё"+Symbol(33)+"-"+Symbol(126)+"№"""+Symbols.PS+Symbols.Tab+Symbols.PF+Symbols. NPP+ Symbols.VTab+"]%" ardından "Varsayılan Sözleşmeler" //"Ana Sözleşme" ile başlayan herhangi bir dize iş görür
Diğer "Diğer"
Sözleşme Türü Olarak Son
Siteden alınan bilgiler
Bir sorgudaki LIKE operatörü, tablolardan dize değerlerini bir kalıba benzerlik açısından kontrol eder.
Bu operatörün solunda kontrol edilecek string, sağında ise şablon yer alır.
Kontrol ettikten sonra sırasıyla True veya False döndürür, koşullarda aktif olarak kullanılır.
Bir şablon oluşturmak için aşağıdaki servis sembolleri kullanılır:
- % (yüzde) - herhangi bir sayıda rasgele karakter içeren bir dizi
- _ (alt çizgi) - rastgele bir karakter
- […] (köşeli parantez içinde bir veya daha fazla karakter) - köşeli parantez içinde listelenen herhangi bir tek karakter
Ayrıca, çeşitli karakterlere ek olarak, aralıklar da kullanılabilir, örneğin a-z(A-z), bu, aralığın sonları da dahil olmak üzere aralığa dahil edilen isteğe bağlı bir karakter olduğu anlamına gelir. - [^…] (köşeli parantez içinde bir veya daha fazla karakterin izlediği bir olumsuzlama işareti) - olumsuzlama işaretinden sonra listelenenler dışında herhangi bir tek karakter
Kalan karakterler amaçlarına uygun olarak kullanılır.
Yukarıdaki hizmet karakterlerinden birinin karakter olarak iletilmesi gerekiyorsa, önüne<Спецсимвол>. Kendim<Спецсимвол>(uygun herhangi bir karakter), aynı ifadede SPECIAL CHARACTER anahtar sözcüğünden sonra tanımlanır.
Örneğin, “%ABC[abc]\_abc%” kalıbı ÖZEL KARAKTER “\”, karakter dizisinden oluşan bir alt dize anlamına gelir:
A harfleri; B harfleri; B harfleri; Bir basamak; a, b, c veya d harflerinden biri; alt çizgi karakteri; a harfleri; b harfleri; harfler
Ayrıca, bu diziden önce rastgele bir karakter dizisi gelebilir.
Prosedür SelectContainingInNameText(mText)
//İstekte "%" + mText + "%" gibi bir şablon kullanacağız İstek = Yeni İstek; Query.SetParameter("Ad", "%" + Metin + "%"); Query.Text = "SEÇ | Sözleşmeler.Referans | Sözleşmeler.Sahibi |FROM | Directory.AgreementsofCounterparties AS Sözleşmeleri | |NEREDE | Sözleşmeler.Adı LIKE &Name"; Sonuç = Request.Run(); Seçim = Result.Select(); Report("" + mText + " adında şunu içeren Sözleşmeler aşağıdaki Karşı Taraflara sahiptir"); While Selection.Next() Döngü Raporu("Hesap: " + Selection.Owner + "; Sözleşme: " + Selection.Reference EndIf; EndProcedure
Koşullu operatörün amacını ve kullanımını göz önünde bulundurun BEĞENMEKörneklerde 1C sorgu dilinde.
hızlı geçiş
amaç
Sorgudaki dize değerinin belirtilen kalıpla eşleşip eşleşmediğini kontrol edin - Boole türünde bir değer (DOĞRU veya YANLIŞ) döndürür.
- Kayıt kontrolü bağımsızdır.
- Sorgu, tam metin arama dizinleriyle ilgili olmayan tablo dizinlerini kullanır.
- Büyük masalar için uzun sürebilir.
- SUBSTRING işlevi kullanılarak sınırsız uzunlukta dizeler oluşturulmalıdır
kullanım yerleri
- Operatör koşullarında NEREDE
- Tasarım açısından SEÇİM NE ZAMAN<>SONRA "" BAŞKA "" SON
- Seçim alanlarında (örneğin: Ad LIKE & Benzer Dize Uygun Parametre)
Operatör sözdizimi açıklaması LIKE
Operatör parametresi bir dize olmalıdır: bir sabit olarak belirtilebilir veya bir sorgu parametresi olarak iletilebilir.
Aşağıda belirtilen hazır değerler (maskeler) birlikte ve ayrı ayrı kullanılabilir.
Tam dize belirtimi
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "1" GİBİ//Keys.Name ="1" ile eşdeğerdir
Sonuç:
% , herhangi bir karakterin rastgele bir sayısı anlamına gelen değişmez bir değerdir
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "%" GİBİ
Sonuç: herhangi bir 10 ürün
_ (alt çizgi): herhangi bir tek karakterle eşleşen hazır bilgi
Örnek 1:
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Ad "_" GİBİ
Örnek 2: herhangi bir karakterle başlayarak, ardından "1" ve ardından herhangi bir karakterle
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "_1%" GİBİ
Sonuç:
(köşeli parantez içinde bir veya daha fazla karakter)
- Herhangi bir karakterle eşleşen her sabit değer OR olarak kullanılır.
Belirli bir aralıktan rastgele bir karakter anlamına gelen a-z,0-5 gibi bir aralığa izin verilir
Örnek
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "[ls]%" GİBİ
Sonuç: "l" veya "z" ile başlayan 10
Örnek: 5,6,7 ile başlayan
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "%" GİBİ
Sonuç:
[^] (köşeli parantez içinde, ^ istisna simgesi ve ardından bir veya daha fazla karakter gelir)
Belirtilen () dışında herhangi bir karaktere (_) eşdeğer
Örnek
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name LIKE "8.[^012]%" // 8.0,8.1,8.2'yi içermez
Sonuç: hepsi "8" ile başlar. olanlar hariç
ÖZEL KARAKTER - istekte yukarıda kayıtlı karakterleri belirtmek için bir komut
Bir hizmet karakteri olarak en az şunlar kullanılabilir: #, ~, /, \
Örnek:
ilk 10'u SEÇ
Keys.Ad
İTİBAREN
Directory.Keys AS Anahtarları
NEREDE
Keys.Name "#_" GİBİ ÖZEL KARAKTER "#"
Sonuç:
Platformlar arasında uygulanabilirlik
Geçersiz parametreler GİBİ<>>
- Dize tipi olmayan bir parametre iletilir: örneğin, "1" dizisi yerine 1 sayısı
- Dize tipi olmayan bir alan, geçerli bir maske (örneğin, bir referans) ile karşılaştırılır veya bağlandığında, değerin NUL olup olmadığı kontrol edilmez.
Sorunun görüntülendiği hata metnine dikkat edin:
Keys.İsim GİBİ<>>&L