internet pencereler Android
Genişletmek

Değer tablosunun satırları arasında döngü 1s 8.2. Bir nesne özelliğini ve bir nesne yöntemini asla karıştırmamak önemlidir.

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 gerekir.

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 güzel 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);
Satırların FoundArray'ı = 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.

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 (bunun aslında yönetilen uygulamanın özü olduğunu açıklayın). 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 programatik bir değerler 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 olursa, manuel olarak da komut menüsünü yazıyoruz - 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ı yineleyebiliriz
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ısını (ikincisi - rastgele bir tablo seçilmemişse, ancak bir sütun) belirtebilirsiniz. tablo kısmı).

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 işlemler/Listeyi görüntüle menü öğesi kullanılarak benzer işlemler gerçekleştirilebilir.

21 Eylül 2011'de yayınlandı

Değer tablosu 1C – bölüm 3. Meta veriler. Değer tablosu sütunları arasında döngü yapma

Bu yazıda size "bilinmeyen" bir yapının değerler tablosuyla nasıl çalışılacağını, bir değerler tablosunun sütunları arasında nasıl yineleme yapılacağını, sütun adlarını kullanmadan sütunlardan ve satırlardan nasıl veri çıkarılacağını anlatacağım. (Bu makale sıfırdan 1C makaleleri; sıfırdan 1C programlama; 1C değerleri tablosu serisine aittir)

Materyali açıklamak ve kod örneklerimizi “canlı” olarak çalıştırabilmek için bazı bilgilere ihtiyacımız var. 1C değerlerinin test tablosu. Örneklerimizden bazıları bir değerler tablosundan veri çıkaracak, bu nedenle üç sütunlu “Soyadı”, “Ad”, “İkinci ad” içeren bir tablo oluşturacağız ve içine az miktarda veri gireceğiz - en fazla 3 satırlar :)

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

MyTZ = Yeni Değer Tablosu; // "MyTZ" değişkeninde saklanan yeni bir değerler tablosu oluşturun MyTZ.Columns.Add("Soyadı"); // "Soyadı" sütununu oluşturun MyTK.Columns.Add("Ad"); // "Ad" sütununu oluşturun MyTZ.Columns.Add("Patronymic"); // "İkinci ad" sütununu oluşturun // ilk satırı değerler tablomuza ekleyin NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "Vasily"; NewString.Orta ad = "Ivanovich"; // ikinci satırı ekleyin NewLine = MyTZ.Add(); NewString.LastName = "Dzerzhinsky"; NewRow.Name = "Felix"; NewString.Orta ad = "Edmundovich"; // üçüncü satırı ekleyin NewLine = MyTZ.Add(); NewLine.LastName = "Kotovsky"; NewLine.Name = "Gregory"; NewString.Orta ad = "Ivanovich";

Test tablomuz üç sütundan oluşmaktadır: Ad, Soyad, Patronimik; ve İç Savaş kahramanlarının isimlerinin yazılı olduğu üç dolu satırı vardır.

İlk kod örneği, 1C değer tablosunun sütunlarının koleksiyon olarak numaralandırılmasıdır.

// MyTZ.Columns Döngü Raporundan Her Bir Sütun İçin TK'nin tüm sütunlarının adlarını görüntüle("Sütun adı: " + Sütun.Adı); EndCycle;

Döngümüz 1C mesaj penceresindeki tüm sütun adlarını görüntüleyecektir:

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

Sütunlar arasında yineleme yapmak için, satır yineleme döngüsüne benzer (önceki makalede) özel bir koleksiyon yineleme döngüsünün kullanıldığını görüyoruz. MyTZ.Sütunlar- bu 1C değer tablosunun sütunlarının bir koleksiyonudur "MyTZ". Koleksiyon şu türden nesneler içeriyor: "Değer Tablosu Sütunu" Bu türdeki her nesne, değer tablosunun bir sütunudur ve özellikleri ve yöntemleri içerir. Bu özellik ve yöntemlere erişerek bir sütun hakkında gerekli bilgileri elde ediyoruz veya onunla başka bazı işlemler gerçekleştiriyoruz.

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

Serinin başlığına dikkatinizi çekmek isterim: “Herkes İçin Kolon MyTZ.Column Cycle'dan" Değişken adıyla birlikte "Kolon" tarafımızdan icat edilmiştir. Aynı adı kullanmanıza gerek yoktur. Bu değişkene istediğiniz herhangi bir şeyi arayabilirsiniz, örneğin "Geçerli Sütunum" O zaman yukarıdaki örnek şöyle görünecektir:

// MyTK.Columns Döngü Raporundan Her Bir MyCurrentColumn İçin TK'nin tüm sütunlarının adlarını görüntüle("Sütun adı: " + MyCurrentColumn.Name); EndCycle;

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 belirtilen adda bir değişkene bir öğe atar, bu durumda - bir koleksiyon öğesi değer tablosu sütunları MyTZ.Sütunlar Daha sonra geçerli sütunu içeren değişkene erişiriz 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ülemeyi öneriyorum:

// değerler tablosunun tüm sütunlarının sayısını ve adlarını görüntüle MyTZ.Columns Döngüsünden Her Sütun İçin ColumnNumber = MyTZ.Columns.Index(Column); // sütun numarasını al ColumnName = Column.Name; // sütun adını alın Report("Sütun Numarası:" + Sütun Numarası + " Sütun Adı: " + Sütun Adı); EndCycle;

1C mesaj penceresinde aşağıdaki metin 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ğer tablosundaki sütunların, tıpkı değer tablosunun satırları gibi sıfırdan başlayarak numaralandırıldığını lütfen unutmayın.

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

Değerler tablosundaki sütun sayısını bulmak için sütunların toplanmasında "Count()" yöntemini kullanıyoruz.

Sütun Sayısı = MyTZ.Columns.Quantity(); Rapor(Sütun Sayısı);

Ekranda "3" sayısı görüntülenecektir. Aslında tablomuzda üç sütun var: “Soyadı”, “Ad”, “Patronimik”

Bir sütun nesnesini numarasına (dizine) göre alma ve sütun dizinini kullanarak sütunları numaralandırma

Sütun indekslerini (sayıları) kullanarak değer tablosunun tüm sütunlarında arama döngüsü yapalım. Sütun numaralandırmanın sıfırdan başladığını unutmayın. Bu nedenle “Sch” çevrim sayacını sıfırdan sütun sayısı eksi bire eşit bir sayıya çıkarmamız gerekir.

Hesap İçin = 0 MyTZ.Columns.Quantity() tarafından - 1 Cycle CurrentColumn = MyTZ.Columns[Act]; Rapor(CurrentColumn.Name); EndCycle;

Ekranda aşağıdakileri elde edeceğiz

Ad Soyad

Bu örneğin açık olduğunu düşünüyorum. Yönteme döndük Miktar() sütun koleksiyonları" MyTZ.Columns.Quantity()", sütun sayısını aldı ve bir sayaçla bir döngü başlattı sıfırönce sütun sayısı eksi bir. Döngünün içinde, her sütunu sütun koleksiyonundan alırız ve geçerli 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: Rapor(CurrentColumn.Name);

Bir nesnenin özelliği ile nesnenin yöntemini asla karıştırmamak önemlidir.

Bir özellik belirli bir statik değerdir ve ona erişim parantez olmadan yazılır, örneğin CurrentColumn.Name. Bir yöntem aslında bir nesnenin bir prosedürü veya işlevidir ve prosedürlere ve işlevlere yapılan çağrılar her zaman parantezlerle yazılır (giriş parametreleri olmasa bile). Örneğin: MyTZ.Columns.Quantity()

Eğer bir metoda erişip parantezleri yazmayı unutursak 1C yorumlayıcısı bize hata mesajı verecek ve kodu çalıştırmayacaktır. Çünkü tercüman bir yönteme değil, bir özelliğe eriştiğimizi düşünecektir; çünkü parantez yoktur. Ancak bu ada sahip özellikleri bulamayacaktır (çünkü bu ada sahip yalnızca bir yöntem vardır) - bu, hata mesajında ​​​​belirtilecektir.

Bir yöntem çağrısında parantezleri bu kadar yanlış bir şekilde koymayı unutursam tercümanın yazacağı şey budur MyTZ.Columns.Quantity("Miktar()"dan sonra parantez olmadan):

Nesne alanı bulunamadı (Miktar)

Bu durumda, "alan" ve "özellik" eşanlamlı olarak veya 1C geliştiricilerinin terminolojisindeki bir yanlışlık olarak anlaşılmalıdır. Bu kelimelerin ikisini de aynı kavramı ifade etmek için kullanıyorlar. Her ne kadar diğer programlama dillerinde bu terimler farklı anlamlara gelse de.

Sütun numaralarını kullanarak 1C değerleri tablosundan veri elde etme

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 bir ilk satırı ve en az bir sütunu olduğundan eminiz. Bu örneği boş bir tabloya uygularsak hata oluşacaktır. Bu yüzden:

İlk Satır = MyTK; // ilk satırı al (sıfırdan numaralandırılmış) FirstColumnValue = FirstRow; // ilk sütunun değerini alıyoruz (sütun numaralandırması da sıfırdan) Report(FirstColumn'un Değeri); // tablonun ilk satırında ilk sütunun değerini göster

Ekran şunları gösterecektir:

Chapaev

Öncelikle [...] operatörünü kullanarak değer tablosuna erişerek bir değer tablosu satır nesnesi elde ettik. (nasıl yapılacağını unuttuysanız önceki yazılara bakabilirsiniz) Operatör içerisine “0” argümanını aktardık. Bu, değer tablosunun ilk satırının indeksidir. İlk Satır = MyTK;

Ayrıca, [...] operatörünü kullanarak bir dize nesnesine erişme hakkına da sahibiz. Bu operatörün içine değer tablosunun sütun numarasını, bu durumda ayrıca “0”ı aktardık. Ve böylece "0" numaralı mevcut tablo satırı için "0" numaralı sütunun değerini almış olduk. Bu değeri ekranda gösterdik ve “Chapaev” dizisini temsil ediyor.

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

İlk Satır = MyTK; // ilk satırı al (sıfırdan numaralandırılmış) Report(FirstLine); // tablonun ilk satırında ilk sütunun değerini göster Rapor(FirstRow); // ikinci sütunun değerini tablonun ilk satırında göster Rapor(FirstRow); // tablonun ilk satırında üçüncü sütunun değerini göster

Artık değer tablomuzun ilk satırının her üç sütunundaki değerleri görüntülemiş olduk:

Chapaev Vasili İvanoviç

Şimdi bu örneği de değiştireceğim, böylece değişken olmadan da yapabileceğiz. "İlk satır"

Rapor(MyTZ); // ilk sütunun değerini tablonun ilk satırında göster Rapor(MyTZ); // ikinci sütunun değerini tablonun ilk satırında göster Rapor(MyTZ); // tablonun ilk satırında üçüncü sütunun değerini göster

Ekranda da aynısı olacak

Chapaev Vasili İvanoviç

Yukarıdaki örnekte, bir değerler tablosunun belirli bir satırında ve belirli bir sütununda bulunan bir değere erişmek için, bu formda iki operatörün [...] sıralı çağrısını kullanabileceğimizi gördük: Değer Tablosu[Satır Dizini][Sütun Dizini]

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:

RowCounter için = 0 MyTZ.Quantity() ile - 1 Döngü // satırlar arasında geçiş yapın ColumnCounter için = 0 MyTZ.Columns.Quantity() ile - 1 Döngü // sütunlar arasında iç içe döngü // hücre değerini alın (geçerli satırdan) ve geçerli sütunlar) CellValue = MyTK[RowCounter][ColumnCounter]; // satır numarasını, sütun numarasını ve hücre değerini gösterir Report("Satır No" + Satır Sayısı + "sütun No" + Sütun Sayısı + " = " + CellValue); EndCycle; EndCycle;

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

Satır No. 0 Sütun No. 0 = Chapaev Satır No. 0 Sütun No. 1 = Vasily Satır No. 0 Sütun No. 2 = Ivanovich Satır No. 1 Sütun No. 0 = Dzerzhinsky Satır No. 1 Sütun No. 1 = Felix 1 No'lu Satır 2 No'lu Sütun = Edmundovich 2 No'lu Satır Sütun 0 = Kotovsky 2 No'lu Satır 2 No'lu Sütun 1 = Grigory 2 No'lu Satır 2 No'lu Sütun = İvanoviç

Biri diğerinin içine yerleştirilmiş iki döngü kullanarak, 1C değer tablosunun tüm satırlarındaki tüm sütunların değerlerini görüntüledik. Bu durumda sütun isimlerini kullanmadık, sütun ve satırlara indekslerine göre eriştik. Daha iyi anlamak için örnek içindeki açıklamalara dikkat edin.

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

LineCounter için = 0 MyTZ.Quantity() ile - 1 Döngü // satırlar arasında döngü Rapor(" ======= Satır No. " + LineCounter + " =======); Rapor etmek(" "); // satır besleme (boş bir satır ekleyin) ColumnCounter için = 0 By MyTZ.Columns.Quantity() - 1 Döngü // sütunlar arasında iç içe döngü // hücre değerini alın (geçerli satır ve geçerli sütundan) CellValue = MyTZ [RowCounter][ ColumnCounter]; // sütunun adını alın ColumnName = MyTZ.Columns[ColumnCounter].Name; // sütun adını ve hücre değerini görüntüle Rapor(ColumnName + ": " + CellValue); EndCycle; Rapor etmek(" "); // satır besleme (boş bir satır ekleme) EndCycle;

Artık ekranımızda bilgiler daha temsili görünmeye başladı:

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

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

LineCounter için = 0 MyTZ.Quantity() ile - 1 Döngü // satırlar arasında döngü Rapor(" ======= Satır No. " + LineCounter + " =======); Rapor etmek(" "); // satır besleme (boş bir satır ekleme) ColumnCounter için = 0 By MyTZ.Columns.Quantity() - 1 Döngü // sütunlar arasında iç içe döngü ColumnName = MyTZ.Columns[ColumnCounter].Name; // nameCell Value = MyTZ[RowCounter][ColumnName] sütununu alın; //

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

Ve şimdi bu yazıdaki son şey.

Bir satır koleksiyonu ve bir sütun koleksiyonu aracılığıyla döngüler kullanarak 1C değer tablosundaki tüm verileri DOĞRU şekilde elde etmek

MyTZ'den Her Bir CurrentLine için Döngü // bir dizi dizi boyunca döngü yapın Report(" ======= Satır No. " + MyTZ.Index(CurrentLine) + " ========"); Rapor etmek(" "); Her CurrentColumn için MyTZ.Columns Döngüsünden // bir sütun koleksiyonu boyunca yinelenen iç içe döngü ColumnName = CurrentColumn.Name; // sütunu alın nameCellValue = CurrentRow[ColumnName]; // hücre değerini BY sütun NAME Report(ColumnName + ": " + CellValue); // sütun adını ve hücre değerini görüntüle Döngü Sonu; Rapor etmek(" "); EndCycle;

Örnekte iki döngü kullanıldı. Bir dizi sütun arasında döngü yapmak için bir döngü, satırlar arasında döngü yapmak için bir döngünün içine yerleştirilmiştir. Yukarıdaki örnekler üzerinde çalışıp daha önceki yazıları okuduysanız bu örneğin nasıl çalıştığını anlamakta zorluk çekmeyeceksiniz.

Son olarak son örneğimizde ara değişkenlerin kullanımını ortadan kaldırarak kod satırı sayısını mümkün olduğunca azaltacağım. Gerçek problemlerde 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, kendi kodunuzu daha sonra anlamanızı kolaylaştırmak için ara değişkenleri bırakmak kabul edilebilir. Ayrıca herhangi bir koda en azından minimum düzeyde yorum yapılmalıdır, böylece bir süre sonra program metinlerinin anlaşılması daha kolay olacaktır.

MyTZ Döngüsünden Her Bir CurrentLine için // satırlar üzerinde yineleme yapın Report(" ======= Satır No. " + MyTZ.Index(CurrentLine) + " ======= + Semboller.PS); MyTZ.Columns'tan Her CurrentColumn için Döngü // sütunlar üzerinde yineleme yapın Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Rapor etmek(" "); EndCycle;

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

2 HAFTALIK KURS

"Yeni Başlayanlar İçin 1C'de Programlama"

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

Katılmak için sadece bir bilgisayara ve internete ihtiyacınız var

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; kenarlık yarıçapı: 0 piksel; -moz-border -yarıçap: 0px; -webkit-sınır-yarıçap: 0px; yazı tipi ailesi: Arial, "Helvetica Neue", sans-serif; arka plan tekrarı: tekrarlama yok; arka plan boyutu: otomatik;) .sp-form girişi ( görüntü: 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: 260 piksel;).sp-form .sp -form-kontrol ( arka plan: #ffffff; kenarlık rengi: #cccccc; kenarlık stili: katı; kenarlık genişliği: 1 piksel; yazı tipi boyutu: 15 piksel; sol dolgu: 8,75 piksel; sağ dolgu: 8,75 piksel; kenarlık -yarıçap: 4 piksel; -moz-sınır-yarıçap: 4 piksel; -webkit-sınır-yarıçap: 4 piksel; genişlik: %100;).sp-form .sp-alan etiketi ( renk: #444444; yazı tipi- boyut: 13px; 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 stili: normal; yazı tipi ailesi: Arial, "Helvetica Neue", sans-serif; kutu gölgesi: yok; -moz-box-shadow: yok; -webkit-kutusu-gölge: yok; arka plan: doğrusal degrade(üste, #e30d22 , #f77380);).sp-form .sp-button-container ( text-align: center; width: auto;)