Ev / pencerelere genel bakış / 1c yönetilen form değeri tablosu sütun ekleyin. Bir nesne özelliğini asla bir nesne yöntemiyle karıştırmamak önemlidir.

1c yönetilen form değeri tablosu sütun ekleyin. Bir nesne özelliğini asla bir nesne yöntemiyle karıştırmamak önemlidir.

İşte başlamak için küçük bir gerçek - basit örnekler bir değerler tablosuyla çalışın:

1. Bir değerler tablosu oluşturun

ValueTable = Yeni ValueTable;


2. Değer tablosunun sütunlarını oluşturun:

ValueTable.Columns.Add("Ad");
ValueTable.Columns.Add("Soyadı");


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


NewString.Name = "Vasili";
NewRow.LastName = "Pupkin";


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

FoundString = ValueTable.Find(LookupValue);


5. Bir değerler tablosunun belirli sütunlarındaki ilk tekrarı bulun

FoundString = ValueTable.Find(LookupValue, "Tedarikçi, Alıcı");


6. Tüm oluşumları değerler tablosunda bulmanız gerekiyorsa:
Arama yapısını kullanıyoruz.

SearchStructure = Structure("Çalışan", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Her elemanı bir anahtar olarak sütunun adını ve bir değer olarak bu sütunda aranan değeri içerecek bir arama yapısı oluşturalım. Arama Yapısını FindStrings() yöntemine parametre olarak iletiyoruz. Sonuç olarak, tablonun satırlarını alıyoruz.
İstenen değer için aramayı arama yapısına eklersek, örneğin Sorumlu sütununda da, FindRows() yönteminin uygulanmasının bir sonucu olarak, hem Çalışan hem de Sorumlunun istenen değere eşit olduğu tüm satırları elde ederiz. değer.

7. Rastgele sırada bir değerler tablosunda nasıl döngü yapılır

ValueTable Döngüsünden Her CurrentRow İçin
Rapor(CurrentLine.Name);
Bitiş Döngüsü;

Dizinleri kullanarak aynısını yapın:

SeniorIndex = ValueTable.Count() - 1;
MF = 0 için SeniorIndex Döngüsüne göre
Report(ValueTable[Count].Name);
Bitiş Döngüsü;


8. Mevcut Değer Tablosu Satırını Silme

ValueTable.Delete(RemoveRow);

dizine göre

ValueTable.Delete(0);


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

ValueTable.Columns.Delete(RemoveColumn);


dizine göre

ValueTable.Columns.Delete(0);

Değerler tablosunun “ortasından” bir satırın (veya sütunun) silinmesinin, silinen “sonrasında” olan satırların dizinlerinden birinin azalmasına yol açacağı dikkate alınmalıdır.

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

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


11. Değerler tablosunun tüm sütunu istenen değerle nasıl doldurulur?
Değer Tablosunun değer tablosundaki MaliMuhasebe Bayrağı sütunu False değeri ile doldurulmalıdır.

ValueTable.FillValue(Yanlış, "Mali Muhasebe İşareti");


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

12. "TableRecipient" değerler tablosu, "SourceTable" değerler tablosunun verileriyle nasıl doldurulur?

İşlem anında Alıcı Tablosu henüz mevcut değilse veya önceki sütunlarını kaydetmeniz gerekmiyorsa, aşağıdaki gibi oluşturabilirsiniz. tam kopya ilk

TableReceiver = TableOriginal.Copy();


İkinci seçenek: TableReceiver tablosu var ve sütun veri türlerindeki sütunlarını ve kısıtlamalarını kaybetmek üzücü. Ancak, adları kaynak tablonun adlarıyla eşleşen sütunlar için verileri 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(NewString, SourceTableString);
Bitiş Döngüsü


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

Tablolar aynı ada sahip sütunlara sahip değilse, hedef tablo, kaynak tablodaki satırlar kadar boş değerli satırlarla sonuçlanacaktır.
Aynı ada sahip bazı sütunlar için, kaynak tablodaki veri değeri türü, hedef tablonun sütununun izin verilen türleri dizisine girmiyorsa, bu tür alanlarda boş değerler alırız.
Üçüncü durumu ele alalım. Aynı ada sahip sütunlar olması durumunda, hedef tablonun sütunu, kaynak tablonun sütunu ile tam uyumlu hale getirilmelidir.

Eşleşen adlara sahip sütunlar için tam veri kopyası

SimilarColumns = Yeni Dizi();

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

Eşleşirse Sütun<>O zaman tanımsız

// Sütun özelliklerini al.
İsim = 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(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

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

EndIf;

Bitiş Döngüsü;

// Kaynak tablonun satırları arasında dolaşın.
SourceTable Döngüsünden SourceTable'ın her Satırı için

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

// Eşleşen hücrelerdeki değerleri doldurun.
Her NameColumns Of Aynı NameColumns Döngüsü için
NewString[ColumnName] = SourceTableString[ColumnName];

Bitiş Döngüsü;

Bitiş Döngüsü;


Hedef tablodaki sütunu, özellikleri kaynak tablonun sütunuyla tamamen eşleşen yenisiyle değiştirmemiz gerekecek.
Bu nedenle, alıcı tablosunda aynı ada sahip bir sütun bulunursa, yeni sütunun tüm özelliklerini değişkenlerde toplarız. Ardından, eskisini silin ve yeni bir sütun oluşturun. Ardından kaynak tablonun satırları arasında dolaşıyoruz.
Döngüde, alıcı tablosuna yeni bir satır ekliyoruz ve eşleşen sütun dizisindeki sütunların adları arasında bir döngü açıyoruz.
Bu iç içe döngünün içinde alıcı tablonun hücrelerini kaynak tablonun hücresinin verileriyle doldururuz.

13. Tür kısıtlamaları olan "Değerler Tablosu" değerleri tablosuna sütunlar nasıl eklenir?

Bir sütun eklerken, sadece adını belirtebilir ve Add() yönteminin ikinci parametresine dokunmayın. Bu durumda, sütunun 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. Buraya sütun için izin verilen türün bir açıklamasını iletmek gerekir. Açıklamanın kendisi, yapıcı kullanılarak, dize türü adını bir parametre olarak ikincisine geçirerek (birçok tür varsa, virgülle ayırarak) veya geçerli türlerden oluşan bir dizi kullanılarak elde edilebilir.

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

// Sütun veri türlerindeki kısıtlamalar:
// Yalnızca "Contractors" dizininin öğeleri.
ValueTable.Columns.Add("Hesap", New TypeDescription("ReferenceReference.Hesaplar"));


Sütun verilerinin doldurulmasına 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, StringQualifiers yapıcısı kullanılarak bir nesne yaratılarak sağlanır. Ayrıca, bu nesne TypeDescription yapıcısının parametrelerinden biri olarak kullanılacaktır.

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

// String tipi veriler için limitler hazırlayın ve ayarlayın.
String Niteleyiciler = Yeni String Niteleyiciler(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Aynı şeyi sayı ve tarih niteleyicileri için de yapabilirsiniz.
Lütfen dikkat: tip tanımı, kurucu tarafından hem "sıfırdan" oluşturulabilir hem de mevcut bir tip tanımını temel olarak kullanabilirsiniz.

Bir Değer Tablosu Sütununun Veri Tipini Belirtmek için Mevcut Tip Bildirimlerini Kullanma

// Türlerin daha önce kullanılan açıklamasının uzantısı.
Sayı Niteleyicileri = Yeni Sayı Niteleyicileri(10, 2, ValidSign.Non-negative);
DateQualifiers = Yeni DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

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

Para ve malları hesaba katmak için iş dünyasında farklı tablolar yaygın olarak kullanılmaktadır. Hemen hemen her belge bir tablodur.

Bir tablo, depodan sevk edilecek malları listeler. Başka bir tabloda - bu mallar için ödeme yükümlülüğü.

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

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

Sorgu, yürütülmesinin bir sonucu olarak iki farklı şekilde erişilebilen bir tablo döndürür.

İlk - daha hızlı - seçim, ondan satır almak sadece sırayla mümkündür. İkincisi, sorgu sonucunu bir değerler tablosuna boşaltmak ve ardından buna rastgele erişim.

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

// tabloyu al
Seçim = Query.Execute().Select();
// sorgu sonucunun tüm satırlarını sırayla atla
iken Selection.Next() Döngüsü
Rapor(Seçim.Ad);
Bitiş Döngüsü;

//Seçenek 2 - değerler tablosuna yükleme
Sorgu = Yeni Sorgu("Dizin.Nomenklatürden Ad Seçin");
// tabloyu al
Tablo = Query.Execute().Upload().
// o zaman tüm satırları da atlayabiliriz
Tablo Döngüsünden her Satır için
Rapor(String.Name);
Bitiş Döngüsü;
// veya isteğe bağlı olarak dizelere erişin
String = Table.Find("Kürek", "Ad");

Önemli bir özellik, sorgu sonucundan elde edilen tabloda tüm sütunların güçlü bir şekilde yazılmasıdır. Bu, Nomenklatür aramasından Ad alanını talep ederek, 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 tablo ile çalışır.

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

O halde tabloyu formun üzerine yerleştirelim. Bunu yapmak için tabloyu kontrol panelinden sürükleyebilirsiniz. Benzer şekilde, menüden Form/Ekle kontrolünü seçebilirsiniz.

Veriler bir konfigürasyonda saklanabilir - o zaman, formunu düzenlemekte olduğunuz konfigürasyon nesnesinin mevcut (önceden eklenmiş) bir tablo bölümünü seçmeniz gerekir.

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

Bir tablo parçası seçerken, 1C'nin kendisi formdaki tabloya sütunlar ekleyecektir. Kullanıcı tarafından böyle bir tabloya girilen diziler, dizin/belge ile birlikte otomatik olarak kaydedilecektir.

Aynı Veri özelliğinde, rastgele bir ad girebilir ve ValueTable türünü seçebilirsiniz.

Bu, keyfi bir değerler tablosunun seçildiği anlamına gelir. Otomatik olarak sütun eklemeyecek, otomatik olarak kaydedilmeyecek, ancak onunla ne istersen yapabilirsin.

Tabloya sağ tıklayarak bir sütun ekleyebilirsiniz. Sütun özelliklerinde, adını (1C kodunda referans için), formdaki sütun başlığını, tablo bölümünün özniteliği ile bağlantıyı (ikincisi - isteğe bağlı bir tablo değilse, ancak tablo parçası seçildi).

Formdaki tablo özelliklerinde, kullanıcının satır ekleyip silemeyeceğini belirtebilirsiniz. Daha gelişmiş bir form, ViewOnly onay kutusudur. Bu özellikler, bilgileri görüntülemeye yönelik tabloları düzenlemek için kullanışlıdır, ancak düzenleme için değildir.

Tabloyu yönetmek için formda komut panelini görüntülemeniz gerekir. Form/Insert Control/Command Panel menü öğesini seçin.

Komut çubuğunun özelliklerinde, araç çubuğundaki düğmelerin otomatik olarak görünmesi için Otomatik Tamamlama onay kutusunu seçin.

Formdaki tablo (zayıf/yönetilen istemci)

Yönetilen bir formda bu eylemler biraz farklı görünür. Forma bir tablo bölümü yerleştirmeniz gerekiyorsa, Object dalını genişletin ve tablo bölümlerinden birini sola sürükleyin. Ve bu kadar!

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

Sütun eklemek için, bu form özniteliği üzerinde sağ fare düğmesi menüsünü kullanın, Öznitelik sütunu ekle'yi seçin.

Ardından tabloyu da sola sürükleyin.

Tablonun komut çubuğuna sahip olması için tablo özelliklerinde Kullanım - Komut çubuğu konumu bölümündeki değerleri seçin.

Bir tabloyu Excel'e dışa aktarma

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

Bunu yapmak için tabloda boş bir alana sağ tıklayın ve Listeyi Göster'i seçin.

Yönetilen (ince) bir istemcide, Tüm eylemler/Görüntü listesi menü öğesi kullanılarak benzer eylemler gerçekleştirilebilir.

1C 8.3 platformundaki (8.2) değer tablosu, bir geliştiricinin algoritmalarını uygulamak için yazılım geliştirmede kullanabileceği evrensel bir değerler topluluğudur. Aslında, 1C değer tablosu, sütunları ve sütunları olan dinamik bir değerler kümesidir.

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

"11 adımda 1C'de Programlama" kitabımdan bir yerde 1C'de programlamayı öğrenin

  1. Kitap, yeni başlayanlar için açık ve basit bir dilde yazılmıştır.
  2. 1C mimarisini anlamayı öğrenin;
  3. 1C dilinde kod yazmaya başlayacaksınız;
  4. Programlamanın temel tekniklerine hakim olun;
  5. Edinilen bilgileri bir görev kitabı yardımıyla pekiştirin;

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

  1. Çok erişilebilir ve anlaşılır bir dil
  2. kitap şu adrese gönderilir e-posta PDF formatında. 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. Tasarım yapmayı öğrenin yönetilen formlar 1C;
  6. Yönetilen formların temel ve gerekli unsurları ile ç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 faydalı olduysa, projeme istediğiniz miktarı aktararak destek olabilirsiniz:

manuel olarak ödenebilir:

Yandex.Money — 410012882996301
Web Parası - R955262494655

Gruplarıma katılın.

21 Eylül 2011'de yayınlandı

Değer tablosu 1C - bölüm 3. meta veri. Değerler tablosunun sütunları üzerinde yineleme

Bu yazımda sizlere "bilinmeyen" bir yapının değerler tablosu ile nasıl çalışılacağını, değerler tablosunun sütunları arasında nasıl iterasyon yapılacağını, sütun isimleri kullanmadan sütun ve satırlardan nasıl veri çıkarılacağını anlatacağım. (Bu makale, 1C sıfırdan bir dizi makaleye atıfta bulunur; 1c'yi sıfırdan programlama; 1c değerleri tablosu)

Malzemeyi açıklamak ve "canlı" program kodu örneklerimizi çalıştırabilmek için, bazılarına ihtiyacımız var. 1C değerlerinin test tablosu. Örneklerimizin bir kısmı bir değerler tablosundan veri çıkaracaktır, bu nedenle "Soyadı", "Ad", "Patronimik" üç sütunlu bir tablo oluşturacağız ve içine az miktarda veri gireceğiz - en fazla 3 satır :)

Öyleyse, 1C değerlerinin bir test tablosu oluşturalım ve dolduralım:

MyTR = Yeni Değer Tablosu; // "MyTR" değişkeni MyTR.Columns.Add("Soyadı"); // "Soyadı" sütununu oluşturun MyTR.Columns.Add("Ad"); // "Ad" sütununu oluşturun MyTM.Columns.Add("Patronimik"); // "Göbek adı" sütununu oluşturun // ilk satırı değerler tablomuza ekleyin NewRow = MyТЗ.Add(); NewLine.Surname = "Çapaev"; NewString.Name = "Vasili"; NewString.Patronymic = "İvanoviç"; // ikinci satırı ekleyin NewLine = MyТЗ.Add(); NewLine.Lastname = "Dzerzhinsky"; NewString.Name = "Felix"; NewLine.Patronymic = "Edmundovich"; // üçüncü satırı ekleyin NewLine = MyTR.Add(); NewRow.LastName = "Kotovsky"; NewString.Name = "Gregory"; NewString.Patronymic = "İvanoviç";

Test tablomuz üç sütundan oluşur: Ad, Soyadı, Patronimik; ve İç Savaşın kahramanlarının isimleriyle tamamlanmış üç satıra sahiptir.

İlk kod örneği, 1C değer tablosunun sütunları boyunca bir koleksiyon olarak yineleniyor.

// TK'nin tüm sütunlarının adlarını göster Her Sütun İçin TK.Columns'ımdan Bildir döngüsü("Sütun adı: " + Sütun.Adı); Bitiş Döngüsü;

Döngümüz, 1C mesaj kutusundaki tüm sütun adlarını gösterecektir:

Sütun adı: Soyadı Sütun adı: Adı Sütun adı: İkinci ad

Satır yineleme döngüsüne benzer şekilde (son makalede) sütunlar arasında yineleme yapmak için özel bir toplama döngüsü kullanıldığını görüyoruz. MyTM.Columns- bu, 1C değerleri tablosunun sütunlarının bir koleksiyonudur "MoyaTZ". Koleksiyon, tür nesneleri içeriyor "SütunDeğer Tablosu" Bu türdeki her nesne, değer tablosunun bir sütunudur ve özellikleri ve yöntemleri içerir. Bu özelliklere ve yöntemlere başvurarak, bir sütun hakkında gerekli bilgileri alırız veya onunla başka işlemler yaparız.

Örneğin, mülke erişim "İsim" (Sütun adı) geçerli sütunun adını alırız.

Döngünün başlığına dikkatinizi çekmek istiyorum: "Her Kolon MyTR.Columns Döngüsünden" adlı değişken "Kolon" tarafımızdan icat edilmiştir. Aynı adı kullanmak gerekli değildir. Bu değişkeni istediğiniz gibi adlandırabilirsiniz, örneğin "Mevcut Sütunum" O zaman yukarıdaki örnek şöyle görünecektir:

// TK'nin tüm sütunlarının adlarını yazdır Her MyCurrentColumn İçin MyTK.Columns'tan Bildir Döngü("Sütun adı: " + MyCurrentColumn.Name); Bitiş Döngüsü;

1C yürütme alt sistemi bu tür bir döngüyle karşılaştığında, döngünün her geçişinde koleksiyonumuzdan bir öğeyi belirtilen ada sahip değişkene atar. bu durum - koleksiyonun bir öğesi değer tablosu sütunları MyTM.Columns Ardından, geçerli sütunu içeren değişkene başvurur ve özelliği kullanırız. "İsim".

Sütun koleksiyonundaki her sütunun numarasını sütun adının yanında görüntülemenizi öneririm:

// değerler tablosunun tüm sütunlarının sayısını ve adlarını göster Her Sütun İçin MyTR.Columns'dan LoopColumnNumber = MyTR.Columns.Index(Column); // sütun numarasını al ColumnName = Column.Name; // sütun adını al Report("Sütun numarası:" + Sütun numarası + " Sütun adı: " + Sütun adı); Bitiş Döngüsü;

Metin 1C mesaj kutusunda görüntülenecektir:

Sütun numarası:0 Sütun adı: Soyadı Sütun numarası:1 Sütun adı: Adı Sütun numarası:2 Sütun adı: İkinci ad

1C değerler tablosundaki sütunların, tıpkı değerler tablosunun satırları gibi sıfırdan başlayarak numaralandırılmış olmasına dikkat edelim.

1C değerleri tablosundaki sütun sayısı

Değer tablosundaki sütun sayısını bulmak için sütun koleksiyonunda "Number()" yöntemini kullanıyoruz.

Number ofColumns = MyTM.Columns.Number(); Rapor(Sütun Sayısı);

Ekranda "3" sayısı görüntülenecektir. Gerçekten de tablomuzda üç sütun var: "Soyadı", "Ad", "Patronimik"

Sayısına (indeks) göre bir sütun nesnesi elde etme ve sütun indeksini kullanarak sütunlar üzerinde yineleme

Sütun endekslerini (sayıları) kullanarak değerler tablosunun tüm sütunları arasında bir döngü yapalım. Sütun numaralandırmasının sıfırdan başladığını unutmayın. Bu nedenle, "Sh" döngüsünün sayacını sıfırdan eksi bir sütun sayısına eşit bir sayıya çıkarmalıyız.

SC = 0 için MyTM.Columns.Quantity() ile - 1 Döngü CurrentColumn = MyTM.Columns[SC]; Bildir(CurrentColumn.Name); Bitiş Döngüsü;

Ekranda aşağıdakileri alacağız

Ad Soyad

Sanırım bu örnek açıktı. yönteme geçtik Miktar() sütun koleksiyonları" MyTM.Columns.Quantity()", sütun sayısını aldı ve bir sayaçla bir döngü başlattı sıfırönceki sütun sayısı eksi bir. Döngünün içinde, sütun koleksiyonundan her sütunu alırız ve mevcut sütun nesnesini bir değişkene atarız. Geçerli Sütun Daha sonra, değişken Geçerli Sütun mülke erişiyoruz İsim ve bu özelliğin değerini ekranda görüntüleyin: Bildir(CurrentColumn.Name);

Bir nesne özelliğini asla bir nesne yöntemiyle karıştırmamak önemlidir.

Bir özellik bir tür statik değerdir ve buna erişim parantez olmadan yazılır, örneğin CurrentColumn.Name. Yöntem, esasen bir nesnenin prosedürü veya işlevidir ve prosedürlere ve işlevlere yapılan çağrılar her zaman parantez içinde yazılır (giriş parametreleri olmasa bile). Örneğin: MyTM.Columns.Quantity()

Yönteme başvurursak, parantez yazmayı unutursak, 1C yorumlayıcısı bize bir hata mesajı verir ve yürütme için kodu çalıştırmaz. Yorumlayıcı bir yönteme değil, bir özelliğe eriştiğimizi varsayar - çünkü parantez yoktur. Ve o ada sahip özellikleri bulamayacak (çünkü sadece o ada sahip bir yöntem var) - bu hata mesajında ​​söylenecek.

Bir yöntem çağrısına bu kadar yanlış bir şekilde parantez koymayı unutursam, tercümanın yazacağı şey budur. MyTM.Columns.Quantity("Quantity()"den sonra parantez yok):

Nesne alanı bulunamadı (Sayım)

Bu durumda, "alan" ve "mülk", eş anlamlı veya 1C geliştiricilerinin terminolojisinde bir yanlışlık olarak anlaşılmalıdır. Bu kelimelerin her ikisini de aynı kavrama atıfta bulunmak için kullanırlar. Diğer programlama dillerinde olsa da bu terimler farklı kavramlar anlamına gelebilir.

Sütun numaralarını kullanarak 1C değer tablosundan veri alma

Başlangıç ​​olarak size tablomuzun ilk satırından veri almanın basit bir örneğini sunuyorum. Lütfen makalenin başından itibaren önceden doldurulmuş tabloyu kullandığımızı unutmayın. Tablonun ilk satırı ve en az bir sütunu olduğunu kesin olarak biliyoruz. Bu örneği boş bir tabloya uygularsak hata oluşacaktır. Yani:

FirstLine = MyTR; // ilk satırı al (sıfırdan numaralandırma) ColumnFirstValue = RowFirst; // ilk sütunun değerini al (sütun numaralandırması da sıfırdandır) Report(FirstColumnValue); // tablonun ilk satırındaki ilk sütunun değerini göster

Ekran şunları gösterecektir:

Çapaev

Önce [...] operatörünü kullanarak değer tablosuna erişerek değer tablosu satır nesnesini elde ettik. (nasıl yapıldığını unuttuysanız önceki yazılara bakabilirsiniz) Operatör içerisinde "0" argümanını geçtik. Bu, değerler tablosunun ilk satırının dizinidir. FirstLine = MyTR;

Ayrıca, [...] operatörünü kullanarak string nesnesine başvurma hakkımız da var. Bu ifadenin içinde, değerler tablosunun sütun numarasını geçtik, bu durumda da "0". Ve böylece "0" numaralı sütunun değerini elde ettik. geçerli satır"0" numaralı tablolar. Bu değeri ekranda gösterdik ve "Chapaev" dizisini temsil ediyor.

Örneğimizi biraz karmaşıklaştıralım:

FirstLine = MyTR; // ilk satırı al (sıfırdan numaralandırılmış) Report(FirstLine); // tablonun ilk satırındaki ilk sütunun değerini göster Report(FirstRow); // tablonun ilk satırındaki ikinci sütunun değerini göster Report(FirstRow); // tablonun ilk satırındaki üçüncü sütunun değerini göster

Şimdi değerler tablomuzun ilk satırının üç sütununun tümünden değerleri görüntüledik:

Çapaev Vasili İvanoviç

Şimdi bu örneği daha da değiştiriyorum, böylece değişken olmadan yapabiliriz "İlk satır"

Bildir(MyTM); // tablonun ilk satırındaki ilk sütunun değerini göster Report(MyTR); // tablonun ilk satırındaki ikinci sütunun değerini göster Report(MyTR); // tablonun ilk satırındaki üçüncü sütunun değerini göster

Ekran aynı olacak.

Çapaev Vasili İvanoviç

Yukarıdaki örnekte, bir değerler tablosunun belirli bir satırında ve belirli bir sütunundaki bir değere erişmek için iki operatörün ardışık çağrısını [...] şu şekilde kullanabileceğimizi gördük: ValueTable[IndexRows][IndexColumns]

Böylece, bir döngü oluşturmaya ve satır ve sütun indekslerini kullanarak tüm satırların ve tüm sütunların verilerini almaya hazırız:

RowCount = 0 için MyTM.Quantity() ile - 1 Döngü // satırlar arasında döngü ColumnCount = 0 için MyTM.Columns.Quantity() için - 1 Döngü // sütunlar arasında iç içe döngü // hücre değerini al (geçerli satırdan ve geçerli sütunlar) CellValue = MyTR[RowCount][ColumnCount]; // satır numarasını, sütun numarasını ve hücre değerini göster Report("Satır #" + RowCount + "sütun #" + ColumnCount + " = " + CellValue); Bitiş Döngüsü; Bitiş Döngüsü;

Ekranda aşağıdakiler görüntülenecektir:

Satır #0 sütun #0 = Chapaev Satır #0 sütun #1 = Vasily Line #0 sütun #2 = Ivanovich Satır #1 sütun #0 = Dzerzhinsky Satır #1 sütun #1 = Felix Satır #1 sütun #2 = Edmundovich Satır # 2 sütun No. 0 = Kotovsky Line No. 2 sütun No. 1 = Grigory Line No. 2 sütun No. 2 = Ivanovich

Biri diğerinin içine yerleştirilmiş iki döngü yardımıyla 1C değerler tablosunun tüm satırlarından tüm sütunların değerlerini görüntüledik. Bu durumda sütunların adlarını kullanmadık, sütun ve satırlara endekslerine göre atıfta bulunduk. Daha iyi anlamak için örnek içindeki yorumlara dikkat edin.

Sonuç olarak, örneğimizi biraz değiştirmeyi öneriyorum, böylece sütun numaraları yerine adlarını ekranda gösterecek. Ayrıca içeriği ekranda görüntülemek için daha prezentabl bir tasarım yapacağım.

RowCount = 0 için MyTR.Quantity() ile - 1 Döngü // satırlar arasında döngü Report(" ======= Satır # " + RowCount + " ======="); Rapor etmek(" "); // satır besleme (boş satır ekle) ColumnCount = 0 için MyTR.Columns.Quantity() - 1 Döngü // sütunlar arasında iç içe döngü // hücre değerini al (geçerli satırdan ve geçerli sütundan) CellValue = MyTR[RowCount ][SütunSayısı]; // sütunun adını al ColumnName = MyTR.Columns[ColumnCount].Name; // sütun adını ve hücre değerini göster Report(ColumnName + ": " + CellValue); Bitiş Döngüsü; Rapor etmek(" "); // yeni satır (boş satır ekle) EndCycle;

Şimdi, ekranımızdaki bilgiler daha temsili görünmeye başladı:

Satır No. 0 ======= Soyadı: Chapaev Adı: Vasily İkinci adı: Ivanovich ======= Satır No. 1 ======== Soyadı: Dzerzhinsky Adı: Felix Middle isim: Edmundovich ===== == Satır No. 2 ======= Soyadı: Kotovsky Adı: Grigory Patronimik: Ivanovich

Evet, neredeyse unutuyordum. İki operatörü [...][...] arka arkaya kullanırken, sütun dizini yerine bu sütunun adını iletebiliriz: ValueTable[RowIndex][ColumnName]

RowCount = 0 için MyTR.Quantity() ile - 1 Döngü // satırlar arasında döngü Report(" ======= Satır # " + RowCount + " ======="); Rapor etmek(" "); // satır besleme (boş bir satır ekleme) ColumnCount = 0 için MyTR.Columns.Quantity() - 1 Döngü // sütunlar arasında iç içe döngü ColumnName = MyTR.Columns[ColumnCount].Name; // nameCellValue sütununu al = MyTR[RowCount][ColumnName]; //

Ok ile işaretlenmiş satıra dikkat edin ". Bu satırda, mevcut sütunun indeksi yerine, mevcut sütunun adını içindeki argümana geçiyoruz. köşeli parantez[...] Sonuç aynı olacaktır.

Ve şimdi, bu makalenin sonuncusu.

1C değer tablosunun tüm verilerinin, satırların toplanması ve sütunların toplanması üzerinde yineleme yapmak için döngüler kullanılarak DOĞRU alınması

MyTR Döngüsünden Her CurrentRow için // string koleksiyonu arasında dolaşın Report(" ======= Satır # " + MyTR.Index(CurrentRow) + " ======="); Rapor etmek(" "); MyTR.Columns Döngüsünden Her CurrentColumn İçin // Sütunlar koleksiyonunda iç içe döngü ColumnName = CurrentColumn.Name; // nameCellValue sütununu al = CurrentRow[ColumnName]; // hücre değerini sütuna göre al AD Rapor(SütunAdı + ": " + CellValue); // sütun adını ve hücre değerini görüntüle EndCycle; Rapor etmek(" "); Bitiş Döngüsü;

Örnekte iki döngü kullanılmıştır. Sütun toplama döngüsü, satır döngüsünün içine yerleştirilmiştir. Yukarıdaki örnekleri incelediyseniz ve önceki makaleleri okuduysanız, bu örneğin nasıl çalıştığını anlamakta zorluk çekmezsiniz.

Son olarak, ara değişkenlerin kullanımını ortadan kaldırarak son örneğimizde kod satırlarının sayısını olabildiğince kısa tutacağım. Gerçek dünya uygulamalarında kullanılan bir "endüstriyel kod" örneği alacağız.

Bu, yalnızca ne yaptığınızı iyi anladığınızda yapılmalıdır. Kod çok karmaşıksa, daha sonra kendi kodunuzu anlamayı kolaylaştırmak için ara değişkenler bırakmak kabul edilebilir. Ayrıca, herhangi bir kod en azından minimum düzeyde yorumlanmalıdır, böylece bir süre sonra programın metinlerini anlamak daha kolay olacaktır.

MyTR Döngüsünden Her CurrentRow için // satırlar arasında dolaşın Report(" ======= Satır # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); MyTr.Columns Döngüsünden Her CurrentColumn için // sütunlar üzerinde yineleme Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); Bitiş Döngüsü; Rapor etmek(" "); Bitiş Döngüsü;

Ekrandaki çıktı değişmedi, önceki örnektekiyle aynı kaldı:

2 HAFTALIK KURS

"BAŞLANGIÇLAR İÇİN 1C'DE PROGRAMLAMA"

Kurs size e-posta ile gönderilecektir. Adım adım görevleri tamamlayarak bir programcı olun.

Katılmak için tek ihtiyacınız olan bir bilgisayar ve internet.

Kursa ücretsiz erişim:

sp-force-hide ( ekran: yok;).sp-form ( ekran: blok; arka plan: #eff2f4; dolgu: 5 piksel; genişlik: 270 piksel; maksimum genişlik: %100; sınır yarıçapı: 0 piksel; -moz-border -yarıçap: 0px; -webkit-border-radius: 0px; yazı tipi ailesi: Arial, "Helvetica Neue", sans-serif; arka planda tekrar: tekrar yok; arka plan konumu: merkez; arka plan boyutu: otomatik;) .sp-form girişi ( ekran: satır içi blok; opaklık: 1; görünürlük: görünür;).sp-form .sp-form-fields-wrapper ( kenar boşluğu: 0 otomatik; genişlik: 260px;).sp-form .sp -form-kontrol (arka plan: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-sol: 8.75px; padding-right: 8.75px; border -yarıçap: 4 piksel; -moz-border-yarıçap: 4 piksel; -webkit-border-yarıçap: 4 piksel; yükseklik: 35 piksel; genişlik: %100;).sp-form .sp-alan etiketi ( renk: #444444; yazı tipi- boyut: 13 piksel; yazı tipi stili: normal; yazı tipi ağırlığı: kalın;).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; arka plan rengi: #f4394c; renk: #ffffff; genişlik: %100; yazı tipi ağırlığı ht: 700; yazı tipi stili: normal yazı tipi ailesi: Arial, "Helvetica Neue", sans-serif; kutu gölgesi: yok -moz-box-shadow: yok; -webkit-box-shadow: yok; arka plan: lineer gradyan(üste, #e30d22 , #f77380);).sp-form .sp-button-container (metin hizalama: merkez; genişlik: otomatik;)