Örneklerde 1s 8.3 tablo kısmı

  • 14.12.2023

Tüm infostart okuyucularına selamlar. Bu makale, programlı olarak yönetilen bir uygulama biçiminde keyfi bir değer tablosu oluşturma konusuna ayrılacaktır.

Görevin özellikleri.

Normal bir uygulamada programlayan herkes çoğu zaman bir form üzerinde keyfi bir değerler tablosu elde etme göreviyle karşı karşıya kalmıştır. Rastgele bir değer tablosu, sütun sayısı ve türü önceden bilinmeyen bir tablodur. Yani 3 sütun olabilir, belki 6 veya belki 8. Normal bir uygulamada her şey basittir: “Değerler Tablosu” öğesini işleme formuna yerleştirebilir ve ardından oluşturulan değerler tablosunu aktarabilirsiniz. bu öğeye programlı olarak. Daha sonra basit bir komutla:

Form Elements.TableField.CreateColumns();

formda hazır bir değerler tablosu edinin. Görünüşe göre daha basit olabilir.

Bunların hepsi normal başvurudaydı. Yönetilen bir uygulamada her şey değişti. Rastgele bir tablo oluşturmak o kadar kolay değil. Şimdi ya formdaki değer tablosunu katı bir şekilde parametreleştirmeniz ya da programlı olarak oluşturmanız gerekiyor (açıklayın, aslında bu, yönetilen uygulamanın özüdür). Yapmaya çalışacağımız şey bu: kontrollü bir formda programlı olarak rastgele bir değerler tablosu oluşturmak.

Sorunun çözümü.

Yapmamız gereken ilk şey tablonun formda nasıl görüneceğini belirlemek. Önemli olan, işleme sırasında herhangi bir form öğesi oluşturmanıza gerek olmamasıdır. Tablonun tamamı gibi programlı olarak oluşturacağız. Yani, tablo, kimin ihtiyacı olduğuna bağlı olarak, formu açtığınızda veya bir düğmeyi kullandığınızda tanımlanacak ve oluşturulacaktır.

Formda bir tablonun oluşturulması, değer tablosunun bir nitelik olarak tanımlanması yoluyla gerçekleşir:
SelectionTypeArray = Yeni Dizi; SelectionType.Add(Type("Değer Tablosu")); dizisi ChoiceTypeDescription = Yeni TürAçıklaması(ChoiceTypeArray); Ayrıntılar Dizisi = Yeni Dizi; Nitelikler Dizisi.Add(Yeni Form Nitelikleri("Zamanlama Tablosu", SelectionType'ın Açıklaması, "", "TZN")); Şimdi verileri içeren bir program değer tablosu oluşturmamız gerekiyor. Değer tablosu bir sorgudan elde ediliyorsa, her şey aşağı yukarı sıralıdır. Tablo manuel olarak oluşturulmuşsa “Türlerin Açıklamaları” üzerinden sayı veya tarih içerecek sütunların anlamı oluşturulabilir. Önemli olan, değerler tablosundaki sütunların bir türe sahip olması gerektiğidir. Örneğin, kullanıcının bu sütunlardaki verileri etkileşimli olarak doldurması bekleniyorsa, değer tablosunun bir sütununu yalnızca bir adla ekleyemezsiniz; bunun bir türü olması gerekir. Unutmayın, bu çok önemli çünkü... Bu türleri formdaki tabloya aktaracağız.
Birkaç sütun içeren bir tablo oluşturuyoruz:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Yeni Dizi; ArrayCD.Add(Type("Tarih")); AçıklamaTypesTime = Yeni AçıklamaTypes(ArrayCD,CD); TZ = Yeni Değer Tablosu;
TK.Columns.Add("İle", AçıklamaTypesTime);
TK.Columns.Add("Önce", AçıklamaTypesTime);
TK.Columns.Add("Ad");
TK.Columns.Add("Note"); // Tam ad ve Not - satırlar Daha sonra TK program tablomuzu gerekli verilerle dolduracağız. Gerekli değerleri içeren ve oluşturulan form özelliğine aktarılmaya hazır bir TK tablosu alıyoruz. TK Sütun Döngüsünden Her Sütun İçin.

Attributes Dizisi.Add(Yeni Form Nitelikleri(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Bu basit bir kombinasyon ve masamız hazır.

TK Sütun Döngüsünden Her Sütun İçin.

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Sütun.Adı;
NewElement.Width = 10;
EndCycle;

Koşullu tasarım, eğer ihtiyacımız varsa, bunu manuel olarak da yazıyoruz, komut menüsünü - manuel olarak. Masa işleyicileri de elle yazılır. Örneğin, "Seçim" tablosuna bir olay işleyicisi eklemek için:

SelectionFields.SetAction("Selection", "TZNSelection");

Bu olayı işlemek için, prosedür şeklinde ayrı bir prosedür öngörülmüştür:

&İstemcide
Prosedür TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//işleyici komutları EndProcedure

Tablo işleyicilerinin istemcide etkinleştiğini ve bu nedenle bir derleyici işaretçisi komutuna sahip olması gerektiğini unutmayın.

&İstemcide

Eklemek istediğim son şey, tüm bu adımlardan sonra bitmiş tabloyu form niteliğine aktarmayı unutmayın:

ValueВFormAttributes(ToR, "ScheduleTable");

Sonuç olarak elimizde şu var:


Ve işte "Seçim" olayının ele alınması:



Sonsöz.

Makalenin programlı olarak bir form üzerinde tablolar oluşturmaya başlayan 1C programcılarına yardımcı olacağını umuyorum.

Programlı olarak bir değerler tablosu oluşturan ve bunu kendi tablolarınızı oluşturmanıza yardımcı olacak yorumlarla birlikte yönetilebilir bir formda görüntüleyen bir işlemi indirebilirsiniz.

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üldüğünde 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 bölümü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çildi).

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. Bu kadar!

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 eylemler/Görüntüleme listesi menü öğesi kullanılarak benzer eylemler gerçekleştirilebilir.

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.