substring() fonksiyonunun özelliği. substring() fonksiyonunun özelliği: 1 saniye içindeki ilk karakteri seç

  • 14.12.2023

Yerleşik dil 1C'deki 1C 8.3'teki satırlar, ilkel bir türün değerlerini temsil eder Astar. Bu türdeki değerler, isteğe bağlı uzunlukta bir Unicode dizesi içerir. Dize türü değişkenler tırnak içine alınmış bir karakter kümesidir.

Örnek 1. Metin içeren bir dize değişkeni oluşturalım.

StringVariable = "Merhaba dünya!";

1'lerde dizelerle çalışma işlevleri 8.3

Bu bölüm, 1c'deki satırları değiştirmenize veya bunların içerdiği bilgileri analiz etmenize olanak tanıyan ana işlevleri sağlayacaktır.

StrLength

StrLength(<Строка>) . Parametre olarak iletilen dizede bulunan karakter sayısını döndürür.

Örnek 2. “Merhaba dünya!” satırındaki karakter sayısını sayalım.

String = "Merhaba dünya!"; NumberofCharacters = StrLength(String); Rapor(SayıKarakterler);

Bu kodu çalıştırmanın sonucu, satırdaki karakter sayısının görüntülenmesi olacaktır: 11.

KısaltL

KısaltL(<Строка>) . Anlamlı olmayan karakterleri dizedeki ilk önemli karakterin soluna kırpar.
Küçük karakterler:

  • uzay;
  • kırılmaz alan;
  • tablolama;
  • satırbaşı;
  • satır çevirisi;
  • formun çevirisi (sayfa).

Örnek 3. "Dünya!" satırının sol tarafındaki tüm boşlukları kaldırın. ve buna “Merhaba” satırını ekleyin.

String = Kısaltma("dünya!"); String = "Merhaba"+Dize; Rapor(Dize);

Bu kodu çalıştırmanın sonucu ekranda “Merhaba dünya!” satırının görüntülenmesi olacaktır.

Kısaltılmış

Kısaltma(<Строка>) . Anlamlı olmayan karakterleri dizedeki ilk önemli karakterin sağına doğru kırpar.

Örnek 4. "Merhaba" ve "barış!" Satırlarından oluşan form "Merhaba dünya!"

Satır = Kısaltma("Merhaba ")+" "+ Kısaltma(" ​​dünya!"); Rapor(Dize);

Kısalt LP

KısaltLP(<Строка>) . Anlamlı olmayan karakterleri dizedeki ilk anlamlı karakterin sağından kırpar ve ayrıca anlamlı olmayan karakterleri dizedeki ilk anlamlı karakterin solundan kırpar. Bu işlev, daha evrensel olduğu için önceki ikisinden daha sık kullanılır.

Örnek 5. Karşı tarafın adının sol ve sağındaki önemsiz karakterleri kaldırın.

Karşı Taraf = Dizinler.Karşı Taraflar.Ayrıntılara Göre Bul("TIN", "0777121211"); AccountObject = Account.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

bir aslan

Bir aslan(<Строка>, <ЧислоСимволов>) . Dizenin ilk karakterlerini alır, karakter sayısı parametrede belirtilir Karakter sayısı.

Örnek 6. Yapıya izin verin Çalışançalışanın adını, soyadını ve soyadını içerir. Soyadı ve baş harfleri içeren bir dize alın.

NameInitial = Lev(Çalışan.Adı, 1); Patronimik Başlangıç ​​= Leo(Çalışan. Patronimik, 1); FullName = Çalışan.Soyadı + " " + Adının Baş Harfi + "." + Orta Harf + ".";

Sağ

Sağ(<Строка>, <ЧислоСимволов>) . Bir dizenin son karakterlerini, parametrede belirtilen karakter sayısını alır Karakter sayısı. Belirtilen karakter sayısı dizenin uzunluğunu aşarsa dizenin tamamı döndürülür.

Örnek 7. Bir string değişkeninin sonuna “yyyyaagg” formatında bir tarih yazalım, tarihi içeren bir string elde edelim ve onu yazıya dönüştürelim. tarih.

String = "Geçerli tarih: 20170910"; StringDate = Haklar(String, 8); Tarih = Tarih(StringDate);

Çarşamba

Çarşamba(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Parametre olarak iletilen dizeden bir alt dize alır Astar parametrede numarası belirtilen karakterden başlayarak İlk Numara ve parametreye aktarılan uzunluk Karakter sayısı. Bir satırdaki karakterlerin numaralandırması 1'den başlar. Parametrede ise İlk Numara sıfırdan küçük veya sıfıra eşit bir değer belirtilirse parametre 1 değerini alır. Karakter sayısı belirtilmezse satırın sonuna kadar olan karakterler seçilir.

Örnek 8. Dokuzuncu pozisyondan başlayan string değişkeni bölge kodunu içersin, onu alıp ayrı bir satıra yazmalısınız.

String = "Bölge: 99 Moskova"; Bölge = Ort(Dize, 9, 2);

Sayfa Bul

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Bir dizede belirtilen bir alt dizeyi arar ve bulunan alt dizenin ilk karakterinin konum numarasını döndürür. Bu fonksiyonun parametrelerine bakalım:

  • Astar. Kaynak dizesi;
  • Alt Dizeyi Ara. Arama alt dizesi;
  • Arama Yönü. Bir dizede bir alt dizenin aranacağı yönü belirtir. Değer alabilir:
    • Arama Yönü.Başlangıçtan itibaren;
    • Arama.Bitiş Yönü;
  • İlk pozisyon. Aramanın başladığı dizedeki konumu belirtir;
  • SayıOluşumlar. Kaynak dizede aranan alt dizenin oluşum numarasını belirtir.

Örnek 9. “Merhaba dünya!” "Ve" karakterinin son geçtiği konumu belirleyin.

PositionNumber = StrFind("Merhaba dünya!", "ve", SearchDirection.End); Rapor(KonumNumarası);

Bu kodu çalıştırmanın sonucu, “ve” sembolünün en son geçtiği sayıyı görüntülemek olacaktır: 9.

VReg

VReg(<Строка>) . 1s8'de belirtilen dizedeki tüm karakterleri büyük harfe dönüştürür.

Örnek 10: "Merhaba dünya!" dizesini dönüştürün. büyük harfe.

StringVreg = VReg("Merhaba Dünya!"); Rapor(StringVreg);

Bu kodun çalıştırılmasının sonucunda “MERHABA DÜNYA!” satırı görüntülenecektir.

NReg

NReg(<Строка>) . Belirtilen dizenin 1'lerdeki 8'deki tüm karakterlerini küçük harfe dönüştürür.

Örnek 11: "MERHABA DÜNYA!" dizesini dönüştürün. küçük harfe.

StringNreg = NReg("MERHABA DÜNYA!"); Rapor(StringVreg);

Bu kodu çalıştırmanın sonucunda “merhaba dünya!” satırı görüntülenecektir.

Treg

TReg(<Строка>) . Bir dizeyi şu şekilde dönüştürür: Her kelimenin ilk karakteri büyük harfe, kelimenin geri kalan karakterleri küçük harfe dönüştürülür.

Örnek 12: “Merhaba dünya!” satırındaki kelimelerin ilk harflerini büyük yapın.

StringTreg = TReg("Merhaba Dünya!"); Rapor(StringTreg);

Bu kodu çalıştırmanın sonucunda “Merhaba Dünya!” satırı görüntülenecektir.

Sembol

Sembol(<КодСимвола>) . Bir karakteri Unicod koduna göre alır.

Örnek 13. “Merhaba Dünya!” satırına sol ve sağı ekleyin. sembol ★

StringWithStars = Sembol("9733")+"Merhaba Dünya!"+Symbol("9733"); Rapor(StringWithStars);

Bu kodu çalıştırmanın sonucunda “★Merhaba Dünya!★” satırı görüntülenecektir.

Sembol Kodu

SembolKodu(<Строка>, <НомерСимвола>) . İkinci parametrede belirtilen konumda bulunan, birinci parametrede belirtilen dizeden Unicode karakter kodunu alır.

Örnek 14. “Merhaba Dünya!” Satırındaki son karakterin kodunu bulun.

String = "Merhaba Dünya!"; CharacterCode = CharacterCode(String, StrLength(String)); Bildir(KarakterKodu);

Bu kodun çalıştırılmasının sonucu, “!” sembol kodunun görüntülenmesi olacaktır. - 33.

Boş satır

Boş satır(<Строка>) . Dizenin yalnızca önemsiz karakterlerden oluşup oluşmadığını, yani boş olup olmadığını kontrol eder.

Örnek 15. Üç boşluktan oluşan bir dizenin boş olup olmadığını kontrol edin.

Boş = EmptyString(" "); Rapor(Boş);

Bu kodu çalıştırmanın sonucu, "Evet" kelimesinin (mantıksal bir değerin dize ifadesi) görüntülenmesi olacaktır. Doğru).

SayfaDeğiştir

StrDeğiştir(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Kaynak dizede arama alt dizesinin tüm oluşumlarını bulur ve onu değiştirilen alt dizeyle değiştirir.

Örnek 16. “Merhaba Dünya!” “Barış” sözcüğünü “Arkadaşlar” sözcüğüyle değiştirin.

String = StrReplace("Merhaba Dünya!", "Dünya", "Arkadaşlar"); Rapor(Dize);

Bu kodu çalıştırmanın sonucunda “Merhaba Arkadaşlar!” satırı görüntülenecektir.

StrNumberLines

StrNumberRow(<Строка>) . Çok satırlı bir dizedeki satır sayısını saymanızı sağlar. 1s 8'de yeni bir satıra gitmek için simgesini kullanın. PS(yeni satır karakteri).

Örnek 17. Metindeki satır sayısını belirleyin:
"İlk satır
İkinci çizgi
Üçüncü satır"

Number = StrNumberString("İlk satır"+Characters.PS +"İkinci satır"+Symbols.PS +"Üçüncü satır"); Numarayı bildir);

Bu kodu çalıştırmanın sonucu, metindeki satır sayısının görüntülenmesi olacaktır: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Çok satırlı bir dizedeki bir satırı numarasına göre alır. Satır numaralandırması 1'den başlar.

Örnek 18. Metindeki son satırı alın:
"İlk satır
İkinci çizgi
Üçüncü satır"

Metin = "İlk satır" + Semboller. PS + "İkinci satır" + Semboller. PS + "Üçüncü satır"; LastRow = StrGetRow(Text, StrNumberLines(Text)); Rapor(SonSatır);

Bu kodu çalıştırmanın sonucu “Üçüncü Satır” satırının görüntülenmesi olacaktır.

Sayfa NumarasıOluşum Sayısı

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . Belirtilen alt dizenin bir dizedeki oluşum sayısını döndürür. İşlev büyük/küçük harfe duyarlıdır.

Örnek 19. “1s 8.3 ve 8.2'deki satırlar” satırında büyük/küçük harfe bakılmaksızın “c” harfinin kaç kez geçtiğini belirleyin.

Satır = "1s 8.3 ve 8.2'deki satırlar"; NumberOccurrences = StrNumberOccurrences(Vreg(String), "C"); Rapor(Oluşum Sayısı);

Bu kodu çalıştırmanın sonucu, oluşum sayısının görüntülenmesi olacaktır: 2.

PageStartsWith

StrStartsWith(<Строка>, <СтрокаПоиска>) . İlk parametrede iletilen dizenin ikinci parametredeki dizeyle başlayıp başlamadığını kontrol eder.

Örnek 20. Seçilen karşı tarafın TIN'sinin 1 rakamıyla başlayıp başlamadığını belirleyin. Değişkeni girin Karşı taraf Karşı taraflar.

TIN = Karşı Taraf.TIN; StartsUNits = StrStartsWith(TIN, "1"); If Birimlerle Başlıyor Then //Kodunuz EndIf;

Sayfa Bitiş Tarihi

StrEndsWith(<Строка>, <СтрокаПоиска>) . İlk parametrede iletilen dizenin ikinci parametredeki dizeyle bitip bitmediğini kontrol eder.

Örnek 21. Seçilen karşı tarafın TIN'sinin 2 rakamıyla bitip bitmediğini belirleyin. Değişkeni girin Karşı taraf bir dizin öğesine referans saklanır Karşı taraflar.

TIN = Karşı Taraf.TIN; EndsWithTwo = StrEndsWith(TIN, "2"); If EndsInTwo Then //Kodunuz EndIf;

Sayfa Bölünmesi

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . Belirtilen sınırlayıcı karakterleri kullanarak bir dizeyi parçalara böler ve elde edilen dizeleri bir diziye yazar. İlk parametre kaynak dizeyi saklar, ikincisi sınırlayıcıyı içeren dizeyi içerir ve üçüncüsü diziye boş dizelerin yazılıp yazılmayacağını gösterir (varsayılan olarak) Doğru).

Örnek 22. “;” sembolüyle ayrılmış sayılar içeren bir dizimiz olsun, dizeden bir sayı dizisi elde edelim.

Dize = "1; 2; 3"; Array = StrDivide(String, ";"); Sayım için = 0 Array.Quantity()'ye göre - 1 Döngü Denemesi Array[Count] = Number(AbbrLP(Array[Count])); İstisna Dizisi[Sch] = 0; EndAttemptsEndCycle;

Uygulama sonucunda 1'den 3'e kadar sayıların yer aldığı bir dizi elde edilecektir.

Sayfa Bağlantısı

StrConnect(<Строки>, <Разделитель>) . Dize dizisini, ilk parametreden, ikinci parametrede belirtilen sınırlayıcıyla ayrılmış dizinin tüm öğelerini içeren bir dizeye dönüştürür.

Örnek 23. Önceki örnekteki sayı dizisini kullanarak orijinal dizeyi alın.

Hesap İçin = 0 By Array.Quantity() - 1 Cycle Array[Act] = String(Array[Act]); EndCycle; Satır = StrConnect(Array, "; ");

Bu yazımızda sizinle her şeyi tartışmak istiyoruz 1C sorgu dili işlevleri, Ve sorgu dili yapıları. İşlev ve tasarım arasındaki fark nedir? Fonksiyon parantezlerle ve olası parametrelerle çağrılır ve yapı parantezsiz yazılır. şüphesiz 1C sorgu dilinin tüm yapıları ve işlevleri Veri toplama sürecini esnek ve çok işlevli hale getirin. Bu işlevler ve yapılar sorgu alanlarına uygulanır ve bazıları koşullar için de geçerlidir.

1C Sorgu Dili İşlevleri

Çünkü net bir açıklama 1C sorgu dili işlevleri yapıların tanımlarından çok daha az yaygın olduğundan, işlevlere bakmaya karar verdik. Şimdi her birine ayrı ayrı bakalım, amacını, sözdizimini ve kullanım örneğini açıklayalım:

1. İşlev TARİH SAAT- bu işlev "Tarih" türünde sabit bir alan oluşturur.

Sözdizimi: TARİH SAAT(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Kullanım örneği:

2. TARİH FARKI işlevi- boyutlardan birinde (yıl, ay, gün, saat, dakika, saniye) iki tarih arasındaki farkı döndürür. Ölçüm parametre olarak iletilir.

Sözdizimi: FARKTARİH(<Дата1>, <Дата2>, <Тип>)

Kullanım örneği:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. İşlev VALUE- veritabanından önceden tanımlanmış bir kayıt içeren sabit bir alan ayarlar; ayrıca herhangi bir türden boş bir bağlantı da alabilirsiniz.

Sözdizimi: VALUE(<Имя>)

Kullanım örneği:

request.Text = "SELECT //önceden tanımlanmış öğe | VALUE(Directory.Curregency.Dollar) AS Dolar, //boş bağlantı | VALUE(Document.Mal ve Hizmetlerin Alınması.EmptyLink) AS Makbuzu, //transfer değeri | VALUE(Transfer) . Yasal Bireysel. Bireysel) AS Bireysel, //önceden tanımlanmış hesap | VALUE(Hesap Planı. Kendi kendini destekleyen. Malzemeler) AS Account_10" ;

4. SEÇ işlevi- önümüzde kodda kullanılan IF yapısının bir analogu var, yalnızca bu 1C sorgularında kullanılıyor.

Sözdizimi: SEÇİM NE ZAMAN<Выражение>DAHA SONRA<Выражение>AKSİ TAKDİRDE<Выражение>SON

Kullanım örneği:

request.Text = //eğer miktar 7500'den fazlaysa, o zaman 300 rublelik bir indirim olmalıdır, //yani eğer koşul tetiklenirse fonksiyon //Sum - 300 değerini döndürür //aksi halde istek sadece Sum değerini döndürür "SEÇ | SEÇ | NE ZAMAN TCRmakbuz.Tutar > 7500 | SONRA TCRmakbuz.Tutar - 300 | DİĞER TCRmakbuz.Tutar | TutarWithİndirim Olarak SON |FROM | Belge.MalHizmet Makbuzu.Mallar TCRmakbuzları OLARAK";

5. EKSPRES işlevi- sabit bir alanı belirli bir türle ifade etmenizi sağlar.

Sözdizimi: EXPRESS(AlanAdı AS TürAdı)

Kullanım örneği:

Query.Text = "ÇEŞİTLİ SEÇ | Satış.Kayıt Şirketi.Number, | SEÇ | NE ZAMAN Satış.Kayıt Şirketi BAĞLANTISI Belge.Gider | THEN EXPRESS(Sales.Kayıt Şirketi AS Belge.Gider) | BAŞKA SEÇ | NE ZAMAN Satış.Kayıt Şirketi BAĞLANTISI Belge.Uygulama | THEN EXPRESS(Satış.Kayıt AS Belgesi.Uygulama) | SON | ... | SON AS Numarası | FROM | KayıtBirikimler.Satın Almalar AS Satın Almalar";

EXPRESS işlevini karma türlerin olduğu alanlarda kullanmak için başka bir seçenek var mı, bunlar nerede ortaya çıkıyor? En basit örnek, herhangi bir kayıt için “Kayıt Şirketi”dir. Peki neden türü kayıt şirketinde nitelendirmemiz gerekebilir? Kayıt şirketinden "Numara" alanını seçtiğimizde durumu ele alalım, numara hangi tablodan seçilecek? Hepsinin doğru cevabı! Bu nedenle sorgumuzun hızlı çalışması için EXPRESS fonksiyonunu kullanarak açık bir tür belirtmeliyiz.

Kullanım örneği:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Yorum, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. ISNULL işlevi(alternatif yazım ISNULL) - alan NULL türündeyse, işlevin ikinci parametresiyle değiştirilir.

Sözdizimi: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Kullanım örneği:

Ayrıca HER ZAMAN NULL tipini bir değerle değiştirmeniz tavsiye edilir, çünkü NULL türüyle karşılaştırma, NULL'u NULL ile karşılaştırsanız bile her zaman FALSE değerini döndürür. Çoğu zaman, NULL değerleri tabloların birleştirilmesi (dahili olanlar hariç her türlü birleştirme) sonucunda oluşur.

Query.Text = //Maddenin tamamını ve bakiyelerini seçin //eğer bazı eşyalarda bakiye yoksa, o zaman //NULL alanı olacaktır ve bu alan 0 "SELECT | No. Link, | ISNULL değeriyle değiştirilecektir. (ProductsInStockRemains.InStockRemaining, 0) AS Kalan | FROM | Directory.Nomenclature AS No. | SOL BAĞLANTI Birikimleri Kaydet. GoodsInWarehouses. Remainings AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclature = No. Bağlantı)";

7. TEMSİL işlevi- istek alanının bir temsilini almanızı sağlar.

Sözdizimi: VERİM(<НаименованиеПоля>)

Kullanım örneği:

Query.Text = "SELECT | TEMSİL(FreeRemainingRemains.Nomenclature) AS Adlandırması, | TEMSİL(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Birikim Kaydı.FreeRemaining.Remaining AS FreeRemainingRemaining";

1C sorgu dilinde yapılar

Sizinle yukarıda tartıştık 1C sorgu dili işlevleri, şimdi düşünmenin zamanı geldi 1C sorgu dilindeki yapılar, daha az önemli ve faydalı değiller, hadi başlayalım.

1. İnşaat BAĞLANTISI- bir referans tipini kontrol etmek için kullanılan mantıksal bir operatördür. En sık, karmaşık türdeki bir alanı belirli bir türe göre kontrol ederken karşılaşılır. Sözdizimi: BAĞLANTI<Имя таблицы>

Kullanım örneği:

request.Text = //kaydedici değer türü belge girişi ise, //bu durumda sorgu "Mal girişi", aksi takdirde "Mal satışı" "SEÇ | SEÇ | NE ZAMAN Kalan.Registrar LINK Document.MalHizmet Alma | THEN ""Fiş"" | ELSE ""Tüketim"" | SON AS Hareket Türü | FROM | Biriktirme Kaydı. Depolarda Kalan Ürünler AS Kaldı" ;

2. ARASINDAKİ Tasarım- bu operatör değerin belirtilen aralıkta olup olmadığını kontrol eder.

Sözdizimi: ARASINDA<Выражение>VE<Выражение>

Kullanım örneği:

request.Text = //kodu 1 ila 100 aralığında olan terminolojinin tamamını alın "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |NEREDE | Nomenclature.Code 1 VE 100 ARASINDA" ;

3. Yapı B ve B HİYERARŞİSİ- değerin aktarılan listede olup olmadığını kontrol edin (diziler, değer tabloları vb. liste olarak aktarılabilir). IN HİYERARŞİ operatörü hiyerarşiyi görüntülemenize olanak tanır (Hesap Planının kullanımına bir örnek).

Sözdizimi: İÇİNDE(<СписокЗначений>), HİYERARŞİDE(<СписокЗначений>)

Kullanım örneği:

request.Text = //hesabın tüm alt hesaplarını seç "SELECT | Kendi kendini destekleyen. AS Hesabını Bağla | FROM | Hesap Planı. Kendi kendini destekleyen AS Kendi kendini destekleyen | NEREDE | Kendi kendini destekleyen. HİYERARŞİ DEĞERİNDE Bağlantı (Grafik) Hesaplar. Kendi kendine yeten. Mallar)";

4. BENZER Tasarım- Bu işlev bir dizeyi bir dize deseniyle karşılaştırmamıza olanak tanır.

Sözdizimi: BEĞENMEK "<ТекстШаблона>"

Satır deseni seçenekleri:

% - herhangi bir sayıda rastgele karakter içeren bir dizi.

Rastgele bir karakter.

[...] - köşeli parantez içinde listelenen herhangi bir tek karakter veya karakter dizisi. Numaralandırma, aralığın uçları da dahil olmak üzere aralığa dahil edilen isteğe bağlı bir karakter anlamına gelen a-z gibi aralıkları belirtebilir.

[^...] - olumsuzluk işaretinden sonra listelenenler hariç, köşeli parantez içinde listelenen herhangi bir tek karakter veya karakter dizisi.

Kullanım örneği:

Query.Text = //TABUR kökünü içeren ve //küçük veya büyük harfle başlayan isimlendirmenin tamamını bulun t "SELECT | İsimlendirme. Bağlantı | FROM | Dizin. İsimlendirme AS İsimlendirme | NEREDE | Ürünler. İsim GİBİ "" [Tt ]abur%""" ;

5. Tasarıma İZİN VERİLİR- bu operatör yalnızca arayanın okuma iznine sahip olduğu veritabanından kayıtları seçmenize olanak tanır. Bu haklar kayıt düzeyinde (RLS) yapılandırılır.

Sözdizimi: SELECT anahtar sözcüğünden sonra ALLOWED yazılır

Kullanım örneği:

request.Text = "İZİN VERİLENLERİ SEÇİN | Karşı Taraflar. Bağlantı | FROM | Dizin. Karşı Taraflar OLARAK Karşı Taraflar";

6. Tasarım ÇEŞİTLİ- yinelenen kayıt bulunmayan kayıtları seçmenize olanak tanır.

Sözdizimi: SELECT anahtar sözcüğünden sonra VARIOUS yazılır

Kullanım örneği:

request.Text = //okuyucunun haklarına sahip olduğu kayıtları seçer "ÇEŞİTLİ SEÇ | Karşı Taraflar.Ad |FROM | Dizin. Karşı Taraflar AS Karşı Taraflar" ;

Ayrıca, ÇEŞİTLİ yapı İZİN VERİLEN operatör ve diğer operatörlerle birlikte kullanılabilir.

Kullanım örneği:

request.Text = //okuyucunun haklarına sahip olduğu çeşitli kayıtları seçer "İZİN VERİLEN ÇEŞİTLİLERİ SEÇİN | Karşı Taraflar.Ad |FROM | Dizin. Karşı Taraflar Karşı Taraflar OLARAK";

7. İLK Tasarım- sorgu sonucundan parametrede belirtilen kayıt sayısını seçer.

Sözdizimi: İLK<число>

Kullanım örneği:

request.Text = //"İLK 4 | CCD Numaralarını SEÇİN. Bağlantı | FROM | Dizin. CCD Numaraları AS CCD Numaraları" dizininden ilk 4 CCD numarasını seçin;

8. DEĞİŞİM İÇİN TASARIM- bir tabloyu kilitlemenizi sağlar, yalnızca işlemlerde çalışır (yalnızca otomatik kilitlemelerle ilgilidir).

Sözdizimi: DEGİSİM İCİN<НаименованиеТаблицы>

Kullanım örneği:

Query.Text = "SELECT | Serbest Kalanlar. Adlandırma, | Serbest Kalanlar. Depo, | Serbest Kalanlar Kalanlar. Stokta Kalan | FROM | Biriktirme Kaydı. Serbest Kalanlar. Kalanlar Serbest Kalan Kalanlar OLARAK | DEĞİŞİM İÇİN | Biriktirmeler Kaydı . Serbest Kalanlar. Kalanlar";

9. Tasarım SİPARİŞ VEREN- verileri belirli bir alana göre düzenler. Alan bir bağlantı ise, bayrağı ayarlarken OTOMATİK SİPARİŞ Sıralama, bağlantı temsiline göre gerçekleşir; bayrak kapatılırsa bağlantılar, bağlantı adresinin bellekteki kıdemine göre sıralanır.

Sözdizimi: GÖRE SIRALA<НаименованиеПоля>OTOMATİK SİPARİŞ

Kullanım örneği:

Query.Text = "SELECT | Serbest Kalanlar. İsimlendirme AS Adlandırma, | Serbest Kalanlar. Depo AS Depo, | Serbest Kalanlar. Stokta Kalan | FROM | Birikimleri Kaydet. Serbest Kalanlar. Kalanlar AS Serbest Kalanlar | | SİPARİŞ VER | İsimlendirme | OTOMATİK SİPARİŞ VANIE";

10. GRUPLAMAYA GÖRE Tasarım- sorgu dizelerini belirli alanlara göre gruplandırmak için kullanılır. Sayısal alanlar herhangi bir toplama işleviyle kullanılmalıdır.

Sözdizimi: GRUPLANDIRMA ŞEKLİ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Kullanım örneği:

Query.Text = "SELECT | ItemsInWarehouses.Nomenclature AS Adlandırma, | ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInWarehouses | |GRUPLA | ItemsInWarehouses.Nomenclature, | ItemsAtWarehouse ah.Warehouse " ;

11. Tasarım- WHERE yapısına benzer şekilde bir veri seçim koşuluna bir toplama işlevi uygulamanıza olanak tanır.

Sözdizimi: SAHİP OLMAK<агрегатная функция с условием>

Kullanım örneği:

Query.Text = //InStock alanının 3'ten büyük olduğu gruplanmış kayıtları seçer "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GRUPLAMAYA GÖRE | Depolardaki Ürünler.İsimlendirme, | Depolardaki Ürünler.Depo | |MEVCUT | AMOUNT(Depolardaki Ürünler.Stoktaki Ürünler) > 3" ;

12. İnşaat İNDEKSİ- sorgu alanını indekslemek için kullanılır. Dizin oluşturmalı bir sorgunun tamamlanması daha uzun sürer ancak dizine eklenen alanlarda aramayı hızlandırır. Yalnızca sanal tablolarda kullanılabilir.

Sözdizimi: DİZİN:<Поле1, ... , ПолеN>

Kullanım örneği:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Tasarım NEREDE- herhangi bir seçim alanına koşul uygulamanıza olanak tanır. Sonuç yalnızca koşulu karşılayan kayıtları içerecektir.

Sözdizimi: NEREDE<Условие1 ОператорЛогСоединения УсловиеN>

Kullanım örneği:

Query.Text = //CompensationRemaining olan tüm kayıtlar seçildi<>0 ve //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Verileri Yerleştir |FROM | Biriktirme Kaydı.CompensationRP.Remains AS TazminatRPKalan | WHERE |TazminatRPORayan.TazminatKalan<>0 | Ve TazminatRPORemains.AmountForCalcCompRemaining> 100" ;

14. Tasarım SONUÇLARI... GENEL- toplamları hesaplamak için kullanılır; tasarım, toplamların hesaplanacağı alanları ve toplam alanlara uygulanan toplama işlevlerini belirtir. TOPLAM yapısını takip eden her alan için toplamlar kullanıldığında veriler gruplanır. İsteğe bağlı bir GENERAL yapısı vardır; kullanımı ayrıca ek gruplama sağlar. Aşağıda istek sonucunun bir örneğini göreceksiniz.

Sözdizimi: SONUÇLAR<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>İLE<ОБЩИЕ> <Поле1, ... , ПолеN>

Kullanım örneği:

request.Text = "SELECT | Hesaplamalar. Karşı Taraf Anlaşması. Anlaşma Türü AS Sözleşme Türü, | Hesaplamalar. Karşı Taraf Anlaşması AS Sözleşmesi, | Hesaplamalar. Karşı Taraf, | Hesaplamalar. Karşılıklı Uzlaşma Tutarı Bakiye AS Bakiyesi | FROM | Birikim Kaydı. Karşılıklı Karşı Taraflarla Takas. AS Bakiyeleri Hesaplamaları | TOPLAM | AMOUNT (Bakiye) |Yazılım | GENEL, | Anlaşma Türü";

Şekilde talebin yerine getirilmesi sırasında oluşan gruplamalar özetlenmektedir; en üstteki gruplama GENEL bölümünü, ikincisi ise Karşı Taraf SözleşmesiSözleşme Türü alanını ifade etmektedir.

String türü tüm programlama dillerinde bulunur. İlkeldir ve 1C'de onunla çalışmak için birçok işlev vardır. Bu makalede, örnekler kullanarak 1C 8.3 ve 8.2'deki dize türleriyle çalışmanın çeşitli yollarını ayrıntılı olarak inceleyeceğiz.

Astar

Herhangi bir türdeki değişkeni dizeye dönüştürmek için aynı adı taşıyan “String()” işlevi vardır. Giriş parametresi, dize temsilinin elde edilmesi gereken değişkenin kendisi olacaktır.

String(False) // "Hayır" değerini döndürür
String(12345) // "12,345" değerini döndürür
String(CurrentDate()) //"07/21/2017 11:55:36"

Yalnızca ilkel türleri değil, aynı zamanda dizin ve belge öğeleri gibi diğer türleri de bir dizeye dönüştürmek mümkündür.

SokrLP, SokrL, SokrP

Bu işlevlerin giriş parametreleri dize tipinde bir değişkendir. İşlevler önemsiz karakterleri (boşluklar, satırbaşları vb.) kaldırır: sırasıyla sol ve sağ taraftan, yalnızca sol taraftan ve yalnızca sağdan.

Abbreviation(" Her iki taraftaki boşluklar kaldırılacak ") // "Her iki taraftaki boşluklar kaldırılacak"
Abbreviation(" Her iki taraftaki boşluklar kaldırılacaktır ") // "Soldaki boşluklar kaldırılacaktır "
Abbreviation(" Her iki taraftaki boşluklar kaldırılacaktır ") // "Sağdaki boşluklar kaldırılacaktır"

Aslan, Sağ, Orta

Bu işlevler bir dizenin bir kısmını kırpmanıza olanak tanır. "Left()" işlevi, bir dizenin sol tarafından belirtilen uzunluktaki kısmını döndürür. "Right()" işlevi de benzerdir ancak sağdan kırpılır. “Avg()” fonksiyonu satırın seçileceği karakterin sayısını ve uzunluğunu belirlemenizi sağlar.

Lev("String değişkeni", 4) // "Str" değerini döndürür
Right("Dize değişkeni", 7) // "değişken" değerini döndürür
Medium("String değişkeni", 2, 5) // "troko" değerini döndürür

StrLength

İşlev, bir dize değişkeninde bulunan karakter sayısını belirler.

StrLength("Word") // uygulamanın sonucu 5 sayısı olacaktır

Bulmak

İşlev, bir dize değişkeninde bir dizenin bir kısmını aramayı mümkün kılar. Dönüş değeri, bulunan dizenin başlangıcının konumunu gösteren bir sayı olacaktır. Eşleşme bulunamazsa sıfır döndürülür.

Lütfen aramanın büyük/küçük harfe duyarlı olduğunu unutmayın. Orijinal dizede arama alt dizesinin birden fazla oluşumu varsa, işlev ilk geçtiği yerin başlangıcını döndürür.

Find("bir, iki, bir, iki, üç", "iki") // fonksiyon 6 sayısını döndürecek

Boş satır

Bu işlevi kullanmak, bir dizenin boş olup olmadığını belirlemenizi sağlar. Boşluk, satırbaşı ve diğerleri gibi küçük karakterler dikkate alınmaz.

EmptyString("Pupkin Vasily Ivanovich") // işlevi False değerini döndürecektir
EmptyString(" ") // fonksiyon True değerini döndürecek

VReg, NReg, TReg

Bu işlevler dize değişkenlerini karşılaştırırken ve dönüştürürken çok kullanışlıdır. "Vreg()" orijinal dizeyi büyük harfle, "HPreg()" küçük harfle döndürecek ve "TReg()" onu her bir kelimenin ilk karakteri büyük harfle ve sonraki tüm karakterler büyük harfle yazılacak şekilde biçimlendirecektir.

VReg("GENEL MÜDÜR") // dönüş değeri - "GENEL MÜDÜR"
NReg(“CEO DIRECTOR”) // dönüş değeri – “CEO”
TREG(“CEO DIRECTOR”) // dönüş değeri – “Genel Müdür”

SayfaDeğiştir

Bu işlev, metin düzenleyicilerdeki değiştirme işlevine benzer. Dize değişkenlerinde bir karakteri veya karakter kümesini başka bir karakterle değiştirmenize olanak tanır.

StrReplace("kırmızı, beyaz, sarı", ","", ";") // "kırmızı;" değerini döndürür; beyaz; sarı"

StrNumberLines

İşlev, bir metin değişkeninde satırbaşları ile ayrılan satır sayısını belirlemenize olanak tanır.

Aşağıdaki örnekteki döngü üç turdan geçecektir çünkü LineNumberRow işlevi 3 değerini döndürecektir:

ind = 1 için StrNumber of Strings ("Satır1" + Semboller.PS + "Satır2" + Semboller.PS + "Satır3") Döngüsü
<тело цикла>
EndCycle;

StrGetString

Bu işlev, çok satırlı metinlerle öncekiyle aynı şekilde çalışır. Bir metin değişkeninden belirli bir dize almanızı sağlar.

StrGetString("Dize1" + Karakterler.PS + "Dize2" + Karakterler.PS + "Dize3", 2) // "Dize2"yi döndür

Sayfa NumarasıOluşum Sayısı

İşlev, arama dizesinde bir karakterin veya alt dizenin oluşum sayısını sayar.

StrNumberAttachments("a;b;c;d; ", ";") // işlevi 4 sayısını döndürecektir

Sembol ve Sembol Kodu

Bu işlevler, bir karakteri Unicode kodlamasındaki koduna göre elde etmenize ve bu kodu karakterin kendisine göre belirlemenize olanak tanır.

SembolKodu("A") // fonksiyonu 1.040 sayısını döndürecektir
CharacterCode(1040) // fonksiyon “A” değerini döndürecek

Dizelerle çalışırken ortak görevler

Dizeleri Birleştirme

Birkaç dizeyi birleştirmek (birleştirme işlemini gerçekleştirmek için) toplama operatörünü kullanmak yeterlidir.

“Satır 1” + “Satır 2” //iki satırın eklenmesi sonucu “Satır 1 Satır 2” olacaktır.

Tür Dönüşümü

Bir türü, örneğin bir dizin öğesine bağlantı, bir sayı vb. gibi bir dizeye dönüştürmek için “String()” işlevini kullanmak yeterlidir. “ScrLP()” gibi işlevler de değişkenleri bir dizeye dönüştürecek, ancak hemen önemsiz karakterleri kesecek.

String(1000) // "1.000" değerini döndürür

Lütfen bir sayıyı dizeye dönüştürürken programın binlik rakamını ayıran bir boşluk eklediğini unutmayın. Bunu önlemek için aşağıdaki yapıları kullanabilirsiniz:

StrReplace(String(1000),Characters.NPP,"") // "1000" değerini döndürür

String(Format(1000,"HG=")) // "1000" değerini döndürür

Bir dizedeki alıntılar

Çoğu zaman bir dize değişkeninde tırnak işaretleri belirtme ihtiyacıyla uğraşmak zorunda kalacaksınız. Bu, yapılandırıcıda yazılan istek metni veya yalnızca bir değişken olabilir. Bu sorunu çözmek için iki tırnak işareti koymanız yeterlidir.

Header = String("Horns and Hooves LLC - işte biziz!") // şunu döndürecektir: "Horns and Hooves LLC - işte biziz!"

Çok satırlı, satır sonu

Çok satırlı metin oluşturmak için satır sonlarını (Symbols.PS) eklemeniz yeterlidir.

MultilineText = “İlk Satır” + Semboller.PS + “İkinci Satır”

Boşluklar nasıl kaldırılır

Sağdaki veya soldaki boşlukları kaldırmak için “ScrAP()” fonksiyonunu kullanabilirsiniz (“ScrL()” ve “ScrP()”nin yanı sıra):

StringNoSpaces = Kısaltma(" ​​Birçok harf ") // fonksiyon "Birçok harf" değerini döndürecektir

Bir sayıyı dizeye dönüştürdükten sonra bölünemeyen boşlukları kaldırmanız gerekiyorsa, aşağıdaki yapıyı kullanın:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // "99999" değerini döndürür

Programcılar ayrıca, bir metin değişkenindeki tüm boşlukları kaldırmanıza veya başka bir karakterle değiştirmenize olanak tanıyan aşağıdaki yapıyı da sıklıkla kullanır:

StringNoSpaces = StrReplace("merhaba", "") // "merhaba" değerini döndürür

Dizeleri birbirleriyle karşılaştırma

Terimleri her zamanki eşittir işaretiyle karşılaştırabilirsiniz. Karşılaştırma büyük/küçük harfe duyarlıdır.

"Merhaba" = "merhaba" // Yanlış değerini döndürür
"Merhaba" = "Merhaba" // Doğru değerini döndürür
"Merhaba" = "Güle güle" // False değerini döndürecektir

Selamlar, blog sitesinin sevgili okuyucuları! Bugün örnekler yardımıyla 1C sorgu fonksiyonunu pratikte nasıl kullanabileceğinize bakacağız. ALTYAPI. Bu fonksiyonun kullanılması sadece burada inceleyeceğimiz basit sorgularda değil aynı zamanda sorgu ve sorgularda da faydalıdır.

Görev, belge ayrıntılarından ihtiyaç duyulan şeydi uyma iki satır seçin ve bunlara göre sıralayın. Bu tür bir hesaba uygunluk: 779000/004599. Bu değeri nasıl ikiye bölebilirim?

SUBSTRING fonksiyonunun üç parametresi vardır. Birincisi, karakterlerin bir kısmını çıkarmak istediğiniz kaynak dizedir (bir alt dize). Bu parametrenin değer türünün şu olduğu açıktır: Astar. Dikkat, bu çok önemli bir not, eğer ilk parametrenin tipini string dışında kullanırsanız fonksiyon çalışmaz, istek hata üretir! İkinci parametre, dizenin bir kısmının seçiminin başladığı kaynak dizedeki karakterin konumunu belirler ve üçüncüsü, seçilen alt dizenin uzunluğudur. İkinci ve üçüncü parametrelerin değer türü sayıdır.

Hadi uygulamaya geçelim:

Tipik Kaydedici Adı Olarak SEÇİN, ALTYAPI(Tipik.Kayıt Şirketi.Adına Göre, 1, 6) AS Maliyet Hesabı, ALTYAPI(Tipik.Kayıt Şirketi.Adı.Adı, 8, 11) AS Departmanı, AMOUNT(SELECT WHEN AY(Tipik.Dönem) = 3 THEN EXPRESS(Typical.Amount AS NUMBER(15, 2)) ELSE 0 END) Mart ADI RegisterAccounting'den .Typical AS Typical NEREDE Typical.AccountKt = &AccountKt AND Typical.Period BETHEEN &PeriodStart AND &PeriodEnGROUP BY ALTYAPI(Tipik.Kaydedici.Adına Göre, 1, 6), ALTYAPI(Tipik.Kayıt Memuru.Adı, 8, 11), Tipik.Kayıt Memuru SİPARİŞ BY Departman, Maliyet Hesabı

Bu sorgunun sonucu şudur:

İsim Maliyet hesabı Departman Mart
03/01/2010 14:42:54 tarihinden itibaren 00000000319 numaralı ödeme talimatı 779000 004599 9 000
03/02/2010 12:07:34 tarihinden itibaren 00000000320 numaralı ödeme talimatı 779000 004599 4 721,6
03/01/2010 12:28:52 tarihinden itibaren 00000000203 numaralı ödeme talimatı 786500 004599 987 614,51
03/03/2010 14:16:00 tarihinden itibaren 00000000227 numaralı ödeme talimatı 786500 004599 400 000
03/05/2010 12:37:57 tarihinden itibaren 00000000238 numaralı ödeme talimatı 732000 004600 5 400
03/01/2010 11:53:11 tarihinden itibaren 00000000197 numaralı ödeme talimatı verildi 732500 004600 12 100
03/01/2010 11:55:39 tarihinden itibaren 00000000198 numaralı ödeme talimatı 732500 004600 12 100
26.03.2010 0:00:00 tarihinden itibaren 00000000279 numaralı ödeme talimatı 734100 004600 19 609
29.03.2010 14:15:36 tarihinden itibaren 00000000287 numaralı ödeme talimatı verildi 734100 004600 55 300
30.03.2010 11:01:10 tarihinden itibaren 00000000291 numaralı ödeme talimatı 734100 004600 18 090
18.03.2010 10:34:25 tarihinden itibaren 00000000268 numaralı ödeme talimatı 738000 004600 10 050
18.03.2010 12:20:20 tarihinden itibaren 00000000276 numaralı ödeme talimatı 750400 004600 13 060,98
29.03.2010 12:33:46 tarihinden itibaren 00000000281 numaralı ödeme talimatı verildi 750400 004600 555 645,41
03/04/2010 12:21:55 tarihinden itibaren 00000000234 numaralı ödeme talimatı 754450 004600 24 120
30.03.2010 10:44:39'dan itibaren 00000000290 numaralı ödeme talimatı 754450 004600 100 000
03/09/2010 10:53:24 tarihinden itibaren 00000000240 numaralı ödeme talimatı 786300 004600 20 800
18.03.2010 10:58:04 tarihinden itibaren 00000000269 numaralı ödeme talimatı verildi 786300 004600 61 012
30.03.2010 9:27:14 tarihinden itibaren 00000000289 numaralı ödeme talimatı verildi 786300 004600 6 000
03/03/2010 12:13:38 tarihinden itibaren 00000000223 numaralı ödeme talimatı 786500 004600 36 000
03/04/2010 9:52:35 tarihinden itibaren 00000000228 numaralı ödeme talimatı 786500 004600 378 138,85
03/04/2010 9:57:50 tarihinden itibaren 00000000229 numaralı ödeme talimatı 786503 004600 126 117,75
03/01/2010 11:58:06 tarihinden itibaren 00000000200 numaralı ödeme talimatı 754422 004762 63 000
29.03.2010 14:10:18 tarihinden itibaren 00000000286 numaralı ödeme talimatı verildi 764422 004762 10 000
17.03.2010 00:00:00 tarihinden itibaren 00000000267 numaralı ödeme talimatı verildi 764423 004762 464 370
15.03.2010 11:16:28 tarihinden itibaren 00000000261 numaralı ödeme talimatı verildi 764522 004762 81 357

Yani 779000/004599 satırını alırsak SUBSTRING(Typical.Recorder.Respective.Name, 1, 6) “779000” satırını vurgulayacaktır. A SUBSTRING(Tipik.Kaydedici.İlgili.Adı, 8, 11), “004599” çıktısını verecektir.

Aynı sorguda şu ifade kullanılır:

SUM(CHOICE WHEN AY(Tipik.Dönem) = 3 SONRA EXPRESS(Typical.Sum AS SAYI(15, 2)) ELSE 0 SON) AS Mart

Aynı görevde ayların adlarını ve tutarlarını içeren yeni sütunlar eklemek gerekiyordu. Bu ifade bu sorunu çözer. Diğer ayları (örneğin Ocak) kullanmanız gerekiyorsa ifadeyi değiştirin:

AMOUNT(NE ZAMAN AY(Tipik.Dönem) = 1 SONRA EXPRESS(Typical.Sum AS SAYI(15, 2)) ELSE 0 END) AS Ocak

Mart'tan Şubat'a kadar ay alanlarının (koyu harflerle) bir döngü kullanılarak oluşturulduğu bir istek metni örneği vereceğim.

Sorgu Metni = " |SELECT |Typical.Respective.Name, |SUB-STRING(Typical.Registrar.Respective.Name, 1, 6) AS Maliyet Hesabı, |SUB-STRING(Typical.Registrar.Respective.Name, 8, 11) ) AS Departmanı"; Sch için = 1 ila 12 Döngü If Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Sorgu Metni = Sorgu Metni + " | FROM | Muhasebe Kaydı." + AccountingRegisterName + ".MovementsSSubconto(| &StartPeriod, | &EndPeriod,"; Ayrıntılardaki Kısıtlama Satırı = " (Etkinlik = DOĞRU) VE (HİYERARŞİDEKİ Hesap (&Analiz Hesabı)"; Sorgu Metni = İstek Metni + Limit Satırı Ayrıntılar + " |) Tipik Olarak |"; Sorgu Metni = Sorgu Metni + " | WHERE | Tipik.HesapCt = &AnalizHesabı | VE &BaşlangıçDönemi VE &BitişDönemi ARASINDAKİ Tipik.Dönem |GROUP BY | SUBSTRING(Typical.Recorder.Resp.Name, 1, 6), | SUBSTRING(Typical.Registrar. Sorumlu Adı, 8, 11), | Tipik.Kayıt Memuru | SİPARİŞ VEREN | Departman, | Maliyet Hesabı";

Bu nedenle, yukarıdaki kodu (koyu harflerle) kullanarak, isteğin ayları içeren bölümleri görüntülenir. Böylece ayların adlarının ve tutarlarının yer aldığı yeni sütunlar eklenir.

1C sorgularında dizelerle çalışmak için birkaç mekanizma vardır. İlk olarak satırlar eklenebilir. İkinci olarak, bir dizeden bir alt dize alabilirsiniz. Üçüncüsü, dizeler, desene göre de dahil olmak üzere karşılaştırılabilir. Muhtemelen dizelerle yapılabilecek tek şey budur.

Dize ekleme

Bir sorguya satır eklemek için “+” işlemi kullanılır. Yalnızca sınırlı uzunlukta dizeler ekleyebilirsiniz.

"Ad: " + Karşı Taraflar SEÇİN. Dizinden AS Sütun 1 Adı. Karşı Taraflar Karşı Taraflar NEREDE Karşı Taraflar. Bağlantı = &Bağlantı

Alt dize işlevi

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Nesne modelindeki Environment() fonksiyonunun bir benzeri. Substring() işlevi dize verilerine uygulanabilir ve bir parça seçmenize olanak tanır <Строки> , karakter numarasıyla başlayarak <НачальнаяПозиция> (bir satırdaki karakterler 1'den başlayarak numaralandırılır) ve uzunluk <Длина> karakterler. Fonksiyon hesaplamasının sonucu değişken uzunluklu bir dize tipine sahiptir ve eğer uzunluk sınırsız olarak kabul edilecektir. <Строка> sınırsız uzunluk ve parametreye sahiptir <Длина> sabit değildir veya 1024'ten büyük değildir.

Eğer dizenin uzunluğu ikinci parametrede belirtilenden daha azsa, işlev boş bir dize döndürecektir.

Dikkat! Sınırsız uzunluktaki dizeleri sınırlı uzunluktaki dizelere dönüştürmek için SUBSTRING() işlevinin kullanılması önerilmez. Bunun yerine EXPRESS() cast operatörünü kullanmak daha iyidir.

İşlev Benzer

Bir dize niteliğinin belirli kriterleri karşıladığından emin olmamız gerekiyorsa onu karşılaştırırız:

Karşı Tarafları SEÇİN Dizinden AS Sütun 1 Adı Karşı Taraflar Karşı Taraflar NEREDE Karşı Taraflar Ad = "Gazprom"

Peki ya daha incelikli bir karşılaştırmaya ihtiyacınız varsa? Sadece eşitlik veya eşitsizlik değil, belirli bir kalıba benzerlik mi? SIMILAR işlevi tam da bunun için yaratıldı.

LIKE — Bir dizenin bir kalıba benzerliğini kontrol etmek için kullanılan operatör. SQL'deki LIKE'ın benzeri.

SIMILAR operatörü, solunda belirtilen ifadenin değerini, sağında belirtilen model dizesiyle karşılaştırmanıza olanak tanır. İfadenin değeri string türünde olmalıdır. İfadenin değeri kalıpla eşleşiyorsa operatörün sonucu DOĞRU, aksi halde YANLIŞ olacaktır.

Şablon dizesindeki aşağıdaki karakterler hizmet karakterleridir ve dize karakterinden farklı bir anlama sahiptirler:

  • % (yüzde): herhangi bir sayıda rastgele karakter içeren bir dizi;
  • _ (alt çizgi): isteğe bağlı bir karakter;
  • […] (köşeli parantez içindeki bir veya daha fazla karakter): köşeli parantez içinde listelenen herhangi bir tek karakter. Numaralandırma, aralığın uçları da dahil olmak üzere aralığa dahil edilen rastgele bir karakter anlamına gelen a-z gibi aralıklar içerebilir;
  • [^...] (köşeli parantez içinde bir olumsuzluk işareti ve ardından bir veya daha fazla karakter): olumsuzluk işaretinin ardından listelenenler dışındaki herhangi bir tek karakter.

Bunun dışındaki herhangi bir sembol kendini ifade eder ve herhangi bir ek yük taşımaz. Listelenen karakterlerden birinin kendisi olarak yazılması gerekiyorsa, önüne şu karakter yazılmalıdır:<Спецсимвол>. Kendim<Спецсимвол>(herhangi bir uygun karakter), ÖZEL KARAKTER anahtar sözcüğünden sonra aynı ifadede tanımlanır.