1c satırdaki boşlukları kaldırın. boşluklar nasıl kaldırılır

1c 8.3'teki yerleşik dilde 1c'deki dizeler, ilkel türdeki değerleri temsil eder Hat... Bu türdeki değerler, rastgele uzunlukta bir Unicode dizesi içerir. Dize türü değişkenler, tırnak içine alınmış bir dizi karakterdir.

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

StringVariable = "Merhaba dünya!";

1c 8.3'te dizelerle çalışma işlevleri

Bu bölümde, 1c'deki satırları değiştirmenize veya içerdiği bilgileri analiz etmenize izin veren ana işlevler verilecektir.

Str Uzunluğu

StrUzunluk (<Строка>) ... 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, dizedeki karakter sayısının görüntülenmesi olacaktır: 11.

Kısaltma

Kısalt (<Строка>) ... Dizedeki ilk anlamlı karakterin solundaki önemsiz karakterleri keser.
Küçük karakterler:

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

Örnek 3. "world!" satırının solundaki tüm boşlukları kaldırın. ve "Merhaba" dizesini buna ekleyin.

String = kısaltılmış ("barış!"); String = "Merhaba" + Dize; Rapor (Dize);

Bu kodun yürütülmesinin sonucu "Merhaba dünya!" satırının çıktısı olacaktır.

Kısaltma

Kısaltma (<Строка>) ... Dizedeki ilk anlamlı karakterin sağındaki önemsiz karakterleri keser.

Örnek 4. "Merhaba" ve "Dünya!" Oluşturun. "Merhaba dünya!" ifadesi

String = kısaltılmış ("Merhaba") + "" + kısaltılmış ("dünya!"); Rapor (Dize);

SokrLP

SocrLP (<Строка>) ... Bir dizedeki ilk anlamlı karakterin sağındaki önemsiz karakterleri keser ve ayrıca bir dizedeki ilk anlamlı karakterin solundaki önemsiz karakterleri de keser. 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.

Karşı taraf = Directoryies.Contractors.NaytiPoRequisite ("INN", "0777121211"); CounterpartyObject = Counterparty.GetObject(); CounterpartyObject.Name = SokrLP (CounterpartyObject.Name); CounterpartyObject.Write();

bir aslan

Bir aslan(<Строка>, <ЧислоСимволов>) ... Bir 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 olan bir dize alın.

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

Doğru

Doğru (<Строка>, <ЧислоСимволов>) ... 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. Bir dize değişkeninin sonunun "yyyymmdd" biçiminde bir tarih içerdiğini varsayalım, tarih içeren bir dize alın ve onu türe dönüştürün tarih.

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

Çarşamba

Çarşamba (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) ... Parametre olarak geçirilen bir dizeden bir alt dize alır Hat, parametrede numarası belirtilen karakterden başlayarak Başlangıç ​​Numarası ve parametreye iletilen uzunluk Karakter sayısı. Satırdaki karakterlerin numaralandırılması 1'den başlar. Başlangıç ​​Numarası sıfırdan küçük veya sıfıra eşit bir değer belirtilirse, parametre 1 değerini alır. Sembol Sayısı belirtilmezse, satırın sonuna kadar olan karakterler seçilir.

Örnek 8. Diyelim ki dokuzuncu pozisyondan başlayan string değişken bölge kodunu içeriyor, onu alıp ayrı bir satıra yazmalısınız.

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

Arama

Bulmak (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) ... 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:

  • Hat... Kaynak dizesi;
  • alt dize... Aranacak alt dizi;
  • Arama yönü... Bir dizgede bir alt dizginin aranacağı yönü belirtir. Değerler alabilir:
    • Arama Yönü Baştan;
    • Arama Yönü.;
  • İlk pozisyon... Aramanın başladığı dizedeki konumu belirtir;
  • Girdilerin sayısı... Orijinal dizede istenen alt dizenin oluşum sayısını belirtir.

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

PositionNumber = StrNayti ("Merhaba dünya!", "Ve", DirectionSearch.End); Rapor (Pozisyon Numarası);

Bu kodu çalıştırmanın sonucu, "ve" sembolünün son oluşum numarasının görüntülenmesi olacaktır: 9.

VReg

Breg (<Строка>) ... 1s 8'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.

StringBreg = BReg ("merhaba dünya!"); Rapor (StringVreg);

Bu kodu çalıştırmanın sonucu "HELLO WORLD!" satırının görüntülenmesi olacaktır.

nreg

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

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

StringNreg = НReg ("HELLO DÜNYA!"); Rapor (StringVreg);

Bu kodun yürütülmesinin sonucu "merhaba dünya!" satırının çıktısı 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!" satırının ekranındaki çıktı olacaktır.

sembol

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

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

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

Bu kodu çalıştırmanın sonucu "★ Merhaba Dünya! ★" satırının görüntülenmesi olacaktır.

Sembol Kodu

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

Örnek 14. "Merhaba Dünya!" bölümündeki son karakterin kodunu bulun.

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

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

boş satır

boş satır(<Строка>) ... Bir dizenin yalnızca önemsiz karakterler içerip içermediğini, yani boş olup olmadığını kontrol eder.

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

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

Bu kodun yürütülmesinin sonucu, "Evet" kelimesinin (mantıksal değerin dize ifadesi) görüntülenmesi olacaktır. NS).

SayfaDeğiştir

ÖnDeğiştir (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) ... Orijinal 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 "Barış" kelimesini "Arkadaşlar" kelimesiyle değiştirin.

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

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

StrNumberStrings

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

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

Number = StrNumberStrings ("İlk satır" + Symbols.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 (<Строка>, <НомерСтроки>) ... 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" + Symbols.PS + "İkinci satır" + Symbols.PS + "Üçüncü satır"; LastRow = StrGetString (Metin, StrNumberLines (Metin)); Rapor (Son Satır);

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

Olay Sayısı

Olay Sayısı (<Строка>, <ПодстрокаПоиска>) ... 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. "C" harfinin "1s 8.3 ve 8.2'deki satırlar" satırında, durumuna bakılmaksızın kaç kez göründüğünü belirleyin.

Satır = "1s 8.3 ve 8.2'deki satırlar"; Olay Sayısı = Str Bulunma Sayısı (Vreg (Dize), "S"); Rapor (Olay Sayısı);

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

Sayfa Şununla Başlıyor

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

Örnek 20. Seçilen karşı tarafın INN'sinin 1 sayısı ile başlayıp başlamadığını belirleyin. Değişkeni girelim. karşı taraf müteahhitler.

TIN = Karşı taraf.INN; İle başlarBirimler = StrStarts ile (INN, "1"); Eğer BeginsUnits ise // Kodunuz EndIf;

Sayfa Şununla Bitiyor

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

Örnek 21. Seçilen karşı tarafın TIN'inin 2 rakamı ile bitip bitmediğini belirleyin. Değişkeni girelim. karşı taraf bir dizin öğesine bir bağlantı saklanır müteahhitler.

TIN = Karşı taraf.INN; İki İle Bitir = Str İle Bitir (INN, "2"); Double İle Biterse // Kodunuz EndIf;

PageSplit

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

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

Dizi = "1; 2; 3"; Dizi = StrSplit (Dize, ";"); Rd = 0 için Array.Quantity () - 1 Döngü Deneme Dizisi [Rd] = Sayı (KısaltLP (Dizi [Rd])); İstisna Dizisi [Сч] = 0; Denemelerin Sonu Döngü Sonu;

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

StrConnect

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

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

Rd = 0 için Array.Quantity () - 1 Döngü Dizisi [Rd] = Dize (Dizi [Rd]); Döngü Sonu; String = StrConnect (Dizi, ";");

Aptallar için SSS veya platform 8.

1C konusuna 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 bir boşluk karakteri değil, sözde "bölünemez boşluk" olduğunu anlamak önemlidir, bu nedenle, örneğin, böyle bir yapı:

StrReplace (VariableNumber, "", "");

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

StrReplace (VariableNumber, Symbols.NPP, ""); // 1. seçenek
Biçim (VariableNumber, "ChG ="); // 2. seçenek

V: Bir sorguda, sonuçtaki seçime yalnızca belirli belge türlerinin dahil edileceği şekilde bir koşul nasıl ayarlanır?
Ö: Bu, solunda belirtilen ifadenin değerinin sağda belirtilen tabloya bir başvuru olup olmadığını test etmenize olanak tanıyan REFERENCE sorgu dili operatörü kullanılarak yapılabilir. Bir örnek kullanmayı düşünelim, ServiceServices birikim kaydından yalnızca Tescil Memuru'nun Mal Hizmetleri Uygulama belgesi olduğu kayıtları seçin:

İstek = Yeni İstek ("
| SEÇ
| Hizmetlerin Uygulanması Kayıt Memuru,
| Hizmet uygulaması.Miktar
|
| Birikim Kaydı. Hizmetlerin Gerçekleştirilmesi AS Hizmetlerin Uygulanması
| NEREDE
| Kayıt Şirketi BAĞLANTISI Dokument.RealizatsiyaTovarovSlug ");

V: Aynı konfigürasyonlar arasında belirli belgeler / dizinler nasıl aktarılır?
Ö: Bu, ITS disklerinde sağlanan standart XMLLoadDataXML.epf işlemesi kullanılarak 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 istekte dize olmayan türde bir alana belirli bir dize nasıl eklenir, örneğin, SELECT Implementation of GoodsServices.Sum + "ovma".
Ö: Mümkün değil. Bir sorguda tür dönüşümü mümkün değildir. EXPRESS sorgu dili yapısı bazı kişilerin kafasını karıştırır, ancak yalnızca bileşik türün değerini bu değeri oluşturan türlerden birine dönüştürür ve hiçbir durumda türü dönüştürmez, bu nedenle bu durumda uygulanamaz.

V: Sınırsız uzunlukta dize türü olan bir alan için 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Ç
| GoodServices.Link'in Uygulanması
|
| Belge. MalHizmetlerin Gerçekleştirilmesi AS MalHizmetlerin Uygulanması
| NEREDE
| EXPRESS (GoodsServices'ın Uygulanması. SATIR (100) OLARAK Yorum yapın) = & Yorum ");

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

CatalogIB = НStr (InformationBaseConnectionString (), "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ı.SetMasterNode (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 (7.7 View() yöntemine benzer)?
Ö: Meta verileri kullanma. Örneğin:

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

İstek = Yeni İstek;
Metin = "";
Metadata.Docs Döngüsünden Her Belge İçin
Metin = Metin + "Belgeden Bağlantı Seç." + Document.Name + "COMBINE";
Döngü Sonu;
Request.Text = Leo (Metin, StrLength (Metin) -StrLength ("COMBINE"));
Seçim = Query.Run ().Seçin ();

V: Bir raporun/işlemenin yürütülmesi nasıl durdurulur?
Ö: UserInterruptUserHandle () operatörünü kullanarak, onu döngüler içinde kullanmanız önerilir. Kullanıcı Ctrl + Break tuş kombinasyonuna bastığında, yürütme kesintiye uğrar ve ilgili bir mesaj görüntülenir. Örneğin:

while Fetch.Next () Döngüsü
HandleUserInterrupt();

Döngü Sonu;

V: Form, ValueTree türü ve Tree özellik kümesine sahip bir TabularField'e sahiptir. Değer Ağacı neden görüntülenmiyor?
Ö: Ayrıca, sütunlardan biri için DisplayHierarchy özelliğinin ayarlanması gerekir.

V: Bilgi bankası işleminin dosya modunda zamanlanmış görevler nasıl kullanılır?
Ö:İstemci-sunucunun aksine, dosya modunda, programlanmış görevlerin otomatik olarak başlatılmasının uygulanmasından geliştirici sorumludur. Görevlerin otomatik olarak başlatılmasını uygulamak için, "süresi dolmuş" görevleri periyodik olarak kontrol eden ve bunları başlatan bir Bekleyen İşleyiciye ihtiyacınız vardır. Bunun için ayrı bir oturum kullanmanız şiddetle tavsiye edilir. Örnek:

İş Kontrolü Prosedürü ()
RunProcessingJobs();
Prosedürün Sonu
ConnectWaitingHandler ("İş Denetleyicisi", 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ırlayıcılı bir dize geçerken bir dizi oluşturur ve bir diziyi geçerken ondan sınırlayıcılı bir dize oluşturur.

İşlev StringArray (Değer Değeri, Ayırıcı)
TypeZnch (Değer) = Tür ("Dize") ise O zaman
MnStr = StrReplace (Değer, Ayırıcı, Semboller.PS);
Dizi = Yeni Dizi;
n = 1 için Satır Sayısına Göre Satır Sayısı (MnStr) Döngüsü
Array.Add (StrGetString (MnStr, n));
Döngü Sonu;
Dönüş Dizisi;
ElseIfTypeZnch (Değer) = Tür ("Dizi") Sonra
Dizi = "";
Değer Döngüsündeki Her Öğe İçin
Dize = Dize +? (Dize "", Ayırıcı, "") + Öğe;
Döngü Sonu;
Dönüş Dizisi;
Aksi halde
Geri Ödeme Belirtilmemiş;
EndIf;
EndFunction

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, Konfigüratörde "Yapılandırma > Destek > Destek Ayarları" menü öğesini seçin ve açılan pencerede "Değiştirme Seçeneğini Etkinleştir" butonuna tıklayın.

V: Bir işleme / yapılandırma şifresi 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çın ve "Metin> Şifre belirle" menü öğesini seçin. Konfigürasyonu, nesne modüllerinin kaynak metinleri olmadan da teslim etmek mümkündür ("Konfigürasyon> Teslimat konfigürasyonu> Teslimat ayarları" altında yapılandırılabilir). Ş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 neden FindByNumber (<Номер документа>)?
Ö: Unutulmamalıdır ki, yapılandırıcıda belirli bir belge türü için periyodik bir numaralandırma belirtilirse, belge numarasına ek olarak, ikinci parametre olarak aralığın tarihinin belirtilmesi zorunludur. 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, gerekirse, mevcut hata ayıklama öğelerinde hata ayıklama için halihazırda çalışan bir uygulamaya bağlanın (Yapılandırıcı> Hata Ayıklama> Bağlantı) boş. Sebebi ne?
Ö: 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ı üzerinde nasıl yineleme yapılır (örneğin, ReferenceList veya DocumentList)?
Ö: Bu, Rapor Oluşturucu kullanılarak yapılabilir, örneğin:

Oluşturucu = Yeni Rapor Oluşturucu;
Builder.DataSource = NewDataSourceDescription (DocumentList);
Seçim = Builder.Result.Select ();
while Fetch.Next () Döngüsü
Rapor (Örnek.Bağlantı);
Döngü Sonu;

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

V: Meta veri nesnelerinin özellik değerlerini nasıl kontrol edebilirim? Örneğin, dizin hiyerarşisinin türü veya kayıt kayıt 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. Dizinin görünümü Hiyerarşi
Metadata.References [DirectoryName] .HierarchyType = Metadata.ObjectProperties.HierarchyView.GroupsAndElements Hiyerarşisi ise ...
// Örnek 2.RegisterWriteMode
Metadata.RegisterRecords [RegistryName] .RegisterRecordMode = Metadata.ObjectProperties.RegisterWriterMode.Registrator Gönderimi ise ...
// Örnek 3. Belge numarasının sıklığı
Metadata.Documents [DocumentName] .Number Frequency = Metadata.ObjectProperties.DocumentNumber Frequency.Non-Periodic ise ...

V: Bir değer ağacında üç durumlu bir onay kutusunu nasıl uygularım?
Ö: Sorun ifadesini daha ayrıntılı olarak ele alalım. Formun, veri kaynağının bir değerler ağacı olduğu bir tablo alanı vardır. Sütunlardan biri "Onay Kutusu" kontrolünü içerir. "Etkin", "Devre Dışı" 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ı onay kutusu 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şmelidir.
İlk olarak, değer ağacına onay kutusu sütunumuzu ekleyelim:

Tree.Columns.Add ("İşaret", Türlerin Yeni Açıklaması ("Sayı"));
ElementsForm.Tree.CreateColumns();
Ağaç Sütunları = Form Elements.Tree.Columns;
ColumnsTree.Remark.DataFlag = "Açıklama";
ColumnsTree.Label.SetUpdateElement (Tür ("Onay Kutusu"));
ColumnsTree.Note.EditMode = EditModeColumns.Means
enno;
ColumnsTree.Check.ThreeStatesCheckbox = Doğru;

İkincisi, bir onay kutusunu değiştirirken, alt satırlarda karşılık gelen değerleri ayarlamanız ve "ana satırdaki" onay kutusunun değerini kontrol etmeniz gerekir:

Prosedür TreeOnChangeCheck (Öğe, Sütun)
CurrentLine = Element.CurrentLine;
CurrentLine.Remark = 2 ise
CurrentString.Label = 0;
EndIf;
CheckboxSetting (CurrentLine, CurrentLine.Check);
CurrentLine.ParentUndefined Döngüsü iken
CurrentLine.Parent.Level =? (SetForAll (CurrentLine), CurrentLine.Level, 2);
CurrentLine = CurrentLine.Parent;
Döngü Sonu;
Prosedürün Sonu

İşte Onay Kutuları () prosedürü, alt satırlardaki bayrakları yinelemeli olarak ayarlar:

Onay Kutusu Prosedürü (CurrentString, Value)
Mevcut Satırdan Her Satır İçin Satır Döngüsü
Sayfa Açıklaması = Değer;
Onay Kutularının Ayarlanması (Sayfa, Sayfa İşareti);
Döngü Sonu;
Prosedürün Sonu

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

Tümü İçin Set İşlevi (Dize)
String.Parent.Rows Döngüsünden Her Satır İçin
Sayfa Açıklama Satırı Açıklama O zaman
Yanlış Döndür;
EndIf;
Döngü Sonu;
Doğru Döndür;
EndFunction

V: Kendi özelliklerine göre bir liste şeklinde sıralama nasıl uygulanır?
Ö: Nitelik ilkel türdeyse, "İndeks" veya "Eklemeli Dizin" değerini ayarlamak yeterlidir. "İndeks" özniteliğinin özelliği için. sipariş vererek "(ValuesStorage türünün öznitelikleri için kullanılamaz). Öznitelik bir referans türündeyse, sıralanmasını açıkça etkinleştirmek gerekir. Örneğin:

ElementUP = ElementsForms.DirectoryList.SettingPorder.Find ("Attribute1");
UP Öğesi Tanımsız ise
ElementUP.Availability = Doğru;
EndIf;

"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ına daha yakından bakacağız.

Hat

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

Dize (Yanlış) // "Hayır" döndürür
Dize (12345) // "12 345" döndürür
Dize (CurrentDate ()) // 21.07.2017 11:55:36 ″

Yalnızca ilkel türleri değil, diğerlerini de, örneğin referans kitaplarının öğelerini, belgeleri bir dizeye dönüştürmek mümkündür.

SocrLP, SocrL, SocrP

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

AbbrLP ("Her iki taraftaki boşluklar kaldırılacak") // "Her iki taraftaki boşluklar kaldırılacak"
Kısaltılmış ("Her iki taraftaki boşluklar kaldırılacak") // "Soldaki boşluklar kaldırılacak"
Kısaltma ("Her iki taraftaki boşluklar kaldırılacak") // "Sağdaki boşluklar kaldırılacak"

Aslan, Sağ, Çarşamba

Bu işlevler, bir dizenin bir kısmını kırpmanıza izin verir. "Aslan ()" işlevi, dizenin belirtilen uzunluktaki sol tarafından bir kısmını döndürür. "Sağ ()" işlevi aynıdır, ancak kırpma sağda yapılır. "Avg ()" işlevi, dizenin seçileceği karakterin sayısını ve uzunluğunu belirtmenize olanak tanır.

Aslan ("Dize değişkeni", 4) // "Stro" döndürür
Sağ ("Dize değişkeni", 7) // "değişken" döndürür
Çar ("Dize değişkeni", 2, 5) // "troco" döndürür

Str Uzunluğu

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

StrLength ("Kelime") // yürütme sonucu 5 numara olacak

Bulmak

İşlev, herhangi 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 gösteren bir sayı olacaktır. Eşleşme bulunamazsa, sıfır döndürülür.

Aramaların büyük/küçük harfe duyarlı olduğunu lütfen unutmayın. Orijinal dize, arama alt dizesinin birden fazla örneğini içeriyorsa, işlev ilk oluşumun başlangıcını döndürür.

Bul ("bir, iki, bir, iki, üç", "iki") // işlev 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 yok sayılır.

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

VReg, NReg, Treg

Bu işlevler, dize değişkenlerini karşılaştırmak ve dönüştürmek için çok kullanışlıdır. Breg () orijinal dizgiyi büyük harf, HPreg () küçük harf olarak döndürür ve TPreg () onu biçimlendirir, böylece her bir kelimenin ilk karakteri büyük harf ve sonraki tüm karakterler küçük harf olur.

Vreg ("GENEL MÜDÜR") // dönüş değeri - "GENEL MÜDÜR"
НReg ("GENEL MÜDÜR") // dönüş değeri - "genel müdür"
TREG ("GENEL MÜDÜR") // dönüş değeri - "Genel Müdür"

SayfaDeğiştir

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ı"

StrNumberStrings

İşlev, bir metin değişkeninde satır başlarıyla ayrılan satır sayısını belirlemenizi sağlar.

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

ind = 1 için StrNumberStrings ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") Döngüsü
<тело цикла>
Döngü Sonu;

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) // "String2" döndürecek

Olay Sayısı

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

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

Sembol ve Sembol Kodu

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

Birleştirme dizeleri

Birden çok diziyi birleştirmek (birleştirme yapmak için) için toplama operatörünü kullanmak yeterlidir.

"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. "Kısaltma ()" gibi işlevler de değişkenleri bir dizeye dönüştürür, ancak hemen önemsiz karakterlerin kesilmesiyle.

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

Lütfen bir sayıyı bir dizgeye dönüştürürken, programın otomatik olarak binlik bir boşluk eklediğini unutmayın. Bundan kaçınmak için aşağıdaki yapıları kullanabilirsiniz:

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

Dize (Biçim (1000, "CHG =")) // "1000" döndürür

Bir dizedeki alıntılar

Oldukça sık, bir dize değişkeninde tırnak işaretleri belirtme 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 tırnak işareti koymanız yeterlidir.

Başlık = Dize ("Horns and Hooves LLC" - bu biziz! ") // " Horns and Hooves LLC - bu biziz!"

Birden çok satır, satır sonu

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

MultilineText = "İlk satır" + Symbols.PS + "İkinci satır"

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

Sağdaki veya soldaki boşlukları kaldırmak için "Kısaltma ()" ("Kısaltma ()" ve "Kısaltma ()") işlevini kullanabilirsiniz:

StringNoSpaces = KısaltılmışLP ("Birçok harf") // işlev "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:

StringNoSpaces = StrReplace (String (99999), Characters.NPP, "") // "99999" 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:

StringNoSpaces = StrReplace ("hoş geldiniz", "", "") // "merhaba" döndürür

Dizeleri birbirleriyle karşılaştırma

Terimler normal eşittir işaretiyle karşılaştırılabilir. 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

Genellikle 1C 8.2 ve 8.3'ten veri yüklerken ve boşaltırken, verilerin normal işlenmesine müdahale eden sayılarda boşluklar vardır. Bu sorunun çözümü çok basittir.

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

Boşluklar iki tip olabilir:

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

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

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

Sayı biçimi işlevini kullanarak 1C'deki bu tür boşlukları kaldırmak çok kolaydır:

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

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

Biçim dizesindeki gruplamayı Boş olarak ayarladık ("0" da yazabilirsiniz).

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

StringPresentation = StrReplace (String (StringPresentation), Chars.NPP, ""); // StringView değişkeni "10 000" idi, şimdi "10000"

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

düzenli boşluklar

Bir satırdaki olağan boşluğu kaldırmak kolaydır. Aşağıdaki işlevi yürütmek yeterlidir:

StringPresentation = StrReplace (String (StringPresentation), "", ""); // "10 000", "10000" oldu

Bir ö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).


Tepe