Değerler tablosunun doldurulması 1'ler. Hangi yöntemler mevcuttur ve aynı anda birkaç değerin nasıl aranacağı

  • 18.11.2023

Para ve malların muhasebeleştirilmesi için iş dünyasında çeşitli tablolar yaygın olarak kullanılmaktadır. Hemen hemen her belge bir tablodur.

Bir tablo depodan sevk edilecek malları listeler. Başka bir tablo bu mallar için ödeme yükümlülüklerini göstermektedir.

Bu nedenle 1C'de tablolarla çalışmak önemli bir yer tutuyor.

1C'deki tablolara "tablo parçaları" da denir. Dizinler, belgeler ve diğerleri bunlara sahiptir.

Sorgu, yürütülmesi sonucunda iki farklı şekilde erişilebilen bir tablo döndürür.

İlk - daha hızlı - seçim, ondan satır elde etmek yalnızca sırayla mümkündür. İkincisi, sorgu sonucunu bir değerler tablosuna yüklemek ve ardından ona rastgele erişim sağlamaktır.

//Seçenek 1 – sorgu sonuçlarına sıralı erişim

//tabloyu al
Select = Query.Run().Select();
// sorgu sonucunun tüm satırlarını sırayla inceliyoruz
Select.Next() Döngüsü sırasında
Rapor(Seçim.Ad);
EndCycle;

//Seçenek 2 – değerler tablosuna yükleme
İstek = Yeni İstek("Dizin.Nomenclature'dan Ad SEÇİN");
//tabloyu al
Tablo = Query.Run().Unload().
//ayrıca tüm satırları da geçebiliriz
Tablo Döngüsünden Her Satır için
Rapor(Dize.Ad);
EndCycle;
//veya dizelere isteğe bağlı olarak erişim
Satır = Table.Find("Kürek", "Ad");

Önemli bir özellik, sorgu sonucundan elde edilen tabloda tüm sütunların kesin olarak yazılmasıdır. Bu, İsimlendirme dizininden Ad alanını talep ettiğinizde, izin verilen uzunluğu N karakterden fazla olmayan Dize türünde bir sütun alacağınız anlamına gelir.

Formdaki tablo (kalın istemci)

Kullanıcı tablo forma yerleştirildiğinde onunla çalışır.

Formlarla çalışmanın temel ilkelerini derste ve derste tartıştık.

Öyleyse tabloyu formun üzerine yerleştirelim. Bunu yapmak için tabloyu Kontrol panelinden sürükleyebilirsiniz. Benzer şekilde menüden Form/Ekle Denetimi'ni seçebilirsiniz.

Veriler konfigürasyonda saklanabilir - daha sonra, formunu düzenlediğiniz konfigürasyon nesnesinin mevcut (önceden eklenmiş) tablo kısmını seçmeniz gerekir.

Veri özelliğinde "..." düğmesini tıklayın. Tablosal parçaların listesini görmek için Nesne dalını genişletmeniz gerekir.

Tablo bölümünü seçtiğinizde, 1C'nin kendisi formdaki tabloya sütunlar ekleyecektir. Kullanıcının böyle bir tabloya girdiği satırlar, referans kitabı/belgeyle birlikte otomatik olarak kaydedilecektir.

Aynı Veri özelliğinde isteğe bağlı bir ad girebilir ve Değer Tablosu türünü seçebilirsiniz.

Bu, keyfi bir değer tablosunun seçildiği anlamına gelir. Otomatik olarak sütun eklemez veya otomatik olarak kaydedilmez, ancak onunla istediğinizi yapabilirsiniz.

Tabloya sağ tıklayarak sütun ekleyebilirsiniz. Bir sütunun özelliklerinde, adını (1C kodunda referans için), formdaki sütun başlığını, tablo bölümünün niteliğiyle bağlantıyı (ikincisi - rastgele bir tablo değilse, tablo bölümü) belirtebilirsiniz. seçilir).

Formdaki tablo özelliklerinde kullanıcının satır ekleyip ekleyemeyeceğini/silebileceğini belirtebilirsiniz. Daha gelişmiş bir form Salt Görüntüle onay kutusudur. Bu özellikler, bilgileri görüntülemek için tasarlanmış ancak düzenleme amaçlı olmayan tabloları düzenlemek için kullanıma uygundur.

Tabloyu yönetmek için formda bir komut paneli görüntülemeniz gerekir. Form/Ekle Kontrol/Komut Çubuğu menü öğesini seçin.

Paneldeki düğmelerin otomatik olarak görünmesi için komut çubuğu özelliklerinde Otomatik Doldur onay kutusunu seçin.

Formdaki tablo (ince/yönetilen istemci)

Yönetilen formda bu eylemler biraz farklı görünür. Forma tablolu bir bölüm yerleştirmeniz gerekiyorsa Nesne dalını genişletin ve tablolu bölümlerden birini sola sürükleyin. Hepsi bu!

Bir değerler tablosu yerleştirmeniz gerekiyorsa, yeni bir form özelliği ekleyin ve özelliklerinde türü - değerler tablosunu belirtin.

Sütun eklemek için bu form özelliğinde sağ tıklama menüsünü kullanın ve Özellik sütunu ekle'yi seçin.

Daha sonra tabloyu sola da sürükleyin.

Bir tablonun komut çubuğuna sahip olabilmesi için tablo özelliklerinde Kullanım – Komut çubuğu konumu bölümündeki değerleri seçin.

Excel'e tablo yükleme

Formda bulunan herhangi bir 1C tablosu yazdırılabilir veya Excel'e yüklenebilir.

Bunu yapmak için tablodaki boş bir alana sağ tıklayın ve Liste'yi seçin.

Yönetilen (ince) bir istemcide, Tüm işlemler/Listeyi görüntüle menü öğesi kullanılarak benzer işlemler gerçekleştirilebilir.

Değer tablosu, verileri tablo şeklinde bir gösterimde depolamak için tasarlanmış özel bir evrensel nesnedir. Bir tablo ile uygulama nesneleri arasındaki temel fark, fiziksel veritabanı tablolarına bağlanma eksikliğidir. Değer tablosu yalnızca bir yandan benzersiz fırsatlar sağlayan, diğer yandan belirli kısıtlamalar getiren RAM'de bulunur. Bununla birlikte, tabloyla etkileşim olasılıkları, veri tabanında gerçekten var olan nesnelerle etkileşimle karşılaştırılabilir.

Tarihsel olarak, 1C'deki değer tablosunun, mevcut tabloların sanal bir analogu olarak ikili bir amacı vardır, ancak aynı zamanda bir kontrol unsurudur. Yönetilen bir uygulamaya geçişle birlikte, bu işlevselliğin çoğu kullanımdan kaldırıldı, ancak bugün hala bir kullanıcı arayüzü öğesi olabilir, ancak bazı önemli sınırlamalara sahiptir.

Bir nesne olarak değer tablosunun yapısı

Bir değer tablosunun özellikleri, önceden tanımlanmış iki koleksiyonun birleşimiyle belirlenir: sütunları ve satırları.

Değerler tablosu Sütunlar

Bir değerler tablosunun sütunu, onun tanımlayıcı özelliğidir. Yapısını belirleyen tablo sütunları kümesidir. Sütunlar, tablolu bir bölümün veya belge günlüğünün kullanıcı arayüzünden aşina olunan fiziksel tablo veya sütun alanlarına karşılık gelir. Bir sütunun dahili bir adı, değer türü ve tabloyla etkileşimli olarak çalışırken görüntülenen bir başlığı olabilir.

Sütunlar bir nesne koleksiyonu olduğundan sütunları ekleyebilir, silebilir ve düzenleyebilirsiniz.

Değer tablosu satırı

Yazılım arayüzü açısından bakıldığında dizeler, bir değerler tablosuna yerleştirilmiş ayrı bir koleksiyondur. Bunlar, fiziksel tablolardaki kayıtlara, yani kullanıcının tablo bölümünde veya belge günlüğünde aşina olduğu satırlara benzer. Her bir satır, adları tablo sütunlarının adlarına karşılık gelen bir dizi adlandırılmış özelliğe sahip bir nesnedir.

Dolayısıyla bir dizeyle etkileşim, diğer nesnelerle etkileşime çok benzer. Önceden tanımlanmış "FillPropertyValues()" işlevini kullanmak da dahil olmak üzere özelliklerini okuyabilir ve yazabilirsiniz. Satırlar değer tablosunun ana koleksiyonu olduğundan, tablodaki tüm satırları silmek için Clear() yöntemi kullanılır.

Değer tablosu oluştur

Değer tablosunu kullanıma hazır hale getirmenin birçok yolu vardır. Bunlardan bazılarına bakalım. Her örnek, yorumlarla birlikte kod listeleri olarak sağlanacaktır.

Yapıcıyı kullanarak tablo oluşturma

Tam olarak geliştiricinin ihtiyaç duyduğu tabloyu oluşturmanıza olanak tanıyan ana yöntem, ne yazık ki, gerekli tüm tablo özelliklerinin manuel olarak belirtilmesini gerektirdiğinden en yoğun emek gerektiren yöntemdir.

DemoTablo = Yeni DeğerTablosu;

// Öncelikle teknik özellikleri başlatıyoruz // Daha sonra yeni sütunlar için gerekli parametreleri belirleyip koleksiyona ekliyoruz // "Nomenclature" sütununu oluşturma Name = "Nomenclature";

ValueType = New TypeDescription("DirectoryLink.Nomenclature");

// Teknik spesifikasyon standardındaki tüm satırların kopyalanması ancak sadece belirtilen iki sütunun korunması seçeneği = "Adlandırma, Adet";

DemoTable = TableEtalon.Copy(, ColumnsEtalon);

// Belirtilen iki sütunu korurken, teknik spesifikasyon standardından önceden seçilmiş satırları kopyalama seçeneği. Standardın Satırları = SelectIntoArrayStandart Tablosundan İhtiyacımız Olan Satırları();

ColumnsStandard = "Adlandırma, Miktar";

DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon);

Bu kısa yazımızda anlamak ve kullanmaya başlamak için yeterli bir değerler tablosu oluşturmanın temel özelliklerine ve pratik tekniklerine baktık. Değer tablosu nesnesinin kendisi o kadar çok yönlüdür ki, yeteneklerinin ayrıntılı bir açıklaması, teknikler ve çalışma yöntemleri hakkında ayrı bir makale yazmayı gerektirir.

1C değerleri tablosunda arama yapın

Hangi yöntemler mevcuttur ve aynı anda birkaç değerin nasıl aranacağı.

Değer tablosunda arama yapmanın iki özel yöntemi vardır:

1. Bul

TVHorizon = Directoryies.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//aramayı hızlandırmak için hangi sütunlarda arama yapacağımızı da belirtebiliriz
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclature");

Bu yöntem, istenen değerle bulunan ilk satırı veya bulamazsa Tanımsız'ı döndürür. Bu nedenle benzersiz değerleri aramak için kullanılması uygundur, çünkü aksi halde bir değer bulunduğunda, bir sonraki değeri bulmak için onu tablodan kaldırmanız gerekecektir.

Bu güçlükten kaçınmak için, eşleşen dizelerden oluşan bir dizi bulmanızı sağlayan aşağıdaki yöntem vardır:

2. Dizeleri Bul


Seçim Yapısı.Insert("Adlandırma", TVHorizon); // önce sütunun nereye bakılacağını, sonra ne aranacağını belirtin.

Bu yöntem her zaman bir dizi döndürür, ancak hiçbir şey bulunamazsa boş olabilir. Ve bu yöntem, önceki yöntem gibi, değerlerin kendisini ayrı bir dizide değil, değer tablosunun satırlarını döndürür. Bu nedenle, dizi dizesindeki değerleri değiştirerek veya önceki yöntemde olduğu gibi bulunan dize için, işlenmiş değerler tablosundaki değeri değiştireceksiniz.

Bu yöntemin bir başka iyi yanı da değer tablosunun birkaç sütununda aynı anda arama yapabilmesidir:


SelectionStructure = Yeni Yapı;
Seçim Yapısı.Insert("Adlandırma", TVHorizon);
Seçim Yapısı.Insert("Miktar", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Gördüğünüz gibi tek olumsuzluk, "eşittir" dışında başka karşılaştırma türlerini kullanamamanızdır.

Başlangıç ​​olarak küçük bir gerçek: Değer tablosuyla çalışmanın basit örnekleri:

1. Bir değerler tablosu oluşturun

Değer Tablosu = Yeni Değer Tablosu;


2. Değer tablosu için sütunlar oluşturun:

ValueTable.Columns.Add("Ad");
Değer Table.Columns.Add("Soyadı");


3. Sütun adlarını kullanarak yeni satırlar ekleyin:


NewLine.Name = "Vasily";
NewLine.LastName = "Pupkin";


4. Değer tablosunda bir değere nasıl bakılır:
İstenilen değeri içeren bir tablo satırı bulmak gerekir.

FoundRow = ValueTable.Find(AramaValue);


5. Değer tablosunun belirli sütunlarında ilk geçtiği yeri bulun

FoundRow = ValueTable.Find(AramaValue, "Tedarikçi, Alıcı");


6. Değer tablosundaki tüm oluşumları bulmanız gerekiyorsa:
Arama yapısını kullanıyoruz.

SearchStructure = Yapı("Çalışan", AramaValue);
FoundRows Dizisi = ValueTable.FindRows(SearchStructure);


Her elemanı anahtar olarak sütunun adını ve değer olarak bu sütunda istenilen değeri içerecek bir arama yapısı oluşturalım. Arama Yapısını FindLines() metoduna parametre olarak aktarıyoruz. Sonuç olarak tablo satırları alıyoruz.
Arama yapısına, örneğin Sorumlu sütununda istenen değer için bir arama eklerseniz, FindRows() yönteminin uygulanmasının bir sonucu olarak, hem Çalışanın hem de Sorumlunun eşit olduğu tüm satırları alırız. değer arandı.

7. Değerler tablosunun rastgele sırayla yinelenmesi

Değerler Tablosu Döngüsünden Her Geçerli Satır İçin
Rapor(CurrentRow.Name);
EndCycle;

Dizinleri kullanarak aynı şey:

SeniorIndex = ValueTable.Quantity() - 1;
Hesap İçin = 0 - SeniorIndex Döngüsü
Rapor(TableValues[Hesap].Ad);
EndCycle;


8. Mevcut bir değer tablosu satırının silinmesi

ValueTable.Delete(Silinecek satır);

indekse göre

ValueTable.Delete(0);


9. Değer tablosunun mevcut bir sütununu silme

ValueTable.Columns.Delete(ColumnDeleted);


indekse göre

ValueTable.Columns.Delete(0);

Değer tablosunun "ortasından" bir satırın (veya sütunun) silinmesinin, silinenlerden "sonra" bulunan satırların bir indeksi kadar azalmaya yol açacağı dikkate alınmalıdır.

10. Sütun adları değişkenlerde yer alıyorsa değerler tablosu nasıl doldurulur?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Değer;


11. Değer tablosunun tüm sütunu istenilen değerle nasıl doldurulur?
Değerler Tablosu değerler tablosunda Mali Muhasebe Bayrağı sütunu Yanlış değeri ile doldurulmalıdır.

Değer Tablosu Değerleri Doldurun (Yanlış, "Mali Muhasebe Bayrağı");


Değer tablosu için FillValues() yöntemini kullanıyoruz. İlk parametre doldurulacak değerdir. İkinci parametre doldurulacak sütunun adıdır.

12. “Alıcı Tablosu” değer tablosu “Kaynak Tablosu” değer tablosundaki verilerle nasıl doldurulur?

İşlem sırasında Alıcı Tablosu henüz mevcut değilse veya önceki sütunlarının kaydedilmesine gerek yoksa, orijinalin tam kopyası olarak oluşturabilirsiniz.

Alıcı tablosu = Kaynak tablosu.Copy();


İkinci seçenek: AlıcıTable tablosu mevcuttur ve onun sütunlarını ve sütunların veri türleri üzerindeki kısıtlamaları kaybetmek üzücü olur. Ancak adları kaynak tablonun adlarıyla eşleşen sütunların verilerini doldurmanız gerekir.

Eşleşen adlara sahip sütunlar için kısmi veri aktarımı:

SourceTable Döngüsünden SourceTable'ın Her Satırı İçin
FillPropertyValues(NewRow, SourceTableRow);
Döngünün Sonu


Kaynak tablonun her satırı için, alıcı tabloya yeni bir satır eklenir ve değerler, adları kaynak tablodaki sütunların adlarıyla eşleşen yeni tablonun sütunlarına doldurulur.

Tablolarda aynı adlara sahip sütunlar yoksa, hedef tablo, kaynak tablodaki satırların sayısı kadar boş değere sahip satır içerecektir.
Aynı adı taşıyan bazı sütunlar için kaynak tablodaki veri değeri türü, hedef tablodaki izin verilen sütun türleri dizisine girmezse, bu tür alanlarda boş değerler elde ederiz.
Üçüncü durumu ele alalım. Aynı adı taşıyan sütunlar olması durumunda, hedef tablonun sütunu, kaynak tablonun sütunuyla tam uyumlu hale getirilmelidir.

Eşleşen adlara sahip sütunlara ilişkin verilerin tam kopyalanması

Aynı Sütunlar = Yeni Dizi();

SourceTable.Columns Döngüsünden Her Sütun İçin
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Sütun Eşleşiyorsa<>Tanımsız Sonra

// Sütun özelliklerini alın.
Ad = Sütun.Adı;
ValueType = Column.ValueType;
Başlık = Sütun.Başlık;
Genişlik = Sütun.Genişlik;

// Hedef tablodaki sütunları değiştirin.
Index = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Index);
AlıcıTable.Columns.Insert(Index, Name, ValueType, Header, Width);

// Eşleşen sütunların bir sonraki adını diziye ekleyin.
Same Columns.Add(Column.Name);

endIf;

EndCycle;

// Kaynak tablonun satırları arasında geçiş yapın.
SourceTable döngüsündeki SourceTable'ın her Satırı için

// Hedef tabloya yeni bir satır ekleyin.
NewRow = TableReceiver.Add();

// Eşleşen hücrelerdeki değerleri doldurun.
Her Ad için Aynı addaki Sütunlardan Sütunlar Döngüsü
NewRow[ColumnName] = SourceTableRow[ColumnName];

EndCycle;

EndCycle;


Hedef tablodaki sütunu, özellikleri kaynak tablonun sütunuyla tamamen eşleşecek yeni bir sütunla değiştirmemiz gerekecek.
Bu nedenle, alıcı tablosunda aynı isimde bir sütun bulunursa, yeni sütunun tüm özelliklerini değişkenlerde topluyoruz. Daha sonra eskisini silin ve yeni bir sütun oluşturun. Daha sonra kaynak tablonun satırları arasında dolaşıyoruz.
Döngüde, alıcı tabloya yeni bir satır ekliyoruz ve eşleşen sütunlar dizisindeki sütun adları üzerinde bir döngü açıyoruz.
Bu iç içe geçmiş döngünün içinde, hedef tablonun hücrelerini kaynak tablo hücresinin verileriyle dolduruyoruz.

13. “ValueTable” değerler tablosuna tür kısıtlamaları ile sütunlar nasıl eklenir?

Bir sütun eklerken, basitçe adını belirtebilir ve Add() yönteminin ikinci parametresine dokunmadan bırakabilirsiniz. Bu durumda sütun veri türü isteğe bağlıdır.

Veri türü belirtmeden sütun ekleme

// Tür kısıtlaması olmayan bir sütun ekleyin.
ValueTable.Columns.Add("Nesne");


İkinci parametrenin değerini doldurabilirsiniz. Burada sütun için izin verilen türün açıklamasını aktarmanız gerekir. Açıklamanın kendisi, türün dize adını (birçok tür varsa, virgülle ayrılmış olarak) veya geçerli türlerden oluşan bir diziyi parametre olarak ileterek yapıcı kullanılarak elde edilebilir.

Veri türünü belirten bir sütun ekleme

// Sütun veri türlerindeki kısıtlamalar:
// Yalnızca "Karşı Taraflar" dizininin öğeleri.
Değer Tablosu.Columns.Add("Hesap", Türlerin Yeni Açıklaması("DirectoryLink.Accounts"));


Sütun verilerini doldurmak için izin verilen türler arasında bir dize varsa, bit derinliğini (uzunluğunu) sınırlayabilir, değişken veya sabit uzunluk kullanımını belirtebilirsiniz. Bütün bunlar, String Qualifiers yapıcısını kullanarak bir nesne oluşturarak elde edilir. Daha sonra bu nesne TypeDescription yapıcısının parametrelerinden biri olarak kullanılacaktır.

Bir değer tablosu sütununun veri türünü belirtmek için niteleyicileri kullanma

// String tipindeki veriler için kısıtlamaları hazırlayın ve ayarlayın.
Dize Niteleyicileri = Yeni Dize Niteleyicileri (20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Sayı ve tarih niteleyicileri için de benzer işlemler yapılabilir.
Lütfen unutmayın: Tip tanımları yapıcı tarafından "sıfırdan" oluşturulabilir veya mevcut bir tip tanımı temel olarak kullanılabilir.

Bir değer tablosu sütununun veri türünü belirtmek için mevcut tür bildirimlerini kullanma

// Daha önce kullanılan tür açıklamasının uzantısı.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
Genişletilmiş ValidTypes = New TypeDescription(ValidTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

ValueTable.Columns.Add("Not", ExtendedAcceptableTypes);

1C 8.3 (8.2) platformundaki değerler tablosu, bir geliştiricinin yazılım geliştirme sırasında algoritmalarını uygulamak için kullanabileceği evrensel bir değerler koleksiyonudur. Temel olarak, 1C değer tablosu, sütunlara ve sütunlara sahip dinamik bir değerler kümesidir.

1C'deki diğer evrensel değer koleksiyonları hakkında makaleler

“11 adımda 1C'de Programlama” kitabımda 1C'de programlamayı öğrenin

  1. Kitap yeni başlayanlar için açık ve basit bir dille yazılmıştır.
  2. 1C mimarisini anlamayı öğrenin;
  3. 1C dilinde kod yazmaya başlayacaksınız;
  4. Temel programlama tekniklerine hakim olun;
  5. Bilginizi bir problem kitabının yardımıyla pekiştirin;

Hem acemi geliştiriciler hem de deneyimli programcılar için yönetilen bir 1C uygulamasında geliştirme konusunda mükemmel bir rehber.

  1. Çok erişilebilir ve anlaşılır bir sunum dili
  2. Kitap PDF formatında e-postayla gönderilir. Herhangi bir cihazda açılabilir!
  3. Yönetilen bir 1C uygulamasının ideolojisini anlayın
  4. Yönetilen bir uygulamanın nasıl geliştirileceğini öğrenin;
  5. Yönetilen 1C formlarını geliştirmeyi öğrenin;
  6. Yönetilen formların temel ve gerekli unsurlarıyla çalışabileceksiniz
  7. Yönetilen bir uygulama altında programlama netleşecek

%15 indirim için promosyon kodu - 48PVXHeYu


Bu ders herhangi bir sorunu çözmenize yardımcı olduysa, beğendiyseniz veya yararlı bulduysanız, istediğiniz miktarda bağış yaparak projeme destek olabilirsiniz:

Manuel olarak ödeme yapabilirsiniz:

Yandex.Para - 410012882996301
Web Parası - R955262494655

Gruplarıma katılın.