1c tetapkan nilai di kolom. Penting untuk tidak bingung membedakan properti objek dan metode objek

17.08.2020 Kartu memori

Pertanyaan Membuat kolom tabel nilai berbagai jenis dalam 1C v8
Menjawab
Saat membuat kolom tabel nilai, Anda bisa meneruskan berbagai jenis, dan mungkin tipe tertentu. Array tipe digunakan ketika Anda perlu menentukan beberapa tipe berbeda untuk satu kolom.

Digunakan untuk menunjukkan tipe "objek umum" - "Deskripsi tipe". Oleh karena itu, pertama-tama kami akan menjelaskan apa itu “Deskripsi tipe” (“Deskripsi tipe nilai”).

"Deskripsi tipe nilai". Untuk menjelaskan tipe nilai properti yang valid berbagai objek sistem menggunakan objek khusus "Deskripsi Jenis". Dengan menggunakan objek ini, Anda bisa mendeskripsikan tipe nilai valid yang dapat ditetapkan ke properti. Untuk lebih membatasi kemungkinan nilai tipe primitif, Nomor, String, dan Tanggal disediakan kualifikasi. Kualifikasi menjelaskan parameter seperti panjang string atau angka, bagian tanggal yang valid, dll.

Sintaks metode “Deskripsi Tipe”.

Tipe Deskripsi Baru(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Parameter:
<Исходное описание типов> (opsional)
Jenis: DeskripsiJenis. Deskripsi awal jenis-jenis yang menjadi dasar pembuatan yang baru.
<Добавляемые типы> (opsional)
Jenis: Array, String. Array nilai tipe Tipe yang terdiri dari tipe-tipe yang akan digunakan dalam objek, atau string yang berisi nama-nama tipe yang dipisahkan dengan koma.
<Вычитаемые типы> (opsional)
Jenis: Array, String. Array nilai Tipe (atau string yang berisi nama tipe yang dipisahkan koma) terdiri dari tipe yang akan dikecualikan dari deklarasi awal yang ditentukan dalam parameter pertama.
<Квалификаторы числа> (opsional)
Jenis: Nomor Kualifikasi. Kualifikasi angka yang mendeskripsikan nilai valid dari tipe numerik.
<Квалификаторы строки> (opsional)
Jenis: QualifiersStrings. Kualifikasi string yang mendeskripsikan nilai valid dari suatu tipe string.
<Квалификаторы даты> (opsional)
Jenis: Tanggal Kualifikasi. Kualifikasi tanggal yang menjelaskan nilai valid dari tipe Tanggal.
Keterangan:
Membuat deskripsi tipe berdasarkan deskripsi tipe lain, dengan menambahkan beberapa tipe dan mengecualikan tipe lainnya. Jika qualifier baru tidak ditentukan, qualifier dari deklarasi tipe asli akan dipertahankan.
Contoh penggunaan objek “Type Description”:

// perluas deskripsi Tipe Valid dengan tipe baru Larik = Larik Baru; Himpunan. Tambahkan(Jenis( "Tautan Referensi. Metode")); Himpunan. Tambah(Jenis("Nomor" )); Tanda = ValidSign. Non-negatif; QuNumbers = QualifiersNumbers Baru (10, 2, Tanda Tangan); ValidTypes = NewTypeDescription(ValidTypes, Array, QNumbers);
Sekarang, sebenarnya, contoh pembuatan nilai kolom yang benar dari berbagai jenis dalam sebuah tabel.

Secara umum, cukup mendefinisikan tipe kolom sebagai berikut:

TK. Kolom. Menambahkan( "Urutkan Indeks", DescriptionTypes Baru ("Nomor" ) ); TK. Kolom. Tambah("NamaBagian",Deskripsi Tipe Baru("String" ) ) ; TK. Kolom. Tambahkan("DataCorr" , New TypeDescription("Tanggal" ) ) ; TK. Kolom. Menambahkan("Penghapusan Tanpa Syarat" , TypeDescription Baru("Boolean")); TK. Kolom. Tambahkan("Nomenklatur" , TypeDescription() ) Baru ;

TK. Kolom. Tambahkan("SectionData" , New TypeDescription("Struktur" ) ​​) ; // contoh pembuatan kolom "angka" dan "string" dengan klarifikasi parameter: TK. Kolom. Menambahkan(

"Persen Selesai" , DescriptionTypes Baru ("Nomor" , QualifiersNumbers Baru ( 18 , 2 ) ) ) ; TK. Kolom. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, AllowedLength.Variabel) ) ) ; TK. Kolom. Add("DecommissionedDate" , NewTypeDescription("Date" , , , NewDateQualifiers(DateParts.DateTime) ) ) ; Namun, secara lebih umum, array dilewatkan sebagai tipe kolom. Array digunakan ketika beberapa tipe perlu ditetapkan ke satu kolom. Maka definisi strukturnya akan menjadi seperti ini (contoh diberikan untuk jenis yang berbeda Larik = Larik Baru; Himpunan. Tambahkan(Jenis("String") ) ; TypeDescriptionString = TypeDescription Baru(Array, , KS) ; Himpunan. Jernih() ; Himpunan. Tambah(Jenis("Nomor") ) ; TypeDescriptionNumber = TypeDescription Baru(Array, , , CN) ; Himpunan. Jernih() ; Himpunan. Tambah(Jenis("Tanggal") ) ; DescriptionTypesDate = DescriptionTypes Baru(Array, , , , CD) ; Himpunan. Jernih() ; Himpunan. Tambahkan(Jenis("DirectoryLink.Nomenklatur" ) ) ; Tipe DeskripsiNomenklatur = Deskripsi Tipe Baru (Array) ; Himpunan. Jernih() ; Himpunan. Tambahkan(Jenis( ////////////////////////////////////////////////////////

"DirectoryLink.SeriNomenklatur"

) ) ; TypeDescriptionSeries = TypeDescription(Array) Baru; Himpunan. Jernih() ; Himpunan. Tambahkan(Jenis(

"DirectoryLink.Kualitas"

) ) ;


TypeDescriptionQuality = TypeDescription(Array) Baru;

Himpunan. Jernih() ; Himpunan. Tambahkan(Jenis("Boolean") ) ;
TypeDescriptionBoolean = TypeDescription(Array) baru;


// sebenarnya menambahkan kolom ke TK (membuat struktur TK masa depan)


TK. Kolom. Tambahkan("Nomenklatur", DeskripsiJenisNomenklatur) ;
TK. Kolom. Tambahkan("Kode", TypeDescriptionString) ;


TK. Kolom. Menambahkan(
"Nomenklatur Seri"

, DeskripsiJenisSeri);


TK. Kolom. Tambahkan("Kode Akun", Ketik DescriptionString) ;

TK. Kolom. Tambahkan("TanggalAksi" , TypeDescriptionDate) ;


TK. Kolom. Tambahkan("Kualitas" , TypeDescriptionQuality) ;
TK. Kolom. Tambahkan("NumberUS", DescriptionTypesNumber) ;

TK. Kolom. Tambahkan("Hapus", TypeDescriptionBoolean) ;
Array FoundRows = ValueTable.FindRows(SearchStructure);


Mari kita buat struktur pencarian, yang setiap elemennya akan berisi nama kolom sebagai kunci dan nilai yang diinginkan di kolom ini sebagai nilai. Kami meneruskan Struktur Pencarian sebagai parameter ke metode FindLines(). Hasilnya, kami mendapatkan baris tabel.
Jika Anda menambahkan pencarian ke struktur pencarian nilai yang diinginkan, misalnya juga pada kolom Responsible, maka dengan menerapkan metode FindRows() kita akan memperoleh semua baris yang Employee dan Responsible sama dengan nilai yang diinginkan.

7. Cara melakukan iterasi melalui tabel nilai dalam urutan acak

Untuk Setiap Baris Saat Ini Dari Tabel Nilai Loop
Laporan(BarisSaat Ini.Nama);
Siklus Akhir;

Hal yang sama menggunakan indeks:

SeniorIndex = NilaiTabel.Kuantitas() - 1;
Untuk Akun = 0 hingga Siklus SeniorIndex
Laporan(Nilai Tabel[Akun].Nama);
Siklus Akhir;


8. Menghapus baris tabel nilai yang ada

ValueTable.Delete(Baris yang akan dihapus);

berdasarkan indeks

ValueTable.Hapus(0);


9. Menghapus kolom tabel nilai yang ada

ValueTable.Columns.Delete(ColumnToDelete);


berdasarkan indeks

ValueTable.Columns.Delete(0);

Perlu diingat bahwa menghapus satu baris (atau kolom) "dari tengah" tabel nilai akan menyebabkan penurunan satu indeks dari baris yang terletak "setelah" yang dihapus.

10. Bagaimana cara mengisi tabel nilai jika nama kolom terdapat dalam variabel?

Baris Baru = ValueTable.Add();
Baris Baru[Nama Kolom] = Nilai;


11. Bagaimana cara mengisi seluruh kolom tabel nilai dengan nilai yang diinginkan?
Kolom Bendera Akuntansi Fiskal pada tabel nilai Tabel Nilai harus diisi dengan nilai False

Tabel Nilai. Isi Nilai (Salah, "Bendera Akuntansi Fiskal");


Kami menggunakan metode FillValues() untuk tabel nilai. Parameter pertama adalah nilai yang harus diisi. Parameter kedua adalah nama kolom yang akan diisi.

12. Bagaimana cara mengisi tabel nilai “Tabel Penerima” dengan data dari tabel nilai “Tabel Sumber”?

Jika Tabel Penerima belum ada pada saat operasi atau kolom sebelumnya tidak perlu disimpan, Anda dapat membuatnya sebagai salinan lengkap dari aslinya

Tabel penerima = Tabel sumber.Copy();


Opsi kedua: tabel ReceiverTable ada, dan akan sangat disayangkan jika kolomnya hilang dan batasan pada tipe data kolomnya. Namun Anda perlu mengisi data kolom yang namanya sesuai dengan nama tabel sumber.

Transfer data sebagian untuk kolom dengan nama yang cocok:

Untuk Setiap Baris SourceTable Dari Siklus SourceTable
FillPropertyValues(Baris Baru, SourceTableRow);
Akhir Siklus


Untuk setiap baris tabel sumber, baris baru ditambahkan ke tabel penerima dan nilai diisi pada kolom tabel baru yang namanya cocok dengan nama kolom tabel sumber

Jika tabel tidak memiliki kolom dengan nama yang sama, tabel tujuan akan berisi baris dengan nilai null sebanyak baris dalam tabel sumber.
Jika untuk beberapa kolom dengan nama yang sama tipe nilai data dari tabel sumber tidak termasuk dalam array tipe kolom yang diizinkan di tabel tujuan, kita akan mendapatkan nilai kosong di bidang tersebut.
Mari kita pertimbangkan kasus ketiga. Dalam hal kolom dengan nama yang sama, kolom tabel tujuan harus disesuaikan sepenuhnya dengan kolom tabel sumber.

Penyalinan penuh data untuk kolom dengan nama yang cocok

Kolom yang Sama = Array Baru();

Untuk Setiap Kolom Dari SourceTable.Columns Cycle
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Jika MatchingColumn<>Tidak terdefinisi Lalu

// Dapatkan properti kolom.
Nama = Kolom.Nama;
ValueType = Kolom.ValueType;
Header = Kolom.Header;
Lebar = Kolom.Lebar;

// Ganti kolom pada tabel tujuan.
Indeks = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Indeks);
ReceiverTable.Columns.Insert(Indeks, Nama, Tipe Nilai, Header, Lebar);

// Tambahkan nama berikutnya dari kolom yang cocok ke array.
Kolom yang Sama.Tambahkan(Kolom.Nama);

akhirJika;

Siklus Akhir;

// Menelusuri baris-baris tabel sumber.
Untuk setiap Baris SourceTable dari siklus SourceTable

// Menambahkan baris baru ke meja penerima.
Baris Baru = TableReceiver.Add();

// Isikan nilai pada sel yang cocok.
Untuk setiap Nama Kolom Dari Kolom dengan nama yang sama Siklus
BarisBaru[NamaKolom] = SourceTableRow[NamaKolom];

Siklus Akhir;

Siklus Akhir;


Kita harus mengganti kolom di tabel tujuan dengan yang baru, yang propertinya akan sepenuhnya cocok dengan kolom tabel sumber.
Oleh karena itu, jika kolom dengan nama yang sama ditemukan di tabel penerima, kami mengumpulkan semua properti untuk kolom baru dalam variabel. Selanjutnya, hapus yang lama dan buat kolom baru. Lalu kita mengulang baris-baris tabel sumber.
Dalam perulangan, kita menambahkan baris baru ke tabel penerima dan membuka perulangan di atas nama kolom dalam larik kolom yang cocok.
Di dalam loop bersarang ini, kita mengisi sel tabel tujuan dengan data sel tabel sumber.

13. Bagaimana cara menambahkan kolom ke tabel nilai “ValueTable” dengan batasan tipe?

Saat menambahkan kolom, Anda cukup menentukan namanya dan membiarkan parameter kedua metode Add() tidak tersentuh. Dalam hal ini, tipe data kolom bersifat arbitrer.

Menambahkan kolom tanpa menentukan tipe data

// Tambahkan kolom tanpa batasan tipe.
ValueTable.Columns.Add("Objek");


Anda dapat mengisi nilai parameter kedua. Di sana Anda perlu memberikan deskripsi jenis yang diizinkan untuk kolom tersebut. Deskripsi itu sendiri dapat diperoleh dengan menggunakan konstruktor, meneruskannya sebagai parameter nama string dari tipe tersebut (jika ada banyak tipe, dipisahkan dengan koma) atau array tipe yang valid.

Menambahkan kolom yang menunjukkan tipe data

// Batasan tipe data kolom:
// Hanya elemen dari direktori "Counterparty".
Tabel Nilai.Columns.Add("Akun", Deskripsi Jenis Baru("DirectoryLink.Accounts"));


Jika di antara tipe yang diperbolehkan untuk mengisi data kolom adalah string, Anda dapat membatasi kedalaman bit (panjangnya), menentukan penggunaan variabel atau panjang tetap. Semua ini dicapai dengan membuat objek menggunakan konstruktor String Qualifiers. Selanjutnya objek ini akan digunakan sebagai salah satu parameter konstruktor TypeDescription.

Menggunakan kualifikasi untuk menentukan tipe data kolom tabel nilai

// Mempersiapkan dan menetapkan batasan untuk data bertipe String.
Kualifikasi String = Kualifikasi String Baru (20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Tindakan serupa dapat dilakukan sehubungan dengan kualifikasi nomor dan tanggal.
Harap dicatat: deskripsi tipe dapat dibuat oleh konstruktor “dari awal” atau deskripsi tipe yang sudah ada dapat digunakan sebagai dasar.

Menggunakan deklarasi tipe yang ada untuk menentukan tipe data kolom tabel nilai

// Perpanjangan dari deskripsi tipe yang digunakan sebelumnya.
QualifiersNumbers = QualifiersNumbers Baru(10, 2, ValidSign.Non-negatif);
DateQualifiers = DateQualifiers Baru(DateParts.Date);
Extended ValidTypes = New TypeDescription(ValidTypes, "Nomor, Tanggal", Kualifikasi Nomor, Kualifikasi Tanggal);

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

(Artikel ini termasuk dalam rangkaian artikel 1C dari awal; pemrograman 1C dari awal; tabel nilai 1C)

Struktur penyimpanan data virtual dalam bentuk tabel - itulah adanya

Tabel nilai bukan merupakan objek permanen dari database 1C dan tidak disimpan di antara sesi peluncuran.

Tabel nilai 1C(TK) dibuat "on the fly" menggunakan kode program, dan kemudian pengerjaannya dilakukan dengan cara yang sama seperti objek program lainnya dari bahasa pemrograman 1C. Menggunakan pemanggilan metode dan mengakses properti objek tabel.

Dengan kata lain, pemrogram membuat tabel di memori, mengisinya dengan data, mengerjakannya, mengurutkan, mengelompokkan, menghitung total, dan seterusnya. Menerima data yang diperlukan untuk penggunaan lebih lanjut.

Mari buat tabel nilai dan isi dengan sesuatu. Harus diingat bahwa tabel nilai 1C tidak hanya dapat dibuat secara manual, dengan memanggil operator

Tabel Nilai Baru;

Tabel nilai sering kali merupakan hasil pemanggilan metode pada objek lain, misalnya hasil kueri mungkin dibuang ke tabel nilai, dan seterusnya.

Izinkan saya memberi Anda contoh sederhana segera.

// MyTZ = Tabel Nilai Baru; // membuat tabel nilai baru yang disimpan dalam variabel "MyTZ" MyTZ. Kolom. Tambahkan("Nama Belakang" ) ; // buat kolom "Nama Belakang" MyTZ. Kolom. Tambah("Nama" ) ; // buat kolom "Nama". Laporan (MyTZ); // menampilkan nilai variabel MyTZ //

Saya membuat tabel nilai 1C, dengan dua kolom: “Nama belakang”, “Nama depan”. Prosedur Laporan (TK Saya) akan menampilkan tipe variabel di jendela pesan MyTZ: Tabel Nilai

Tabel nilai kami kosong untuk saat ini. Mari tambahkan beberapa baris ke dalamnya, dengan nama depan dan belakang.

// mengisi tabel nilai // tambahkan baris pertama ke tabel nilai kita Baris Baru = MyTZ. Menambahkan() ; Baris Baru. Nama belakang = "Sidorov" ; Baris Baru. Nama = "Vasya" ;// tambahkan baris kedua ke tabel nilai kita

Baris Baru = MyTZ. Menambahkan() ; Baris Baru. Nama belakang = "Ivanov" ;

Baris Baru. Nama = "Petrus" ; Kami menerima tabel seperti ini:

Perlu diingat:

Nomor baris pada tabel nilai dimulai dari nol Mengapa kita membutuhkan nomor baris? Dan agar kita dapat mengakses baris terpisah dari tabel nilai, misalnya, ambil dan tampilkan baris ini di layar. // *** menampilkan nilai garis nol di layar *** (dalam kehidupan sehari-hari biasanya kita memberi nomor mulai dari satu, tetapi di sini - dari nol) // ambil baris nol dari tabel kita menggunakan indeks baris di tanda kurung siku OurZeroString = MyTZ[ 0] ; // menampilkan nilai kolom "Nama Belakang" yang disimpan di baris nol Laporan (OurNullString.Name) ; // menampilkan nilai kolom "Nama" dari baris yang sama

Hasilnya, layar akan menampilkan:

Sidorov Vasya

Sekarang, untuk yang sangat cerdas dan ringkas, saya akan menunjukkan contoh yang memungkinkan Anda mengakses nilai kolom di baris ini dan itu (Nilai kolom di baris ini dan itu adalah sel dari tabel nilai . Istilah tidak resmi, tapi nyaman). Tapi tanpa menggunakan variabel perantara seperti "OurZeroString".

Untuk menampilkan nilai sel dari baris kedua (jangan lupa baris kedua, tetapi indeks baris ini adalah satu, jadi penomorannya dimulai dari nol)

Terakhir, poin terakhir dalam artikel ini. Saya tunjukkan contoh mengakses satu baris tabel nilai berdasarkan indeks (nomor baris). Bentuk universal untuk membaca atau menetapkan konten sel adalah: "MyValueTable[RowNumber].ColumnName"

Sekarang saya akan memberi Anda siklus lengkap dalam mengeluarkan isi tabel nilai. Tanpa penjelasan detail, biar bisa juga memutar otak :)

// // ulangi dan tampilkan semua baris tabel nilai kita// Untuk Nomor Baris = 0 Menurut MyTZ. Quantity() - 1 Laporan Siklus (MyTZ[LineNumber] .LastName) ; // menampilkan nilai kolom "Nama Belakang". Laporan (MyTK[Nomor Baris] . Nama); // menampilkan nilai kolom "Nama". Siklus Akhir;

Sebagai hasil dari menjalankan loop ini, layar berikut akan ditampilkan:

Sidorov Vasya Ivanov Petya

Di sini saya telah memberi tahu Anda dasar-dasar bekerja dengan tabel nilai 1C. Informasi ini berlaku untuk 1C 8.0, 8.1, 8.2. Detail menarik tentang objek “tabel nilai 1C” tidak berakhir di situ. Objek ini memiliki kemampuan luar biasa untuk memudahkan pekerjaan dengan data. Saya akan membicarakan hal ini di artikel berikut.

Novel Degtyarev.

Bagaimana cara belajar memprogram dalam 1C dari awal?

Bagaimana cara bekerja sebagai programmer 1C dan menghasilkan hingga 150.000 rubel per bulan?

DAFTAR GRATIS

KURSUS 2 MINGGU

"PEMROGRAMAN DALAM 1C UNTUK PEMULA"

Kursus akan tiba e-mail. Menjadi seorang programmer dengan menyelesaikan tugas langkah demi langkah.

Untuk berpartisipasi Anda hanya memerlukan komputer dan Internet

Akses gratis ke kursus:

Sp-force-hide ( tampilan: tidak ada;).sp-form ( tampilan: blok; latar belakang: #eff2f4; padding: 5px; lebar: 270px; lebar maksimal: 100%; radius batas: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; ukuran latar belakang: otomatis;) .sp-form input ( tampilan: inline-block; opacity: 1; visibilitas: terlihat;).sp-form .sp-form -fields-wrapper ( margin: 0 otomatis; lebar: 260px;).sp-form .sp -form-control ( latar belakang: #ffffff; warna batas: #cccccc; gaya batas: padat; lebar batas: 1 piksel; ukuran font: 15 piksel; bantalan-kiri: 8,75 piksel; bantalan-kanan: 8,75 piksel; batas -radius: 4 piksel; -moz-batas-radius: 4 piksel; .sp-form .sp-field label ( warna: #444444; ukuran font: 13px; gaya font: normal; berat font: tebal;).sp-form .sp-button ( radius batas: 4px; - moz-border-radius: 4px; -webkit-border-radius: 4px; warna latar: #f4394c; warna: #ffffff; gaya font: normal; keluarga font: Arial, "Helvetica Neue", sans-serif; bayangan kotak: tidak ada; -moz-box-shadow: tidak ada; -webkit-box-shadow: tidak ada; latar belakang: gradien linier(ke atas, #e30d22 , #f77380);).sp-form .sp-button-container ( perataan teks: tengah; lebar: otomatis;)

Cari di tabel nilai 1C

Metode apa saja yang ada dan bagaimana mencari beberapa nilai secara bersamaan.

Ada dua metode khusus untuk mencari tabel nilai:

1. Temukan

TVHorizon = Direktori.Nomenklatur.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//kita juga dapat menentukan kolom mana yang akan dicari untuk mempercepat pencarian
FoundString = TZNomenclature.Find(TVHorizon, "Nomenklatur");

Metode ini mengembalikan baris pertama yang ditemukan dengan nilai yang diinginkan, atau Tidak Terdefinisi jika tidak menemukannya. Oleh karena itu, akan lebih mudah menggunakannya untuk mencari nilai unik, karena jika tidak, ketika suatu nilai ditemukan, Anda harus menghapusnya dari tabel untuk menemukan nilai berikutnya.

Untuk menghindari kerumitan ini, ada metode berikut yang memungkinkan Anda menemukan array string yang cocok:

2. TemukanString


Struktur Seleksi.Sisipkan("Tata Nama", TVHorizon); // pertama-tama tunjukkan kolom tempat mencarinya, lalu apa yang harus dicari.

Metode ini selalu mengembalikan array, tapi bisa kosong jika tidak ada yang ditemukan. Dan metode ini, seperti metode sebelumnya, mengembalikan baris tabel nilai itu sendiri, dan bukan nilai itu sendiri dalam larik terpisah. Oleh karena itu, dengan mengubah nilai dalam string array atau, seperti pada metode sebelumnya, untuk string yang ditemukan, Anda akan mengubah nilai dalam tabel nilai yang diproses.

Hal baik lainnya tentang metode ini adalah ia dapat mencari beberapa kolom tabel nilai sekaligus:


SelectionStructure = Struktur Baru;
Struktur Seleksi.Sisipkan("Tata Nama", TVHorizon);
Struktur Seleksi.Insert("Kuantitas", 10);
FoundArray Baris = TZNomenclature.FindLines(SelectionStructure);

Satu-satunya hal negatif, seperti yang Anda lihat, adalah Anda tidak dapat menggunakan jenis perbandingan lain selain “sama dengan”

Diterbitkan 21 September 2011

Tabel nilai 1C – bagian 3. Metadata. Mengulangi kolom tabel nilai

Pada artikel ini saya akan memberi tahu Anda cara bekerja dengan tabel nilai dari struktur "tidak diketahui", cara melakukan iterasi melalui kolom tabel nilai, cara mengekstrak data dari kolom dan baris tanpa menggunakan nama kolom. (Artikel ini termasuk dalam rangkaian artikel 1C dari awal; pemrograman 1C dari awal; tabel nilai 1C)

Untuk menjelaskan materi dan agar dapat menjalankan contoh kode kita secara “langsung”, kita memerlukan beberapa tabel uji nilai 1C. Beberapa contoh kita akan mengekstrak data dari tabel nilai, jadi kita akan membuat tabel dengan tiga kolom “Nama Belakang”, “Nama Depan”, “Nama Tengah” dan memasukkan sejumlah kecil data ke dalamnya - sebanyak 3 baris :)

Jadi, mari buat tabel uji nilai 1C dan isi:

MyTZ = Tabel Nilai Baru; // membuat tabel nilai baru yang disimpan dalam variabel "MyTZ" MyTZ.Columns.Add("Last Name"); // buat kolom "Nama Belakang" MyTZ.Columns.Add("Nama"); // buat kolom "Nama" MyTZ.Columns.Add("Patronymic"); // buat kolom "Nama tengah" // tambahkan baris pertama ke tabel nilai kita NewLine = MyTZ.Add();

Tabel pengujian kami terdiri dari tiga kolom: Nama Depan, Nama Belakang, Patronimik; dan memiliki tiga baris berisi nama pahlawan Perang Saudara.

Contoh kode pertama adalah enumerasi kolom tabel nilai 1C sebagai kumpulan.

// menampilkan nama seluruh kolom TK Untuk Setiap Kolom Dari MyTZ.Columns Cycle Report("Nama Kolom: " + Nama Kolom);

Siklus Akhir;

Siklus kami akan menampilkan semua nama kolom di jendela pesan 1C:

Nama kolom: Nama belakang Nama kolom: Nama depan Nama kolom: Nama tengah Kita melihat bahwa untuk melakukan iterasi melalui kolom, siklus iterasi koleksi khusus digunakan, mirip dengan siklus iterasi baris (di artikel sebelumnya). Kolom TK Saya - ini adalah kumpulan kolom tabel nilai 1C"MyTZ" . Koleksinya berisi objek bertipe"Kolom Tabel Nilai"

Setiap objek jenis ini adalah kolom tabel nilai dan berisi properti dan metode. Dengan mengakses properti dan metode ini, kami memperoleh informasi yang diperlukan tentang satu kolom atau melakukan beberapa tindakan lain dengannya. Misalnya saja mengakses properti ("Nama" Kolom.Nama

) kita mendapatkan nama kolom saat ini. Saya ingin menarik perhatian Anda pada judul serial ini: “Untuk Semua Orang Kolom Dari MyTZ.Column Cycle" Variabel dengan nama"Kolom" ditemukan oleh kami. Tidak perlu menggunakan nama yang sama. Anda dapat memberi nama variabel ini sesuka Anda, misalnya"Kolom Saya Saat Ini"

Maka contoh di atas akan terlihat seperti ini:

// menampilkan nama semua kolom TK Untuk Setiap MyCurrentColumn Dari MyTK.Columns Cycle Report("Nama Kolom: " + MyCurrentColumn.Name); Siklus Akhir; Ketika subsistem eksekusi 1C bertemu dengan siklus jenis ini, dengan setiap lintasan siklus, subsistem tersebut menetapkan satu elemen dari koleksi kami ke variabel dengan nama yang ditentukan, dalam hal ini - Kita melihat bahwa untuk melakukan iterasi melalui kolom, siklus iterasi koleksi khusus digunakan, mirip dengan siklus iterasi baris (di artikel sebelumnya). satu elemen koleksi Misalnya saja mengakses properti.

kolom tabel nilai

Dan kemudian kita mengakses variabel yang berisi kolom saat ini dan menggunakan properti

Saya mengusulkan untuk menampilkan di sebelah nama kolom nomor setiap kolom dalam kumpulan kolom:

// menampilkan nomor dan nama semua kolom tabel nilai Untuk Setiap Kolom Dari MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // dapatkan nomor kolom ColumnName = Column.Name; // dapatkan nama kolom Report("ColumnNumber:" + ColumnNumber + "ColumnName: " + ColumnName);

Siklus Akhir;

Jumlah kolom dalam tabel nilai 1C

Untuk mengetahui jumlah kolom pada tabel nilai, kita menggunakan metode "Hitungan()" pada kumpulan kolom.

Jumlah Kolom = MyTZ.Columns.Quantity();

Laporan (Jumlah Kolom);

Angka "3" akan ditampilkan di layar. Memang benar, tabel kami memiliki tiga kolom: "Nama belakang", "Nama depan", "Patronimik"

Mendapatkan objek kolom berdasarkan nomornya (indeks) dan menghitung kolom menggunakan indeks kolom

Mari kita membuat siklus pencarian melalui semua kolom tabel nilai menggunakan indeks kolom (angka). Ingatlah bahwa penomoran kolom dimulai dari nol. Oleh karena itu, kita harus meningkatkan penghitung siklus “Sch” dari nol menjadi angka yang sama dengan jumlah kolom dikurangi satu.

Untuk Akun = 0 Oleh MyTZ.Columns.Quantity() - 1 Siklus CurrentColumn = MyTZ.Columns[Act];

Laporan(Kolom Saat Ini.Nama);

Siklus Akhir; Di layar kita akan mendapatkan yang berikut ini Nama belakang Nama depan Patronimik Saya rasa contoh ini sudah jelas. Kami beralih ke metodenya Kuantitas() koleksi kolom" MyTZ.Kolom.Kuantitas() ", mendapatkan jumlah kolom, dan memulai perulangan dengan penghitung dari nol ke jumlah kolom dikurangi satu ke. Di dalam loop kita mendapatkan setiap kolom dari kumpulan kolom dan menetapkan objek kolom saat ini ke variabel Kolom Saat Ini Selanjutnya variabel kami mengakses properti

Nama

dan tampilkan nilai properti ini di layar: Laporan(Kolom Saat Ini.Nama); Penting untuk tidak mengacaukan properti suatu objek dan metode suatu objek. Saya rasa contoh ini sudah jelas. Kami beralih ke metodenya

Properti adalah nilai statis tertentu dan akses ke sana ditulis tanpa tanda kurung, misalnya

Kolom Saat Ini.Nama . Metode pada dasarnya adalah prosedur atau fungsi suatu objek, dan panggilan ke prosedur dan fungsi selalu ditulis dengan tanda kurung (meskipun tidak ada parameter masukan). Misalnya: Jika kita memanggil suatu metode dan lupa menulis tanda kurung, juru bahasa 1C akan memberi kita pesan kesalahan dan tidak akan menjalankan kodenya. Karena penerjemah akan menganggap bahwa kita mengakses properti daripada metode - karena tidak ada tanda kurung. Namun ia tidak akan dapat menemukan properti dengan nama tersebut (karena hanya ada metode dengan nama tersebut) - yang akan dinyatakan dalam pesan kesalahan.

Inilah yang akan ditulis oleh penerjemah jika saya lupa memberi tanda kurung pada pemanggilan metode dengan cara yang salah

Dalam hal ini, "bidang" dan "properti" harus dipahami sebagai sinonim, atau ketidakakuratan dalam terminologi pengembang 1C. Mereka menggunakan kedua kata ini untuk merujuk pada konsep yang sama. Meskipun dalam bahasa pemrograman lain istilah-istilah ini mungkin memiliki arti yang berbeda.

Memperoleh data dari tabel nilai 1C menggunakan nomor kolom

Untuk memulainya, saya menawarkan contoh sederhana untuk memperoleh data dari baris pertama tabel kami. Harap dicatat bahwa kami menggunakan tabel yang sudah diisi sebelumnya dari awal artikel. Kita tahu pasti bahwa tabel tersebut memiliki baris pertama dan setidaknya satu kolom. Jika kita menerapkan contoh ini pada tabel kosong, kesalahan akan terjadi. Jadi:

Baris Pertama = MyTK; // ambil baris pertama (diberi nomor dari nol) FirstColumnValue = FirstRow; // ambil nilai kolom pertama (penomoran kolom juga dari awal) Report(FirstColumnValue); // menampilkan nilai kolom pertama pada baris pertama tabel

Layar akan menampilkan:

Chapaev

Pertama-tama kita memperoleh objek baris tabel nilai dengan mengakses tabel nilai menggunakan operator [...]. (jika Anda lupa cara melakukannya, Anda dapat melihat artikel sebelumnya) Kami meneruskan argumen “0” di dalam operator. Ini adalah indeks baris pertama tabel nilai. Baris Pertama = MyTK;

Selanjutnya, kita juga mempunyai hak untuk mengakses objek string menggunakan operator [...]. Di dalam operator ini kami meneruskan nomor kolom tabel nilai, dalam hal ini juga “0”. Dan dengan demikian, kami menerima nilai kolom bernomor "0" untuk baris tabel saat ini bernomor "0". Kami menampilkan nilai ini di layar dan ini mewakili string “Chapaev”.

Mari kita sedikit memperumit contoh kita:

Baris Pertama = MyTK; // ambil baris pertama (diberi nomor dari nol) Report(FirstLine); // menampilkan nilai kolom pertama pada baris pertama tabel Laporan(Baris Pertama); // menampilkan nilai kolom kedua pada baris pertama tabel Laporan(Baris Pertama); // menampilkan nilai kolom ketiga pada baris pertama tabel

Kami sekarang telah menampilkan nilai dari ketiga kolom pada baris pertama tabel nilai kami:

Chapaev Vasily Ivanovich

Sekarang saya juga akan memodifikasi contoh ini sehingga kita bisa melakukannya tanpa variabel "Baris Pertama"

Laporan(MyTZ); // menampilkan nilai kolom pertama pada baris pertama tabel Laporan(MyTZ); // menampilkan nilai kolom kedua pada baris pertama tabel Laporan(MyTZ); // menampilkan nilai kolom ketiga pada baris pertama tabel

Itu akan sama di layar

Chapaev Vasily Ivanovich

Kita melihat pada contoh di atas bahwa untuk mengakses nilai yang terletak di baris tertentu dan kolom tertentu dari tabel nilai, kita dapat menggunakan panggilan berurutan dari dua operator [...] dalam bentuk ini: Tabel Nilai[Indeks Baris][Indeks Kolom]

Jadi, kita siap membuat loop dan mendapatkan data semua baris dan semua kolom menggunakan indeks baris dan kolom:

For RowCounter = 0 Oleh MyTZ.Quantity() - 1 Loop // loop melewati baris For ColumnCounter = 0 Oleh MyTZ.Columns.Quantity() - 1 Loop // loop bersarang melalui kolom // ambil nilai sel (dari baris saat ini dan kolom saat ini) CellValue = MyTK[RowCounter][ColumnCounter];

// menampilkan nomor baris, nomor kolom dan nilai sel Report("Nomor Baris" + Penghitung Baris + "Nomor kolom" + Penghitung Kolom + " = " + Nilai Sel);

Siklus Akhir;

Siklus Akhir;

Berikut ini akan ditampilkan di layar:

Baris No. 0 kolom No. 0 = Chapaev Baris No. 0 kolom No. 1 = Vasily Baris No. 0 kolom No. Baris No.1 kolom No.2 = Edmundovich Baris No.2 kolom No.0 = Jalur Kotovsky No.2 kolom No.1 = Grigory Baris No.2 kolom No.2 = Ivanovich

Dengan menggunakan dua siklus, salah satunya bersarang di dalam siklus lainnya, kami menampilkan nilai semua kolom dari semua baris tabel nilai 1C. Dalam hal ini, kami tidak menggunakan nama kolom, tetapi mengakses kolom dan baris berdasarkan indeksnya. Untuk pemahaman lebih lanjut, perhatikan komentar di dalam contoh.

Baris No.0 ======= Nama belakang: Chapaev Nama depan: Vasily Patronimik: Ivanovich ======= Baris No. 1 ======= Nama belakang: Dzerzhinsky Nama depan: Felix Patronimik: Edmundovich ===== == Baris No. 2 ======= Nama belakang: Kotovsky Nama depan: Grigory Patronimik: Ivanovich

Ya, saya hampir lupa. Saat menggunakan dua operator [...][...] berturut-turut, kita dapat meneruskan nama kolom ini alih-alih indeks kolom: Tabel Nilai[Indeks Baris][Nama Kolom]

Untuk LineCounter = 0 Oleh MyTZ.Quantity() - 1 Loop // loop melalui baris Report(" ======= No. Baris " + LineCounter + " ========");

Laporan(" "); // umpan baris (memasukkan baris kosong) For ColumnCounter = 0 Oleh MyTZ.Columns.Quantity() - 1 Loop // loop bersarang melalui kolom ColumnName = MyTZ.Columns[ColumnCounter].Name; // ambil nama kolomCell Value = MyTZ[RowCounter][ColumnName]; //

Perhatikan baris yang ditandai dengan panah ". Di baris ini, alih-alih indeks kolom saat ini, kita meneruskan nama kolom saat ini ke argumen dalam tanda kurung siku [...] Hasilnya akan sama.

Dan sekarang, hal terakhir dalam artikel ini.

BENAR memperoleh semua data dari tabel nilai 1C menggunakan loop melalui kumpulan baris dan kumpulan kolom

Untuk Setiap CurrentLine Dari MyTZ Loop // loop melalui kumpulan string Report(" ======= Nomor Baris. " + MyTZ.Index(CurrentLine) + " =======");

Laporan(" "); Untuk Setiap CurrentColumn Dari MyTZ.Columns Loop // loop bersarang yang melakukan iterasi melalui kumpulan kolomColumnName = CurrentColumn.Name; // ambil nama kolomCellValue = CurrentRow[ColumnName]; // dapatkan nilai sel BERDASARKAN kolom NAMA Laporan(Nama Kolom + ": " + Nilai Sel); // menampilkan nama kolom dan nilai sel Akhir Siklus;

Ini hanya boleh dilakukan jika Anda memiliki pemahaman yang baik tentang apa yang Anda lakukan. Jika kodenya sangat kompleks, boleh saja meninggalkan variabel perantara agar lebih mudah memahami kode Anda nanti. Selain itu, kode apa pun harus diberi komentar setidaknya minimal, sehingga setelah beberapa waktu akan lebih mudah untuk memahami teks program.

Untuk Setiap CurrentLine Dari Siklus MyTZ // ulangi baris Report(" ======= Nomor Baris " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS);

Untuk Setiap CurrentColumn Dari MyTZ.Columns Loop // ulangi kolom Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]);

KURSUS 2 MINGGU

"PEMROGRAMAN DALAM 1C UNTUK PEMULA"

Siklus Akhir;

Untuk berpartisipasi Anda hanya memerlukan komputer dan Internet

Akses gratis ke kursus:

Sp-force-hide ( tampilan: tidak ada;).sp-form ( tampilan: blok; latar belakang: #eff2f4; padding: 5px; lebar: 270px; lebar maksimal: 100%; radius batas: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; ukuran latar belakang: otomatis;) .sp-form input ( tampilan: inline-block; opacity: 1; visibilitas: terlihat;).sp-form .sp-form -fields-wrapper ( margin: 0 otomatis; lebar: 260px;).sp-form .sp -form-control ( latar belakang: #ffffff; warna batas: #cccccc; gaya batas: padat; lebar batas: 1 piksel; ukuran font: 15 piksel; bantalan-kiri: 8,75 piksel; bantalan-kanan: 8,75 piksel; batas -radius: 4 piksel; -moz-batas-radius: 4 piksel; .sp-form .sp-field label ( warna: #444444; ukuran font: 13px; gaya font: normal; berat font: tebal;).sp-form .sp-button ( radius batas: 4px; - moz-border-radius: 4px; -webkit-border-radius: 4px; warna latar: #f4394c; warna: #ffffff; gaya font: normal; keluarga font: Arial, "Helvetica Neue", sans-serif; bayangan kotak: tidak ada; -moz-box-shadow: tidak ada; -webkit-box-shadow: tidak ada; latar belakang: gradien linier(ke atas, #e30d22 , #f77380);).sp-form .sp-button-container ( perataan teks: tengah; lebar: otomatis;)