Mentransfer tabel nilai meminta 1s.

Kami memiliki item yang ada di grup "Item yang dilarang", yang harus Anda larang untuk digunakan pengguna dalam dokumen "Pesan ke pemasok" di bagian tabular "Barang". Pada saat yang sama, perlu dipertimbangkan fakta bahwa posisi nomenklatur mungkin bukan pada kelompok "Nomenklatur yang dilarang" itu sendiri, tetapi pada kelompok yang berada di bawahnya. Dalam hal ini, larangan juga harus berlaku. Plus, Anda perlu menambahkan cek untuk mengisi pesanan internal.

Pengecekan harus dilakukan sebelum merekam dokumen ke database jika mode tulis saat ini adalah "posting".

Penerapan

Mari kita pergi ke modul objek dokumen, ke acara "BeforeWrite". Di sinilah kita perlu menerapkan pemeriksaan validasi. Karena catatan dalam acara ini kami hanya memiliki objek dokumen yang belum ditempatkan di database, kami tidak akan dapat mengeksekusi kueri langsung ke tabel "Produk" dari dokumen tersebut.

Mengapa perlu melakukan pemeriksaan dengan kueri? Faktanya adalah ketika menggunakan model akses data objek, pemeriksaan semacam itu akan menghabiskan banyak sumber daya untuk mesin server. Jika kami menjalankan konstruksi seperti:

Jika TabelString. Tata nama. Induk. Induk. Parent = ForbiddenGroup Then // Actions EndIf ;

maka waktu eksekusi event "BeforeWrite" bisa meningkat drastis.

Paling pilihan terbaik solusinya adalah penggunaan query untuk memeriksa kebenaran pengisian, karena di dalamnya kita bisa menggunakan konstruksi

"DI DALAM HIERARKI () "

Yang memungkinkan Anda memasukkan semua elemen direktori ke dalam grup atau elemen yang sedang diperiksa. Sekarang yang paling menarik. Beginilah cara kami meneruskan tabel nilai ke kueri dan memprosesnya lebih lanjut:

Jika WriteMode = DocumentWriteMode. Memegang Kemudian // Bongkar tab. dokumen ke dalam tabel nilai dengan kolom yang diinginkan TabProduk = Produk. Unggah(, "Nomor Baris , Nomenklatur, Urutan" ); Permintaan = Permintaan Baru; // Melewati tab. nilai untuk permintaan sebagai parameter Meminta. SetParameter(" TabDoc " , TabProduk); // Tetapkan grup item yang dilarang Meminta. setParameter(" Grup Terlarang" , Directories. Nomenclature. FindByName(" Nomenklatur yang dilarang" , Benar ) ); Query. Text = " SELECT | T . nomor baris,| T . Tata nama,| PILIHAN | KAPAN | | | ATAU T. Urutan = BELUM DITENTUKAN | LALU BENAR | LAINNYA SALAH | AKHIR SEBAGAI PesananTidak Terisi|PUT Tab | DARI // Gantikan tabel yang diteruskan ke bagian "DARI" sebagai parameter | & TabDoc SEBAGAI T| DI MANA | (T. Nomenklatur DALAM HIERARKI (& Grup Terlarang) | ATAU PILIHAN| KAPAN T . Pesanan = NILAI(Dokumen. Pesanan Produksi. Referensi Kosong) | ATAU T. Pesanan = NILAI(Dokumen. Pesanan Pembeli. Referensi Kosong) | ATAU T.Order = VALUE(Document.InternalOrder.NullReference) | ATAU T. Urutan = Tidak ditentukan | LALU BENAR | LAINNYA SALAH| AKHIR ) |; | |//////////////////////////////////////////////////////////////////////////////// | PILIH | Tab . Tata nama,| Tab . nomor baris,| Tab . PesananTidak Terisi |DARI| Tab AS Tab "; Pilihan = Kueri. Jalankan () . Select() ; // Proses hasilnya Sedangkan pemilihan. Next() Putaran Tujuan Umum. ReportError(" Sebaris " + Selection. LineNumber + " nomenklatur yang dilarang digunakan" + " " " " + Sampling. Nomenklatur + " " " " + ? (Sampling. Urutan Tidak Diisi, " dan juga pesanan tidak selesai!" , " " ), Kegagalan) ; EndCycle ; EndIf ;

Tabel nilai diteruskan sebagai parameter ke permintaan. Jika Anda membuka kueri seperti itu di konstruktor, tabel seperti itu akan ditentukan sebagai "Deskripsi tabel sementara" dan terlihat seperti ini:

Fitur penting dalam bekerja dengan tabel nilai dalam permintaan adalah penempatan wajib dalam tabel permintaan sementara yang menerima tabel nilai dari parameter yang diteruskan. Jika Anda mencoba menjalankan kueri tanpa menggunakan tabel sementara, platform akan melaporkan kesalahan.

Penting juga untuk dipahami bahwa Anda tidak akan dapat mengatur pengambilan data dari tabel nilai menggunakan pembuat kueri. Di konstruktor, kita hanya bisa mendefinisikan deskripsi tabel sementara. Tidak mungkin untuk menunjukkan bahwa pemilihan akan dilakukan dari parameter yang diteruskan di konstruktor - kesalahan sintaks akan muncul.

Kesimpulan

Tugas itu terpecahkan. Contoh pemeriksaan yang dipicu sebelum menulis dokumen:

Tentu saja contoh di atas cukup sederhana. Tugas tersebut dapat diselesaikan dengan memindahkan centang ke acara "Saat Menulis", lalu kami akan mengelola dengan kueri sederhana ke database tanpa meneruskan tabel nilai ke kueri. Untuk menilai kebenaran menggunakan metode yang dijelaskan, Anda perlu mengetahui kondisi spesifik dari masalah tersebut.

43
NULL - nilai yang hilang. Jangan bingung dengan nol! NULL bukan angka, tidak sama dengan spasi, referensi nol, tidak terdefinisi. NULL adalah nilai pembentuk tipe, mis. ada tipe NULL dan nilai tunggal dari tipe ini. BATAL... 26
Untuk membentuk dan mengeksekusi kueri ke tabel database di platform 1C, objek khusus dari bahasa pemrograman Permintaan digunakan. Objek ini dibuat dengan memanggil konstruksi Permintaan Baru. Permintaan nyaman... 18
Artikel ini memberikan trik berguna saat bekerja dengan kueri 1C v.8.2, serta informasi yang tidak begitu diketahui tentang bahasa kueri. Saya tidak mencoba memberi Deskripsi lengkap bahasa kueri, tetapi saya ingin fokus hanya pada ... 13
LIKE - Operator untuk memeriksa apakah suatu string mirip dengan suatu pola. Analog dari LIKE di SQL. Operator LIKE memungkinkan Anda membandingkan nilai ekspresi yang ditentukan di sebelah kirinya dengan string templat yang ditentukan di sebelah kanan. Nilai ekspresi...

Sangat sering ini menghasilkan kesalahan umum - permintaan dalam satu lingkaran. Artinya, pengembang tidak tahu cara memasukkan tabel nilai dalam permintaan dan oleh karena itu mulai melewatinya dalam satu lingkaran dan membuat permintaannya sendiri untuk setiap iterasi. Pertimbangkan contoh sederhana, Bagaimana cara melakukannya.

Contoh

Sebagai contoh menempatkan tabel nilai dalam kueri 1C 8.3, mari kita ambil situasi sederhana - ada, yang berisi daftar item. Diperlukan untuk mendapatkan data saldo di gudang untuk setiap stok barang.

Dapatkan 267 pelajaran video 1C gratis:

Mungkin ada dua situasi, bagaimana tabel nilai dibuat - secara terprogram dan sudah diterima dari suatu tempat (misalnya, dokumen PM). Jika tabel dibuat secara terprogram, Anda harus mengatur jenis kolom, mudah dilakukan

Itu. saat menambahkan kolom, Anda harus menentukan tipe data sebagai parameter kedua menggunakan konstruktor objek TypeDescription.

Mari beralih ke membuat kueri. Tabel nilai dapat diteruskan ke kueri dengan &Parameter sederhana.

Nuansa wajib adalah bahwa tabel yang dibuat harus ditempatkan di tabel sementara, jika tidak, sistem akan menampilkan pesan: “Kesalahan saat memanggil metode konteks (Jalankan): Isi objek data hanya dapat diambil ke dalam tabel sementara».

Jadi, kami menempatkan kueri pertama di tabel sementara, lalu menghubungkannya ke daftar saldo inventaris.

Itu saja, masalah terpecahkan.



Memuat...
Atas