internet pencereler Android

1s 8 dizedeki boşlukları kaldırır. Dizeleri birbirleriyle karşılaştırma

1C 8.2 ve 8.3'ten veri yüklerken ve boşaltırken, sayılarda verilerin normal şekilde işlenmesini engelleyen boşluklar olması sık sık olur. Bu sorunun çözümü çok basittir.

Ne tür boşluklar olduğunu düşünün.

Boşluklar iki tip olabilir:

  • kırılmaz alan;
  • "düzenli" alan.

Bölünemez boşlukları kaldırma

StringRepresentation = String(Sayı); // sistem "10 000" değişkenine yazacak

1C'deki bu tür boşlukları kaldırmak, sayı biçimi işleviyle çok basittir:

Sayı = Biçim(10000, "CH=");

StringRepresentation = String(Sayı); // sistem "10000" değişkenine yazacak

Biçim dizesindeki gruplamayı boş bir değere ayarladık ("0" da yazabilirsiniz).

Veri türü zaten "string" ise, aşağıdaki yöntem kullanılabilir:

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // StringRepresentation değişkeni "10 000" idi, "10000" oldu

Yani, dizgedeki bölünmez alanı (Symbols.NPP) boş bir değerle değiştirdik.

düzenli boşluklar

Bir dizedeki normal bir boşluğu kaldırmak, armutları bombalamak kadar kolaydır. Aşağıdaki işlevi yürütmek yeterlidir:

StringRepresentation = StrReplace(String(StringRepresentation), " ", ""); // "10.000", "10.000" oldu

Örnek önceki yönteme benzer. Ancak Symbols.npp yerine tek boşluklu bir dize kullanıyoruz.

1C programlamayı öğrenmeye başlıyorsanız, ücretsiz kursumuzu tavsiye ediyoruz (unutmayın youtube'a abone ol - Düzenli olarak yeni videolar yayınlanmaktadır.

Aptallar için SSS veya platform 8.

1C'ye ayrılmış forumlara bakılırsa, 1C v 8 platformuyla ilk karşılaşan veya 7.7'den geçiş yapan programcılar genellikle aynı soruları soruyor. Burada bence en yaygın olanı toplamaya karar verdim ...

V: 12.600.00 sayısındaki boşluk nasıl kaldırılır?
Ö: Burada kullanılanın boşluk karakteri değil, sözde "bölünemez boşluk" olduğunu anlamak önemlidir, bu nedenle, örneğin aşağıdaki yapı:

StrReplace(VariableNumber," ","");

çalışmayacak. Sorunu çözmek için iki seçenek vardır, ya boşluk yerine Symbols.NPP'yi değiştirin ya da Format () işlevini kullanın.

StrReplace(VariableNumber, Symbols.NPP,""); // 1. seçenek
Format(DeğişkenSayı,"CH="); // 2. seçenek

V: Bir sorguda, sonuçtaki seçime yalnızca belirli bir türdeki belgelerin dahil edileceği şekilde bir koşul nasıl ayarlanır?
Ö: Bu, solunda belirtilen ifadenin değerinin sağda belirtilen tabloya referans olup olmadığını kontrol etmenizi sağlayan sorgu dili operatörü REFERENCE kullanılarak yapılabilir. Bir örnek düşünün, yalnızca Hizmetlerin Gerçekleştirilmesi birikim kaydından, sicil memurunun Mal ve Hizmetlerin Gerçekleştirilmesi belgesi olduğu kayıtları seçin:

İstek=Yeni İstek("
|SEÇ
| Hizmetlerin Uygulanması Kayıt Memuru,
| Hizmetlerin Uygulanması Tutar
|
| Birikim Kaydı Hizmetlerin Uygulanması AS Hizmetlerin Uygulanması
|NEREDE
| Kayıt Şirketi BAĞLANTI Belgesi. Mal ve Hizmet Satışları");

V: Aynı konfigürasyonlar arasında belirli belgeler/dizinler nasıl aktarılır?
Ö: Bu, ITS disklerinde sağlanan UploadUploadDataXML.epf örnek işleme yardımıyla yapılabilir.

V: Farklı konfigürasyonlar arasında (veya 7.7'den 8'e) nasıl veri aktarılır?
Ö: Bence en iyi seçenek, ITS disklerinde sağlanan tipik "Veri Dönüştürme" konfigürasyonunu kullanmaktır, ayrıca bu konfigürasyonun kullanımını açıklayan birkaç makale vardır.

V: Bir sorguda dize olmayan türden bir alana belirli bir dize nasıl eklenir, örneğin, SEÇ Hizmet Mallarının Gerçekleştirilmesini Seçin Tutar + "ovma."?
Ö: Mümkün değil. Bir sorguda tür dönüşümü mümkün değildir. EXPRESS sorgu dili yapısı bazıları için yanıltıcıdır, ancak yalnızca bileşik türden bir değeri o değerin bileşen türlerinden birine atar ve hiçbir şekilde türü dönüştürmez, bu nedenle bu durumda uygulanamaz.

V: Sınırsız uzunlukta dize türü olan bir alandaki bir sorguda koşul nasıl ayarlanır, örneğin belirli bir yoruma sahip tüm belgeleri seçin?
Ö: Bunu yapmak için, EXPRESS sorgu dili operatörünü kullanarak alanın uzunluğunu sınırlamanız gerekir. Örneğin:

İstek=Yeni İstek("
|SEÇ
| Mal ve Hizmetlerin Gerçekleştirilmesi Link
|
| Document.Mal/Hizmet Satışı NASIL Mal/Hizmetlerin Gerçekleşmesi
|NEREDE
| EXPRESS(ImplementationProductsServices.Comment AS STRING(100)) = &Comment");

V: v 8'de 7.7 CatalogIB() işlevinin bir analogu var mı?
Ö: Hayır, çünkü böyle bir işlev bir istemci-sunucu çalışma modu için anlamlı olmayacaktır. Ancak, dosya modu için aşağıdaki yapıyı kullanarak bilgi bankası dizinini alabilirsiniz:

DirectoryIB=NSstr(InfobaseConnectionString(),"Dosya");

V: Bir düğümün dağıtılmış bir bilgi tabanından bağlantısı nasıl kesilir?
Ö: Aşağıdaki yapı ile:

Değişim Planları.SetMainNode(Tanımsız);

Veya yapılandırıcıyı /ResetMasterNode komut satırı parametresiyle çalıştırın (temel sürümler için kullanılmaz).

V: Belgenin adı nasıl alınır (yöntem 7.7 View()'e benzer)?
Ö: Meta veriler yardımıyla. Örneğin:

V: Tek bir sorgu ile her türden belge nasıl seçilir?
Ö: Meta verileri ve sorguları birleştirme becerisini kullanma V:

İstek=Yeni İstek;
Metin="";
Metadata.Documents Döngüsünden Her Belge İçin
Metin=Metin+"Belgeden Bağlantı Seç."+Document.Name+"JOIN";
Bitiş Döngüsü;
Query.Text=Lev(Metin, StrLength(Metin)-StrLength(" BİRLEŞTİR "));
Selection=Query.Execute().Select();

V: Bir raporun/işlemenin yürütülmesi nasıl durdurulur?
Ö: UserInterruptHandle() operatörü ile döngüler içinde kullanılması tavsiye edilir. Kullanıcı Ctrl+Break tuş bileşimine bastığında, yürütme kesintiye uğrar ve ilgili bir mesaj görüntülenir. Örneğin:

Selection.Next() Döngüsü iken
İşlemeUserInterrupt();

Bitiş Döngüsü;

V: Form, ValueTree tipine ve Tree özelliği setine sahip bir TableField'e sahiptir. Değer Ağacı neden görüntülenmiyor?
Ö: Sütunlardan biri için DisplayHierarchy özelliğini ayarlamak da gereklidir.

V: Bilgi bankası dosya modunda zamanlanmış görevler nasıl kullanılır?
Ö:İstemci-sunucu modundan farklı olarak, dosya modunda, programlanmış görevlerin otomatik olarak başlatılmasının uygulanmasından geliştirici sorumludur. İşlerin otomatik olarak başlatılmasını uygulamak için, "vadesi geçmiş" işleri periyodik olarak kontrol eden ve bunları başlatan bir Bekleme İşleyicisine ihtiyacınız vardır. Bunun için ayrı bir seans kullanılması şiddetle tavsiye edilir. Örnek:

Görev Kontrolü() prosedürü
ExecuteProcessingJobs();
İşlem Sonu
ConnectWaitingHandler("Kontrol Görevleri",3);

V: Sınırlandırılmış bir dizeden bir dizi nasıl alınır?
Ö:Örnek olarak, "her iki yönde de" çalışan bir fonksiyonun kendi versiyonumu vereceğim, yani. sınırlandırılmış bir dizeyi geçerken bir dizi oluşturur ve bir diziyi geçirirken ondan sınırlandırılmış bir dize oluşturur.

İşlev StringArray(Değer Değeri, Ayırıcı)
TypeValue(Value)=Type("String") ise
MnStr=StrReplace(Değer, Ayırıcı, Semboller.PS);
Dizi=Yeni Dizi;
n=1 için Satır Sayısına Göre (MnStr) Döngüsü
Array.Add(StrGetString(MnStr,n));
Bitiş Döngüsü;
Dönüş Dizisi;
ElseIf TypeValue(Value)=Type("Array") Sonra
dize="";
Değer Döngüsündeki Her Öğe İçin
Dize=Dize+?(Dize"",Ayırıcı,"")+Element;
Bitiş Döngüsü;
Dönüş Dizisi;
Aksi halde
Dönüş Tanımsız;
EndIf;
EndFonksiyonlar

V: Tipik bir konfigürasyonda konfigüratörde değişiklik yapma yeteneği nasıl etkinleştirilir?
Ö: Tipik konfigürasyonlar desteklendiğinden (otomatik güncellemelere izin verir), varsayılan olarak konfigürasyonda değişiklik yapma özelliği devre dışı bırakılır. Bu özelliği etkinleştirmek için, yapılandırıcıda "Yapılandırma > Destek > Destek ayarları" menü öğesini seçin ve açılan pencerede "Değiştirme özelliğini etkinleştir" düğmesini tıklayın.

V:İşleme/yapılandırma için bir parola nasıl ayarlanır?
Ö: 1C v 8'de parolalar yalnızca nesne modüllerinde ayarlanabilir. Bir şifre belirlemek için nesne modülünü açmanız ve "Metin > Şifre belirle" menü öğesini seçmeniz gerekir. Konfigürasyonu, nesne modüllerinin kaynak kodu olmadan da sağlamak mümkündür ("Konfigürasyon > Konfigürasyon teslimi > Teslimat ayarları" konfigürasyonu). Şu anda bu yöntemlerin hiçbirinin modülün kaynak kodunu görüntülemeye karşı güvenilir bir koruma olmadığını belirtmek isterim.

V: Belge araması neden FindByNumber( işlevini kullanarak çalışmıyor?<Номер документа>)?
Ö: Unutulmamalıdır ki, yapılandırıcıda bu tür belgeler için periyodik numaralandırma ayarlanmışsa, belge numarasına ek olarak, aralığın tarihini ikinci parametre olarak belirtmek gerekir. Aksi takdirde, boş bir tarihe sahip bir belge aranacak ve bu da açıkça istenen sonuca yol açmayacaktır.

V: 1C 8.1'de, hata ayıklama için halihazırda çalışan bir uygulamaya bağlanmanız gerekiyorsa (Yapılandırıcı > Hata Ayıklama > Bağlantı), kullanılabilir hata ayıklama öğeleri boştur. Sebebi nedir?
Ö: Gerçek şu ki, hata ayıklayacağımız uygulama için hata ayıklamayı açıkça etkinleştirmeniz gerekiyor. Araçlar menüsü > Seçenekler > Sistem sekmesi > Hata ayıklama etkin bayrağı.

V: Dinamik bir listenin satırları (örneğin, DirectoryList veya DocumentList) nasıl sıralanır?
Ö: Bu, Rapor Oluşturucu kullanılarak yapılabilir, örneğin:

Oluşturucu=Yeni Rapor Oluşturucu;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Selection=Builder.Result.Select();
Selection.Next() Döngüsü iken
Rapor(Seçim. Bağlantı);
Bitiş Döngüsü;

Not: seçim, geçerli olarak ayarlanan seçime göre satırları içerecektir.

V: Meta veri nesnelerinin özellik değerleri nasıl kontrol edilir? Örneğin, dizin hiyerarşisinin türü veya kayıt giriş modu veya belge numarasının sıklığı?
Ö: Bu özelliklerin tümü, meta veri nesnelerinin numaralandırılmış özellikleridir. Bu tür değerleri meta veriler aracılığıyla da alabilirsiniz. Örnekler:

// Örnek 1. Arama Hiyerarşisi Görünümü
Metadata.Catalogs[CatalogName].HierarchyView = Metadata.ObjectProperties.HierarchyView.HierarchyGroupsAndItems ise...
// Örnek 2. RegisterWriteMode
Metadata.InformationRegisters[RegisterName].RegisterWriteMode = Metadata.ObjectProperties.RegisterWriteMode.RegisterSubordinate ise...
// Örnek 3. Periyodik belge numarası
Eğer Metadata.Documents[DocumentName].Number Periodicity = Metadata.ObjectProperties.DocumentNumber Periodicity.Non-Periodic O zaman...

V: Değer ağacında üç durumlu bir onay kutusu nasıl uygulanır?
Ö: Sorun ifadesini daha ayrıntılı olarak ele alalım. Form, veri kaynağı bir değer ağacı olan bir tablo alanına sahiptir. Sütunlardan biri bir onay kutusu denetimi içerir. "Açık", "Kapalı" ve "Tanımsız" olmak üzere üç durum alabilmesi gerekir. Bu durumda, durum "Tanımsız" veya "gri bayrak" olarak adlandırılır, yani. kısmen seçili, tüm alt satırlar aynı bayrak durumuna sahip değilse ayarlayın. Ayrıca, bir satırın alt satırları varsa, bayrağı değiştirildiğinde, tüm alt satırların bayrakları da buna göre değiştirilmelidir.
İlk olarak, değer ağacına onay kutusu sütunumuzu ekleyelim:

Tree.Columns.Add("İşaret",NewTypeDescription("Sayı"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Mark";
TreeColumns.Mark.SetControlItem(Type("Onay Kutusu"));
TreeColumns.Mark.EditMode=EditModeColumns.Immediate
enno;
TreeColumns.Tag.ThreeFlagStates=True;

İkinci olarak, bayrağı değiştirirken, alt satırlarda uygun değerleri ayarlamanız ve “üst satırda” bayrağın değerini kontrol etmeniz gerekir:

Prosedür TreeOnBir Bayrağı Değiştirme(Element, Column)
CurrentRow=Element.CurrentRow;
CurrentLine.Mark=2 ise
CurrentLine.Mark=0;
EndIf;
SettingFlags(CurrentRow,CurrentRow.Mark);
CurrentRow.ParentUndefined Döngüsü iken
CurrentRow.Parent.Label=?(SetForAll(CurrentRow),CurrentRow.Label,2);
CurrentRow=CurrentRow.Parent;
Bitiş Döngüsü;
İşlem Sonu

Burada, SetFlags() prosedürü, alt satırlardaki bayrakları yinelemeli olarak ayarlar:

Prosedür SetFlags(CurrentRow,Value)
CurrentRow.Rows Döngüsünün Her Sayfası İçin
PageMark=Değer;
SetFlags(Pg,Pg.Mark);
Bitiş Döngüsü;
İşlem Sonu

Ve SetForAll() işlevi, geçerli düzeydeki tüm satırlar için aynı değerin ayarlanıp ayarlanmadığını kontrol eder:

İşlev SetForAll(String)
Row.Parent.Row Döngüsünün Her Sayfası İçin
Eğer Page.MarkString.Mark ise
yanlış döndür;
EndIf;
Bitiş Döngüsü;
true döndür;
EndFonksiyonlar

V: Liste biçiminde özniteliğe göre sıralama nasıl uygulanır?
Ö:Öznitelik ilkel bir türse, "İndeks" özniteliğinin özelliğini "İndeks" veya "Ek ile Dizin" olarak ayarlamak yeterlidir. sipariş” (ValueStorage türünün öznitelikleri için kullanılamaz). Öznitelik bir başvuru türündeyse, bunun için sıralamayı açıkça etkinleştirmek gerekir. Örneğin:

ElementUE=Form Elements.DirectoryList.Order Settings.Find("Attribute1");
ElementUE Tanımsız ise
ItemUE.Availability=true;
EndIf;

1C 8.3'teki yerleşik dilde 1c'deki dizeler, ilkel türdeki değerlerdir. 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şaretleri içine alınmış bir dizi karakterdir.

Örnek 1. Metinli bir string değişken oluşturalım.

StringVariable = "Merhaba dünya!";

1s 8.3'te dizelerle çalışmak için işlevler

Bu bölüm, satırları 1 saniyede değiştirmenize veya içerdiği bilgileri analiz etmenize izin veren ana işlevleri sağlayacaktır.

StrLength

Uzunluk(<Строка>) . Parametrede geçirilen dizede bulunan karakter sayısını döndürür.

Örnek 2. "Merhaba dünya!" dizesindeki karakter sayısını sayalım.

String = "Merhaba dünya!"; Karakter Sayısı = StrLength(Dize); Rapor(Karakter Sayısı);

Bu kodu çalıştırmanın sonucu, dizideki karakter sayısını gösterecektir: 11.

kısaltılmış

kısa(<Строка>) . Bir dizedeki ilk anlamlı karakterin solundaki anlamlı olmayan karakterleri kırpar.
Önemsiz karakterler:

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

Örnek 3. "Barış!" dizesinin sol tarafındaki tüm boşlukları kaldırın. ve ona "Merhaba" dizesini ekleyin.

String = abbr("dünya!"); String = "Merhaba"+String; Bildir(Dize);

Bu kodun yürütülmesinin sonucu, "Merhaba dünya!" dizesinin görüntülenmesi olacaktır.

Kısaltma

kısalt(<Строка>) . Bir dizedeki ilk anlamlı karakterin sağındaki anlamlı olmayan karakterleri kırpar.

Örnek 4. "Merhaba" ve "dünya!" "Merhaba dünya!"

String = abbr("Merhaba")+" "+kısalt("dünya!"); Bildir(Dize);

Kısaltılmış LP

kısa(<Строка>) . Dizedeki ilk anlamlı karakterin sağındaki anlamlı olmayan karakterleri kırpar, ayrıca dizedeki ilk anlamlı karakterin solundaki anlamlı olmayan karakterleri de kırpar. Bu işlev, daha çok yönlü olduğu için önceki ikisinden daha sık kullanılır.

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

Yüklenici = Directoryies.Contractors.FindBy Ayrıntılar("TIN", "0777121211"); ContractorObject = Contractor.GetObject(); ContractorObject.Description = Kısaltılmış LP(ContractorObject.Description); ContractorObject.Write();

bir aslan

Bir aslan(<Строка>, <ЧислоСимволов>) . Bir dizenin ilk karakterlerini alır, parametrede belirtilen karakter sayısı 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ş harfleriyle dize alın.

InitialName = Aslan(Çalışan.Adı, 1); Patronimik Başlangıç ​​= Aslan(Çalışan.Patronimik, 1); TamAd = Çalışan.Soyadı + " " + Adının Baş Harfi + "." + Patronimik Başlangıç ​​+ ".";

Haklar

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

Örnek 7. Dize değişkeninin sonuna "yyymmdd" biçiminde tarih yazalım, tarih içeren dizeyi alın ve türe dönüştürün tarih.

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

Çarşamba

Çarşamba(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Parametrede geçirilen dizeden bir alt dize alır Astar, parametrede numarası belirtilen karakterden başlayarak İlk Sayı ve parametreye iletilen uzunluk Karakter sayısı. Bir dizedeki karakterlerin numaralandırılması 1'den başlar. İlk Sayı 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, dizenin sonuna kadar olan karakterler seçilir.

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

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

Sayfa Bul

StrBul(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Bir dizgede belirtilen alt dizgiyi arar, bulunan alt dizginin ilk karakterinin konum numarasını döndürür. Bu işlevin parametrelerini göz önünde bulundurun:

  • Astar. Kaynak dizesi;
  • Alt dizeArama. İstenen alt dizi;
  • yönArama. Bir dizgede bir alt dizginin aranacağı yönü belirtir. Değerler alabilir:
    • Arama Yönü. En Başından;
    • Arama Yönü.Sondan;
  • Başlangıç ​​konumu. Aramanın başlatılacağı dizedeki konumu belirtir;
  • Giriş numarası. Kaynak dizede aranan alt dizenin oluşum sayısını belirtir.

Örnek 9. "Merhaba dünya!" "ve" karakterinin son oluşumunun konumunu belirleyin.

PositionNumber = StrFind("Merhaba Dünya!", "ve", SearchDirection.From End); Bildir(PozisyonNumarası);

Bu kodun yürütülmesinin sonucu, ekranda "ve" sembolünün son oluşum numarasının görüntülenmesi olacaktır: 9.

VReg

VReg(<Строка>) . Belirtilen dizenin tüm karakterlerini 1s 8'e 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 yürütülmesinin sonucu, "HELLO WORLD!" dizesinin görüntülenmesi olacaktır.

HReg

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

Örnek 11. "HELLO WORLD!" Dizesini dönüştürün. küçük harfe.

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

Bu kodun yürütülmesinin sonucu, "merhaba dünya!" dizesinin görüntülenmesi olacaktır.

TReg

TReg(<Строка>) . Bir dizgiyi ş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!" dizesindeki kelimelerin ilk harflerini büyük yapın.

StringTreg = TReg("merhaba dünya!"); Rapor(StringTreg);

Bu kodun yürütülmesinin sonucu, "Merhaba Dünya!" dizesinin görüntülenmesi olacaktır.

sembol

sembol(<КодСимвола>) . Unicode koduna göre bir karakter alır.

Örnek 13. "Merhaba Dünya!" satırına sola ve sağa ekleyin. sembol ★

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

Bu kodun yürütülmesinin sonucu, "★Merhaba Dünya!★" dizesinin görüntülenmesi olacaktır.

SembolKodu

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

Örnek 14. "Merhaba Dünya!" Dizesindeki son karakterin kodunu bulun.

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

Bu kodun yürütülmesinin sonucu, "!" Sembolünün kodunun görüntülenmesi olacaktır. - 33.

boş satır

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

Örnek 15. Dizenin boş olup olmadığını ve üç boşluktan oluştuğunu kontrol edin.

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

Bu kodun yürütülmesinin sonucu, "Evet" kelimesinin görüntülenmesi olacaktır (bir boole değerinin dize ifadesi Doğru).

StrReplace

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

Örnek 16. "Merhaba Dünya!" satırında "Dünya" kelimesini "Arkadaşlar" kelimesiyle değiştirin.

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

Bu kodun yürütülmesinin sonucu, "Merhaba Arkadaşlar!" dizesinin görüntülenmesi olacaktır.

StrNumberRows

Satır Sayısı(<Строка>) . Çok satırlı bir dizedeki satır sayısını saymanızı sağlar. 1s 8'de yeni bir satıra geçmek için sembolü kullanılır not(satır besleme karakteri).

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

Sayı = Satır Sayısı("İlk satır"+Symbols.PS +"İkinci satır"+Symbols.PS +"Üçüncü satır"); Numarayı bildir);

Bu kodun yürütülmesinin sonucu, metindeki satır sayısının görüntülenmesi olacaktır: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Sayısına göre çok satırlı bir dizede bir dize alır. Satır numaralandırma 1'den başlar.

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

Metin = "İlk Satır"+Characters.PS +"İkinci Satır"+Characters.PS +"Üçüncü Satır"; LastLine = StrGetLine(Metin, Satır Sayısı(Metin)); Bildir(Son Satır);

Bu kodun yürütülmesinin sonucu, "Üçüncü satır" satırının görüntülenmesi olacaktır.

StrNumberOccurrences

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

Örnek 19. Durumundan bağımsız olarak “c” harfinin “1s ​​8.3 ve 8.2'deki Çizgiler” satırına kaç kez girdiğini belirleyin.

String = "1s 8.3 ve 8.2'deki satırlar"; Oluşum Sayısı = Oluşum Sayısı(Vreg(String), "C"); rapor(oluş sayısı);

Bu kodun yürütülmesinin sonucu, ekranda oluşum sayısını gösterecektir: 2.

SayfaBaşlıyor

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

Örnek 20. Seçilen karşı tarafın TIN'inin 1 sayısı ile başlayıp başlamadığını belirleyin. karşı taraf karşı taraflar.

TIN = Yüklenici.TIN; StartsCUnits = StrStartsC(TIN, "1"); Eğer BaşlıyorFROM1 O Zaman // Kodunuz EndIf;

Sayfa Bitiş Tarihi

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

Örnek 21. Seçilen karşı tarafın TIN'inin 2 sayısı ile bitip bitmediğini belirleyin. karşı taraf dizin elemanının bağlantısı saklanır karşı taraflar.

TIN = Yüklenici.TIN; İki İle Bitir = Str İle Bitir (TIN, "2"); İki İle Bitiyorsa // Kodunuz EndIf;

PageSplit

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

Örnek 22. Diyelim ki ";" sembolüyle ayrılmış sayılar içeren bir dizimiz var, diziden bir dizi sayı alın.

Dizi = "1; 2; 3"; Dizi = StrSplit(Dize, ";"); Sayı için = 0 Array.Quantity() Tarafından - 1 Döngü Denemesi Dizi[Sayı] = Sayı(Ablp(Dizi[Sayı])); İstisna Dizisi[W] = 0; EndTry EndCycle;

Yürütme sonucunda 1'den 3'e kadar sayılar içeren bir dizi elde edilecektir.

StrConnect

StrConnect(<Строки>, <Разделитель>) . İkinci parametrede belirtilen sınırlayıcıyı kullanarak ilk parametredeki bir dizi diziyi dizinin tüm öğelerini içeren bir dizeye dönüştürür.

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

Sayım için = 0 Array.Quantity() Tarafından - 1 Döngü Dizi[Sayı] = String(Dizi[Sayı]); Bitiş Döngüsü; String = StrConnect(Array, "; ");

Dize 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 ele alacağız.

Astar

Herhangi bir türdeki bir değişkeni stringe dönüştürmek için aynı isimli "String()" fonksiyonu vardır. Girdi parametresi, dize gösterimi elde edilecek olan değişkenin kendisi olacaktır.

String(False) // "Hayır" döndürür
String(12345) // "12 345" döndürür
String(CurrentDate()) //"21.07.2017 11:55:36"

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

Kısaltılmış LP, Kısaltılmış L, Kısaltılmış P

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

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

Aslan, Sağ, Orta

Bu işlevler, bir dizenin bir kısmını kesmenize izin verir. Lion() işlevi, dizenin belirtilen uzunluktaki sol tarafındaki kısmını döndürür. "Right()" işlevi benzerdir, ancak kırpma sağda yapılır. "Çar()" işlevi, dizenin seçileceği karakter numarasını ve uzunluğunu belirlemenizi sağlar.

Lion("Dize değişkeni", 4) // "Stro" döndürür
Right("Dize değişkeni", 7) // "değişken" döndürür
avg("Dize değişkeni", 2, 5) // "troco" döndürür

StrLength

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

StrLength("Word") // yürütmenin sonucu 5 sayısı olacak

Bulmak

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

Aramanın büyük/küçük harf duyarlı olduğunu unutmayın. Orijinal dizede arama alt dizesinin birden fazla örneği varsa, işlev ilk oluşumun başlangıcını döndürür.

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

boş satır

Bu işlevi kullanmak, bir dizenin boş olup olmadığını belirlemenizi sağlar. Boşluk, satır başı ve diğerleri gibi önemsiz karakterler dikkate alınmaz.

EmptyString("Vasily Ivanovich Pupkin") // fonksiyon False döndürecek
EmptyString(" ") // fonksiyon True 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, "HReg()" küçük harfle döndürür ve "TReg()" onu biçimlendirir, böylece her bir kelimenin ilk karakteri büyük ve sonraki tüm karakterler küçük harf olur.

VReg("GENEL MÜDÜR") // dönüş değeri - "GENEL MÜDÜR"
HReg("GENEL MÜDÜR") // dönüş değeri - "CEO"
TReg("GENEL MÜDÜR") // dönüş değeri - "Genel Müdür"

StrReplace

Bu işlev, metin düzenleyicilerdeki değiştirmeye benzer. Dize değişkenlerinde bir karakterin veya karakter kümesinin yerine başka bir karakter koymanıza olanak tanır.

StrReplace("kırmızı, beyaz, sarı", ",", ";") // "kırmızı; Beyaz; sarı"

StrNumberRows

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

Aşağıdaki örnekteki döngü, StrNumberRows işlevi 3 değerini döndüreceğinden üç daireden geçecektir:

ind \u003d 1 için StrNumber of Lines ("Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3") Döngü
<тело цикла>
Bitiş Döngüsü;

StrGetString

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

StrGetString("String1" + Symbols.PS + "String2" + Symbols.PS + "String3", 2) // "Satır2" döndürür

StrNumberOccurrences

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

StrNumberInstallations("a;b;c;d; ", ";") // fonksiyon 4 sayısını döndürür

Sembol ve SembolKodu

Bu işlevler, bir karakteri Unicode koduna göre almanıza ve bu kodu karakterin kendisine göre belirlemenize olanak tanır.

SymbolCode("A") // fonksiyon 1 040 sayısını döndürür
SymbolCode(1040) // fonksiyon "A" döndürecek

Dizelerle çalışırken sık yapılan görevler

Dize Birleştirme

Birden çok dizeyi birleştirmek (birleştirmek) için sadece toplama operatörünü kullanın.

"Satır 1" + "Satır 2" //iki satır eklemenin sonucu "Satır 1 Satır 2" olacaktır

Tür dönüştürme

Bir türü bir dizgeye dönüştürmek için, örneğin bir sözlük öğesine, bir sayıya vb. bir referans, "String ()" işlevini kullanmak yeterlidir. "ShortLp()" gibi işlevler de değişkenleri bir dizgeye dönüştürür, ancak hemen önemsiz karakterleri keserek.

String(1000) // "1000" döndürecek

Lütfen, bir sayıyı bir dizgeye dönüştürürken, programın otomatik olarak bini 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,"CH=")) // "1000" döndürür

Bir dizedeki alıntılar

Çoğu zaman, bir dize değişkenine tırnak işareti koyma ihtiyacıyla uğraşmak zorunda kalacaksınız. Konfigüratörde yazılmış bir istek metni veya sadece bir değişken olabilir. Bu sorunu çözmek için iki alıntı karakteri ayarlamanız yeterlidir.

Header = String("Horns and Hooves LLC biziz!") // "Roga and Hooves LLC biziz!"

Çok satırlı, satır sonu

Çok satırlı bir metin oluşturmak için, ona satır sonu karakterleri (Symbols.PS) eklemek yeterlidir.

MultilineText = "İlk Satır" + Karakterler.PS + "İkinci Satır"

boşluklar nasıl kaldırılır

Sağdaki veya soldaki boşlukları kaldırmak için "Stretch()" işlevini ("Scrpt()" ve "ScreenP()" gibi) kullanabilirsiniz:

StringWithoutSpaces = ShortLP(" Birçok harf ") // fonksiyon "Birçok harf" değerini döndürür

Bir sayıyı bir dizgeye dönüştürdükten sonra, bölünemez boşlukları kaldırmanız gerekirse, aşağıdaki yapıyı kullanın:

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

Ayrıca, programcılar genellikle bir metin değişkeninin tüm boşluklarını kaldırmanıza veya başka bir karakterle değiştirmenize izin veren aşağıdaki yapıyı kullanır:

StringWithoutSpaces = StrReplace(" merhaba", " " ,"") // "merhaba" döndürür

Dizeleri birbirleriyle karşılaştırma

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

"merhaba" = "merhaba" // false döndürür
"Merhaba" = "Merhaba" // True değerini döndürür
"Merhaba" = "Hoşçakal" // False döndürür