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.
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”:
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"
) ) ;
Himpunan. Jernih() ; Himpunan. Tambahkan(Jenis("Boolean") ) ;
TypeDescriptionBoolean = TypeDescription(Array) baru;
TK. Kolom. Tambahkan("Nomenklatur", DeskripsiJenisNomenklatur) ;
TK. Kolom. Tambahkan("Kode", TypeDescriptionString) ;
, DeskripsiJenisSeri);
TK. Kolom. Tambahkan("TanggalAksi" , TypeDescriptionDate) ;
TK. Kolom. Tambahkan("Hapus", TypeDescriptionBoolean) ;
Array FoundRows = ValueTable.FindRows(SearchStructure);
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;
ValueTable.Delete(Baris yang akan dihapus);
berdasarkan indeks
ValueTable.Hapus(0);
ValueTable.Columns.Delete(ColumnToDelete);
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;
Tabel Nilai. Isi Nilai (Salah, "Bendera Akuntansi Fiskal");
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();
Transfer data sebagian untuk kolom dengan nama yang cocok:
Untuk Setiap Baris SourceTable Dari Siklus SourceTable
FillPropertyValues(Baris Baru, SourceTableRow);
Akhir Siklus
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;
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");
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"));
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);
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;)
Ada dua metode khusus untuk mencari tabel nilai:
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:
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:
Satu-satunya hal negatif, seperti yang Anda lihat, adalah Anda tidak dapat menggunakan jenis perbandingan lain selain “sama dengan”
Diterbitkan 21 September 2011
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 :)
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.
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;
Untuk mengetahui jumlah kolom pada tabel nilai, kita menggunakan metode "Hitungan()" pada kumpulan kolom.
Jumlah Kolom = MyTZ.Columns.Quantity();
Laporan (Jumlah Kolom);
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
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.
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.
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;)