1s mengisi tabel nilai. Penting untuk tidak pernah mengacaukan properti objek dengan metode objek.

Inilah sedikit fakta untuk memulai - contoh sederhana bekerja dengan tabel nilai:

1. Buat tabel nilai

TabelNilai = TabelNilai Baru;


2. Buat kolom tabel nilai:

ValueTable.Columns.Add("Nama");
ValueTable.Columns.Add("Nama Belakang");


3. Tambahkan baris baru menggunakan nama kolom:


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


4. Cara mencari nilai pada tabel nilai:
Perlu untuk menemukan baris tabel yang berisi nilai yang diinginkan.

FoundString = ValueTable.Find(LookupValue);


5. Temukan kejadian pertama di kolom tertentu dari tabel nilai

FoundString = ValueTable.Find(LookupValue, "Pemasok, Pembeli");


6. Jika Anda perlu menemukan semua kemunculan dalam tabel nilai:
Kami menggunakan struktur pencarian.

SearchStructure = Struktur ("Karyawan", Nilai Pencarian);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Mari buat struktur pencarian, yang setiap elemennya akan berisi nama kolom sebagai kunci dan nilai yang dicari di kolom ini sebagai nilai. Kami meneruskan Struktur Pencarian sebagai parameter ke metode FindStrings(). Hasilnya, kami mendapatkan deretan tabel.
Jika kita menambahkan pencarian untuk nilai yang diinginkan ke struktur pencarian, misalnya juga di kolom Bertanggung jawab, maka sebagai hasil penerapan metode FindRows(), kita akan mendapatkan semua baris di mana Karyawan dan Bertanggung Jawab sama dengan yang diinginkan nilai.

7. Cara mengulang tabel nilai dalam urutan acak

Untuk Setiap CurrentRow Dari ValueTable Loop
Laporan(CurrentLine.Nama);
Akhiri Siklus;

Lakukan hal yang sama menggunakan indeks:

SeniorIndex = ValueTable.Count() - 1;
Untuk MF = 0 oleh SeniorIndex Cycle
Laporan(TabelNilai[Hitungan].Nama);
Akhiri Siklus;


8. Menghapus Baris Tabel Nilai yang Ada

ValueTable.Delete(RemoveRow);

berdasarkan indeks

ValueTable.Delete(0);


9. Menghapus kolom tabel nilai yang ada

ValueTable.Columns.Delete(RemoveColumn);


berdasarkan indeks

ValueTable.Columns.Delete(0);

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

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

NewRow = ValueTable.Add();
Baris Baru[NamaKolom] = 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

ValueTable.FillValue(False, "Bendera Akuntansi Fiskal");


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

12. Bagaimana cara mengisi tabel nilai "TableRecipient" dengan data tabel nilai "SourceTable"?

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

TableReceiver = TableOriginal.Copy();


Opsi dua: tabel TableReceiver ada, dan sayang sekali kehilangan kolom dan batasannya pada tipe data kolom. Tetapi Anda harus mengisi data untuk kolom yang namanya cocok dengan nama tabel sumber.

Transfer data sebagian untuk kolom dengan nama yang cocok:

Untuk Setiap Baris SourceTable Dari SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
Siklus Akhir


Untuk setiap baris tabel sumber, baris baru ditambahkan ke tabel tujuan dan nilainya diisi di kolom tabel baru yang namanya cocok dengan nama kolom di tabel sumber

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

Salinan data lengkap untuk kolom dengan nama yang cocok

Kolom Serupa = Array Baru();

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

Jika MatchedColumn<>Tidak Terdefinisi Kemudian

// Dapatkan properti kolom.
Nama = Kolom.Nama;
TipeNilai = Kolom.TipeNilai;
Judul = Kolom.Judul;
Lebar = Kolom.Lebar;

// Ganti kolom di tabel tujuan.
Index = TableReceiver.Columns.Index(CoincidentColumn);

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

// Tambahkan nama berikutnya dari kolom yang cocok ke array.
Nama-samaColumns.Add(Column.Name);

Berakhir jika;

Akhiri Siklus;

// Ulangi baris-baris tabel sumber.
Untuk setiap Baris SourceTable Dari SourceTable Loop

// Menambahkan garis baru ke meja tujuan.
NewString = TableReceiver.Add();

// Isi nilai dalam sel yang cocok.
Untuk setiap NameColumns Of Same NameColumns Loop
NewString[ColumnName] = SourceTableString[ColumnName];

Akhiri Siklus;

Akhiri Siklus;


Kami 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. Kemudian kita mengulang baris dari tabel sumber.
Di loop, kami menambahkan baris baru ke tabel penerima dan membuka loop melalui nama kolom dalam array kolom yang cocok.
Di dalam loop bersarang ini, kami mengisi sel tabel penerima dengan data sel tabel sumber.

13. Bagaimana cara menambahkan kolom ke tabel nilai "Tabel Nilai" dengan batasan tipe?

Saat menambahkan kolom, Anda cukup menentukan namanya, dan jangan menyentuh parameter kedua dari metode Add(). 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. Penting untuk menyampaikan deskripsi jenis yang diizinkan untuk kolom di sana. Deskripsi itu sendiri dapat diperoleh dengan menggunakan konstruktor, meneruskan nama string dari tipe sebagai parameter (jika ada banyak tipe, maka dipisahkan dengan koma) atau array tipe yang valid.

Menambahkan kolom yang menentukan tipe data

// Batasan pada tipe data kolom:
// Hanya elemen dari direktori "Kontraktor".
ValueTable.Columns.Add("Account", New TypeDescription("ReferenceReference.Accounts"));


Jika ada string di antara jenis yang diizinkan untuk mengisi kolom data, Anda dapat membatasi kedalaman bit (panjangnya), menentukan penggunaan variabel atau panjang tetap. Semua ini disediakan dengan membuat objek menggunakan konstruktor StringQualifiers. 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 tipe String.
Kualifikasi String = Kualifikasi String Baru(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Anda dapat melakukan hal yang sama untuk kualifikasi nomor dan tanggal.
Harap diperhatikan: deskripsi tipe dapat dibangun oleh konstruktor baik "dari awal", dan Anda dapat menggunakan deskripsi tipe yang ada sebagai dasar

Menggunakan Deklarasi Tipe yang Ada untuk Menentukan Tipe Data dari Kolom Tabel Nilai

// Ekstensi dari deskripsi tipe yang digunakan sebelumnya.
Kualifikasi Angka = Kualifikasi Angka Baru(10, 2, ValidSign.Non-negatif);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

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

Diposting pada 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 dikenal", cara mengulang melalui kolom tabel nilai, cara mengekstrak data dari kolom dan baris tanpa menggunakan nama kolom. (Artikel ini mengacu pada serangkaian artikel 1C dari awal; pemrograman 1c dari awal; tabel nilai 1c)

Untuk menjelaskan materi dan untuk dapat menjalankan contoh kami kode program"hidup", kita membutuhkan beberapa tabel tes nilai 1C. Bagian dari contoh kami akan mengekstrak data dari tabel nilai, jadi kami akan membuat tabel dengan tiga kolom "Nama Belakang", "Nama Depan", "Patronimik" dan memasukkan sejumlah kecil data ke dalamnya - sebanyak 3 baris :)

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

MyTR = TabelNilai Baru; // buat tabel nilai baru yang disimpan dalam variabel "MyTR" MyTR.Columns.Add("Last name"); // buat kolom "Last name" MyTR.Columns.Add("First name"); // buat kolom "Nama" MyTM.Columns.Add("Patronimik"); // buat kolom "Nama tengah" // tambahkan baris pertama ke tabel nilai kita Baris Baru = MyТЗ.Add(); NewLine.Surname = "Chapaev"; NewString.Name = "Vasily"; NewString.Patronimik = "Ivanovich"; // tambahkan baris kedua NewLine = MyТЗ.Add(); NewLine.Lastname = "Dzerzhinsky"; NewString.Name = "Felix"; NewLine.Patronymic = "Edmundovich"; // tambahkan baris ketiga NewLine = MyTR.Add(); NewRow.LastName = "Kotovsky"; NewString.Name = "Gregory"; NewString.Patronimik = "Ivanovich";

Tabel pengujian kami terdiri dari tiga kolom: Nama depan, Nama belakang, Patronimik; dan memiliki tiga baris lengkap dengan nama para pahlawan Perang Saudara.

Sampel kode pertama melakukan iterasi melalui kolom tabel nilai 1C sebagai koleksi.

// tampilkan nama semua kolom TK Untuk Setiap Kolom Dari TK.Kolom Saya Beri tahu loop("Nama kolom: " + NamaKolom); Akhiri Siklus;

Loop kami akan menampilkan semua nama kolom di kotak pesan 1C:

Nama kolom: Nama belakang Nama kolom: Nama depan Nama kolom: Nama tengah

Kami melihat bahwa loop koleksi khusus digunakan untuk mengulang melalui kolom, mirip dengan loop iterasi baris (di artikel terakhir). MyTM.Kolom- ini adalah kumpulan kolom dari tabel nilai 1C "MoyaTZ". Koleksi berisi objek bertipe "Tabel Nilai Kolom" Setiap objek jenis ini adalah kolom dari tabel nilai dan berisi properti dan metode. Mengacu pada properti dan metode ini, kami mendapatkan informasi yang diperlukan tentang satu kolom atau melakukan beberapa tindakan lain dengannya.

Misalnya, mengakses properti "Nama" (Nama kolom) kami mendapatkan nama kolom saat ini.

Saya ingin menarik perhatian Anda pada judul siklus: "Untuk Setiap Kolom Dari MyTR.Columns Loop" Variabel bernama "Kolom" ditemukan oleh kami. Tidak perlu menggunakan nama yang sama. Anda dapat menamai variabel ini sesuka Anda, misalnya "Kolom Arus Saya" Maka contoh di atas akan terlihat seperti ini:

// cetak nama semua kolom TK Untuk Setiap KolomAkhirKu Dari MyTK.Kolom Notifikasi Loop("Nama kolom: " +NamaKolomArusKu.); Akhiri Siklus;

Ketika subsistem eksekusi 1C menemukan siklus semacam ini, pada setiap lintasan siklus, ia menugaskan satu elemen dari koleksi kami ke variabel dengan nama yang ditentukan, dalam hal ini - salah satu elemen koleksi kolom tabel nilai MyTM.Kolom Dan kemudian kita merujuk ke variabel yang berisi kolom saat ini, dan menggunakan propertinya "Nama".

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

// tampilkan nomor dan nama semua kolom tabel nilai Untuk Setiap Kolom From MyTR.Columns LoopColumnNumber = MyTR.Columns.Index(Column); // dapatkan nomor kolom ColumnName = Column.Name; // dapatkan nama kolom Report("Nomor kolom:" + Nomor kolom + " Nama kolom: " + Nama kolom); Akhiri Siklus;

Teks akan ditampilkan di kotak pesan 1C:

Nomor kolom:0 Nama kolom: Nama belakang Nomor kolom:1 Nama kolom: Nama depan Nomor kolom:2 Nama kolom: Nama tengah

Perhatikan fakta bahwa kolom pada tabel nilai 1C diberi nomor mulai dari nol, seperti halnya baris pada tabel nilai.

Jumlah kolom dalam tabel nilai 1C

Untuk mengetahui jumlah kolom pada tabel nilai, kita menggunakan metode “Number()” pada kumpulan kolom.

Number ofColumns = MyTM.Columns.Number(); Laporan (Jumlah Kolom);

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

Memperoleh objek kolom dengan nomornya (indeks) dan mengulangi kolom menggunakan indeks kolom

Mari kita buat perulangan melalui semua kolom tabel nilai menggunakan indeks kolom (angka). Ingatlah bahwa penomoran kolom dimulai dari nol. Oleh karena itu, kita harus menambah penghitung siklus "Sh" dari nol menjadi angka yang sama dengan jumlah kolom dikurangi satu.

Untuk SC = 0 By MyTM.Columns.Quantity() - 1 Loop CurrentColumn = MyTM.Columns[SC]; Beritahu (CurrentColumn.Name); Akhiri Siklus;

Di layar kita akan mendapatkan yang berikut ini

Nama lengkap

Saya pikir contoh ini sudah jelas. Kami beralih ke metode Kuantitas() koleksi kolom" MyTM.Columns.Quantity()", mendapatkan jumlah kolom, dan memulai perulangan dengan penghitung dari nol sebelum jumlah kolom dikurangi satu. Di dalam loop, kita mendapatkan setiap kolom dari kumpulan kolom dan menugaskan objek kolom saat ini ke sebuah variabel Kolom Saat Ini Selanjutnya, variabel Kolom Saat Ini kita mengakses properti Nama dan tampilkan nilai properti ini di layar: Beritahu (CurrentColumn.Name);

Penting untuk tidak pernah mengacaukan properti objek dengan metode objek.

Properti adalah sejenis nilai statis dan akses ke sana ditulis tanpa tanda kurung, misalnya CurrentColumn.Name. Metode pada dasarnya adalah prosedur atau fungsi dari suatu objek, dan pemanggilan ke prosedur dan fungsi selalu ditulis dengan tanda kurung (walaupun tidak ada parameter masukan). Misalnya: MyTM.Columns.Quantity()

Jika kita merujuk ke metode, lupa menulis tanda kurung, juru bahasa 1C akan memberi kita pesan kesalahan dan tidak akan menjalankan kode untuk dieksekusi. Karena juru bahasa akan berasumsi bahwa kita tidak mengakses metode, tetapi properti - karena tidak ada tanda kurung. Dan itu tidak akan dapat menemukan properti dengan nama itu (karena hanya ada metode dengan nama itu) - yang akan disebutkan dalam pesan kesalahan.

Inilah yang akan ditulis oleh juru bahasa jika saya lupa meletakkan tanda kurung dalam pemanggilan metode dengan cara yang salah MyTM.Columns.Quantity(tanpa tanda kurung setelah "Quantity()"):

Bidang objek tidak ditemukan (Jumlah)

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. Padahal dalam bahasa pemrograman lain istilah tersebut bisa berarti konsep yang berbeda.

Memperoleh data dari tabel nilai 1C menggunakan nomor kolom

Saya menawarkan Anda, sebagai permulaan, contoh sederhana untuk mendapatkan data dari baris pertama tabel kami. Harap perhatikan bahwa kami menggunakan tabel yang sudah diisi sebelumnya dari awal artikel. Kami tahu pasti bahwa tabel tersebut memiliki baris pertama dan setidaknya satu kolom. Jika kami menerapkan contoh ini ke tabel kosong, kesalahan akan terjadi. Jadi:

FirstLine = MyTR; // dapatkan baris pertama (penomoran dari nol) ColumnFirstValue = RowFirst; // dapatkan nilai kolom pertama (penomoran kolom juga dari nol) Report(FirstColumnValue); // tampilkan nilai kolom pertama di baris pertama tabel

Layar akan menampilkan:

Chapaev

Kami pertama kali mendapatkan objek baris tabel nilai dengan mengakses tabel nilai menggunakan operator [...]. (jika Anda lupa bagaimana melakukannya, Anda dapat melihat artikel sebelumnya) Di dalam operator, kami memberikan argumen "0". Ini adalah indeks baris pertama dari tabel nilai. FirstLine = MyTR;

Selanjutnya, kami juga memiliki hak untuk merujuk ke objek string menggunakan [...] operator. Di dalam pernyataan ini, kami memberikan nomor kolom dari tabel nilai, dalam hal ini juga "0". Dan dengan demikian, kami mendapatkan nilai kolom dengan angka "0" untuk baris tabel saat ini dengan angka "0". Kami menampilkan nilai ini di layar dan itu mewakili string "Chapaev".

Mari kita sedikit memperumit contoh kita:

FirstLine = MyTR; // ambil baris pertama (diberi nomor dari nol) Report(FirstLine); // tampilkan nilai kolom pertama di baris pertama tabel Report(FirstRow); // tampilkan nilai kolom kedua di baris pertama tabel Report(FirstRow); // tampilkan nilai kolom ketiga di baris pertama tabel

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

Chapaev Vasily Ivanovich

Sekarang saya memodifikasi contoh ini lebih lanjut sehingga kita bisa melakukannya tanpa variabel "Garis pertama"

Beri tahu (MyTM); // tampilkan nilai kolom pertama di baris pertama tabel Report(MyTR); // tampilkan nilai kolom kedua di baris pertama tabel Report(MyTR); // tampilkan nilai kolom ketiga di baris pertama tabel

Layarnya akan sama.

Chapaev Vasily Ivanovich

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

Jadi, kami siap membuat perulangan dan mendapatkan data semua baris dan semua kolom menggunakan indeks baris dan kolom:

Untuk RowCount = 0 By MyTM.Quantity() - 1 Loop // loop melalui baris Untuk ColumnCount = 0 By MyTM.Columns.Quantity() - 1 Loop // loop bersarang melalui kolom // dapatkan nilai sel (dari baris saat ini dan kolom saat ini) CellValue = MyTR[RowCount][ColumnCount]; // tampilkan nomor baris, nomor kolom dan nilai sel Report("Baris #" + RowCount + "column #" + ColumnCount + " = " + CellValue); Akhiri Siklus; Akhiri Siklus;

Berikut ini akan ditampilkan di layar:

Baris #0 kolom #0 = Baris Chapaev #0 kolom #1 = Baris Vasily #0 kolom #2 = Baris Ivanovich #1 kolom #0 = Baris Dzerzhinsky #1 kolom #1 = Baris Felix #1 kolom #2 = Baris Edmundovich # 2 kolom No.0 = Kotovsky Line No.2 kolom No.1 = Grigory Line No.2 kolom No.2 = Ivanovich

Dengan bantuan dua loop, salah satunya bersarang di loop lainnya, kami menampilkan nilai semua kolom dari semua baris tabel nilai 1C. Dalam hal ini, kami tidak menggunakan nama kolom, tetapi merujuk ke kolom dan baris dengan indeksnya. Untuk pemahaman yang lebih baik, perhatikan komentar di dalam contoh.

Sebagai kesimpulan, saya mengusulkan untuk sedikit mengubah contoh kita sehingga alih-alih nomor kolom, itu menampilkan nama mereka di layar. Dan selain itu saya akan membuat desain yang lebih rapi untuk menampilkan konten di layar.

Untuk RowCount = 0 By MyTR.Quantity() - 1 Loop // loop melalui baris Report(" ======= Row # " + RowCount + " ======="); Melaporkan(" "); // pengumpanan baris (masukkan baris kosong) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // loop iterasi kolom bersarang // dapatkan nilai sel (dari baris saat ini dan kolom saat ini) CellValue = MyTR[RowCount][ Jumlah Kolom]; // dapatkan nama kolom ColumnName = MyTR.Columns[ColumnCount].Name; // tampilkan nama kolom dan nilai sel Report(ColumnName + ":" + CellValue); Akhiri Siklus; Melaporkan(" "); // baris baru (masukkan baris kosong) EndCycle;

Sekarang, di layar kami, informasi mulai terlihat lebih representatif:

Baris No.0 ======= Nama belakang: Chapaev Nama depan: Vasily Nama tengah: Ivanovich ======= Baris No.1 ======= Nama belakang: Dzerzhinsky Nama depan: Felix Tengah nama: 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: ValueTable[RowIndex][ColumnName]

Untuk RowCount = 0 By MyTR.Quantity() - 1 Loop // loop melalui baris Report(" ======= Row # " + RowCount + " ======="); Melaporkan(" "); // umpan baris (menyisipkan baris kosong) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // pengulangan bersarang melalui kolom ColumnName = MyTR.Columns[ColumnCount].Name; // dapatkan nama kolomCellValue = MyTR[RowCount][ColumnName]; //

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

Dan sekarang, yang terakhir di artikel ini.

Penerimaan yang BENAR dari semua data dari tabel nilai 1C, menggunakan loop untuk mengulangi kumpulan baris dan kumpulan kolom

Untuk Setiap CurrentRow Dari MyTR Loop // menelusuri kumpulan string Report(" ======= Line # " + MyTR.Index(CurrentRow) + " ======="); Melaporkan(" "); Untuk Setiap CurrentColumn Dari MyTR.Columns Loop // loop bersarang melalui kumpulan kolom ColumnName = CurrentColumn.Name; // dapatkan nama kolomCellValue = CurrentRow[ColumnName]; // dapatkan nilai sel DENGAN kolom NAME Report(ColumnName + ":" + CellValue); // tampilkan nama kolom dan nilai sel EndCycle; Melaporkan(" "); Akhiri Siklus;

Dalam contoh, dua loop digunakan. Lingkaran pengumpulan kolom bersarang di dalam lingkaran baris. Jika Anda telah memahami contoh-contoh di atas dan membaca artikel sebelumnya, maka Anda tidak akan kesulitan memahami cara kerja contoh ini.

Terakhir, saya akan menjaga jumlah baris kode dalam contoh terakhir kita sesingkat mungkin dengan menghilangkan penggunaan variabel perantara. Kami akan mendapatkan contoh "kode industri" yang digunakan dalam aplikasi dunia nyata.

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

Untuk Setiap CurrentRow Dari MyTR Loop // loop melalui baris Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); Untuk Setiap CurrentColumn Dari MyTr.Columns Loop // ulangi kolom Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); Akhiri Siklus; Melaporkan(" "); Akhiri Siklus;

Keluaran di layar tidak berubah, tetap sama seperti pada contoh sebelumnya:

KURSUS 2 MINGGU

"Pemrograman dalam 1C UNTUK PEMULA"

Kursus akan tiba surel. Menjadi programmer dengan menyelesaikan tugas langkah demi langkah.

Yang Anda butuhkan untuk berpartisipasi hanyalah komputer dan internet.

Akses gratis ke kursus:

sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;) .sp-form input ( display: inline-block; opacity: 1; visibility: visible;).sp-form .sp-form-fields-wrapper ( margin: 0 auto; width: 260px;).sp-form .sp -form-control ( background: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; border -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; tinggi: 35px; lebar: 100%;).sp-form .sp-bidang label ( warna: #444444; font- size: 13px;font-style: normal;font-weight:bold;).sp-form .sp-button (border-radius: 4px; -moz-border-radius: 4px;-webkit-border-radius: 4px; warna latar: #f4394c; warna: #ffffff; lebar: 100%; font-weig ht: 700; gaya font: normal font-family: Arial, "Helvetica Neue", sans-serif; bayangan kotak: tidak ada -moz-kotak-bayangan: tidak ada; -webkit-kotak-bayangan: tidak ada; background: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container ( text-align: center; width: auto;)

Untuk memperhitungkan uang dan barang, bisnis digunakan secara luas tabel yang berbeda. Hampir setiap dokumen adalah tabel.

Satu meja mencantumkan barang yang akan dikirim dari gudang. Di meja lain - kewajiban untuk membayar barang-barang tersebut.

Oleh karena itu, dalam 1C, bekerja dengan tabel menempati tempat yang menonjol.

Tabel dalam 1C disebut juga "bagian tabel". Buku referensi, dokumen dan lain-lain memilikinya.

Kueri mengembalikan tabel sebagai hasil eksekusinya, yang dapat diakses dengan dua cara berbeda.

Pilihan pertama - lebih cepat -, mendapatkan baris darinya hanya mungkin dilakukan secara berurutan. Yang kedua adalah membongkar hasil kueri ke dalam tabel nilai dan kemudian mengaksesnya secara acak.

//Opsi 1 - akses berurutan ke hasil kueri

// ambil meja
Pilihan = Query.Execute().Select();
// lewati semua baris hasil kueri secara berurutan
While Selection.Next() Loop
Laporan(Pilihan.Nama);
Akhiri Siklus;

//Opsi 2 - mengunggah ke tabel nilai
Kueri = Kueri Baru("PILIH Nama DARI Direktori.Nomenklatur");
// ambil meja
Tabel = Kueri.Jalankan().Unggah().
// maka kita juga bisa melewati semua jalur
Untuk setiap Baris dari Tabel Loop
Laporan(String.Nama);
Akhiri Siklus;
//atau mengakses string secara sewenang-wenang
String = Table.Find("Shovel", "Name");

Fitur penting adalah bahwa dalam tabel yang diperoleh dari hasil kueri, semua kolom akan diketik dengan kuat. Ini berarti bahwa dengan meminta bidang Nama dari pencarian Nomenklatur, Anda akan menerima kolom bertipe String dengan panjang yang diperbolehkan tidak lebih dari N karakter.

Tabel pada formulir (klien tebal)

Pengguna bekerja dengan tabel saat diletakkan di formulir.

Kami membahas prinsip dasar bekerja dengan formulir di pelajaran tentang dan di pelajaran tentang

Jadi, mari kita letakkan tabel di atas formulir. Untuk melakukannya, Anda dapat menyeret tabel dari panel kontrol. Demikian pula, Anda dapat memilih kontrol Formulir/Sisipkan dari menu.

Data dapat disimpan dalam konfigurasi - kemudian Anda perlu memilih bagian tabular yang sudah ada (sebelumnya ditambahkan) dari objek konfigurasi yang bentuknya sedang Anda edit.

Klik tombol "..." di properti Data. Untuk melihat daftar bagian tabular, Anda perlu membuka cabang Object.

Saat memilih bagian tabular, 1C sendiri akan menambahkan kolom ke tabel pada formulir. String yang dimasukkan oleh pengguna ke dalam tabel tersebut akan disimpan secara otomatis bersama dengan direktori/dokumen.

Di properti Data yang sama, Anda bisa memasukkan nama arbitrer dan memilih tipe ValueTable.

Ini berarti bahwa tabel nilai arbitrer telah dipilih. Itu tidak akan menambahkan kolom secara otomatis, itu tidak akan disimpan secara otomatis, tetapi Anda dapat melakukan apa pun yang Anda inginkan dengannya.

Mengklik klik kanan di atas meja Anda dapat menambahkan kolom. Di properti kolom, Anda dapat menentukan namanya (untuk referensi dalam kode 1C), judul kolom pada formulir, koneksi dengan atribut bagian tabular (yang terakhir - jika bukan tabel arbitrer dipilih, tetapi bagian tabel).

Di properti tabel pada formulir, Anda dapat menentukan apakah pengguna dapat menambah/menghapus baris. Formulir yang lebih canggih adalah kotak centang ViewOnly. Properti ini berguna untuk mengatur tabel yang ditujukan untuk menampilkan informasi, tetapi tidak untuk pengeditan.

Untuk mengelola tabel, Anda perlu menampilkan panel perintah pada formulir. Pilih item menu Formulir/Sisipkan Kontrol/Panel Perintah.

Di properti bilah perintah, pilih kotak centang Pelengkapan Otomatis agar tombol pada bilah alat muncul secara otomatis.

Tabel di formulir (klien tipis/terkelola)

Pada formulir yang dikelola tindakan ini terlihat sedikit berbeda. Jika Anda perlu menempatkan bagian tabular pada formulir, luaskan cabang Object dan seret salah satu bagian tabular ke kiri. Dan itu saja!

Jika Anda perlu menempatkan tabel nilai, tambahkan atribut bentuk baru dan tentukan jenis propertinya - tabel nilai.

Untuk menambahkan kolom, gunakan menu tombol kanan mouse pada atribut form ini, item Tambahkan kolom atribut.

Kemudian seret juga tabel ke kiri.

Agar tabel memiliki bilah perintah, di properti tabel, pilih nilai di bagian Penggunaan - Posisi bilah perintah.

Mengekspor tabel ke Excel

Tabel 1C apa pun yang terletak di formulir dapat dicetak atau diunggah ke Excel.

Untuk melakukan ini, klik kanan pada ruang bebas dalam tabel dan pilih Tampilkan Daftar.

Di klien terkelola (tipis), tindakan serupa dapat dilakukan menggunakan item menu Semua tindakan/Daftar tampilan.



Memuat...
Atas