Pengurusan carian teks penuh. Enjin carian teks penuh (1Cv8). Carian pangkalan data teks penuh

Enjin carian teks penuh

Keupayaan carian teks penuh asas

  • sokongan transliterasi (menulis perkataan Rusia menggunakan aksara Latin mengikut GOST);
  • sokongan untuk penggantian (menulis sebahagian daripada aksara dalam perkataan Rusia dengan aksara Latin satu kunci);
  • kemungkinan carian kabur (huruf dalam perkataan yang ditemui mungkin berbeza) dengan petunjuk ambang kabur;
  • keupayaan untuk menentukan skop carian untuk objek metadata yang dipilih;
  • pembentangan hasil carian dalam format XML dan HTML dengan menyerlahkan perkataan yang ditemui;
  • pengindeksan teks penuh nama medan standard ("Kod", "Nama", dsb.) dalam semua bahasa konfigurasi;
  • melakukan carian dengan mengambil kira sinonim bahasa Rusia, Inggeris dan Ukraine;
  • kamus morfologi bahasa Rusia mengandungi beberapa perkataan khusus yang berkaitan dengan bidang aktiviti yang diautomasikan menggunakan sistem program 1C:Enterprise;
  • keupayaan untuk menggunakan kamus carian teks penuh tambahan;
  • Kamus yang dibekalkan termasuk pangkalan data kamus dan tesaurus dan kamus sinonim untuk bahasa Rusia, Ukraine dan Inggeris yang disediakan oleh syarikat Informatik.

Carian pangkalan data teks penuh

Mekanisme carian teks penuh dalam data sistem 1C:Enterprise 8 membolehkan anda mencari pangkalan data yang menunjukkan operator carian (DAN, ATAU, BUKAN, SETERUSNYA, dll.).

Mekanisme carian teks penuh adalah berdasarkan penggunaan dua komponen:

  • indeks teks penuh yang dicipta untuk pangkalan data semasa dan kemudian dikemas kini secara berkala mengikut keperluan;
  • alat carian teks penuh.

Mencipta dan mengemas kini indeks teks penuh boleh dilakukan secara interaktif, dalam mod 1C:Enterprise 8, atau secara pengaturcaraan, menggunakan bahasa terbina dalam. Di bawah ialah dialog untuk menguruskan pengindeksan teks penuh dalam mod 1C:Enterprise:

Untuk melakukan carian data dalam pangkalan data, contohnya, pemprosesan Carian Data yang dibentangkan di bawah boleh digunakan.

Dalam contoh yang dibentangkan, dokumen ditemui yang butirannya mengandungi nilai bermula dengan "Kompl" dan "ventilator" - rakan niaga "Kompletk TD" dan butiran yang mengandungi pelbagai bentuk perkataan "ventilator".

Sistem 1C:Enterprise 8 membenarkan kemasukan terpilih data objek aplikasi dan butirannya dalam carian teks penuh. Ia juga mungkin untuk mengehadkan skop carian kepada objek konfigurasi yang ditentukan sahaja.

Carian teks penuh dalam sistem bantuan

Sistem bantuan 1C:Enterprise 8 juga melaksanakan carian teks penuh, yang membolehkan anda menggunakan operator carian DAN, ATAU, TIDAK, SETERUSNYA, dll. Dalam kes ini, perkataan yang ditemui diserlahkan.

Antara muka perisian

Objek aplikasi berikut digunakan:

  • Pengurus Carian Teks Penuh
  • Senarai Carian Teks Penuh
  • FullTextSearchListElement

Pengurus Carian Teks Penuh mempunyai kaedah untuk membina indeks carian, menyemak perkaitannya dan juga membuat senarai carian jenis Senarai Carian Teks Penuh untuk pertanyaan tertentu.

Pengurus FullTextSearch tersedia sebagai hak milik konteks global FullTextSearch.

Senarai FullTextSearch menyediakan akses kepada hasil carian. Anda juga boleh menentukan skop carian sebagai tatasusunan elemen metadata konfigurasi.

Hasil carian ialah FullTextSearchListElement.

Pengendali rentetan carian

Operator carian berikut boleh digunakan dalam baris input:

DAN (DAN atau #) - cari data yang mengandungi semua perkataan; contoh: "rekod DAN dokumen" - butiran mesti mengandungi kedua-dua "kelakuan" dan "dokumen" (dengan mengambil kira morfologi);

ATAU (ATAU atau | atau,) - cari sekurang-kurangnya satu perkataan daripada yang disenaraikan; contoh: "rekod ATAU dokumen" - butiran mesti mengandungi sekurang-kurangnya satu daripada perkataan "rekod" atau "dokumen";

NOT (NOT or ~) - cari data yang butirannya mengandungi perkataan pertama, tetapi bukan perkataan kedua; contoh: "tutup BUKAN bulan" - semua yang mengandungi "tutup" tetapi tidak mengandungi perkataan "bulan" akan ditemui. Menggunakan "~" pada permulaan baris adalah tidak dibenarkan;

NEAR/n (NEAR/[+/-]n) - cari data yang mengandungi perkataan yang dinyatakan dalam satu atribut, dengan mengambil kira morfologi pada jarak n perkataan antara perkataan.

Tanda menunjukkan arah mana dari perkataan pertama perkataan kedua akan dicari ("+" - selepas yang pertama; "-" - sebelum perkataan pertama).

Jika tanda tidak dinyatakan, maka data akan dijumpai mengandungi perkataan yang ditentukan pada jarak n perkataan antara satu sama lain.

Susunan perkataan tidak penting.

  • "pengering rambut NEAR/3 air" - data akan ditemui di mana "udara" tidak lebih daripada 3 perkataan sebelum atau selepas "pengering rambut";
  • pengering rambut NEAR/+3 udara - data akan ditemui di mana "udara" tidak lebih daripada 3 perkataan selepas "pengering rambut";
  • pengering rambut DEKAT/-3 udara - data akan ditemui di mana "udara" tidak lebih daripada 3 perkataan sebelum "pengering rambut".

NEAR - pengendali jarak mudah: kedua-dua perkataan terletak tidak lebih daripada 8 perkataan antara satu sama lain; contoh: "memegang dokumen BERDEKATAN";

"" (teks dalam petikan) - cari frasa yang tepat dengan mengambil kira morfologi, contoh: "menyiarkan dokumen" - bersamaan dengan: menyiarkan /1 dokumen;

() - kumpulan perkataan (sebarang bilangan peringkat bersarang); contoh: "(siaran | penyata) # (akaun, dokumen)";

* - cari menggunakan kad bebas (menggantikan penghujung perkataan). Lebih daripada 1 aksara penting mesti dimasukkan; contoh: “doc*” - akan mencari “document”, “document”, “documentary”, dsb.;

# - carian kabur untuk perkataan dengan bilangan perbezaan tertentu daripada nombor yang ditentukan (jika tidak dinyatakan, maka = 1); contoh: pertanyaan "#System" akan mencari "sistama", "sivtema"; pertanyaan "Sistem#2" akan menemui "sittama", "settema";

Cari dengan mengambil kira sinonim bahasa Rusia, Inggeris dan Ukraine. "!" diletakkan sebelum perkataan yang sepadan; contoh: mencari "jubin merah" juga akan menemui "jubin merah" dan "jubin karang".

Jika tiada pengendali dinyatakan (perkataan ditaip dipisahkan oleh ruang), maka program mencari semua perkataan daripada pertanyaan menggunakan operator DAN.

Contoh

SearchList = FullTextSearch.CreateList("", 20); SearchList.GetDescription = Benar;

ArrayMD = New Array(); ArrayMD.Add(Metadata.Directories.Products); ArrayMD.Add(Metadata.Documents.CashReceipt);

SearchList.SearchArea = ArrayMD; SearchList.SearchString = SearchInputField; SearchList.PortionSize = PortionSize; SearchList.FirstPart();

Jika SearchList.FullQuantity() = 0 Kemudian Jika SearchList.TooManyResults() Kemudian Amaran("Terlalu banyak hasil, sila perhalusi pertanyaan anda."); endIf; kembali; endIf;

Kuantiti = SearchList.FullQuantity();

HTMLStr = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText); Laporan(StrHTML);

Untuk setiap indeks = 0 Mengikut SearchList.Quantity-1 Elemen gelung = SearchList.Get(index); Laporan(item.View); EndCycle;

Keanehan

Carian teks penuh berfungsi merentasi keseluruhan tatasusunan data, jadi apabila menggunakannya, anda mesti lulus hasilnya melalui penapis keselamatan.

Sebagai contoh, dalam sistem multibase anda perlu memotong objek daripada pangkalan data lain.

Di samping itu, penapisan sedemikian bersilang rapat dengan kawalan akses. Adalah diketahui bahawa selalunya mekanisme carian adalah "lubang" dalam keselamatan.

Sehingga kini, beberapa orang tahu bahawa, bermula dengan versi 8.1, platform 1C:Enterprise mempunyai mekanisme yang hebat dan sangat berguna - carian teks penuh. Apa ini? Bagaimanakah ia boleh berguna kepada anda? Soalan-soalan ini dijawab dalam artikel oleh V.V. Memancing, syarikat "1C".

Pertama, beberapa perkataan tentang jenis mekanisme ini. Carian teks penuh, secara ringkas, akan membolehkan anda mencari maklumat teks yang terletak hampir di mana-mana dalam konfigurasi yang digunakan. Dalam kes ini, anda boleh mencari data yang diperlukan sama ada sepanjang keseluruhan konfigurasi secara keseluruhan, atau dengan mengecilkan kawasan carian kepada beberapa objek (contohnya, jenis dokumen atau direktori tertentu). Kriteria carian itu sendiri boleh berbeza-beza dalam julat yang agak luas. Iaitu, anda boleh mencari data yang diperlukan tanpa mengingati dengan tepat di mana ia disimpan dalam konfigurasi dan bagaimana tepatnya ia direkodkan.

Carian teks penuh menyediakan pilihan berikut.

  1. Terdapat sokongan untuk transliterasi (menulis perkataan Rusia menggunakan aksara Latin mengikut GOST 7.79-2000). Contoh: "Frasa Rusia" = "russkaya fraza".
  2. Terdapat sokongan untuk penggantian (menulis sebahagian daripada aksara dalam perkataan Rusia dengan aksara Latin satu kunci). Contoh: "russrfz frapf" (pengakhiran setiap perkataan ditaip dalam huruf Latin, sebagai contoh, akibat ralat operator).
  3. Terdapat kemungkinan carian kabur (huruf dalam perkataan yang ditemui mungkin berbeza) dengan petunjuk ambang kabur. Contoh: dengan menyatakan perkataan "hello" dalam bar carian dan kekaburan 17%, kami akan menemui semua perkataan yang serupa dengan dan tanpa ralat: "hello", "prevet", "prived".
  4. Adalah mungkin untuk menentukan skop carian untuk objek metadata yang dipilih.
  5. Pengindeksan teks penuh nama medan standard ("Kod", "Nama", dll.) dijalankan dalam semua bahasa konfigurasi.
  6. Carian dilakukan dengan mengambil kira sinonim bahasa Rusia, Inggeris dan Ukraine.
  7. Kamus morfologi bahasa Rusia mengandungi beberapa perkataan khusus yang berkaitan dengan bidang aktiviti yang diautomatikkan menggunakan sistem program 1C:Enterprise.
  8. Sebagai standard, kamus yang dibekalkan termasuk pangkalan data kamus dan kamus tesaurus dan sinonim bahasa Rusia, Ukraine dan Inggeris, yang disediakan oleh syarikat Informatik.
  9. Carian boleh dijalankan menggunakan aksara kad bebas ("*"), serta menentukan operator carian ("DAN", "ATAU", "TIDAK", "SETERUSNYA") dan aksara khas.

Carian teks penuh boleh dilakukan dalam sebarang konfigurasi pada platform 1C:Enterprise 8.1.

Ini juga terpakai pada konfigurasi yang telah ditukar daripada versi 8.0. Untuk membolehkan keupayaan untuk menggunakan carian teks penuh, hanya pergi ke menu "Operasi" konfigurasi anda dan pilih item "Urus carian teks penuh", dan kemudian dayakan ciri ini (lihat Rajah 1).

nasi. 1

Jika anda menggunakan konfigurasi standard pada platform 8.1, kemungkinan besar ia telah mempunyai pemprosesan "Carian Data" terbina dalam (menu "Alat" / "Carian Data"). Jika pemprosesan sedemikian tidak terdapat dalam konfigurasi yang digunakan, tidak mengapa.

Ia sentiasa boleh ditemui pada cakera ITS. Dalam artikel ini, kami akan menggunakan contoh operasi pemprosesan khusus ini dalam konfigurasi demo "Perakaunan Perusahaan" (rev. 1.6) untuk menunjukkan keupayaan carian teks penuh.

Seperti yang telah disebutkan, carian boleh dilakukan menggunakan beberapa perkataan, menggunakan operator carian dan menggunakan frasa yang tepat. Selain itu, lokasi carian boleh dihadkan kepada objek konfigurasi tertentu (contohnya, dokumen "Bertindak atas penyediaan perkhidmatan pengeluaran") atau senarai/set objek konfigurasi.

Apabila mencari data, ia dibenarkan menggunakan operator carian dalam rentetan carian (semua operator mesti dinyatakan hanya dalam huruf BESAR dan tanpa tanda petikan) yang ditunjukkan dalam jadual.

Jadual


Sila ambil perhatian: jika tiada operator dinyatakan (perkataan ditaip dipisahkan oleh ruang), program mencari semua perkataan daripada pertanyaan menggunakan operator "DAN".

nasi. Rajah 2 menunjukkan contoh carian perkataan separa mudah. Dengan menaip "dipercayai*", kami menerima sebagai hasilnya pautan kepada individu, serta kepada dokumen dalam ulasan yang memaparkan frasa "Pelanggan yang boleh dipercayai".


nasi. 2

nasi. 3 menunjukkan contoh carian yang lebih kompleks menggunakan binaan "ATAU" dalam baris carian dan mengehadkan kawasan carian menggunakan direktori "Nomenklatur" dan dokumen "Penerimaan barangan dan perkhidmatan", "Jualan barangan dan perkhidmatan". Jelas kelihatan bahawa carian mencerminkan keseluruhan tatanama, yang namanya mengandungi sama ada perkataan "teapot" atau perkataan "BINATONE," serta semua dokumen jenis yang ditentukan, mengandungi semua tatanama yang berkaitan.


Carian teks penuh- akan membolehkan anda mencari maklumat teks yang terletak hampir di mana-mana dalam konfigurasi yang digunakan. Dalam kes ini, anda boleh mencari data yang diperlukan sama ada sepanjang keseluruhan konfigurasi secara keseluruhan, atau dengan mengecilkan kawasan carian kepada beberapa objek (contohnya, jenis dokumen atau direktori tertentu). Kriteria carian itu sendiri boleh berbeza-beza dalam julat yang agak luas. Iaitu, anda boleh mencari data yang diperlukan tanpa mengingati dengan tepat di mana ia disimpan dalam konfigurasi dan bagaimana tepatnya ia direkodkan.

Carian teks penuh menyediakan pilihan berikut:

  • Terdapat sokongan untuk transliterasi (menulis perkataan Rusia menggunakan aksara Latin mengikut GOST 7.79-2000). Contoh: "Frasa Rusia" = "russkaya fraza".
  • Terdapat sokongan untuk penggantian (menulis sebahagian daripada aksara dalam perkataan Rusia dengan aksara Latin satu kunci). Contoh: "russrfz frapf" (pengakhiran setiap perkataan ditaip dalam huruf Latin, sebagai contoh, akibat ralat operator).
  • Terdapat kemungkinan carian kabur (huruf dalam perkataan yang ditemui mungkin berbeza) dengan petunjuk ambang kabur. Contoh: dengan menyatakan perkataan "hello" dalam bar carian dan kekaburan 17%, kami akan menemui semua perkataan yang serupa dengan dan tanpa ralat: "hello", "prevet", "prived".
  • Adalah mungkin untuk menentukan skop carian untuk objek metadata yang dipilih.
  • Pengindeksan teks penuh nama medan standard ("Kod", "Nama", dll.) dijalankan dalam semua bahasa konfigurasi.
  • Carian dilakukan dengan mengambil kira sinonim bahasa Rusia, Inggeris dan Ukraine.
  • Kamus morfologi bahasa Rusia mengandungi beberapa perkataan khusus yang berkaitan dengan bidang aktiviti yang diautomatikkan menggunakan sistem program 1C:Enterprise.
  • Sebagai standard, kamus yang dibekalkan termasuk pangkalan data kamus dan kamus tesaurus dan sinonim bahasa Rusia, Ukraine dan Inggeris, yang disediakan oleh syarikat Informatik.
  • Carian boleh dijalankan menggunakan aksara kad bebas ("*"), serta menentukan operator carian ("DAN", "ATAU", "TIDAK", "SETERUSNYA") dan aksara khas.

Carian teks penuh boleh dilakukan dalam sebarang konfigurasi pada platform 1C:Enterprise 8

Untuk membuka tetingkap kawalan carian teks penuh, lakukan perkara berikut:

Permohonan biasa- item menu Operasi - Mengurus Carian Teks Penuh.

Permohonan Terurus- item menu Menu utama - Semua fungsi - Standard -Pengurusan carian teks penuh.


  • Kemas kini indeks– Penciptaan indeks/kemas kini indeks;
  • Indeks yang jelas– menetapkan semula indeks (disyorkan selepas mengemas kini semua data);
  • item Benarkan penggabungan indeks– bertanggungjawab untuk menggabungkan indeks utama dan tambahan.

Carian teks penuh dijalankan menggunakan indeks teks penuh. Tanpa indeks, carian teks penuh seperti itu tidak mungkin. Agar carian menjadi berkesan, semua data yang berkaitan mesti disertakan dalam indeks teks penuh. Jika pengguna memasukkan data baharu ke dalam pangkalan data, ia mesti dimasukkan ke dalam indeks yang dipersoalkan, jika tidak, ia tidak akan mengambil bahagian dalam carian. Untuk mengelakkan ini, anda perlu mengemas kini indeks teks penuh. Apabila mengemas kini, sistem hanya menganalisis jenis data tertentu: Rentetan, Data jenis rujukan (pautan ke dokumen, direktori), Nombor, Tarikh, Storan Nilai. Jika pengguna tidak mempunyai hak akses kepada maklumat tertentu, maka dia tidak akan dapat melihatnya dalam hasil carian. Anda juga harus ingat bahawa dalam sifat objek yang mana carian akan berlaku, nilai mesti ditetapkan Carian Teks Penuh – Gunakan, yang ditetapkan secara lalai.

Bagaimana anda boleh melihat harta itu guna ditetapkan untuk keseluruhan direktori Rakan niaga, tetapi ini boleh dilakukan untuk setiap atributnya daripada jenis yang sepadan.

Mari kita lihat lebih dekat pada indeks teks penuh, yang terdiri daripada dua bahagian (indeks): indeks utama dan tambahan. Kelajuan mendapatkan data yang tinggi dipastikan oleh indeks utama, tetapi mengemas kininya agak perlahan, bergantung pada jumlah data. Indeks tambahan adalah bertentangan dengannya. Data ditambahkan padanya dengan lebih pantas, tetapi carian lebih perlahan. Sistem mencari kedua-dua indeks secara serentak. Kebanyakan data berada dalam indeks utama, dan data yang ditambahkan pada sistem masuk ke dalam indeks tambahan. Walaupun jumlah data dalam indeks tambahan adalah kecil, carian melaluinya agak pantas. Pada masa apabila beban sistem ringan, operasi gabungan indeks berlaku, akibatnya indeks tambahan dikosongkan dan semua data diletakkan dalam indeks utama. Adalah lebih baik untuk melakukan penggabungan indeks pada masa beban sistem adalah minimum. Untuk tujuan ini, anda boleh membuat tugas terkawal dan tugas berjadual.

Pengendali khas dibenarkan apabila menentukan ungkapan carian

Mekanisme carian teks penuh membolehkan menulis sebahagian daripada aksara perkataan Rusia menggunakan aksara Latin satu kekunci. Hasil carian tidak akan berubah.

Dua operator SETERUSNYA

  • dipermudahkan. 8 patah perkataan
  • NEAR/[+/-]n – cari data dalam satu atribut pada jarak n-1 perkataan antaranya.

Tanda menunjukkan ke arah mana dari perkataan pertama perkataan kedua akan dicari. (+ - selepas, - sebelum)

Kad bebas "*" hanya boleh digunakan sebagai pengganti pada akhir perkataan

Operator kekaburan "#". Jika ejaan tepat nama, nama tidak diketahui.

Perisian dan alatan 1C: pengaturcaraan.

Operator sinonim "!" Membolehkan anda mencari perkataan dan sinonimnya

Bagaimana untuk mengemas kini indeks carian teks penuh secara pemrograman?

Kod 1C v 8.x Kemas Kini ProsedurIndeks() Eksport
FulltextSearch.UpdateIndex();
Tamat Prosedur

Contoh carian data teks penuh

Mentakrifkan Pembolehubah SearchList

Kod 1C v 8.x Senarai Carian Boleh Ubah;

Di samping itu, dalam prosedur untuk memproses acara Apabila Borang Dibuka, kami akan menentukan bahawa pembolehubah ini akan mengandungi senarai carian teks penuh, dengan bantuan yang kami akan mencari data

Kod 1C v 8.x Prosedur OnOpen()
SearchList = FullTextSearch.CreateList();
Tamat Prosedur

Sekarang, untuk acara mengklik pada butang Cari, kami akan menulis kod yang akan membolehkan kami melakukan carian mengikut ungkapan yang dinyatakan dalam medan SearchExpression

Kod 1C v 8.x Prosedur FindClick(Elemen)
SearchList.SearchString = SearchExpression;
Percubaan
SearchList.FirstPart();
Pengecualian
Amaran(ErrorDescription());
Percubaan Akhir;
Jika SearchList.FullQuantity() = 0 Kemudian
Form Elements.ResultMessage.Value = "Tidak dijumpai";
Form Elements.Search Result.SetText("");
Jika tidak
OutputSearchResult();
endIf;
Tamat Prosedur

Pertama dalam prosedur ini, kami menetapkan istilah carian yang dimasukkan oleh pengguna sebagai rentetan carian untuk carian teks penuh. Kemudian kami melaksanakan kaedah FirstPart(), yang sebenarnya melancarkan carian teks penuh dan mengembalikan bahagian pertama hasil. Secara lalai, bongkah mengandungi 20 elemen. Selepas itu, kami menganalisis bilangan elemen dalam senarai carian. Jika ia tidak mengandungi sebarang elemen, maka kami memaparkan mesej yang sepadan dalam borang. Jika tidak, prosedur DisplaySearchResult() dipanggil, yang memaparkan keputusan kepada pengguna.

Mari buat prosedur dengan nama yang sama dalam modul borang dan tulis kod di dalamnya:

Kod 1C v 8.x Prosedur OutputSearchResult()
Form Elements.ResultMessage.Value = "Showing" + Row(SearchList.InitialPosition() + 1) + " - " + Row(SearchList.InitialPosition() +SearchList.Quantity()) + " from " + SearchList.FullQuantity() ;
Result = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Result);
ButtonAvailability();
Tamat Prosedur

Langkah-langkah dalam prosedur ini adalah mudah. Mula-mula, kami menjana mesej tentang elemen yang dipaparkan dan jumlah elemen yang ditemui. Kemudian kita mendapat hasil carian teks penuh dalam bentuk teks HTML dan memaparkan teks ini dalam medan dokumen HTML yang terletak dalam borang.

Akhir sekali, kami memindahkan kawalan kepada prosedur Button Availability() untuk menyediakan atau, sebaliknya, menafikan akses kepada butang Bahagian Sebelum dan Bahagian Seterusnya (bergantung pada bahagian mana keputusan yang diperolehi dipaparkan). Teks prosedur ini dibentangkan dalam Kod

Kod 1C v 8.x Ketersediaan Butang Prosedur ()
Elemen Borang.NextPosition.Availability = (SearchList.FullQuantity() - SearchList.StartPosition()) > SearchList.Quantity();
Elemen Borang.PreviousPosition.Availability = (SearchList.StartPosition() > 0);
Tamat Prosedur

Kini anda perlu mencipta pengendali acara untuk mengklik butang PreviousPart() dan NextPart().

Kod 1C v 8.x Prosedur Penekanan Bahagian Sebelumnya (Elemen)
SearchList.PreviousPart();
OutputSearchResult();
Tamat Prosedur
Prosedur Penekanan Bahagian Seterusnya (Elemen)
SearchList.NextPart();
OutputSearchResult();
Tamat Prosedur

"Sentuhan" terakhir adalah untuk mencipta pengendali untuk acara onclick medan dokumen HTML yang terdapat dalam borang. Hakikatnya ialah hasil carian teks penuh, yang dibentangkan dalam bentuk teks HTML, mengandungi hiperpautan kepada bilangan elemen senarai carian. Dan kami ingin apabila pengguna mengklik pada pautan ini, sistem akan membuka bentuk objek yang terkandung dalam elemen senarai ini. Untuk melakukan ini, kami akan memintas acara onclick dokumen HTML yang terkandung dalam medan dokumen HTML, dapatkan nombor item senarai daripada hiperpautan dan buka bentuk objek yang sepadan. Teks pengendali acara onclick bagi medan dokumen HTML dibentangkan dalam kod

Kod 1C v 8.x Prosedur Carian Resultonclick(Elemen, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Semak id elemen
Jika (htmlElement.id = "FullTextSearchListItem") Kemudian
// Dapatkan nama fail (nombor baris senarai carian),
// terkandung dalam hiperpautan
NumberInList = Number(htmlElement.nameProp);
// Dapatkan rentetan senarai carian mengikut nombor
SelectedRow = SearchList[NumberInList];
// Buka bentuk objek yang ditemui
OpenValue(SelectedRow.Value);
pEvtObj.returnValue = Palsu;
endIf;
Tamat Prosedur

Fungsi carian baharu adalah berdasarkan dua mekanisme:
- carian teks penuh (berfungsi dengan cepat dan memerlukan sumber pengkomputeran yang minimum);
- carian menggunakan DBMS (secara amnya, tempoh carian dan kos sumber pengkomputeran adalah berkadar dengan jumlah maklumat dalam jadual).

Dalam pelaksanaan semasa, senarai akan dicari tanpa guna carian teks penuh dalam kes berikut ():
- indeks teks penuh dilumpuhkan pada peringkat pangkalan maklumat;
- objek jadual utama tidak diindeks oleh indeks teks penuh;
- akibat carian menggunakan carian teks penuh, ralat telah diterima.

Jika carian teks penuh didayakan dalam pangkalan maklumat, dan indeks tidak dikemas kini sepenuhnya atau sebahagian (dari pengalaman saya, 95% daripada pangkalan data maklumat Pelanggan), maka pengguna akan menerima sama ada hasil carian yang tidak boleh dipercayai atau kosong semasa mencari.

Kami bertanya kepada Syarikat 1C - apa yang perlu dilakukan? Bagaimana untuk menjamin kebolehpercayaan hasil carian pada setiap masa?
Kami mendapat jawapannya: Ya, untuk memastikan hasil carian dikemas kini apabila carian teks penuh didayakan, anda perlu memastikan bahawa indeks carian teks penuh adalah terkini. Tiada pilihan lain untuk berkesan dan terkini. carian setakat ini lagi ().

Adakah "indeks teks penuh terkini" wujud? Bergantung pada bilangan pengguna, keamatan perubahan dalam maklumat dalam pangkalan data dan kekerapan kemas kini indeks. Biasanya, kemas kini indeks dijalankan setiap 60 saat. Adalah baik jika tidak banyak objek diubah, dan prosedur berjaya memproses semua perubahan dalam 60 saat ini. Bagaimana jika anda melakukan penyiaran semula sekumpulan dokumen, atau penulisan semula besar-besaran direktori? Dalam kes ini, tiada siapa yang boleh menjamin masa selepas itu carian indeks akan sekali lagi memberikan data yang boleh dipercayai.
Pada dasarnya, ini tidak begitu kritikal, kecuali dalam beberapa situasi. Pilihan biasa untuk pengguna ialah menetapkan pilihan dalam senarai dengan beberapa nilai, contohnya, "Akaun", masukkan yang baharu atau salin dokumen sedia ada dan tuliskannya. Dengan carian lama, dokumen baharu kelihatan serta-merta dalam senarai. Kini pengguna akan melihatnya hanya selepas N saat dalam kes terbaik, di mana N lebih hampir kepada 50-60 saat berbanding 2-3 saat.
Jika anda tidak perasan bahawa tiada dokumen baharu dan memberikan maklumat kepada seseorang berdasarkan keputusan yang dipilih, maka ia akan menjadi tidak boleh dipercayai dengan sengaja.

Ini berlaku apabila bekerja secara normal dengan pangkalan maklumat. Apakah yang akan berlaku dalam situasi tertentu? Biar saya berikan anda beberapa contoh.
1) Dalam pangkalan data yang berfungsi, indeks teks penuh didayakan dan dikemas kini dengan kerap. Pengguna meminta untuk menggunakan salinan pangkalan data yang berfungsi supaya dia boleh menganalisis data.
Kami memulihkan sandaran dan memberikan akses. Tetapi carian teks penuh tidak akan berfungsi, kerana... indeks disimpan bukan dalam DBMS, tetapi dalam fail berasingan (kedua-dua dalam versi fail dan pelayan pelanggan). Tiada indeks dalam fail dt.
mereka. Untuk membolehkan pengguna menggunakan carian senarai, indeks teks penuh dalam pangkalan data ini mesti dilumpuhkan. Benar, pengguna akan terkejut sedikit bahawa carian akan mengambil masa yang lebih lama. Atau bina semula indeks merentas seluruh pangkalan data.

2) (Relevan untuk pangkalan data yang lebih atau kurang besar). Pangkalan data pengeluaran mempunyai indeks teks penuh didayakan dan dikemas kini dengan kerap. Hujung bulan datang dan penutupan tempoh bermula. Kami mula memuatkan dan memajukan dokumen secara beramai-ramai. Untuk mengurangkan beban pada sistem, kami menyekat pelaksanaan tugas rutin, dan dengan itu, kemas kini indeks berhenti. Pengguna akan, secara ringkasnya, bingung mengapa tiada dokumen baharu atau ditukar dalam senarai. Satu-satunya jalan keluar adalah untuk melumpuhkan carian teks penuh untuk pangkalan maklumat, dan, dengan itu, meletakkan beban yang lebih besar pada peralatan kerana carian berat untuk semua butiran.

Oleh itu, nampaknya saya bahawa operasi mengemas kini indeks akan menjadi satu lagi pening bagi pentadbir pangkalan maklumat.
Sistem itu, yang sebelum ini menjamin 100% kebolehpercayaan dan perkaitan maklumat pada bila-bila masa, kini bertukar menjadi lebih kepada sistem rujukan yang tidak dapat dipastikan sepenuhnya.
Dan pengguna mendapat satu lagi sebab untuk mencela orang IT - "sistem anda tidak berfungsi dengan betul."

Walaupun fakta bahawa carian teks penuh pada platform 8.3 telah diumumkan oleh pembangun agak lama dahulu (dari platform 8.3.5), ia tidak digunakan secara aktif dalam konfigurasi biasa. Dalam keluaran terbaru Enterprise Accounting 3.0, pembangun telah mendayakan carian teks penuh dalam banyak senarai. Ini mengejutkan pengguna saya - program berhenti mencari.

Sudah tentu, carian teks penuh berfungsi, tetapi pengguna keliru tanpa melihat tetingkap Cari. Senario penggunaan biasa: Mereka mula menaip dari papan kekunci, semasa proses menaip tetingkap "Cari" muncul, yang menunjukkan medan di mana carian akan dijalankan, teks yang dicari dan mod carian "Bahagian rentetan".

Dengan menekan butang masukkan, senarai ditapis dan bar status carian muncul di atas senarai. Pengguna sendiri menentukan dalam bidang mana dan apa yang dia cari. Carian baharu mula berfungsi serta-merta semasa anda menaip dan menjejaskan semua medan yang dipaparkan dalam senarai. Tetingkap berasingan tidak muncul; semua padanan perkataan carian diserlahkan dalam warna.

Selama beberapa hari kami hidup dengan pencarian baru. Pengguna menderita, mengadu, mensabotaj. Aduan tidak berhenti, pengurusan diberi tugas "melakukan segala-galanya sebagaimana adanya."

Di mana untuk bermula? Anda perlu memahami bagaimana bentuk berbeza antara satu sama lain. Saya memuat naik kod sumber konfigurasi dengan gelagat carian baharu dan yang lama dan membandingkan sumber borang.

Kefungsian carian teks penuh baharu disediakan dengan menambahkan elemen borang dengan jenis "Rentetan Carian". Ia menjadi jelas apa yang perlu dicari. Saya menjumpai artikel mengenai ITS 7.3.1.5. Cari dalam senarai dinamik. Mempelajari artikel ini membawa kepada kesimpulan bahawa versi baharu operasi carian bergantung kepada dua faktor: 1. Borang mesti mempunyai penambahan elemen borang di atas, 2. Senarai dinamik pada borang mesti mempunyai sifat "SearchStringPosition" tidak sama dengan “Tiada”.

Secara teori, apabila membuat borang pada pelayan, cukup untuk menetapkan harta senarai "SearchStringPosition" kepada nilai "SearchStringPosition.No", tetapi ini tidak berfungsi dengan semua borang; dalam beberapa kes, carian baharu terus berfungsi . Kami tidak boleh memadamkan elemen borang yang tidak dibuat secara pengaturcaraan, tetapi kami boleh mengawal keterlihatan. Jika keterlihatan elemen borang "Add-onSearchString" dialih keluar, carian baharu teks penuh juga akan berhenti berfungsi. Semasa eksperimen, kod berikut dilahirkan, yang saya letakkan dalam modul umum:

Prosedur Melumpuhkan Senarai Eksport NewSearchInLists(Borang) = Form.Elements.Find("Senarai"); Jika Senarai = Tidak Ditakrifkan Kemudian Kembali; endIf; List.SearchStringPosition =SearchStringPosition.No; AdditionSearchString = Form.Elements.Find("AdditionSearchString"); Jika TIDAK SearchStringAddition = Tidak Ditakrifkan Maka SearchStringAddition.Visibility = False; endIf; Tamat Prosedur

Anda perlu menghantar borang yang diperbetulkan kepada prosedur "Lumpuhkan Carian Baharu dalam Senarai". Tetapi bagaimana ini boleh dilakukan untuk semua bentuk sekaligus?

Penyelesaian pertama ialah membetulkan borang yang diperlukan secara manual dalam configurator menggunakan editor borang. Saya segera meninggalkan penyelesaian ini - ia panjang dan membosankan, dan sukar untuk mengemas kini konfigurasi kemudian.

Penyelesaian kedua ialah memanggil prosedur apabila membuka borang yang akan melumpuhkan carian baharu secara pemrograman. Prosedur boleh dipanggil dari beberapa prosedur lain, pelancaran yang sudah didaftarkan dalam semua bentuk, dalam kes ini, dengan kemas kini selanjutnya, kami hanya perlu memantau prosedur ini supaya ia tidak berubah. Saya memilih GeneralModule.Print Management, yang mengandungi:

WhenCreatingOnServer(Borang, Peletakan Perintah Lalai, Objek Cetak) Eksport

Prosedur ini dipanggil apabila borang dibuat pada pelayan untuk mengisi arahan cetakan. Dalam prosedur ini, kami menulis kod yang memanggil fungsi kami untuk melumpuhkan carian baharu dalam senarai:

MyGeneralModule.DisableNewSearchInLists(Borang);

Akauntan sedang menikmati carian lama, dan kami sedang bersiap sedia untuk saat mod keserasian Enterprise Accounting 3.0 akan membolehkan kami mengalihkan fungsi ini ke dalam sambungan.