Rumah / Skype / Cara membuat event handler 1s. Menetapkan pengendali acara menggunakan langganan acara. Penambahan breakpoints secara otomatis

Cara membuat event handler 1s. Menetapkan pengendali acara menggunakan langganan acara. Penambahan breakpoints secara otomatis

Dalam menyelesaikan berbagai tugas pengguna, kadang-kadang menjadi perlu untuk tunduk pada pergerakan dokumen yang sudah terbentuk (yaitu, set register tertentu) ke beberapa jenis penyesuaian.

Untuk tujuan ini, objek "Berlangganan Acara" sangat cocok, yang memungkinkan Anda untuk melakukan beberapa tindakan ketika peristiwa tertentu terjadi untuk jumlah yang besar objek (misalnya, saat merekam dokumen pembayaran atau saat mengatur sejumlah direktori baru yang terkait dengan akuntansi pajak).

Juga, berlangganan acara itu nyaman karena memungkinkan Anda untuk berbagai kegiatan tanpa mengubah mekanisme khas yang dijelaskan dalam modul yang berbeda.

Misalnya, tugas muncul - perlu untuk mencatat data tertentu (informasi tentang kegiatan perusahaan) dalam dokumen pembayaran setelah pembentukan gerakan utama dokumen (terbentuk dalam acara "Pemrosesan"). Tugas akan dilaksanakan pada konfigurasi "Manufacturing Enterprise Management" ed. 1.3.

Mari kita lihat solusinya secara lebih rinci:

Mari buat langganan baru untuk acara "Rekam Arah ke Pembayaran". Langganan memiliki sejumlah properti yang akan menentukan perilakunya:

Sumber adalah objek (misalnya, dokumen atau daftar dokumen) yang tindakannya akan dipanggil. Untuk kasus kami, kami memilih Pesanan pembayaran keluar dan pesanan pembayaran masuk

Perkembangan- tindakan itu sendiri, setelah itu kode kita akan dieksekusi. Sesuai dengan kondisi masalah, kami memilih Pengolahan

Pawang- indikasi prosedur di mana pemrosesan akan berlangsung. Untuk tujuan ini, kami memilih modul umum Tujuan umum.

Setelah tujuan di atas, prosedur dibuat di mana perlu untuk menempatkan kode untuk mengisi data pada arah (asumsikan bahwa informasi tersebut sudah terkandung dalam pembayaran).

Pertimbangkan parameternya:

Sumber- objek bertipe DirectoryObject atau DocumentObject ini untuk tempat tindakan terjadi.

Penolakan- parameter yang memungkinkan Anda untuk membatalkan pengeposan dokumen dalam kondisi tertentu.

Modus memegang- opsi untuk melakukan (operasional atau non-operasional), memungkinkan Anda membangun algoritma pemrosesan dengan cara yang berbeda.

Mari kita berhenti di parameter Sumber. Untuk tugas kami, jenis parameter ini adalah - Objek Dokumen. Koleksi tersedia untuk tipe ini gerakan, yang berisi semua set catatan register yang dokumen ini adalah pendaftar.

Koleksi ini berisi satu set catatan PenyelesaianDengan CounterpartySetRecords yang menarik minat kita. Mari kita asumsikan bahwa Direction dimensi dibuat dalam register, yang perlu kita isi dari dokumen.

Mari kita tulis kode berikut:

Set = Sumber. gerakan; Perhitungan = Set. Penyelesaian dengan kontraktor; Untuk setiap Halaman dari Halaman Siklus Perhitungan. Arah = Sumber. Arah; Berakhir jika ;

Seperti yang kita lihat, implementasinya cukup sederhana, setelah memproses tindakan untuk menulis himpunan, tidak perlu melakukan tindakan tambahan - berlangganan acara dilakukan sebagai bagian dari transaksi acara ProcessingPerforming, setelah set selesai akan ditulis secara otomatis.

Keuntungan dari pendekatan ini: memproses data di luar algoritme standar, mengurangi jumlah pekerjaan dalam menemukan dan mentransfer perubahan selama pembaruan, visibilitas yang lebih besar - semua kode dalam satu prosedur.

Kelemahan dari pendekatan ini: peningkatan waktu untuk melakukan dokumen dan pencatatan elemen direktori.

Harapan, informasi ini akan berguna bagi programmer pemula dan rekan mereka yang lebih berpengalaman sebagai perpanjangan cakrawala mereka.

Kami mengklik beberapa tombol, tindakan tertentu segera mulai dilakukan - formulir ditutup atau dibuka, dokumen disimpan atau dibaca - peristiwa yang sesuai terjadi. Untuk acara apa pun, pemrogram memiliki kemampuan untuk menetapkan fungsi khusus, yang ditulis dalam bahasa 1C bawaan dan akan dapat melakukan tindakan yang ditentukan untuknya saat acara tersebut terjadi.

Sangat sering ada kebutuhan untuk menetapkan handler ke seluruh dokumen atau beberapa yang terpisah sekaligus. Misalnya, setiap dokumen berisi atribut "Pengguna". Atau kami baru saja menambahkan prop umum seperti itu. Apakah persyaratan ini dipenuhi, kita hanya dapat melihat dengan mengendalikan seluruh proses sendiri. Tapi bagaimana kita bisa melakukannya?

Berlangganan acara di 1C

Langganan acara di 1C adalah objek yang terletak di konfigurasi langganan Umum / Acara yang sesuai. Langganan ini memungkinkan Anda untuk menetapkan penangan untuk kasus seperti itu ketika peristiwa tertentu terjadi untuk beberapa objek sekaligus.

Tetapkan nama dan tambahkan langganan baru ke acara 1C

Penting untuk memilih beberapa atau satu dokumen tertentu di properti langganan, direktori tempat kami meletakkan pawang. Oleh karena itu, Anda perlu memilih salah satu peristiwa standar yang dapat terjadi dengan objek yang dipilih di properti langganan.

Dengan mengatakan "dokumen dan referensi" kami menyederhanakan banyak hal, karena pada kenyataannya Anda dapat menggunakan begitu banyak objek yang berbeda. Satu kelemahannya adalah Anda tidak dapat berlangganan acara formulir.

Jumlah peristiwa yang dapat Anda pilih tergantung pada objek itu sendiri. Anda harus sangat berhati-hati, karena jika Anda memilih banyak objek, hanya kejadian yang dapat dimiliki oleh setiap objek yang dipilih yang akan ditampilkan dalam daftar. (Kejadian yang umum untuk semua objek yang dipilih).


Setelah menyelesaikan semua langkah ini, tinggal membuat fungsi handler. Untuk melakukan ini, Anda harus memiliki modul umum dalam konfigurasi, di mana tanda centang ditempatkan di sebelah item "Utara". Saat Anda mengklik tombol kaca pembesar, fungsi handler akan dibuat.

Kami dapat berlangganan semua dokumen ke acara "Sebelum Menulis". Sekarang fungsi tersebut akan dijalankan saat menulis dokumen apa pun di mana cek didaftarkan. Jika ceknya negatif, maka untuk menolak menulis dokumen, Anda perlu mengatur parameter fungsi
Penolakan = Benar.

Ketika pengguna mengklik tombol tertentu, formulir terbuka atau tertutup, sebuah dokumen ditulis - sebuah peristiwa terjadi.

Sebelum menulis setiap dokumen, kami ingin memeriksa apakah atribut ini terisi.

Bagaimana cara melakukannya?

Berlangganan ke acara 1C

Langganan acara 1C terletak di cabang konfigurasi acara Umum / Berlangganan 1C.

Berlangganan ke acara 1C memungkinkan Anda untuk menetapkan penangan ketika suatu peristiwa terjadi untuk beberapa objek (direktori, dokumen).

Mari tambahkan langganan baru ke acara 1C, atur namanya.

Di sumber properti langganan acara 1C - Anda harus memilih satu atau lebih dokumen, direktori - objek tempat kami meletakkan pawang.

Di acara properti langganan acara 1C Acara - Anda harus memilih salah satu opsi untuk acara standar yang dapat terjadi dengan dokumen dan direktori yang dipilih.

Kami menyederhanakan dengan mengatakan "dokumen dan direktori" - sebenarnya, banyak objek 1C dapat digunakan. Sayangnya, Anda tidak dapat berlangganan acara formulir 1C - misalnya, saat membuka formulir, yang disesali oleh banyak pemrogram.

Himpunan kejadian yang mungkin tergantung pada objeknya. Hati-hati, karena jika Anda memilih beberapa (banyak) objek, maka daftar peristiwa hanya akan berisi peristiwa yang dapat dimiliki oleh masing-masing objek yang dipilih (yaitu, peristiwa umum untuk semua objek yang dipilih).

Setelah itu, tinggal membuat fungsi handler. Untuk melakukan ini, konfigurasi harus memiliki kotak centang Server dicentang di properti. Saat Anda mengklik tombol kaca pembesar, sebuah fungsi akan dibuat - sebuah handler.

Semua! Kami baru saja berlangganan acara 1C PreWrite untuk semua dokumen. Sekarang, saat menulis dokumen apa pun, fungsi kami akan dieksekusi, di mana cek ditulis.

Untuk menolak menulis dokumen jika ceknya negatif, Anda perlu mengatur parameter fungsi

Saat bekerja dengan basis informasi 1C, seringkali menjadi perlu untuk mengikat algoritma baru ke suatu peristiwa yang terkait dengan perubahan dalam suatu objek. Dalam versi 7 program, untuk menjalankan handler, perlu untuk menulis ulang kode sumber program, yang menyebabkan masalah saat memperbarui konfigurasi.

Setelah menganalisis umpan balik pengguna, pengembang G8 mengimplementasikan objek baru yang disebut "Langganan Acara". Pada artikel ini kami akan mencoba mengungkapkan:

  • Pengaturan berlangganan;
  • Penciptaan;
  • Fitur berfungsi.

Buat langganan baru

Seperti objek metadata lainnya, langganan ke acara di 1C ditambahkan dari konfigurator.

Elemen-elemen ini terletak di cabang pohon "Umum" (Gbr. 1).

Untuk menambahkan penangan baru:


Gbr.3

Untuk menghindari masalah dengan pembaruan, yang terbaik adalah pengembangan Anda sendiri untuk memiliki modul umum mereka sendiri, yang hanya akan berisi prosedur dan fungsi Anda.

Fitur fungsi langganan

Salah satu pertanyaan utama yang muncul untuk pengguna yang mulai bekerja dengan objek Langganan Acara adalah pertanyaan tentang urutan prosedur yang dipanggil. Seringkali, di sinilah letak kesalahan karena fakta bahwa prosedur tidak berfungsi atau bekerja setiap saat.

Pada contoh prosedur OnRecord() untuk dokumen apa pun, Anda dapat melihat urutan pemanggilan penangan.

Jadi, jika ada prosedur ini di modul objek dokumen, dan secara paralel dengan itu ada pemrosesan yang dipanggil dari langganan dan pemrosesan acara yang sama, modul dokumen akan diproses terlebih dahulu. Jika, selama eksekusi OnWrite() dalam modul dokumen, parameter Ditolak karena beberapa alasan disetel ke True, langganan dijamin tidak akan berfungsi.

Dalam kasus di mana ada beberapa objek langganan yang sama untuk satu sumber dan satu peristiwa, sangat sulit untuk melacak urutan eksekusi. Dan, jika selama eksekusi setidaknya satu handler, pengecualian muncul, beberapa prosedur akan tetap tidak dieksekusi.

Dengan demikian, urutan pemrosesan dapat ditentukan dengan skema berikut:

  1. Acara modul objek diproses;
  2. Langganan yang terkait langsung dengan tipe data saat ini diproses;
  3. Kode terikat ke tipe generik diproses.

Sangat penting untuk diingat bahwa dalam kasus apa pun kode yang mengubah data objek sumber tidak boleh dimasukkan ke dalam prosedur yang dieksekusi saat penulisan, ini dapat menyebabkan pengulangan yang tidak perlu. Lebih baik menggunakan kode serupa dalam prosedur BeforeWrite.

Formulir pengendali acara terbuka

Meningkatkan popularitas formulir yang dikelola, yang digunakan dalam versi 8 program, serta masalah yang terkait dengan memperbarui objek ini sambil menyimpan perubahannya sendiri, mengarah pada fakta bahwa, mulai dari platform 8.2.15, acara ProcessingFormReceive muncul di program. Di sinilah Anda dapat menyisipkan kode yang mengubah dan mengganti formulir standar.

Beberapa fitur penangan ini:

  • Acara tidak akan berfungsi jika konfigurasi dibuka ketik formulir dijabarkan secara ketat;
  • Acara hanya dapat diimplementasikan untuk formulir yang dikelola;
  • Modul umum, yang berisi penangan ini, tidak hanya harus memiliki atribut "Server", tetapi juga berisi kotak centang di bidang "Panggilan server".

Penting untuk mempertimbangkan bahwa langganan ini dipanggil bukan untuk objek tertentu, tetapi untuk pengelolanya, yaitu, bidang sumber harus berisi kata ini (Gbr. 4)

Gbr.4

Menyimpulkan hal di atas, saya ingin mengatakan bahwa "Berlangganan Acara" adalah alat yang sangat berguna dan diperlukan untuk pengembang, yang memungkinkan Anda untuk mengimplementasikan tujuan dan sasaran Anda sendiri tanpa intervensi serius dalam konfigurasi.

Artikel ini adalah pengumuman fungsionalitas baru.
Tidak disarankan untuk menggunakan konten artikel ini untuk mempelajari fungsionalitas baru.
Deskripsi lengkap fungsionalitas baru akan disediakan dalam dokumentasi untuk versi masing-masing.
Daftar lengkap Perubahan dalam versi baru disediakan dalam file v8Update.htm.

Diimplementasikan dalam EDT versi 1.7.0.567.

Di 1C:Enterprise Development Tools (EDT) kami menerapkan prototipe alat baru. Judul kerja alat ini adalah Editor Semua langganan acara. Ini akan membantu Anda dengan mudah menganalisis langganan ke semua acara yang ada dalam solusi aplikasi.

Langganan Acara

Platform 1C:Enterprise memungkinkan Anda membuat langganan peristiwa objek konfigurasi dalam solusi aplikasi. Langganan adalah prosedur yang akan dijalankan setelah pengendali acara asli dieksekusi. Kenyamanan berlangganan terletak pada kenyataan bahwa satu prosedur dapat "berlangganan" ke acara milik objek konfigurasi yang berbeda. Jadi, jika ada algoritme yang perlu dijalankan baik saat merekam organisasi dan saat merekam departemen, itu dapat ditempatkan dalam langganan, dan Anda bahkan tidak perlu mengubah penangan untuk acara ini di objek itu sendiri. .

Ternyata berlangganan adalah mekanisme yang nyaman dan universal. Tetapi dalam solusi aplikasi besar, jumlah langganan acara dapat mencapai beberapa ratus. Menjadi tidak nyaman untuk menganalisisnya di pohon konfigurasi, dalam daftar linier. Misalnya, dalam solusi yang diterapkan 1C: Manajemen Perusahaan (ERP) lebih dari 340 langganan acara.

EDT membuatnya sedikit lebih mudah untuk bekerja dengan langganan dengan menunjukkannya di panel Skema ketika modul objek aplikasi apa pun dibuka.


Tampilan langganan ini nyaman untuk sejumlah tugas yang terkait dengan pengeditan modul. Tetapi masih tidak cocok ketika Anda perlu dengan cepat menemukan dan menganalisis semua algoritme yang dijalankan dalam langganan ketika suatu peristiwa terjadi.

Semua langganan acara

Untuk menghilangkan ketidaknyamanan yang tercantum di atas, kami menerapkan cara universal representasi dari langganan, peristiwa, objek konfigurasi, dan prosedur yang mengimplementasikan algoritma langganan.


Akibatnya, Anda dapat menghubungi editor Semua langganan acara untuk seluruh konfigurasi, atau hanya untuk satu objek - perbedaannya hanya pada komposisi data yang difilter dalam beberapa cara.


Di sisi kiri, editor menampilkan semua acara, dan di setiap acara, semua langganannya. Saat langganan tertentu dipilih, daftar objek konfigurasi, acara tempat langganan "berlangganan", ditampilkan di kanan atas. Dan di kanan bawah, modul dan prosedur di mana algoritma berlangganan berada ditampilkan. Dengan mengklik dua kali pada prosedur, Anda dapat membukanya di editor bahasa bawaan.

Saat berada di editor, Anda tidak hanya dapat menganalisis langganan individual, tetapi juga semua langganan yang terkait dengan acara yang sama. Jika Anda memilih acara, editor akan menampilkan semua modul dan semua prosedur yang dilanggan untuk menangani acara ini.


Jika Anda memanggil editor untuk beberapa objek konfigurasi, hanya acara dan langganan objek tersebut yang akan ditampilkan, dan objek itu sendiri akan selalu disorot dengan warna merah dalam daftar sumber. Dengan demikian, Anda dapat dengan cepat memeriksa, misalnya, bahwa langganan yang Anda pilih berfungsi untuk semua objek konfigurasi yang memerlukannya.


Memanggil editor dengan perintah konteks(pada objek konfigurasi) memungkinkan Anda untuk segera mengurangi jumlah langganan yang ditampilkan di editor. Misalnya, Anda dapat melihat langganan hanya untuk peristiwa yang diproses di modul objek atau di modul pengelola.


Selain itu, editor berisi filter universal yang dengannya Anda dapat menyesuaikan komposisi objek, peristiwa, dan prosedur secara sewenang-wenang.


Perhatikan bahwa dengan filter ini, Anda tidak hanya dapat memilih objek tertentu yang merupakan sumber kejadian, tetapi juga kumpulan tipe, seperti DirektoriObjek, Objek Dokumen dan lain-lain. Kumpulan tipe tersebut mencakup semua direktori atau semua dokumen yang ada dalam konfigurasi.

Dengan pencarian string, Anda dapat dengan cepat menemukan hanya langganan yang berlaku untuk mesin yang Anda minati.


Kapan saja, Anda dapat dengan cepat memfilter konten berdasarkan acara atau sumber yang ditampilkan di editor. Misalnya, Anda menemukan langganan Periksa Perhitungan Rumus. Sumbernya adalah rencana jenis perhitungan memegang.


Dengan bantuan perintah kontekstual pada rencana tipe perhitungan, Anda dapat dengan cepat melihat hanya langganan yang terkait dengan acaranya.


Penambahan breakpoints secara otomatis

Salah satu cara umum untuk menganalisis langganan acara adalah dengan melihat secara berurutan semua prosedur yang dipanggil dalam debugger sesuai urutan eksekusinya. Untuk melakukan ini, editor menyediakan alat yang mudah digunakan untuk menambahkan breakpoint secara otomatis ke penangan.

Pertama-tama, Anda dapat memanggil alat ini langsung di editor.


Anda dapat menemukan dan memilih objek yang Anda minati, memilih salah satu acaranya, dan menandai, misalnya, semua penangan. Setelah menekan Oke breakpoints akan ditambahkan ke baris pertama yang dapat dieksekusi dari setiap handler yang diperiksa, dan semua breakpoint ini akan muncul di panel Breakpoint dalam perspektif Men-debug.


Cara lain untuk menambahkan breakpoint adalah nyaman ketika Anda telah menemukan objek atau acara yang Anda minati di editor. Dalam hal ini, dari menu konteks Anda dapat memanggil perintah yang cocok untuk Anda.


Dan terakhir, cara ketiga yang bisa Anda gunakan adalah menambahkan breakpoint secara otomatis yang sudah dalam proses debugging. Dalam hal ini, Anda tidak perlu membuka editor, karena perintah add terletak langsung di panel Breakpoint.


Jadi editornya Semua langganan acara adalah alat serbaguna yang memungkinkan Anda menggunakan berbagai skenario analisis. Ini akan berguna tidak hanya untuk pengembang yang mengetahui solusi yang diterapkan dengan baik, tetapi juga untuk spesialis implementasi atau spesialis TI yang perlu berurusan dengan fungsionalitas yang tidak dikenal.