1c dari dokumen html untuk meneruskan parameter. Formulir Terkelola: Bidang Dokumen HTML dan Klien Web

Bekerja dengan antarmuka alternatif pada formulir terkelola 1C tersedia melalui HTML. Antarmuka alternatif mungkin diperlukan jika kontrol 1C standar tidak cukup, tetapi Anda menginginkan sesuatu yang lebih. Artikel ini mencantumkan beberapa rahasia bekerja dengan antarmuka web pada formulir terkelola 8.2.

Menampilkan halaman Html pada formulir terkelola 1C

Untuk menampilkan halaman Html, Anda perlu memasukkan Bidang Dokumen Html pada formulir dan menempatkan kode html di sumber data. Ingatlah hal-hal berikut: klien tipis dan web aktif Internet Explorer bekerja dengan cara khusus. Kedua kasus ini menggunakan Internet Explorer dalam mode kompatibilitas IE 7.
Rahasia pertama adalah itu klien kurus dapat dimasukkan ke dalam mode kompatibilitas dengan versi IE yang lebih lama. Untuk melakukan ini, Anda perlu menggunakan meta X-UA-Compatible. Jadi pada Windows 7 setelah menambahkan


Anda dapat menggunakan objek SVG, misalnya:

Anda dapat mengalihkan klien web IE ke versi kompatibilitas yang lebih modern dengan menempatkan klien web 1C dalam IFrame dan menyetel tag meta kompatibilitas di html induk. Contoh bagaimana hal ini dapat dilakukan ditunjukkan di sini:
Tapi itu tidak dijamin pekerjaan biasa dan menampilkan klien web, karena 1C awalnya merancang klien web berdasarkan kompatibilitas dengan IE6 / 7.
Rahasia kedua adalah tata letak tata letak html dalam mode teks tanpa editor visual 1C memburuk setelah tata letak ditutup di konfigurator. Misalnya, jika Anda memasukkan definisi svg pada tata letak html, maka setelah membuka kembali konfigurator, Anda akan melihat html yang rusak (perhatikan tajuk kepala).

Oleh karena itu, jika tata letak Anda lebih rumit daripada menampilkan gambar, maka saya menyarankan Anda untuk menyimpan kode html di tempat lain.

Menyimpan semuanya dalam satu baris dalam gambar umum

Halaman web modern tidak terbatas hanya pada html. Selain itu, ada gambar, file js / css. Pendekatan tradisional memungkinkan menyimpan dan mengakses gambar yang ditempatkan di gambar konfigurasi umum, tetapi pengembang 1C harus merancang dengan js / css. File teks atau diarsipkan dan dibongkar sebelum menampilkan halaman, atau ditempatkan seluruhnya dalam html. Pendekatan ini tidak menggunakan cache yang dibangun di hampir setiap browser untuk mendapatkan permintaan.
Pengalaman saya adalah meletakkan skrip java di gambar umum. Pengalaman ini sebagian berhasil; semua browser dan thin client menjalankan jQuery kecuali IE. Jika ada yang mengetahui rahasianya dan dapat membuat metode ini berfungsi di IE, silakan berhenti berlangganan. Tindakan harus dilakukan sebagai berikut:
1. Buat gambar umum dan letakkan gambar apa saja di dalamnya
2. Pada tata letak html dalam mode edit, pilih teks apa saja dan pilih gambar umum melalui menu Elements-Link
3. Masukkan teks dari tautan ke dalam blok skrip
4. Ganti keseluruhan gambar dengan konten JavaScript

Kerangka kerja 1C bawaan untuk klien web

Hanya sedikit orang yang tahu bahwa klien web 1C menyertakan kerangka kerja yang menyederhanakan pekerjaan dengan elemen formulir. Kerangka berjalan pada JavaScript. Itu dapat diakses melalui parent.WebUI. fungsinya memerlukan penelitian lebih lanjut, tetapi sifat-sifatnya adalah sebagai berikut:


Secara teori, framework ini dapat digunakan untuk memanggil prosedur server 1C. Dalam hal ini, bidang html akan sepenuhnya terintegrasi dengan elemen lain dari formulir terkelola, yang memerlukan independensi platform. Sekarang Masukan dicapai melalui WebBrowser Control, yang terkait dengan Windows.

Kata kunci __STYLE__

Saya sudah lama menggaruk-garuk kepala, apa artinya kata kunci __STYLE__, yang secara otomatis diganti oleh 1C ke dalam template tata letak html kosong. Tetapi penelitian kueri menunjukkan bahwa __STYLE__ tidak digantikan oleh apa pun, dan server mengembalikan kesalahan 500 untuk permintaan ini: Kesalahan Server Internal.

Selama pelaksanaan satu proyek, menjadi perlu untuk mengeksekusi kode javascript (selanjutnya disebut JS) di bawah kendali objek Bidang Dokumen HTML, dengan hasil yang diperoleh dalam 1C. Contoh-contoh yang diberikan dalam artikel yang ditemukan tampaknya tidak nyaman digunakan (murni pendapat pribadi). Diputuskan untuk mencoba mencari solusi lain yang lebih sederhana, tidak lebih dari 1 hari dialokasikan untuk pencarian.

DIV.setAttribute("onclick", "alert("Coordinates");");

Jalankan skrip

DIV.klik();

TA-DAH. semuanya bekerja

Procedure ExecuteScript(TextScript) DIV = Elements.doc.Document.getElementById("TEST"); DIV.setAttribute("klik", TextScript); DIV.klik(); Prosedur Akhir

Pembaruan per 08/02/2016

Cara lain untuk memanggil JS disarankan dalam komentar (terima kasih), jika Anda memiliki kemampuan untuk mengubah kode HTML dokumen, Anda dapat menulis fungsi di dalamnya dan kemudian memanggilnya. meneruskan kode JS ke sana.

dan kemudian di 1C:

Elements.DocumentHTMLField1.Document.parentWindow.exec("alert("OK")");

Mengembalikan hasil JS di 1C

Untuk mentransfer hasil skrip ke 1C dari objek FieldHTMLDocument, kita akan menggunakan sebuah event. Mari ikat event OnClick ke Bidang HTMLDocument yang menerima 3 parameter sebagai masukan:

  1. Elemen tempat terjadinya peristiwa (Bidang Dokumen HTML itu sendiri)
  2. objek acara
  3. Tanda penerapan perilaku standar

Untuk memicu peristiwa saat klik, Anda perlu menjalankan kode js berikut

Varevt = document.createEventObject(); // buat objek acara kosong evt.propertyName = "function1"; // Saya mengusulkan untuk meletakkan nama hasil di prop propertyName (sesuatu seperti tipe, atau nama fungsi dari mana data diterima) evt.data = "156"; //kami akan meneruskan data hasil ke prop data document.body.fireEvent("onclick", evt); // jalankan acara di clickHtmlDocumentField

Setelah mengeksekusi kode js ini di prosedur, ketika parameter kedua diklik, objek acara yang kita buat akan muncul. Yang cukup mudah ditangani.

Contoh penguraian jawaban.

&OnClient // mendapatkan nama dan hasil dari event Prosedur DocOnClick(Element, EventData, StandardProcessing) OperationName = EventData.Event.propertyName; DataOperasi = DataPeristiwa.DataPeristiwa.data; Jika NamaOperasi = "" Maka //bukan event kita Kembali; Berakhir jika; If NamaOperasi = "Fungsi1" Lalu // hasil proses ElseJika NamaOperasi = "fungsi2" Lalu // hasil proses //...... EndIf; Prosedur Akhir

Metode ini menghilangkan penggunaan penangan tunggu, dan menyediakan pengidentifikasi peristiwa yang nyaman. Dengan pengidentifikasi, kami tahu persis data apa yang kami terima dan bagaimana cara menguraikannya.

Penambahan dari 03/26/2016

Dan di tempat ini juga terjadi kesalahpahaman (kesalahan hanya direproduksi di platform 8.3.5.1570, tetapi untuk mencegah situasi ini di masa mendatang, saya akan memberikan solusi) Alasannya - ketika formulir dimulai ulang dengan bidang HTML dokumen pada saat pemanggilan prosedur, saat mengklik bidang HTML, panggilan platform terhenti dan menurunkan seluruh objek COM (Terjadi pengecualian (file html): Kesalahan tidak terdefinisi). Solusinya adalah menonaktifkan eksekusi standar peristiwa klik, dan menonaktifkan mode gelembung peristiwa. Cara melakukannya, lihat di bawah.

// nonaktifkan gelembung acara

Evt.cancelBubble = true;

// nonaktifkan perilaku default

Evt.returnValue = false;

Hasilnya, kita akan mendapatkan fungsi untuk mentransfer data ke 1s dari JS.

Fungsi return1c(nama,data)( var evt = document.createEventObject(); evt.propertyName = nama; evt.data = data; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent("onclick",evt ); );

Kesimpulan.

Dengan menggabungkan metode ini, Anda dapat dengan mudah menjalankan kode js yang Anda butuhkan dan menerima data dalam 1C untuk diproses lebih lanjut.

Contoh implementasi di

28
Saat mengintegrasikan 1C dengan situs web, selalu muncul pertanyaan tentang mentransfer beberapa data ke server web. Apakah itu transfer parameter kueri untuk menerima data dari server web dalam 1C, atau transfer data dari 1C, yang harus disimpan atau entah bagaimana 14
Pengembang di platform 1C terkadang memiliki tugas untuk berinteraksi dengan sistem 1C: Perusahaan dengan berbagai program email dan protokol. 1C Enterprise 8.0 memiliki alat yang cukup nyaman untuk mengirim pesan, mengimpor surat dari surat 9
Saat bertukar data dengan situs web, format JSON sering digunakan. Sayangnya, di 1C tidak ada prosedur standar untuk bekerja dengan format ini. Dalam proses mengimplementasikan salah satu proyek, saya mengembangkan sejumlah prosedur dan fungsi yang membuat hidup lebih mudah untuk program tersebut. 8
Format JSON di 1C sebelum versi 8.3.6 tidak diimplementasikan, namun di bawah ini saya berikan contoh fungsi yang bisa digunakan untuk pengoperasian JSON secara penuh di 1C versi sebelumnya. JSON (JavaScript Object Notation) adalah format teks pertukaran data, banyak digunakan 5
Pada artikel ini saya akan mencoba menjelaskan proses parsing situs menggunakan 1C dengan sebuah contoh. Artikel ini bukan petunjuk penggunaan, tetapi hanya mendemonstrasikan kemampuan 1C. Apa yang kita miliki? 1. Website di Internet, yang berisi daftar produk

Platform 1C adalah alat yang cukup kuat yang dirancang untuk menyelesaikan berbagai tugas. Pada artikel ini, kami ingin berbicara tentang satu jenis objek, yang dengannya Anda dapat:

  • Bekerja dengan komponen ActiveX;
  • Panggil Javascript;
  • Membuat dan menggunakan link ke berbagai objek database.

Objek ini disebut di bidang 1C dari dokumen HTML.

Kontrol HTMLDocumentField memiliki satu batasan signifikan dalam penggunaannya - tidak dapat digunakan untuk bidang yang terletak di tabel.

Membuat browser Anda sendiri di 1C

Mari coba gunakan bidang ini untuk membuat pemrosesan yang membuka tautan ke sumber daya di Internet:

Mari kita periksa cara kerjanya .. Dapatkan gambarnya (Gbr. 4)
Gbr.4.

Mari kita analisis apa yang kita lihat:

  1. Jendela pencarian telah dibuka, dengan tautan ke situs, sementara pencarian dilakukan dengan menggunakan mesin pencari ditetapkan secara default;
  2. Memproses karya, halaman web terbuka, tautan diklik;
  3. Terjadi kesalahan skrip saat memanggil sumber daya.

Apa kesalahannya? Dengan fakta bahwa HTMLDocumentField sebenarnya adalah Internet Explorer biasa, dan bukan versi terbaru, yang tidak didukung oleh sebagian besar sumber daya modern. Jadi situs yang tidak mendukung mode kompatibilitas akan terbuka dengan kesalahan pada skrip.

Untuk kenyamanan pengguna, dimungkinkan untuk membuat perintah navigasi "Maju" dan "Kembali" pada formulir, yang akan menjelaskan gerakan yang sesuai.

Buat link ke objek database

Tugasnya adalah:

  • Buat daftar objek apa pun, katakanlah elemen direktori "Karyawan";
  • Dapatkan tautan ke masing-masingnya;
  • Buka dengan langsung mengklik tautan yang sesuai.

Mari buat pemrosesan dan formulir kita di atasnya.


Mari kita lihat lebih dekat apa yang telah kita lakukan:

  1. Dibuat Dokumen Teks, yang berisi "badan" situs kami;
  2. Awal dan akhir dokumen, serta badan dokumen HTML kami, kami jelaskan menggunakan tag yang sesuai;
  3. Tercatat setiap karyawan di dalamnya;
  4. Dalam catatan karyawan, kami memuat informasi yang akan kami perlukan nanti saat kami membuka elemen dengan mengklik nama lengkap karyawan;
  5. Kami menetapkan bidang kami ke teks yang menjelaskan struktur.

Mencoba sekarang untuk mengaktifkan salah satu hyperlink yang tersedia, kami menemukan fakta bahwa "Halaman ini tidak ditemukan" (Gbr. 8)
Gbr.8

Mari lanjutkan mendeskripsikan pawang.

Mari buat prosedur yang menangani klik mouse pada hyperlink ke elemen direktori (Gbr. 9).

Gbr.9

Mari kita pertimbangkan lebih detail:

  1. Pertama-tama, mari nonaktifkan pemrosesan klik hyperlink standar;
  2. Mari kita dapatkan string yang mencirikan elemen kita, untuk ini kita mendapatkan nilai parameter Element.id di EventData;
  3. Mari kita pisahkan string yang dihasilkan sesuai dengan aturan yang kita gunakan untuk membentuknya (nama direktori dan pengidentifikasi unik, dipisahkan dengan tanda hubung);
  4. Dapatkan referensi ke elemen menggunakan fungsi ReturnReference;
  5. Kami membuka elemen dengan tautan yang diterima.

Mari kita uji eksekusi kode yang dihasilkan.

Karena penggunaan jendela modal dilarang dalam pengaturan program kami, eksekusi kode di atas berakhir dengan kesalahan (Gbr. 10). Kalau tidak, semuanya akan bekerja dengan baik.

Gbr.10

Mari kita pergi ke konfigurator di menu Text->Refactoring->Deprecated synchronous calls->Transform module calls. Setelah beberapa waktu, teks modul kita akan terlihat seperti pada Gbr.11

Gbr.11

Setelah mencoba pemrosesan lagi, Anda dapat memastikan bahwa semuanya berfungsi dengan baik dan ketika Anda mengklik tautan, elemen direktori yang sesuai akan terbuka.

Beberapa penjelasan untuk kode. Statistik mengatakan bahwa dalam database yang sama tidak mungkin ada elemen dengan pengidentifikasi yang sama, tetapi platform dapat menjamin keunikan hanya dalam tabel yang sama. Itu sebabnya kami membentuk tautan dari dua bagian.

Beberapa kata tentang Javascript

Panggilan ke fungsi JS di versi program sebelumnya dilakukan melalui parameter kolom document.parentWindow.MyFunk(), namun, di browser modern kesempatan ini telah hilang. Panggilan melalui eval() juga tidak berfungsi.

Jalan keluarnya adalah dengan menggunakan fungsi fireEvent khusus, yang merupakan mekanisme universal untuk bertukar data antara 1C dan Javascript.

Pertanyaan: Kode HTML tidak ditampilkan di Bidang HTML formulir terkelola Dokumen 1C


Selamat tinggal! Seseorang memberi tahu saya, saya sedang membuat pemrosesan eksternal, membuat form, membuat Field di form, membuat Requisite di form (Type: Unlimited String), jalur data: Requisite (View: HTML Document Field), di Modul yang saya tulis secara terprogram:

&Pada Klien
Bidang Prosedur1DokumenDihasilkan(Item)
ThisObject.Props = "

Selamat datang

"; Prosedur Akhir Akibatnya, tidak ada yang ditampilkan di Bidang Dokumen HTML (Kosong), meskipun, secara teori, Wellcome harus ditampilkan, seperti yang saya pahami dari apa yang saya baca di forum.

Apa kesalahan yang telah aku perbuat?

Menjawab: Siapa yang butuh ide ini, ambillah, rantai kerja yang sudah jadi dan stabil, diuji dalam 1C: Ritel 8 / 2.2 formulir terkelola !!!

Pertanyaan: bidang dokumen HTML FormElements.IE.Document.getElementsByClassName()


Ceritanya adalah FormElements.IE.Document.getElementsByClassName("loginform__input-border") biasanya mengembalikan elemen yang diinginkan, tetapi di sini
ElementsForm.IE.Document.getElementsByClassName("loginform__input-field ng-dirty ng-valid ng-touched") tidak menemukan cara apa pun

itu. tidak berfungsi ketika ada spasi di nama ...

Mengapa?

Menjawab:() Apakah ada banyak formulir di halaman? Jika tidak, dapatkan array formulir dan pilih yang Anda butuhkan.

Pertanyaan: atribut formulir sedang dihapus (bidang dokumen html)


Saya menghasilkan halaman dengan bidang dokumen html. Pengguna mengklik hyperlink yang terbuka di halaman yang dibuat dengan bidang dokumen html.
Kemudian pengguna menutup (secara terprogram) halaman asli, menutup dengan aman, tetapi untuk beberapa alasan semua bidang dokumen html di halaman turunan dihapus (disetel ulang), yaitu menjadi kosong.
Tidak ada yang akan memberitahumu, mungkin karena apa? Bagaimana cara menghindari

Menjawab:

Ini benar-benar sebuah ide!

Pertanyaan: Bagaimana cara bekerja dengan Bidang Dokumen HTML?


Beri tahu saya bagaimana Anda dapat menerapkan tindakan berikut atau memberikan tautan ke materi.
Ada kebutuhan untuk secara terprogram mengisi bidang di formulir situs, masuk dan secara terprogram mengisi bidang berikut di situs.
???

Ditambahkan setelah 5 jam 9 menit
Anda perlu mengisi input "s secara terprogram dan mengklik tombol ..

Ditambahkan setelah 16 jam 29 menit
Cara mengisi kolom tahu. Tahu bagaimana cara mengklik tombol?

Ditambahkan setelah 1 jam 17 menit
Mengerti segalanya. Thread dapat ditutup/dihapus

Menjawab: Melalui com. Sekarang tidak ada waktu. Saya akan memposting kembali pada sore atau malam hari.

Pertanyaan: Bidang dokumen HTML (bukan lagi, tapi lagi)


Halo semua.
formulir yang dikelola. conf yang ditulis sendiri. Mendapat "kesalahan skrip" saat menampilkan halaman web di bidang dokumen HTML. Tidak, saya tidak mencoba membuat browser lengkap di dalam 1C (referensi ke formulir "Browser" umum di formulir standar), tetapi beberapa formulir dasar, misalnya, formulir otorisasi di Google, harus ditampilkan. Dan saya ingin menampilkan dengan cara manusia, sehingga pengguna tidak terkejut dengan kutukan tentang skrip.

Apa yang telah dilakukan:
Saya mengonfigurasi IE di Windows untuk mengabaikan skrip. Membantu. Namun kesepakatan tersebut tidak lolos karena ketidaknyamanan dalam mengatur setiap komputer klien.
Skrip dibuang dari konten halaman yang diterima di alamat saat peristiwa Pembuatan Dokumen terjadi. Tidak membantu. Kutukan berhasil melompat keluar di depan hidung pengguna yang luar biasa sebelum skrip dibuang.
Dokumen dikirim untuk dibentuk di server. Kemudian kode HTML dihapus dari skrip dan dikirim ke klien di bidang dokumen HTML. Membantu. Tetapi mengklik tombol dan pekerjaan formulir lainnya pada klien itu sulit - banyak tindakan memerlukan konteks yang ditinggalkan di server (cookie). Dan bahkan jika Anda meninggalkan skrip untuk tombol yang diperlukan dan menyeret cookie dari server ke klien, tidak realistis untuk melacak semua kemungkinan transisi dan variasi konten halaman "asing", dan semua jenis pengalihan yang mungkin terjadi. Potensi peretasan terdeteksi.
Dipilih tipikal untuk penerapan keluaran HTML orang lain. Tidak membantu. Entah semuanya belum "dipelintir", atau pengembang vendor tidak menghubungi HTML yang tidak dikenal, atau mereka menghentikan keluaran di klien web, dan masalah skrip yang tersisa diabaikan.

Membantu....

Menjawab:() informasi berharga, terima kasih

Pertanyaan: Bantuan untuk membuka situs melalui bidang dokumen HTML


Selamat siang. Ada situs web
Yang tidak mendukung browser lama.

Itu harus dibuka di bidang dokumen HTML.
Mencoba melakukan mode kompatibilitas:

Situs web = "

";

Masih lewat