24.09.2024
Rumah / Aneka ragam / Parameter & Periode standar dan masalah yang digunakan. Parameter standar & Periode dan masalah dalam menggunakan parameter tabel virtual 1c

Parameter & Periode standar dan masalah yang digunakan. Parameter standar & Periode dan masalah dalam menggunakan parameter tabel virtual 1c

Artikel tersebut menjelaskan implementasi fisik meja maya sisa konfigurasi yang beroperasi dalam mode client-server menggunakan contoh penggunaan DBMS MS SQL Server.

Penerapan

Artikel ini membahas platform 1C:Enterprise versi 8.3.5.1383. Dalam versi platform saat ini, beberapa perubahan pada teks yang dijelaskan dalam materi dimungkinkan, Kueri T-SQL, dieksekusi di sisi server DBMS.

Perangkat tabel saldo virtual

Mari kita pertimbangkan jenis kueri DBMS apa yang diubah menggunakan tabel virtual saldo register akumulasi. Misalnya, teks permintaan berikut akan dipertimbangkan:

MEMILIH
Persediaan KomoditasSisa.Produk,
Persediaan KomoditasSisa.Gudang,
Sisa Persediaan Komoditas.Sisa Kuantitas
DARI
DaftarAkumulasi.Persediaan.Sisa(&Tanggal , Gudang = &Gudang ) BAGAIMANA
Persediaan Komoditas Masih Ada

Pertama, menggunakan metode konteks global DapatkanDatabaseStorageStructure() kita mendapatkan daftar tabel database di mana data register akumulasi “Persediaan Komoditas” disimpan:

Komposisi field dalam tabel utama register akumulasi dan tabel total diberikan di bawah ini:

Penyimpanan total untuk register ini dikonfigurasi dalam mode “1C:Enterprise 8” sebagai berikut:

Mari kita isi parameter pada request yang dimaksud sebagai berikut:


Platform mengubah teks permintaan menjadi permintaan berikut, yang akan dieksekusi di server DBMS:

MEMILIH
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Saldo
DARI
(PILIH Fld82,
bidang83,

DARI
(PILIH Fld82,
bidang83,
SUM (Fld84 ) SEBAGAI Fld84Balance
DARI AccumRgT85
DIMANA Periode = DATETIME (3999, 11, 1)
DAN ((Fld83 = ))
DAN(Fld84<>0 ) DAN (Fld84<> 0 )
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<> 0
PERSATUAN SEMUA
PILIH Bidang82,
bidang83,
SUM (KASUS KETIKA RecordKind = 0 MAKA – Fld84 ELSE Fld84 END ) SEBAGAI Fld84Balance
DARI AccumRg81
DIMANA Periode >= DATETIME (2012, 9, 1)
DAN Periode< DATETIME (3999 , 11 , 1 )
DAN Aktif
DAN ((Fld83 = 9:))
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<>0 )T
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<>0 ) Q_000_T_001

Mari kita periksa permintaan yang diterima lebih detail.

Pertama, kueri pertama dalam gabungan memilih data dari tabel AccumRgT85 yang dihasilkan. Total diperoleh pada tanggal penyimpanan total saat ini (01.11.3999), kondisi tambahan diterapkan pada bidang Gudang (karena kondisi seperti itu digunakan dalam parameter tabel virtual). Selain itu, pemeriksaan dilakukan untuk memastikan bahwa hasilnya tidak berisi baris dengan sisa nol.

Harap dicatat bahwa pengelompokan dilakukan berdasarkan dimensi yang dipilih dalam teks permintaan. Oleh karena itu, tidak perlu mengelompokkan tambahan berdasarkan dimensi dalam teks dalam bahasa kueri 1C:Enterprise.

Kueri gabungan kedua menggunakan tabel pergerakan register AccumRg81. Bergantung pada jenis pergerakannya (jika RecordKind adalah 0, maka itu adalah Pendapatan, jika tidak maka itu adalah Pengeluaran), sebuah tanda dimasukkan ke dalam ekspresi. Platform memilih data untuk periode dari tanggal yang ditentukan sebagai parameter tabel virtual hingga tanggal penyimpanan total saat ini (11/1/3999).

Selain itu, hanya rekaman aktif yang dipilih; bidang Gudang harus sama dengan nilai yang ditentukan. Seperti halnya kueri gabungan pertama, ini juga mengelompokkan berdasarkan dimensi yang dipilih dan membuang rekaman dengan nilai sumber daya nol.

Jika DBMS MS SQL Server digunakan dan offset tanggal diatur ke 2000 untuk database, maka semua tanggal akan disimpan dengan offset yang ditentukan, mis. alih-alih 01.11.3999 Anda akan melihat 01.11.5999.

Jika Anda menonaktifkan total saat ini untuk register akumulasi, platform pertama-tama akan menerima total terbaru yang dihitung pada tanggal lebih awal dari yang ditentukan dalam parameter Periode tabel virtual.

Demikian pula, data ini akan ditambah dari tabel pergerakan, tetapi hanya untuk periode dari tanggal hasil terakhir hingga periode tabel virtual.

MEMILIH
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Saldo
DARI
(PILIH Fld82,
bidang83,
SUM (Fld84Balance ) SEBAGAI Fld84Balance
DARI
(PILIH Fld82,
bidang83,
SUM (Fld84 ) SEBAGAI Fld84Balance
DARI AccumRgT85
DIMANA Periode = DATETIME (2012, 4, 1)
DAN ((Fld83 = 9:))
DAN(Fld84<> 0 )
DAN(Fld84<> 0 )
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<> 0
PERSATUAN SEMUA
PILIH Bidang82,
bidang83,
SUM (KASUS KETIKA RecordKind = 0 MAKA Fld84 ELSE – Fld84 END ) SEBAGAI Fld84Balance
DARI AccumRg81
DIMANA Periode >= DATETIME (2012, 4, 1)
DAN Periode< DATETIME (2012 , 9 , 1 )
DAN Aktif
DAN ((Fld83 = 9:))
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<>0 )T
KELOMPOK OLEH Fld82 , Fld83
MEMILIKI Fld84Balance<>0 ) Q_000_T_001

Harap perhatikan kondisi berikut di badan permintaan.

Bahasa kueri di 1C 8 adalah analog sederhana dari “bahasa pemrograman terstruktur” yang terkenal (seperti yang lebih sering disebut, SQL). Namun dalam 1C hanya digunakan untuk membaca data; digunakan untuk mengubah data model objek data.

Perbedaan menarik lainnya adalah sintaksis Rusia. Meskipun sebenarnya Anda bisa menggunakan konstruksi berbahasa Inggris.

Contoh permintaan:

MEMILIH
Bank.Nama,
Bank.CorrAccount
DARI
Direktori.Bank BAGAIMANA Bank

Permintaan ini memungkinkan kita melihat informasi tentang nama dan rekening koresponden semua bank yang ada di database.

Bahasa kueri adalah yang paling sederhana dan cara yang efektif memperoleh informasi. Seperti dapat dilihat dari contoh di atas, dalam bahasa kueri Anda perlu menggunakan nama metadata (ini adalah daftar objek sistem yang membentuk konfigurasi, yaitu direktori, dokumen, register, dll.).

Deskripsi konstruksi bahasa kueri

Struktur kueri

Untuk memperoleh data cukup menggunakan konstruksi “SELECT” dan “FROM”. Permintaan paling sederhana terlihat seperti ini:

PILIH * DARI Direktori.Nomenklatur

Dimana “*” berarti memilih semua field tabel, dan Direktori.Nomenklatur – nama tabel dalam database.

Mari kita lihat contoh yang lebih kompleks dan umum:

MEMILIH
<ИмяПоля1>BAGAIMANA<ПредставлениеПоля1>,
Jumlah(<ИмяПоля2>) BAGAIMANA<ПредставлениеПоля2>
DARI
<ИмяТаблицы1>BAGAIMANA<ПредставлениеТаблицы1>
<ТипСоединения>MENGGABUNGKAN<ИмяТаблицы2>BAGAIMANA<ПредставлениеТаблицы2>
OLEH<УсловиеСоединениеТаблиц>

DI MANA
<УсловиеОтбораДанных>

KELOMPOK OLEH
<ИмяПоля1>

PESAN OLEH
<ИмяПоля1>

HASIL
<ИмяПоля2>
OLEH
<ИмяПоля1>

Dalam kueri ini, kami memilih data bidang “Nama Bidang1” dan “Nama Bidang1” dari tabel “NamaTabel1” dan “NamaTabel”, menetapkan sinonim ke bidang menggunakan operator “BAGAIMANA”, dan menghubungkannya sesuai dengan kondisi tertentu “ Kondisi Koneksi Tabel”.

Dari data yang diterima, kami memilih hanya data yang memenuhi kondisi dari “WHERE” “Kondisi Pemilihan Data”. Selanjutnya, kami mengelompokkan permintaan berdasarkan bidang “Nama Bidang1”, sambil menjumlahkan “Nama Bidang2”. “Nama Bidang1” dan bidang terakhir “Nama Bidang2”.

Langkah terakhir adalah mengurutkan permintaan menggunakan konstruksi ORDER BY.

Desain umum

Mari kita lihat struktur umum bahasa kueri 1C 8.2.

PERTAMAN

Dengan menggunakan dari operator ini Anda bisa mendapatkan n jumlah catatan pertama. Urutan rekaman ditentukan oleh urutan dalam kueri.

PILIH 100 PERTAMA
Bank.Nama,
Bank.Kode SEBAGAI BIC
DARI
Direktori.Bank BAGAIMANA Bank
PESAN OLEH
Bank.Nama

Permintaan tersebut akan menerima 100 entri pertama dari direktori “Bank”, diurutkan berdasarkan abjad.

DIIZINKAN

Desain ini relevan untuk bekerja dengan mekanisme. Inti dari mekanisme ini adalah untuk membatasi pembacaan (dan tindakan lainnya) oleh pengguna untuk catatan tertentu dalam tabel database, dan bukan tabel secara keseluruhan.

Jika pengguna mencoba menggunakan kueri untuk membaca catatan yang tidak tersedia baginya, ia akan menerima pesan kesalahan. Untuk menghindari hal ini, Anda harus menggunakan konstruksi “ALLOWED”, yaitu permintaan hanya akan membaca catatan yang diizinkan.

PILIH DIPERBOLEHKAN
Repositori Informasi Tambahan
DARI
Direktori.Repositori Informasi Tambahan

BERMACAM-MACAM

Menggunakan "DIFFERENT" akan mencegah baris duplikat memasuki hasil query 1C. Duplikasi berarti semua bidang permintaan cocok.

PILIH 100 PERTAMA
Bank.Nama,
Bank.Kode SEBAGAI BIC
DARI
Direktori.Bank BAGAIMANA Bank

Meja Kosong

Konstruksi ini sangat jarang digunakan untuk menggabungkan kueri. Saat bergabung, Anda mungkin perlu menentukan tabel bersarang kosong di salah satu tabel. Operator “EmptyTable” tepat untuk ini.

Contoh dari bantuan 1C 8:

PILIH Tautan.Nomor, TABEL KOSONG.(No., Barang, Jumlah) SEBAGAI Komposisi
DARI Dokumen. Faktur Biaya
GABUNGKAN SEMUANYA
PILIH Tautan.Nomor, Isi.(Nomor Baris, Produk, Kuantitas)
DARI Dokumen.Dokumen Faktur.Faktur.Komposisi.*

TIDAK BOLEH

Fitur yang sangat berguna yang memungkinkan Anda menghindari banyak kesalahan. Ada NULL() yang memungkinkan Anda mengganti nilai BATAL terhadap apa yang dibutuhkan. Sangat sering digunakan untuk memeriksa keberadaan suatu nilai pada tabel yang digabungkan, misalnya:

MEMILIH
Tautan Nomenklatur,
IsNULL(Item Tersisa.QuantityRemaining,0) SEBAGAI QuantityRemaining
DARI


Dapat digunakan dengan cara lain. Misalnya, jika untuk setiap baris tidak diketahui di tabel mana nilainya ada:

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW adalah operator yang memungkinkan kita memberikan nama (sinonim) pada suatu tabel atau field. Kami melihat contoh penggunaan di atas.

Konstruksi ini sangat mirip - memungkinkan Anda mendapatkan representasi string dari nilai yang diinginkan. Satu-satunya perbedaan adalah REPRESENTATION mengonversi nilai apa pun menjadi tipe string, sedangkan REPRESENTATIONREF hanya mengonversi nilai referensi. REPRESENTASI REFERENSI direkomendasikan untuk digunakan dalam kueri sistem komposisi data untuk pengoptimalan, kecuali, tentu saja, bidang data referensi direncanakan untuk digunakan dalam pemilihan.

MEMILIH
Lihat(Tautan), //string, misalnya “Laporan Lanjutan No. 123 tanggal 10/10/2015
Lihat(DeletionMark) SEBAGAI DeleteMarkText, //string, “Ya” atau “Tidak”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, Benar atau Salah
DARI
Dokumen.Laporan Muka

CEPAT

Express memungkinkan Anda mengonversi nilai bidang ke tipe data yang diinginkan. Anda dapat mengonversi nilai menjadi tipe primitif atau tipe referensi.

Ekspres untuk tipe referensi digunakan untuk membatasi tipe data yang diminta dalam bidang tipe kompleks, sering kali digunakan untuk mengoptimalkan kinerja sistem. Contoh:

EXPRESS (Tabel Biaya. Direktori Subconto1 AS. Pos-pos Biaya). Jenis Kegiatan Akuntansi Pajak Biaya

Untuk tipe primitif, fungsi ini sering digunakan untuk membatasi jumlah karakter dalam bidang yang panjangnya tidak terbatas (bidang tersebut tidak dapat dibandingkan). Untuk menghindari kesalahan" Parameter tidak valid dalam operasi perbandingan. Anda tidak dapat membandingkan bidang
panjang tak terbatas dan bidang tipe yang tidak kompatibel
", Anda perlu menyatakan bidang-bidang seperti berikut:

EXPRESS(Komentar SEBAGAI Baris(150))

TANGGAL PERBEDAAN

Dapatkan 267 pelajaran video di 1C gratis:

Contoh penggunaan IS NULL dalam permintaan 1C:

PILIH * DARI
Ref
KONEKSI KIRI DaftarAkumulasi.ProdukDiGudang.Sisa SEBAGAI Sisa Produk
Software NomenclatureRef.Link = Barang TerjualCommitteesRemains.Nomenclature
DIMANA TIDAK TERSISA BARANG. Kuantitas Tersisa adalah NULL

Tipe data dalam kueri dapat ditentukan dengan menggunakan fungsi TYPE() dan VALUETYPE(), atau dengan menggunakan operator logika REFERENCE. Kedua fungsi tersebut serupa.

Nilai yang telah ditentukan sebelumnya

Selain menggunakan parameter yang diteruskan dalam kueri dalam bahasa kueri 1C, Anda dapat menggunakan nilai yang telah ditentukan sebelumnya atau . Misalnya, transfer, direktori yang telah ditentukan sebelumnya, bagan akun, dan sebagainya, konstruksi “Nilai()” digunakan.

Contoh penggunaan:

WHERE Nomenklatur.Jenis Nomenklatur = Nilai(Direktori.Jenis Nomenklatur.Produk)

WHERE Counterparty.Jenis Informasi Kontak = Nilai(Pencacahan.Jenis Informasi Kontak.Telepon)

DIMANA Saldo Akun.Akun Akuntansi = Nilai(Bagan Akun.Laba.LabaRugi)

Koneksi

Ada 4 jenis koneksi: KIRI, BENAR, LENGKAP, INTERNAL.

KONEKSI KIRI dan KANAN

Joins digunakan untuk menghubungkan dua tabel berdasarkan kondisi tertentu. Fitur kapan KIRI GABUNG adalah kita mengambil tabel pertama yang ditentukan secara keseluruhan dan mengikat tabel kedua secara kondisional. Bidang tabel kedua yang tidak dapat dibatasi oleh kondisi diisi dengan nilai BATAL.

Misalnya:

Ini akan mengembalikan seluruh tabel Counterparty dan mengisi kolom “Bank” hanya di tempat di mana kondisi “Counterparty.Name = Banks.Name” akan terpenuhi. Jika kondisi tidak terpenuhi, bidang Bank akan disetel ke BATAL.

GABUNG BENAR dalam bahasa 1C sangat mirip koneksi KIRI, dengan pengecualian satu perbedaan - masuk HAK SAMBUNGAN Tabel “utama” adalah yang kedua, bukan yang pertama.

KONEKSI LENGKAP

KONEKSI LENGKAP berbeda dari kiri dan kanan karena menampilkan semua catatan dari dua tabel dan hanya menghubungkan catatan yang dapat dihubungkan berdasarkan kondisi.

Misalnya:

DARI

KONEKSI LENGKAP
Direktori.Bank BAGAIMANA Bank

OLEH

Bahasa kueri akan mengembalikan kedua tabel secara lengkap hanya jika kondisi untuk menggabungkan catatan terpenuhi. Berbeda dengan gabungan kiri/kanan, NULL mungkin muncul di dua bidang.

GABUNG DALAM

GABUNG DALAM berbeda dari penuh karena hanya menampilkan catatan-catatan yang dapat dihubungkan sesuai dengan kondisi tertentu.

Misalnya:

DARI
Direktori. Pihak rekanan SEBAGAI Klien

GABUNG DALAM
Direktori.Bank BAGAIMANA Bank

OLEH
Klien.Nama = Bank.Nama

Kueri ini hanya akan mengembalikan baris yang bank dan pihak lawannya memiliki nama yang sama.

Asosiasi

Konstruksi JOIN dan JOIN ALL menggabungkan dua hasil menjadi satu. Itu. hasil dari melakukan keduanya akan “digabung” menjadi satu, yang umum.

Artinya, sistem bekerja sama persis dengan sistem biasa, hanya untuk tabel sementara.

Cara menggunakan INDEX BY

Namun, ada satu hal yang perlu diperhatikan. Membangun indeks pada tabel sementara juga membutuhkan waktu untuk diselesaikan. Oleh karena itu, disarankan untuk menggunakan konstruksi “ ” hanya jika diketahui secara pasti bahwa akan ada lebih dari 1-2 record dalam tabel sementara. Jika tidak, efeknya mungkin sebaliknya - kinerja bidang yang diindeks tidak mengimbangi waktu yang diperlukan untuk membuat indeks.

MEMILIH
Nilai tukar mata uang Penampang terbaru.
Nilai tukar mata uang Penampang terbaru.
Nilai Mata Uang PUT
DARI
Daftar Informasi.Kurs Mata Uang.Irisan Terakhir(&Periode,) AS Nilai Mata UangIrisan Terakhir
INDEKS OLEH
Mata uang
;
MEMILIH
HargaNomenklatur.Nomenklatur,
HargaNomenklatur.Harga,
HargaNomenklatur.Mata uang,
Nilai mata uang. Nilai
DARI
Daftar Informasi.Nomenklatur Harga.Irisan Terakhir(&Periode,
Nomenklatur B (&Nomenklatur) DAN Tipe Harga = &Tipe Harga) SEBAGAI Nomenklatur Harga
KIRI BERGABUNG Nilai Mata Uang SEBAGAI Nilai Mata Uang
Perangkat Lunak HargaNomenklatur.Mata Uang = Nilai Mata Uang.Mata Uang

Pengelompokan

Bahasa kueri 1C memungkinkan Anda menggunakan fungsi agregat khusus saat mengelompokkan hasil kueri. Pengelompokan juga dapat digunakan tanpa fungsi agregat untuk “menghilangkan” duplikat.

Fungsi-fungsi berikut ada:

Jumlah, Kuantitas, Jumlah berbeda, Maksimum, Minimum, Rata-rata.

Contoh #1:

MEMILIH
Tata Nama Penjualan Barang dan Jasa,
SUM (Penjualan Barang Jasa Barang. Jumlah) SEBAGAI Kuantitas,
SUM(Penjualan BarangLayananBarang.Jumlah) SEBAGAI Jumlah
DARI

KELOMPOK OLEH
Nomenklatur Penjualan Barang dan Jasa

Kueri menerima semua lini barang dan merangkumnya berdasarkan kuantitas dan jumlah berdasarkan item.

Contoh No.2

MEMILIH
Bank.Kode,
KUANTITAS (Bank.Link BERBEDA) SEBAGAI Jumlah Duplikat
DARI
Direktori.Bank BAGAIMANA Bank
KELOMPOK OLEH
Bank.Kode

Contoh ini akan menampilkan daftar BIC di direktori “Bank” dan menunjukkan berapa banyak duplikat yang ada untuk masing-masing BIC.

Hasil

Hasil merupakan cara memperoleh data dari suatu sistem dengan struktur hierarki. Fungsi agregat dapat digunakan untuk bidang ringkasan, seperti halnya pengelompokan.

Salah satu cara paling populer untuk menggunakan hasil dalam praktiknya adalah penghapusan barang secara batch.

MEMILIH




DARI
Dokumen Penjualan Barang dan Jasa.Barang CARA Penjualan Barang dan Jasa
PESAN OLEH

HASIL
SUM (Kuantitas),
JUMLAH(Jumlah)
OLEH
Tata nama

Hasil kueri akan berupa hierarki berikut:

Hasil umum

Jika Anda perlu mendapatkan total untuk semua “total”, gunakan operator “UMUM”.

MEMILIH
Penjualan Barang dan Jasa Nomenklatur SEBAGAI Nomenklatur,
Penjualan Barang dan Jasa Barang. Link AS Document,
Penjualan Barang dan Jasa Barang Kuantitas SEBAGAI Kuantitas,
Penjualan Barang dan Jasa Barang Jumlah SEBAGAI Jumlah
DARI
Dokumen Penjualan Barang dan Jasa.Barang CARA Penjualan Barang dan Jasa
PESAN OLEH
Tanggal Penjualan Barang dan Jasa
HASIL
SUM (Kuantitas),
JUMLAH(Jumlah)
OLEH
UMUM,
Tata nama

Sebagai hasil dari mengeksekusi permintaan tersebut, kami mendapatkan hasil berikut:

Di mana 1 tingkat pengelompokan adalah agregasi dari semua bidang yang diperlukan.

Mengatur

Operator ORDER BY digunakan untuk mengurutkan hasil query.

Penyortiran untuk tipe primitif (string, angka, boolean) mengikuti aturan biasa. Untuk bidang tipe referensi, pengurutan dilakukan berdasarkan representasi internal tautan (pengidentifikasi unik), bukan berdasarkan kode atau representasi referensi.

MEMILIH

DARI
Direktori.Nomenklatur SEBAGAI Tata Nama
PESAN OLEH
Nama

Permintaan tersebut akan menampilkan daftar nama di direktori nomenklatur, diurutkan berdasarkan abjad.

Pemesanan otomatis

Hasil kueri tanpa pengurutan adalah kumpulan baris yang disajikan secara kacau. Pengembang platform 1C tidak menjamin bahwa baris akan ditampilkan dalam urutan yang sama saat menjalankan kueri yang sama.

Jika Anda perlu menampilkan catatan tabel dalam urutan konstan, Anda harus menggunakan konstruksi Urutan Otomatis.

MEMILIH
Nomenklatur.Nama SEBAGAI Nama
DARI
Direktori.Nomenklatur SEBAGAI Tata Nama
PESANAN OTOMATIS

Tabel virtual

Tabel virtual dalam 1C adalah fitur unik dari bahasa kueri 1C yang tidak ditemukan dalam sintaks serupa lainnya. Tabel virtual adalah cara cepat untuk mendapatkan informasi profil dari register.

Setiap jenis register memiliki kumpulan tabel virtualnya sendiri, yang mungkin berbeda tergantung pada pengaturan register.

  • potongan yang pertama;
  • potongan yang terakhir.
  • sisa;
  • revolusi;
  • saldo dan perputaran.
  • gerakan dari subconto;
  • revolusi;
  • kecepatan Dt Kt;
  • sisa;
  • saldo dan perputaran
  • subkonto.
  • basis;
  • data grafik;
  • masa berlaku sebenarnya.

Bagi pengembang solusi, data diambil dari satu tabel (virtual), namun nyatanya platform 1C mengambil banyak tabel, mengubahnya menjadi bentuk yang diperlukan.

MEMILIH
Produk di Gudang Sisa dan Perputaran.
ProdukDi GudangSisaDanPerputaran.JumlahInisialSisa,
ProdukDi GudangSisaDanPerputaran.PerputaranKuantitas,
BarangDiGudangSisaDanPerputaran.JumlahMasuk,
ProdukDi GudangSisaDanPerputaran.JumlahKonsumsi,
ProdukDi GudangSisaDanPerputaran.JumlahSisa Akhir
DARI
DaftarAkumulasi.BarangDiGudang.SisaDanPerputaran SEBAGAI BarangDi GudangSisaDanPerputaran

Kueri ini memungkinkan Anda mengambil data dalam jumlah besar dengan cepat.

Opsi Tabel Virtual

Aspek yang sangat penting dalam bekerja dengan tabel virtual adalah penggunaan parameter. Parameter tabel virtual adalah parameter khusus untuk pemilihan dan konfigurasi.

Untuk tabel seperti itu, penggunaan pemilihan dalam konstruksi “WHERE” dianggap salah. Selain fakta bahwa kueri menjadi kurang optimal, ada kemungkinan menerima data yang salah.

Contoh penggunaan parameter ini:

Daftar Akumulasi Barang di Gudang. Saldo dan Perputaran (& Awal Periode, & Akhir Periode, Bulan, Pergerakan dan Batas Periode, Nomenklatur = & Nomenklatur yang Wajib)

Algoritma untuk tabel virtual

Misalnya, tabel virtual tipe “Sisa” yang paling banyak digunakan menyimpan data dari dua tabel fisik – saldo dan pergerakan.

Saat menggunakan tabel virtual, sistem melakukan manipulasi berikut:

  1. Kami mendapatkan nilai perhitungan terdekat dalam hal tanggal dan pengukuran di tabel total.
  2. Kami “menambahkan” jumlah dari tabel pergerakan ke jumlah dari tabel total.


Seperti langkah sederhana dapat secara signifikan meningkatkan kinerja sistem secara keseluruhan.

Menggunakan Pembuat Kueri

Pembuat Kueri– alat yang dibangun ke dalam sistem 1C Enterprise yang sangat memudahkan pengembangan kueri basis data.

Pembuat kueri memiliki antarmuka yang cukup sederhana dan intuitif. Namun demikian, mari kita lihat penggunaan konstruktor kueri secara lebih detail.

Konstruktor teks kueri diluncurkan dari menu konteks (tombol kanan mouse) di tempat yang diinginkan dalam kode program.

Deskripsi konstruktor permintaan 1C

Mari kita lihat setiap tab desainer lebih detail. Pengecualian adalah tab Builder, yang merupakan topik untuk diskusi lain.

Tab Tabel dan Bidang

Tab ini menentukan sumber data dan bidang yang perlu ditampilkan dalam laporan. Intinya, konstruksi SELECT.. FROM dijelaskan di sini.

Sumbernya bisa berupa tabel database fisik, tabel register virtual, tabel sementara, kueri bersarang, dll.

Di menu konteks tabel virtual, Anda dapat mengatur parameter tabel virtual:

tab Koneksi

Tab digunakan untuk mendeskripsikan koneksi beberapa tabel dan membuat konstruksi dengan kata CONNECTION.

Tab pengelompokan

Pada tab ini, sistem memungkinkan Anda mengelompokkan dan meringkas bidang yang diperlukan dari hasil tabel. Menjelaskan penggunaan konstruksi GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF DIFFERENT.

tab ketentuan

Bertanggung jawab atas semua yang muncul dalam teks permintaan setelah konstruksi WHERE, yaitu untuk semua kondisi yang dikenakan pada data yang diterima.

Tab lanjutan

tab Selain itu penuh dengan segala macam parameter yang sangat penting. Mari kita lihat masing-masing propertinya.

Pengelompokan Memilih catatan:

  • N pertama– parameter yang mengembalikan hanya N catatan ke kueri (operator PERTAMA)
  • Tidak ada duplikat– memastikan keunikan catatan yang diterima (operator BERBEDA)
  • Diizinkan– memungkinkan Anda untuk memilih hanya catatan-catatan yang diizinkan oleh sistem untuk Anda pilih dengan mempertimbangkan (konstruksi yang DIIZINKAN)

Pengelompokan Jenis permintaan menentukan jenis kueri yang akan dibuat: mengambil data, membuat tabel sementara, atau menghancurkan tabel sementara.

Di bawahnya ada bendera Kunci data yang diterima untuk modifikasi nanti. Ini memungkinkan Anda untuk mengaktifkan kemampuan untuk mengatur penguncian data, yang menjamin keamanan data dari saat dibaca hingga diubah (hanya relevan untuk Modus otomatis saling bertautan, desain UNTUK BERUBAH).

Tab Gabung/Alias

Pada tab perancang kueri ini, Anda dapat mengatur kemampuan untuk menggabungkan tabel dan alias yang berbeda (konstruksi BAGAIMANA). Tabel ditunjukkan di sisi kiri. Jika Anda menyetel bendera di seberang tabel, konstruksi UNITE akan digunakan, jika tidak - UNITE ALL (perbedaan antara kedua metode). Di sisi kanan, korespondensi bidang dalam tabel yang berbeda ditunjukkan; jika korespondensi tidak ditentukan, kueri akan mengembalikan NULL.

tab pesanan

Ini menentukan urutan pengurutan nilai (ORDER BY) - descending (DESC) atau ascending (ASC).

Ada juga bendera yang menarik - Pemesanan otomatis(dalam permintaan - PEMESANAN OTOMATIS). Secara default, sistem 1C menampilkan data dalam urutan “kacau”. Jika Anda menyetel tanda ini, sistem akan mengurutkan data berdasarkan data internal.

Tab Kumpulan Kueri

Pada tab perancang kueri, Anda bisa membuat yang baru dan juga menggunakannya sebagai navigasi. Dalam teks permintaan, paket dipisahkan dengan simbol “;” (koma).

Tombol "Kueri" di perancang kueri

Di sudut kiri bawah pembuat permintaan terdapat tombol Permintaan, yang dengannya Anda dapat melihat teks permintaan kapan saja:

Di jendela ini, Anda dapat melakukan penyesuaian terhadap permintaan dan menjalankannya.


Menggunakan Konsol Kueri

Konsol Kueri adalah cara sederhana dan nyaman untuk men-debug kueri kompleks dan memperoleh informasi dengan cepat. Pada artikel kali ini saya akan mencoba menjelaskan cara menggunakan Query Console dan memberikan link untuk mendownload Query Console.

Mari kita lihat lebih dekat alat ini.

Unduh konsol kueri 1C

Pertama-tama, untuk mulai bekerja dengan konsol kueri, Anda perlu mengunduhnya dari suatu tempat. Perawatan biasanya dibagi menjadi dua jenis - bentuk-bentuk yang dikendalikan dan reguler (atau terkadang disebut 8.1 dan 8.2/8.3).

Saya mencoba menggabungkan dua tampilan ini dalam satu pemrosesan - formulir yang diinginkan terbuka dalam mode operasi yang diinginkan (dalam mode terkelola, konsol hanya berfungsi dalam mode tebal).

Deskripsi konsol kueri 1C

Mari kita mulai melihat konsol kueri dengan deskripsi panel pemrosesan utama:

Di header konsol kueri, Anda dapat melihat waktu eksekusi kueri terakhir dengan akurasi milidetik, ini memungkinkan Anda membandingkan desain yang berbeda dalam hal kinerja.

Kelompok tombol pertama di bilah perintah bertanggung jawab untuk menyimpan kueri saat ini ke file eksternal. Ini sangat mudah; Anda selalu dapat kembali menulis permintaan yang rumit. Atau, misalnya, menyimpan daftar contoh khas desain tertentu.

Di sebelah kiri, di bidang “Permintaan”, Anda dapat membuat permintaan baru dan menyimpannya dalam struktur pohon. Kelompok tombol kedua bertanggung jawab untuk mengelola daftar permintaan. Dengan menggunakannya Anda dapat membuat, menyalin, menghapus, memindahkan permintaan.

  • Menjalankanmeminta– eksekusi dan hasil sederhana
  • Jalankan paket– memungkinkan Anda melihat semua kueri perantara dalam kumpulan kueri
  • Melihat tabel sementara– memungkinkan Anda melihat hasil yang dikembalikan oleh kueri sementara pada tabel

Parameter permintaan:

Memungkinkan Anda mengatur parameter permintaan saat ini.

Di jendela parameter kueri, berikut ini yang menarik:

  • Tombol Dapatkan dari permintaan secara otomatis menemukan semua parameter dalam permintaan untuk kenyamanan pengembang.
  • Bendera Parameter umum untuk semua permintaan– saat diinstal, pemrosesannya tidak menghapus parameter saat berpindah dari satu permintaan ke permintaan lainnya dalam daftar umum permintaan.

Tetapkan parameter dengan daftar nilai Caranya sangat sederhana, cukup ketika memilih nilai parameter, klik tombol hapus nilai (silang), sistem akan meminta Anda untuk memilih tipe data, di mana Anda harus memilih “Daftar Nilai”:

Juga di panel atas terdapat tombol untuk memanggil pengaturan konsol kueri:

Di sini Anda dapat menentukan parameter untuk kueri penyimpanan otomatis dan parameter eksekusi kueri.

Teks permintaan dimasukkan ke dalam bidang permintaan konsol. Hal ini dapat dilakukan hanya dengan mengetik tes kueri atau dengan memanggil alat khusus - perancang kueri.

Konstruktor permintaan 1C 8 dipanggil dari menu konteks(tombol kanan mouse) saat mengklik kolom input:

Juga di menu ini ada seperti itu fitur yang berguna, seperti menghapus atau menambahkan jeda baris (“|”) ke permintaan, atau mendapatkan kode permintaan dalam bentuk yang mudah digunakan ini:

Permintaan = Permintaan Baru;
Permintaan.Teks = ”
|PILIH
| Mata Uang. Tautan
|DARI
| Direktori.Mata Uang SEBAGAI Mata Uang”;
RequestResult = Permintaan.Eksekusi();

Bidang bawah konsol kueri menampilkan bidang hasil kueri, itulah sebabnya pemrosesan ini dibuat:



Selain itu, konsol kueri, selain daftar, dapat menampilkan data dalam bentuk pohon - untuk kueri yang berisi total.

Pengoptimalan kueri

Salah satu poin terpenting dalam meningkatkan produktivitas 1C enterprise 8.3 adalah optimasipermintaan. Poin ini juga sangat penting ketika lulus sertifikasi. Di bawah ini kita akan membahas tentang alasan umum untuk tidak melakukannya kinerja optimal kueri dan metode pengoptimalan.

Seleksi dalam tabel virtual menggunakan konstruksi WHERE

Penting untuk menerapkan filter ke detail tabel virtual hanya melalui parameter VT. Dalam situasi apa pun Anda tidak boleh menggunakan konstruksi WHERE untuk memilih dalam tabel virtual; ini adalah kesalahan besar dari sudut pandang pengoptimalan. Dalam hal pemilihan menggunakan WHERE, sebenarnya sistem akan menerima SEMUA record dan baru kemudian memilih yang diperlukan.

BENAR:

MEMILIH

DARI
Daftar Akumulasi. Penyelesaian bersama dengan Peserta Organisasi (
,
Organisasi = &Organisasi
DAN Individu = & Individu) BAGAIMANA Penyelesaian Bersama dengan Peserta Organisasi Saldo

SALAH:

MEMILIH
Penyelesaian bersama dengan Saldo Jumlah Peserta Organisasi
DARI
Daftar Akumulasi. Penyelesaian bersama dengan Peserta Organisasi. Saldo (,) BAGAIMANA Penyelesaian Saldo dengan Peserta Organisasi
DI MANA
Penyelesaian bersama dengan Peserta Organisasi Saldo. Organisasi = & Organisasi
DAN Penyelesaian bersama dengan Peserta Organisasi Saldo Perorangan = & Perorangan

Mendapatkan nilai bidang bertipe kompleks menggunakan titik

Saat menerima data bertipe kompleks dalam kueri melalui sebuah titik, sistem menghubungkan dengan gabungan kiri tabel sebanyak mungkin tipe yang ada di bidang tipe kompleks.

Misalnya, sangat tidak diinginkan untuk melakukan optimasi untuk mengakses bidang catatan register – registrar. Pendaftar memiliki tipe data komposit, di antaranya terdapat semua kemungkinan tipe dokumen yang dapat menulis data ke register.

SALAH:

MEMILIH
Kumpulan Rekaman.Perekam.Tanggal,
RecordSet.Kuantitas
DARI
DaftarAkumulasi.ProdukOrganisasi SEBAGAI Kumpulan Catatan

Faktanya, kueri seperti itu tidak akan mengakses satu tabel, tetapi 22 tabel database (register ini memiliki 21 tipe registrar).

BENAR:

MEMILIH
PILIHAN
KETIKA ProductsOrg.Registrar LINK Dokumen.Penjualan Produk dan Layanan
KEMUDIAN EXPRESS(ProductsOrg.Registrar SEBAGAI Dokumen.Penjualan BarangLayanan).Tanggal
KETIKA GoodsOrg.Registrar LINK Dokumen.Penerimaan BarangJasa
LALU EKSPRES(GoodsOrg.Registrar SEBAGAI Dokumen.Penerimaan Jasa Barang).Tanggal
AKHIR SEBAGAI TANGGAL,
ProdukOrg.Kuantitas
DARI
DaftarAkumulasi.Organisasi Barang SEBAGAI Organisasi Barang

Atau opsi kedua adalah menambahkan informasi tersebut ke detailnya, misalnya, dalam kasus kami, menambahkan tanggal.

BENAR:

MEMILIH
ProdukOrganisasi.Tanggal,
ProdukOrganisasi.Kuantitas
DARI
Daftar Akumulasi. Barang Organisasi SEBAGAI Barang Organisasi

Subkueri dalam kondisi bergabung

Untuk pengoptimalan, penggunaan subkueri dalam kondisi gabungan tidak dapat diterima; ini memperlambat kueri secara signifikan. Dianjurkan untuk menggunakan VT dalam kasus seperti itu. Untuk terhubung, Anda hanya perlu menggunakan objek metadata dan VT, setelah sebelumnya mengindeksnya berdasarkan bidang koneksi.

SALAH:

MEMILIH …

KIRI GABUNG (
PILIH DARI DaftarInformasi.Batas
DI MANA …
KELOMPOK BERDASARKAN...
) OLEH …

BENAR:

MEMILIH …
Batasan PUT
DARI Daftar Informasi.Batas
DI MANA …
KELOMPOK BERDASARKAN...
INDEKS OLEH...;

MEMILIH …
DARI Dokumen Penjualan Barang dan Jasa
Batas GABUNG KIRI
OLEH …;

Menggabungkan Catatan dengan Tabel Virtual

Ada situasi ketika, saat menghubungkan tabel virtual ke tabel lain, sistem tidak bekerja secara optimal. Dalam hal ini, untuk mengoptimalkan kinerja kueri, Anda dapat mencoba menempatkan tabel virtual di tabel sementara, jangan lupa untuk mengindeks bidang yang digabungkan dalam kueri tabel sementara. Hal ini disebabkan oleh fakta bahwa VT sering kali terdapat dalam beberapa tabel DBMS fisik, akibatnya subkueri dikompilasi untuk memilihnya, dan masalahnya serupa dengan poin sebelumnya.

Menggunakan pilihan berdasarkan bidang yang tidak diindeks

Salah satu kesalahan paling umum saat menulis kueri adalah menggunakan kondisi pada bidang yang tidak diindeks, hal ini bertentangan aturan pengoptimalan kueri. DBMS tidak dapat mengeksekusi query secara optimal jika query menyertakan pilihan pada field yang tidak dapat diindeks. Jika Anda mengambil tabel sementara, Anda juga perlu mengindeks bidang koneksi.

Harus ada indeks yang sesuai untuk setiap kondisi. Indeks yang sesuai adalah indeks yang memenuhi persyaratan berikut:

  1. Indeks berisi semua bidang yang tercantum dalam kondisi.
  2. Bidang-bidang ini berada di awal indeks.
  3. Pilihan ini berurutan, yaitu nilai yang tidak terlibat dalam kondisi kueri tidak “terjepit” di antara keduanya.

Jika DBMS tidak memilih indeks yang benar, seluruh tabel akan dipindai - ini akan berdampak sangat negatif pada kinerja dan dapat menyebabkan pemblokiran seluruh kumpulan catatan dalam waktu lama.

Menggunakan Logis ATAU dalam Kondisi

Itu saja, artikel ini membahas aspek dasar pengoptimalan kueri yang harus diketahui oleh setiap pakar 1C.

Kursus video gratis yang sangat berguna tentang pengembangan dan pengoptimalan kueri, Saya sangat merekomendasikan untuk pemula dan banyak lagi!

Platform ini menghasilkan tabel virtual Saldo, Perputaran, dan Saldo dan Perputaran; hanya untuk omset saat ini:
Tabel virtual tidak ada secara fisik dalam database; tabel tersebut dibuat pada tingkat platform untuk meningkatkan kecepatan dan kenyamanan akses pengembang ke data.

Sebelum membuat tabel virtual, data dapat dipilih berdasarkan parameter. Kumpulan parameter berbeda untuk tabel yang berbeda. Untuk tabel Sisa, ini adalah periode saldo dan kondisi arbitrer:

Untuk tabel Turnover, periodenya dibagi menjadi dua (awal dan akhir), dan ditambahkan pengaturan Periodisitas:

Untuk tabel Saldo dan Omset, pengaturan Metode Penambahan ditambahkan:

Mari kita lihat lebih dekat semua parameter ini.

  • Parameter Periode (Awal periode, Akhir periode) dapat mengambil nilai tipe Tanggal:

serta tipe Momen dalam Waktu dan Batas:

Penting bahwa jika Anda menggunakan tipe Tanggal atau Momen dalam Waktu (kombinasi Tanggal dan Tautan), kedua kalinya, yang ditentukan di bidang pilihan, tidak diperhitungkan dalam pemilihan data! Itu sudah berada “di luarnya”, sampel dibuat sebelum/sesudah momen tertentu.

Dalam hal menggunakan tipe Batas, nuansa ini dapat disesuaikan, karena Anda dapat menentukan tipe batas: tampilkan data termasuk atau tidak termasuk detik yang ditentukan:

  • Parameter Frekuensi- memungkinkan Anda menentukan periode pencatatan akan diberikan. Misalnya, jika frekuensinya adalah Tahun, maka semua catatan akan ditampilkan pada tanggal 1 Januari.

Opsi Frekuensi otomatis sangat menarik; ini memungkinkan Anda membawa data ke beberapa periode dalam satu permintaan. Di perancang kueri, semua opsi periode tersedia; Anda dapat memilih yang Anda perlukan:

Hasil:

  • Metode Penambahan Parameter- menentukan apakah akan membuat permintaan hanya berdasarkan pergerakan untuk periode tersebut (opsi Pergerakan), atau memperhitungkan saldo awal(Opsi batas pergerakan dan periode). Outputnya sangat baik sebagai berikut: jika, misalnya, menurut nomenklatur ada saldo di awal, tetapi tidak ada perputaran untuk periode tersebut, maka dalam kasus Mutasi tidak akan dimasukkan dalam sampel; dalam hal batas Pergerakan dan periode - akan jatuh dengan perputaran nol
  • Kondisi Parameter- memungkinkan Anda untuk menerapkan kondisi sewenang-wenang pada pengukuran register:

Soal 07.46 ujian 1C: Platform Profesional. Saat menentukan opsi frekuensi "Otomatis" di tabel virtual "Saldo dan Perputaran":

  1. sistem akan secara otomatis memilih frekuensi penerimaan putaran berdasarkan aturan: sehingga hasilnya minimal 3 nilai periode, tetapi tidak lebih dari 12
  2. sistem akan secara otomatis memilih frekuensi penerimaan putaran berdasarkan aturan: sehingga hasilnya minimal 5 nilai periode, tetapi tidak lebih dari 10
  3. di bidang pilihan kueri, pengembang akan dapat memilih bidang periode dengan frekuensi berbeda

Jawaban yang benar adalah yang ketiga, analisis di atas.

Register akumulasi dalam sistem 1C:Enterprise dibagi menjadi dua jenis: register akumulasi sisa dan register akumulasi rpm.

Jenis register dipilih saat membuatnya di konfigurator

Sesuai dengan namanya, ada yang dimaksudkan untuk memperoleh saldo pada tanggal tertentu, dan ada pula yang dimaksudkan untuk memperoleh omzet pada suatu periode tertentu. Bergantung pada jenis register akumulasi, platform 1C:Enterprise menghasilkan kumpulan tabel virtual yang berbeda. Pada artikel ini kita akan melihat cara bekerja dengan tabel virtual register akumulasi. Untuk melakukan ini, kami akan membuat daftar untuk mengumpulkan saldo - Produk Tetap dan daftar akumulasi revolusi - Perputaran Produk.

Sekarang mari kita lihat tabel virtual apa yang disediakan platform untuk masing-masing register ini.

Daftar akumulasi revolusi

Agar lebih jelas mari kita buka dan lihat meja mana saja yang tersedia untuk didaftarkan Perputaran Produk. Ini adalah tabel register itu sendiri - Perputaran Produk, yang ada secara fisik di database, dan satu tabel virtual - Perputaran Produk.Perputaran

Dengan tabel standar semuanya jelas. Mari kita lihat lebih dekat yang virtual.

Perputaran meja virtual

Tabel ini memungkinkan Anda memperoleh perputaran sumber daya dalam hal dimensi. Dalam kasus kami, kami memiliki dua dimensi: Gudang Dan Produk. Dan satu sumber daya - Kuantitas

Biarkan register kami memiliki entri berikut

Mari kembali ke perancang kueri dan mulai dengan memilih dari tabel Perputaran Produk.Perputaran semua bidang

Oleh karena itu, permintaannya akan terlihat seperti ini:

PILIH ProductsTurnoverTurnover.Warehouse, ProductsTurnoverTurnover.Product, ProductsTurnoverTurnover.QuantityTurnover DARI RegisterAccumulation.ProductsTurnover.Turnover(,) SEBAGAI ProductsTurnoverTurnover

Hasil kuerinya terlihat seperti ini:

Artinya, kami menerima omset barang dan gudang sepanjang waktu. Anggap saja kita tidak tertarik dengan gudang dan ingin mendapat omzet hanya dari segi barang saja.

Untuk melakukan ini, kami mengecualikan dimensi dari permintaan Gudang

PILIH ProductsTurnoverTurnover.Product, ProductTurnoverTurnover.QuantityTurnover DARI RegisterAccumulation.ProductsTurnover.Turnover(,) SEBAGAI ProductsTurnoverTurnover

dan sebagai hasilnya kita hanya akan memiliki dua baris tersisa

Namun sebagai aturan, tidak perlu menerima omset untuk seluruh keberadaan register. Pada dasarnya, mereka diperlukan untuk periode tertentu: bulan, kuartal, tahun, dll. Selain itu, pemilihan berdasarkan dimensi (Produk, Gudang) biasanya diperlukan. Ini dicapai dengan menggunakan parameter tabel virtual. Lebih mudah untuk mengisi parameter dari konstruktor. Dengan tombol Opsi Tabel Virtual Kotak dialog terbuka di mana Anda dapat memasukkan semua yang kami butuhkan:

Setelah ini, permintaan awal kami akan mengambil bentuk berikut

PILIH Perputaran Barang.Gudang,Perputaran Barang.Produk,Perputaran Barang.PerputaranKuantitas DARI Akumulasi Daftar.Perputaran Barang.Perputaran(&Awal Periode, &Akhir Periode, Gudang = &Gudang) SEBAGAI Perputaran Barang

Seperti yang bisa kita lihat, perbedaannya adalah di dalam tanda kurung setelah nama tabel virtual terdapat parameter yang harus diisi sebelum mengeksekusi query.

Mereka yang baru mulai bekerja dengan tabel virtual sering kali tergoda untuk menyetel pilihan dengan cara biasa daripada menggunakan parameter:

DARI RegisterAccumulations.ProductsTurnover.Turnover(,) BAGAIMANA ProductsTurnoverTurnover WHERE ProductsTurnoverTurnover.Warehouse = &Warehouse

Saat mengisi parameter yang kami lewatkan Periodisitas. Mari kita buka daftarnya dan pilih dari sekian banyak opsi yang memungkinkan Bulan. Kami akan menghapus semua parameter lainnya agar tidak bingung.

Setelah ini, kita mengamati bahwa sebuah bidang muncul di bidang tabel Periode.

Dengan menambahkannya ke bidang yang dipilih, kami mendapatkan teks permintaan berikut:

PILIH ProductsTurnoverTurnover.Period, ProductsTurnoverTurnover.Warehouse, ProductsTurnoverTurnover.Product, ProductsTurnoverTurnover.QuantityTurnover DARI RegisterAccumulation.ProductsTurnover.Turnover(, Bulan,) SEBAGAI ProductsTurnoverTurnover

Kami menjalankan permintaan:

Dengan demikian, dalam interval waktu yang dipilih, kita dapat membagi putaran menjadi interval yang lebih kecil sesuai dengan frekuensi yang dipilih.

Daftar akumulasi saldo

Sama seperti register terbalik, mari kita lihat di perancang kueri tabel virtual apa yang tersedia untuk register akumulasi saldo

Seperti yang Anda lihat, tiga tabel virtual tersedia untuk register akumulasi saldo: Revolusi, Sisa, Sisa dan Perputaran. Mari kita pertimbangkan masing-masing secara terpisah.

Perputaran meja virtual

Terlepas dari kenyataan bahwa jenis registernya adalah Sisa, kita tetap bisa menerima omzet darinya. Selain itu, kami memiliki dua sumber daya tambahan di sini: Yang akan datang Dan Konsumsi

Izinkan saya mengingatkan Anda bahwa ketika entri dibuat dalam register saldo, jenis pergerakan akumulasi (pendapatan atau pengeluaran) ditunjukkan, sedangkan untuk register omset, jenis pergerakan tidak ditunjukkan. Oleh karena itu, di sini kami memiliki bonus tambahan berupa kesempatan untuk menerima tidak hanya omzet keseluruhan untuk periode tersebut, tetapi juga pendapatan dan pengeluaran secara terpisah. Namun tentu saja, jika metadata berisi register terbalik dengan serangkaian pengukuran serupa, maka lebih baik menggunakannya untuk mendapatkan omset. Secara umum, bekerja dengan tabel virtual ini mirip dengan bekerja dengan tabel virtual Revolusi register yang dapat dinegosiasikan yang dibahas di atas.

Saldo tabel virtual

Tabel ini digunakan untuk memperoleh keseimbangan sumber daya berdasarkan dimensi. Dalam parameter tabel kita dapat menentukan tanggal penerimaan saldo dan mengatur pilihan:

Mari kita lihat contoh kecilnya. Kami memiliki entri register berikut:

Mari pilih semua bidang yang tersedia dan tetapkan akhir Juni sebagai tanggal penerimaan saldo. Kami tidak akan memilih berdasarkan pengukuran. Maka teks permintaan akan terlihat seperti ini:

PILIH ProductsRemainingsRemainings.Gudang, ProductsRemainingsRemainings.Product, ProductsRemainingsRemainings.QuantityRemaining DARI RegisterAccumulations.ProductsRemainings.Remainings(&DateRemainings,) SEBAGAI ProductsRemainingsRemainings

Dan setelah mengeksekusinya kita mendapatkan hasil ini

Tabel Virtual Saldo dan Perputaran

Tabel ini menggabungkan dua tabel yang telah dibahas sebelumnya dan memungkinkan Anda memperoleh omset untuk periode waktu yang dipilih, serta saldo di awal dan akhir periode. Anda juga dapat mengatur pilihan.

Penggunaan tabel ini dapat dibenarkan ketika Anda perlu memperoleh perputaran dan saldo pada awal dan akhir periode secara bersamaan dalam satu laporan. Dalam kasus lain, Anda tidak boleh menyalahgunakan penggunaannya.

Mari buat laporan dengan satu kumpulan data kueri:

PILIH PRODUK DI GUDANG YANG TERSISA. Gudang, Barang Di GudangSisa. Nomenklatur, Produk di Gudang Tersisa. QuantityBalance DARI Daftar Akumulasi. Produk Di Gudang. Sisa(&Tanggal Saya,) SEBAGAI ProdukDi GudangSisa

Sekarang mari kita pergi ke tab parameter dan melihat bahwa sistem, selain parameter &Tanggal Saya, juga telah membuat parameter &Periode.
Untuk memantau periode secara visual, kita akan membuat formulir laporan utama dan menempatkan bidang tabel dengan data di dalamnya: Settings Composer.Settings.DataParameters

Mari simpan laporannya dan buka di perusahaan. Di bidang tabel dengan parameter, hanya parameter &Periode yang ditampilkan:

Oleh karena itu, perubahan apa pun pada parameter ini tidak akan memberikan hasil yang diinginkan.

Mengapa parameter &Tanggal Saya tidak tersedia? Tentu saja, karena pada tab parameter dia mencentang kotaknya Batasan ketersediaan.

Hapus centang pada kotak. Sekarang kita melihat keduanya dalam parameter yang tersedia. Hanya saat membuat laporan kita akan melihat bahwa laporan tersebut bereaksi terhadap parameter &Periode, dan bukan terhadap &Tanggal Saya.

Dalam contoh ini, hal paling sederhana yang harus dilakukan adalah mengganti nama parameter &MyDate dalam permintaan menjadi &Period dan mencapai hasil yang diinginkan. Tapi mungkin Anda memiliki pertanyaan yang parameter &Periodenya sudah digunakan, atau pandangan agama Anda tidak mengizinkan Anda menggunakan parameter ini, dalam hal apa pun, Anda dapat menyelesaikan masalah seperti ini:

PILIH PRODUK DI GUDANG YANG TERSISA. Gudang, Barang Di GudangSisa. Nomenklatur, Produk di Gudang Tersisa. QuantityBalance DARI Daftar Akumulasi. Produk Di Gudang. Sisa((&Tanggal Saya) ,) SEBAGAI ProdukDi GudangSisa

UPD dari pengguna Huuu:

Masalah utama saat menggunakan parameter "standar" (ditambahkan sistem) adalah ketika menggunakan beberapa tabel virtual dalam laporan, jika parameter ini ditentukan, nilainya akan digunakan dalam semua kasus lain, bukan yang "sendiri".

Izinkan saya memberi Anda sebuah contoh:

PILIH EmployeesSP.Employee, WorkersSP.ReasonChangesState, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates SEBAGAI ReasonChangesState2 DARI RegisterInformation.EmployeesOrganizations.SliceLast(&Period , Employee = &Employee ) SEBAGAI Work nikkiSP KONEKSI KIRI Daftar Informasi.Karyawan Organisasi.Sepotong Terbaru(&Tanggal Lain,) SEBAGAI KaryawanSPAnotherDate OLEH KaryawanSP.Employee = EmployeesSPAnotherDate.Employee

Pada subkueri kedua, nilai parameter PERIOD “standar” akan digunakan sebagai parameter tanggal irisan, bukan nilai OtherDate.

“Kesalahan” ini akan terlihat bahkan jika subkueri kedua dikeluarkan ke kumpulan data kedua dan ditautkan menggunakan ACS. Opsi yang menggunakan ekspresi seperti “ADDATE(&Period, MONTH, -1)” pada permintaan kedua juga tidak akan berfungsi, bulan tidak akan dikurangi. Namun mengganti nama parameter "Periode" dalam permintaan menjadi, misalnya, "Tanggal Pertama" akan menyelesaikan masalah ini.

Omong-omong, masalah yang sama persis terjadi pada tabel akumulasi virtual dan register akuntansi, yang digunakan untuk memperoleh, misalnya, omset. Di sana sistem menambahkan parameter “Awal Periode” dan “Akhir Periode”.
Jadi dalam kasus kueri dengan kompleksitas yang sedikit meningkat, masuk akal untuk menonaktifkan ketersediaan dan penggunaan “periode standar”.