Gabungkan hasil kueri. Menggabungkan hasil query Cara menggabungkan query menjadi satu 1c

Bahasa kueri adalah salah satu mekanisme dasar 1C 8.3 untuk pengembang. Dengan menggunakan kueri, Anda dapat dengan cepat mengambil data apa pun yang disimpan dalam database. Sintaksnya sangat mirip dengan SQL, tetapi ada beberapa perbedaan.

Keuntungan utama bahasa kueri 1C 8.3 (8.2) dibandingkan SQL:

  • bidang referensi dereferensi (merujuk satu atau lebih titik ke detail objek);
  • bekerja dengan hasil sangat nyaman;
  • kemampuan untuk membuat tabel virtual;
  • permintaan dapat ditulis dalam bahasa Inggris dan Rusia;
  • kemampuan untuk memblokir data untuk menghindari kebuntuan.

Kekurangan bahasa query di 1C:

  • tidak seperti SQL, dalam kueri 1C tidak mengizinkan perubahan data;
  • kurangnya prosedur tersimpan;
  • ketidakmungkinan mengubah string menjadi angka.

Mari kita lihat tutorial mini kami tentang konstruksi dasar bahasa kueri 1C.

Karena kueri di 1C hanya memungkinkan Anda menerima data, kueri apa pun harus dimulai dengan kata "PILIH". Setelah perintah ini, bidang dari mana data harus diperoleh ditunjukkan. Jika Anda menentukan “*”, semua bidang yang tersedia akan dipilih. Tempat dari mana data akan dipilih (dokumen, register, direktori, dll.) ditunjukkan setelah kata “DARI”.

Dalam contoh yang dibahas di bawah ini, nama seluruh nomenklatur dipilih dari direktori “Nomenklatur”. Setelah kata “BAGAIMANA”, alias (nama) untuk tabel dan bidang ditunjukkan.

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

Di samping perintah “PILIH” Anda dapat menentukan kata kunci:

  • BERMACAM-MACAM. Kueri hanya akan memilih baris yang berbeda setidaknya dalam satu bidang (tanpa duplikat).
  • N pertama, Di mana N– jumlah baris dari awal hasil yang perlu dipilih. Paling sering, konstruksi ini digunakan bersamaan dengan penyortiran (ORDER BY). Misalnya, ketika Anda perlu memilih sejumlah dokumen terbaru berdasarkan tanggal.
  • DIIZINKAN. Desain ini memungkinkan Anda untuk memilih dari database hanya catatan-catatan yang tersedia untuk pengguna saat ini. Berdasarkan penggunaan kata kunci ini, pengguna akan menerima pesan kesalahan saat mencoba menanyakan rekaman yang tidak dapat mereka akses.

Kata kunci ini dapat digunakan secara bersamaan atau terpisah.

UNTUK PERUBAHAN

Proposal ini memblokir data untuk mencegah konflik timbal balik. Data yang terkunci tidak akan dibaca dari koneksi lain hingga transaksi berakhir. Dalam klausa ini, Anda dapat menentukan tabel tertentu yang perlu dikunci. Jika tidak, semua orang akan diblokir. Desainnya hanya relevan untuk mode penguncian otomatis.

Paling sering, klausa “UNTUK PERUBAHAN” digunakan saat menerima saldo. Lagi pula, ketika beberapa pengguna mengerjakan program secara bersamaan, sementara yang satu menerima saldo, yang lain dapat mengubahnya. Dalam hal ini, sisa yang dihasilkan tidak lagi benar. Jika Anda memblokir data dengan proposal ini, maka hingga karyawan pertama menerima saldo yang benar dan melakukan semua manipulasi yang diperlukan dengannya, karyawan kedua akan terpaksa menunggu.

MEMILIH
Penyelesaian bersama Karyawan,
Penyelesaian bersama Jumlah penyelesaian bersama Saldo
DARI
Daftar Akumulasi Penyelesaian bersama dengan karyawan Saldo SEBAGAI Penyelesaian bersama
UNTUK PERUBAHAN

DI MANA

Perancangan diperlukan untuk memaksakan semacam seleksi pada data yang diunggah. Dalam beberapa kasus memperoleh data dari register, lebih masuk akal untuk menentukan kondisi pemilihan dalam parameter tabel virtual. Saat menggunakan "WHERE", semua catatan diambil terlebih dahulu, dan baru kemudian pemilihan diterapkan, yang secara signifikan memperlambat kueri.

Di bawah ini adalah contoh permintaan untuk mendapatkan contact person untuk posisi tertentu. Parameter pemilihan memiliki format: &NamaParameter (nama parameter dapat berubah-ubah).

SELEKSI (KASUS)

Desainnya memungkinkan Anda menentukan kondisi langsung di isi permintaan.

Pada contoh di bawah, “Bidang Tambahan” akan berisi teks tergantung pada apakah dokumen tersebut diposting atau tidak:

MEMILIH
PenerimaanT&U.Link,
PILIHAN
KAPAN PenerimaanT&U.Dilakukan
LALU “Dokumennya sudah disahkan!”
LAINNYA “Dokumen itu tidak diposting...”
AKHIR SEBAGAI Bidang Tambahan
DARI
Dokumen Penerimaan Barang dan Jasa CARA S&K Penerimaan

BERGABUNG

Menggabungkan tautan dua tabel berdasarkan kondisi hubungan tertentu.

KONEKSI KIRI/KANAN

Inti dari gabungan KIRI adalah bahwa tabel pertama yang ditentukan diambil secara keseluruhan dan tabel kedua ditautkan sesuai dengan kondisi koneksi. Jika tidak ada record yang sesuai dengan tabel pertama di tabel kedua, maka NULL diganti sebagai nilainya. Sederhananya, tabel utama adalah tabel pertama yang ditentukan dan data tabel kedua (jika ada) sudah menggantikan datanya.

Misalnya, perlu untuk memperoleh item barang dari dokumen “Penerimaan barang dan jasa” dan harga dari daftar informasi “Harga barang”. Dalam hal ini, jika harga untuk posisi apa pun tidak ditemukan, gantikan dengan NULL. Semua item dari dokumen akan dipilih terlepas dari apakah item tersebut memiliki harga atau tidak.

MEMILIH
Kwitansi & Nomenklatur U,
Harga.Harga
DARI
Dokumen Kwitansi Barang dan Jasa CARA Kwitansi dan Spesifikasi Barang
INTERNAL GABUNG DaftarInformasi.HargaNomenklatur.IrisanHarga AS Terakhir
Tanda Terima Perangkat Lunak&U.Nomenklatur = Harga.Nomenklatur

DI DALAM BENAR semuanya justru sebaliknya.

KONEKSI LENGKAP

Jenis koneksi ini berbeda dari yang sebelumnya karena semua rekaman tabel pertama dan tabel kedua akan dikembalikan. Jika tidak ada catatan yang ditemukan di tabel pertama atau kedua berdasarkan kondisi tautan yang ditentukan, NULL akan dikembalikan.

Saat menggunakan koneksi penuh pada contoh sebelumnya, semua item barang dari dokumen “Kwitansi Barang dan Jasa” dan semua harga terbaru dari daftar “Harga Barang” akan dipilih. Nilai record yang tidak ditemukan pada tabel pertama dan kedua akan sama dengan NULL.

GABUNG DALAM

Perbedaan antara INNER JOIN dan FULL JOIN adalah jika record tidak ditemukan di setidaknya satu tabel, query tidak akan menampilkannya sama sekali. Akibatnya, hanya item-item tersebut dari dokumen “Kwitansi Barang dan Jasa” yang akan dipilih yang terdapat catatan dalam register informasi “Harga Barang”, jika pada contoh sebelumnya kita mengganti “FULL” dengan “INTERNAL”.

KELOMPOK OLEH

Pengelompokan dalam kueri 1C memungkinkan Anda untuk menciutkan baris tabel (bidang pengelompokan) menurut karakteristik umum tertentu (bidang pengelompokan). Bidang pengelompokan hanya dapat ditampilkan menggunakan fungsi agregat.

Hasil dari query berikut akan berupa daftar jenis produk dengan harga maksimumnya.

MEMILIH
,
MAX(Harga.Harga) SEBAGAI Harga
DARI

KELOMPOK OLEH
Harga.Nomenklatur.Jenis Nomenklatur

HASIL

Tidak seperti pengelompokan, saat menggunakan total, semua catatan ditampilkan dan total baris ditambahkan ke dalamnya. Pengelompokan hanya menampilkan catatan umum.

Hasil dapat diringkas untuk seluruh tabel (menggunakan kata kunci “UMUM”), untuk beberapa bidang, untuk bidang dengan struktur hierarki (kata kunci “HIERARCHY”, “HANYA HIERARCHY”). Saat merangkum hasil, tidak perlu menggunakan fungsi agregat.

Mari kita lihat contoh serupa dengan contoh di atas menggunakan pengelompokan. Dalam hal ini, hasil kueri tidak hanya akan mengembalikan bidang yang dikelompokkan, tetapi juga catatan terperinci.

MEMILIH
Harga.Nomenklatur.Jenis Nomenklatur SEBAGAI Jenis Nomenklatur,
Harga.Harga SEBAGAI Harga
DARI
Daftar Informasi Harga Nomenklatur Cuplikan Harga AS Terbaru
HASIL
MAKSIMUM (Harga)
OLEH
JenisNomenklatur

MEMILIKI

Operator ini mirip dengan operator WHERE, namun hanya digunakan untuk fungsi agregat. Bidang lainnya, kecuali yang digunakan oleh operator ini, harus dikelompokkan. Operator WHERE tidak berlaku untuk fungsi agregat.

Pada contoh di bawah, harga maksimum suatu barang dipilih jika melebihi 1000, dikelompokkan berdasarkan jenis barang.

MEMILIH

MAX(Harga.Harga) SEBAGAI Harga
DARI
Daftar Informasi Harga Nomenklatur Cuplikan Harga AS Terbaru
KELOMPOK OLEH
Harga.Nomenklatur.Jenis Nomenklatur
MEMILIKI
MAKSIMUM(Harga.Harga) > 1000

SORTIR DENGAN

Operator ORDER BY mengurutkan hasil kueri. Untuk memastikan bahwa catatan ditampilkan dalam urutan yang konsisten, AUTO ORDER digunakan. Tipe primitif diurutkan menurut aturan biasa. Jenis referensi diurutkan berdasarkan GUID.

Contoh mengurutkan daftar karyawan berdasarkan nama:

MEMILIH
Karyawan.Nama SEBAGAI Nama
DARI
Direktori.Karyawan BAGAIMANA Karyawan
SORTIR DENGAN
Nama
PESANAN OTOMATIS

Konstruksi bahasa kueri 1C lainnya

  • MENGGABUNGKAN– hasil dari dua pertanyaan menjadi satu.
  • GABUNGKAN SEMUANYA– mirip dengan COMBINE, tetapi tanpa mengelompokkan baris yang identik.
  • MEJA KOSONG– terkadang digunakan saat menggabungkan kueri untuk menentukan tabel bersarang yang kosong.
  • TEMPAT– membuat tabel sementara untuk mengoptimalkan kueri 1C yang kompleks. Permintaan seperti ini disebut permintaan batch.

Fitur Bahasa Kueri

  • SUBSTRING memotong string dari posisi tertentu ke sejumlah karakter tertentu.
  • TAHUN... KEDUA memungkinkan Anda mendapatkan nilai yang dipilih dari tipe numerik. Parameter masukannya adalah tanggal.
  • AWAL PERIODE dan AKHIR PERIODE digunakan saat bekerja dengan tanggal. Jenis periode (HARI, BULAN, TAHUN, dll.) ditunjukkan sebagai parameter tambahan.
  • TAMBAHKAN TANGGAL memungkinkan Anda menambah atau mengurangi waktu tertentu dari jenis tertentu dari suatu tanggal (DETIK, MENIT, HARI, dll.).
  • TANGGAL PERBEDAAN menentukan perbedaan antara dua tanggal, menunjukkan jenis nilai keluaran (HARI, TAHUN, BULAN, dll.).
  • TIDAK BOLEH mengganti nilai yang hilang dengan ekspresi yang ditentukan.
  • REPRESENTASI dan REPRESENTASILINK dapatkan representasi string dari bidang yang ditentukan. Berlaku masing-masing untuk nilai apa pun dan hanya nilai referensi.
  • JENIS, JENIS NILAI digunakan untuk menentukan jenis parameter input.
  • TAUTAN adalah operator perbandingan logis untuk tipe nilai atribut.
  • CEPAT digunakan untuk mengonversi nilai ke tipe yang diinginkan.
  • TANGGAL WAKTU mendapat nilai bertipe "Tanggal" dari nilai numerik (Tahun, Bulan, Hari, Jam, Menit, Detik).
  • ARTI dalam permintaan 1C, ini digunakan untuk menunjukkan nilai yang telah ditentukan sebelumnya - direktori, enumerasi, rencana untuk jenis karakteristik. Contoh penggunaan: " Dimana Perorangan Hukum = Nilai(Pencacahan. Perorangan Hukum. Perorangan)«.

Pembuat Kueri

Untuk membuat kueri dengan 1C, terdapat mekanisme bawaan yang sangat nyaman - perancang kueri. Ini berisi tab utama berikut:

  • “Tabel dan Bidang” - berisi bidang yang perlu dipilih dan sumbernya.
  • "Koneksi" - menjelaskan kondisi struktur KONEKSI.
  • “Pengelompokan”—berisi deskripsi struktur pengelompokan dan jumlah bidang berdasarkan struktur tersebut.
  • "Kondisi" - bertanggung jawab untuk memilih data dalam permintaan.
  • “Lanjutan”—parameter kueri tambahan, seperti kata kunci untuk perintah “PILIH”, dll.
  • “Gabungan/Alias” - kemungkinan penggabungan tabel ditunjukkan dan alias ditentukan (konstruksi “BAGAIMANA”).
  • "Order" bertanggung jawab untuk mengurutkan hasil kueri.
  • "Total" - mirip dengan tab "Pengelompokan", tetapi digunakan untuk konstruksi "TOTAL".

Teks permintaan itu sendiri dapat dilihat dengan mengklik tombol “Permintaan” di pojok kiri bawah. Dalam formulir ini, dapat dikoreksi secara manual atau disalin.


Konsol Permintaan

Untuk melihat dengan cepat hasil kueri dalam mode Perusahaan, atau men-debug kueri kompleks, gunakan . Ini berisi teks permintaan, menetapkan parameter, dan menampilkan hasilnya.

Anda dapat mengunduh konsol kueri pada disk ITS, atau melalui .

Jika Anda bekerja dengan satu tabel, maka Anda tidak perlu menggunakan join. Lain halnya jika Anda bekerja dengan beberapa tabel dan, misalnya, Anda perlu mendapatkan data tentang pembelian dan penjualan barang.

Klausa digunakan untuk menggabungkan MENGGABUNGKAN. Yang sebenarnya terjadi adalah hasil kueri digabungkan, yaitu setiap kueri mengumpulkan data secara independen satu sama lain, lalu hasil tersebut digabungkan menjadi satu. Dan hanya atas permintaan terakhir, operasi lain dilakukan, misalnya memesan dan menghitung total.

Saat menggabungkan kueri, terjadi “perekatan vertikal”, yaitu baris hasil kueri pertama didahulukan, lalu baris kedua.

Mari kita lanjutkan ke latihan:
Kode 1C v 8.x PILIH
Tata nama,
Kuantitas,
Jumlah
DARI
Dokumen.Penerimaan.Barang

MENGGABUNGKAN

MEMILIH
Tata nama,
Kuantitas,
Jumlah
DARI
Dokumen.Penerimaan.Barang

Hasil dari kueri ini adalah sebagai berikut:
Nomenklatur Kuantitas Jumlah
Kertas A4 25 14 500
Stiker 500l 8 4 880
File transparan 5 4 100
Perangkat kantor 8 8 840

Hasilnya, kita akan mendapatkan dua tabel yang akan terhubung satu sama lain. Sulit untuk melihat di mana dokumen Penerimaan berakhir dan dokumen Pengeluaran dimulai. Namun kami akan melakukan sesuatu untuk mengetahuinya:
Kode 1C v 8.x
MEMILIH
Tata nama,
Kuantitas SEBAGAI Kol.Kedatangan,
Jumlah SEBAGAI Jumlah Masuk,
0 SEBAGAI Biaya Kuantitas,
0 SEBAGAI JumlahBeban
DARI
Dokumen.Penerimaan.Barang

MENGGABUNGKAN

MEMILIH
Tata nama,
0 SEBAGAI KolPrikhod,
0 SEBAGAI SumPrikhod,
Kuantitas SEBAGAI Konsumsi Kuantitas,
Jumlah SEBAGAI Jumlah Pengeluaran
DARI
Dokumen.Barang habis pakai.Barang

Seperti yang dapat Anda lihat dari teks permintaan, kami menetapkan alias berbeda untuk kuantitas dan jumlah untuk setiap dokumen. Selain itu, sebagai ganti bidang di mana kita akan menerima nilai jumlah dan kuantitas, kita akan memberi angka nol. Hal ini diperlukan agar jumlah dan jumlah yang kosong diganti dengan angka nol.

Kertas A4 25 14 500
Stiker 500l 8 4 880
File transparan 5 4 100
Perangkat kantor 8 8 840
Perangkat kantor 1 1 105
File transparan 1 820
Stiker 500l 1 610

Sekarang kita perlu menghapus elemen duplikat dari hasil kueri. Kami memiliki dua kueri dan jika kami menciutkan masing-masing kueri secara terpisah untuk menghilangkan elemen duplikat, maka tidak ada yang berhasil. Oleh karena itu, kami akan mengurangi permintaan tersebut menjadi bentuk berikut:
Kode 1C v 8.x
MEMILIH
Tata nama,
JUMLAH (Jumlah Pendapatan) SEBAGAI Jumlah Pendapatan,
SUM(SumPrikhod) SEBAGAI SumPrikhod,
JUMLAH (Jumlah Biaya) SEBAGAI Jumlah Biaya,
SUM(JumlahBeban) SEBAGAI JumlahBeban
DARI

(MEMILIH
Tata nama,
Kuantitas SEBAGAI Kol.Kedatangan,
Jumlah SEBAGAI Jumlah Masuk,
0 SEBAGAI Biaya Kuantitas,
0 SEBAGAI JumlahBeban
DARI
Dokumen.Penerimaan.Barang

MENGGABUNGKAN

MEMILIH
Tata nama,
0 SEBAGAI KolPrikhod,
0 SEBAGAI SumPrikhod,
Kuantitas SEBAGAI Konsumsi Kuantitas,
Jumlah SEBAGAI Jumlah Pengeluaran
DARI
Dokumen.Barang Habis Pakai.Barang) SEBAGAIMANA TerlampirPermintaan

KELOMPOK BERDASARKAN Nomenklatur

Jadi, kita melihat bahwa seluruh kueri kita diapit tanda kurung dan diberi nama sebagai NestedQuery. Hal ini dilakukan agar kita dapat mengelompokkan rekaman dari kedua subkueri dan menghilangkan elemen duplikat. Desain ini disebut kueri bersarang. Hasil dari kueri ini adalah sebagai berikut:
Nomenklatur Kol Jumlah Pengeluaran Kol Masuk Jumlah Pengeluaran Kol Masuk
Kertas A4 25 14 500
Stiker 500l 8 4 880 1 610
Perangkat kantor 5 4 100 1 1 105
File transparan 8 8 840 1 820

Hasilnya, kami mendapatkan tabel yang dikelompokkan di mana data dari subkueri bersarang dibawa ke bentuk yang dapat dimengerti. Jumlah subkueri tidak boleh lebih dari 255. Kami telah menggunakan empat subkueri di sini.

Jika kita ingin hanya menyisakan nilai record unik saja di query tanpa menggunakan pengelompokan. Anda perlu menulis kalimat COMBINE tanpa kata kunci ALL.

Informasi diambil dari situs

; Kueri bersarang (dalam pengembangan).

Penerimaan barang dan jasa Dan Mengembalikan barang ke pemasok untuk periode yang ditentukan.

Tab baru: Serikat Pekerja/Alias.

Bagian teori dari pelajaran No.4

1C Query Builder memungkinkan Anda membuat kombinasi kueri. Dengan bantuan mereka, Anda dapat secara berurutan menampilkan data yang diperoleh dari beberapa kueri tanpa menggunakan koneksi. Satu-satunya syarat untuk menggabungkan adalah kumpulan bidang yang sama di setiap permintaan individual.

Di desainer, buka tab Serikat Pekerja/Alias. Ini dirancang untuk membuat gabungan kueri dan menyetel alias untuk bidang kueri. Alias ​​bidang diperlukan jika Anda tidak puas dengan nama bidang database standar. Jika bidang kueri hanya terdiri dari bidang tabel database, maka alias tidak diperlukan untuk bidang tersebut. Jika Anda menggunakan fungsi bahasa kueri saat membuat bidang, maka diperlukan alias untuk bidang tersebut. Perancang kueri membuat alias standar untuk bidang tersebut Bidang1…BidangN, alias ini dapat diganti dengan yang sesuai untuk Anda.

Mari kita lihat bagian-bagian tab Serikat Pekerja/Alias:

  • Permintaan(bingkai merah). Bagian ini berisi tabel yang memperlihatkan semua kueri gabungan. Dengan menggunakan menu yang terletak di atas bagian ini, Anda dapat menambahkan yang baru, menyalin yang sudah ada, menghapus yang dipilih, dan juga mengubah tempatnya. Saat menambahkan atau menyalin permintaan, perancang membuka tab Tabel dan bidang, tempat Anda bisa menentukan tabel database dan bidang yang diperlukan untuk kueri baru. Anda dapat beralih antar kueri menggunakan tab yang akan muncul di sisi kanan desainer saat kueri 1c baru ditambahkan;

  • Di meja Permintaan dua kolom:
    • Nama. Atur secara otomatis dalam format Permintaan 1…Permintaan N;
    • Tidak ada duplikat. Tetapkan kapan perlu mengecualikan baris duplikat saat menggabungkan dengan kueri sebelumnya. Perlu dicatat bahwa tanda ini hanya akan bertindak pada penggabungan permintaan yang disetel dengan permintaan sebelumnya.

  • Nama panggilan(bingkai biru). Di bagian ini, Anda dapat mengatur alias untuk bidang kueri, serta mengatur korespondensi bidang untuk kueri gabungan, sehingga sebagai hasil kueri, bidang tersebut berada di kolom yang sama dan ditampilkan di bawah satu alias. Jika bidang dalam kueri yang digabungkan diberi nama yang sama, maka korespondensi di antara keduanya akan disesuaikan secara otomatis. Untuk mengonfigurasi pencocokan bidang, Anda perlu menemukan baris dengan alias yang diinginkan di tabel, menemukan kueri yang diperlukan di kolom, dan memilih bidang di daftar drop-down.

Bagian praktis dari pelajaran No.4

Mari kita lihat solusi dari masalah yang diberikan di awal pelajaran. Izinkan saya mengingatkan Anda syaratnya:

Tugas: gunakan kueri untuk memilih semua dokumen yang diposting Penerimaan barang dan jasa Dan Mengembalikan barang ke pemasok untuk periode yang ditentukan.

  1. Mari buat permintaan baru;
  2. Mari luncurkan perancang kueri;
  3. Mari pilih tabel Penerimaan Barang dan Jasa dari benang Dokumentasi;
  4. Dari meja Penerimaan Barang dan Jasa pilih bidang Tautan;
  5. Ayo pergi ke tab Kondisi;
  6. Dalam bab Bidang, ayo buka threadnya Penerimaan Barang dan Jasa menggunakan tombol “+”;
  7. Ayo temukan alat peraganya tanggal dan seret ke bagian kondisi, pilih operator perbandingan Di antara dan menunjukkan parameter awal dan akhir periode, misalnya Awal periode Dan Akhir Periode;
  8. Ayo pergi ke tab Serikat Pekerja/Alias.
  9. Tambahkan permintaan baru, tandai Tidak ada duplikat tidak perlu dimunculkan, karena kami menggunakan jenis dokumen yang berbeda;

  10. 1C Query Builder akan secara otomatis masuk ke tab Tabel dan bidang. Di sisi kanan jendela Anda akan melihat bahwa permintaan bergabung kedua aktif;


  11. Mari kita ulangi poin 1 - 7 untuk tabelnya Pengembalian Barang ke Pemasok;
  12. Mari kita pergi ke tab lagi Serikat Pekerja/Alias. Di tabel alias Anda dapat melihat kolom tersebut Tautan kedua tabel berada di baris yang sama, yang berarti tautan ke kedua dokumen akan ditemukan di kolom yang sama sebagai hasil kueri;
  13. Mari kita ubah nama kolom dari Tautan pada Dokumen(atur alias bidang). Untuk melakukan ini, klik dua kali tombol kiri mouse pada nama field. Setelah itu Anda dapat menentukan nama Anda, tulis di sana Dokumen;

  14. Permintaan sudah siap, klik tombol "OK" di bagian bawah jendela desainer.

Hasilnya, kita akan mendapatkan permintaan dengan teks berikut.

Ada situasi ketika beberapa kueri perlu digabungkan dalam satu kueri, dan penggabungan tabel tidak dapat membantu dalam hal ini. Cara termudah untuk menunjukkannya adalah dengan sebuah contoh.

Misalkan dalam sistem kita, fakta pembelian dan penjualan barang masing-masing dicatat oleh dokumen Pendapatan dan Beban. Pihak lawan dapat berupa pembeli atau pemasok. Hutang dapat dikompensasi dengan penyerahan barang:

Untuk menghitung total hutang rekanan, Anda perlu menjumlahkan jumlah semua pengeluaran untuk rekanan ini dan mengurangi jumlah semua penerimaan dari rekanan yang sama; cara termudah untuk melakukannya adalah dengan menggunakan operator GABUNGKAN SEMUA:

Permintaan.Teks =
"
//hitung jumlah yang kami kirim ke kontraktor
|PILIH
| Biaya. Pihak lawan,
|DARI
| Dokumen.Beban SEBAGAI Beban
| KELOMPOK BERDASARKAN
| Biaya. Pihak lawan
| GABUNGKAN SEMUA
//menghitung jumlah rekanan
//mengirimkan barang kepada kami
|PILIH
| Paroki. Pihak rekanan,
//ambil jumlah yang bertanda negatif,
//yang bila digabungkan dikurangkan dari jumlah pengeluaran
| JUMLAH(-Penerimaan.Jumlah)
|DARI
| Dokumen Kedatangan SEBAGAI Kedatangan
| KELOMPOK BERDASARKAN
| Kedatangan.Counterparty";

Dalam permintaan pertama, kami menghitung jumlah pengeluaran untuk setiap rekanan, di permintaan kedua, jumlah barang yang dikirimkan masing-masing pihak kepada kami. Jumlah pada permintaan kedua diambil dengan tanda minus, sehingga ketika tabel yang dihasilkan diciutkan, dikurangi dari jumlah pengiriman ke rekanan ini. Hasilnya, kami mendapatkan tabel seperti:

Ini tidak persis seperti yang kami inginkan, tapi sudah dekat. Untuk mencapai hasil yang diperlukan, yang tersisa hanyalah mengelompokkan berdasarkan pihak lawan. Untuk melakukan ini, kueri harus ditempatkan di tabel sementara (bekerja dengan tabel sementara dibahas di bagian tertutup dari kursus ) dan pilih serta kelompokkan bidang darinya:

Permintaan = Permintaan Baru;
Permintaan.Teks =
"MEMILIH
| Biaya. Pihak lawan,
| JUMLAH(Pengeluaran.Jumlah) SEBAGAI Hutang
|Tempatkan VT_Beban Masuk
|DARI
| Dokumen.Beban SEBAGAI Beban
| KELOMPOK BERDASARKAN
| Biaya. Pihak lawan
| GABUNGKAN SEMUA
|PILIH
| Paroki. Pihak rekanan,
| JUMLAH(-Penerimaan.Jumlah)
|DARI
| Dokumen Kedatangan SEBAGAI Kedatangan
| KELOMPOK BERDASARKAN
| Paroki. Pihak lawan
|;
|////////////////////////////////////////////////////////////////////////////////
|PILIH
| VT_Beban Masuk.Rekanan,
| SUM(VT_IncomeExpenditure.Debt) SEBAGAI Hutang
|DARI
| VT_Konsumsi Masuk SEBAGAI VT_Konsumsi Masuk
| KELOMPOK BERDASARKAN
| VT_Beban Masuk.Counterparty";

Persyaratan untuk menggabungkan kueri

Saat menggabungkan dua kueri, jumlah bidang harus sama; jika salah satu kueri tidak memiliki bidang, maka bidang tersebut harus ditambahkan sebagai konstanta. Mari kita lihat contoh di atas, misalkan dokumen pengeluaran juga memiliki kolom diskon yang mengurangi jumlah utang pihak lawan, tetapi tidak ada diskon di dokumen kwitansi. Apa yang harus dilakukan dalam kasus ini? Jadi:

Permintaan = Permintaan Baru;
Permintaan.Teks =
"MEMILIH
| Biaya. Pihak lawan,

|DARI
| Dokumen.Beban SEBAGAI Beban
| KELOMPOK BERDASARKAN
| Biaya. Pihak lawan
| GABUNGKAN SEMUA
|PILIH
| Paroki. Pihak rekanan,
| SUM(-Penerimaan.Jumlah),
//tambahkan diskon bidang nol
| 0
|DARI
| Dokumen Kedatangan SEBAGAI Kedatangan
| KELOMPOK BERDASARKAN
| Kedatangan.Counterparty";

Yang tersisa hanyalah mengurangi diskon dan grup.

Urutannya juga penting. Bidang akan digabungkan persis sesuai urutan yang ditentukan di bagian PILIH dari kedua kueri. Sehubungan dengan contoh sebelumnya, mari kita tukar kolom diskon dan jumlah pada contoh kwitansi:

Permintaan = Permintaan Baru;
Permintaan.Teks =
"MEMILIH
| Biaya. Pihak lawan,
| JUMLAH(Pengeluaran.Jumlah) SEBAGAI Hutang,
| JUMLAH(Beban.Diskon) SEBAGAI Diskon
|DARI
| Dokumen.Beban SEBAGAI Beban
| KELOMPOK BERDASARKAN
| Biaya. Pihak lawan
| GABUNGKAN SEMUA
|PILIH
| Paroki. Pihak rekanan,
//bertukar tempat
| 0,
| JUMLAH(-Penerimaan.Jumlah)
|DARI
| Dokumen Kedatangan SEBAGAI Kedatangan
| KELOMPOK BERDASARKAN
| Kedatangan.Counterparty";

Selamat siang, para pembaca situs blog yang budiman. Hari ini kita akan membahasnya secara detail menggabungkan permintaan dalam 1C. Anda juga dapat mengunduh konfigurasi standar Trade Enterprise Management untuk Kazakhstan, edisi 1.0.

Jika Anda bekerja dengan satu tabel, maka Anda tidak perlu menggunakan join. Lain halnya jika Anda bekerja dengan beberapa tabel dan, misalnya, Anda perlu mendapatkan data pembelian dan penjualan barang.

Klausa digunakan untuk menggabungkan GABUNGKAN / UNION. Apakah benar-benar terjadi menggabungkan hasil kueri, yaitu, setiap kueri mengumpulkan data secara independen satu sama lain, lalu hasilnya digabungkan menjadi satu. Dan hanya atas permintaan terakhir, operasi lain dilakukan, misalnya memesan dan menghitung total.

Sebaliknya, saat menggabungkan kueri, terjadi “perekatan vertikal”, yaitu baris hasil kueri pertama didahulukan, lalu baris kedua.

Mari kita lanjutkan ke latihan:

PILIH Barang, Kuantitas, Jumlah MENGGABUNGKAN PILIH Barang, Jumlah, Jumlah DARI Dokumen.Barang Habis Pakai.Barang

Hasil dari kueri ini adalah sebagai berikut:

Hasilnya, kita akan mendapatkan dua tabel yang akan terhubung satu sama lain. Sulit untuk melihat di mana dokumen Penerimaan berakhir dan dokumen Pengeluaran dimulai. Namun kami akan melakukan sesuatu untuk mengetahuinya:

PILIH Nomenklatur, Kuantitas BAGAIMANA Jumlah Paroki, Jumlah AS SumPrikhod, 0 BAGAIMANA KuantitasKonsumsi, 0 BAGAIMANA Jumlah Pengeluaran DARI Dokumen.Penerimaan.Produk MENGGABUNGKAN Jumlah Paroki, 0 BAGAIMANA SumPrikhod, Kuantitas SEBAGAI KuantitasKonsumsi, Jumlah AS Jumlah Pengeluaran DARI Dokumen.Barang habis pakai.Barang

Seperti yang dapat Anda lihat dari teks permintaan, kami menetapkan alias berbeda untuk kuantitas dan jumlah untuk setiap dokumen. Selain itu, sebagai ganti bidang di mana kita akan menerima nilai jumlah dan kuantitas, kita akan memberi angka nol. Hal ini diperlukan agar jumlah dan jumlah yang kosong diganti dengan angka nol.

Tata nama Jumlah Paroki SumPrikhod KuantitasKonsumsi Jumlah Pengeluaran
kertas A4 25 14 500
Stiker 500l 8 4 880
Berkas transparan 5 4 100
Perangkat kantor 8 8 840
Perangkat kantor 1 1 105
Berkas transparan 1 820
Stiker 500l 1 610

Sekarang kita perlu menghapus elemen duplikat dari hasil kueri. Kami memiliki dua kueri dan jika kami menciutkan masing-masing kueri secara terpisah untuk menghilangkan elemen duplikat, maka tidak ada yang berhasil. Oleh karena itu, kami akan mengurangi permintaan tersebut menjadi bentuk berikut:

MEMILIH
Tata nama,
JUMLAH (Jumlah Pendapatan) SEBAGAI Jumlah Pendapatan,
SUM(SumPrikhod) SEBAGAI SumPrikhod,
JUMLAH (Jumlah Biaya) SEBAGAI Jumlah Biaya,
SUM(JumlahBeban) SEBAGAI JumlahBeban
DARI
(
PILIH Nomenklatur, Kuantitas BAGAIMANA Jumlah Paroki, Jumlah AS SumPrikhod, 0 BAGAIMANA KuantitasKonsumsi, 0 BAGAIMANA Jumlah Pengeluaran DARI Dokumen.Penerimaan.Produk MENGGABUNGKAN PILIH Barang, 0 BAGAIMANA Jumlah Paroki, 0 BAGAIMANA SumPrikhod, Kuantitas SEBAGAI KuantitasKonsumsi, Jumlah AS Jumlah Pengeluaran DARI Dokumen.Barang habis pakai.Barang ) SEBAGAI Kueri Bersarang
KELOMPOK BERDASARKAN Nomenklatur

Jadi, kita melihat bahwa seluruh kueri kita diapit tanda kurung dan diberi nama sebagai NestedQuery. Hal ini dilakukan agar kita dapat mengelompokkan rekaman dari kedua subkueri dan menghilangkan elemen duplikat. Desain ini disebut kueri bersarang. Hasil dari kueri ini adalah sebagai berikut:

Tata nama Jumlah Paroki SumPrikhod KuantitasKonsumsi Jumlah Pengeluaran
kertas A4 25 14 500
Stiker 500l 8 4 880 1 610
Perangkat kantor 5 4 100 1 1 105
Berkas transparan 8 8 840 1 820

Hasilnya, kami mendapatkan tabel yang dikelompokkan di mana data dari subkueri bersarang dibawa ke bentuk yang dapat dimengerti.
Jumlah subkueri tidak boleh melebihi 255. Kami menggunakan empat subkueri di sini.