Koneksi kiri dan kanan 1 detik


Bahasa query 1C adalah salah satu perbedaan utama antara versi 7.7 dan 8. Salah satu poin terpenting dalam mempelajari pemrograman 1C adalah bahasa query. Di 1C 8.3, kueri adalah alat paling kuat dan efektif untuk memperoleh data. Bahasa kueri memungkinkan Anda memperoleh informasi dari database dengan cara yang nyaman.

Sintaksnya sendiri sangat mengingatkan pada T-SQL klasik, hanya saja dalam 1C, menggunakan bahasa kueri, Anda hanya dapat menerima data menggunakan konstruksi Select. Bahasa ini juga mendukung konstruksi yang lebih kompleks, misalnya (permintaan dalam permintaan). Kueri dalam 1C 8 dapat ditulis dalam Sirilik dan Latin.

Pada artikel kali ini saya akan mencoba membahas tentang kata kunci utama dalam bahasa query 1C:

  • memilih
  • diizinkan
  • bermacam-macam
  • cepat
  • Pertama
  • untuk perubahan
  • arti
  • tipe nilai (dan operator REFERENSI)
  • pilihan
  • kelompokkan menurut
  • memiliki
  • TIDAK BOLEH
  • Ya BATAL
  • koneksi - kanan, kiri, internal, penuh.

Serta beberapa trik kecil bahasa 1C, yang dengannya Anda dapat membuat teks permintaan secara optimal.

Untuk men-debug kueri di sistem 1C 8.2, alat khusus disediakan - konsol kueri. Anda dapat melihat deskripsi dan mendownloadnya menggunakan link -.

Mari kita lihat operator paling penting dan menarik dari bahasa query 1C.

PILIH

Dalam bahasa kueri 1C Enterprise 8, kueri apa pun dimulai dengan kata kunci MEMILIH. Dalam bahasa 1C tidak ada konstruksi UPDATE, DELETE, CREATE TABLE, INSERT; manipulasi ini dilakukan dalam teknologi objek. Tujuannya adalah untuk membaca data saja.

Misalnya:

MEMILIH
Direktori Saat Ini.Nama
DARI
Direktori.Nomenklatur SEBAGAI Direktori Saat Ini

Kueri akan mengembalikan tabel dengan nama item.

Dekat struktur MEMILIH Anda dapat menemukan kata kunci UNTUK PERUBAHAN, DIIZINKAN, BERMACAM-MACAM, PERTAMA

DIIZINKAN— hanya memilih rekaman dari tabel yang haknya dimiliki oleh pengguna saat ini.

BERMACAM-MACAM— artinya hasilnya tidak akan mengandung garis duplikat.

SELEKSI (KASUS)

Seringkali desain ini diremehkan oleh para programmer. Contoh penggunaannya:

Direktori Saat Ini.Nama,

KETIKA Direktori Saat Ini.Layanan KEMUDIAN

"Melayani"

AKHIR CARA MELIHATNomenklatur

Direktori.Nomenklatur SEBAGAI Direktori Saat Ini

Contoh ini akan mengembalikan nilai teks di bidang “Jenis Barang” - “Produk” atau “Layanan”.

DI MANA

Desain bahasa kueri 1C yang memungkinkan Anda memaksakan pilihan pada data yang diterima. Harap dicatat bahwa sistem menerima semua data dari server, dan baru kemudian dipilih berdasarkan parameter ini.

MEMILIH
Direktori.Nama
DARI
Direktori Saat Ini. Nomenklatur SEBAGAI Direktori Saat Ini
DIMANA CurrentDirectory.Service = BENAR

Dalam contoh ini, kita memilih rekaman yang nilai atribut “Layanannya” diatur ke “True”. Dalam contoh ini, kita dapat memenuhi ketentuan berikut:

"DIMANA LAYANANNYA"

Intinya, kita memilih baris yang ekspresi setelah kata kuncinya sama dengan "Benar".

Anda dapat menggunakan kondisi langsung dalam ekspresi:

Kode MANA = "005215"

Menggunakan operator “VALUE()” dalam kondisi, gunakan akses ke elemen dan enumerasi yang telah ditentukan sebelumnya dalam permintaan 1C:

WHERE Tipe Barang = Nilai(Pencacahan.Jenis Barang.Produk)

Nilai waktu dapat ditentukan sebagai berikut:

DIMANA Tanggal Penerimaan > DATETIME(2012,01,01):

Paling sering, kondisi ditentukan sebagai parameter yang diteruskan ke permintaan:

Dapatkan 267 pelajaran video di 1C gratis:

DIMANA Grup Nomenklatur= &Grup Nomenklatur

Suatu kondisi dapat diterapkan pada tipe atribut jika tipe atribut tersebut bertipe komposit:

Jika Anda perlu membatasi pilihan dari daftar nilai atau larik, Anda dapat melakukan hal berikut:

DIMANA Daftar Akumulasi. Panitera B (&Daftar Dokumen Seleksi)

Kondisinya juga bisa rumit, terdiri dari beberapa kondisi:

DIMANA Tanggal Penerimaan > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup DAN BUKAN Layanan

KELOMPOK OLEH

Desain bahasa query 1C 8.2 digunakan untuk mengelompokkan hasil.

Misalnya:

MEMILIH
Penerimaan Barang dan Barang Jasa,
SUM(Penerimaan BarangJasaBarang.Jumlah) SEBAGAI Kuantitas,
SUM(Penerimaan BarangJasaBarang.Jumlah) SEBAGAI Jumlah
DARI
Dokumen Penerimaan Barang dan Jasa

KELOMPOK OLEH
Penerimaan BarangJasaBarang.Barang

Permintaan ini akan merangkum semua penerimaan berdasarkan jumlah dan kuantitas berdasarkan item.

Selain kata kunci JUMLAH Anda dapat menggunakan fungsi agregat lainnya: KUANTITAS, JUMLAH YANG BERBEDA, MAKSIMUM, MINIMUM, RATA-RATA.

MEMILIKI

Sebuah desain yang sering terlupakan, padahal sangat penting dan bermanfaat. Ini memungkinkan Anda menentukan pilihan dalam bentuk fungsi agregat, ini tidak dapat dilakukan dalam desain DI MANA.

Contoh penggunaan HAVING dalam permintaan 1C:

MEMILIH
Penerimaan Barang dan Barang Jasa,
SUM(Penerimaan BarangJasaBarang.Jumlah) SEBAGAI Kuantitas,
SUM(Penerimaan BarangJasaBarang.Jumlah) SEBAGAI Jumlah
DARI
Dokumen Penerimaan Barang dan Jasa

KELOMPOK OLEH
Penerimaan Barang dan Barang Jasa

SUM(Penerimaan BarangJasaBarang.Jumlah) > 5

Jadi kami akan memilih jumlah produk yang datang lebih dari 5 buah.

ARTI()

Misalnya:

DIMANA Bank = Nilai(Direktori.Banks.EmptyLink)

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

WHERE Tipe Barang = Nilai (Enumerasi.Jenis Barang.Layanan)

KETIK dalam permintaan

Tipe data dapat diperiksa dengan menggunakan fungsi TYPE() dan VALUETYPE() atau menggunakan operator logika REFERENCE.

CEPAT()

Operator Express dalam kueri 1C digunakan untuk mengonversi tipe data.

Sintaksis: CEPAT(<Выражение>BAGAIMANA<Тип значения>)

Dengan menggunakannya, Anda dapat mengonversi nilai string menjadi nilai tanggal atau referensi menjadi data string, dan seterusnya.

Dalam aplikasi praktis, operator Express() sangat sering digunakan untuk mengonversi bidang yang panjangnya tidak terbatas, karena bidang yang panjangnya tidak terbatas tidak dapat dipilih, dikelompokkan, dll. Jika bidang tersebut tidak dikonversi, Anda akan menerima pesan kesalahan Anda tidak dapat membandingkan bidang dengan panjang tidak terbatas dan bidang dengan tipe yang tidak kompatibel.

MEMILIH
KontakInformasi.Objek,
EXPRESS(ContactInfo.Lihat SEBAGAI BARIS(150)) SEBAGAI Tampilan
DARI
Daftar Informasi. Informasi Kontak BAGAIMANA Informasi Kontak

KELOMPOK OLEH
EXPRESS(ContactInfo.Representasi SEBAGAI BARIS(150)),
Informasi Kontak.Objek

TIDAK BOLEH (DIBATALKAN)

Fungsi yang cukup berguna dari bahasa kueri 1C yang memeriksa nilai dalam catatan, dan apakah nilainya sama BATAL, Ini memungkinkan Anda menggantinya dengan nilai Anda. Paling sering digunakan saat mendapatkan tabel saldo dan perputaran virtual untuk disembunyikan BATAL dan beri tanda 0 (nol) yang jelas.

ISNULL(Pajak Pra Bulan. Manfaat FSS Terapan, 0)

Fungsi bahasa kueri 1C ISNULL akan mengembalikan nol jika tidak ada nilai, yang akan menghindari kesalahan.

BERGABUNG

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.

Contoh gabung kiri dalam permintaan 1C:

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

GABUNG KANAN dalam bahasa 1C 8.3 sangat mirip koneksi KIRI, dengan pengecualian satu perbedaan: di 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:

KONEKSI LENGKAP
Direktori.Bank BAGAIMANA Bank

OLEH

Bahasa kueri akan mengembalikan kedua tabel secara lengkap hanya jika kondisi Gabung 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.

Kesimpulan

Ini hanya sebagian kecil dari sintaks dari bahasa query 1C 8; di masa depan saya akan mencoba mempertimbangkan beberapa poin lebih detail, menunjukkan dan banyak lagi!

; Kueri bersarang (dalam pengembangan).

Tugas No. 1: gunakan kueri untuk memilih semua dokumen yang diposting Penjualan barang dan jasa,

Penjelasan: konfigurasi Akuntansi 2.0 / 3.0 Implementasinya tidak menyimpan tautan ke faktur yang diterbitkan. Hubungan antara dokumen-dokumen ini terbalik: dalam faktur (dalam rinciannya Basis dokumen) referensi ke implementasi yang terkait disimpan. Oleh karena itu, untuk memahami implementasi mana yang tidak memiliki faktur, Anda perlu menggunakan dua tabel dalam kueri: Penjualan Barang dan Jasa Dan Faktur Diterbitkan.

Tugas No. 2: katakanlah di database direktori Kontrak pihak lawan informasi tambahan dibuat Penundaan(daftarkan lokasi penyimpanan informasi tambahan). Gunakan kueri untuk memilih semua perjanjian dari rekanan yang ditentukan dengan penundaan dari 0 hingga 10 hari.

Penjelasan: dalam tugas ini dimungkinkan untuk dilakukan tanpa menggunakan dua tabel, jika bukan karena satu syarat: pilihan kontrak dengan penundaan nol. Intinya di register informasi tambahan Nilai kosong untuk informasi tambahan tidak disimpan, jadi tidak akan ada entri untuk penundaan nol di sana. Oleh karena itu, Anda harus melampirkan register ini ke direktori Kontrak pihak lawan, jika tidak ada catatan penangguhan pada salah satu kontrak, maka nol.

Tab baru: Koneksi

Mekanisme baru: memeriksa null dalam permintaan 1C.

Bagian teori dari pelajaran No.3

Jika kueri 1C hanya menggunakan satu tabel, maka data diambil hanya dari tabel tersebut. Namun jika Anda perlu memilih data dari beberapa tabel, maka Anda harus menyiapkan hubungan antar tabel tersebut. Hubungan diperlukan untuk membandingkan baris dari satu tabel database dengan baris tabel lain dan dengan demikian memperoleh, saat membentuk kueri, tabel akhir yang akan berisi data yang diperlukan dari semua tabel kueri.

Setiap hubungan spesifik dikonfigurasi antara dua tabel, salah satunya disebut Kiri, lainnya Benar. Ada tiga jenis koneksi:

  • GABUNG DALAM- record dari tabel kiri akan muncul di hasil query hanya jika kondisi koneksi terpenuhi, record dari tabel kanan akan muncul di hasil query hanya jika kondisi koneksi terpenuhi;
  • KONEKSI KIRI- catatan dari tabel kiri akan disertakan dalam hasil kueri, catatan dari tabel kanan akan disertakan dalam pilihan hanya jika kondisi koneksi terpenuhi. Analoginya di sebelah kiri adalah BENAR BERGABUNG, Data dari tabel kanan disertakan dalam hasil, data dari tabel kiri hanya jika kondisi terpenuhi. Biasanya saat menulis query digunakan Koneksi kiri, jika Anda menggunakan yang kanan, saat berikutnya Anda membuka kueri, perancang kueri akan mengonversinya ke yang kiri, menukar tabel;
  • KONEKSI LENGKAP- catatan dari tabel kiri akan muncul di hasil kueri terlebih dahulu, kemudian hanya jika kondisi koneksi terpenuhi, catatan dari tabel kanan akan muncul di hasil kueri terlebih dahulu, kemudian hanya jika kondisi koneksi bertemu. Dalam hal ini, baris duplikat yang dihasilkan dikeluarkan dari sampel.

Secara teori, menggabungkan tabel kueri cukup sulit untuk dipahami oleh programmer 1C yang tidak terlatih, tetapi ketika mempelajari contoh, semua poin yang tidak jelas akan menjadi jelas.

Tab hubungan di Desainer Kueri

Di perancang kueri, buka tab Koneksi. Ini adalah tabel di mana jumlah koneksi yang diperlukan dibuat untuk semua pasangan tabel yang berbeda. Anda dapat menambah, menghapus, menyalin, dan mengubah koneksi menggunakan tombol yang terletak di atas tabel (kami tidak akan menganalisisnya secara detail).

Setelah menambahkan koneksi baru, Anda harus mengisi semua kolom tabel. Mari kita lihat setiap kolom tabel koneksi:

  • Tabel 1. Tabel komunikasi kiri dipilih di kolom ini. Anda hanya dapat menggunakan tabel yang dipilih pada tab Tabel dan bidang;
  • Semua. Bendera di kolom ini ditempatkan jika Anda perlu memilih semua data untuk tabel kiri (untuk Kiri atau Penuh koneksi);
  • Tabel 2. Tabel koneksi kanan dipilih di kolom ini;
  • Semua. Bendera di kolom ini ditempatkan jika Anda perlu memilih semua data untuk tabel yang tepat (untuk Benar atau Penuh koneksi);
  • bebas. Tandai yang dengannya Anda dapat beralih ke mode pengeditan manual kondisi koneksi;
  • Kondisi koneksi. Suatu kondisi dalam bahasa kueri, serupa dengan kondisi yang dibahas dalam . Ini adalah ekspresi yang harus selalu mengembalikan salah satu dari dua nilai: BENAR atau Berbohong. Biasanya, kondisi tautan terdiri dari tiga bagian:
    • Sisi kiri. Biasanya berupa field di tabel kiri, tetapi bisa juga berupa field di tabel kanan atau parameter (hanya dalam mode pengeditan kondisi khusus);
    • Operator perbandingan. Secara default, "=", "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • Bagian kanan. Biasanya berupa field di tabel kanan, tetapi bisa juga berupa field di tabel kiri atau parameter (hanya dalam mode pengeditan kondisi khusus);

Mengisi dan mengedit Ketentuan komunikasi, mirip dengan mengedit kondisi reguler yang dibahas dalam pelajaran terakhir, dengan pengecualian bahwa secara default, bukan parameter yang ditetapkan di bagian kanan kondisi, tetapi bidang di tabel kanan. Dalam mode bebas, editor ekspresi bebas juga tersedia.

Bagian praktis dari pelajaran No.3

Mari kita lihat solusi dari masalah yang diberikan di awal pelajaran.

Tugas No.1

Pilih semua dokumen yang diposting dengan kueri Penjualan barang dan jasa, untuk jangka waktu tertentu, yang fakturnya belum dibuat.

  • Mari buat permintaan baru;
  • Mari kita pilih tabel Penjualan Barang dan Jasa Dan Faktur Diterbitkan dari benang Dokumentasi;
  • Dari meja Penjualan Barang dan Jasa pilih bidang Tautan;
  • Ayo pergi ke tab Kondisi;
  • Dalam bab Bidang, ayo buka threadnya Penjualan Barang dan Jasa menggunakan tombol “+”;
  • 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;
  • Dari bagian Bidang mari kita tarik alat peraganya Diadakan, beri tanda sesuai dengan kondisi bebas dan hapus bagian tambahan dari kondisi “= &Passed”;
  • Ayo pergi ke tab Komunikasi;
  • Mari buat koneksi baru menggunakan tombol “Tambah”;
  • Di lapangan Tabel 1 pilih tabel Penjualan Barang dan Jasa(ini akan menjadi tabel kiri) ;
  • Untuk menyelesaikan masalah dengan benar, kita perlu mendapatkan semua implementasi, melampirkan faktur ke dalamnya, dan jika faktur tidak ditemukan, menampilkan implementasi sebagai hasil permintaan. Mari kita bagi tugas ini menjadi dua subtugas:
    • Mari kita pilih semua penjualan dan, dengan menggunakan koneksi, coba temukan fakturnya;
    • Dengan menggunakan ketentuan ini, kami hanya akan memilih baris yang tidak memiliki faktur;
  • Dari paragraf sebelumnya berikut ini yang perlu kita gunakan Koneksi kiri, untuk memilih semua implementasi. Oleh karena itu, mari kita beri tanda pada kolom tersebut Semua
  • Di lapangan Meja 2 pilih tabel Faktur Diterbitkan(ini akan menjadi tabel yang tepat);
  • Karena tautan ke implementasi disimpan dalam detail faktur D basis dokumen, dalam kondisi koneksi kita memilih:
    • Di sisi kiri lapangan Tautan Penjualan Barang dan Jasa;
    • Di sisi kanan lapangan: FakturInvoiceIssued.DocumentBase.
  • Pengaturan koneksi selesai;

Dengan gabungan kiri, jika untuk baris tabel kiri tidak ada satu baris pun tabel kanan yang memenuhi kondisi koneksi, semua bidang tabel kanan kanan untuk baris tabel kiri tertentu mempunyai nilai BATAL. Mari kita gunakan ini untuk memilih hanya baris-baris tabel kiri yang tidak ada fakturnya;

Bahasa kueri 1C memiliki operator logika khusus yang memungkinkan Anda memeriksa apakah suatu bidang berisi nilai BATAL, sintaksisnya <Поле>ADALAH BATAL. Ini mengembalikan nilai BENAR jika bidang tersebut memiliki nilai BATAL Dan Berbohong- dalam kasus sebaliknya.

Perhatikan bahwa periksa nilai bidang dengan BATAL hanya mungkin menggunakan fungsi yang ditentukan, konstruksi <Поле>= BATAL Pemeriksaan ini tidak akan mungkin dilakukan.

  • Ayo pergi ke tab Kondisi;
  • Seret salah satu bidang tabel ke bagian ketentuan Faktur Diterbitkan, misalnya bidang Tautan;
  • Tetapkan bendera di garis bebas dan tambahkan operator setelah bidang ADALAH BATAL, setelah sebelumnya menghapus bagian kondisi yang tidak diperlukan;

Permintaan = Permintaan Baru; Permintaan.SetParameter("StartPerid", StartPerid); Request.SetParameter("Akhir Periode", Akhir Periode); Request.Text = "PILIH | Penjualan Barang dan Jasa. Tautan | DARI | Dokumen. Penjualan Barang dan Jasa SEBAGAI Penjualan Barang dan Jasa | Dokumen HUBUNGAN KIRI. Faktur Diterbitkan SEBAGAI Faktur Terbit | Perangkat Lunak Penjualan Barang dan Jasa. Tautan = Faktur Diterbitkan. Dasar Dokumen |. DI MANA |. Penjualan Barang dan Jasa. INTERNASIONAL Pada & Awal Periode Dan & Akhir Periode |. Dan Penjualan Barang dan Jasa Dilakukan |.

Tugas No.2

  • Mari buat permintaan baru;
  • Mari luncurkan perancang kueri;
  • Di tab Tabel dan bidang Mari pilih dua tabel: Kontrak Pihak Rekanan dari benang Direktori Dan Informasi tambahan dari benang Register Informasi;
  • Dari meja Kontrak Pihak Rekanan pilih bidang Tautan;

Menurut ketentuan, hasil permintaan harus mencakup kontrak hanya satu pihak lawan, yang nilainya akan diteruskan ke permintaan menggunakan parameter. Pihak lawan yang memiliki kontrak disimpan di lapangan Pemilik direktori Kontrak pihak lawan.

  • Ayo pergi ke tab Kondisi. Dari meja Kontrak Pihak Rekanan pindahkan bidang ke bagian kondisi Pemilik. Di sisi kanan kondisi, kami akan menetapkan nama parameter yang akan kami transfer ke rekanan yang kami butuhkan, sebut saja Pihak rekanan;
  • Kami juga akan membagi tugas memilih kontrak dengan penundaan dari 0 hingga 10 menjadi dua subtugas:
    • Mari kita pilih semua kontrak dan, dengan menggunakan koneksi, coba temukan penangguhannya;
    • dengan menggunakan kondisi tersebut, kami hanya akan memilih kontrak dengan penundaan yang kami perlukan;
  • Mari kita atur hubungan antara kontrak dan informasi tambahan. Mari buka tab Koneksi dan tambahkan koneksi baru;
  • Di lapangan Tabel 1 pilih tabel Kontrak Pihak Rekanan(ini akan menjadi tabel sebelah kiri);
  • Karena kami membutuhkan semua kontrak, kami akan menggunakannya Koneksi kiri. Mari kita letakkan bendera di kolom Semua, yang ada di tabel kiri;
  • Di lapangan Meja 2 pilih tabel Informasi tambahan(ini akan menjadi tabel yang tepat);
  • Karena referensi kontrak disimpan dalam dimensi Sebuah Objek daftar informasi Informasi tambahan, dalam kondisi koneksi kita memilih:
    • Di sisi kiri lapangan Tautan Kontraktor;
    • Mari kita tinggalkan operator perbandingan standar "=";
    • Di sisi kanan lapangan: Info Tambahan.Objek.

Kami telah menambahkan tautan yang akan kami gunakan untuk memilih semua tambahan. informasi tentang setiap kontrak. Tapi karena kita hanya butuh satu tambahan. pencampuran - Penundaan, kita perlu menambahkan satu koneksi lagi. Pada kasus ini Penundaan adalah properti tambahan. Properti tambahan bertipe Rencana jenis karakteristik Detail dan Informasi Tambahan. Di daftar Informasi tambahan nilai tambahan properti disimpan dalam dimensi Properti. Oleh karena itu, kita perlu menambahkan hubungan yang membatasi informasi tambahan hanya pada properti Deferral.

  • Mari tambahkan koneksi baru;
  • Di lapangan Tabel 1 pilih tabel Kontrak Pihak Rekanan;
  • Penting untuk diketahui bahwa jika Anda memiliki beberapa relasi pada pasangan tabel yang sama, maka Anda harus menggunakan tipe gabungan yang sama untuk relasi tersebut. Dalam kasus kami, ini adalah Koneksi kiri. Oleh karena itu, mari kita beri tanda pada kolom tersebut Semua, berkaitan dengan tabel kiri;
  • Di lapangan Meja 2 pilih tabel Informasi tambahan;
  • Pada kondisi relasi kita tidak perlu menggunakan field tabel sebelah kiri, melainkan kita akan menerapkan kondisi pada dimensinya Properti, menyamakannya dengan tambahan. Properti Penundaan, yang akan diteruskan ke permintaan menggunakan parameter;
  • Mari kita pasang benderanya bebas dalam arti BENAR dan secara manual tulis teks ketentuan berikut: “Informasi Tambahan.Property = &PropertyDelay”;

  • Pengaturan koneksi selesai;

Sekarang yang tersisa hanyalah memberikan syarat pada jumlah penundaan. Karena kita menggunakan interval dari 0 hingga 10, maka perlu menggunakan operator perbandingan Antara. Karena zero backoff tidak disimpan dalam informasi tambahan, ketika terhubung dalam hal ini, semua bidang register akan mengembalikan nilainya BATAL. Untuk mengganti nilai dalam suatu kondisi BATAL ke 0, kita akan menggunakan fungsi bahasa query TIDAK BATAL(<Выражение1>, <Выражение2>) . Fungsinya kembali Ekspresi1, jika tidak sama BATAL Dan Ekspresi2 jika tidak.

  • Ayo pergi ke tab Kondisi desainer kueri dan menambahkan kondisi baru;
  • Mari kita pasang bendera di dalamnya bebas dan buka editor ekspresi bebas;
  • Di bagian fungsi bahasa kueri kami akan memperluas cabangnya Fungsi -> Fungsi lainnya;
  • Mari seret suatu fungsi ke bagian ekspresi TIDAK BATAL;
  • Setelah konstruksi yang dihasilkan, kita akan memasukkan operator perbandingan Antara dan mengatur interval: 0 dan 10;
  • Klik OK, kondisi sudah siap;

Hal terakhir yang harus dilakukan adalah menampilkan nilai penangguhan di kolom permintaan. Sebagai gantinya BATAL nilai 0 ditampilkan, kami juga menggunakan editor ekspresi bebas dan fungsinya TIDAK BOLEH.

  • Ayo pergi ke tab Tabel dan bidang dan tambahkan bidang baru;
  • Di editor ekspresi bebas yang terbuka, pilih fungsinya TIDAK BOLEH;
  • Alih-alih Ekspresi 1, masukkan bidang Informasi Tambahan.Nilai, dan alih-alih Ekspresi 2, masukkan 0;
  • Klik OK, bidang sudah siap;

Hasilnya, kami akan mendapatkan permintaan dengan teks berikut:

Permintaan = Permintaan Baru; Query.SetParameter("PropertyDelay", PropertyProperty); Request.SetParameter("Akun", Akun); Query.Text = "PILIH | Perjanjian Counterparty. Tautan, | ISNULL(Informasi Tambahan. Nilai, 0) SEBAGAI Bidang1 | DARI | Direktori. Perjanjian Counterparty SEBAGAI Perjanjian Counterparty | KIRI Daftar Informasi GABUNG. Informasi Tambahan | SEBAGAI Informasi Tambahan | ON Perjanjian Counterparty .Link = Informasi Tambahan.Objek |.AND (Detail Tambahan.Properti = &PropertyDelay) |WHERE |.Kontrak Kontraktor.Pemilik = &Counterparty |.

Baca juga artikel tentang bahasa query 1C 8.

Ketika kita ingin melihat data dari beberapa tabel secara bersamaan, mis. untuk mengumpulkan beberapa tabel menjadi satu, muncullah konsep menghubungkan tabel dan hubungan antar tabel. Ada empat jenis koneksi:

  • kiri;
  • Kanan,
  • intern;
  • menyelesaikan.

Kami akan melihat setiap jenis menggunakan contoh abstrak. Ada 2 tabel, yang pertama kami menyimpan informasi deskriptif tentang barang tersebut, yang kedua tentang saldonya:

Untuk mendapatkannya dari tabel ini, kita perlu secara eksplisit menunjukkan bidang mana yang akan kita sambungkan, dengan kondisi dan jenis apa. Sekarang semuanya akan menjadi lebih jelas.

Koneksi kiri

Dengan menggunakan gabungan kiri, kami memberi tahu sistem bahwa sebagai hasilnya kami ingin melihat semua catatan dari tabel kiri dan catatan dari tabel kanan yang memenuhi kondisi koneksi. Misalkan kita menghubungkan tabel berdasarkan field produk dengan kondisi yang sama, maka kita akan mendapatkan tabel seperti:

Permintaan.Teks =
"MEMILIH
| Nomenklatur.Produk,
| Tata Nama.Warna SEBAGAI WarnaTata Nama,
| Tetap.Warna SEBAGAI WarnaTetap,
| Saldo. Kuantitas
|DARI

";

Tidak ada kecocokan kursi dari tabel sisa, sehingga field diisi dengan nilai NULL, yang harus diproses oleh fungsi ISNULL, lihat 1C 8 Fungsi Bahasa Query.

Gabungan kiri bekerja kira-kira seperti perulangan dalam satu perulangan - ia mengambil catatan pertama dari tabel kiri dan menjalankan semua catatan dari tabel kanan untuk memastikan bahwa kondisi koneksi terpenuhi. Kemudian record kedua diambil dari tabel sebelah kiri, dan seterusnya. Jika tiba-tiba beberapa record dari tabel kanan memenuhi kondisi koneksi, maka beberapa baris akan ditambahkan ke tabel yang dihasilkan (sesuai dengan jumlah koneksi yang berhasil). esensi sebenarnya, jadi lebih baik menghubungkan tabel-tabel ini dengan dua bidang: Produk dan Warna, hanya saja kali ini kita akan menangani NULL:

Permintaan.Teks =
"MEMILIH
| Nomenklatur.Produk,
| Nomenklatur.Warna,
| ISNULL(Sisa.Jumlah, 0) SEBAGAI Kuantitas
|DARI
| Nomenklatur SEBAGAI Nomenklatur
| KIRI GABUNG Sisa SEBAGAI Sisa
| Nomenklatur Perangkat Lunak.Produk = Sisa.Produk

Koneksi yang benar

Sambungan kanan pada dasarnya tidak berbeda dengan sambungan kiri. Jika Anda menukar tabel, gabungan kanan akan berubah menjadi gabungan kiri; terlebih lagi, saat menggunakan konstruktor, sistem itu sendiri mengubah semua gabungan kanan menjadi gabungan kiri.

Gabungan batin

Dengan menggunakan gabungan dalam, kami memberi tahu sistem bahwa sebagai hasilnya kami hanya ingin melihat rekaman yang memenuhi kondisi koneksi dari tabel kanan dan kiri. Dengan demikian, jumlah record yang dihasilkan akan kurang dari atau sama dengan jumlah record dari tabel terpendek yang berpartisipasi dalam penggabungan. Mari kita terapkan gabungan dalam pada bidang Produk dan Warna pada tabel kita:

Permintaan.Teks =
"MEMILIH
| Nomenklatur.Produk,
| Nomenklatur.Warna,
| Sisa. Kuantitas SEBAGAI Kuantitas
|DARI
| Nomenklatur SEBAGAI Nomenklatur
| Sisa INNER JOIN SEBAGAI Sisa
| Nomenklatur Perangkat Lunak.Produk = Sisa.Produk
| Dan Nomenklatur.Warna = Tersisa.Warna";

Koneksi penuh

Gabungan penuh akan menghasilkan semua catatan dari kedua tabel, catatan-catatan yang memenuhi kondisi koneksi akan terhubung, catatan-catatan yang tidak memenuhi kondisi koneksi akan tetap berakhir di hasil kueri, tetapi dengan beberapa bidang NULL. Lengkap ibarat sambungan kiri dan kanan menjadi satu.

Ada banyak masalah pada topik ini, mari kita coba selesaikan salah satunya. Organisasi kami adalah dealer dari 2 pabrik furnitur: "Zarya" dan "Rassvet". Bermacam-macam dengan biaya masing-masing pabrik disimpan dalam tabel yang berbeda. Penting untuk membuat daftar harga terpadu, dan memasukkan produk di dalamnya dengan harga minimum:

Mari kita terapkan gabungan penuh dengan pilihan semua bidang, kita akan terhubung berdasarkan produk:

Permintaan.Teks =
"MEMILIH
| Tata NamaZarya.Produk SEBAGAI ProdukZarya,
| Tata NamaZarya.Harga SEBAGAI HargaZarya,
| Nomenklatur Rassvet. Produk SEBAGAI Produk Rassvet,
| Tata NamaRassvet.Harga SEBAGAI HargaRassvet
|DARI

Ini bukan yang kita butuhkan, mari gabungkan bidang produk menjadi satu dan proses NULL:

Permintaan.Teks =
"MEMILIH
//konstruksi ISNULL telah dibahas di bagian fungsi bahasa kueri
//jika harga tidak ditentukan, maka inisialisasi
//kenapa 1000000 lihat penjelasan dibawah
| ISNULL(NomenklaturZarya.Harga, 1000000) SEBAGAI HargaZarya,
| ISNULL(NomenclatureRassvet.Price, 1000000) SEBAGAI PriceRassvet
|DARI
| Tata NamaZarya SEBAGAI Tata NamaZarya
| Nomenklatur KONEKSI LENGKAPDawn SEBAGAI NomenklaturFajar
| Nomenklatur Perangkat LunakZarya.Produk = NomenklaturDawn.Produk";

Yang tersisa hanyalah memilih harga minimum. Teks permintaan terakhir akan terlihat seperti ini:

Permintaan.Teks =
"MEMILIH
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) SEBAGAI Produk,
| PILIHAN
| KETIKA ADA ISNULL(NomenclatureZarya.Price, 1000000) > ISNULL(NomenclatureRassvet.Price, 1000000)
| MAKA ISNULL (NomenklaturRassvet.Harga, 1000000)
| LAINNYA ISNULL(NomenklaturZarya.Harga, 1000000)
| AKHIR SEBAGAI HARGA
|DARI
| Tata NamaZarya SEBAGAI Tata NamaZarya
| Nomenklatur KONEKSI LENGKAPDawn SEBAGAI NomenklaturFajar
| Nomenklatur Perangkat LunakZarya.Produk = NomenklaturDawn.Produk";

Jika harga tidak ditentukan (NULL), maka harus diinisialisasi dengan beberapa nilai, jika tidak, operasi perbandingan lebih/kurang akan gagal dengan kesalahan. Harga tersebut kita inisialisasi dengan jumlah yang besarnya tidak realistis sehingga “kalah” dalam operasi perbandingan, karena sesuai dengan kondisi permasalahan kita memilih harga yang paling rendah.

← Fungsi bahasa kueri 1C 8 | Bergabung dalam kueri 1C 8 →

Pilihan Editor
Apa perbedaan perjanjian pinjaman dengan perjanjian pinjaman atau kredit, dan bagaimana cara meresmikan pengeluaran uang dengan benar kepada karyawan dalam program...

Laporan komoditas dalam 1C Accounting 8.3 Laporan komoditas dalam program 1C Accounting 8.3 merupakan bentuk terpadu TORG-29,...

Pada artikel ini saya ingin membahas aspek penghitungan dan pemotongan pajak penghasilan orang pribadi di 1C 8.3, serta penyusunan laporan pada formulir 2-NDFL dan...

Apa yang harus dilakukan jika ada entri yang salah dalam akuntansi? Untuk melakukan ini, Anda dapat menggunakan teknik khusus untuk memperbaiki catatan tersebut. Jika terjadi kesalahan...
Setidaknya ada 5 alasan untuk menolak membeli dan menggunakan software palsu untuk bisnis. Risiko-risiko tersebut adalah: Risiko non-ekonomi:...
Bagaimana cara merakit dan membongkar barang dalam program menggunakan contoh Trade Management? Kebetulan ada kebutuhan...
Pada artikel ini saya ingin membahas aspek penghitungan dan pemotongan pajak penghasilan orang pribadi di 1C 8.3, serta penyusunan laporan pada formulir 2-NDFL dan...
Bahasa query 1C adalah salah satu perbedaan utama antara versi 7.7 dan 8. Salah satu poin terpenting dalam mempelajari pemrograman 1C adalah...
KUDIR adalah buku pendapatan dan pengeluaran yang harus dipelihara oleh semua organisasi dan pengusaha perorangan (Pasal 346.24 Kode Pajak Federasi Rusia). Sertifikasi buku dengan pajak...