1c değerleri listesinde bir öğe bulun. Evrensel Koleksiyon Yapısı

Bu makale ne hakkında?

Bu makale “1C geliştirmede ilk adımlar” başlıklı makale serisinin devamı niteliğindedir. Evrensel koleksiyonlarla çalışmanın ilkelerini kapsar. Makaleyi okuduktan sonra şunları öğreneceksiniz:

  • Evrensel koleksiyonlar nelerdir ve ne zaman ve hangi durumlarda kullanılmalıdır?
  • Tüm evrensel koleksiyonların ortak noktası nedir? Hepsiyle çalışmak için hangi teknikleri kullanabilirsiniz?
  • Dizi nedir, nasıl ve ne zaman kullanılır? Ne gibi yöntemleri var?
  • Neden bir yapı kullanmalısınız? Bir diziden farkı nedir?
  • Değerler listesini ne zaman kullanmalısınız? Formda nasıl görüntülenir?
  • Uyumluluk – nedir ve ne zaman kullanılmalı? Yapısal açıdan avantajları nelerdir?
  • Değer tablosu ne için kullanılır? Yapısını nasıl tarif edebiliriz? Satır nasıl eklenir/kaldırılır? Formda nasıl görüntülenir?
  • Değerler ağacı - ne için kullanılır? Formu nasıl doldurup görüntüleyebilirim? Bununla nasıl çalışılır?

Uygulanabilirlik

Makale, mevcut sürümün 1C:Enterprise 8.3 platformunu tartışıyor.

1C'de evrensel koleksiyonlarla nasıl çalışılır

Değerler koleksiyonu, genellikle herhangi bir sayıda öğe içerebilen bir kapsayıcıdır. Ancak genellikle veri türü üzerinde katı kısıtlamalar yoktur.

Genel bir koleksiyona değerler ekleyebilirsiniz. Koleksiyondaki tüm değerler geçilebilir. Bu koleksiyonlar esas olarak algoritmalarda bir tür işlem için kullanılır. Onlar. Bunlar algoritma çalışırken var olan bazı dinamik yapılardır.

Koleksiyonların bir veritabanında saklanmadığını anlamak önemlidir (neredeyse her tür veriyi depolayabilen Değer Deposu veri türünden bahsetmiyoruz).

Var olmak Farklı türde evrensel koleksiyonlar: Dizi, Yapı, Eşleştirme, Sabit Dizi, Değer Tablosu, Tablo parçası vesaire. Ancak tüm koleksiyonların benzer davranışları vardır.

Bir fonksiyonun çalışması sonucunda bir koleksiyon oluşturulabilir (işlev, evrensel bir koleksiyonu değer olarak döndürür).

Yapıcıyı çağırıp sınıfın bir örneğini oluşturarak yeni bir koleksiyonu manuel olarak edinebilirsiniz.

Örneğin: OurArray = Yeni Dizi;

Birçok genel koleksiyonun yapıcıları parametrelendirilmiştir.

Yani, yapıcıda İlgili boyutlarda üye sayısını belirtebilirsiniz. Onlar. hemen çok boyutlu ilan edebilirsiniz .

Yapıcının ilgili açıklaması sözdizimi asistanındadır.

Böylece yapıcı parametrelerini kullanarak istediğiniz davranışı hemen ayarlayabilirsiniz. bu nesnenin.

Ancak parametreler isteğe bağlıdır; geliştirici bunları ayarlayamaz ve Dizinin davranışını uygun gördüğü şekilde tanımlayamaz.

Hemen hemen her evrensel koleksiyon, bir kurucu kullanılarak oluşturulabilir (istisna, yapılandırma nesneleri görevi gören tablo parçalarıdır).

Evrensel koleksiyonlar için indeks, sayı gibi ortak kavramlar vardır. Koleksiyonun her öğesinin bir dizini vardır. Bu durumda endeks sıfırdan başlar.

Bir öğeye erişmek için Bizim Dizimiz, dizin erişimini kullanabilirsiniz; bunun için dizin köşeli parantez içinde gösterilir.

Örneğin, Bizim Dizimiz. Bu durumda sistemin Dizi öğesini 3 diziniyle döndürdüğünü ve bunun sırasıyla Dizinin dördüncü öğesi olduğunu lütfen unutmayın.

Bazı koleksiyonlar için satır numarası kavramı da vardır. Satır numarası bir ile başlar. Örneğin tablo kısmı için satır numarası gibi bir özellik var. Satır numarasını biliyorsak ve ona indeks ile erişmek istiyorsak, indeks olarak satır numarasından bir küçük değer kullanmamız gerektiğini unutmamak önemlidir.

Satır numarası kavramı tüm koleksiyonlarda mevcut değildir, ancak esas olarak kullanıcı arayüzünde görüntülenebilen koleksiyonlarda mevcuttur.

Tüm koleksiyonlar, koleksiyon öğesi geçişini kullanır. Baypas iki şekilde mümkündür: döngüsü için Ve döngü Her biri için.

Çoğu genel koleksiyon için geçerli olan yöntemler Say, Dizinle, Ekle, Ekle, Sil ve Bul'dur.

Count, bir koleksiyondaki öğelerin sayısını döndüren bir işlevdir. Bir döngüden önce kullanılabilir İçin, şekilde gösterildiği gibi.

Index yöntemi tüm koleksiyonlar için mevcut değildir, yalnızca öğelerine başvurulabilen koleksiyonlar için mevcuttur. Bir örnek: Değerler Tablosu.

Değerler Tablosu– bu belirli bir satır koleksiyonudur; satırlar farklı değer türlerine sahip farklı sütunlar içerebilir.

Her satır bağımsız bir varlığı temsil eder. Bunun için link alabilirsiniz; bu satır üzerinden bu satırdaki sütunların değerlerine ulaşabilirsiniz.

Index yöntemi, belirli bir satıra (yani satırın tablodaki geçerli konumuna) hangi dizinin karşılık geldiğini belirlemenize olanak tanır. Endeks değerleri sıfırdan başlar.

Hemen hemen her evrensel koleksiyonun belirli bir koleksiyona yeni değerler ekleme yöntemleri vardır. Şekilde bir Dizinin 0'dan 10'a kadar değerlerle nasıl doldurulacağı iki şekilde gösterilmektedir.

Diziye bir öğe eklemek için yöntemi kullanabiliriz Eklemek eklenecek değeri parantez içinde belirtin. Bu durumda değer listenin sonuna eklenecektir, yani. Son konum nedeniyle dizi sürekli artacaktır.

Bir koleksiyona değer eklemenizi sağlayan bir diğer yöntem ise Sokmak. Yöntemden farklı Eklemek eklenen öğenin nereye ekleneceğini belirtebilirsiniz.

Sözdizimi: Sokmak (,)

İlk parametre, yeni değerin ekleneceği dizini belirtir. Onlar. örneğin her değerin listenin başına eklenmesi gerektiğini belirtebiliriz (yukarıdaki şekilde ikinci yöntem).

Bir koleksiyondan öğeleri kaldırmak için yöntemi kullanın Silmek. Sil metodu indeks ile hangi elemanı sileceğimizi belirtir.

Sözdizimi: Silmek()
Kullanım örneği: OurArray.Delete(5);

Dizelerin bağımsız bir varlığı temsil ettiği koleksiyonlar için (örneğin, Değer Tabloları), daha sonra bu satırı silmek için indeks alma yöntemini de kullanabiliriz.

Hemen hemen tüm koleksiyonlarda değer aramak için bir yöntem bulunur. Bulmak. Bulmak istediğimiz değer metoda aktarılır. Bazı koleksiyonlar bazı kısıtlamalar belirlemenize olanak tanır.

Örneğin, Değer Tablosu Aramak istediğiniz satır ve sütunları belirleyebilirsiniz.

Değer bulunursa bu yöntem dizini veya belirtilen dizeyi döndürür. Değer bulunamazsa türünde bir değer döndürülür Tanımsız. Bir Diziyle ilgili olarak şunu döndürür: Dizin veya değer Tanımsız.

Kullanım örneği: OurVariable = OurArray.Find(8);

Evrensel koleksiyonlar çok hızlı bir şekilde temizlenebilir; kesinlikle tüm öğeleri kaldırın. Bu amaçla yöntem kullanılır Temizlemek(), Dizi öğelerini, satırları kaldıran Değer Tabloları veya diğer koleksiyonlardaki veriler.

Dizi için ek yöntemler

Yöntem BBsipariş() eleman sayısını bir eksi olarak döndürür. Onlar. eğer bir döngü kullanırsak İçin, o zaman Miktar yöntemi yerine hemen yöntemi kullanabiliriz Sınır().

Özellikle QuantityInArray değişkeni farklı şekilde tanımlanabilir:

QuantityInArray = OurArray.InBorder();
O halde döngünün kendisini tanımlarken bu değişkenden çıkarılmamalıdır.

Set yöntemi, bir Array öğesine dizine göre değer atamanıza olanak tanır.

Sözdizimi: Düzenlemek(,)

Örnek: OurArray.Set(2,8);

Alternatif seçenek: Dizimiz = 8;

Yöntemi bir Dizi için kullanabilirsiniz Elde etmek, köşeli parantez kullanmaya başvurmadan bir dizindeki değeri okumak için.

Sözdizimi: Elde etmek()

Örnek: OurVariable = OurArray.Get(2);

Alternatif seçenek: Değişkenimiz = Dizimiz;

Evrensel Koleksiyon Yapısı

Dizi gibi bir Yapı da sınırsız sayıda öğeye sahip olabilir, ancak öğenin içeriği Diziden farklıdır.

Yapı, her değeri bir çiftten oluşan bir koleksiyondur. Çiftin ilk elemanına denir Anahtar. Çiftin ikinci elemanı Anlam.

Anahtar bir değeri tanımlayan kesinlikle dize veri türüdür. Örneğin, Anahtara"Kod" 113 değerine karşılık gelebilir; Anahtara“İsim”, “Vasya” anlamına gelir. Değerin kendisi veri türü kısıtlamasına tabi değildir.

Belirli bir parametre listesi oluşturmak istiyorsak yapıyı kullanmak çok uygundur. Eğer bu Yapı isminde Yapımız, o zaman iki değerine şu şekilde değineceğiz: OurStructure.Code ve OurStructure.Name.

Bu tür bir erişim, tüm parametreleri bir Dizide tanımlayıp bunlara indeksle erişmemizden çok daha uygundur.

Yapı, program kodunu okunabilir (anlaşılabilir) hale getirir. Yapı, Array'den çok daha sık kullanılır.

Genellikle tüm algoritmalarda oldukça fazla sayıda bulunan belirli parametreleri tanımlamak için kullanılır.

Ayrıca, prosedür ve fonksiyon çok sayıda iletilen parametre içeriyorsa Yapı kullanılır.

O zaman tüm parametreleri Yapıya yazıp aktarmak çok daha uygundur. Onlar. prosedür ve fonksiyonların parametreleri “paketlenmiştir”.

Ayrı olarak şunu da belirtmek gerekir ki Anahtar Yapıda kesinlikle herhangi bir çizgi görünemez. Belirli kısıtlamalar geçerlidir.

Anahtar tanımlayıcı görevi görmelidir. Bu şu anlama gelir: Klyuche boşluk olmamalıdır ve sayıyla başlayamaz.

Kabul edilebilir başlangıç Anahtar bir harf veya alt çizgi ile. Böylece, Anahtar tanımlayıcı oluşturma gerekliliklerini karşılamalıdır.

Bir Yapının Diziden başka nasıl farklılaştığına dikkat edelim. Yapıda bir yöntem var Sokmak Array'e ekleme için iki yöntem vardır: Sokmak(belirli bir konuma) ve Eklemek(listenin sonuna kadar). Bir Dizide tüm öğeler sıralanır.

Yapı bir tür düzensiz kümedir. Bu nedenle bir Yapı için yalnızca bir ekleme yöntemi vardır.

Değer belirli bir konuma değil, belirtilen kümeye eklenir. Bir Yapıya diğer genel koleksiyonlar gibi indeks yoluyla erişilemez.

Yapı elemanlarına yalnızca Anahtar adı ile erişilir. Bununla birlikte, For Every döngüsü Yapı için de çalışır, ancak Yapı öğelerinin sırasına güvenmemelisiniz.

Bir yapı, diğer genel koleksiyonlarla aynı şekilde, Yapı veri türünü belirterek Yeni oluşturucu kullanılarak oluşturulur.

Dizi gibi, Yapı yapıcısının da parametreleri olabilir. Onlar. Bir Yapının içeriğini bir kurucu kullanarak tanımlamak mümkündür.

Tüm boyutlar için basitçe öğe sayısını belirtebileceğiniz Dizinin aksine, Yapıda içeriğin kendisini belirleyebilirsiniz.

Örneğin: Yapımız = Yeni Yapı (“Kod, İsim”, 133, “Vasya”);

Virgülle ayrılmış olarak, önce Anahtarların adları listelenir ve ardından buna göre aynı sırayla parametrelerin değerleri listelenir.

Yapıya yeni bir değer eklemenin bir yöntemi var Sokmak yeni bir çift (Anahtar ve Değer) ekler.

Örneğin: OurStructure.Insert(“AileÜyeleri”,3);

Yapı, oldukça sık kullanılan başka bir yöntemle karakterize edilir. Bu yöntem Mülk.

Bu yöntemi kullanarak bu Yapıda Key'in şöyle bir isme sahip bir elemanın olup olmadığını anlayabilirsiniz.

Böyle bir öğe mevcutsa, sistem Doğru değerini, aksi halde Yanlış değerini döndürür.

Örneğin, ifade OurStructure.Property (“Aile Üyeleri”) True değerine eşit olacaktır. Bu yöntem Yapıyı analiz ederken oldukça sık kullanılır.

Herhangi bir evrensel koleksiyonda olduğu gibi, bir Yapının özelliklerine indeks yoluyla erişmek mümkündür. Ancak Yapının dizini bir dize değeridir.

Örneğin: Rapor(Yapımız[“AileÜyeleri”]);

Ancak, bir Yapının sırasız bir nesneler kümesi olduğunu unutmamalıyız; bu nedenle 0, 1, 2 indeksiyle erişim kabul edilemez.

Genel koleksiyon Değerlerin listesi

Değerleri Listele herhangi bir veri türündeki öğelerin doğrusal bir listesidir.

Her öğe çeşitli değerlerden oluşur. Şematik olarak bir değerler listesi dört sütunlu bir liste olarak gösterilebilir.

İlk sütun - İşaret. Boolean veri türüne sahiptir ve kullanıcının kutuları işaretlemesine veya işaretlerini kaldırmasına olanak tanır.

Diğer sütun, bu öğeyi bir şekilde görsel olarak temsil edebilecek bir resimdir; bu dizeyi bir resimle eşleştirin.

Üçüncü sütun saklanan değerin kendisidir, yani. bu herhangi bir veri türüdür ve farklı satırlarda farklı olabilir.

Dördüncü sütun sunumdur, yani. bu, belirli bir değerin bir tür dize açıklamasıdır. Bu öğeyi görüntülediğinde görünüm kullanıcıya gösterilecektir. Bu durumda temsil belirtilmezse sistem bu konumda yer alan eleman için temsiller elde etmeye çalışacaktır.

Değerleri Listele– bu, kullanıcının görsel olarak üzerinde çalışabileceği nesnedir. Onlar. Değerleri Listele formda görüntülenebilir.

Kullanıcı bununla bazı eylemleri gerçekleştirebilir. Ayrıca, Değerleri Listele yöntemler kullanılarak bağımsız olarak çıkarım yapılabilir; Kullanıcının bazı satırları seçmesi veya bazı kutuları işaretlemesi için ekranda algoritmanın bazı dallarında (sunucu kodu hariç) gösterilir.

Bulacağız Değerleri Listele sitax asistanında. Oluşturucu Değerleri Listele parametrelendirilmemiş (herhangi bir varsayılan değer ayarlayamazsınız).

Aşağıdaki gibi yöntemler vardır:

  • Sokmak(,) ;
  • Eklemek(,);
  • Miktar();
  • Dizin().

Ayrıca özel yöntemler de vardır; Değerleri Kaldır(). Bu, değerler listesinin kopyalanacağı bir Dizi oluşturur. Örneğin:

Öğe Dizisi = PriceTypes.OutloadValues() Listesi;

Ayrıca bunun tersi bir yöntem de vardır:
ListPriceTypes.LoadValues(ArrayItems);

Arama yöntemleri vardır:
FindByValue(); FindByIdentifier().

Bir kopyalama yöntemi var:
ListCopy = PriceTypeList.Copy();
Bu method kopyada bir tür değişiklik yapılması amaçlanmaktadır.

Yöntemler var:
SortByValue();
SortByView().

Yöntemler Öğeyi seçin(,) Ve MarkItems() kullanıcı pencereyi kapatana kadar algoritmanın yürütülmesini durduran kalıcı bir iletişim kutusu çağırın.

Bu yöntemleri konfigürasyon özelliklerinde kullanmak için Modaliteyi kullanma modu olarak ayarlanmalıdır Kullanmak.

Yönetilen Uygulama modülünden çağrılan örnek kod:

Bu kodu kullanıcı modunda görüntüleyin (kalıcı iletişim kutusu).

Altında Değerleri Listele form nitelikleri için kullanılabilir bir veri türü olarak kullanılır. İşleme formu için yeni bir özellik oluşturuyoruz ve türünü tanımlıyoruz Değerleri Listele ve formda görüntüleyin.

Yeni bir ekip oluşturmak Hediyeleri Doldurun, onu forma aktarın ve bunun için bir eylem işleyicisi tanımlayın.

Kullanıcı modunda, işleme formundaki Hediyeleri Doldur düğmesine tıkladığınızda tamamlanmış bir liste görünecektir.

İstenirse liste düzenlenebilir: bazı öğeler eklenebilir, bazıları çıkarılabilir.

Çok Yönlü Koleksiyon Uyumluluğu

Bu koleksiyon şuna çok benziyor: Yapı. Tıpkı Yapı gibi, Eşlemeler de bir anahtar ve değerin kendisinden oluşan değer kümeleridir.

Temel fark, değer için olduğu gibi herhangi bir veri türünün de Anahtar olarak belirtilebilmesidir. Bu özellik nedeniyle eşleşme değerine indeks bazında ulaşılması gerekmektedir; indeks değeri olarak anahtar değeri belirtilmektedir.

Anahtar, dize dışında bir veri türü olabilir. Uyumluluk ile çalışmanın özellikleri ve yöntemleri Yapı ile hemen hemen aynıdır.

Uyumluluk Oluşturucusu, Yapıdan farklı olarak parametreleri belirleme olanağı içermez.

Kullanım örneği:

Yazışma, herhangi iki yapıyı bağlamanız gerektiğinde kullanıma uygundur. Örneğin tablo bölümündeki her satırın değerler tablosundaki bir satırla eşleşmesi gerekir.
Bu durumda tablo bölümü satırı Eşleştirme anahtarı olarak kullanılır ve karşılık gelen değer gösterilir.

Yönteme ek olarak bir Match koleksiyonuna öğeler eklerken Sokmak(,) Değer eklemenin başka bir yolu da normal atama operatörünü kullanmaktır.

Örneğin: BizimEşleşmemiz = YeniEşleşme;
Eşleşme = 999;

Onlar. koleksiyonda bir öğe yoksa atama operatörü kullanılarak eklenecek, varsa güncellenecektir.

Bu, Yapının tersidir.

Evrensel Koleksiyon Değerler Tablosu

Değerler Tablosu isteğe bağlı sayıda satır ve isteğe bağlı sayıda sütun içeren bir tablodur. Kesişme herhangi bir veri tipinin değerlerini saklayabilir. Gerekirse sütunlar yazılabilir, yani hangi sütunda ne tür verilerin saklandığını belirleyebilirsiniz.

Sütunları yazmadan bırakabilirsiniz, ardından değerler bir sütunda farklı satırlarda saklanabilir farklı şekiller.

Farklılıklar Değer Tabloları iki boyutlu bir Diziden:

  • bu, kullanıcının üzerinde çalışabileceği bir nesnedir (değer tablosu ekranda görüntülenebilir, kullanıcı onu doldurabilir ve girilen veriler daha sonra okunabilir);
  • hızlı arama için dizinler oluşturmak;
  • klonlama, bir sütunun tamamını belirli bir değerle doldurma, tüm sütunları bir diziye yükleme.

Değerler Tablosu bir tür bilgi depolama arabelleği olarak kullanılır. Değerler Tablosu Birçok sistem yöntemi tarafından parametre olarak döndürülür ve kabul edilir. Değer Tablosuna karşı bir sorgu oluşturmak mümkündür.

Bu yüzden, Değerler Tablosu bir dizi satır ve bir dizi sütundan oluşur. Hem satırlar hem de sütunlar koleksiyonlardır.

Onlar. koleksiyonun içinde Değerler Tablosu iki koleksiyon daha var. Sözdizimi asistanına dönüp bulalım Değerler Tablosu.

Desteklenen veri türleri: kendisi Değerler Tablosu, dizelerden oluşur. Her satır bir veri türüyle temsil edilir RowTableValues kendine has özellikleri ve yöntemleri vardır. Mevcut Tablo Sütun Değerlerinin Toplanması da belirli özelliklere sahiptir.

Önemli nokta! Oluşturan prosedür Değerler Tablosu, &OnServer'ı derlemelidir.

İle çalışmaya başlamadan önce Değerler Tablosu, hangi sütunları içereceğini belirlemeniz (yani bunları oluşturmanız) gerekir. Sözdizimi:

Eklemek(,)
(isteğe bağlı)
Tür: Dize.
(isteğe bağlı)
Tür: AçıklamaTürler
(isteğe bağlı)
Tür: Dize.
(isteğe bağlı)
Numara giriniz.

Örneğin:

Bu prosedürü çağırmak için şu komutu kullanacağız.

Açıklamada Değer Tabloları Koleksiyonun unsurları tam olarak SatırlarTabloDeğerleri.

Yalnızca özelliklerden (Ad, Tür, Başlık, Genişlik) oluşan sütunların aksine, RowTableValues Hem özellikler (sütun adına göre erişim) hem de yöntemler (bir değer alıp ayarlayabilir, sahiplerle çalışabilirsiniz) vardır.

Tabloya yeni bir satır eklemek için yöntemi kullanmanız gerekir. Eklemek(), veya Sokmak(). İkinci durumda gerekli satırın hangi konuma yerleştirilmesi gerektiğini belirtmelisiniz.

Bir sütuna değer atamak için, sütun adına veya dizinine erişmek için bir nokta kullanırız (köşeli parantez kullanarak).

Doldurmak için Değer Tabloları Aşağıdaki yöntemler kullanılabilir:

Temizlemek()– tüm satırları kaldırmak için Değer Tabloları.

Doldurma Değerleri(,)– tüm sütunları veya seçilen sütunları tek bir değerle doldurmanıza olanak tanır.
LoadColumn(,)– diziden bir sütun yükler.
Sütunu Kaldır()– sütunu bir diziye boşaltır.

Son iki yöntem, bir sütunu bir değer tablosundan diğerine aktarmanız gerektiğinde kullanışlıdır.

Kopyala(,)– mevcut bir tabloyu temel alarak yeni bir tablo oluşturmanıza olanak tanır Değerler Tablosu ve tüm satırlar ve sütunlar değil, yalnızca bazıları. Geri dönüş değeri - Değerler Tablosu.

Yapıyı kopyalayabilirsiniz Değer Tabloları. Buna karşılık gelen bir yöntem var CopyColumns(). Boş bir tane alacağız Değerler Tablosu gerekli yapıya sahip.

İÇİNDE Değer Tablosu bir yöntem var Toplam(). Sayısal değerleri toplamak istediğiniz sütunu belirtebilirsiniz. Tabloda daha önce gösterilen kodla ilgili olarak değeri hesaplayabilirsiniz: TK.Toplam (“Tutar”).

İÇİNDE Değer Tablosu yöntemini kullanarak sayısal değerleri belirli sütunların aynı değerlerine göre gruplandırmak (daraltmak) mümkündür Yıkılmak(,).

Tabloda daha önce gösterilen kodla ilgili olarak değeri hesaplayabilirsiniz: TK.Collapse(“Haftanın Günü”, “Tutar”).

Değerler Tablosuüzerinde gösterilebilir kullanıcı ekranı böylece onunla herhangi bir işlem gerçekleştirebilirsiniz. Ama farklı olarak Değerleri Listele Ekrandaki bir tabloyu program kodundan çağıramazsınız.

Göstermek Değerler Tablosu ekranda bir form özelliği oluşturun ve ona bir veri türü atayın Değerler Tablosu.

Bundan sonra ortaya çıkan tablo formda görüntülenmelidir.

Daha önce derlenmiş algoritmanın sonundaki form modülüne (Değer Tablosu Oluşturma Prosedüründe) şunu eklemelisiniz:
ValueInFormData(TK, Tablo);

Evrensel koleksiyon Değerler ağacı

çok benzeyen evrensel bir koleksiyon Değerler Tablosu. Tablodan farkı, ağacın satırlarının birbirine bağlı olabilmesidir. bir tür hiyerarşi oluşturulabilir.

Bu aynı zamanda ekrana da yansıyabilir. Bir değer ağacı açıkça bir dizi satır ve bir sütun koleksiyonundan oluşur. Ağaçta iki özellik vardır: Satırlar ve Sütunlar.

Satırlar birbirine bağlı olabileceğinden, her satırın bir Ana ve onun alt satırları olabilir.

İlgili Tree komutunu ve işleme prosedürünü oluşturalım.

Haydi yaratalım burada bir ana satır ve iki alt satır bulunur.

Form niteliklerini oluşturalım DerZn(veri türü – Değer Ağacı).

Bu özellik için Yıl ve Ay sütunlarını oluşturacağız.

İlgili öğeyi taşı DerZn formda.

Sonunda Prosedürler TreeOnServer() ekleyelim:

ValueInFormData(TreeZn, DerZn);

Kullanıcı modunda ne olduğunu kontrol edelim.

Bir düğme kullanma Eklemek yeni satırlar ekleyebilirsiniz. Ayrıca bir hiyerarşi de oluşturabilirler.

Değer ağacının tüm öğelerini geçmek için özyinelemeyi kullanmamız gerekecek, yani. kendisinden bir prosedür çağırmak. Örneğin, bir değer ağacının işlenmesi şu şekilde görünebilir:

Bu, evrensel koleksiyonlarla ilk tanışmamızı tamamlıyor.

Bir sonraki makalede, bir geliştiricinin program kodundan bir dizin öğesine erişimi kolaylaştırmak için hangi önemli mekanizmayı kullanabileceğine bakacağız.

Tam sözdizimi (genişletmek için tıklayın)

Değerleri Listele

Tanım:

Değer listesi, veritabanına kaydedilmeyen, arayüz sorunlarını çözmek için dinamik değer kümeleri oluşturmanıza ve bunları değiştirmenize (öğe ekleme, düzenleme, silme, sıralama) olanak tanıyan bir nesnedir. Herhangi bir türdeki değerlerle doldurulabilir, yani. Bir listede saklanan değerlerin türleri farklı olabilir. Bu nesneyi kullanmanın bir örneği, karmaşık bir algoritma kullanılarak oluşturulan olası belgeler listesinden belirli bir belgenin seçimini düzenlemektir.

Koleksiyon öğeleri: Değer Listesi Öğesi

Bir nesnenin, operatörü kullanarak koleksiyonu atlaması mümkündür Her biri için... From... Döngü. Geçiş, koleksiyonun öğelerini seçer.

[...] operatörünü kullanarak bir koleksiyon öğesine erişmek mümkündür. Öğenin dizini argüman olarak iletilir ( 0'dan numaralandırma).

Özellikler:

Yöntemler:

Ekle (Dizin, Değer, Temsil, Etiket, Görüntü) Belirtilen dizindeki konumdaki değerler listesine yeni bir öğe ekler.SelectElement (Başlık, Öğe) Değerler listesinde yer alan öğelerden birini etkileşimli olarak seçmek için bir pencere açar. Öğe- etkileşimli seçim sırasında değerler listesinin başlangıçta konumlandırılması gereken öğe. Parametre değeri, içinde yer alan bir değer listesi öğesi değilse bu liste, konumlandırma gerçekleşmez.Değerleri Kaldır()Bir dizi oluşturur ve değer öğeleri listesinin değerlerini bu diziye kopyalar.Ekle(Değer, Temsil, Etiket, Görüntü)Değerler listesinin sonuna yeni bir öğe ekler.Yük Değerleri(ArrayValues)Getirilen dizideki değerleri içeren bir değerler listesi yükler. Bu durumda listenin önceki tüm öğeleri silinir.Notları Doldurun(İşaret) Değerler listesinin tüm öğeleri için bir işaret belirler.Index(Element)Değerler listesindeki bir öğenin indeksini alır. Bulunamazsa -1 döndürülür.Count() Değer listesindeki öğelerin sayısını alır.Değere Göre Bul(AramaValue) Değerler listesindeki bir öğenin değerini arar. Hiçbir öğe arama değerine eşit bir değer saklamıyorsa değer döndürülür Tanımsız. Kimliğe Göre Bul(Tanımlayıcı)Tanımlayıcıya göre değerler öğesinin listesini alır. Eleman bulunamazsa döndürülür Tanımsız. Öğeleri İşaretle(Başlık) Değerler listesindeki öğeleri (etkileşimli olarak) ayarlar veya işaretlerini kaldırır. İadeler Doğru, iletişim kutusunda "Tamam" düğmesine basılırsa, Yalan- aksi takdirde.Clear() Değerler listesini temizler ve içindeki tüm öğeleri kaldırır.Öğe Seçimini Göster(DescriptionNotificationsOnClosing, Title, Element) Değerler listesinde yer alan öğelerden birinin etkileşimli olarak seçilmesi için bir pencere açar.ShowMark Öğeleri(Kapanış Uyarılarının Açıklaması, Başlık) Değerler listesinin öğeleri için işaret durumlarını etkileşimli olarak ayarlamak için tasarlanmıştır.Get(Index)Değeri indekse göre alır. Operatöre benzer şekilde çalışır.Shift (Element, Offset) Değerler listesinin bir öğesini belirtilen sayıda konum kadar ileri veya geri kaydırır.Copy() Değerler listesinin bir kopyasını oluşturur.Değere Göre Sırala(Yön) Öğelerin depoladığı değerlerin bir listesini artan veya azalan şekilde sıralar. Aşağıdaki örneğe bakın.Görünüme Göre Sırala(Yön) Değerler listesinde yer alan elemanların gösterimlerini alfabetik olarak artan veya azalan şekilde sıralar. Aşağıdaki örneğe bakın.Kaldır (Öğe) Değerler listesinden bir öğeyi kaldırır; Öğe- silinecek öğenin dizini veya öğenin kendisi.

Tasarımcılar:

Yeni Değerler Listesi
&OnClient Prosedürü YürütmeKodu(Komut) /// 1s 8.3, 8.2'de değerlerin listesi nasıl oluşturulur Liste = Yeni DeğerListesi; /// 1s 8.3, 8.2'deki değerler listesine nasıl eleman eklenir // yöntem parametrelerini ekleyin:// - Anlam // - verim // - işareti (gerekli) // - resim (gerekli) Liste. Ekle(1980, // eleman değeri "Vasya'nın doğum yılı"// verim ) ; Liste. Ekle(1985, "Yulia'nın doğum yılı") ; // değerler farklı türde olabilir Liste. Add("Polina", "Çocuğun adı"); /// 1s 8.3, 8.2'deki değerler listesine nasıl eleman eklenir // 2 numaralı konuma yerleştirin (elemanlar 0'dan başlayarak numaralandırılır) // değeri 2010 olan eleman ve gösterimi // "Ortak kızlarının doğduğu yıl" Liste. Ekle(2, 2010, "Ortak kızlarının doğduğu yıl") ; /// 1s 8.3, 8.2'deki değerler listesinin elemanları nasıl atlanır Listeden Her Öğe İçin Döngü Raporu( Element.Reference + ": " + String(Element. Value) ) ; EndCycle; /// 1s 8.3, 8.2'deki değerler listesi nasıl temizlenir Liste. Temizlemek() ; Liste. Ekle("Pazartesi"); Liste. Ekle("Salı"); Liste. Ekle("Çarşamba"); /// Değerler listesinin öğelerinin sayısı nasıl bulunur? /// 1s 8.3, 8.2'deki indeksine göre bir liste elemanı elde edin //sıfırdan numaralandırma Dizin için = 0 Listeye Göre. Miktar() - 1 Döngü Raporu(Liste[Dizin]) ; EndCycle; /// 1s 8.3, 8.2'deki değerine göre bir liste elemanı nasıl bulunur? ValueTuesday = Liste. FindByValue("Salı"); /// 1s 8.3, 8.2'deki listedeki bir öğenin indeksi nasıl bulunur? Rapor(List.Index(ValueTuesday)) ; // 1, numaralandırma sıfırdan başladığı için /// Bir liste 1s 8.3, 8.2'deki değerlerine göre nasıl sıralanır // şuydu: Pazartesi, Salı, Çarşamba Liste. SortByValue(SortDirection.Descending) ; // şu şekilde oldu: Çarşamba, Pazartesi, Salı /// 1s 8.3, 8.2'deki değerler listesinden bir öğe nasıl kaldırılır // ilk elemanı kaldır // parametre: liste elemanı // veya öğe dizini// bu Listeyi yapabilirsiniz. Sil(Liste[ 0 ]) ; // ya da öyle // List.Delete(0); /// 1s 8.3, 8.2'deki değerler listesinin bir öğesi nasıl kaydırılır // sıfır elemanını bir konum ileri taşı // şuydu: Pazartesi Salı Liste. Taşı(0, 1); // şu şekilde oldu: Salı Pazartesi /// 1s 8'de bir listenin kopyası nasıl oluşturulur ListCopy = Liste. Kopyala(); Renkler = YeniDeğerListesi; Renkler. Ekle("Kırmızı"); Renkler. Ekle("Yeşil"); Renkler. Ekle("Mavi"); /// 1s 8.3, 8.2'de liste değerleri bir diziye nasıl yüklenir ArrayColors = Renkler. BoşaltmaDeğerleri() ; /// 1s 8.3, 8.2'deki bir diziden liste değerleri nasıl yüklenir Renkler. LoadValues(ArrayColors) ; Prosedürün Sonu /// Listeden bir değerin modelsiz seçimi nasıl yapılır /// 1'lerdeki değerler 8.3, 8.2&İstemci Prosedüründe Non-ModalValueSelection(Command) Nasıl Yapılır Colors = New ValueList; Renkler. Ekle("Kırmızı"); Renkler. Ekle("Yeşil"); Renkler. Ekle("Mavi"); // AfterSelectingElement prosedürü hemen aşağıda tanımlanmıştır AlertAfterElementSelection = Yeni AçıklamaAlerts( "ElementSeçimi Sonrası", ThisObject ) ; Renkler. ShowElementSelection( NotificationAfterElementSelection, "Favori renginizi seçin") ); Prosedür Sonu &Öğe Seçiminden Sonra Müşteri Prosedüründe (Öğe, Parametreler) If Öğesini Dışa Aktar<>Tanımsız Sonra Rapor(Element.Value) ; EndIf ; Prosedürün Sonu /// Bir listeden değerlerin modelsiz işaretlenmesi nasıl yapılır /// 1'lerdeki değerler 8.3, 8.2&İstemci Prosedüründe Değerlerin Modal Olmayan İşaretlemesi Nasıl Yapılır (Komut) Renkler = Yeni Değerler Listesi; Renkler. Ekle("Kırmızı"); Renkler. Ekle("Yeşil"); Renkler. Ekle("Mavi"); // AfterMarkingElements prosedürü hemen aşağıda tanımlanmıştır AlertAfterMarkingItems = Yeni AçıklamaAlerts( "Öğeleri İşaretledikten Sonra", ThisObject ) ; Renkler. ShowTagItems( AlertAfterTagItems, "En sevdiğiniz renkleri seçin") ); Renkler. Notları Doldur(Doğru) ; Prosedür Sonu &Müşteri Prosedüründe Öğeleri İşaretledikten Sonra (Elemanlar, Parametreler) If Öğelerini Dışa Aktar<>Tanımsız Sonra Öğelerden Her Renk İçin Renk Döngüsü Varsa. İşaretle Sonra Rapor(Renk.Değer) ; EndIf ; EndCycle; EndIf ; Prosedürün Sonu /// 1s 8.3, 8.2'deki listeden bir değerin modal seçimi nasıl yapılır?&İstemci Prosedüründe ModalValueSelection(Command) Nasıl Yapılır Colors = New ValueList; Renkler. Ekle("Kırmızı"); Renkler. Ekle("Yeşil"); Renkler. Ekle("Mavi"); Renk Seç = Renkler. Öğeyi seçin( "Favori renginizi seçin") ); EğerRenk Seçerseniz<>Tanımsız Sonra Rapor(SelectColor.Value) ; EndIf ; Prosedürün Sonu /// Bir listedeki değerler kalıcı olarak nasıl işaretlenir? /// 1'lerdeki değerler 8.3, 8.2&Müşteride Prosedürü Modal Değer İşareti Nasıl Yapılır (Komut) Renkler = Yeni Değerler Listesi; Renkler. Ekle("Kırmızı"); Renkler. Ekle("Yeşil"); Renkler. Ekle("Mavi"); Renkler ise. MarkItems( "En sevdiğiniz renkleri seçin") Sonra Renk Döngüsünden Her Renk İçin Renk Varsa. İşaretle Sonra Rapor(Renk.Değer) ; EndIf ; EndCycle; EndIf ; // tüm işaretleri aynı anda bu şekilde ayarlayabilirsiniz //belirli bir değere göre listeleme Renkler. Notları Doldur(Doğru) ; Prosedürün Sonu /// Bu örnekleri bilgisayarınıza indirip çalıştırın

Bu ünitede 1C dilinin yeni bir veri türüyle tanışacağız. Değerleri Listele.

Değerler listesi bir dizidir, ancak harika yeteneklere sahiptir. Ve eğer öyleyse, o zaman bu aynı zamanda bir veri koleksiyonudur ve içine bir dizi sayı koyabilirsiniz:

// bir değerler listesi oluşturduk

List.Add(23);

Şu ana kadar her şey bir diziye çok benziyor, değil mi? Ama devam edelim. Şimdi bu sayıları kullanıcıya göstermek için şunu yazıyoruz:

// listenin her elemanı arasında döngü yapın Listeden Her Bir Eleman İçin Döngü Raporu(Element.Value);

// EndCycle elemanının değerini göster;

Ve işte ilk fark. Düzenli bir dizinin elemanları sayıların kendisidir. Ve bir elemanın mevcut değerine erişim Liste seçeneği kullanıyoruz Anlam, inşaatı kullanarak Öğe. Anlam.

Bazı ek özelliklere bakalım Değerler.

Sıralayabilir

Örneğin bir değerler listesini kolaylıkla sıralayabiliriz. Liste bunu kendisi yapabilir:

List.SortByValue(SortDirection.Age); Normal bir dizi durumunda, sıralama algoritmalarından birini (örneğin "balon") uygulamamız gerekir.

Arama yapabilir

Değerler listesi kendi öğelerini kendi başına arayabilir. Kullanıcının girdiği bir sayının listemizde olup olmadığını öğrenmek istediğimizi varsayalım:

Sayıyı Girin(Sayı); // kullanıcıdan bir sayı girildi FoundElement = List. FindByValue(Sayı);

If FoundItem = UnDefinition Then OpenValue("Numara " + Sayı + " listede bulunamadı!"); Aksi takdirde

OpenValue("Numara " + Sayı + " listededir. İşte:" + FoundElement.Value);

endIf; Değerleri Listele

Ekleme ve silmeyi destekler

Bir dizi gibi bir değerler listesi, öğelerin eklenmesini ve kaldırılmasını destekler:

Liste. Ekle(0, 1000);

// listenin en başına bin sayısını ekleyin List.Delete(O); // ve hemen listeden kaldırın. Insert(List.Quantity(), 13);

// listenin sonuna 13 ekleyin Report(List[List.Quantity() - 1]);

// listenin son elemanını göster (13)

Köşeli parantezleri destekler

Zaten anladığınız gibi, liste öğelerinin numaralandırması da sıfırdan başlar ve köşeli parantez kullanarak herhangi bir öğeye indeksinden erişebiliriz:

Rapor(Liste.Değer); // listenin ikinci elemanını göster Böylece listenin tüm elemanlarını şu şekilde inceleyebiliriz:

A = 0 için List.Quantity()'ye göre - 1 Döngü Raporu(Liste[A].Value);

EndCycle;

Kendisinin bir kopyasını oluşturabilir

Değerler listesinin harika bir özelliği var; kendisinin bir kopyasını oluşturabilir:

ListCopy = List.Copy();

// listenin bir kopyasını oluşturduk // artık Listenin Kopyasını güvenle değiştirebiliriz // orijinal liste Listenin Kopyasını değiştirmez. Değer = 123456;

Bir diziye dönüşebilir

Ve son olarak, listenin tüm öğelerini istediğiniz zaman kolayca bir diziye aktarabilirsiniz:

ArrayNumbers = Liste. BoşaltmaDeğerleri();

// bir diziye atıldı

A = 0 için ArrayNumber.Quantity() ile - 1 Döngü

Rapor(DiziNumaraları[A]); // belirtmeye gerek yok // seçenek Değer

EndCycle;

Bu ünitenin materyallerini uygulamak ve pekiştirmek için aşağıdaki görevin tamamlanması tavsiye edilir.

Kullanıcıdan gelen 5 adet sayının girilmesi, bunların en büyüğü ve en küçüğünün bulunup kullanıcıya gösterilmesi gerekmektedir. Çözüm bir değerler listesi kullanmalıdır.

Çözüm

Liste = Yeni DeğerListesi;

// A = 1'den 5'e kadar olan değerlerin bir listesini oluşturduk Döngü Numarası = 0;

Sayıyı Girin(Sayı); // kullanıcıdan bir sayı girin List.Add(Number); // ve listeye ekleyin EndCycle; // ve benzeri 5 kez

//sayıların listesini sırala

Liste. Değere Göre Sırala(SortDirection.Age);

// sıralamadan sonra listenin ilk elemanı // en küçük eleman, sonuncusu ise en büyük OpenValue("En küçük eleman" + List +

" ve en büyüğü " + Liste[List.Quantity() - 1]);




Tepe