04.07.2023
Rumah / Menguasai PC / Di mana modul manajer 1s. Modul umum. Gunakan kembali opsi

Di mana modul manajer 1s. Modul umum. Gunakan kembali opsi

Apa itu modul dan untuk apa modul itu sebenarnya? Modul berisi kode program. Selain itu, perlu dicatat bahwa, tidak seperti platform 7.7, di mana kode dapat ditempatkan baik di properti elemen formulir maupun di sel tabel tata letak, di platform 8.x, setiap baris kode harus ditempatkan dalam beberapa modul. Biasanya, modul terdiri dari tiga bagian - bagian untuk menjelaskan variabel, bagian untuk menjelaskan prosedur dan fungsi, dan bagian untuk program utama. Struktur ini tipikal untuk hampir semua modul platform, dengan beberapa pengecualian. Beberapa modul tidak memiliki bagian deklarasi variabel dan bagian program utama. Misalnya, Modul Sesi dan Modul Umum apa pun.

Konteks eksekusi modul umumnya dibagi menjadi konteks klien dan server. Selain itu, beberapa modul dapat dikompilasi baik di sisi klien maupun di sisi server. Dan beberapa murni sisi server atau sisi klien. Jadi:

Modul aplikasi

Modul ini dirancang untuk menangkap momen peluncuran aplikasi (memuat konfigurasi) dan penyelesaiannya. Dan di acara terkait, Anda dapat mengatur prosedur verifikasi. Misalnya, di awal aplikasi, perbarui data referensi konfigurasi apa pun, di akhir pekerjaan, tanyakan apakah perlu meninggalkannya sama sekali, mungkin hari kerja belum berakhir. Selain itu, mencegat acara dari peralatan eksternal, seperti peralatan perdagangan atau fiskal. Perlu dicatat bahwa modul aplikasi mencegat peristiwa yang dijelaskan hanya dalam kasus peluncuran interaktif. Itu. ketika jendela program itu sendiri dibuat. Ini tidak terjadi jika aplikasi diluncurkan dalam mode koneksi com.

Ada dua modul aplikasi berbeda di platform 8.2. Ini adalah modul Aplikasi Umum dan modul Aplikasi Terkelola. Mereka dipicu ketika klien yang berbeda dimulai. Beginilah cara modul aplikasi terkelola diaktifkan saat klien web, klien tipis, dan klien tebal diluncurkan dalam mode aplikasi terkelola. Dan modul aplikasi reguler dipicu saat klien tebal diluncurkan dalam mode aplikasi normal.

Semua bagian dapat ditempatkan di modul aplikasi - deskripsi variabel, prosedur dan fungsi, serta deskripsi program utama. Modul aplikasi dikompilasi di sisi klien, jadi ini sangat membatasi kami dalam ketersediaan berbagai jenis data. Anda dapat memperluas konteks modul aplikasi dengan metode modul bersama yang memiliki kumpulan properti Call Server. Semua variabel dan metode yang ditandai sebagai ekspor akan tersedia di setiap modul konfigurasi sisi klien. Namun, meskipun menggoda, itu tidak boleh diposting di sini sejumlah besar metode. Semakin banyak kode yang dikandungnya, semakin lama waktu kompilasi, dan akibatnya, waktu startup aplikasi, yang sangat mengganggu pengguna.

Seperti disebutkan di atas, modul aplikasi menangani acara awal dan akhir aplikasi. Untuk menangani setiap kejadian ini di modul aplikasi, ada beberapa penangan Before ... dan When ... Perbedaan di antara keduanya adalah ketika kode di handler Before ... dieksekusi, aksinya belum terjadi dan kita dapat menolak untuk melaksanakannya. Inilah gunanya opsi Penolakan. Di penangan Aktif, tindakan telah dilakukan, dan kami tidak dapat menolak untuk meluncurkan aplikasi atau keluar darinya.

Modul koneksi eksternal

Tujuan modul mirip dengan tujuan modul aplikasi. Ini menangani titik awal dan akhir aplikasi. Modul koneksi eksternal dipicu saat aplikasi diluncurkan dalam mode koneksi-kom. Proses gabung luar itu sendiri bukanlah proses interaktif. Dalam mode ini, program bekerja dengan basis informasi dan jendela aplikasi tidak terbuka, yang memberlakukan batasan tertentu pada penggunaan metode yang dimaksudkan untuk pekerjaan interaktif. Dalam mode ini, Anda tidak dapat menggunakan panggilan formulir dialog, pesan peringatan, dll. Mereka tidak akan bekerja.

Seperti pada modul aplikasi, bagian untuk mendeskripsikan variabel, metode, dan bagian untuk program utama tersedia di sini. Anda juga dapat mendeklarasikan variabel dan metode ekspor. Perbedaannya adalah bahwa dalam mode com-connection, semua pekerjaan dengan infobase terjadi di sisi server, sehingga modul koneksi eksternal dikompilasi secara eksklusif di server. Karenanya, variabel ekspor dan metode modul klien umum tidak tersedia di dalamnya.

modul sesi

Ini adalah modul yang sangat terspesialisasi dan ditujukan semata-mata untuk inisialisasi parameter sesi. Mengapa Anda perlu membuat modul sendiri untuk ini? Ini karena proses inisialisasi mungkin memerlukan eksekusi beberapa kode, dan selain itu, aplikasi dapat diluncurkan di bawah klien yang berbeda (yang mengarah pada eksekusi modul aplikasi yang berbeda atau modul koneksi eksternal), dan parameter sesi harus diinisialisasi dalam mode peluncuran apa pun. Oleh karena itu, diperlukan modul tambahan, yang dijalankan dalam mode peluncuran aplikasi apa pun.

Ada satu peristiwa "SetSessionParameters" dalam modul sesi, yang dipicu paling awal, bahkan sebelum peristiwa BeforeSystemStart modul aplikasi. Itu tidak memiliki bagian deklarasi variabel dan bagian program utama. Dan juga tidak mungkin untuk mendeklarasikan metode ekspor. Modul ini dikompilasi di sisi server.

Hindari godaan bahwa modul ini dijalankan setiap kali aplikasi diluncurkan, dan tempatkan di dalamnya kode yang tidak terkait langsung dengan inisialisasi parameter sesi. Hal ini disebabkan fakta bahwa handler SetSessionParameters dapat dipanggil berulang kali selama pengoperasian sistem. Misalnya, ini terjadi saat kami mengakses parameter yang tidak diinisialisasi. Dan meskipun dimungkinkan untuk menangkap momen peluncuran pertama acara ini (RequiredParameters memiliki tipe Undefined), namun, perlu dicatat bahwa modul ini dikompilasi dalam mode istimewa, mis. itu tidak mengontrol hak akses. Dan poin kedua, kami masih belum bisa seratus persen yakin bahwa sistem tersebut akan diluncurkan. Tiba-tiba, modul aplikasi gagal, dan kami mencoba melakukan beberapa tindakan dengan database.

Modul umum

Modul dimaksudkan untuk menjelaskan beberapa algoritma umum yang akan dipanggil dari modul konfigurasi lainnya. Modul umum tidak berisi bagian deklarasi variabel dan bagian program utama. Anda dapat mendeklarasikan metode ekspor di dalamnya, konteks aksesibilitasnya akan ditentukan oleh flag kompilasi. Karena bagian deklarasi variabel tidak tersedia, tidak mungkin mendefinisikan variabel global dalam modul bersama. Untuk melakukan ini, Anda perlu menggunakan fungsi modul umum dengan caching nilai balik atau modul aplikasi. Perlu diingat bahwa meskipun properti reuse dari modul umum disetel ke "Selama sesi", maka dalam hal ini masa pakai nilai yang di-cache tidak melebihi 20 menit dari saat mereka terakhir diakses.
Perilaku modul bersama tergantung pada parameter yang ditetapkan (global atau tidak, berbagai tanda kompilasi, apakah panggilan server tersedia, dll.). Dalam artikel ini, kami tidak akan mempertimbangkan semua jenis pengaturan, serta fitur perilaku dan jebakan yang muncul saat bendera properti disetel secara tidak wajar. Ini adalah topik untuk artikel terpisah. Mari kita bahas beberapa poin saja yang harus diikuti saat memasang bendera:

  • Merupakan aturan praktis yang baik untuk tidak menggunakan bendera "Global" di mana-mana. Ini akan mengurangi waktu startup aplikasi, serta meningkatkan keterbacaan kode (tentu saja, jika modul umum memiliki nama yang sangat bermakna).
  • Tidak disarankan untuk menggunakan lebih dari satu flag kompilasi. Tidak banyak metode yang perlu dilakukan dalam konteks yang berbeda, dan jika metode tersebut tetap diperlukan, maka modul umum yang terpisah dapat dialokasikan untuk metode tersebut.
  • Bendera "Panggil Server" hanya bermakna jika modul dikompilasi "Di server". Oleh karena itu, semua flag kompilasi lainnya harus dihapus untuk menghindari berbagai masalah.
  • Jika metode modul digunakan untuk pemrosesan data massal, membaca dan menulis ke database, maka untuk meningkatkan kecepatan kerja, lebih baik menonaktifkan kontrol akses dengan menyetel bendera "Privileged". Mode ini hanya tersedia untuk modul bersama yang dikompilasi di server.

Modul formulir

Ini dimaksudkan untuk memproses tindakan pengguna, mis. berbagai peristiwa yang terkait dengan entri data dan pemrosesan kebenaran entri mereka. Modul formulir reguler dikompilasi sepenuhnya pada klien. Modul formulir yang dikelola dibatasi dengan jelas oleh konteks eksekusi, sehingga semua variabel dan metode harus memiliki arahan kompilasi. Jika arahan tidak ditentukan secara eksplisit, maka variabel atau metode ini akan dikompilasi di sisi server. Dalam modul formulir, tersedia bagian untuk mendeskripsikan variabel dan metode, serta bagian untuk program utama.

modul objek

Modul ini tipikal untuk banyak objek konfigurasi dan dimaksudkan, secara umum, untuk memproses peristiwa objek. Misalnya event menulis dan menghapus objek, event posting dokumen, dll.

Beberapa kejadian modul objek menggandakan kejadian modul formulir. Misalnya, peristiwa yang berkaitan dengan catatan. Namun perlu dipahami bahwa event dari modul form hanya akan dieksekusi pada objek form tertentu. Secara umum, mungkin ada beberapa bentuk ini. Dan peristiwa modul objek akan dipanggil dalam hal apa pun, bahkan saat ini kerja program dengan sebuah objek. Oleh karena itu, jika perlu mengeksekusi beberapa kode dalam semua kasus, lebih baik menggunakan event modul objek untuk ini.

Modul objek dikompilasi secara eksklusif di server. Di dalamnya, Anda dapat menentukan variabel dan metode ekspor yang akan tersedia di modul konfigurasi lainnya. Dengan bantuan properti dan metode ini, kami dapat memperluas fungsionalitas objek secara signifikan.

Modul pengelola objek

Modul ini ada untuk banyak objek konfigurasi. Tujuan utama dari modul ini adalah untuk mendefinisikan kembali peristiwa pemilihan standar yang terjadi pada saat input per baris dan untuk memperluas fungsionalitas manajer. Modul ini dikompilasi di sisi server. Dimungkinkan untuk menentukan properti dan metode ekspor. Memanggil metode ekspor manajer tidak memerlukan pembuatan objek itu sendiri.

Untuk semua hal di atas, Anda dapat menambahkan gambar beberapa modul konfigurasi dan cara untuk saling memanggil metode dalam mode aplikasi terkelola. Panah menunjukkan arah di mana Anda dapat memanggil metode yang sesuai. Seperti dapat dilihat dari diagram, konteks server benar-benar tertutup. Tetapi dari konteks klien, dimungkinkan untuk mengakses metode server.

Simbol pada skema: O.M. Klien - modul umum Klien; OM Server - Modul umum server; M.F. Klien - Klien prosedur modul formulir; M.F. Server - Prosedur server dari modul formulir.

Modul perangkat lunak berisi kode yang dapat dieksekusi dalam bahasa 1C, yang diperlukan untuk merespons dengan cara tertentu terhadap tindakan sistem atau pengguna ketika alat pengembangan visual tidak cukup. Juga dalam modul program kita dapat menjelaskan metode kita sendiri (prosedur dan fungsi).

Biasanya, modul perangkat lunak terdiri dari tiga bagian:

  • area deklarasi variabel;
  • area deskripsi prosedur dan fungsi;
  • teks utama program.

Contoh struktur modul program:

//********************* AREA DEKLARASI VARIABEL *************************

Ekspor Nama Keluarga Rem; / / ini adalah variabel global
Nama Variabel, Patronimik; // ini adalah variabel modul
Ganti Nama; //ini juga merupakan variabel modul dan dapat diakses

// dari setiap prosedur dan fungsi modul kami

//*************** PROSEDUR DAN FUNGSI DESKRIPSI AREA ****************

Prosedur Prosedur1 ()
Jumlah Variabel ; / /Total adalah variabel lokal (variabel prosedur)

Total = Nama Belakang + "" + Nama Depan + " "+ Patronimik;

Prosedur Akhir

Fungsi Fungsi1 ()

// pernyataan fungsi

Kembali(Nama belakang + " " + Nama depan);

Fungsi Akhir

//*************************** TEKS UTAMA PROGRAM ********************** *

Nama keluarga = "Ivanov";
Nama = "Ivan";
Nama tengah = "Ivanovich";

//******************************************************************************

Dalam modul program tertentu, salah satu area mungkin tidak ada.
Lingkup deklarasi variabel ditempatkan dari awal teks modul ke pernyataan pertama dari Prosedur atau pernyataan Fungsi atau pernyataan yang dapat dieksekusi. Bagian ini hanya dapat berisi pernyataan deklarasi variabel.

Deskripsi area prosedur dan fungsi ditempatkan dari pernyataan pertama Prosedur atau pernyataan Fungsi ke pernyataan yang dapat dieksekusi di luar tubuh deklarasi prosedur atau fungsi.

Area teks program utama ditempatkan dari pernyataan pertama yang dapat dieksekusi di luar badan prosedur atau fungsi hingga akhir modul. Bagian ini hanya dapat berisi pernyataan yang dapat dieksekusi. Area teks utama program dieksekusi pada saat inisialisasi modul. Biasanya, di bagian program utama, masuk akal untuk menempatkan pernyataan untuk menginisialisasi variabel dengan beberapa nilai spesifik yang harus ditetapkan sebelum panggilan pertama ke prosedur atau fungsi modul.

Modul program terletak di tempat-tempat tersebut dalam konfigurasi yang mungkin memerlukan deskripsi algoritme operasi tertentu. Algoritme ini harus dirancang sebagai prosedur atau fungsi yang akan dipanggil oleh sistem itu sendiri dalam situasi yang telah ditentukan sebelumnya (misalnya, saat membuka formulir referensi, saat mengklik tombol di kotak dialog, saat mengubah objek, dll.).

Setiap modul program terpisah dirasakan oleh sistem secara keseluruhan, sehingga semua prosedur dan fungsi modul program dijalankan dalam satu konteks.

Konteks eksekusi modul dibagi menjadi konteks klien dan server. Selain itu, beberapa modul perangkat lunak dapat dikompilasi baik di sisi klien maupun di sisi server.

Modul aplikasi (terkelola atau reguler)

Modul aplikasi menjelaskan prosedur (penangan) kejadian yang diinisialisasi pada awal dan akhir sistem. Misalnya, ketika Anda memulai aplikasi, Anda dapat memperbarui beberapa data konfigurasi, dan ketika Anda keluar, Anda dapat menanyakan apakah Anda harus keluar dari program sama sekali. Selain itu, modul ini mencegat peristiwa dari peralatan eksternal, seperti peralatan perdagangan atau fiskal. Perlu dicatat bahwa modul aplikasi dijalankan hanya jika aplikasi diluncurkan secara interaktif, yaitu saat jendela program diluncurkan. Ini tidak terjadi jika aplikasi diluncurkan dalam mode sambungan bersama.
Ada dua modul aplikasi berbeda di platform 1C 8. Ini adalah modul Aplikasi Umum dan modul Aplikasi Terkelola. Mereka dipicu ketika klien yang berbeda dimulai. Misalnya, modul Aplikasi Terkelola dipicu saat klien web, klien tipis, dan klien tebal diluncurkan dalam mode aplikasi terkelola. Dan modul aplikasi reguler dipicu saat klien tebal diluncurkan dalam mode aplikasi normal. Pengaturan mode peluncuran aplikasi diatur dalam properti konfigurasi "Mode peluncuran utama".

Modul aplikasi dapat berisi 3 bagian - deklarasi variabel, deskripsi prosedur dan fungsi, serta teks utama program. Modul aplikasi dikompilasi di sisi klien, yang sangat membatasi kami untuk menggunakan banyak jenis data. Anda dapat memperluas konteks modul aplikasi dengan metode modul bersama yang memiliki kumpulan properti Call Server. Semua variabel dan metode modul program aplikasi yang ditandai sebagai ekspor akan tersedia di setiap modul konfigurasi sisi klien. Namun, meskipun menggoda, Anda tidak boleh menempatkan banyak prosedur dan fungsi di sini. Semakin banyak kode dalam modul tertentu, semakin lama waktu kompilasi, dan akibatnya, waktu mulai aplikasi.

Seperti disebutkan di atas, modul aplikasi menangani acara awal dan akhir aplikasi. Untuk menangani setiap kejadian ini di modul aplikasi, ada beberapa penangan Before ... dan When ... Perbedaan antara keduanya adalah sebagai berikut: ketika kode di handler Before ... dijalankan, aksinya memiliki belum terjadi dan kami dapat menolak untuk melaksanakannya. Inilah gunanya opsi Penolakan. Di penangan Aktif, tindakan telah dilakukan, dan kami tidak dapat menolak untuk meluncurkan aplikasi atau keluar darinya.

Modul koneksi eksternal

  • dapat berisi semua 3 area
  • terletak di bagian root dari konfigurasi

Tujuan modul mirip dengan tujuan modul aplikasi. Ini menangani acara awal dan akhir aplikasi. Modul koneksi eksternal dipicu saat aplikasi diluncurkan dalam mode koneksi-kom. Proses gabung luar itu sendiri bukanlah proses interaktif. Dalam mode ini, pekerjaan terprogram dengan basis info terjadi dan jendela aplikasi tidak terbuka, yang memberlakukan batasan tertentu pada penggunaan metode yang dimaksudkan untuk pekerjaan interaktif. Dalam mode ini, Anda tidak dapat menggunakan panggilan ke formulir dialog, peringatan dan pesan kepada pengguna, dll. Mereka tidak akan lari.

Seperti dalam modul aplikasi, ketiga area tersedia di sini: deklarasi variabel, deskripsi prosedur dan fungsi, serta teks utama program. Perbedaan utama dari modul aplikasi adalah bahwa dalam mode koneksi-kom, semua pekerjaan dengan basis informasi terjadi di sisi server, sehingga modul koneksi eksternal dikompilasi di sisi server. Karenanya, variabel ekspor dan metode modul klien umum tidak tersedia di dalamnya.

modul sesi

  • dilakukan di sisi server
  • terletak di bagian root dari konfigurasi

Ini adalah modul yang sangat khusus yang dirancang semata-mata untuk menginisialisasi parameter sesi. Mengapa Anda perlu membuat modul sendiri untuk ini? Penggunaannya disebabkan oleh fakta bahwa aplikasi itu sendiri dapat diluncurkan berbagai mode(menyebabkan modul aplikasi terkelola, modul aplikasi normal, atau modul koneksi luar untuk dijalankan), dan parameter sesi harus diinisialisasi terlepas dari mode startup. Agar tidak menulis kode program yang sama di ketiga modul ini, kami membutuhkan modul tambahan yang dijalankan terlepas dari mode peluncuran aplikasi.

Ada satu peristiwa "SetSessionParameters" dalam modul sesi, yang dipicu paling awal, bahkan sebelum peristiwa PreSystemBegin modul aplikasi. Itu tidak memiliki bagian deklarasi variabel dan bagian program utama. Dan juga tidak mungkin untuk mendeklarasikan metode ekspor. Modul ini dikompilasi di sisi server.

Modul umum

  • mungkin berisi area untuk menjelaskan prosedur dan fungsi
  • dieksekusi di sisi server atau klien (tergantung pada pengaturan modul)
  • terletak di cabang pohon objek konfigurasi "Umum" - "Modul Umum"

Modul umum dimaksudkan untuk menjelaskan beberapa algoritma umum yang akan dipanggil dari modul konfigurasi lainnya. Modul umum tidak berisi area deklarasi variabel dan badan program. Anda dapat mendeklarasikan metode ekspor di dalamnya, ketersediaannya akan ditentukan oleh pengaturan modul (di sisi mana dieksekusi: di sisi server atau klien). Karena bagian deklarasi variabel tidak tersedia, tidak mungkin mendefinisikan variabel global dalam modul bersama. Anda dapat menggunakan modul aplikasi untuk ini.

Perilaku modul bersama tergantung pada parameter yang ditetapkan (global atau tidak, berbagai tanda kompilasi, apakah panggilan server tersedia, dll.). Berikut ini beberapa kiat untuk menyiapkan modul bersama:

Merupakan praktik yang baik untuk tidak menggunakan bendera "Global" di mana pun. Ini akan mengurangi waktu startup aplikasi, serta meningkatkan keterbacaan kode (tentu saja, jika modul umum memiliki nama yang sangat bermakna);
- Tidak dianjurkan untuk menggunakan lebih dari satu tanda kompilasi. Tidak banyak metode yang perlu dilakukan dalam konteks yang berbeda, dan jika metode tersebut tetap diperlukan, maka modul umum yang terpisah dapat dialokasikan untuknya;
- flag "Panggilan server" masuk akal hanya jika modul dikompilasi "Di server". Oleh karena itu, semua flag kompilasi lainnya harus dihapus untuk menghindari berbagai masalah;
- jika dalam metode modul ada pemrosesan data secara massal, membaca dan menulis ke database, maka untuk meningkatkan kecepatan kerja, lebih baik menonaktifkan kontrol akses dengan menyetel bendera "Privileged". Mode ini hanya tersedia untuk modul bersama yang dikompilasi di server.

Modul formulir

  • dapat berisi semua 3 area
  • dilakukan di sisi server dan klien

Modul formulir dirancang untuk menangani tindakan pengguna dengan formulir ini (menangani peristiwa klik tombol, mengubah atribut formulir, dll.). Ada juga peristiwa yang berkaitan langsung dengan bentuk itu sendiri (misalnya pembukaan atau penutupannya). Modul formulir terkelola dan modul formulir reguler berbeda terutama karena modul formulir terkelola dipisahkan dengan jelas ke dalam konteks. Setiap prosedur atau fungsi harus memiliki arahan kompilasi. Jika arahan kompilasi tidak ditentukan, maka prosedur atau fungsi ini dijalankan di sisi server. Dalam bentuk biasa, semua kode dijalankan di sisi klien.

Struktur formulir terkelola berisi bagian deklarasi variabel, deskripsi prosedur dan fungsi, dan isi program (dieksekusi saat formulir diinisialisasi). Kami dapat mengakses acara formulir standar melalui daftar prosedur dan fungsi yang diharapkan dari formulir (Ctrl+Alt+P), atau melalui palet properti dari formulir itu sendiri.

Jika atribut utama ditetapkan ke formulir, maka properti dan metode objek aplikasi yang digunakan sebagai atribut utama akan tersedia di modul formulir.

modul objek

  • dapat berisi semua 3 area
  • dilakukan di sisi server

Modul ini tersedia untuk sebagian besar objek konfigurasi dan dimaksudkan, secara umum, untuk memproses event yang terkait langsung dengan objek. Misalnya, peristiwa merekam dan menghapus objek, memeriksa detail objek yang diisi, memposting dokumen, dll.

Beberapa kejadian modul objek menggandakan kejadian modul formulir. Misalnya, peristiwa yang berkaitan dengan catatan. Namun perlu dipahami bahwa event modul form hanya akan dieksekusi pada form tertentu dari objek, yaitu saat form tertentu dibuka. Dan peristiwa modul objek akan dipanggil dalam hal apa pun, bahkan pada saat program bekerja dengan objek tersebut. Oleh karena itu, jika Anda memerlukan metode yang terkait dengan objek tanpa terikat pada bentuk objek tertentu, lebih baik menggunakan modul objek untuk ini.

Modul pengelola objek

  • dapat berisi semua 3 area
  • dilakukan di sisi server

Modul pengelola objek hanya muncul mulai dari versi 1C 8.2. Modul manajer ada untuk semua objek aplikasi dan dirancang untuk mengelola objek ini sebagai objek konfigurasi. Modul manajer memungkinkan Anda untuk memperluas fungsionalitas suatu objek dengan memperkenalkan (menulis) prosedur dan fungsi yang tidak berlaku untuk instance tertentu dari objek database, tetapi untuk objek konfigurasi itu sendiri. Modul pengelola objek memungkinkan Anda menempatkan prosedur dan fungsi umum untuk objek tertentu dan mengaksesnya dari luar, misalnya, dari pemrosesan (tentu saja, jika prosedur atau fungsi ini menggunakan kata kunci Ekspor). Apa yang baru ini berikan kepada kita? Secara umum, tidak lain adalah mengatur prosedur berdasarkan objek dan menyimpannya di tempat terpisah - Modul Pengelola Objek. Kami juga dapat menempatkan prosedur dan fungsi ini dalam modul umum, tetapi 1C menyarankan untuk menempatkan prosedur dan fungsi umum objek dalam Modul Pengelola Objek. Contoh penggunaan prosedur dan fungsi Modul Pengelola Objek: pengisian awal detail individu direktori atau dokumen dalam kondisi tertentu, pengecekan pengisian detail direktori atau dokumen dalam kondisi tertentu, dll.

Modul perintah

  • mungkin berisi bagian yang menjelaskan prosedur dan fungsi
  • dieksekusi di sisi klien

Perintah adalah objek yang berada di bawah objek aplikasi atau konfigurasi secara keseluruhan. Setiap perintah memiliki modul perintah di mana Anda dapat menjelaskan prosedur CommandProcess() yang telah ditentukan sebelumnya untuk menjalankan perintah tersebut.

Setiap program terdiri dari kode program, yaitu sebenarnya dari urutan tindakan yang ditulis dalam bahasa apa pun yang harus dilakukan.

Namun, program ini harus ditulis di suatu tempat, yaitu harus ditempatkan di suatu tempat. Dalam kebanyakan kasus, kode program ditulis dalam file teks biasa. Satu-satunya perbedaan adalah ekstensi di dalamnya bukan .txt, tetapi .cpp atau .php.

Di mana program 1C ditulis?

Apa itu Modul 1C?

Tentu saja, kode 1C juga dapat ditulis dalam beberapa file teks. Namun, ada konsep Konfigurasi 1C - yang tidak hanya mencakup daftar pengaturan, templat formulir, dan lainnya, tetapi juga kode program 1C. Oleh karena itu, kode 1C disimpan dalam konfigurasi.

Konfigurasinya terdiri dari objek 1C, seperti yang telah kita bahas di pelajaran sebelumnya. Setiap objek 1C berisi objek bersarang, misalnya direktori memiliki beberapa bentuk.

Setiap objek 1C, termasuk beberapa yang bersarang, memiliki Modulnya sendiri - tertentu file teks, yang berisi kode program.

Ada juga modul yang tidak tergantung objek di mana kode program yang tidak tergantung pada objek tertentu dapat ditulis.

Jadi, di 1C tidak ada program "tunggal". Ada satu set modul untuk menulis kode program untuk setiap objek konfigurasi 1C.

Bagaimana Modul 1C digunakan?

Seluruh program secara kasar dapat dibagi menjadi dua jenis:

  • Metode objek
  • Reaksi terhadap peristiwa.

Metode. Seperti yang kami katakan sebelumnya, objek 1C adalah struktur integral yang mencakup data dan metode untuk memprosesnya. Metode-metode ini adalah sekumpulan tindakan (metode) yang dapat dipanggil untuk memproses data. Contoh tindakan seperti itu DirectoryObject.Write() – menulis elemen direktori ke database.

Metode banyak objek 1C dapat menjadi standar (yaitu, diprogram dalam platform 1C) dan ditulis oleh programmer dalam bahasa 1C. Dengan bantuan yang terakhir, Anda dapat memperluas fungsionalitas objek 1C sesuai keinginan.

Acara. Acara ditemukan di banyak alat pengembangan lainnya. Tujuan dari program ini tidak hanya untuk menghitung sesuatu saat startup, tetapi juga untuk mendukung pekerjaan pengguna.

Acara pengguna - pengguna menekan tombol. Sebagai tanggapan, beberapa bagian dari kode akan dieksekusi, bereaksi terhadap tindakan pengguna.

Peristiwa sistem - kami menulis objek 1C ke database. Peristiwa sistem "Rekam objek" telah terjadi. Dimungkinkan untuk mengonfigurasi reaksi yang akan terjadi pada peristiwa yang disebabkan bukan oleh pengguna (yang menekan tombol atau melakukan hal lain), tetapi oleh sistem itu sendiri. Contoh mencolok dari peristiwa semacam itu adalah saat program dimulai.

Urutan eksekusi modul 1C

Dalam banyak bahasa ada yang namanya "titik masuk". Ini adalah baris atau fungsi pertama yang akan dijalankan saat program dimulai.

Ada beberapa titik masuk seperti itu di 1C - untuk setiap jenis klien. Artinya, saat memulai klien tebal, titik masuknya adalah satu, saat memulai klien tipis, itu adalah hal lain. Ini memungkinkan Anda untuk memprogram fitur yang berbeda jenis yang berbeda klien.

Titik masuk dalam modul yang sesuai adalah masing-masing penangan kejadian sistem BeforeSystemStart() dan AtSystemStart() (yaitu, secara berurutan). Fungsi-fungsi ini dijalankan terlebih dahulu, mereka dapat memulai sesuatu secara otomatis.

Jika tidak ada yang diluncurkan secara otomatis, antarmuka 1C terbuka di depan pengguna dan kemudian semuanya bergantung padanya. Dia mengklik tombol - pengendali untuk menekan tombol ini dijalankan (yang, pada gilirannya, juga dapat memulai sesuatu secara otomatis).

Bekerja dengan modul 1C

Diproduksi di konfigurator. Anda dapat membuka modul menggunakan jendela Konfigurasi.

Hampir semua objek konfigurasi memiliki modul pengelola, dan untuk sebagian besar objek, modul objek. Seringkali programmer pemula tidak memahami perbedaan tujuan dari kedua modul ini.

Memahami perbedaan tujuan mereka memungkinkan Anda untuk menulis kode program yang strukturnya lebih benar, dan dalam beberapa kasus menghemat sumber daya server 1C dan meningkatkan kinerja solusi aplikasi.

Dalam artikel ini, kami akan mempertimbangkan perbedaan mendasar antara modul-modul ini baik dari sisi teoretis maupun dari contoh praktis tertentu.

Teori

Mari beralih ke dasar-dasar pemrograman berorientasi objek (OOP) dan menggambar analogi dengan contoh kita. Dalam OOP, metode pada objek dapat dibagi menjadi statis (statis) dan sederhana. Metode Sederhana hanya dapat dipanggil pada objek tertentu yang dapat kita akses dalam konteks kode saat ini. Metode statis tidak memiliki akses langsung ke data objek. Untuk mengakses sebuah objek, pertama-tama Anda harus membuat turunannya. Hal yang sama berlaku untuk platform 1C:Enterprise 8.x.

Dalam modul objek, platform menyimpan prosedur dan fungsi yang hanya dapat dipanggil saat bekerja dengan objek tertentu, misalnya dengan objek elemen referensi "Nomenklatur". Modul manajer berisi prosedur dan fungsi yang dapat diterapkan ke semua objek dari tipe tertentu, tetapi dengan pembuatan awal dari objek ini. Artinya, untuk mengubah elemen nomenklatur dari modul ini, awalnya, untuk merujuk ke elemen tersebut, jalankan metode "GetObject ()" dan kemudian kerjakan di masa mendatang.

Mari beralih dari teori ke praktik.

Praktik

Mari beralih ke contoh praktis. Mari kita asumsikan bahwa kita perlu menyelesaikan masalah pencetakan daftar barang, pengguna mencetak produk baik langsung dari elemen direktori atau dari formulir daftar produk. Mari pertimbangkan dua cara untuk menyelesaikan tugas.

Prosedur cetak dalam modul objek

Dalam modul objek direktori, tambahkan fungsi berikutnya:

// Meneruskan referensi ke elemen direktori ke fungsi Fungsi PrintSelectedItems(Link) Ekspor TabDoc = TabDoc Baru; Tata Letak = Direktori. Barang-barang. GetLayout("Tata Letak" ); Permintaan = Permintaan Baru; Meminta. Teks = "PILIH | Item . Presentasi SEBAGAI Barang,| Barang-barang . Tandai Hapus,| Barang-barang . Kode vendor |DARI| Direktori . Produk AS Produk| DI MANA | Barang-barang . Tautan B(& ItemsArray)" ; Request.SetParameter(" Array Barang " , Referensi); // Tetapkan pilihan dengan referensi

Kode program dibuat sepenuhnya oleh perancang cetak. Satu-satunya hal yang perlu diperhatikan adalah ditampilkan dengan mengacu pada elemen direktori "Produk" dalam permintaan. Referensi diteruskan sebagai parameter ke fungsi. Sebagai hasil dari pemanggilan fungsi "PrintSelectedItems" akan dikembalikan dokumen spreadsheet dengan item yang diisi.

Kode program untuk memanggil metode objek "PrintSelectedProducts" pada perintah formulir "Print" disajikan dalam daftar berikut:

& Cetak Prosedur OnClient (Perintah) // Panggil prosedur server untuk mendapatkan dokumen spreadsheet yang dihasilkan TabDoc = PrintServer() ; // Tampilkan dokumen spreadsheet yang dihasilkan TabDok. Menunjukkan() ; EndProcedure & Fungsi OnServer PrintServer() // Ubah objek formulir menjadi objek direktori "Produk" untuk memanggil fungsi dari modul objek ItemObject = FormAttributeToValue("Objek" ) ; // Panggil prosedur modul objek, lewati referensi ke elemen kamus saat ini. Hasil // kembali ke sisi klien Kembalikan ObjekItem. PrintSelectedItems(Object.Reference) ; Fungsi Akhir

Jadi, kami mencetak elemen direktori saat ini, bekerja dengan objeknya. Namun dalam tugas tersebut dikatakan mencetak daftar produk yang harus dipilih sendiri oleh pengguna. Saat bekerja dengan suatu objek, tidak mungkin memberi pengguna kesempatan seperti itu dengan cara yang sederhana. Akan lebih tepat untuk mencetak dari daftar elemen direktori "Barang".

Prosedur cetak dalam modul manager

Tambahkan prosedur ekspor berikut ke modul manajer direktori:

// Melewati array tautan ke produk Fungsi PrintSelectedItems(ItemsArray) Export TabDoc = New SpreadsheetDocument; Tata Letak = Direktori. Barang-barang. GetLayout("Tata Letak" ); Permintaan = Permintaan Baru; Meminta. Teks = "PILIH | Item . Presentasi SEBAGAI Barang,| Barang-barang . Tandai Hapus,| Barang-barang . Kode vendor |DARI| Direktori . Produk AS Produk| DI MANA | Barang-barang . Tautan B(& ItemsArray)" ; Request.SetParameter(" Item Array " , Item Array) ; // Tetapkan filter berdasarkan larik Hasil = Permintaan. Jalankan (); AreaTitle = Tata Letak. GetRegion("Judul" ); AreaFooter = Tata Letak. GetRegion("Basmen" ); Area TableHeader = Tata Letak. GetArea("Tajuk Tabel" ); AreaFooterTables = Tata Letak. GetRegion("TableFooter" ); AreaDetailRecords = Tata Letak. GetRegion("Detail" ); TabDok. Jernih() ; TabDok. Keluaran(Header Area) ; TabDok. Keluaran(RegionTableHeader) ; TabDok. StartAutoGroupRows() ; SampleDetailRecords = Hasil. Memilih() ; Sementara Sampling Catatan Detil. Berikutnya() LoopDetailRecordsArea. Pilihan. Isi(SelectionDetailRecords); TabDok. Output(RegionDetailRecords, SelectionDetailRecords.Level() ); Siklus Akhir ; TabDok. EndAutoGroupRows() ; TabDok. Keluaran(RegionFooterTables) ; TabDok. Keluaran(AreaFooter) ; Kembalikan TabDoc; Fungsi Akhir

Perbedaan utama dari fungsi dalam modul objek adalah parameter fungsi. Sekarang, larik dengan tautan ke produk yang perlu dicetak diteruskan sebagai parameter.

Kode program modul perintah formulir "Cetak" adalah sebagai berikut:

& Pada Prosedur Klien Cetak(Perintah) TabDoc = PrintServer() ; TabDok. Menunjukkan() ; EndProcedure & Fungsi OnServer PrintServer() // Meneruskan larik tautan dari produk yang dipilih dalam daftar pencarian // ke fungsi modul manajer "PrintSelectedItems". Kembalikan Buku Pegangan. Barang-barang. PrintSelectedItems(Items. List. Selected Lines); Fungsi Akhir

Dalam hal ini, hasil dari menjalankan perintah dalam 1C:Mode Perusahaan adalah sebagai berikut:

Dalam hal menggunakan metode dari modul manajer, kita dapat mengakses data katalog "Produk" tanpa mendapatkan objek untuk setiap tautan. Karena mendapatkan objek berarti mendapatkan semua data dari database dengan elemen direktori dan menempatkan data yang diterima dalam RAM, implementasi tugas dengan cara kedua akan berdampak positif pada kinerja. Memang, dalam hal ini, kami akan menggunakan sumber daya minimum ( memori akses acak) dari mesin server.

Apa yang harus digunakan?

Seperti biasa, semuanya tergantung pada tugas tertentu. Jika Anda ingin mencetak dokumen, lebih banyak pilihan terbaik- gunakan modul manajer. Jika Anda perlu mengisi objek, misalnya, pemrosesan eksternal isian bagian tabular, maka dalam hal ini lebih baik menempatkan prosedur dan fungsi dalam modul objek, karena pekerjaan mereka melibatkan persis dengan objek.

Dalam konfigurasi tipikal "Manajemen Perdagangan" versi 11, modul manajer untuk mencetak dokumen digunakan di mana-mana. Jika Anda melihat konfigurasi "Manajemen Perusahaan Produksi", maka modul manajer praktis tidak digunakan, karena konfigurasi tersebut ditulis dalam versi platform yang lebih lama, di mana tidak ada dukungan penuh untuk mekanisme ini.

Konfigurasi dengan contoh dari artikel.

Cetak (Ctrl+P)

Objek yang terletak di cabang pohon konfigurasi Modul umum dirancang untuk memuat teks fungsi dan prosedur yang dapat dipanggil dari modul konfigurasi lainnya.
PERHATIAN! Modul generik hanya dapat berisi definisi prosedur dan fungsi.
Prosedur dan fungsi modul umum yang ditunjukkan oleh header kata kunci Ekspor adalah salah satu komponen dari konteks global. Anda dapat mempelajari lebih lanjut tentang prosedur penulisan dalam modul umum di bagian "Format teks sumber modul program" dan "Operator" dari 1C:Bantuan bahasa perusahaan.
Untuk mengedit modul umum, di palet properti objek dari jenis modul Umum di jendela Konfigurasi, di properti Modul, klik tautan Buka. Teks modul umum akan dikeluarkan untuk diedit di 1C: Editor teks perusahaan dalam mode pengeditan teks modul program.
Modul umum, sebagai bagian dari konfigurasi, disimpan hanya sebagai bagian dari konfigurasi.
Properti Global menentukan apakah metode yang diekspor dari modul bersama merupakan bagian dari konteks global.
Jika properti Global disetel ke True, maka metode yang diekspor dari modul bersama tersedia sebagai metode konteks global.
Jika properti Global disetel ke False, maka properti dibuat dalam konteks global dengan nama yang sesuai dengan nama modul bersama di metadata. Properti ini bersifat hanya baca. Nilai properti ini adalah objek GenericModule. Melalui objek ini, metode yang diekspor dari modul umum ini tersedia. Jadi, mengakses metode modul bersama non-global terlihat seperti XXXXX.YYYYY, di mana XXXXX adalah nama properti yang sesuai dengan konteks modul bersama, dan YYYYY adalah nama metode ekspor modul bersama.
Contoh:

WorkWithTradeEquipment.ConnectBarcodeScanner();

Berbagai konteks dan modul umum

Menggunakan properti modul umum dan instruksi praprosesor, Anda dapat mengatur eksekusi berbagai metode modul umum dalam konteks yang tepat.
Setiap properti modul umum bertanggung jawab atas kemampuan untuk mengkompilasi (dan mengeksekusi) modul umum dalam konteks tertentu.
Properti berikut tersedia, yang bertanggung jawab atas konteks di mana metode modul bersama tersedia:
Klien ( aplikasi reguler) – metode modul umum akan tersedia untuk klien tebal dalam mode aplikasi normal;
● – metode modul umum akan tersedia untuk klien tipis, klien web, dan juga untuk klien tebal
mode aplikasi terkelola;
● Server - metode modul umum akan tersedia di server;
Sambungan luar– metode modul umum akan tersedia di sambungan luar.
Jika beberapa properti disetel pada saat yang sama, ini berarti metode modul bersama akan tersedia dalam berbagai konteks.
Jika modul bersama memiliki properti Server dan kumpulan properti lainnya, ini berarti modul bersama akan tersedia di server dan di klien yang dipilih pada waktu yang sama. Pada saat yang sama, perlu dipahami bahwa sebenarnya akan ada beberapa varian dari kode yang dikompilasi (sesuai dengan jumlah klien yang dipilih dan untuk server itu sendiri).
Dalam hal ini, jika metode yang terletak di modul umum seperti itu dipanggil dari sisi klien, salinan klien dari modul umum akan digunakan, dan jika dari server, salinan server akan digunakan. Dalam hal ini, dengan menggunakan arahan preprosesor (untuk detail lebih lanjut, lihat di sini), Anda dapat "melindungi" server dari kode yang tidak dapat dijalankan di dalamnya.
Pertimbangkan sebuah contoh. Dalam modul bersama (yang dapat dijalankan pada klien kurus dan di server) ada metode yang memiliki perilaku yang sedikit berbeda di sisi klien tipis dan di sisi server. Mari kita lihat bagaimana ini bisa dilakukan:



#Jika ThinClient Kemudian
// Tampilkan peringatan
ShowAlertUser("Pada klien");
#Berakhir jika
Prosedur Akhir
Kemudian di sisi server, kodenya akan terlihat seperti ini:
Prosedur Metode CommonModule() Ekspor
// Berbagai kode penting ada di sini
Prosedur Akhir
Dan di sisi thin client, kodenya akan terlihat seperti ini:
Prosedur Metode CommonModule() Ekspor
// Berbagai kode penting ada di sini
// Tampilkan peringatan
ShowUserAlert("Pada Klien");
Prosedur Akhir

Ada beberapa cara untuk mentransfer kontrol dari klien ke server:
● memanggil metode modul umum server;
● dalam modul formulir atau perintah, panggil metode yang diawali dengan arahan kompilasi &DiServer, &DiServerTanpa Konteks

Namun, tidak mungkin memanggil metode modul umum klien (yang tidak memiliki set properti Server) dan metode klien modul formulir atau modul perintah dari prosedur server. Kontrol akan kembali ke klien setelah panggilan terluar ke metode server selesai.
Pengecualian adalah metode modul formulir dan modul perintah, yang didahului oleh arahan kompilasi &Di KlienDi Server, &Di KlienDi ServerTanpa Konteks
Poin-poin berikut juga harus disebutkan:
● Jika modul bersama tersedia untuk lebih dari satu klien, maka saat menulis kode, pertimbangkan batasan maksimum yang mungkin dikenakan klien, atau gunakan instruksi praprosesor untuk "mengisolasi" kode khusus klien.
● Instruksi preprosesor juga masuk akal saat modul umum memiliki beberapa konteks eksekusi, seperti koneksi eksternal dan thin client, atau (lebih umum) klien dan server. Dalam hal ini, instruksi preprosesor akan membungkus kode interaktif yang tidak dapat digunakan di server, tetapi dimungkinkan di klien (lihat contoh di atas).
Untuk informasi lebih lanjut tentang instruksi praprosesor dan arahan kompilasi, lihat bagian Eksekusi Prosedur dan Fungsi dari 1C:Bantuan Bahasa Perusahaan.
Properti Pemanggilan Server mengontrol apakah metode yang diekspor dari modul umum server dapat dipanggil dari kode klien.
Jika properti diatur, maka metode yang diekspor dari modul bersama sisi server tersedia untuk dipanggil oleh klien. Jika properti tidak disetel, maka metode yang diekspor tersebut hanya dapat dipanggil dari metode server (baik metode modul umum server maupun metode server dari modul formulir dan modul perintah).
Nasihat . Direkomendasikan agar Anda menyetel properti Server Invocation ke False jika modul umum sisi server berisi metode yang tidak ingin Anda panggil dari klien (untuk alasan keamanan, misalnya).
Catatan. Jika properti diatur pada waktu yang sama Klien (aplikasi reguler), Klien (aplikasi terkelola), Sambungan luar, maka properti Call Server secara otomatis diatur ulang. Jika properti Call server diatur, properti tersebut secara otomatis diatur ulang Klien (aplikasi reguler), Klien (aplikasi terkelola) Dan Sambungan luar jika properti ini ditetapkan pada waktu yang sama.
Properti Keistimewaan dirancang untuk menonaktifkan kontrol akses saat menjalankan metode modul umum.
CATATAN. Jika properti Keistimewaan diatur, maka properti Server secara otomatis diatur untuk modul umum dan properti lainnya diatur ulang ( Klien (aplikasi reguler), Klien (aplikasi terkelola) dan B koneksi eksternal). Modul bersama dengan hak istimewa hanya dapat berjalan di server.

Menggunakan kembali nilai pengembalian

Jika modul bersama tidak bersifat global, maka properti Reuse return values ​​akan tersedia. Properti ini dapat mengambil nilai berikut:
● Jangan gunakan - Nilai pengembalian tidak digunakan kembali untuk fungsi dalam modul bersama ini.
● Per Panggilan dan Per Sesi - Modul bersama menggunakan metode deteksi penggunaan ulang data. Inti dari metode ini terletak pada kenyataan bahwa selama eksekusi kode, sistem mengingat parameter dan hasil fungsi setelah pemanggilan fungsi pertama. Saat fungsi dipanggil lagi dengan parameter yang sama, nilai yang disimpan dikembalikan (dari panggilan pertama) tanpa menjalankan fungsi itu sendiri. Jika fungsi mengubah nilai parameter selama eksekusi, maka memanggil fungsi itu lagi tidak akan berhasil.
Fitur-fitur penyimpanan hasil panggilan berikut dapat dibedakan:
● jika fungsi dijalankan di server dan dipanggil dari kode server, maka nilai parameter dan hasil panggilan akan diingat untuk sesi saat ini di sisi server;
● jika fungsi dijalankan pada klien tebal atau tipis, maka nilai parameter dan hasil panggilan disimpan di sisi klien;
● jika fungsi dijalankan di sisi server dan dipanggil dari kode klien, maka nilai parameter panggilan akan diingat baik di sisi klien maupun di sisi server (untuk sesi saat ini).
Nilai tersimpan dihapus:
● jika properti disetel ke Selama durasi panggilan:
● di sisi server – saat kontrol dikembalikan dari server;
● di sisi klien – ketika 1C:Prosedur atau fungsi perusahaan tingkat atas berakhir (dipanggil oleh sistem dari antarmuka, dan bukan dari 1C:Prosedur atau fungsi perusahaan lainnya);
● jika properti modul bersama disetel ke Selama durasi sesi:
● di sisi server – di akhir sesi;
● di sisi klien – saat aplikasi klien ditutup.
Nilai yang disimpan akan dihapus:
● di server, di klien tebal, di koneksi eksternal, di klien tipis, dan di klien web dengan kecepatan normal koneksi - 20 menit setelah penghitungan nilai tersimpan atau 6 menit setelah penggunaan terakhir;
● di klien tipis dan klien web dengan kecepatan koneksi rendah - 20 menit setelah menghitung nilai tersimpan;
● saat ada kekurangan RAM dalam proses kerja server;
● saat memulai ulang alur kerja;
● Saat klien beralih ke alur kerja yang berbeda.
Setelah menghapus nilai, panggilan ke fungsi yang diekspor dilakukan seperti pada panggilan pertama.
Untuk melaksanakan prosedur properti yang diberikan modul umum tidak terpengaruh - prosedur selalu dijalankan.

Jika modul bersama memiliki set penggunaan kembali nilai pengembalian, ada sejumlah batasan pada tipe parameter dari fungsi yang diekspor. Jenis parameter hanya dapat berupa:
● Jenis primitif ( Tidak terdefinisi, NULL, Boolean, Angka, String, Tanggal).
● Setiap referensi ke objek database.
● Struktur dengan nilai properti dari jenis di atas. Dalam hal ini, identitas parameter dikontrol "oleh konten" dari struktur.
Jika fungsi yang diekspor mengembalikan objek apa pun, itu sebenarnya mengembalikan referensi ke objek yang disimpan dalam cache. Jika status objek berubah setelah menerima referensi ini, maka pemanggilan berikutnya ke fungsi yang sama akan mengembalikan referensi ke objek yang telah diubah tanpa benar-benar menjalankan fungsi tersebut. Perilaku ini akan berlanjut hingga nilai yang disimpan dihapus (untuk alasan apa pun). Dengan kata lain, mengubah status objek yang diperoleh sebagai hasil pemanggilan fungsi dari modul bersama dengan penggunaan kembali nilai kembalian bukanlah dasar untuk pemanggilan fungsi yang sebenarnya. Juga perlu diingat bahwa cache objek yang dikembalikan tidak peduli
keadaan mode istimewa pada saat pemanggilan fungsi dengan nilai pengembalian yang digunakan kembali. Fitur ini dapat menyebabkan perilaku berikut:
● Eksekusi sebenarnya dari pemanggilan fungsi dengan penggunaan kembali nilai kembalian (panggilan pertama) dilakukan dengan mengaktifkan mode hak istimewa.
● Saat menjalankan suatu fungsi, sebuah objek diterima yang tidak dapat diterima dengan mode hak istimewa dinonaktifkan.
● Panggilan selanjutnya ke fungsi dilakukan tanpa mengatur mode hak istimewa.
● Namun, hingga cache dari objek yang dikembalikan dihapus atau panggilan yang sebenarnya dilakukan lagi, fungsi akan mengembalikan objek yang secara formal tidak dapat diakses.
● Perilaku sebaliknya juga benar, di mana panggilan pertama dilakukan tanpa menyetel mode istimewa, dan mode istimewa tidak mengembalikan objek yang mungkin diperoleh dalam mode istimewa.

Jika modul umum memiliki properti Menggunakan kembali nilai pengembalian diatur ke Selama durasi sesi, maka nilai yang dikembalikan oleh fungsi modul semacam itu tidak dapat menggunakan nilai tipe Manajer Tabel Sementara.
Jika fungsi modul bersama, dengan set penggunaan ulang, dipanggil dari modul bersama yang sama (misalnya, dengan nama SharedModule ), maka Anda harus mengingat fitur berikut: jika fungsi dipanggil dengan nama MyFunction() , maka fungsi akan dieksekusi setiap kali fungsi dipanggil. Untuk menggunakan nilai tersimpan, fungsi harus dipanggil dengan nama yang memenuhi syarat:
GeneralModule.MyFunction().
Metode konteks global menghapus semua nilai yang digunakan kembali, baik sisi server maupun sisi klien, di mana pun metode tersebut dipanggil. Setelah menjalankan metode PerbaruiNilai yang Dapat Digunakan Kembali() panggilan fungsi pertama akan dieksekusi sepenuhnya.